Mesure du taux de CO₂ : découvrir le facteur de somnolence
Composants et fournitures
| Composant | Quantité |
|---|---|
| Andium Anduino WiFi (shield WiFi pour Arduino) | 1 |
| Arduino Due | 1 |
| Capteur CO₂ NDIR (type Cozir) | 1 |
Applications et services en ligne
- Arduino IDE
- Adafruit IO (visualisation cloud)
À propos de ce projet
Motivation
Avez‑vous déjà eu du mal à rester éveillé en réunion l'après‑midi ? Bâillements incontrôlables ? Endormissement pendant des cours de 3 heures ? Ce n'est pas forcément faute de sommeil. Une mauvaise ventilation et un taux élevé de CO₂ peuvent être la cause de votre somnolence !
Ce capteur NDIR CO₂ (Cozir) mesure précisément le CO₂ via une interface série UART simple. Les anciens capteurs NDIR consommaient beaucoup et nécessitaient un préchauffage. Celui‑ci utilise une LED infrarouge et un détecteur IR, fonctionne en 3,3 V et consomme < 1,5 mA en moyenne. Il exploite la dispersion optique infrarouge – consultez la datasheet Cozir pour les détails techniques impressionnants.
Mise en route
Matériel nécessaire :
- Arduino Due ou Zero (3,3 V)
- Shield AnduinoWiFi
- Capteur Cozir CO₂
- Quelques fils de liaison pour l'alimentation et la liaison série
Le capteur a 10 broches mais seulement 4 à câbler :
- 3,3 V → 3V3 (Arduino)
- GND → GND
- Rx (capteur) → Tx (DIO18 sur Due)
- Tx (capteur) → Rx (DIO19 sur Due)
Important : Croisez bien Rx/Tx. N'utilisez pas DIO0/DIO1 (Serial) si vous voulez garder le moniteur série. J'utilise Serial1 pour le capteur (3 autres UART disponibles sur le Due).
Pour tester le capteur seul : connectez‑le à un PC via un adaptateur USB‑série 3,3 V, ouvrez PuTTY (9600 bauds, 8N1), activez l'envoi de CR+LF. Envoyez des commandes ASCII.
Attention : Le capteur est en logique 3,3 V TTL. Utilisez un level shifter si votre source est en 5 V.
Calibration du capteur
Deux méthodes :
- Gaz connu (azote) : Saturez le capteur en azote (0 ppm CO₂) pour un zéro parfait.
- Air frais : Sortez à l'air libre, lancez le sketch exemple et décommentez
calibrateFreshAir();danssetup(). Cela envoie la commande « G » au capteur qui se calibre sur ~450 ppm (moyenne atmosphérique). Même si l'air urbain est légèrement plus chargé, la marge est acceptable car les seuils de perception physiologique sont dans les milliers de ppm.
Sketch de test (extrait) :
char buffer[20] = {0}; int c = 0;
void setup() {
Serial.begin(9600); while(!Serial){};
Serial1.begin(9600); while(!Serial1){};
Serial.println("Begin reading CO2 Levels");
// setOperatingMode(CZR_POLLING);
// calibrateFreshAir();
}
void loop() {
delay(10000);
c = Request("Z");
Serial.print("CO2 : "); Serial.println(c); Serial.println("");
}
int Request(char* s) { /* ... envoie commande, lit réponse sur Serial1, parse le ppm ... */ }
void Command(char* s) { Serial1.print(s); Serial1.print("\r\n"); }
uint16_t calibrateFreshAir() { return Request("G"); }
void setOperatingMode(uint8_t mode) { sprintf(buffer, "K %u", mode); Command(buffer); }
Définissez CZR_POLLING (0x02) pour le mode interrogation. Après calibration réussie, passez à la publication cloud.
Publication des métriques CO₂ vers le cloud (Adafruit IO)
Si vous n'avez pas encore connecté AnduinoWiFi à Adafruit IO, consultez le projet dédié. Voici le sketch pour publier le CO₂ chaque minute :
#include <WiFi101.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "AnduinoLCD.h"
#define WLAN_SSID "VOTRE_SSID"
#define WLAN_PASS "VOTRE_MOT_DE_PASSE"
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "VOTRE_USER_AIO"
#define AIO_KEY "VOTRE_CLE_AIO"
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish carbonDioxide = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2");
AnduinoLCD LCD = AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13);
#define CZR_STREAMING 0x01
#define CZR_POLLING 0x02
char buffer[20] = {0};
static int co2 = 0, co2Prev = 0;
void setup() {
Serial.begin(115200); delay(3000);
Serial1.begin(9600);
connectToWiFi(); connectToAdafruit();
LCD.begin(); LCDinit();
// setOperatingMode(CZR_POLLING); calibrateFreshAir();
}
void loop() {
if(! mqtt.ping(3)) { if(! mqtt.connected()) connect(); }
co2 = Request("Z");
// Publication MQTT
char b[20]; String str = String(co2);
for(int i=0;i
C'est tout !
Ce capteur est ultra‑sensible : on peut presque suivre l'occupation d'une pièce via le CO₂, même bien ventilée. De quoi prouver à votre prof que ce n'est pas les équations différentielles qui vous endorment, mais la ventilation ! Déplacez le cours à la plage !
Bibliothèque Anduino
Bibliothèque Arduino pour le shield Andium (Anduino). Transforme votre Arduino en AndiumNode. GitHub
Processus de fabrication
- Sensirion lance SCD40 : capteur CO₂ et RH/T ultra-miniaturisé
- Intégration de données de capteurs sur Raspberry Pi : Guide pratique complet
- Construire des capteurs d'objets personnalisés pour LEGO Mindstorms EV3 : Yeux DIY basés sur la lumière
- Connecter directement un capteur ultrasonique Lego Mindstorms NXT à un Raspberry Pi
- Connecter un capteur ultrasonique HC‑SR04 à un Raspberry Pi – Guide pratique
- Intégrer le radar pulsé Acconeer A111 à un Raspberry Pi : Guide pratique
- Améliorer le service client en rayon : stratégies avancées pour la visibilité et l'efficacité
- L'alimentation sans fil RF propulse l'adoption universelle des réseaux de capteurs
- Capteur RapidPlex : 5 questions essentielles sur le test SARS-CoV-2 à domicile