Alt Kattan Gelen Sigara Kokusuna Karşı Yaptığım Otomatik Fan Sistemi (ESP32-C3, SGP40, BLE)

  • Konbuyu başlatan Konbuyu başlatan TA3UIS
  • Başlangıç tarihi Başlangıç tarihi

TA3UIS

Katılımcı Üye
Katılım
14 Kas 2023
Mesajlar
129
Puanları
56
Uzun zamandır alt kattan/komşudan sigara gazı bazen ayda bir de olsa banyo penceresinden içeri sızıyordu, sigara ile ilgili her kokudan çok rahatsiz olduğumuz için ben de buna bir çözüm bulmaya karar verdim. ESP32-C3 tabanlı bir sistem kurdum, kokuyu algılayınca fanı otomatik çalıştırıyor.

Kullandığım donanım:

ESP32-C3
SGP40 VOC sensörü (Sensirion'un kendi Gas Index Algorithm kütüphanesiyle)
SHT30 sıcaklık/nem sensörü (hem izleme için hem de SGP40'ın sıcaklık/nem kompanzasyonu için)
Fanı tetiklemek için kendi kurduğum ayrı bir röle devresi kullanıyorum - ESP32 direkt bu devreyi sürüyor. Sonoff'u ise ayrı bir amaçla, fanı uzaktan ve Sonoff R5 anahtarıyla manuel kontrol edebilmek için kullanıyorum.
I2C: SDA=GPIO8, SCL=GPIO9, röle çıkışı GPIO4

Mantığı nasıl kurdum:

Her saniye sensörlerden okuma alıp VOC değerini hesaplıyorum. Eşik değerini (300) geçtiği an direkt fanı çalıştırmıyorum, çünkü kısa süreli anlık kokular (biri parfüm sıksa, kapı açılıp kapansa) yanlış alarma sebep oluyordu. Onun yerine 2 dakikalık bir "onay süresi" koydum - bu süre boyunca VOC hâlâ eşiğin üstünde kalıyorsa gerçek tetikleme oluyor.

Tetiklendiğinde kendi röle devreme 500ms'lik bir pulse gönderiyorum, bu da fanı fiziksel olarak devreye sokuyor. Ardından 20 dakikalık bir bekleme/kilit süresine giriyor, bu sırada yeni tetikleme yapmıyor. Fanın ne kadar süre çalışacağını (13 dk) fanın kendi zamanlayıcısı üzerinden yönetiyorum.

Durumlar şöyle akıyor: NORMAL = (VOC hızlı artarsa) YUKSELIYOR = (eşik aşılırsa) ONAY SAYACI = (2 dk boyunca eşik üstü kalırsa) ALARM/FAN = KILIT MODU = tekrar NORMAL.

Yazılım tarafında eklediklerim:

Telefondan BLE ile bağlanıp nRF Connect üzerinden canlı VOC/sıcaklık/nem takip edebiliyorum. Ayrıca birkaç komut yazdım: STATUS (anlık durum), STATS (toplam istatistikler), BUFFER (son 100 saniyenin VOC dökümü), FANLOG (son 20 tetiklemenin VOC geçmişi), AUTO ON/OFF (otomatik modu manuel kapatabiliyorum), RESETSTATS, TESTFAN (elle test).

Fan kaç kere çalıştı, en yüksek VOC ne oldu, toplam ne kadar süre çalıştı gibi istatistikleri flash hafızaya (NVS) yazıyorum ki reset atsa bile kaybolmasın. Ama her dakika yazmıyorum, flash'ı yormamak için bazı sayaçları 5 dakikada bir kaydediyorum.

Sensörle ilgili bir sorun olursa (I2C hattı takılırsa ya da sensör NaN dönerse) otomatik olarak I2C'yi resetleyip sensörleri yeniden başlatmayı deniyor, üst üste başarısız olursa da spam yapmadan 30 saniyede bir log basıyor.

Parametreler:

VOC eşiği: 300
Onay süresi: 2 dk
Kilit/bekleme süresi: 20 dk
Fan çalışma süresi: 13 dk
Sensör okuma: 1 sn'de bir

Karşılaştığım zorluklar:

İlk başta aldığım SGP40 hava kalitesi modülünde sensör çipi arızalı çıktı. Modülü ESP32-C3 üzerinde hem Adafruit'in hem de Sensirion'un resmi kütüphaneleriyle defalarca test ettim, ama sonuç değişmedi:

I2C haberleşmesi tamamen sorunsuzdu, hat üzerinde herhangi bir hata yoktu.
Sensör sürekli raw=65535 değeri döndürüyordu, hiçbir gaz algılamıyordu.
Self-test komutunda da beklenen cevap yerine tamamen farklı bir cevap dönüyordu.
Aynı I2C hattına bağlı SHT31 sıcaklık/nem sensörü ise kusursuz çalışıyordu - yani sorun I2C hattında/yazılımda değil, doğrudan SGP40 çipinin kendisindeydi.

Tüm bu test verilerine ve bulgulara rağmen durumu aldığım yere ilettiğimde ürünü değişim/iade kapsamına almayı reddetti, ben de sorunu kendim çözmek zorunda kaldım. Özdisan'dan direkt Sensirion SGP40 sensör çipini tedarik ettim, arızalı çipi modülden söküp yerine yenisini lehimledim. Böylece modülün geri kalanını (regülatör, pull-up dirençleri vs.) kullanmaya devam edebildim - yenisini taktıktan sonra sensör normal şekilde çalışmaya başladı.
 
Devrenin bir kaç fotosunu çektim, ilgilenenler için fikir verir belki.

Güç işini HLK-PM01 modülüyle hallettim. Adaptörle, kablo kalabalığıyla uğraşmadan direk 220'yi buna giriyorum, bana 5V veriyor.
220V kısmında izolasyona yardımcı olması için göründüğü üzere sıcak silikon sıktım.

Röle tarafında ESP32-C3'ün pini tek başına röleyi çekmeye yetmediği için, ben de araya bir transistör bc557 koydum, anahtarlamayı o yapıyor. Bir de rölenin yanına diyot ekledim(flyback diyot), röle bırakırken karta ters voltaj bindirip ESP'yi yakmasın diye.

Fanın 220 yükünü komple Sonoff'a bıraktım. Bizim devredeki rölenin çıkışını sağdaki klemens ile Sonoff’un S1 ve S2 uçlarına bağladım. Yani bizim ESP32, koku eşiği aşılınca aslında Sonoff’un düğmesine basıyormuş gibi davranıyor. Fanın yüküyle, yüksek akımıyla bizim devre uğraşmıyor kuru kontak tetik veriyor.

Modüller ve ESP32 dişi headerler ile pertinaksa lehimledim, böylece program atmak istediğimde soketten çıkarıp takmam çok basitleşmiş oldu.


WhatsApp Image 2026-09-07 at 22.32.42 (1).webpWhatsApp Image 2026-09-07 at 22.32.42.webp
 
Son düzenleme:
Ben sensörü merak ettim.
Muhtemelen duman sensörüdür, ancak hassasiyeti konusunda fikrim yok.
 

Forum istatistikleri

Konular
133,386
Mesajlar
971,057
Kullanıcılar
459,246
Son üye
mtuncturk

Yeni konular

Çevrimiçi üyeler

Geri
Üst