Qualité d'air intérieur (partie 4) : CCS811 et MOD-ENV sous MicroPython

Dans les précédents articles ...
nous nous étions concentrés sur l'implication du taux d'Oxygène, de CO2 et des composés organiques volatiles.
Cette fois, nous allons les mesurer à l'aide du CCS811 et pilotes pour MicroPython (les pilotes Arduino sont faciles à trouver sur le Net).

Le CCS811
Le CCS811 est un capteur I2C d'AMS qui rentre dans la catégorie "capteur de gaz". Le CCS811 est capable de détecter une large gamme ce Composés Organiques Volatiles (aussi appelé VOC pour Volatile Organic Compounds). Il peut être utilisé pour mesurer la qualité de l'air à l'intérieur des pièces.

Lorsqu'il est connecté sur un microcontrôleur pour obtenir une évaluation de:
  • TVOC (Total Volatile Organic Compound, total des composés organiques volatiles) 
  • eCO2 : équivalent CO2 (assez précis)
Le breakout CCS811 d'Adafruit Industries
Si le breakout d'Adafruit est intéressant, Olimex produit un module de capture de données environnementales (CCS811 + BME280) nommé MOD-ENV pour relever le CO2, TVOC, température, humidité, pression atmosphérique. A noter que l'humidité et la pression athm. permettent d'améliorer sensiblement la fiabilité des relevé.
Le MOD-ENV (CCS811 + BME280)
Le module MOD-ENV expose une connectique standard UEXT qui facilite les connexions de prototypage au branchement d'une simple nappe de fils.

Brancher le breakout CCS811
Le schéma de branchement est relativement simple et se présente comme suit:
Source: GitHub ESP82266-uPy de MCHobby
Tester le breakout CCS811

Bibliothèque

La bibliothèque ccs811.py pour MicroPython est disponible sur le GitHub de MCHobby.

Tester
Les habitués de MicroPython savent qu'une fois la bibliothèque disponible l'extraction et l'affichage des données est trivial.

import time
import ccs811

from machine import I2C

i2c = I2C( 2 )
ccs811 = ccs811.CCS811( i2c )

# Vérifier si le capteur retourne une erreur
if ccs811.check_error:
 print( "Oups! Une erreur est survenue!")
 print( "ERROR_ID = %s" % ccs811.error_id.as_text )
 while True:
  time.sleep( 0.100 )

# Attendre que le capteur soit prêt
while not ccs811.data_ready:
 time.sleep( 0.100 )

while True:
    print("CO2: {} PPM, TVOC: {} PPB"
          .format(ccs811.eco2, ccs811.tvoc))
    time.sleep(0.5)

Ce qui produit les résultats suivants:

CO2: 423 PPM, TVOC: 3 PPB
CO2: 423 PPM, TVOC: 3 PPB
CO2: 423 PPM, TVOC: 3 PPB
CO2: 423 PPM, TVOC: 3 PPB
... Souffler vers le capteur
CO2: 423 PPM, TVOC: 3 PPB
CO2: 423 PPM, TVOC: 3 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 454 PPM, TVOC: 8 PPB
CO2: 454 PPM, TVOC: 8 PPB
CO2: 454 PPM, TVOC: 8 PPB
CO2: 454 PPM, TVOC: 8 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 439 PPM, TVOC: 5 PPB
CO2: 423 PPM, TVOC: 3 PPB
CO2: 423 PPM, TVOC: 3 PPB
CO2: 439 PPM, TVOC: 5 PPB

Il est possible de constater en début de relever que la valeur moyenne est de 423ppm pour le CO², ce qui correspond à la concentration naturelle du CO² dans l'air (~400ppm).

Ensuite, lorsque l'on souffle vers le capteur CCS811, il est possible de voir, dans les relevés, une augmentation notable du CO² ainsi que des TVOC (notre respiration produit également des composés organiques volatiles).

Test de la tasse
Comme nous l'avions précédemment dit,  le CO² est un gaz plus lourd que l'air... faire un test dans une tasse (ou gobelet) offrira une réponse très nette du capteur.

Tester le module MOD-ENV
Le module MOD-ENV contient un CCS811 et un BME280.
Le code de test s'applique également au MOD-ENV d'Olimex.

Il sera peut être intéressant de s'attarder sur l'exemple "test_enh.py" disponible dans le dépôt du MOD-ENV.
En effet, dans cet exemple, la température et humidité relative est communiquée tous les 1/4 d'heure au capteur CCS811 pour améliorer la résolution des mesures de CO² et TVOC.

Bonne lecture,
Dominique






Aucun commentaire