Sistemul dispune de un senzor de gaze al cărui output este analizat constant de către microcontroller. Acesta este dotat cu un buzzer pentru a semnala scurgerile de gaze sau fumul. De asemenea, sistemul dispune de 4 led-uri și un ecran folosite pentru a descrie concentrația exactă a gazului în încăpere. Cu cât concentrația gazului din încăpere crește, cu atât se vor aprinde mai multe led-uri. Pentru a evacua gazul/fumul din încăpere, detectorul dispune și de un ventilator.
Inițial, ventilatorul va fi stins, iar led-urile vor fi aprinse doar partial in functie de concentratia citita de senzor. Cu cat senzorul detecteaza mai mult gaz/fum, cu atat mai mult se vor aprinde led-urile. Daca în încăpere procentul de gaz este mai mare decat al aerului, toate led-urile se vor aprinde, buzzerul va începe să sune, iar ventilatorul va fi activat pentru a evacua gazul sau fumul din încăpere. Chiar daca valoarea scade sub threshold, ventilatorul va continua sa functioneze pana cand procentul scade iar la valori normale.
Conectare:
Ecran OLED - Arduino UNO R3:
Buzzer - Arduino UNO R3:
Ventilator - Arduino UNO R3:
Voi folosi si un tranzistor NPN pentru a ma putea asigura ca pot alimenta ventilatorul (acesta consuma 0.1-02A, iar pinul digital de Arduino poate oferi doar maxim 40mA pe pinul digital). La baza tranzistorului se foloseste o rezistenta de 470.
Senzor de gaz - Arduino UNO R3:
Am conectat pinul analog si nu si cel digital al senzorului deoarece sistemul trebuie sa masoare concentratia in ppm a gazului in incapere, si nu pot folosi pinul digital pentru masuratori mai exacte.
Led-uri - ESP32:
Am ales acesti pini deoarece au functionalitate PWN, iar sistemul trebuie sa controleze separat aprinderea fiecarui LED in functie de concentratia gazului. Pentru protejarea LED-urilor am folosit Rezistente de 150.
Se poate observa ca toate componentele sunt functionale. Pe ecranul OLED afisez concentratia (in ppm) citita de la senzorul de gaz, calibrata.
Functii implementate:
Librariile au fost foarte utile:
Am reusit sa obtin tot ce mi-am propus. Mai jos voi atasa un video pentru a arata cum functioneaza detectorul meu
Practic, in sensorul meu detecteaza la fiecare 500ms concentratia de gaz din jurul sau. Daca inputul de la sensor creste de aprox. 10, cum se observa si pe ecran, incepe alarma si ventilatorul este aprins. Daca sursa de gaz este inlaturata, atunci ventilatorul continua sa mearga pana cand concentratia scade sub un threshold mai safe (aprox 5).
Proiectul meu este destul de simplist, munca mea a fost usurata foarte mult de librariile pe care le-am putut gasi pentru piesele mele. Am intampinat cateva probleme in momentul in care trebuia sa-mi aleg componentele. De exemplu, initial voiam sa folosesc un ESP32 in locul Arduino-ului, insa am constatat ca pinii digitali dau doar 3.3V, in timp ce componentele mele aveau nevoie de 5V (sensorul si ventilatorul, nu am putut gasi un ventilator care sa functioneze cu 3.3V).
De asemenea, la ventilator am facut o greseala destul de mare initial: calculasem gresit curentul necesar pentru aprinderea lui. In timp ce el avea nevoie de 0.1-0.2A, pinii digitali nu aveau direct cum sa-i ofere decat vreo 20-40 mA (desi doar 20mA sunt recomandati). Asa ca a trebuit sa-mi comand si un tranzistor pentru a ma asigura ca pot folosi ventilatorul. O idee buna ar fi fost sa folosesc si o dioda pentru a proteja circuitul de tensiunea negativa care apare atunci cand opresc ventilatorul.
Alta mica dificultate pe care am intampinat-o a fost la partea de timere. Libraria pe care am ales-o foloseste timerul 1, care afecteaza pinii digitali PWM 9 si 10, pe care eu initial ii foloseam pentru controlul LED-urilor. In momentul in care foloseam timerul, observam un efect de flickering, si a trebuit sa schimb pinii digitali folositi (din fericire mai aveam 2 pini digitali PWM disponibili ).
Cat despre calibrarea senzorului, acesta are nevoie de cateva minute pana sa ofere citiri stabile (5-10 min).
Arhiva proiectului meu: gas_detect.zip
Aceasta arhiva contine partea de software si schemele folosite pentru cablaj.
Resurse software: