- Sensor de gas MQ6
- Com es mesura el PPM mitjançant sensors de gas MQ?
- Components necessaris
- Esquema
- Sensor MQ amb programació PIC
Els sensors de gas de la sèrie MQ són tipus de sensors molt comuns que s’utilitzen als detectors de gas per detectar o mesurar determinats tipus de gasos. Aquests sensors s’utilitzen àmpliament en tots els dispositius relacionats amb el gas, des de simples detectors de fum fins a monitors industrials de qualitat de l’aire. Ja hem utilitzat aquests sensors de gas MQ amb Arduino per mesurar alguns gasos nocius com l’amoniac. En aquest article, aprendrem a utilitzar aquests sensors de gas amb microcontroladors PIC, per mesurar el valor PPM del gas i mostrar-lo en una pantalla LCD de 16x2.
Com es va esmentar anteriorment, hi ha diferents tipus de sensors de la sèrie MQ disponibles al mercat i cada sensor pot mesurar diferents tipus de gasos, tal com es mostra a la taula següent. En nom d’aquest article, utilitzarem el sensor de gas MQ6 amb PIC que es pot utilitzar per detectar la presència i concentració de gas GLP. No obstant això, en utilitzar el mateix maquinari i firmware també es poden utilitzar altres sensors de la sèrie MQ sense modificacions importants en la part de codi i maquinari.
| Sensor | Detecta |
| MQ-2 | Metà, butà, GLP, fum |
| MQ-3 | Alcohol, etanol, fum |
| MQ-4 | Metà, gas GNC |
| MQ-5 | Gas natural, GLP |
| MQ-6 | GLP, gas butà |
| MQ-7 | Monoxid de carboni |
| MQ-8 | Hidrogen gasós |
| MQ-9 | Monòxid de carboni, gasos inflamables. |
| MQ131 | Ozó |
| MQ135 | Qualitat de l'aire (benzè, alcohol, fum) |
| MQ136 | Gas sulfurat d’hidrogen |
| MQ137 | Amoníac |
| MQ138 | Benzen, Toluen, Alcohol, Acetona, Propà, Formaldehid, Hidrogen |
| MQ214 | Metà, gas natural |
| MQ216 | Gas natural, gas carbó |
| MQ303A | Alcohol, etanol, fum |
| MQ306A | GLP, gas butà |
| MQ307A | Monoxid de carboni |
| MQ309A | Monòxid de carboni, gasos inflamables |
| MG811 | Diòxid de carboni (CO2) |
| AQ-104 | Qualitat de l'aire |
Sensor de gas MQ6
La imatge següent mostra el diagrama del pin del sensor MQ6. No obstant això, la imatge esquerra és un sensor MQ6 basat en mòduls per a la interfície amb la unitat de microcontrolador, el diagrama de pins del mòdul també es mostra en aquesta imatge.

El pin 1 és VCC, el pin 2 és el GND, el pin 3 és la sortida digital (lògica baixa quan es detecta gas) i el pin 4 és la sortida analògica. L’olla s’utilitza per ajustar la sensibilitat. No és RL. La resistència RL és la resistència adequada del LED DOUT.

Cada sensor de la sèrie MQ té un element de calefacció i una resistència de detecció. Depenent de la concentració del gas, la resistència de detecció canvia i, en detectar la resistència canviant, es pot mesurar la concentració de gas. Per mesurar la concentració de gas en PPM, tots els sensors MQ proporcionen un gràfic logarítmic que és molt important. El gràfic proporciona una visió general de la concentració de gas amb la proporció de RS i RO.
Com es mesura el PPM mitjançant sensors de gas MQ?
La RS és la resistència sensible durant la presència d’un determinat gas mentre que la RO és la resistència sensible a l’aire net sense cap gas concret. El gràfic logarítmic següent, extret del full de dades, proporciona una visió general de la concentració de gas amb la resistència sensible del sensor MQ6. El sensor MQ6 s’utilitza per detectar la concentració de gas GLP. Per tant, el sensor MQ6 proporcionarà una resistència particular durant l’estat d’aire net quan el gas GLP no estigui disponible. A més, la resistència canviarà sempre que el sensor MQ6 detecti el gas GLP.

Per tant, hem de representar aquest gràfic al nostre microprogramari similar al que vam fer al nostre Projecte de detector de gas Arduino. La fórmula és tenir 3 punts de dades diferents. Els dos primers punts de dades són l’inici de la corba de GLP, en coordenades X i Y. La tercera dada és el pendent.
Per tant, si seleccionem la corba blau intens que és la corba de GLP, l’inici de la corba en coordenades X i Y és el 200 i 2. Per tant, el primer punt de dades de l’escala logarítmica és (log200, log2) que és (2,3, 0,30).
Fem-ho com, X1 i Y1 = (2,3, 0,30). El final de la corba és el segon punt de dades. Pel mateix procés descrit anteriorment, X2 i Y2 són (log 10000, log0.4). Per tant, X2 i Y2 = (4, -0,40). Per obtenir el pendent de la corba, la fórmula és
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
El gràfic que necessitem es pot donar com a
LPG_Curve = {X inicial i Y inicial, pendent} LPG_Curve = {2.3, 0.30, -0.41}
Per a altres sensors MQ, obteniu les dades anteriors del full de dades i del gràfic logarítmic. El valor serà diferent segons el sensor i el gas mesurats. Per a aquest mòdul en concret, té un pin digital que només proporciona informació sobre el gas present o no. Per a aquest projecte, també s’utilitza.
Components necessaris
A continuació es mostren els components necessaris per a la interfície del sensor MQ amb el microcontrolador PIC.
- Alimentació de 5V
- Taula de pa
- Resistència de 4,7 k
- Pantalla LCD de 16x2
- 1k resistència
- Cristall de 20Mhz
- Condensador de 33pF - 2 unitats
- Microcontrolador PIC16F877A
- Sensor de la sèrie MQ
- Berg i altres cables de connexió.
Esquema

L’esquema d’aquest sensor de gas amb un projecte PIC és força senzill. El pin analògic està connectat amb el RA0 i el digital amb el RD5 per mesurar la tensió analògica proporcionada pel mòdul del sensor de gas. Si sou completament nou a PIC, és possible que vulgueu examinar el tutorial PIC ADC i el tutorial PIC LCD per entendre millor aquest projecte.
El circuit està construït en una taula de treball. Un cop completades les connexions, la meva configuració té aquest aspecte, que es mostra a continuació.

Sensor MQ amb programació PIC
La part principal d’aquest codi és la funció principal i altres funcions perifèriques associades. El programa complet es troba a la part inferior d’aquesta pàgina; els fragments de codi importants s’expliquen de la següent manera
La funció següent s’utilitza per obtenir el valor de resistència del sensor en aire lliure. A mesura que s’utilitza el canal analògic 0, obté dades del canal analògic 0. Això serveix per calibrar el sensor de gas MQ.
float SensorCalibration () { recompte int; // Aquesta funció calibrarà el sensor en flotador d' aire lliure val = 0; for (count = 0; count <50; count ++) {// pren diverses mostres i calcula el valor mitjà val + = calculate_resistance (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // dividit per RO_CLEAN_AIR_FACTOR obté el valor de retorn de Ro ; }
A sota de la funció s’utilitza per llegir els valors analògics del sensor MQ i fer-ne una mitjana per calcular el valor de Rs
float read_MQ () { int count; flotador rs = 0; for (count = 0; count <5; count ++) {// feu diverses lectures i feu-ne una mitjana. rs + = calcular_resistència (ADC_Read (0)); // rs canvia segons la concentració de gas. __delay_ms (50); } rs = rs / 5; tornar rs; }
La funció següent s’utilitza per calcular la resistència de la resistència divisora de tensió i la resistència de càrrega.
float calculate_resistance (int adc_channel) {// el sensor i la resistència de càrrega formen un divisor de voltatge. de manera que utilitzant el valor analògic i el retorn de valor de càrrega (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // trobarem resistència de sensor. }
El valor RL_VALUE es defineix a l'inici del codi com es mostra a continuació
#define RL_VALUE (10) // defineix la resistència de càrrega a la placa, en quilo-ohms
Canvieu aquest valor després de comprovar la resistència de càrrega a bord. Pot ser diferent en altres plaques de sensors MQ. Per representar les dades disponibles a l’escala de registre, s’utilitza la funció següent.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, ((((log (rs_ro_ratio) -curve) / curve) + curve)); }
La corba és la corba de GLP definida a la part superior del codi que s’ha calculat anteriorment al nostre article anterior.
float MQ6_curve = {2.3,0.30, -0.41}; // Gràfic gràfic, canvieu-ho per un sensor concret
Finalment, a continuació es mostra la funció principal dins la qual mesurem el valor analògic, calculem el PPM i el mostrem a la pantalla LCD
void main () { system_init (); clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Calibració…."); Ro = SensorCalibration (); // clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("Fet!"); // 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 ("El gas és present"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); float rs = read_MQ (); relació de flotació = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __delay_ms (1500); clear_screen (); } else { lcd_com (FIRST_LINE); lcd_puts ("Gas no present"); } } }
En primer lloc, el RO del sensor es mesura amb aire net. A continuació, es llegeix el pin digital per comprovar si el gas està present o no. Si el gas és present, el gas es mesura mitjançant la corba de GLP proporcionada.
He utilitzat un encenedor per comprovar si el valor PPM canvia quan es detecta el gas. Aquests encenedors tenen gas LPG a l’interior, que quan s’allibera a l’aire serà llegit pel nostre sensor i el valor PPM de la pantalla LCD canvia com es mostra a continuació.

El funcionament complet es pot trobar al vídeo que es mostra al final d'aquesta pàgina. Si teniu cap pregunta, deixeu-les a la secció de comentaris o utilitzeu els nostres fòrums per a altres qüestions tècniques.
