This is an old revision of the document!
Gas and Smoke Detector
AUTOR: Buduran Cătălina-Andreea, 333CA
Introducere
Prezentarea pe scurt a proiectului:
Proiectul este un detector de gaz/fum și flacără care monitorizează calitatea aerului într-un spațiu închis și declanșează avertizări sonore și vizuale în cazul detectării unor niveluri periculoase de fum sau gaze inflamabile, transmițând starea atmosferei spre un database hostat pe PC.
Scopul proiectului este prevenirea accidentelor casnice prin detectarea timpurie a scurgerilor de gaz sau a începuturilor de incendii, oferind un sistem de alertă rapid și accesibil.
Ideea de la care am pornit este necesitatea de a avea un sistem de siguranță accesibil pentru locuințe, în special în apartamente sau case care nu sunt dotate cu senzori de fum/gaz integrați, reducând pericolele.
Este util pentru alții, deoarece crește siguranța în locuințe, oferind un mijloc ieftin de prevenire a tragediilor cauzate de scurgeri de gaz sau incendii. Pentru noi, proiectul este o oportunitate de a pune în practică cunoștințele hardware și software dobândite, aplicate într-un context real și relevant.
Descriere generală
Componentele detectorului:
Senzor analogic de gaz/fum MQ-2
Senzor de flacără
Buzzer – emite avertizări sonore când e detectat gaz/fum/flacără
LCD display – afișează mesaje relevante: „Normal”, „Fum detectat”, „Gaz detectat”
Cablu USB – pentru trimiterea datelor în laptop (UART)
LED-uri de culoare roșu și verde – roșu se aprinde la detecție, verde când aerul este curat
2 Rezistențe 220 kOhm pentru cele 2 Led-uri
Schemă Bloc:
Modul în care interacționează componentele:
Senzor MQ-2 (gaz/fum) - trimite către Arduino un semnal analogic proporțional cu concentrația de gaz/fum;
Senzor de flacără (cu 4 pini) - trimite semnal analogic sau digital dacă detectează flacără în apropiere;
Arduino UNO - centrul de control, primește semnale de la senzori, decide în funcție de praguri și trimite comenzi către buzzer, LED-uri și LCD. Comunică și cu laptopul;
LCD 16×2 cu I2C - afișează mesaje relevante, în funcție de senzorii activați;
Buzzer pasiv - activat de Arduino prin semnal PWM dacă este detectat gaz/fum/flacără, pentru a emite un semnal sonor de avertizare;
LED roșu / LED verde - LED-ul roșu se aprinde când e detectat pericol, cel verde când nu este detectat nimic;
Laptop - primește date de la Arduino prin UART (prin cablu USB)
Schemă electrică:
Descriere detaliată și justificată a pinilor:
Pin utilizat: A1
Tip pin: Analog IN
Justificare: Modulul MQ-2 are ieșire AO (analog out), oferă tensiune proporțională cu concentrația gazului sau fumului.
Pin utilizat: D9
Tip pin: Digital IN
Justificare: Senzorul are ieșire digitală (DO), care devine LOW când detectează flacără. Se citește cu digitalRead(D9).
Pin utilizat: D6
Tip pin: Digital OUT
Justificare: Fiind un buzzer pasiv, trebuie controlat cu semnal de frecvență(PWM).
Pin utilizat: D8
Tip pin: Digital OUT
Justificare: Aprins când se detectează flacără, gaz sau fum.
Pin utilizat: D11
Tip pin: Digital OUT (are și PWM, dar nu e necesar aici)\
Justificare: Se aprinde doar când nu e niciun pericol. Pentru a folosi conceptul de PWM o să afișez cu diferite intensități culorile.
Pini utilizați: A4 (SDA), A5 (SCL)
Tip pini: Interfață I2C dedicată
Justificare: Pe Arduino UNO, pinii A4 și A5 sunt cei dedicați comunicației I2C. M-am documentat și acestea sunt recomandate pentru a nu avea un Wire.begin(sda, scl) forțat.
5V: toate componentele sunt compatibile cu 5V și pot fi alimentate direct de la Arduino.
GND: fiecare componentă e conectată la masă comună, foarte important pentru funcționarea stabilă.
Hardware Design
Componentă | Funcție | Observații | Link achiziție | Datasheet |
Senzor MQ-2 | Detectare gaz/fum | Ieșire analogică | Optimus MQ-2 | MQ-2 PDF |
Senzor flacără | Detectare flacără | Ieșire analogică/digitală | Optimus Flacără | Senzor flacără |
LCD 16×2 I2C | Afișare mesaje | Comunicare I2C | LCD I2C | LCD |
Buzzer pasiv | Alertă sonoră | Controlat prin PWM | Buzzer pasiv | Buzzer |
LED roșu | Aprins la detecție | Pin digital | LED roșu | LED Roșu |
LED verde | Aprins când aerul e curat | Pin digital | LED verde | LED Verde |
Cablu USB | Transmitere date către laptop (UART) | Comunicare serială | Cablu USB | Cablu USB |
Arduino UNO | Microcontroler – control principal | Comunică cu toate componentele (senzori, buzzer, LED-uri, LCD) prin pini digitali, analogici și I2C. Rulează codul principal. | Arduino UNO | Arduino UNO |
Breadboard | Platformă de conectare fără lipire | Permite conectarea rapidă a componentelor. Distribuie 5V și GND către toată rețeaua | Breadboard | Breadboard |
Fire tată-tată | Conectare între componente și Arduino | Asigură conexiuni electrice fără lipire. Leagă pinii Arduino de senzori, buzzer, LED-uri | Fire tată-tată | - |
Proiectul este funcțional și implementează următoarele:
Toate funcționalitățile sunt scrise cu acces direct la registre (PORTx, DDRx, ADC, UART, PWM)
Proiectul meu nu folosește biblioteci externe Arduino. Toate funcționalitățile (PWM, UART, ADC, GPIO) au fost implementate folosind registre directe ale microcontrolerului ATmega328P, deoarece reflectă înțelegerea profundă a hardware-ului, dar și corelare directă cu conceptele din laborator. Proiectul este scris exclusiv cu registre AVR, fără funcții Arduino. Toate componentele hardware sunt controlate la nivel de low-level, iar proiectul este calibrat și funcțional pe o placă compatibilă Arduino.
Calibrarea senzorilor
Pentru gaz: am stabilit empiric un prag de detecție la > 300 (valoare ADC), testând cu bricheta sau fum de chibrit.
Pentru flacără: senzorul returnează LOW la detecție, iar pragul este binar (nu necesită calibrare).
Calibrarea s-a realizat comparând valorile UART în condiții de aer curat vs. poluat.
Optimizări realizate
Folosirea directă a registrelor elimină funcții costisitoare (ex: analogRead(), tone()), reducând latențele
PWM activat doar la nevoie, apoi complet dezactivat pentru a evita zgomot rezidual
UART rulează asincron, neblocant pentru restul logicii
Bucla principală are un delay controlat pentru a nu satura UART-ul și pentru a permite actualizări corecte
Laborator | Temă | Funcționalitate folosită în proiect |
Laboratorul 0 | GPIO | Control LED roșu (D8) și LED verde (D11), citire senzor flacără (D9) prin `PINB` | |
Laboratorul 1 | UART | Trimitere valori citite de la senzorii de gaz și flacără către laptop prin UART | |
Laboratorul 3 | Timere și PWM | Generare sunet buzzer prin Timer0 în modul Fast PWM pe pinul PD6 (`TCCR0A`, `OCR0A`) | |
Laboratorul 4 | ADC | Citire analogică de la senzorul MQ-2 (gaz/fum) prin canalul | |
Laboratorul 6 | I2C | LCD I2C | |
Explicarea codului:
Componentă | Funcție din cod | |
Buzzer (PWM) | `pwm_start()` și `pwm_stop()` | Pornește/oprește semnalul sonor generat pe pinul D6 prin Timer0 (Fast PWM) |
Senzor gaz (ADC) | `adc_init()` și `citeste_adc()` | Inițializează convertorul analog-digital și citește tensiunea de la MQ-2 |
Serial (UART) | `uart_init()`,`uart_transmit()`,`uart_print()`,`uart_print_number()` | Trimite mesaje către laptop prin USB pentru a vizualiza starea senzorilor |
LED-uri și senzori | în `main()` | LED verde/roșu indică stare normală/pericol. Senzor flacără (digital pe D9) |
Interacțiunea dintre funcționalități
Senzorul de flacără (D9 - PB1): citit ca digital
1) == 0) → dacă flacără detectată, devine true.
Senzorul de gaz (A1 - ADC1): se citește analog cu funcția citeste_adc() → dacă valoarea depășește pragul 300, se consideră pericol.
LED-urile: LED roșu (D8 - PB0) aprins dacă există pericol (gaz sau flacără), LED verde (D11 - PB3) aprins în mod normal
Buzzerul: e pornește doar dacă e detectat pericol → se activează PWM prin pwm_start(), care setează Timer0 în Fast PWM cu frecvență de 2kHz
UART: trimite în fiecare ciclu starea citită: “Gaz: 364 | Flacara: 1” către laptop
Validarea funcționării
LED-uri: verificate vizual în funcție de condiții (roșu la pericol, verde normal)
Buzzer: testat auditiv că pornește doar când e gaz sau flacără, și se oprește complet altfel
UART: testat în laptop, dacă laptopul primește date
Senzor gaz: testat cu o brichetă – valorile cresc în UART, buzzer și LED roșu se activează
Senzor flacără: testat apropiind flacără - detectare instantanee
Export to PDF