Problemas con ESP32


Antes de comenzar este procedimiento de instalación, asegúrese de tener instalada la última versión del IDE de Arduino en su computadora. Si no lo hace, desinstálelo y vuelva a instalarlo. De lo contrario, es posible que no funcione.

Con el último software Arduino IDE instalado desde arduino.cc/en/Main/Software , continúe con este tutorial.

Instalación del complemento ESP32 en Arduino IDE

Para instalar la placa ESP32 en su Arduino IDE, siga estas siguientes instrucciones:

  1. En su IDE de Arduino, vaya a Archivo > PreferenciasInstalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, preferencias abiertas de Linux
  2. Ingrese https://dl.espressif.com/dl/package_esp32_index.json en el campo “URL adicionales del administrador del tablero” como se muestra en la figura siguiente. Luego, haga clic en el botón “Aceptar”:Instalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, Linux ingrese URLNota: si ya tiene la URL de los tableros ESP8266, puede separar las URL con una coma de la siguiente manera:https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Abra el Administrador de tableros. Vaya a Herramientas > Tablero > Administrador de tableros…Instalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, administrador de placas abiertas de Linux
  4. Busque ESP32 y presione el botón de instalación para ” ESP32 by Espressif Systems “:Complemento ESP32 en Arduino IDE Windows, Mac OS X, Linux instalado
  5. Eso es todo. Debería instalarse después de unos segundos.Complemento de placa ESP32 en Arduino IDE instalado

Prueba de la instalación

Conecte la placa ESP32 a su computadora. Con su Arduino IDE abierto, siga estos pasos:

1. Seleccione su Tablero en  Herramientas  >   Menú Tablero (en mi caso es el  DOIT ESP32 DEVKIT V1 )

Arduino IDE seleccione la placa ESP32 en el menú Herramientas

2. Seleccione el puerto (si no ve el puerto COM en su IDE de Arduino, debe instalar los  controladores CP210x USB a UART Bridge VCP ):

Arduino IDE seleccione el puerto ESP32 en el menú Herramientas

3. Abra el siguiente ejemplo en Archivo > Ejemplos > WiFi (ESP32) > WiFiScan

Ejemplo de WiFiScan abierto IDE de Arduino para ESP32

4. Se abre un nuevo boceto en su IDE de Arduino:

Arduino IDE cargando un ejemplo de WiFiScan en ESP32

5. Presione el   botón Cargar en el IDE de Arduino. Espere unos segundos mientras el código se compila y se carga en su tablero.

Arduino IDE carga el boceto de WiFiScan en ESP32

6. Si todo salió como se esperaba, debería ver un mensaje de ” Carga completa. ” mensaje.

Arduino IDE terminado de cargar el boceto ESP32 WiFiScan

7. Abra Arduino IDE Serial Monitor a una velocidad de 115200 baudios:

Abra el monitor serial IDE de Arduino a una velocidad de 115200 baudios

8. Presione el  botón de habilitación integrado de ESP32  y debería ver las redes disponibles cerca de su ESP32:

Instalación del complemento de prueba ESP32 en PC con Windows, Max OS X y computadora con Linux

Solución de problemas

Si intenta cargar un nuevo boceto en su ESP32 y recibe este mensaje de error ” Ocurrió un error fatal: No se pudo conectar a ESP32: Se agotó el tiempo de espera … Conectando … “. Significa que su ESP32 no está en modo de carga / parpadeo.

Una vez seleccionados el nombre de placa y el por COM correctos, siga estos pasos:

  • Mantenga presionado el botón ” BOOT ” en su placa ESP32
Resuelto Se produjo un error fatal: No se pudo conectar a ESP32: Se agotó el tiempo de espera ... Conectando ...
  • Presione el botón ” Cargar ” en el IDE de Arduino para cargar su boceto:
Arduino IDE cargando un nuevo boceto a ESP32
  • Después de que vea el mensaje “ Conectando…. ”En su Arduino IDE, suelte el dedo del botón “ BOOT ”:
Arduino IDE terminado de cargar el boceto ESP32 WiFiScan
  • Después de eso, debería ver el mensaje ” Carga finalizada “.

Eso es todo. Su ESP32 debería tener el nuevo boceto en ejecución. Presione el botón ” ENABLE ” para reiniciar el ESP32 y ejecutar el nuevo boceto cargado.

También tendrá que repetir esa secuencia de botones cada vez que desee cargar un nuevo boceto. Pero si desea resolver este problema de una vez por todas sin la necesidad de presionar el botón BOOT , siga las sugerencias de la siguiente post:[SOLUCIONADO] Error al conectarse a ESP32: se agotó el tiempo de espera para el encabezado del paquete

Es Importante asegúrarse de tener instalado el IDE de Arduino más reciente. El uso de una versión diferente de Arduino IDE puede causar otros problemas y errores inesperados.

on el último software Arduino IDE instalado desde arduino.cc/en/Main/Software , continúe con este tutorial.

Instalación del complemento ESP32 en Arduino IDE

Para instalar la placa ESP32 en su Arduino IDE, siga estas siguientes instrucciones:

  1. En su IDE de Arduino, vaya a Archivo > PreferenciasInstalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, preferencias abiertas de Linux
  2. Ingrese https://dl.espressif.com/dl/package_esp32_index.json en el campo “URL adicionales del administrador del tablero” como se muestra en la figura siguiente. Luego, haga clic en el botón “Aceptar”:Instalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, Linux ingrese URLNota: si ya tiene la URL de los tableros ESP8266, puede separar las URL con una coma de la siguiente manera:https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Abra el Administrador de tableros. Vaya a Herramientas > Tablero > Administrador de tableros…Instalación del complemento ESP32 en Arduino IDE Windows, Mac OS X, administrador de placas abiertas de Linux
  4. Busque ESP32 y presione el botón de instalación para ” ESP32 by Espressif Systems “:Complemento ESP32 en Arduino IDE Windows, Mac OS X, Linux instalado
  5. Eso es todo. Debería instalarse después de unos segundos.Complemento de placa ESP32 en Arduino IDE instalado

Conecte la placa ESP32 a su computadora. Con su Arduino IDE abierto, siga estos pasos:

1. Seleccione su Tablero en  Herramientas  >   Menú Tablero (en mi caso es el  DOIT ESP32 DEVKIT V1 )

Arduino IDE seleccione la placa ESP32 en el menú Herramientas

2. Seleccione el puerto (si no ve el puerto COM en su IDE de Arduino, debe instalar los  controladores CP210x USB a UART Bridge VCP ):

Arduino IDE seleccione el puerto ESP32 en el menú Herramientas

3. Abra el siguiente ejemplo en Archivo > Ejemplos > WiFi (ESP32) > WiFiScanhttps://8fdbca0162964c6b4e2af2577b0f4e44.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html

Ejemplo de WiFiScan abierto IDE de Arduino para ESP32

4. Se abre un nuevo boceto en su IDE de Arduino:

Arduino IDE cargando un ejemplo de WiFiScan en ESP32

5. Presione el   botón Cargar en el IDE de Arduino. Espere unos segundos mientras el código se compila y se carga en su tablero.

Arduino IDE carga el boceto de WiFiScan en ESP32

6. Si todo salió como se esperaba, debería ver un mensaje de ” Carga completa. ” mensaje.

Arduino IDE terminado de cargar el boceto ESP32 WiFiScan

7. Abra Arduino IDE Serial Monitor a una velocidad de 115200 baudios:

Abra el monitor serial IDE de Arduino a una velocidad de 115200 baudios

8. Presione el  botón de habilitación integrado de ESP32  y debería ver las redes disponibles cerca de su ESP32:

Instalación del complemento de prueba ESP32 en PC con Windows, Max OS X y computadora con Linux

Solución de otros problemas

El ESP32 tiene algunos otros problemas comunes, especialmente cuando intenta cargar nuevos bocetos o instalar el complemento ESP32 en el IDE de Arduino. Este posta está dedicada al ESP32 cuando se programa con Arduino IDE. Aquí, proporcionamos una compilación con algunos de los problemas más comunes con el ESP32 y cómo solucionarlos.

No puedo ver las placas ESP32 en el menú Herramientas IDE de Arduino (PC con Windows)

Si aún no ve las placas en el IDE de Arduino, asegúrese de hacer clic en la flecha pequeña (resaltada en la figura a continuación) para desplazarse hacia abajo a través de las placas:

Si en este momento no puede encontrar el nombre de su placa ESP32, le recomendamos que repita el proceso de instalación desde cero.

Después de instalar el complemento ESP32, si abre el IDE de Arduino y no puede compilar el código en su placa ESP32, recomendamos volver a ejecutar la instalación del complemento Arduino IDE ESP32.

Nota: Las PC con Windows suelen tener instaladas varias versiones de Arduino IDE (instalaciones portátiles y locales). Asegúrese de estar ejecutando el IDE de Arduino donde instaló el complemento ESP32.

Ocurrió un error fatal: “No se pudo conectar a ESP32: Se agotó el tiempo de espera … Conectando …”

Cuando intenta cargar un nuevo boceto en su ESP32 y no se conecta a su placa, significa que su ESP32 no está en modo de carga / parpadeo.

Una vez seleccionados el nombre de placa y el por COM correctos, siga estos pasos:

  • Mantenga presionado el botón ” BOOT ” en su placa ESP32
  • Presione el botón ” Cargar ” en el IDE de Arduino para cargar un nuevo boceto:
  • Después de que vea el mensaje “ Conectando…. ”En su Arduino IDE, suelte el dedo del botón “ BOOT ”:

https://a6ad88dbab6d02e88a5242c3755960c2.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html

  • Después de eso, debería ver el mensaje ” Carga finalizada “.

Eso es todo. Su ESP32 debería tener el nuevo boceto en ejecución. Con esos tableros / con esa configuración, después de cargar un nuevo boceto, presione el botón ” ENABLE ” para reiniciar el ESP32 y ejecutar el nuevo boceto cargado.

Error al compilar el boceto de WiFiScan

Si intenta cargar el boceto de ESP32 WiFiScan.ino que se proporciona en la guía de introducción de ESP32 :

Y no se compila con un mensaje de error similar:

En la función 'void setup ()':
ScanNetworks: 52: error: 'class WiFiClass' no tiene un miembro llamado 'firmwareVersion'
Cadena fv = WiFi.firmwareVersion ();

Parece que su Arduino IDE está compilando la biblioteca WiFi para la placa Arduino (en lugar de usar la biblioteca WiFi ESP32).

Nota: probablemente nunca uses ningún escudo WiFi con tu placa Arduino, ¿verdad? Si no lo usa, debe eliminar esa carpeta / esas carpetas de su IDE de Arduino (moverlo a su escritorio, por ejemplo).

La biblioteca WiFi se encuentra, en una ruta similar:

C: \ Usuarios \ ruisantos \ Descargas \ arduino-1.8.7-windows \ arduino-1.8.7 \ libraries \ WiFi

Y / o en:

C: \ Users \ ruisantos \ Documents \ Arduino \ libraries \ libraries \ WiFi

Después de eliminar toda la carpeta de la biblioteca WiFi de una ubicación o ambas ubicaciones, reinicie su Arduino IDE e intente compilar el código nuevamente.

Puerto COM no encontrado / no disponible

Si conecta su placa ESP32 a su computadora, pero no puede encontrar el puerto ESP32 disponible en su Arduino IDE (está atenuado):


Puede ser uno de estos dos problemas: 1. Faltan controladores USB o 2. Cable USB sin cables de datos .

1. Si no ve el puerto COM de su ESP disponible, esto a menudo significa que no tiene los controladores USB instalados. Eche un vistazo más de cerca al chip al lado del regulador de voltaje a bordo y verifique su nombre.

La placa ESP32 DEVKIT V1 DOIT utiliza el  chip CP2102 .

Vaya a Google y busque su chip en particular para encontrar los controladores e instalarlos en su sistema operativo.

Puede descargar los controladores CP2102 en el   sitio web de Silicon Labs .

Una vez instalados, reinicie el IDE de Arduino y debería ver el puerto COM en el menú Herramientas.

2. Si tiene los controladores instalados, pero no puede ver su dispositivo, verifique que esté usando un cable USB con cables de datos.

Los cables USB de los bancos de energía a menudo no tienen cables de datos (solo se cargan). Por lo tanto, su computadora nunca establecerá una comunicación en serie con su ESP32. El uso de un cable USB adecuado debería resolver su problema.

Arduino IDE Serial Monitor “no funciona”

Si el ESP32 solo está imprimiendo texto extraño o mensajes incoherentes en su monitor serial IDE de Arduino, asegúrese de tener seleccionado el puerto COM correcto y configure la velocidad en baudios correcta como se muestra a continuación. En la mayoría de los ejemplos, usamos una velocidad de 115200 baudios.

Error: “Se activó el detector de caída de tensión”

Cuando abre su monitor Arduino IDE Serial y el mensaje de error “Se activó el detector de caída de voltaje” se imprime constantemente una y otra vez. Significa que hay algún tipo de problema de hardware.

A menudo está relacionado con uno de los siguientes problemas:

  • Cable USB de mala calidad;
  • El cable USB es demasiado largo;
  • Tablero con algún defecto (juntas de soldadura defectuosas);
  • Puerto USB de la computadora defectuoso;
  • O no hay suficiente energía proporcionada por el puerto USB de la computadora.

Solución: pruebe con un cable USB más corto diferente (con cables de datos), pruebe con un puerto USB de computadora diferente o use un concentrador USB con una fuente de alimentación externa.

No puedo hacer que el complemento ESP32 funcione con Arduino IDE

Si ha seguido todos los consejos para la resolución de problemas y el complemento ESP32 no funciona con el IDE de Arduino, le recomendamos que experimente la programación del ESP32 con el editor de texto Atom y el IDE de PlatformIO. Siga esta publicación: Editor de texto Atom con PlatformIO IDE para programar el ESP32 .

Terminando

Esperamos que esta guía le haya resultado útil. Si encuentra otros problemas, publíquelos en los comentarios a continuación e intentaremos ayudarlo a resolver su problema.

Error al conectarse a ESP32: se agotó el tiempo de espera para el encabezado del paquete


¿Por qué recibe este error?

Algunas placas de desarrollo ESP32 no entran en modo de carga / parpadeo automáticamente cuando se carga un nuevo código.

Esto significa que cuando intenta cargar un nuevo boceto en su ESP32, el IDE de Arduino no se conecta a su placa y recibe el siguiente mensaje de error:A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

Manteniendo pulsado el botón BOOT / FLASH

Una de las formas de resolver esto es mantener presionado el botón ” BOOT / FLASH ” en su placa ESP32 mientras carga un nuevo boceto al mismo tiempo. Pero tener que preocuparse por esto cada vez que desee cargar un nuevo código puede ser tedioso, especialmente cuando está probando y depurando su código. Hay una forma de solucionar este problema de una vez por todas: ya no es necesario mantener pulsado el botón “BOOT / FLASH”.

¿Cómo solucionar el error?

Para que su placa ESP32 entre en modo de parpadeo / carga automáticamente, puede conectar un condensador electrolítico de 10 uF entre elES pin y GND.

Es posible que desee probar esta configuración primero en una placa de pruebas para asegurarse de que funcione para su placa de desarrollo ESP32.

Nota: los condensadores electrolíticos tienen polaridad. La raya blanca / gris indica el cable negativo.

Si funciona, puede soldar el condensador electrolítico de 10 uF a la placa. Desde elES Y los pines GND están muy separados entre sí, simplemente puede conectar el condensador entre el ES y el GND del chip ESP32 como se muestra en el diagrama esquemático a continuación:

La siguiente figura muestra cómo se ve mi ESP32 después de soldar el condensador. No ocupa mucho espacio y, afortunadamente, no tendrá más problemas para conectarse al ESP32 cuando cargue un nuevo código.

Antes de intentar cargar un nuevo código, debe verificar las conexiones con un multímetro en modo de continuidad; verifique que no haya soldado inadvertidamente nada al siguiente pin.

Se corrigió el tiempo de espera agotado para el encabezado del paquete con prueba de condensadores

Si todo está soldado correctamente, no necesitará presionar el botón BOOT cuando cargue un nuevo código. Tampoco obtendrá el error fatal ocurrido: “No se pudo conectar a ESP32: se agotó el tiempo de espera para el encabezado del paquete”.

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.