- Senzor de gaz MQ6
- Cum se măsoară PPM folosind senzori de gaz MQ?
- Componente necesare
- Schematic
- Senzor MQ cu programare PIC
Senzorii de gaz din seria MQ sunt tipuri foarte frecvente de senzori utilizați în detectoarele de gaz pentru a detecta sau măsura anumite tipuri de gaze. Acești senzori sunt utilizați pe scară largă în toate dispozitivele legate de gaz, de la detectoare simple de fum la monitoare industriale de calitate a aerului. Am folosit deja acești senzori de gaz MQ cu Arduino pentru a măsura unele gaze dăunătoare, cum ar fi amoniacul. În acest articol, vom învăța cum să folosim acești senzori de gaz cu microcontrolerele PIC, pentru a măsura valoarea PPM a gazului și a-l afișa pe un ecran LCD de 16x2.
După cum sa menționat mai devreme, există diferite tipuri de senzori din seria MQ disponibili pe piață și fiecare senzor poate măsura diferite tipuri de gaze așa cum se arată în tabelul de mai jos. În scopul acestui articol, vom folosi senzorul de gaz MQ6 cu PIC care poate fi utilizat pentru a detecta prezența și concentrația gazului GPL. Cu toate acestea, prin utilizarea aceluiași hardware și firmware pot fi utilizați și alți senzori din seria MQ fără modificări majore în partea de cod și hardware.
Senzor | Detectează |
MQ-2 | Metan, butan, GPL, fum |
MQ-3 | Alcool, etanol, fum |
MQ-4 | Metan, gaz CNG |
MQ-5 | Gaz natural, GPL |
MQ-6 | GPL, gaz butan |
MQ-7 | Monoxid de carbon |
MQ-8 | Hidrogen gazos |
MQ-9 | Monoxid de carbon, gaze inflamabile. |
MQ131 | Ozon |
MQ135 | Calitatea aerului (benzen, alcool, fum) |
MQ136 | Gaz sulfurat de hidrogen |
MQ137 | Amoniac |
MQ138 | Benzen, toluen, alcool, acetonă, propan, gaz formaldehidic, hidrogen |
MQ214 | Metan, gaz natural |
MQ216 | Gaz natural, gaz cărbune |
MQ303A | Alcool, etanol, fum |
MQ306A | GPL, gaz butan |
MQ307A | Monoxid de carbon |
MQ309A | Monoxid de carbon, gaze inflamabile |
MG811 | Dioxid de carbon (CO2) |
AQ-104 | Calitatea aerului |
Senzor de gaz MQ6
Imaginea de mai jos prezintă diagrama pinului senzorului MQ6. Cu toate acestea, imaginea din stânga este un senzor MQ6 bazat pe module pentru interfațarea cu unitatea de microcontroler, diagrama pin a modulului este, de asemenea, prezentată în acea imagine.
Pinul 1 este VCC, pinul 2 este GND, pinul 3 este ieșirea digitală (logică scăzută atunci când este detectat gazul) și pinul 4 este ieșirea analogică. Oala este utilizată pentru a regla sensibilitatea. Nu este RL. Rezistorul RL este rezistorul potrivit al LED-ului DOUT.
Fiecare senzor din seria MQ are un element de încălzire și o rezistență de detectare. În funcție de concentrația gazului, rezistența de detectare se schimbă și prin detectarea rezistenței la schimbare, concentrația gazului poate fi măsurată. Pentru a măsura concentrația de gaz în PPM, toți senzorii MQ oferă un grafic logaritmic, care este foarte important. Graficul oferă o imagine de ansamblu asupra concentrației gazului cu raportul RS și RO.
Cum se măsoară PPM folosind senzori de gaz MQ?
RS este rezistența de sens în timpul prezenței unui anumit gaz, în timp ce RO este rezistența de sens în aerul curat, fără nici un gaz special. Graficul logaritmic de mai jos, preluat din foaia tehnică, oferă o imagine de ansamblu asupra concentrației de gaz, cu rezistența senzorială a senzorului MQ6. Senzorul MQ6 este utilizat pentru a detecta concentrația gazului GPL. Prin urmare, senzorul MQ6 va oferi o rezistență deosebită în timpul condiției de aer curat, unde gazul GPL nu este disponibil. De asemenea, rezistența se va schimba ori de câte ori gazul GPL este detectat de senzorul MQ6.
Deci, trebuie să trasăm acest grafic în firmware-ul nostru similar cu ceea ce am făcut în proiectul nostru de detector de gaz Arduino. Formula este de a avea 3 puncte de date diferite. Primele două puncte de date sunt începutul curbei GPL, în coordonatele X și Y. A treia dată este panta.
Deci, dacă selectăm curba albastru intens care este curba GPL, începutul curbei în coordonatele X și Y este 200 și 2. Deci, primul punct de date din scara logaritmică este (log200, log2) care este (2,3, 0,30).
Să o facem ca, X1 și Y1 = (2.3, 0.30). Finalul curbei este al doilea punct de date. Prin același proces descris mai sus, X2 și Y2 sunt (log 10000, log0.4). Astfel, X2 și Y2 = (4, -0,40). Pentru a obține panta curbei, formula este
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Graficul de care avem nevoie poate fi dat ca
LPG_Curve = {pornind de la X și pornind de la Y, panta} LPG_Curve = {2.3, 0.30, -0.41}
Pentru alți senzori MQ, obțineți datele de mai sus din foaia de date și graficul grafic logaritmic. Valoarea va diferi în funcție de senzor și de gazul măsurat. Pentru acest modul particular, acesta are un pin digital care oferă doar informații despre gazul prezent sau nu. Pentru acest proiect este de asemenea folosit.
Componente necesare
Componentele necesare pentru interfața senzorului MQ cu microcontrolerul PIC sunt date mai jos-
- Alimentare 5V
- Breadboard
- Rezistor de 4.7k
- LCD 16x2
- 1k rezistor
- Cristal de 20Mhz
- Condensator 33pF - 2buc
- Microcontroler PIC16F877A
- Senzor seria MQ
- Berg și alte fire de conectare.
Schematic
Schema pentru acest senzor de gaz cu un proiect PIC este destul de simplă. Pinul analogic este conectat cu RA0 și cel digital cu RD5 pentru a măsura tensiunea analogică furnizată de modulul senzorului de gaz. Dacă sunteți complet nou în PIC, atunci vă recomandăm să consultați tutorialul PIC ADC și tutorialul PIC LCD pentru a înțelege mai bine acest proiect.
Circuitul este construit într-o placă de calcul. Odată ce conexiunile au fost finalizate, configurarea mea arată astfel, prezentată mai jos.
Senzor MQ cu programare PIC
Partea principală a acestui cod este funcția principală și alte funcții periferice asociate. Programul complet poate fi găsit în partea de jos a acestei pagini, fragmentele importante de cod sunt explicate după cum urmează
Funcția de mai jos este utilizată pentru obținerea valorii rezistenței senzorului în aer liber. Pe măsură ce se utilizează canalul analogic 0, acesta obține date de pe canalul analogic 0. Acesta este pentru calibrarea senzorului de gaz MQ.
float SensorCalibration () { int count; // Această funcție va calibra senzorul în plutitor de aer liber val = 0; for (count = 0; count <50; count ++) {// luați mai multe probe și calculați valoarea medie val + = calculate_resistance (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // împărțit la RO_CLEAN_AIR_FACTOR produce valul de retur Ro ; }
Funcția de mai jos este utilizată pentru a citi valorile analogice ale senzorului MQ și pentru a calcula valoarea Rs
float read_MQ () { int count; float rs = 0; for (count = 0; count <5; count ++) {// faceți mai multe citiri și calculați-o. rs + = calculate_resistance (ADC_Read (0)); // se modifică în funcție de concentrația gazului. __delay_ms (50); } rs = rs / 5; returnează rs; }
Funcția de mai jos este utilizată pentru a calcula rezistența de la rezistența divizorului de tensiune și rezistența la sarcină.
float calculate_resistance (int adc_channel) {// senzorul și rezistența de încărcare formează un divizor de tensiune. deci folosind valoarea analogică și valoarea de încărcare return (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // vom găsi rezistență senzor. }
RL_VALUE este definit la începutul codului așa cum se arată mai jos
#define RL_VALUE (10) // definește rezistența la încărcare pe placă, în kilohmi
Schimbați această valoare după verificarea rezistenței la încărcare la bord. Poate fi diferit în alte plăci de senzori MQ. Pentru a grafica datele disponibile în scara jurnalului, este utilizată funcția de mai jos.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -curve) / curve) + curve)); }
Curba este curba GPL definită mai sus a codului care a fost calculat anterior în articolul nostru de mai sus.
float MQ6_curve = {2.3,0.30, -0.41}; // Grafic grafic, schimbați acest lucru pentru un anumit senzor
În cele din urmă, funcția principală în interiorul căreia măsurăm valoarea analogică, calculăm PPM și o afișăm pe LCD este prezentată mai jos
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Calibrare…."); Ro = SensorCalibration (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Gata!"); // clear_screen (); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohms"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Gazul este prezent"); lcd_com (SECOND_LINE); lcd_puts ("Gaz ppm ="); float rs = read_MQ (); raport de plutire = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __delay_ms (1500); clear_screen (); } else { lcd_com (FIRST_LINE); lcd_puts („Gazul nu este prezent”); } } }
În primul rând, RO-ul senzorului este măsurat în aer curat. Apoi pinul digital este citit pentru a verifica dacă gazul este prezent sau nu. Dacă gazul este prezent, gazul este măsurat prin curba GPL furnizată.
Am folosit o brichetă pentru a verifica dacă valoarea PPM se schimbă la detectarea gazului. Aceste brichete au gaz LPG în interiorul lor, care, atunci când este eliberat în aer, va fi citit de senzorul nostru și valoarea PPM de pe ecranul LCD se modifică așa cum se arată mai jos.
Lucrarea completă poate fi găsită în videoclipul prezentat în partea de jos a acestei pagini. Dacă aveți întrebări, vă rugăm să le lăsați în secțiunea de comentarii sau să folosiți forumurile noastre pentru alte întrebări tehnice.