Objetivos
Material requerido.
Arduino UNO | |
Sensor MG811 |
El sensor MG811
Para terminar con los sensores de CO2 me ha parecido interesante dedicar una sesión al MG811. Es un sensor de los muy conocidos sensores MQ-XX, de los que ha ya hemos hablado en el pasado y de los que aun tendremos que hacer algún ejemplo con otros sensores, como el MQ-131 (Sensor de Ozono) y el MQ-135 (Sensor de calidad de aire)
El MG811 es un sensor puro de CO2 con poca sensibilidad a otros compuestos, como el CO2 dióxido de Carbono y alcoholes, a los que típicamente estos sensores suelen ser sensibles también, lo que les hace especialmente recomendados en ambientes donde la concentración de CO2, pueda ser alta o rápidamente variable, como en bodegas y tanques de fermentación, o incluso para aquellos que disfrutéis elaborando cervezas caseras (Cada vez más frecuente, debido al aburrimiento de estar encerrados)Vamos a usar este sensor MG811, con una plaquita de diseño propio Prometec, la primera por ahora, debido a que compramos una partida de ellas en Aliexpress que no funcionaban en absoluto y que nos han obligado a diseñar nuestro propio circuito, pero de lo que estáis advertidos.
Nos han dado bastante guerra por éste es un sensor con sus propias peculiaridades y requiere un circuito de subida de tensión, funciona a 6V, y da un máximo de o,2 V de señal, lo que obliga a usar un amplificador operacional de unas ciertas características para obtener la salida normal de unos pocos voltios, y por cierto con un consumo de unos 150 mA, ya que requiere calentar el sensor un buen rato antes de usarlo, así que cuidado con la alimentación de vuestro circuito si vais a usar unos pocos de ellos con Arduino. Necesitarás una fuente de alimentación dimensionada adecuadamente y no te sorprendas si ves que se calienta, es normal.
Las características del sensor MG811:
- Se basa en el principio de electrolito sólido.
- Muy buena sensibilidad al CO2.
- Rango de detección: 350 – 10.000 ppm.
- Consumo 140 ± 20 mA.
- Temperatura de funcionamiento: 20 – 50 ºC.
- Baja dependencia de temperatura y humedad.
- Alta estabilidad y repetibilidad.
- Baja sensibilidad a CO y Alcoholes.
- Rapidez de respuesta.
Tiene la particularidad de que la salida en Voltios disminuye a medida que la concentración aumenta
Conexión con Arduino
La conexión con nuestro Arduino resuelta trivial. Basta con alimentarlo y leer una señal analógica con los convertidores ADC:
Programa de prueba
Aunque no sería complicado usar directamente el MG811 siempre es más agradable (Y hace programas más elegantes) usar una librería cómoda, y la más sencilla que he visto es esta: MG811. Vamos a utilizarla para leer la salida de nuestro sensor
void setup() { Serial.begin(9600); } void loop() { int v = analogRead(A0); Serial.println(v); delay(300); }
Simplemente incluimos la librería en la primera línea y declaramos un sensor de CO2 que lee la puerta A0, y eso es todo (De momento). Recibimos lecturas en la puerta analógica sin calibrar y por ahora nos sirve para ver la sensibilidad del MG811. El resultado será algo como esto:
Para intentar sacar un poco más de información podemos usar el Serial Plotter:
En el grafico se aprecia cuando le soplo al sensor para provocar un aumento de la concentración de CO2 y es muy manifiesto, el pico de descenso al detectarlo. Tened en cuenta que acabo de encender el sensor, por lo que las lecturas no son fiables, aún.
- El fabricante recomienda tener un par de horas encendido el sensor antes de tomar lecturas fiables, ya que necesita un tiempo de calentamiento. Este tipo de medidas en frío son muy bonitas para hacer gráficos en un tutorial, pero muy poco útiles en la práctica. [/fancy-ul] [/three-fourth]
La librería no puede ser ms sencillo de usar, pero como el MG811 es un sensor analógico, el resultado de la medida nos la da en voltios y eso nos obliga (Como con toda la serie MQ) a calibrar el sensor para poder medir en partes por millón (ppm) dado que la respuesta del sensor es bastante lineal, para eso tendremos que hacer dos mediciones en rangos separados y conocidos.
Calibrando el sensor 811
para calibrar el sensor, lo mejor es usar un sensor digital que tengáis por ahí (Por ejemplo, el MH-z19) para que, tras el tiempo de calentamiento pertinente, toméis medidas de un par de puntos. Por ejemplo, las medidas de los dos sensores al aire libre y los anotéis. Después haces lo mismo con un ambiente más cargado, por ejemplo, una bolsa de plástico en la que respiras repetidamente para provocar un aumento de la concentración de CO2 , y nuevamente anotas el resultado. Con eso tendrás dos referencias medidas en concentraciones diferentes y ya puedes establecer una línea para calibrar el resultado en ppm.
Ya, dirá alguien, si yo tuviera a mano un sensor digital de CO2 no usaría este que tengo que calibrar. Objeción intachable a la que hay que hacer un par de comentarios:
- El MG811 es uno de los sensores más precisos deCO2 y aunque sea analógico, no tiene por qué ser un inconveniente en estos tiempos digitales
- Siempre conviene calibrar tus sensores si vas a usarlos en un ambiente profesional para evitar sorpresas (Hay errores, averías y demás) Así que al final lo de calibrar se convertirá en una costumbre siempre.
Por último, siempre puedes hacer lo siguiente:
- Tomas una medida de tu sensor al aire libre (Lejos de tubos de escape. El balcón de un 6º piso parece un buen sitio) y la anotas. Esta medida corresponde a unos 400 partes por millón de CO2 .
- Pones tu sensor en la bolsita de plástico de marras y le respiras repetidamente. La concentración de CO2 en ese ambiente es grosso modo de 4.000 ppm, así que apunta la lectura. Aunque la precisión de este método no es precisamente de grado militar, te servirá para empezar a medir CO2 desde el primer minuto.
En mi caso, las lecturas que he obtenido al aire libre son de 619 para las 400 ppm y de 317 para la bolsa cerrada con aire exhalado.
PPM | Analog |
400 | 619 |
4000 | 317 |
Con estos valores podemos ajustar la salida del sensor de lecturas digitales a partes por millón, sin más que ajustar la curva con una ecuación de primer grado del tipo ppm = a * analog + b, tal y como veíamos en la sesión previa “Sensor CO2 MH-Z19 Parte 2” (Para no repetirlo aquí)
Calculamos los valores de la función polinómica, por el procedimiento descrito allí y obtenemos que:
a = -11,9205298 b = 7778,807947
Con esos valores, ya podemos preparar nuestra primera versión del programa final:
float a = -11.9205298 ; float b = 7778.807947 ;
No te preocupes demasiado de que tus valores no coincidan con estos. Depende de tu sensor, de la concentración de CO2 y de cualquier otra cosa. Simplemente pon aquí tus valores y listo.
void setup() { Serial.begin(115200); Serial.print("lectura"); Serial.print(","); Serial.println("PPM"); }
La segunda línea del setup, simplemente imprime los rótulos de los valores para que luego cuando usemos el Serial Plotter sepamos que es cada línea. Ahora en el loop tendremos que leer el valor de A0, donde está conectado el sensor, y calcular el ajuste a partes por millón, para la función polinómica, cuyos valores a y b, obtuvimos arriba:
int v = analogRead(A0); float ppm = v * a + b ;
El resto solo es imprimir los valores:
Serial.print(v); Serial.print("\t"); // Tabulador Serial.println(ppm); delay(1000);
Y esto es todo. Una vez que usas un par de lecturas calibradas podemos extrapolar correctamente las medidas en partes por millón (ppm) y usarlo con toda confianza. Es un sensor fiable y de larga duración (Por lo que dicen) y tiene la virtud de ser un sensor que reacciona rápido a los cambios.
Os dejo aquí un ejemplo de como varían las lecturas del sensor y el calculo de ppm con los valores calculados del ajuste, donde se ve muy bien cuando está en el exterior y cuando vuelve al interior por la diferencia de concentración de CO2 :