STM32F407 tabanlı, duman sensörü ile ortamı sürekli izleyen, tehlike anında servo motoru otomatik olarak acil pozisyona getiren ve buzzer ile uyaran tam otomatik yangın güvenlik sistemi.
Tüm sistem Core/Src/main.c içinde 4 mantıksal agent olarak modüler
şekilde ayrılmıştır.
| # | Agent | Sorumluluk |
|---|---|---|
| 1 | HARDWARE | delay_us, LCD sürücüsü, servo PWM, buzzer ton üretimi |
| 2 | SENSOR | ADC okuma + 3 kademeli gürültü filtresi |
| 3 | ACTUATOR | LCD ekran (yalnızca değişince güncelleme) |
| 4 | LOGIC | Durum makinesi, edge-detect debounce'lu butonlar |
| Bileşen | Pin | Mod |
|---|---|---|
| LCD RS | PD0 | Output |
| LCD EN | PD1 | Output |
| LCD D4-D7 | PD2-PD5 | Output |
| Servo PWM | PB6 | TIM4_CH1 (AF2) |
| Buzzer | PE11 | Output (passive, ton GPIO toggle ile) |
| Alarm LED | PE10 | Output |
| Manuel LED | PE9 | Output |
| Ana şalter | PA0 | Input pull-down, active-HIGH |
| Manuel + | PE7 | Input pull-down, active-HIGH |
| Manuel − | PE8 | Input pull-down, active-HIGH |
| Duman sensörü | PA5 | ADC1_CH5 |
- Başlatma — PA0'a basılır → sistem aktifleşir, servo 90°'ye konumlanır.
- İzleme — 250 ms'de bir ADC üzerinden duman okunur.
- Filtreleme — Eşik
> 500art arda 3 kez aşılırsa tehlike onaylanır. - Alarm — Buzzer kısa burst çalar, alarm LED yanar, LCD
Hava: KIRLI!. - Manuel — PE7/PE8 ile servo açısı her 15 ms'de 2°'lik adımlarla değişir.
- Kapanma — Tekrar PA0 → tüm çıkışlar pasif, LCD
Sistem Kapandi.
- Non-blocking ana döngü — ana şalter dahil hiçbir buton için
HAL_Delayya dawhile(button)busy-wait yok. Edge-detect + 50 ms timestamp debounce. - LCD diff update — servo açısı veya alarm durumu değişmedikçe LCD'ye yazılmıyor (titreme ve I/O yükü minimum).
- Servo write guard —
Servo_Ayarla()aynı açıya gelirse CCR'a yazmıyor. - DWT cycle counter —
delay_us()HAL'dan bağımsız, donanım sayaç. - Tek dosya — tüm sürücüler ve mantık
main.ciçinde; harici header gerekmez.
- Source Group:
Core/Src/main.c(tek dosya yeterli, lcd.c kullanılmıyor) - Servo kablosu: PB6'ya bağlanmalı (PD12 LCD_RS ile çakışırdı).