Accueil / Arduino / MQ135 : Mesurer la qualité de l’air et des polluants (Arduino)

MQ135 : Mesurer la qualité de l’air et des polluants (Arduino)

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). Ce capteur est 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.

mq135 detection polluant atmospheriques

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.

mq135 correction fonction humidite temperature

Attention, n’utilisez pas ce détecteur pour réaliser des applications pouvant mettre en danger la sécurité des personnes (applications médicales, industrielles…)

Attention. Le capteur chauffe après quelques minutes d’utilisation. C’est normal, c’est le principe même de fonctionnement de tous les capteurs physicochimiques. Tenez en compte dans la conception de votre projet.

Matériel nécessaire pour tester le MQ135 sur un Arduino

Pour ce projet, vous aurez besoin du matériel suivant :

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

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
}