"Ciencia y Tecnología" por Manolo: Sensor de concentración de gas CO2. CCS811

Marquesina

"AQUÍ NO NOS DETENEMOS A MIRAR EL PASADO POR MUCHO TIEMPO SIGUE SIEMPRE ADELANTE, ABRIENDO NUEVAS PUERTAS Y HACIENDO COSAS NUEVAS. SÉ CURIOSO" Walt Disney.

domingo, 13 de diciembre de 2020

Sensor de concentración de gas CO2. CCS811

Este es otro sensor que está dentro del kit del #DesafíoBajoZero y que vamos a usar en nuestro RetoTech, por eso voy a hacer un resumen para tener la información a mano.

Es un sensor que ahora está de moda por lo que conlleva medir la concentración de gas CO2 en el ambiente. Por cierto hay otros sensores, más baratos y más caros pero este es el que 


Este sensor, de AMS, es un puede detectar un amplio rango de VOCs (Volatile Organic Compounds). Por eso nos puede calcular los TVOCs (VOCs totales) y el equivalente de CO2 (eCO2) mediante conexión I2C en un rango que va desde el 400 al 8100 de partículas por millón, ppm, aproximadamente. Datasheet aquí

La empresa AMS recomienda que se ponga 48 h en funcionamiento para estabilizar las medidas.


Conexiones:

Vin: Puede usarse con 3,3V y 5 V según microprocesador.

GND: Tierra o GND del microprocesador.

SCL: El reloj y lo conectaremos al pin SCL del I2C (En Arduino MEGA es el D21 y en UNO el A5).

SDA: Se conectará al SDA del I2C del micro y es pin de datos. (En Arduino MEGA es el D20 y en UNO el A4).

INT: Es el pin de interruptor. No se conectará a ningún pin en nuestro caso.

WAKE: Lo conectaremos al GND y es para activar el sensor.

RESET: Es para resetear el sensor. No lo conectaremos nosotros.


Este sensor usa la dirección 0x5A.

Necesitamos la librería Adafruit CCS811 que se encuentra dentro de las opciones de descarga de librería de la propia IDE de arduino.

También se puede encontrar este sensor en marcas blancas 

Os dejo unas fotos del proyecto que realicé en el otoño de 2020



                                     




Aquí os dejo el programa para el uso del CCS811 y una pantalla OLED de 0,96 pulgadas

Por cierto que los valores tomados como BUENO, REGULAR y PELIGROSO son orientativos. Sugiero que se modifiquen según el proyecto.

/***************************************************
Programa de ejemplo para monitorizar los niveles de
Dióxido de Carbono (equivalente) eCO2
y la Tasa de Compuestos Orgánicos Volátiles TVOC y
verlos en pantalla OLED 1306 o monitor plotter
***************************************************/

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

#define OLED_RESET 12
Adafruit_SSD1306 oled(128,64, &Wire , OLED_RESET);

String estado;
int co2;

#include "Adafruit_CCS811.h"          // Incluir la librería del sensor
Adafruit_CCS811 ccs;         // Crear un objeto sensor

void setup() {
  Serial.begin(115200);
  Serial.println("CO2, TVOC");
  if(!ccs.begin()){   // Intentar inicializar el sensor
    Serial.println("¡No se ha podido inicializar el sensor!
 Por favor, comprueba el cableado.");
    while(1);
  }
  while(!ccs.available());        // Esperar a que el sensor esté preparado
Wire.begin();
   oled.begin(SSD1306_SWITCHCAPVCC, 0X3C);
  delay(1000);
  oled.clearDisplay();   
  delay(1000);
}

void loop() {
  if(ccs.available()){                // Si el sensor está disponible
    if(!ccs.readData()){              // Cuando haya datos
      Serial.print(ccs.geteCO2());
// Obtener y enviar el nivel del CO2 por el puerto serie
      co2=ccs.geteCO2();
      Serial.print(", ");              // Separar los valores de CO2 y de TVOC 
      Serial.println(ccs.getTVOC());  // Obtener y enviar la tasa de TVOC, 
 enviarla por el puerto serie y acabar la dupla de datos
    }
    else{
      Serial.println("ERROR!");       // Cuando ocurra un error
      while(1);                       // El dispositivo deja de funcionar
    }
  }
  delay(6000);                         // Hacer la medida cada 2 segundos(2000ms)

                              if (co2 >= 3000)
                              {
                                estado = "peligroso";
                              }
                              if (co2 <= 1000)
                              {
                                estado = "bueno";
                              }
                              if (co2 > 1000 && co2 <  3000 )
                              {
                                estado = "regular";
                               }


 oled.clearDisplay();
   oled.setTextColor(WHITE);
   oled.setCursor(0,0);
   oled.setTextSize(2);
   oled.print("Nivel CO2");
   oled.setTextColor(WHITE);
   oled.setCursor(0,25);
   oled.setTextSize(2);
   oled.print(co2);
   oled.display();
   oled.setTextColor(WHITE);
   oled.setCursor(90,25);
   oled.setTextSize(2);
   oled.print("ppm");
   oled.display();
   oled.setTextColor(WHITE);
   oled.setCursor(35,50);
   oled.setTextSize(2);
   oled.print(estado);
   oled.display();
   delay(2000);

}