bclose

Kit de evaluación SEK-SCD41 CO2

Objetivos

 

 

  • Veremos como usar el kit de evolución del SCD41  CO2.
  • Veremos como leer el CO2, Temperatura y Humedad relativa con el..
  • Publicaremos esos valores mediante push bluetooth a tu movil.
 

 

Material requerido.

 

Kit de evaluacion del SCD41  Sensirion SK-SCD41 sensor de CO2
modelo esp32 con menos pines  ESP32

 

Midiendo CO2 (Otra vez)

 

Ando esta temporada, particularmente ocupado desarrollando un sensor comercial de calidad de aire y CO2 con intenciones de sacarlo al mercado, basado en el sensor de CO2 de Sensirion SCD41, que parece ser de lo mejor que el mercado puede ofrecer en este tema, para la cuestión de la ventilación de espacios comunes, a la que todos somos tan sensibles desde que llegó el maldito bicho.

Tengo ya las primeras betas del producto a falta de retoques y algunos añadidos pendientes, pero ya es un instrumento que mide y que espero enviar a calibrar en breve, a algún sitio serio como LABEIN o similar.

El dispositivo dispone de una colección de sensores y dispositivos importante:

 
 
  • Sensirion SCD41: Para medir CO2.
  • Sensirion SHT40: Temperatura y humedad relativa.
  • Sensirion Sgp40: Componentes Orgánicos Volátiles (VOC)
  • Reloj interno de precisión con batería de larga duración.
  • Grabador de SDs para registrar las lecturas de los instrumentos.
  • Un buzzer para hacer alarmas
  • Una pantalla TFT color para mostrar los valores de las lecturas.
  • Funciona con pilas o conectado a un cable micro USB.  
Prosensor

Ya tenemos en marcha la versión beta de todo lo de arriba con una placa integrado de nuestro propio diseño, (que ha desarrollado los socios y amigos de Microcomp, que funciona magníficamente bien) y estamos a la espera de afinar todo, mejorar la fuente del display (Estamos en beta) incluir el acceso a las lecturas mediante el móvil y en seguida incluir la publicación MQTT, para subir los datos a un servidor en la nube.

La idea principal es vender el sensor con el firmware incluido, pero también hacer el programa disponible en Github para que el que lo desee pueda partir de él y hacer sus propias modificaciones, para lo que hemos lavado y peinado el programa lo mejor que hemos sabido/podido por aquello de que enseñar la ropa interior, es siempre un asunto delicado, pero que dado el interés que hay por desarrollar proyectos de medida de CO2 puede ser una cuestión bien recibida por empresas y centros de formación (Esperamos)

La cuestión es, (Que me he enrollado contando mi vida) que estaba pensando como organizar el asunto para que, accediendo vía WIFI, por ejemplo, pudiera recibir en el móvil o en una tableta la señal de los sensores de modo que, en una zona relativamente amplia como una oficina o aula, se pueda ver a tamaño suficiente la información a una distancia prudente. Andaba yo pensando en un servidor WIFI con una pagina donde mostrara las diferentes lecturas, cuando en una visita a los amigos del centro Tartanga de Erandio, que también tienen un proyecto conjunto con otros varios centros de formación para desarrollar un proyecto contra el COVID 19, y que, por una de esas casualidades de la vida , también usan el Sensirion SCD41 como sensor básico, me dice Rober que hay una aplicación estándar para eso que nos ofrece Sensirion, llamada Sensirion BLE gadget que hace exactamente eso (Y yo sin enterarme)

El BLE gadget de Sensirion es una sencilla librería que podemos usar para olvidarnos de todos los líos que lleva aparejado montar un servicio web o similar, ya que integra un servidor BLE 5.0 (Bluetooth Low Energy) que hace una publicación periódica en modo push, de los valores del sensor y que podemos recibir en nuestro móvil (Android o IOS) sin más problema, y que, además, parece que puede hacerlo con varios dispositivos y varios sensores (Cosa que aún tengo que probar).

Naturalmente, me faltó tiempo para volver a la oficina y ponerme a hacer pruebas. El resultado es esta humilde sesión que tenemos entre manos y que espero que, por un lado, os llame la atención tanto como a mi y por otro, veáis que montar un proyecto con este sistema es sencillo hasta lo increíble. Si no me creéis seguid leyendo (Astuto ardid para conseguir que leáis el artículo)

 

El kit SEK-SCD41 de Sensirion para CO2

 

Aunque en estos momentos es casi imposible conseguir los sensores SCD41 de Sensirion (Lo que nos tiene muy jodidos para vender nuestro sensor) en cambio si que se consiguen muy bien los kits de evaluación del sensor y eso nos permite hacer un prototipo de medida CO2 con publicación en un servicio BLE de forma instantánea o casi a tu móvil.

Kit de evaluacion del SCD41

Para ello necesitas simplemente un kit SEK-SCD41, un ESP32 normal y corriente y unos pocos cables DuPont para unir todo, y como la conexión es I2C el cableado es trivial:

Conexion SCD41 con ESP32

Basta conectar la alimentación y GND, mas los pines I2C Según esta tabla

ESP32GND3.3V2221
SCD41GND
(Negro)
VDD
(Rojo)
SCL
(Amarillo)
SDA
(Verde)

 

Instalando la librería Sensirion ble Gadget

 

Para montar la App del móvil, lo primero tienes que descargar la librería Sensirion ble Gadget aquí:

https://github.com/Sensirion/arduino-ble-gadget

E instalarla, o bien desde el administrador de librerías ( \\Programas\Incluir librerías\ Administrar bibliotecas) busca “ble gadget” e instala el resultado:

Administrador de bibliotecas

Una vez instalada la librería, también tendrás los ejemplos, Puedes ir a \\Archivo\ejemplos y buscar “Example8_SCD4x Ble_Gadget with…”

Ejmplo de codigo arduino

Te cargará las demos del gadget y verás enseguida lo fácil que es de activar, vamos a ver el programa. La forma de usar ahora el gadget en nuestro móvil es ridículamente simple. Tres includes como siempre con las librerías, el Wire porque el SCD41 tiene interface I2C los que nos evita los engorros de comunicación, la librería del gadget y un temporizador

#include "esp_timer.h"
#include "Sensirion_GadgetBle_Lib.h"
#include <Wire.h>

Usamos una variable con la dirección I2C del sensor, y un par de variables instrumentales:

const int16_t SCD_ADDRESS = 0x62;
static int64_t lastMmntTime = 0;
static int mmntIntervalUs = 5000000;

No os preocupéis mucho por lo del tipo static de momento. El setup no da para mucho

Serial.begin(115200);
while(!Serial);
gadgetBle.begin();
Serial.print("Sensirion GadgetBle Lib initialized with deviceId = ");
Serial.println(gadgetBle.getDeviceIdString());

Iniciamos el puerto serial con la primera línea, y esperamos hasta que este listo (La segunda), después hacemos un begin del gadget que puede parecer raro, pero es lo mismo que haces con la puerta Serial, y el resto es sacar un par de mensajes que nos harán falta más adelante.

Por último, arrancamos el I2C y esperamos un poco para que se inicie el sensor:

Wire.begin();
delay(1000);

Mi experiencia con el SCD41 es que necesita más de 1 segundo para arrancar y se acerca mas a 5 segundos, pero no pasa nada, no hay prisa. Por último, unos mensajes para hablar mediante I2C con el sensor SCD41.

ire.beginTransmission(SCD_ADDRESS);
Wire.write(0x21);
Wire.write(0xb1);
Wire.endTransmission();

Inicia la comunicación con la dirección que definimos arriba del sensor, y manda dos códigos hexadecimales que por lo visto son iniciar medidas periódicas y programarlas cada dos segundos (Se nota que el fabricante se sabe los códigos, pues vale) Lo del loop es aún más fácil:

void loop()
{  if (esp_timer_get_time() - lastMmntTime >= mmntIntervalUs)
measure_and_report();
gadgetBle.handleEvents();
delay(3);
}

Es decir, lanza la función measure and report cada tanto tiempo. Debajo tenemos la función que puede parecer un poco más complicada, pero que básicamente transmite al I2C y a nuestro sensor una serie de ordenes:

Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0xec);
Wire.write(0x05);
Wire.endTransmission();

No tengo ni idea de que son esos códigos y no me apetece leer el datasheet para enterarme porque casi seguro es que le pide el valor de COhumedad y temperatura y que recoge 12 bytes (Según el ejemplo, que son las lecturas del sensor) con el siguiente grupo de instrucciones:

Wire.requestFrom(SCD_ADDRESS, 12);
counter = 0;
while (Wire.available())
data[counter++] = Wire.read();

Pero tampoco te compliques mucho la vida ya que puedes simplemente copiar la función y variar las variables que le envías. El resto de la función procesa esos datos recibidos y los imprime. De especial interés son las últimas líneas, donde publicamos las lecturas a la aplicación del móvil mediante bluetooth

gadgetBle.writeCO2(co2);
gadgetBle.writeTemperature(temperature);
gadgetBle.writeHumidity(humidity);

gadgetBle.commit();

Fíjate también que esto nos abre muy interesantes aplicaciones posibles de modo que podamos publicar valores de nuestros propios sensores. Habrá que comprobar que no está cortada tal posibilidad en un futuro próximo.

El programa empieza inmediatamente a volcar los datos a la consola:

Ejemplo de lecturas

Pero lo que es una delicia es la aplicación para el móvil que puedes descargar de internet según tu sistema operativo:

Mobile App Support

Download the Sensirion MyAmbience CO2 App to monitor your gadget, plot the sensor values and share/export the data:

Y cuando la uses, verás algo como este video: