Capteur CO₂ Infrarouge NDIR MH-Z19 / MH-Z19B / MH-Z19C / MH-Z19E
Module de mesure du dioxyde de carbone 400–5000 ppm / 0–5000 ppm avec sortie UART & PWM
Arduino • ESP32 • ESP8266 • Raspberry Pi • STM32 • Domotique • Serre • HVAC • Qualité de l’air
Description générale
Le capteur CO₂ MH-Z19 est un module de mesure du dioxyde de carbone basé sur la technologie
NDIR infrarouge non dispersive. Il permet de mesurer la concentration de CO₂ dans l’air avec une bonne stabilité,
une réponse fiable et une intégration simple dans les projets électroniques, domotiques, IoT et industriels.
Contrairement aux capteurs de gaz chimiques classiques, un capteur NDIR mesure le CO₂ grâce à l’absorption infrarouge.
Cette méthode offre une meilleure sélectivité, une durée de vie plus longue et une meilleure stabilité pour une surveillance continue
de la qualité de l’air intérieur.
Ce module est particulièrement adapté pour les projets avec Arduino, ESP32, ESP8266, Raspberry Pi, STM32,
automate, système de ventilation, tableau de bord environnemental, station météo intérieure, serre intelligente ou système HVAC.
Mesure CO₂
Plage jusqu’à 5000 ppm selon version
UART TTL
Communication série simple avec microcontrôleur
PWM
Sortie signal utilisable pour mesure embarquée
NDIR
Technologie infrarouge stable et durable
serre agricole, ventilation automatique, purificateur d’air, laboratoire, station météo, système IoT et monitoring industriel.
Caractéristiques techniques principales
| Caractéristique | Détail |
|---|---|
| Gaz détecté | Dioxyde de carbone CO₂ |
| Technologie | NDIR infrarouge non dispersif |
| Plage de mesure | 400–5000 ppm ou 0–5000 ppm selon version et configuration |
| Sorties | UART TTL / PWM selon modèle |
| Alimentation | Généralement 5V DC selon version |
| Niveau logique | TTL 3.3V, souvent compatible avec microcontrôleurs 5V |
| Compatibilité | Arduino, ESP32, ESP8266, Raspberry Pi, STM32, systèmes embarqués |
Détail des variations disponibles
Variation 1 : MH-Z19
Le MH-Z19 est la version classique de la famille. Il convient parfaitement aux projets de prototypage,
aux montages Arduino, aux systèmes simples de surveillance CO₂ et aux applications pédagogiques.
Cette version est idéale pour apprendre le fonctionnement d’un capteur NDIR, afficher une mesure sur écran LCD/OLED,
déclencher une alerte sonore ou piloter un ventilateur à partir d’un seuil de CO₂.
- Idéal pour Arduino et projets éducatifs
- Mesure CO₂ en ppm
- Communication UART simple
- Format compact pour boîtier électronique
Variation 2 : MH-Z19B
Le MH-Z19B est l’une des versions les plus populaires. Elle est très utilisée dans les projets de qualité de l’air,
les systèmes domotiques, les stations CO₂ connectées et les intégrations avec ESP32 ou ESP8266.
Le MH-Z19B est apprécié pour sa stabilité, sa sortie UART, sa sortie PWM et sa bonne compatibilité avec les bibliothèques Arduino
et les plateformes comme Home Assistant, MQTT ou Node-RED.
- Version très répandue pour IoT et domotique
- Compatible ESP32, ESP8266 et Arduino
- Adapté aux systèmes de ventilation automatique
- Excellent choix pour monitoring intérieur
Variation 3 : MH-Z19C
Le MH-Z19C est une version plus récente de la série. Elle est destinée aux projets où l’on recherche un module compact,
moderne et facile à intégrer dans un appareil connecté ou un boîtier de surveillance de l’air.
Cette variation est adaptée aux solutions IoT, aux systèmes de mesure avec écran, aux boîtiers muraux CO₂,
aux projets ESPHome et aux appareils autonomes de contrôle environnemental.
- Version moderne de la famille MH-Z19
- Bonne intégration dans les boîtiers compacts
- Sortie UART pratique pour microcontrôleurs
- Utilisation possible en tableau de bord connecté
Variation 4 : MH-Z19E
Le MH-Z19E est une version avancée de la série, adaptée aux applications de surveillance continue,
aux bâtiments intelligents, aux systèmes HVAC, aux purificateurs d’air et aux installations nécessitant un suivi CO₂ durable.
Cette version est particulièrement intéressante pour les projets professionnels ou semi-professionnels où la mesure doit rester stable
sur une longue période avec une communication simple vers un contrôleur.
- Adapté au monitoring continu
- Très bon choix pour ventilation intelligente
- Convient aux bâtiments, bureaux, salles et serres
- Compatible systèmes embarqués et IoT
Tableau comparatif des versions
| Version | Profil | Meilleure utilisation |
|---|---|---|
| MH-Z19 | Version classique | Arduino, apprentissage, prototype CO₂ |
| MH-Z19B | Version populaire | Domotique, ESP32, Home Assistant, MQTT |
| MH-Z19C | Version moderne | Boîtier connecté, IoT compact, écran OLED |
| MH-Z19E | Version avancée | Monitoring continu, HVAC, bâtiments intelligents |
Niveaux indicatifs de CO₂
| Niveau CO₂ | Interprétation | Action recommandée |
|---|---|---|
| 400 à 700 ppm | Air généralement bien renouvelé | Situation normale |
| 700 à 1000 ppm | Air correct mais à surveiller | Aération possible |
| 1000 à 1500 ppm | Renouvellement d’air insuffisant | Aérer ou activer ventilation |
| Plus de 1500 ppm | Air chargé en CO₂ | Ventilation fortement conseillée |
Exemple de câblage Arduino UNO
| MH-Z19 | Arduino UNO |
|---|---|
| Vin | 5V |
| GND | GND |
| TX | D10 RX logiciel |
| RX | D11 TX logiciel |
Code Arduino UART pour lire le CO₂
Ce code permet de lire la valeur CO₂ en ppm via la liaison série UART du module.
#include <SoftwareSerial.h>
SoftwareSerial mhz19(10, 11);
// Arduino D10 = RX reçoit TX du capteur
// Arduino D11 = TX envoie vers RX du capteur
byte cmdReadCO2[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
byte response[9];
void setup() {
Serial.begin(9600);
mhz19.begin(9600);
Serial.println("Lecture capteur CO2 MH-Z19...");
delay(3000); // temps de stabilisation
}
void loop() {
int co2 = readCO2();
if (co2 > 0) {
Serial.print("CO2 : ");
Serial.print(co2);
Serial.println(" ppm");
if (co2 > 1200) {
Serial.println("Alerte : ventilation recommandee !");
}
} else {
Serial.println("Erreur de lecture du capteur.");
}
delay(3000);
}
int readCO2() {
mhz19.write(cmdReadCO2, 9);
delay(100);
if (mhz19.available() >= 9) {
for (int i = 0; i < 9; i++) {
response[i] = mhz19.read();
}
if (response[0] == 0xFF && response[1] == 0x86) {
int ppm = response[2] * 256 + response[3];
return ppm;
}
}
return -1;
}
Code ESP32 avec UART matériel
Avec un ESP32, il est préférable d’utiliser un port série matériel. Cet exemple utilise les broches GPIO16 et GPIO17.
#define RXD2 16
#define TXD2 17
byte cmdReadCO2[9] = {0xFF, 0x01, 0x86, 0, 0, 0, 0, 0, 0x79};
byte response[9];
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial.println("ESP32 + MH-Z19 pret");
delay(3000);
}
void loop() {
int co2 = readCO2();
if (co2 > 0) {
Serial.print("Taux CO2 : ");
Serial.print(co2);
Serial.println(" ppm");
if (co2 < 800) {
Serial.println("Qualite air : bonne");
} else if (co2 < 1200) {
Serial.println("Qualite air : moyenne");
} else {
Serial.println("Qualite air : ventilation conseillee");
}
}
delay(3000);
}
int readCO2() {
Serial2.write(cmdReadCO2, 9);
delay(100);
if (Serial2.available() >= 9) {
for (int i = 0; i < 9; i++) {
response[i] = Serial2.read();
}
if (response[0] == 0xFF && response[1] == 0x86) {
return response[2] * 256 + response[3];
}
}
return -1;
}
Code ESP32 avec relais de ventilation
Exemple pratique : si le CO₂ dépasse 1200 ppm, l’ESP32 active un relais pour démarrer un ventilateur.
#define RXD2 16
#define TXD2 17
#define RELAIS 23
byte cmdReadCO2[9] = {0xFF, 0x01, 0x86, 0, 0, 0, 0, 0, 0x79};
byte response[9];
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
pinMode(RELAIS, OUTPUT);
digitalWrite(RELAIS, LOW);
delay(3000);
}
void loop() {
int co2 = readCO2();
Serial.print("CO2 = ");
Serial.print(co2);
Serial.println(" ppm");
if (co2 > 1200) {
digitalWrite(RELAIS, HIGH);
Serial.println("Ventilation activee");
} else if (co2 > 0 && co2 < 900) {
digitalWrite(RELAIS, LOW);
Serial.println("Ventilation arretee");
}
delay(5000);
}
int readCO2() {
Serial2.write(cmdReadCO2, 9);
delay(100);
if (Serial2.available() >= 9) {
for (int i = 0; i < 9; i++) {
response[i] = Serial2.read();
}
if (response[0] == 0xFF && response[1] == 0x86) {
return response[2] * 256 + response[3];
}
}
return -1;
}
Exemple Python Raspberry Pi
Sur Raspberry Pi, le capteur peut être lu via le port série UART avec Python. Cet exemple affiche la valeur CO₂ dans le terminal.
import serial
import time
ser = serial.Serial("/dev/serial0", 9600, timeout=1)
cmd = bytearray([0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79])
def read_co2():
ser.write(cmd)
time.sleep(0.1)
response = ser.read(9)
if len(response) == 9 and response[0] == 0xFF and response[1] == 0x86:
co2 = response[2] * 256 + response[3]
return co2
return None
while True:
co2 = read_co2()
if co2:
print(f"CO2 : {co2} ppm")
else:
print("Erreur de lecture")
time.sleep(3)
Applications détaillées
1. Maison connectée
Le capteur peut être intégré dans une box domotique pour surveiller le CO₂ dans les chambres, salons, bureaux ou pièces fermées.
Il peut envoyer les données vers MQTT, Home Assistant ou un tableau de bord web.
2. Salle de classe et bureau
Dans les espaces occupés par plusieurs personnes, le taux de CO₂ augmente rapidement. Un affichage en temps réel permet de savoir
quand ouvrir les fenêtres ou activer la ventilation.
3. Serre intelligente
Dans l’agriculture connectée, le CO₂ est un paramètre important pour suivre l’environnement de culture.
Le module peut être associé à des capteurs de température, humidité, luminosité et humidité du sol.
4. Système HVAC
Le MH-Z19 peut servir de capteur de référence dans un système de ventilation automatique.
Un microcontrôleur peut déclencher un relais, une turbine, une VMC ou un extracteur selon le seuil programmé.
5. Station de qualité de l’air
Associé à un écran OLED, un ESP32 et une connexion WiFi, ce module permet de créer une station complète avec affichage CO₂,
température, humidité, historique et alertes.
Conseils d’installation
- Laisser le capteur chauffer quelques minutes avant d’interpréter les premières mesures.
- Éviter de placer le module directement devant un ventilateur ou une source de chaleur.
- Installer le capteur dans une zone représentative de l’air ambiant.
- Prévoir une alimentation stable, surtout avec ESP32 ou Raspberry Pi.
- Respecter le câblage TX/RX : le TX du capteur va vers le RX du microcontrôleur.
FAQ
Ce capteur mesure-t-il vraiment le CO₂ ?
Oui, la série MH-Z19 utilise une technologie NDIR, conçue pour détecter le dioxyde de carbone dans l’air.
Peut-on l’utiliser avec Arduino ?
Oui, il peut être utilisé avec Arduino via UART. Un exemple de code est fourni dans cette fiche.
Peut-on l’utiliser avec ESP32 ?
Oui, l’ESP32 est même très pratique grâce à ses ports série matériels et sa connectivité WiFi/Bluetooth.
Quelle variation choisir ?
Pour un projet simple Arduino, le MH-Z19 ou MH-Z19B suffit. Pour une station connectée, le MH-Z19B ou MH-Z19C est conseillé.
Pour une surveillance continue plus avancée, le MH-Z19E est un très bon choix.
Peut-on piloter une ventilation avec ce capteur ?
Oui, avec un microcontrôleur et un module relais, vous pouvez activer automatiquement un ventilateur selon un seuil CO₂.
Un capteur CO₂ complet pour vos projets électroniques et IoT
Le module MH-Z19 / MH-Z19B / MH-Z19C / MH-Z19E est une solution pratique, compacte et fiable pour mesurer le CO₂,
automatiser la ventilation et créer des systèmes intelligents de surveillance de la qualité de l’air.
MD1803DFX ST1803DFX MD1803 TO-3PF Maroc
ATMEGA32A-AU TQFP-44 ATMEGA32A 32 ATMEGA32 32A ATMEGA 32A Maroc
Transistor MJ11015 TO-3 Maroc
TOP262EN Maroc
MPS20N0040D-D Capteur de pression de sphygmomanomètre 0-40kPa DIP-6 Maroc
Ethernet Shield W5100 Maroc
YNB-660 3 en 1 humidimètre hygromètre testeur de température bois Maroc
IRFZ24N MOSFET Maroc
EMT01 Humidimètre Testeur Humidité Bois 0-99.9% Maroc
SKD500T MOSFET N-Channel 200V 95A TO-220 Maroc
Afficheur LCD 2x16 I2C Maroc
TOP257EN de Power Integrations Maroc
Lot 10 Meules à Poncer pour Perceuse Maroc
FSD210 FSD 210 DIP-7 Maroc
HT12D HT-12D Maroc
Module de Relais 5V à 4 Canaux Maroc
Robinet Distributeur
NCE80H15 MOSFET de puissance 150V 80A Maroc
Rivets en Aluminium DINGQI Maroc
Capteur de Courant AC Détachable 50A Max Maroc
TOP248YN TOPSwitch-GX 700V TO-220
Contrôleur PWM UC3845BN Maroc
Circuit intégré STRA6059H STR-A6059H A6059H DIP-7 Maroc
FGH60N60UFD Transistor IGBT Maroc
M328 testeur de Transistor multifonction Maroc
IRLZ24N MOSFET Maroc
NCP1337Px NCP1337 DIP8 Maroc
Module de Capteur Humidité et Température DHT11 Maroc
DM0265R DIP-8 Maroc
L7815 Régulateur de Tension 15V TO-220 Maroc
ULN2004AN ULN2004A ULN2004 DIP-16 Maroc
TL071CP TL071 DIP-8 Amplificateur opérationnel Maroc
MC34071P Amplificateurs opérationnels Maroc
NodeMcu Breadboard Testeur adapté pour NodeMcu V3 Maroc
IRFB4321 MOSFET 150V 85A N-Channel TO-220 Maroc
FSDH0265R DH0265R DIP-8 Maroc
module sans fil Xbee HC- 06 Arduino Bluetooth Bee maroc
Bouton de Potentiomètre Verrouillable Maroc
FQP27P06 MOSFET TO-220 Maroc
MODULE RELAIS 5V 2 CANAUX POUR ARDUINO PIC ARM AVR DSP MAROC
Rouleau de ruban adhésif aluminium renforcé à la fibre de verre Maroc
JX-9488 Caméra De Recul Plaque D Immatriculation Voiture Maroc
Fiche BNC Maroc
Pistolet Agrafeur Manuel Maroc
Sintech convertisseur RS232 à RS485 Maroc
L7806 Régulateur de Tension 6V 1.5A (TO-220) Maroc
CARTE SHIELD CNC Maroc
TOP244YN TOPSwitch-GX 700V TO-220
ZW-12026-10 lecteur de carte USB IC DNIE DNI EMV CAC Maroc
MOSFET SKD503T 100V 120A N-Channel Maroc
LM1036 LM1036N DIP20 Maroc
LAY38 Base bouton-poussoir 1NO1NC contact 22 mm Maroc
Électrolyseur TDS 220V Testeur d'électrolyse TDS Testeur de qualité de l'eau filtrée rapide Maroc
LNK364PN LNK364P LNK364 364PN DIP-7 Maroc
LM317T Régulateur de tension variable TO-220 Maroc
DK125 convertisseur DIP-8 DC-DC Maroc
e18-d80nk Interrupteur photoélectrique infrarouge Obstacle capteur de module 








There are no reviews yet.