Le MQ135 est un capteur qui permet de mesurer la qualité de l’air. Le MQ135 est sensible à aux principaux polluants présents dans l’atmosphère de la maison. Ce capteur est sensible au CO2, à l’alcool, au Benzène, à l’oxyde d’azote (NOx) et à l’ammoniac (NH3).
Le MQ135 est un capteur plus économique que son grand frère le MQ811 si vous avez besoin de mesurer la présence de CO2 dans une pièce.
Présentation du capteur MQ-135
Ce capteur utilise le dioxyde d’étain (SnO2) dont la conductivité électrique varie en fonction de la présence de polluant(s). La documentation technique est disponible à cette adresse. Comme tous les capteurs de la série MQ (dont vous pouvez trouver la liste complète à la fin de cet article), il faudra procéder à une calibration dans une atmosphère de référence pour mesurer la présence d’un polluant en particulier.
Pour encore plus de précision, il est également conseillé de procéder à une correction de la mesure en fonction de la température et de l’humidité. Cette opération peut être utilisée en utilisant un DHT11/DHT22 détaillé dans cet article.
Matériel nécessaire pour tester le MQ135 avec un Arduino
Pour ce projet, vous aurez besoin du matériel suivant :
- 1x Arduino Uno (ou équivalent)
- 1x Breadboard (optionnel)
- 1x Détecteur de polluants atmosphériques MQ135 (environ 1,20€ en provenance d’Asie)
- Quelques câbles Dupont M/M ou M/F si vous n’utilisez pas de breadboard
Utilisez des Jumpers Dupont M/F ou une breadbord si le connecteur n’est pas soudé trop en retrait sur le PCB.
Reliez les Pins Vcc et GND du capteur au 5V et au GND de l’Arduino
Reliez le Pin D0 du capteur à l’entrée analogique A0 de l’Arduino
Exemple de code et calibration
Le polluant le plus présent et le plus facile à calibrer dans l’atmosphère reste le CO2. En effet, la teneur en CO2 est une grandeur très suivie. La première chose à faire est donc de récupérer la teneur moyenne en CO2 dans l’atmosphère. Pour cela vous pouvez utiliser le niveau mesuré par la NOAA (National Oceanic and Atmospheric Administration) disponible ici. Les concentrations moyennes mensuelles sont calculées à partir de mesures continues. La NOAA utilise les mesures de 130 stations de mesure du CO2 réparties sur la planète.
Dans une maison bien aérée ou en extérieure, elle est maintenant de 401.62 ppm (mesure de décembre 2015). Pour réaliser la calibration, j’ai utilisé la librairie mise à disposition par Georg Krocker sur hackaday.io. La librairie est disponible sur le github de Georg Krocker à cette adresse.
Dans le code ci-dessous, vous devez tout d’abord modifier la variable ATMOCO2 qui se trouve à la ligne 39 du fichier MQ135.h
Avant la première utilisation, laissez le capteur sous tension durant 48h.
Ensuite, exécutez le code suivant durant 30 minutes, puis relancez le. Au lancement, la valeur de la résistance R0 est affichée sur la console. Mettez maintenant à jour la variable RZERO qui se trouve à la ligne 27 du fichier MQ135.h
La calibration est terminée, vous pouvez mesurer la teneur en CO2 chez vous.
/*
Programme de test du MQ135 permettant de mesurer la présence de polluants dans l'atmosphère (CO, CO2 Alcool, fumées...)
Pour plus d'infos ici http://www.projetsdiy.fr/mq135-mesure-qualite-air-polluant-arduino
Utilise la librairie mq135.cpp mise à disposition par Georg Krocker https://github.com/GeorgK/MQ135
Projets DIY - Mars 2016 - www.projetsdiy.fr
*/
#include "MQ135.h"
const int mq135Pin = 0; // Pin sur lequel est branché de MQ135
MQ135 gasSensor = MQ135(mq135Pin); // Initialise l'objet MQ135 sur le Pin spécifié
void setup()
{
Serial.begin(9600); // Initialise le port série à 9600 bps
float rzero = gasSensor.getRZero();
Serial.print("R0: ");
Serial.println(rzero); // Valeur à reporter ligne 27 du fichier mq135.h après 48h de préchauffage
}
void loop()
{
float ppm = gasSensor.getPPM();
Serial.print("A0: ");
Serial.print(analogRead(mq135Pin));
Serial.print(" ppm CO2: ");
Serial.println(ppm);
delay(1000); // Actualise la mesure chaque seconde
}
- Stocker des données sur une carte micro SD. Code Arduino compatible ESP32, ESP8266
- Débuter Arduino. Recevoir des commandes depuis le port série (compatible ESP32 ESP8266)
- Fonctions C++ print•println•printf•sprintf pour Arduino ESP32 ESP8266. Combiner•formater → port série
- String C++. concat•c_srt•indexOf•replace•subString… pour Arduino ESP32 ESP8266
- Débuter avec ArduinoJSON v6, librairie Arduino pour manipuler des objets JSON
- Débuter avec le bus I2C sur Arduino ESP8266 ESP32. Librairie Wire.h
Erreur dans le texte, le CO2 n’est pas un polluant.
Bonjour Le Cornouiller. Effectivement le C02 est avant tout un gaz à effet de serre mais en même temps il est largement produit par l’activité humaine et vient modifier le milieu (notre atmosphère). A l’échelle locale (une pièce), c’est la même chose. Si on se réfère à cette définition (non officielle) d’un polluant https://www.actu-environnement.com/ae/dictionnaire_environnement/definition/polluant.php4 et tout particulièrement la fin “On peut désigner sous le terme de polluant toute substance artificielle produite par l’homme et dispersée dans l’environnement, mais aussi toute modification d’origine anthropogène affectant le taux ou (et) les critères de répartition dans la biosphère d’une substance naturelle propre à tel ou tel milieu.” on peut dire que le CO2 est un gaz à effet de serre polluant 🙂 Bon au final, c’est pas très important, ce qu’on souhaite c’est connaître (à la louche) sa teneur. Je vous conseille d’ailleurs d’opter pour un capteur auto-calibré, par exemple MHZ-19 beaucoup plus fiable que la série MQ https://projetsdiy.fr/?s=mh-z19&post_type=post . Bon week end.
Bonjour
J’ai lue avec grand intérêt l’article sur le MQ135 en vue d’une
conception data-logger co2,
j’ai un souci c’est
le l’affichage est de A0 au lieu R0 sur le moniteur série
Bonjour Dominique. R0 est lu lue uniquement à l’initialisation (dans le setup). Commentez les sorties dans la boucle loop ou décochez le défilement automatique du moniteur série pour récupérer la valeur initiale. A très bientôt.