Objetivos

 

  • Usaremos un módulo SGP30 con el M5Stack.
  • Escribiremos un programa que mide concentración de CO2 e índice VOC.
  • Haremos que el fondo de pantalla sea de color verde, amarillo o rojo en función de la concentración de CO2. 
     

    Material requerido.

     

    MOdelo basico  

    M5Stack

    Sensor VOC y CO2 Un sensor TVOC SGP30

     

    Sensor de COSGP30

     

     

    Sabido es que medir las concentraciones de CO2 se ha convertido en poco menos que una obsesión en los ambientes públicos, y en especial en los centros educativos, por lo sensible de sus ocupantes, no son ajenos a esta tendencia

    Por eso en Prometec hemos ido probando diferentes sensores que puedan medir el CO2 ambiente, en tutoriales previos, y en esta sesión vamos a probar un nuevo sensor de Sensirion, el SGP30, que pertenece a la familia de nuevos sensores de calidad de aire y en particular a los que miden los VOC totales (O también conocidos como TVOC)

    Sensor VOC y CO2

    Estos sensores del tipo TVOC se desarrollan con la intención de detectar diferentes compuestos químicos volátiles que pueden afectar a la salud si se producen exposiciones prolongadas y son sensibles a un amplio espectro de componentes, entre los que podemos destacar: Alcoholes, Fenoles, Acetonas, Aldehídos y CO2, así como partículas en suspensión (Como el humo de tabaco)

    Es importante entender que los sensores VOC no son capaces de diferenciar cual de los distintos gases diana detecta, sino que más bien nos presentan un índice combinado que se obtiene como una representación general de la calidad del aire. Esto es especialmente importante cuando nos da la medida del CO2 ambiente, porque en realidad no mide CO2  directamente, sino que estima (Calcula) la proporción correcta de CO2 en el ambiente, a base de suponer que se trata de un local cerrado expuesto a la respiración de las personas y a cosas como humo de tabaco o consumo de bebidas alcohólicas, pero no cubas de fermentación o procesos industriales que expulsen cantidades altas de los gases a los que el SGP30 es sensible.

    Como ya comentamos con el sensor MG811 este tipo de sensores VOC están diseñadas para indicar la correcta calidad del aire ambiente en oficinas, aulas y similares y cumplen muy bien con función a bajo coste y su estimación del CO2 es bastante correcta fuera de condiciones extremas, por lo que se usan mucho en lugares donde la precisión no es especialmente importante y donde están habitualmente libres de contaminación más o menos química como suelen ser dichos locales.

    Su bajo coste y buena fiabilidad en esas condiciones, los hacen ideales para medidas generales y muy apreciados en los proyectos domésticos o educativos que siempre buscan hacer este tipo de proyectos sin que los sensores disparen el precio

    En esta sesión vamos a usar un M5STACK (Que hacia tiempo que no tocábamos) y un sensor de TVOC basado en el SGP30 para mostrar lo fácil que es hacer un medidor que se ponga en verde, amarillo, o rojo en función de la lectura del sensor.

    Para los que tengáis inclinaciones más técnicas aquí os dejo el datasheet del SGP30:

     

     

    Conectando el Sensor de VOC / CO2 SGP30

     

    Vamos a usar el M5STACK por que dispone de un modulo VOC basado en el SGP30 con lo que la conexión del sensor es trivial a través del I2C:

    Sensor VOC y CO2

    Basta con conectar y listo para empezar la programación:

     

    Sensor VOV

     

     

    Programando el SGP30

     

    La lectura del SGP30 es trivial usando la librería correspondiente. Puedes cargarla desde tu IDE Arduino:

    \\Programa\Incluir Libreria\Administrar Bibliotecas

    menu arduino

    Para luego escribir SGP30 en la zona de búsqueda:

    Añadir libreria

    Instala la primera opción que sale de instalar la librería de Adafruit y listo. Vamos a por el programa:

    #include <M5Stack.h>
    #include "Adafruit_SGP30.h"

    Una par librería para el M5Stack como siempre y otra para el sensor. Ahora creamos una instancia del sensor de VOC:

    Adafruit_SGP30 sgp;

    Y pasamos al setup():

    void setup()
    { M5.begin(true, false, true, true);
      M5.Lcd.setCursor(80,0);

    Empezamos inicializando el M5 y posicionando el cursor y ahora vamos a comprobar que el sensor está conectado para que en caso negativo no sigamos adelante:

    if (!sgp.begin())
    {   M5.Lcd.println("Sensor not found");
        while (1);
    }

    Si no podemos iniciar el sensor nos quedamos aquí para siempre. En caso contrario podemos seguir con el loop. Empezamos tomando una lectura y comprobamos que ha sido correcta:

    if (! sgp.IAQmeasure()) //Leemos el sensor eCO2/VOC
    {     Serial.println("Measurement failed");
          return;
    }

    Si la lectura es válida, asígnanos los valores a nuestras variables:

    int tvoc = sgp.TVOC ;
    int eCO2 = sgp.eCO2 ;

    Todo lo demás es gimnasia. Vamos a imprimirlos en la pantalla con el siguiente criterio. Si la lectura del COes menor de 600 ppm (Partes por millón), pondremos en verde el fondo de pantalla (Para indicar que la calidad del aire es adecuada). Si el COestá entre 600 y 1000 ppm  pondremos el color de fondo en Amarillo y si pasa de 1.000 ppm pondremos el fondo de pantalla en rojo para indicar el peligro.

    int color = BLACK;
    
    if (eCO2 < 600)       color = GREEN;
    
    else if (eCO2 < 1000) color = YELLOW;
    
    else color = RED;

    Ya podemos imprimir los valores de CO2, con los medios habituales en la pantalla del M5Stack Aquí tienes el indice de los tutos M5Stack por si quieres revisarlos):

    M5.Lcd.fillScreen( color);          // Pint CO2
    M5.Lcd.setCursor(10,40);
    M5.Lcd.setTextSize(10);
    M5.Lcd.print(eCO2);
    
    M5.Lcd.setTextSize(2);
    M5.Lcd.setTextColor(BLACK, color) ;
    M5.Lcd.printf(" ppm CO2");

    Simplemente, hacemos que el color de los textos sea negro y el fondo del color que corresponda en función de la concentración de CO2. Podemos hacer lo mismo para el TVOC:

    M5.Lcd.setCursor(10,150);         // Pint TVOC
    M5.Lcd.setTextSize(10);
    M5.Lcd.print(tvoc);
    
    M5.Lcd.setTextSize(2);
    M5.Lcd.setTextColor(BLACK, color) ;
    M5.Lcd.printf(" ppb VOC");
    delay(1000);

    Aquí puedes descargar el programa completo:  VOC M5stack

    ¡Accede al contenido!

    El resultado lo podemos ver en este mini video: