Monitor de Co2 con sensor mh z19


¿Alguna vez se ha preguntado por qué a menudo se siente somnoliento o incluso cansado por la mañana después de dormir toda la noche? Hay muchas cosas que pueden provocar un sueño de mala calidad,   pero   dada la grave pandemia  al que nos estamos exponiendo  desgraciadamente, también  hay otra razón  contundente: una mayor  exposición a  agentes virulentos al no  estar suficientemente ventilado la estancia .

En efecto , ambas casuísticas citadas  se deben a una concentración inadecuada de dióxido de carbono (CO2) puesto que las personas emiten dióxido de carbono durante la respiración , lo  que implica que   la concentración de CO2 es uno de los principales factores que afectan la calidad del aire y con ello   la exposición a agentes infecciosos.

Por estas razones según los científicos  apuntan que puede ser interesante contar con  un medidor de CO2 para comprender si la concentración de CO2 en nuestro entorno  como afecta la calidad del aire.

Una concentración menor de 800 ppm se considera adecuada, aunque lo ideal es que ronde las 500 ppm. A partir de 800 ppm salta la alerta ya que la ventilación es deficiente, lo que facilita en gran medida la permanencia del virus en el aire, de tal forma que su capacidad de transmisión puede prolongarse durante varias horas.

Estos medidores se pueden comprar ya montados, pero  no dispondremos ningún nivel de mejora ni personalización ni interacción  y los de bajo coste además ofrecen muy poca precisión ,  por lo que vamos a  ver como construir  un medidor real para que entendamos como funciona y de paso podemos pensar en futuras mejoras .

 

La elección del sensor

En un prototipo puede que se vea tentado en usar  sensores del tipo  MQ135 , un sensor de calidad de aire barato) , que detecta NH3, NOx, alcohol, benceno, humo, CO2  y que hemos visto en numerosos proyectos en este blog.

Este  tipo sensores  son  módulos listo para usar para Arduino y Raspberry Pi  gracias a su doble salida analogica   y digital  (para el uso con laRPi se requiere un convertidor AD adicional a no ser que solo necesite la señal de haber superado el umbral  ajustable de disparo de la señal digital ,pero para Arduino la conexión es directa ). 


Los sensores de la serie MQ utilizan un pequeño elemento calefactor con un sensor electrónico-químico por lo que son sensibles a una amplia gama de gases y son adecuados para su uso en interiores. Es cierto que  tienen una alta sensibilidad y un tiempo de respuesta rápido, pero tardan unos minutos en dar lecturas precisas porque el sensor tiene que calentarse.

Estos sensores son  muy fáciles de de usar para medir la concentración de GLP, i-butano, propano, metano, alcohol, hidrógeno y humo en el aire, midiendo concentraciones de gas de 100 a 10000 ppm   siendo ideal para la detección de fugas de gas, alarmas de gas u otros proyectos de robótica y microcontroladores. 

Según el fabricante  en general este tipo de sensores tienen relativa poca precisión incluso después de aplicar la corrección de temperatura y humedad. Además  suelen  tener  un alto consumo de energía (800 mw) y un tiempo de precalentamiento  excesivo lo cual son bastantes inconvenientes para abandonarlo y probar con otro  tipo de sensor.

Hay bastantes sensores de CO2 en el mercado de precios muy variados: MG811 (~ 40 $), MH-Z14 WINSEN (~ 40 $), MH-Z19 WINSEN (~ 30 $), K-30 (~ 85 $), VERNIER CO2-BTA ( ~ 330 $).

Los  sensores de CO2 NDIR (infrarrojo no dispersivo) son el   tipo de sensor más común utilizado para medir el CO2, pues  tienen buena precisión y bajo consumo de energía aunque los precios son muy variados.

Un ejemplo de sensor NDIR es el sensor MH-Z19 tiene buenas características y muy buen precio, así que puede ser una buena opción.  Aquí algunos parámetros técnicos del sensor MH-Z19 :

Tensión de trabajo   4,5 V ~ 5,5 V CC
Corriente media   <85 mA
Nivel de interfaz   3,3 V
Rango de medición   0 ~ 5% VOL opcional
Señal de salida   PWM, UART
Tiempo de precalentamiento   3min
Tiempo de respuesta   T90 <90 s
Temperatura de trabajo   0-50C
Humedad de trabajo   0 ~ 95% de humedad relativa
Peso   15 g
Esperanza de vida   > 5 años
Dimensión   57,5 × 34,7 × 16 mm (largo × ancho × alto)

Este sensor e pequeña escala de uso general  utiliza el principio infrarrojo no dispersivo (NDIR) para detectar la presencia de CO2 en el aire, con buena selectividad y dependencia anaerobia, larga vida y cuenta con compensación de temperatura incorporada y al mismo tiempo  salida en serie, salida analógica y salida PWM. Además, tiene un precio contenido (en amazon unos 14€)

Hay varias  variantes de este sensor con diferentes rangos de medición:

  • 0 ~ 10000 ppm
  • 0 ~ 2000 ppm
  • 0 ~ 5000 ppm

Una opción interesante es la primera porque el modelo B es el más extendido y fácil de conseguir,  si bien  un nivel de CO2 superior a 2000 ppm no sería apropiado para un ambiente doméstico. 

Puede ser interesante montar un dispositivo móvil para poder medir el nivel de CO2 donde quiera dentro del hogar , puesto que como el voltaje de trabajo del MH-Z19 es de 4.5 ~ 5.5V DC, puede usarse la salida USB standard  o simplemente  3 baterías AA ) como fuente de alimentación.

 

Respecto a la visualización de los datos una pantalla OLED LCD 0.96 «I2C IIC SPI Serial 128X64 (en amazon unos 9€)  es una buena opción pues  es muy fácil usarla con nuestro Arduino  gracias a la conexión I2C , y claro las librerías gratuitas para Arduino

Para  poderla usar en nuestro proyecto , es importante tener en cuenta que necesitaremos  la biblioteca de controladores oled Adafruit SSD1306

Respecto al conexionado , no puede ser más sencillo, pues conectaremos la alimentación   del sensor ,la pantalla  y nuestro  arduino  a través de un interruptor al polo positivo de   un portapilas de 3 pilas de 1.5V. Obviamente  complementaremos las conexiones de VCC  con las  masa (0v) conectando el  polo negativo del portapilas a las conexiones de 0v del sensor ,la pantalla  y nuestro  arduino.  

El montaje se complementará con las conexiones de datos  del  sensor MH-Z19    y de la pantalla , conectando la salida PWM del  sensor digital  al pin 7 (pin digital 7) de Arduino ,  y las conexiones de datos I2C  de la pantalla a los pines  SDA( pin 19)   y   pin SCL(pin 18) de nuestra placa Arduino. 

 

Medidor de CO2 MH-Z19

Este  es el resumen de elementos básicos de  hw para hacer este pequeño proyecto:

  • Sensor de co2 infrarrojo MH-Z19 (en amazon unos 14€)
  • Arduino Pro Micro  ( o cualquier otra placa Arduino que disponga)
  • Pantalla OLED LCD 0.96 «I2C IIC SPI Serial 128X64 (en amazon unos 9€)
  • Soporte de batería 3 AAA 1.5V 
  • Interruptor

Implementación

Necesitaremos lo siguientes elementos software para implementar este proyecto

Respecto al   proyecto, cuyo código Arduino al completo podemos ver más abajo , de forma  simplificada  este es   su funcionamiento: 

Primero importamos las librerías  para el control de la  pantalla I2C

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

A continuación definiremos las variables, empezando definiendo el pin 7 para el pwm para el sensor de Co2,  constantes, etc   destacando el valor del precalentamiento para el sensor de co2  cuyo valor es de 120 segundos

#define pwmPin 7        
int preheatSec = 120;
int prevVal = LOW;
long th, tl, h, l, ppm = 0;

Ahora veremos la  parte esencial , cuya principal ocupación es proporcionar el valor de la medida de C02 en la variable ppm 

void PWM_ISR() {
long tt = millis();
int val = digitalRead(pwmPin);

if (val == HIGH) {
if (val != prevVal) {
h = tt;
tl = h - l;
prevVal = val;
}
} else {
if (val != prevVal) {
l = tt;
th = l - h;
prevVal = val;
ppm = 2000 * (th - 2) / (th + tl - 4);
}
}
}

Otra  función  importante es la inicialización de la pantalla OLED , que  conseguiremos al introducirla en la función setup

void setup() { 
Serial.begin(115200);
pinMode(pwmPin, INPUT);
attachInterrupt(digitalPinToInterrupt(pwmPin), PWM_ISR, CHANGE);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
display.setTextColor(WHITE);
}

Dado el intervalo de precalentamiento , es interesante una función que presente la cuenta atrás para que el usuario sea consciente de que es necesario esperar ese intervalo:

void displayPreheating(int secLeft) {
display.setTextSize(2);
display.println("PREHEATING");
display.setTextSize(1);
display.println();
display.setTextSize(5);
display.print(" ");
display.print(secLeft);
display.display();
}

Obviamente tampoco nos puede faltar la visualización del nivel de ppm , que solo se mostrará si es superior  a 1000 ppm ( obviamente podemos ajustar este umbral al valor que deseemos).

void displayPPM(long ppm) {
display.setTextSize(2);
display.println("CO2 PPM");
display.setTextSize(1);
display.println();
display.setTextSize(5);
if (ppm < 1000) {
display.print(" ");
}
display.print(ppm);
display.display();
Serial.println(ppm);
}

Finalmente en el bucle principal  básicamente  borraremos la pantalla y mostraremos la  cuenta atrás  del precalentamiento para finalmente mostrar el nivel de ppm  cada 1000ms.

void loop() { 
display.clearDisplay();
display.setCursor(0,0);
if (preheatSec > 0) {
displayPreheating(preheatSec);
preheatSec--;
}
else {
displayPPM(ppm);
}
delay(1000);
}

 

Para terminar, IhorMelynk nos ofrece el código fuente para Arduino que el mismo cargó en su Arduino:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

#define pwmPin 7

int preheatSec = 120;
int prevVal = LOW;
long th, tl, h, l, ppm = 0;

void PWM_ISR() {
long tt = millis();
int val = digitalRead(pwmPin);

if (val == HIGH) {
if (val != prevVal) {
h = tt;
tl = h - l;
prevVal = val;
}
} else {
if (val != prevVal) {
l = tt;
th = l - h;
prevVal = val;
ppm = 2000 * (th - 2) / (th + tl - 4);
}
}
}

void setup() {
Serial.begin(115200);
pinMode(pwmPin, INPUT);
attachInterrupt(digitalPinToInterrupt(pwmPin), PWM_ISR, CHANGE);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
display.setTextColor(WHITE);
}

void displayPreheating(int secLeft) {
display.setTextSize(2);
display.println("PREHEATING");
display.setTextSize(1);
display.println();
display.setTextSize(5);
display.print(" ");
display.print(secLeft);
display.display();
}

void displayPPM(long ppm) {
display.setTextSize(2);
display.println("CO2 PPM");
display.setTextSize(1);
display.println();
display.setTextSize(5);
if (ppm < 1000) {
display.print(" ");
}
display.print(ppm);
display.display();
Serial.println(ppm);
}

void loop() {
display.clearDisplay();
display.setCursor(0,0);
if (preheatSec > 0) {
displayPreheating(preheatSec);
preheatSec--;
}
else {
displayPPM(ppm);
}
delay(1000);
}

 

Teniendo esto en cuenta, a la hora de mantener el contacto social los espacios al aire libre se presentan como la mejor alternativa. En espacios cerrados la ventilación es fundamental. No es suficiente con abrir las ventanas 10 minutos cada hora. La ventilación debe ser constante. Por supuesto, en ambos casos la mascarilla sigue siendo un elemento de protección esencial.

 

 

 

 

 

 

 

Solidaridad tecnológica frente al coronavirus


Ante las crisis  graves  que han ocurrido a lo largo de la historia    se han  ido  repitiendo  una y otra vez que se  consigue aflorar   lo mejor ( y también  lo peor ) del ser humano ,   y desgraciadamente ahora  estamos ante una nueva  desastrosa situación del coronavirus  como pandemia global,  que ha conseguido que profesionales, makers, aficionados   , personas de diferentes ámbitos  ,  así como   empresas,organizaciones, etc   estén trabajando  la mayoría de forma altruista  en mitigar  los efectos de la carencia de material sanitario   mediante  técnicas  modernas como la impresión 3d, corte cnc , electronica embebida ,etc 

En esta linea , que  se ha hecho eco toda la prensa, la mayoria de los s esfuerzos se centran  es   lograr un respirador artificial barato open source   que sea  utilizable  durante   esta grave situación pues este dispositivo se ha convertido en una pieza clave en las UCI básicamente porque se prevee que no va  a haber suficientes suponiéndo  un enorme  reto para los médicos de todo  donde desgraciadamente ante la ausencia de estos en algunos países se ven en los dilemas morales de decidir a quien colocárselo.

Estos respiradores caseros  son muy importantes  en esta pandemia,  pero   hay muchos mas frentes abiertos   en esta comunidad  de solidaridad  tecnológica pues    hay otros grupos  para construir gafas de protección , mascarillas , pinzas desechables , piezas de repuesto para material sanitario, maquinas dispensadores de gel , etc , todos ellos   dispositivos   o herramientas  que podemos  fabricar gracias a la impresión 3D o técnicas modernas como el CNC

Este es el foro que pretende  centralizar toda la ayuda   https://foro.coronavirusmakers.org/     , el hashtag de Twitter #CheapVentilators para conocer los equipos de otros países y a la cuenta @AIRE_Covid19 donde publicarán toda la información del proyecto español.

También  hay un sitio web: https://coronavirusmakers.org/index.php/es/  con  información general filtrada

Asimismo es posible contactar via Telegram  en las diferentes grupos de trabajo que se han asignado , siendo el grupo principal de Telegram https://t.me/coronavirus_makers

Respiradores  artificiales

El funcionamiento de los respiradores artificiales modernos está condicionado por una sensorización muy   compleja  que permite ajustar la mezcla aire-oxígeno, generar alarmas , etc.   función que obviamente no se va a poder solucionar  con una solución «sencilla» que sea open  source pues se busca  dispositivos que puedan fabricarse rápido y de forma distribuida usando,  impresión 3D , corte CNC , etc   y electronica convencional  para construir algo  que   pueda  ayudar la falta de respiradores comerciales

Actualmente en el foro  respecto a los respiradores  hay  tres líneas de trabajo:

    • Estudiar la línea de suministro de las máquinas de respiración, comprobando si de verdad hay una rotura de stock y eliminar los cuellos de botella que pudieran aparecer . 
    • Adaptación de máquinas actuales para ser utilizadas como respiradores; por ejemplo, las máquina CPAP o BIPAP , usadas contra la apnea del sueño que utilizan miles de personas todas las noches .
    •  Crear máquinas de respiración artificial basándose en   maquinas mas «simples» ,por ejemplo el balón de tipo Jackson Rees   dotándoles  de una «inteligencia» que les permita funcionar de forma autónoma. En ese sentido  se estaba trabajando sobre dos  modelos , uno  iniciado por el Mit   en el 2010 y  otro por la Universidad Rice en Houston. Muy resumidamente se basan subyacentemente en usar diseños clásicos probados   eliminando la necesidad de  tener a un sanitario dedicado exclusivamente a esa tarea pues es un desperdicio de recursos si podemos tener una máquina capaz de hacer ese trabajo sin cansarse y de una forma eficiente  y autónoma.

Obviamente por su bajo precio  y alto potencia  se están  abordando  diseños que utilizan material médico desechable y ampliamente disponibles para liberar manos de médicos y/o enfermeros en situación de emergencia.

En este caso, en lugar de asistir el facultativo con un  sistema respiratorio manual tipo de bolsa, se busca generar un sistema mecánico que le permita liberarlo de esta tarea para atender a otros enfermos en la misma sala. Estos modelos no disponen por el momento de los parámetros avanzados de los respiradores modernos. Se está explorando esta posibilidad, pero requerirá mucho más tiempo.

En todo  caso queda clara la dificultad de tratar unos pulmones con Covid-19, que requieren de una gran complejidad pero gracias a las aportaciones de personal sanitario  explican que ante problemas de  respiradores avanzando los respiradores pueden ser sencillos los primeros días pues estos pacientes son muy fáciles de ventilar en general.

Por tantos estos diseños que están surgiendo,  pueden ser muy buenos para los primeros días aunque no tengan  sofisticación y permitan respiraciones espontáneas:es decir ventilación controlada por presión, a una frecuencia respiratoria entre 12-30 y con posibilidad de PEEP hasta 20 con monitorización del volumen corriente y volumen minuto. Eso ayudaría en las primeros días  (que son los peores )  con la esperanzar de que mas adelante  se buscaría alternativa con respiradores actuales sofisticados , ya que  llegado el momento no habrá para todos en las fases iniciales y algo  tan relativamente sencillo como los antiguos ventiladores con estas  nueva mejora  podría salvar vidas

Mascarillas caseras

Dados los problemas para conseguir mascarillas hay muchas opciones para fabricarlas nosotros mismos   siendo la mas famosa la  Mascarilla DIY con Goma EVA como filtro

En un grupo de Facebook un chico de Eslovenia se creó un diseño de una mascarilla para usar como filtro un filtro HEPA ( por ejemplo los usados en aspiradoras convencionales )  y de hecho este diseño ,dada la situación, como son dificiles de conseguir, desde Taipei dijeron que han usado goma EVA como filtro, asi que se he rediseñado y los he subido a Thingverse.

La goma EVA hay que cortarla en cuadrados de 77 x 77 mm para la de hombre y de 68 x 68 para mujer. Recomiendan que para que ajuste mejor a la cara, que se caliente un poco  el plástico en el microondas para amoldarla.

Ademas antes de usarla se debería limpiar todos sus componentes con alcohol isopropilico.

Hay dos tamaños para mujer y para hombre y los  ficheros estan disponibles en  https://www.thingiverse.com/thing:4223817

 

Ese diseño no es único , pues  en thinginverse  podemos encontrar muchos  mas , pero en este lo llamativo de este ultimo ,  es lo sencillo del filtro

 

 

Gafas de Protección

Se busca  intentar suplir una posible  carencia de gafas de protección para uso hospitalario  

Hay muchos disponibles  y otros nuevos que están apareciendo  usando materiales sencillos como pantallas ( por ejemplo  con encuadernadores de papelería)

Válvulas

Unos makers italianos han impreso en 3D una válvula que se les había averiado en un hospital de Milán (hemos pedido a uno de los Fablabs de Milan, para saber si tienen el STL): https://www.3dprintingmedia.network/covid-19-3d-printed-valve-for-reanimation-device/

 

 

Mas ideas

Hay muchísimos mas ejemplos de dispositivos   y diseños que nos pueden ayudar en el día a día   a sobrellevar esta grave pandemia , desde soportes para pomos de puertas, abridores de puerta con el  pie,  dispensadores automáticos de productos de desinfección   y un largo etcétera

Para inspirarnos basta buscar «coronavirus» en el repositorio thingiverse.com

 

Amigo lector , si tiene  alguna idea o sugerencia siéntase  libre de compartirla con esta comunidad  y por supuesto si tiene ganas de colaborar participe   en el foro en español del coronavirus  !MUCHO ANIMO QUE JUNTOS LO VAMOS A SUPERAR!