medir-calidad-del-aire-y-co2-con-ccs811-y-arduino

Medir calidad del aire y CO2 con CCS811 y Arduino

¿Qué es un CCS811

El CCS811 es un sensor del fabricante AMS para la medición calidad del aire interior, que podemos usar fácilmente junto con un procesador como Arduino.

Para determinar la calidad del aire interior, el CCS811 es un sensor multi-gas MOX(Metal-Oxide) que incluye medición de monóxido de carbono (CO) y compuestos volátiles (VOCs) como etanol, aminas, o hidrocarburos aromáticos.

Con ellos el CCS811 puede determinar la cantidad de dióxido de carbono equivalente (eCO2). El rango de medición es de 400 a 8192 ppm en eCO2 y de 0 a 1187 ppb en TVOC. El datasheet no proporciona datos sobre precisión en la medición.

Al igual que la mayoría de sensores químicos, el CCS811 necesita un pre-calentador. El fabricante recomienda que el sensor funcione durante 20 minutos para que las mediciones se estabilicen, y durante 48 horas si se cambia de ubicación.

El CCS811 incluye un conversor ADC interno, un procesador interno para realizar los cálculos y comunicación a través de a través de bus I2C. Por lo que es muy sencillo conectarlo con un procesador como Arduino.

arduino-sensor-c02-ccs811-funcionamiento

Dispone de 5 modos de medición (medición continua, o medición cada 0.250, 1, 10, 60 segundos) y que permiten adaptarlo a aplicaciones de bajo consumo alimentadas por batería.

La tensión del CCS811 es de 1.8 a 3.3V, aunque en muchos módulos se incorpora un adaptador de nivel que permite hacerlo funcionar directamente con 5V.

Precio

Los CCS811 son uno de los sensores de calidad interior más baratos que podemos encontrar. Podemos encontrarlos por 4.5 - 5€ en vendedores internacionales de eBay y AliExpress.

arduino-sensor-c02-ccs811-componente

Esquema de montaje

La conexión con el CCS811 es sencilla, ya que la comunicación se realiza a través de I2C. La tensión de funcionamiento es de 1.8 a 3.3V, pero muchos módulos incorporan adaptación a 5V.

arduino-sensor-c02-ccs811-conexion

Por tanto, para alimentar el módulo conectaremos los pines del módulo GND y Vin, respectivamente, y GND y 5V en Arduino.

Por otro lado, para la comunicación por I2C deberemos conectar los pines SCK y SDA con los pines correspondientes de nuestro modelo de Arduino.

El pin WakeUp activa el sensor cuando este se pone a GND. Por otro lado, el pin RST reinicia el sensor cuando se pone a GND. Ambos están pulled Up, así que, para que funcione, deberemos poner explícitamente WAKE a GND.

Finalmente, el pin INT se emplea en algunos modos de funcionamiento, para detectar cuando el sensor tiene una nueva medición o esta sobrepasa un umbral.

La conexión, vista desde Arduino, sería la siguiente.

arduino-sensor-c02-ccs811-esquema

Comprobad que vuestro módulo es compatible con 5V, de lo contrario usad un conversor de nivel.

Ejemplos de código

Para realizar la lectura del sensor usaremos la librería desarrollada por Adafruit, disponible en este enlace.

La librería incorpora varios ejemplos de uso que conviene revisar. El código a continuación es un código simplificado a partir de los ejemplos de la librería.

#include "Adafruit_CCS811.h"

Adafruit_CCS811 ccs;

void setup() {
  Serial.begin(9600);

  Serial.println("CCS811 test");

  if(!ccs.begin()){
    Serial.println("Failed to start sensor! Please check your wiring.");
    while(1);
  }

  // Wait for the sensor to be ready
  while(!ccs.available());
}

void loop() {
  if(ccs.available()){
    if(!ccs.readData()){
    Serial.println(ccs.calculateTemperature(););
    Serial.print("ºC, CO2: ");
      Serial.print(ccs.geteCO2());
      Serial.print("ppm, TVOC: ");
      Serial.println(ccs.getTVOC());
  }   
    else{
      Serial.println("ERROR!");
      while(1);
    }
  }
  delay(500);
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full