GAS. SENSORES MQ.
http://www.naylampmechatronics.com/blog/42_Tutorial-sensores-de-gas-MQ2-MQ3-MQ7-y-MQ13.html
ÍNDICE:
- TEORÍA
- MONITORIZACIÓN DEL SENSOR MQ.
1.- TEORÍA.
Estos sensores son electroquímicos y varían su resistencia cuando se
exponen a determinados gases, internamente posee un calentador encargado
de aumentar la temperatura interna y con esto el sensor pueda
reaccionar con los gases provocando un cambio en el valor de la
resistencia. El calentador dependiendo del modelo puede necesitar un
voltaje entre 5 y 2 voltios, el sensor se comporta como una resistencia
y necesita una resistencia de carga (RL) para cerrar el circuito y con
este hacer un divisor de tención y poder leerlo desde un
microcontrolador:
Debido al calentador es necesario
esperar un tiempo de calentamiento para que la salida sea estable y
tenga las características que el fabricante muestra en sus datasheet,
dicho tiempo dependiendo del modelo puede ser entre 12 y 48 horas.
En
el mercado, generalmente los sensores MQ se encuentran en módulos, lo
que nos simplifica la parte de conexiones y nos facilitan su uso, solo
basta con alimentar el módulo y empezar a leer el sensor, estos módulos
también tienen una salida digital la cual internamente trabaja con un
comparador y con la ayuda de un potenciómetro podemos calibrar el umbral
y así poder interpretar la salida digital como presencia o ausencia del
gas.
La diferencia entre los distintos tipos de sensores MQ es la
sensibilidad a cierta gama de gases, más sensibles a algunos gases que a
otros, pero siempre detectan a más de un gas, por lo que es necesario
revisar los datasheet para escoger el sensor adecuado para nuestra
aplicación.
SENSORES:
- MQ2: HUMO. Sensor de gas combustible y humo MQ-2. Estos sensores son adecuados para detectar GLP, propano, metano, alcohol, hidrógeno, humo. Siendo más sensible al GLP y propano.
- MQ3. ALCOHOL. Sensor de Alcohol. Es muy sensible al alcohol y de menor sensibilidad a la bencina, también es sensible a gases como GLP, Hexano, CO, CH4 pero con sensibilidad muy baja, la cual se puede despreciar si hay poca concentración de estos.
- MQ7: CO2. Sensor de Monóxido de Carbono MQ7.Este sensor es de alta sensibilidad al monóxido de carbono (CO), pero también es sensible al H2.
- MQ135. AIRE. Sensor Calidad Aire MQ135. Se utilizan en equipos de control de calidad del aire para edificios y oficinas, son adecuados para la detección de NH3, NOx, alcohol, benceno, humo, CO2, etc.
2.- MONITORIZACIÓN DE UN SENSOR MQ.
Tan pronto se alimente el módulo este empezará a calentar, hay que esperar unos minutos para que el modulo caliente y tener un censado adecuado.
En
el ejemplo usaremos un MQ-3 (sensor de alcohol) pero el programa es el
mismo para cualquier módulo MQ si se usa la salida digital, puesto que
esta salida se comporta como 1 o 0. Tener en cuenta que esta salida es
negada, 1 para ausencia de alcohol y 0 para presencia de alcohol.
En este coso la lectura desde Arduino es como leer cualquier entrada
digital, y la sensibilidad del sensor se configura a través de la
resistencia variable que trae el modulo, girando a la derecha se hace
más sensible y necesitamos menos presencia de alcohol para activar la
salida, de igual forma si giramos a la izquierda aumentamos el umbral
necesitando mayor presencia del gas (alcohol) para que se active la
salida.
Recordar que la salida del sensor es
negado, por lo que cuando nos referimos a activar el sensor es cuando la
salida es 0, en este estado el led del módulo también debe encenderse
ya que internamente está con una resistencia a 5V. Cuando no hay
presencia de alcohol el Led se apaga y la salida es un 1 lógico (5V)
A
continuación mostramos la salida del monitor serial en el momento
cuando el módulo MQ-3 se expone a alcohol (aire con alcohol)
CÓDIGO DEL SENSOR EN DIGITAL.
int pin_mq = 2; void setup() { Serial.begin(9600); pinMode(pin_mq, INPUT); } void loop() { boolean mq_estado = digitalRead(pin_mq);//Leemos el sensor if(mq_estado) //si la salida del sensor es 1 { Serial.println("Sin presencia de alcohol"); } else //si la salida del sensor es 0 { Serial.println("Alcohol detectado"); } delay(100); }
SENSOR EN ANALÓGICO.
La diferencia de utilizar la salida
digital, es que usando la salida analógica podemos trabajar con
diferentes niveles de presencia de gas y escalarlo de acuerdo a la
necesidad de nuestra aplicación.
Al tratarse de una salida analógica, el código es el mismo para cualquier tipo de sensor MQ con el que estén trabajando.
Debido
a que el modulo tiene una cámara de calentamiento a donde tiene que
ingresar o salir el gas, el tiempo de respuesta es lento, el sensor
seguirá detectando los residuos de gas que se quedan dentro de la cámara
de calentamiento hasta que estos desaparezcan.
Tener en cuenta que todos los módulos son sensibles a más de un gas,
claro que en diferente proporción; pero si se trabaja en ambientes en
donde hay diferentes tipos de gases no podríamos diferenciar entre ellos
y podríamos tener una referencia equivocada si solo necesitamos leer un
gas.
CÓDIGO EN ANALÓGICO CON SALIDA DIRECTA EN VOLTAJES:
void setup() {
Serial.begin(9600); } void loop() { int adc_MQ = analogRead(A0); //Lemos la salida analógica del MQ float voltaje = adc_MQ * (5.0 / 1023.0); //Convertimos la lectura en un valor de voltaje Serial.print("adc:"); Serial.print(adc_MQ); Serial.print(" voltaje:"); Serial.println(voltaje); delay(100); }
ESCALA ENTRE VALORES ANALÓGICOS Y VOLTAJES DEL SENSOR
Si en nuestra aplicación que estamos implementando necesitamos los valores en unidades correspondientes a la medición del gas, necesitamos escalar el valor leído, el problema de esto es que la relación entre la lectura analógica y el valor real no es lineal. Por lo que necesitamos estimar la curva que nos da el datasheet
Los siguientes pasos los trabajamos para el MQ-3, pero se aplica analogamente para los otros MQ
Por Ejemplo para el sensor MQ-3 según el datasheet la curva es la siguiente:
Debido a que nos da la curva y no la ecuación es necesario estimar y por
regresión hallar la ecuación, en nuestro caso usaremos Excel, para eso
ingresamos datos de la curva de Alcohol, la mayor cantidad de puntos que
podamos, y graficamos en Excel. Agregamos línea de tendencia y
escogemos ecuación potencial
La ecuación que obtenemos es:
Alcohol=0.4091(Rs/Ro)^(-1.497)
Alcohol
es el valor de concentración de alcohol, Ro es una constante que
equivale al valor de la resistencia del sensor cuando se lo expone a una
concentración de 0.4mg/L y Rs es la resistencia del sensor, el cual
leemos desde Arduino.
Nosotros en el
ejemplo anterior calculamos el voltaje leído del sensor, para calcular
el valor de Rs despejamos la ecuación del divisor de voltaje que forma
el sensor con la resistencia de carga RL que en la mayoría de módulos es
de 1K.
V_leido=5(1000/(Rs+1000))
Rs=1000((5-V)/V)
El
valor de Ro se calcula en laboratorio, Ro es el valor de Rs cuando se
usa una muestra de aire con 0.4mg/L. Y hay que hacer esto para cada
sensor puesto que Ro es diferente en cada sensor.
Otra
forma de calibrar es usando concentraciones conocidas, para esto es
necesario en el caso del sensor de alcohol usar un alcoholímetro para
calibrarlo. Para esto no es necesario hacer la regresión de la curva
que nos da el datasheet la cual es válida siempre y cuando se mida en
las condiciones indicadas. De dicha curva solo tomaremos la forma que
tiene e incluso Ro lo consideramos como constante. La ecuación seria de
la siguiente forma.
Alcohol=a*(Rs)^b
Para
calcular las constantes a y b solo necesitamos tomar dos muestras, con
nuestro sensor medimos el Rs de dichas muestras y con el alcoholímetro
calculamos el valor correspondiente de concentración de alcohol para
dichas muestras. Con esos dos puntos ingresamos a la ecuación y
calculamos las dos constantes.
Las
dos formas anteriores son la forma correcta de calibrar nuestro sensor,
hallando Ro con una muestra 0.4mg/L o usando un alcoholímetro para tomar
muestras de referencia.
Pero para no
dejar inconcluso nuestro tutorial explicaremos otro método para
conseguir de forma aproximada el valor de Ro y así tener la ecuación
resuelta.
En el grafico de la
ecuación potencial observamos que el valor de Rs/Ro se acerca a 0.1 para
valores superiores a la máxima concentración de alcohol que el sensor
puede censar, en los puntos cercanos a este punto, la variación de
rs/ro es mínima por lo que los errores que podamos tener acá para
calcular Ro son pequeños.
Entonces
asumiendo que el sensor se satura con 10mg/L al cual según la gráfica
le corresponde un Rs/Ro de 0.12, los puntos sercanos por mayor
variacion de alcohol que exista el rs/ro tendra variaciones minimas.
Para estar en este punto generamos un ambiente con bastante alcohol y si
medimos con nuestro sensor obtendremos un voltaje de 3.02, que equivale
a un Rs=655, entonces
(Rs/Ro)=0.12 si Rs=655 entonces Ro=5463
Con
Ro calculado, ya tenemos una solución de la ecuación y con esto
podemos obtener los valores aproximados de concentración de alcohol.
Mencionar nuevamente que todos los sensores MQ como los MQ-2, MQ-3,
MQ-7, MQ-135, etc tienen su propia curva y las cuales lo pueden
encontrar en sus datasheet correspondientes. Y la forma correcta de
calibrar nuestros MQ es usar un instrumento maestro para tomar muestras y
con estos puntos calcular las constantes de la curva.
CÓDIGO ANALÓGICO ESCALADO:
void setup() { Serial.begin(9600); } void loop() { int adc_MQ = analogRead(A0); //Lemos la salida analógica del MQ float voltaje = adc_MQ * (5.0 / 1023.0); //Convertimos la lectura en un valor de voltaje float Rs=1000*((5-voltaje)/voltaje); //Calculamos Rs con un RL de 1k double alcohol=0.4091*pow(Rs/5463, -1.497); // calculamos la concentración de alcohol con la ecuación obtenida. //-------Enviamos los valores por el puerto serial------------ Serial.print("adc:"); Serial.print(adc_MQ); Serial.print(" voltaje:"); Serial.print(voltaje); Serial.print(" Rs:"); Serial.print(Rs); Serial.print(" alcohol:"); Serial.print(alcohol); Serial.println("mg/L"); delay(100); }