Surveillance Du CO2, De La Température Et De L'humidité Avec MQ ...

La contribution suivante nous a été envoyée par le lecteur Miguel Torres Gordo. Après que Bernd Albrecht ait commencé la série de blog sur un sujet similaire avec MQ-2 et DHT22 sur ESP8266, voici une alternative pour les microcontrôleurs ATmega328 et les capteurs MQ-135 / DHT11. Bonne lecture et bon bricolage :

Comme il est très important de connaître le niveau de saturation de l'environnement, par exemple sur le lieu de travail, j'ai cherché sur Internet un capteur pouvant être utilisé avec Arduino pour mesurer la teneur en CO2. Heureusement, j'ai trouvé un capteur qui mesure la qualité de l'air. Il s'agit du MQ-135, qui, comme vous pouvez le voir dans la fiche technique, peut mesurer certaines substances, comme le NH3, l'alcool, le benzène, la fumée, le CO2, etc. C'est ainsi que je suis tombé sur ce capteur.

Sachant qu'il était possible de l'utiliser avec notre microcontrôleur ATmega328, la première chose que j'ai faite a été de rechercher les limites de sécurité pour le CO2 en parties par million (ppm) pour les maisons, les pièces et les bâtiments, qui, selon diverses études, peuvent aller de 400 à 800 ppm. Maintenant que je disposais du bon capteur et des limites de sécurité, il était temps de concevoir un projet utile qui nous montrerait ces informations et nous renseignerait également sur la température et l'humidité.

L'objectif de ce projet est donc de mesurer la concentration de CO2 en parties par million, de l'afficher sur un écran et de nous donner un avertissement sonore lorsqu'elle atteint une concentration dangereuse, ainsi que de nous informer sur la température et l'humidité. Pour prolonger la durée de vie de l'écran, j'ai pensé qu'il serait bon de fixer trois LED de couleurs différentes pour nous donner des informations visuelles rapides sur le niveau de concentration de CO2 sans avoir à voir les données. Une fois tout cela installé, nous pouvons nous mettre au travail.

Matériel nécessaire

Nombre Composantes
1 Nano V3.0 CH340 avec câble USB
1 Module de qualité de l'air du capteur de gaz MQ-135
1 Capteur de température et d'humidité DHT11
1 Adaptateur MT3608 DC-DC
1 Led : 1x rouge ; 1x jaune ; 1x vert
1 1,3 pouce OLED I2C 128 x 64 pixels d’affichage
2 Résistance 1K
1 Résistance 220 ohms
1 Buzzer.

Logiciels requis

  • Arduino IDE
  • MQ135_Calibration Sketch
  • Esquisse de surveillance du CO2
  • Bibliothèque MQ135
  • Bibliothèque DHT-11
  • Filothèque
  • Bibliothèque Adafruit_GFX et Adafruit_SSD1306

Description du fonctionnement du circuit

Le fonctionnement de ce circuit est très simple. Le capteur MQ-135 mesure la concentration de CO2 en parties par million, le capteur DHT-11 mesure la température et l'humidité. Ces trois données sont envoyées à un écran OLED bicolore de 0,96 pouce qui affiche chaque valeur pendant 3 secondes à intervalles d'une minute. L'écran reste éteint pendant ce temps. Ces valeurs de temps peuvent être configurées. Alors que l'écran reste éteint, les trois LEDs nous informent visuellement des valeurs de CO2 présentes. Le voyant vert s'allume lorsque la concentration est égale ou inférieure à 550. La LED jaune s'allume lorsque la concentration est comprise entre 551 et 799 parties par million de CO2 et la LED rouge s'allume avec un signal sonore lorsque la concentration dépasse 799 parties par million. Ces trois valeurs peuvent également être configurées.

Préparation et ajustement de la référence de la résistance RZERO pour la concentration de CO2 atmosphérique

La première chose à faire est de préparer le capteur du MQ-135 afin qu'il mesure les valeurs correctes que nous utiliserons à l'étape suivante. Pour ce faire, le capteur doit être mis sous 5 volts pendant environ 2 heures lorsqu'il est neuf, afin d'éliminer les impuretés créées lors de la fabrication. Ensuite, il est préférable d'effectuer le réglage de référence de la résistance RZERO dans le circuit final, car cela se fait avec les tensions d'alimentation et de fonctionnement normalement utilisées et la mesure est optimale.

Cycle

Cycle

L'objectif de cet étalonnage est d'ajuster la résistance du niveau de CO2 atmosphérique afin que le capteur MQ-135 mesure une concentration comprise entre 300 et 450 ppm, ce qui correspond à la concentration normale de ce gaz dans l'environnement. Il est très important d'alimenter le capteur de manière indépendante avec 5 VDC, car il consomme 850 mW.

Quand tout est connecté, on démarre l'IDE Arduino, on charge et on lance le sketch "MQ135_calibration.ino". Avant cela, la bibliothèque MQ135 doit être installée. On ouvre le moniteur série et on voit la lecture ppm ; on doit changer la valeur RZERO dans le fichier MQ135.h dans le dossier library de l'IDE Arduino et sauvegarder jusqu'à ce que la lecture ppm soit celle qu'on veut laisser comme référence de travail du circuit. La valeur à modifier est la valeur colorée en vert.

 Résistance à l'étalonnage au niveau atmosphérique de CO2 Changez cette valeur jusqu'à ce que la valeur ppm soit de 450. « 35; définition R0 22500

Pour effectuer l'ajustement, on doit changer la valeur de RZERO, enregistrer les changements dans le fichier MQ135.h de la bibliothèque dans son dossier Arduino IDE et recharger le sketch de calibration, vérifier la nouvelle valeur de la concentration de CO2 dans le moniteur série et répéter le processus pour régler RZERO avec la valeur que nous voulons laisser comme référence pour la concentration de CO2 dans l'air pour les limites d'avertissement dans le sketch de notre projet.

Sketch MQ135_Calibration pour le réglage de RZERO (Télécharger):

 « 35; y compris « mq135.h» « 35; définition R0 1  Mq135 Gaz = Mq135(A0); Int Sélectionner;  Int Sensation de relâchement = A0;  Int Valeur du capteur = 0;  Vide Paramètres() {    En série.C'est parti.(115200);   Pinmode(Sensation de relâchement, Entrée);  }   Vide Exécution() {    Sélectionner = Simulation(A0);    En série.Imprimer ("Original =");    En série.Publications imprimées (Sélectionner);    Flottant Zéro. = Gaz.Getrzero();    En série.Imprimer ("Criro:);    En série.Publications imprimées (Zéro.);    Flottant Parties par million = Gaz.Getppm();    En série.Imprimer ("Parties par million:);    En série.Publications imprimées (Parties par million);    Retard(2000);  }

Lorsque nous avons correctement lu la concentration de CO2 en parties par million, il est temps de charger le sketch CO2_monitor.ino, qui nous donne les informations sur cette concentration, l'humidité et la température à l'endroit où l'on veut mesurer les valeurs.

Sketch CO2_monitor (Télécharger):

 Bibliothèques nécessaires au projet 35; y compris < wire.h > « 35; y compris < adafruit'u gfx.h > « 35; comprend < adafruit < ssd1306.h > « 35; y compris < dht.h > « 35; y compris « pitches.h»  Paramètres de l'écran "; définir la largeur de l'écran" U "128 "35; définir l'écran" U hauteur 64 Adafruit ssd1306 Afficher(Largeur de l'écran, Permissions de filtrage, &Fils électriques, -1);  Capteur d'humidité et de température DHT - 11 paramètres et variables 35; définition dhtpin 2 35; définition du type DHT dht11 DHT T(Dhtpine, Objet); Flottant T, H;  Paramètres et variables du capteur MQ - 135 « 35; définition R0 1  « 35; y compris « mq135.h»  Mq135 Gaz = Mq135(A0); Int Sélectionner;  Int Sensation de relâchement = A0;  Int Valeur du capteur = 0; Flottant Parties par million, Zéro.;  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Définir la glace verte 3 « 35; définition de la glace Amarillo "35; glace définie  C'est inapproprié. Long Tibia antérieur;  Minuterie   Bloc de configuration Vide Paramètres( ) {   En série.C'est parti.(115200);   T.C'est parti.();              Initialisation DHT - 11      Si(!Afficher.C'est parti.(Commutateur capvcc ssd1306, 0x3c)) {Vérifier la présence de l'affichage     En série.Publications imprimées(F("L'allocation ssd1306 a échoué"));     Pour(;;);  }   Retard(2000);   Afficher.C'est clair.();        Initialiser les écrans et   Afficher.Settextcolor(Blanc);  Configurer la couleur du texte      Pinmode(Sensation de relâchement, Entrée);    MQ - 135 pin Data    Pinmode(Vert glace, Produits);   Pinmode(Amarillo Ice Hotel, Produits);   Pinmode(Crème glacée, Produits);   Écriture numérique(Vert glace, Faible);   Écriture numérique(Amarillo Ice Hotel, Faible);   Écriture numérique(Crème glacée, Faible);  }  Bloc d'anneau Vide Exécution( ) {    T = T.Lire la température();    Lire la température   H = T.Lecture de l'humidité();        Lire l'humidité    Si (Ethan.(H) || Ethan.(T)) {    S'il n'y a pas de température et de température     En série.Publications imprimées("DHT Sensor Reading fallo!!!");Lecture de l'humidité, affichage des messages à notifier  }    Sélectionner = Simulation(A0);        Lecture du CO2   Zéro. = Gaz.Getrzero();  Valeur d'étalonnage du capteur MQ - 135   Parties par million = Gaz.Getppm();      Formule utilisée dans la bibliothèque pour obtenir les ppm de CO2    Czech ice ();              Aller et exécuter la méthode de vérification LED      En série.Imprimer( "T =" );        Afficher les valeurs via le port série   En série.Imprimer(T);   En série.Imprimer("C, h =");   En série.Imprimer(H);   En série.Imprimer( "%, " );   En série.Imprimer ("Original =");    En série.Imprimer (Sélectionner);   En série.Imprimer ("Corde:" corde);    En série.Imprimer (Zéro.);   En série.Imprimer ("Un millionième, un millionième);    En série.Publications imprimées (Parties par million);   Retard (1000);    Si ( Millis.()-Tibia antérieur >= 60000) {Si le temps passé est égal ou supérieur à 60 SG         Pandalum nsendido();    Exécute la méthode d'ouverture de l'écran.         Tibia antérieur = Millis.();Enregistrer l'heure actuelle.  } }  Vide Czech ice() {   Si (Parties par million >= 800) {              Si la concentration de CO2 est égale ou supérieure à 800     Écriture numérique(Crème glacée, Élevé);        Allumez la LED rouge     Tonnes(8, Note C5, 5000);            Buzzer Sound     Afficher.C'est clair.();            Définir les paramètres de l'écran pour afficher les valeurs PPM     Afficher.Settexsize(2);     Afficher.Définir le curseur(7,0);     Afficher.Imprimer(Dioxyde de carbone (PPM):);     Afficher.Settexsize(3);     Afficher.Définir le curseur(40,35);     Afficher.Imprimer(Parties par million,0);     Afficher.Afficher();     Retard(10000);  } Temps de décollage estimé {     Écriture numérique(Crème glacée, Faible);     Afficher.C'est clair.();     Afficher.Afficher(); }      Si (Parties par million >= 551 && Parties par million <= 799) {     Écriture numérique(Amarillo Ice Hotel, Élevé); Si la concentration de CO2 augmente, la LED jaune s'allume  } Temps de décollage estimé {     Écriture numérique(Amarillo Ice Hotel, Faible); }    Entre 551 et 799      Si (Parties par million <= 550) {     Écriture numérique(Vert glace, Élevé); La LED verte ne s'allume que lorsque le dioxyde de carbone est libéré  } Temps de décollage estimé {      Écriture numérique(Vert glace, Faible); }      Concentration inférieure à 551 }  Vide Pandalum nsendido() {    Méthode d'ouverture de l'écran   Afficher.C'est clair.();              Définir les paramètres de l'écran et afficher les valeurs PPM   Afficher.Settexsize(2);   Afficher.Définir le curseur(7,0);   Afficher.Imprimer(Dioxyde de carbone (PPM):);   Afficher.Settexsize(3);   Afficher.Définir le curseur(40,35);   Afficher.Imprimer(Parties par million,0);   Afficher.Afficher();   Retard(3000);       Afficher.C'est clair.();              Définir les paramètres d'affichage et afficher les valeurs d'humidité   Afficher.Settexsize(2);   Afficher.Définir le curseur(20,0);   Afficher.Imprimer(Maison:);   Afficher.Settexsize(3);   Afficher.Définir le curseur(20,35);   Afficher.Imprimer(H,1);   Afficher.Définir le curseur(90,35);   Afficher.Imprimer("%");   Afficher.Afficher();   Retard(3000);      Afficher.C'est clair.();              Définir les paramètres d'affichage et afficher les valeurs de température   Afficher.Settexsize(2);   Afficher.Définir le curseur(40,0);   Afficher.Imprimer(Personnel temporaire:);   Afficher.Settexsize(3);   Afficher.Définir le curseur(5,35);   Afficher.Imprimer(T,1);   Afficher.Définir le curseur(85,35);   Afficher.Cp437(C'est vrai.);   Afficher.Écris.(167);   Afficher.Définir le curseur(107,35);   Afficher.Imprimer(C);   Afficher.Afficher();   Retard(3000);      Afficher.C'est clair.();   Afficher.Afficher(); }

CycleCycle

Merci à Miguel Torres Gordo pour sa contribution.

Tag » Arduino Mq135 Calibration