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

TA3UIS

Doğan
Katılım
15 Kasım 2023
Mesajlar
3,149
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ı.
 

Çevrimiçi personel

Forum istatistikleri

Konular
9,360
Mesajlar
149,498
Üyeler
3,875
Son üye
amandA

Son kaynaklar

Back
Top