- Sensor de gas MQ6
- ¿Cómo medir PPM usando sensores de gas MQ?
- Componentes necesarios
- Esquemático
- Sensor MQ con programación PIC
Los sensores de gas de la serie MQ son tipos de sensores muy comunes que se utilizan en los detectores de gas para detectar o medir ciertos tipos de gases. Estos sensores se utilizan ampliamente en todos los dispositivos relacionados con el gas, desde simples detectores de humo hasta monitores industriales de calidad del aire. Ya hemos utilizado estos sensores de gas MQ con Arduino para medir algunos gases nocivos como el amoniaco. En este artículo, aprenderemos cómo usar estos sensores de gas con microcontroladores PIC, para medir el valor PPM del gas y mostrarlo en una pantalla LCD de 16x2.
Como se mencionó anteriormente, existen diferentes tipos de sensores de la serie MQ disponibles en el mercado y cada sensor puede medir diferentes tipos de gases como se muestra en la siguiente tabla. Por el bien de este artículo, usaremos el sensor de gas MQ6 con PIC que se puede usar para detectar la presencia y concentración de gas LPG. Sin embargo, al usar el mismo hardware y firmware, también se pueden usar otros sensores de la serie MQ sin modificaciones importantes en la parte de código y hardware.
Sensor | Detecta |
MQ-2 | Metano, butano, GLP, humo |
MQ-3 | Alcohol, etanol, humo |
MQ-4 | Metano, gas GNC |
MQ-5 | Gas natural, GLP |
MQ-6 | GLP, gas butano |
MQ-7 | Monóxido de carbono |
MQ-8 | Gas de hidrogeno |
MQ-9 | Monóxido de carbono, gases inflamables. |
MQ131 | Ozono |
MQ135 | Calidad del aire (benceno, alcohol, humo) |
MQ136 | Gas de sulfuro de hidrógeno |
MQ137 | Amoníaco |
MQ138 | Benceno, tolueno, alcohol, acetona, propano, gas formaldehído, hidrógeno |
MQ214 | Metano, gas natural |
MQ216 | Gas natural, Gas de carbón |
MQ303A | Alcohol, etanol, humo |
MQ306A | GLP, gas butano |
MQ307A | Monóxido de carbono |
MQ309A | Monóxido de carbono, gases inflamables |
MG811 | Dióxido de carbono (CO2) |
AQ-104 | Calidad del aire |
Sensor de gas MQ6
La siguiente imagen muestra el diagrama de clavijas del sensor MQ6. Sin embargo, la imagen de la izquierda es un sensor MQ6 basado en un módulo para la interfaz con la unidad del microcontrolador, el diagrama de pines del módulo también se muestra en esa imagen.
El pin 1 es VCC, el pin 2 es GND, el pin 3 es la salida digital (Lógica baja cuando se detecta gas) y el pin 4 es la salida analógica. La olla se usa para ajustar la sensibilidad. No es RL. La resistencia RL es la resistencia correcta del LED DOUT.
Cada sensor de la serie MQ tiene un elemento calefactor y una resistencia de detección. Dependiendo de la concentración del gas, la resistencia de detección cambia y al detectar el cambio de resistencia, se puede medir la concentración de gas. Para medir la concentración de gas en PPM, todos los sensores MQ proporcionan un gráfico logarítmico que es muy importante. El gráfico proporciona una descripción general de la concentración de gas con la relación de RS y RO.
¿Cómo medir PPM usando sensores de gas MQ?
La RS es la resistencia de detección durante la presencia de un gas en particular, mientras que la RO es la resistencia de detección en aire limpio sin ningún gas en particular. El siguiente gráfico logarítmico tomado de la hoja de datos proporciona una descripción general de la concentración de gas con la resistencia de detección del sensor MQ6. El sensor MQ6 se utiliza para detectar la concentración de gas LPG. Por lo tanto, el sensor MQ6 proporcionará una resistencia particular durante la condición de aire limpio donde el gas LPG no está disponible. Además, la resistencia cambiará siempre que el sensor MQ6 detecte gas LPG.
Por lo tanto, debemos trazar este gráfico en nuestro firmware de manera similar a lo que hicimos en nuestro Proyecto de detector de gas Arduino. La fórmula es tener 3 puntos de datos diferentes. Los dos primeros puntos de datos son el inicio de la curva LPG, en coordenadas X e Y. El tercer dato es la pendiente.
Entonces, si seleccionamos la curva azul profundo que es la curva LPG, el inicio de la curva en las coordenadas X e Y es 200 y 2. Entonces, el primer punto de datos de la escala logarítmica es (log200, log2) que es 2,3, 0,30).
Hagámoslo como, X1 e Y1 = (2.3, 0.30). El final de la curva es el segundo punto de datos. Mediante el mismo proceso descrito anteriormente, X2 e Y2 son (log 10000, log0,4). Entonces, X2 e Y2 = (4, -0.40). Para obtener la pendiente de la curva, la fórmula es
= (Y2-Y1) / (X2-X1) = (- 0.40 - 0.30) / (4 - 2.3) = (-0.70) / (1.7) = -0.41
El gráfico que necesitamos se puede dar como
LPG_Curve = {X inicial e Y inicial, pendiente} LPG_Curve = {2.3, 0.30, -0.41}
Para otros sensores MQ, obtenga los datos anteriores de la hoja de datos y el gráfico de gráfico logarítmico. El valor diferirá según el sensor y el gas medido. Para este módulo en particular, tiene un pin digital que solo proporciona información sobre el gas presente o no. Para este proyecto, también se utiliza.
Componentes necesarios
Los componentes necesarios para la interconexión del sensor MQ con el microcontrolador PIC se indican a continuación:
- Fuente de alimentación 5V
- Tablero de circuitos
- Resistencia de 4.7k
- LCD 16x2
- Resistencia de 1k
- Cristal de 20Mhz
- Condensador 33pF - 2 piezas
- Microcontrolador PIC16F877A
- Sensor de la serie MQ
- Berg y otros cables de conexión.
Esquemático
El esquema de este sensor de gas con un proyecto PIC es bastante sencillo. El pin Analógico está conectado con el RA0 y el digital con el RD5 para medir el voltaje analógico proporcionado por el módulo sensor de gas. Si es completamente nuevo en PIC, es posible que desee consultar el tutorial de PIC ADC y el tutorial de PIC LCD para comprender mejor este proyecto.
El circuito está construido en un tablero. Una vez que se completaron las conexiones, mi configuración se ve así, como se muestra a continuación.
Sensor MQ con programación PIC
La parte principal de este código es la función principal y otras funciones periféricas asociadas. El programa completo se puede encontrar en la parte inferior de esta página, los fragmentos de código importantes se explican a continuación
La siguiente función se utiliza para obtener el valor de resistencia del sensor al aire libre. A medida que se utiliza el canal analógico 0, obtiene datos del canal analógico 0. Esto es para calibrar el sensor de gas MQ.
float SensorCalibration () { recuento int; // Esta función calibrará el sensor en flotación de aire libre val = 0; for (count = 0; count <50; count ++) {// tomar varias muestras y calcular el valor promedio val + = calculate_resistance (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // dividido por RO_CLEAN_AIR_FACTOR da como resultado Ro return val; }
La siguiente función se utiliza para leer los valores analógicos del sensor MQ y promediarlos para calcular el valor Rs
float read_MQ () { recuento int; flotador rs = 0; for (count = 0; count <5; count ++) {// tomar varias lecturas y promediarlas. rs + = calcular_resistencia (ADC_Read (0)); // rs cambia según la concentración de gas. __delay_ms (50); } rs = rs / 5; return rs; }
La siguiente función se utiliza para calcular la resistencia de la resistencia del divisor de voltaje y la resistencia de carga.
float calculate_resistance (int adc_channel) {// el sensor y la resistencia de carga forman un divisor de voltaje. así que usando valor analógico y retorno de valor de carga (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // encontraremos la resistencia del sensor. }
El RL_VALUE se define al comienzo del código como se muestra a continuación
#define RL_VALUE (10) // define la resistencia de carga en la placa, en kiloohmios
Cambie este valor después de verificar la resistencia de carga a bordo. Puede ser diferente en otras placas de sensores MQ. Para graficar los datos disponibles en la escala logarítmica, se utiliza la siguiente función.
int gas_plot_log_scale (float rs_ro_ratio, float * curva) { retorno pow (10, (((log (rs_ro_ratio) -curve) / curva) + curva)); }
La curva es la curva de GLP definida arriba del código que se calcula previamente en nuestro artículo anterior.
float MQ6_curve = {2.3,0.30, -0.41}; // Graph Plot, cambie esto para un sensor en particular
Finalmente, la función principal dentro de la cual medimos el valor analógico, calculamos el PPM y lo mostramos en la pantalla LCD se da a continuación
void main () { system_init (); pantalla clara(); lcd_com (PRIMERA_LÍNEA); lcd_puts ("Calibrando…."); Ro = SensorCalibration (); //pantalla clara(); lcd_com (PRIMERA_LÍNEA); lcd_puts ("¡Listo!"); //pantalla clara(); lcd_com (PRIMERA_LÍNEA); lcd_print_number (Ro); lcd_puts ("K ohmios"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Hay gas presente"); lcd_com (SEGUNDA_LÍNEA); lcd_puts ("Gas ppm ="); flotador rs = read_MQ (); relación de flotación = rs / Ro; lcd_print_number (gas_plot_log_scale (relación, MQ6_curve)); __delay_ms (1500); pantalla clara(); } más { lcd_com (FIRST_LINE); lcd_puts ("Gas no presente"); } } }
Primero, la RO del sensor se mide en aire limpio. Luego se lee el pin digital para verificar si el gas está presente o no. Si el gas está presente, el gas se mide mediante la curva de GLP proporcionada.
He usado un encendedor para verificar si el valor de PPM está cambiando cuando se detecta el gas. Estos encendedores de puros tienen gas LPG en su interior, que cuando se libera al aire será leído por nuestro sensor y el valor de PPM en la pantalla LCD cambia como se muestra a continuación.
El trabajo completo se puede encontrar en el video que se encuentra al final de esta página. Si tiene alguna pregunta, déjela en la sección de comentarios o utilice nuestros foros para otras preguntas técnicas.