MicroPython: Mesure de données environnementale avec CCS811 (Adafruit) et MOD-ENV (Olimex)

Bonjour à tous,
Bien que cela aura été difficile, nous avons fini de porter le capter CCS811 sous MicroPython. Cela permet maintenant de réaliser des mesures de qualité de l'air sous MicroPython.

CCS811 - Capteur de qualité de l'air - COV et eCO2
Nous nous sommes d'abord attaqué au capteur CCS811 qui permet de faire un relevé du Dioxyde de carbone équivalent. Ce capteur permet également de faire une détection des composés organiques volatiles (VOC/COV).
Breakout CCS811 d'Adafruit Industries

La bibliothèque permet de relever la valeur TVOC (Total Volatile Organic Compound = total des composés organiques volatiles) et la valeur du Dioxide de Carbone Equivalent (eCO2) via le bus I2C.

Il s'agit de composantes qui augmente si l'on enferme des personnes dans une pièces sans aération durant une session intensive de BrainStorming. L’acuité et la concentration diminue avec le temps... tandis que les déchets de notre activé augmente dans l'air. Il y a donc un intérêt a effectuer ce type de relevé en intérieur.

L'eCO2 (dioxyde de carbone équivalent résultant d'un calcul) est une concentration qui se mesure en ppm (particule par million) tandis que le TVOC (Total Volatile Organic Compound=Total des composés organiques volatiles) se mesure en ppb (particules par billion, un billion = 1 million * 1 million).
Le TVOC est mesuré à l'aide d'un élément chauffant appelé MOX qui permet de détecter des composés comme Alcools, Aldéhydes, Cétones, Acides Organiques, Acides Aminés et Hydrocarbures Aromatiques.
Cet élément chauffant doit être rodé avant de pouvoir être utilisé (30min) et les valeurs ne seront vraiment fiable qu'après plusieurs heures d'utilisation.
Mais nous aurons l'occasion de revenir sur le sujet.

Brancher

Brancher un breakout CCS811 sur une Pyboard

Utiliser
Une fois la bibliothèque ccs811.py chargée sur la carte MicroPython, utiliser le capteur devient relativement simple.

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( "An error occured!")
 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 )

# Afficher les données toutes les demi-secondes
while True:
    print("CO2: {} PPM, TVOC: {} PPB"
          .format(ccs811.eco2, ccs811.tvoc))
    time.sleep(0.5)

Idéalement, il aurait fallu faire un appel à ccs811.data_ready avant chaque lecture et affichage de donnée de donnée.

Ce script d'exemple affiche des informations dans la session REPL. Voici les relevés obtenu.

CO2: 3 PPM, TVOC: 423 PPB
... breathing toward the senseor
... souffler en direction du capteur
CO2: 3 PPM, TVOC: 423 PPB
CO2: 3 PPM, TVOC: 423 PPB
CO2: 5 PPM, TVOC: 439 PPB
CO2: 5 PPM, TVOC: 439 PPB
CO2: 8 PPM, TVOC: 454 PPB
CO2: 8 PPM, TVOC: 454 PPB

Plus d'informations
La fiche produit du CCS811 contient de nombreuses autre informations à propos de ce capteur.

3 commentaires:

  1. Bonjour, je suis assez étonné des valeurs car en général, la concentration en CO2 dans l'air est de 400 ppm. Il faudrait dès lors vérifier les valeurs après plusieurs heures afin de valider la qualité du capteur.

    RépondreSupprimer
  2. 1.000 ppm est égal à 0,1 % de gaz carbonique dans l'air. l'air frais ambiant en campagne contient 330 à 400 ppm de CO2. dans les ville, la concentration en CO2 est d'environ 700 ppm. l'air expiré par une personne contient entre 40.000 et 50.000 ppm de CO2.

    RépondreSupprimer
  3. Bonjour Yellow-sky, PC-Gyver,
    Merci pour vos informations, j'ai malheureusement inversé les données de CO2 et TVOC durant l'écriture de la bibliothèque (c'est corrigé depuis). Vos retour d'informations sont rependant très intéressants... merci pour le partage.

    RépondreSupprimer