Überwachung von CO2, Temperatur und Luftfeuchtigkeit mit MQ-135 und DHT11

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

    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();
     }

    Cycle
    Cycle

    Merci à Miguel Torres Gordo pour sa contribution.

    EtalagesPour arduinoProjets pour les débutantsCapteurs

    5 commentaires

    Miguel Torres

    Miguel Torres

    Hello Philipp,

    The difference in price of the MQ-135 sensor versus the MHZ-19 is very significant for Arduino projects.

    Miguel Torres

    Miguel Torres

    According to the data sheet for this sensor, this also measures CO2. I leave a link where it shows the sensitivity for different gases.
    https://www.olimex.com/Products/Components/Sensors/Gas/SNS-MQ135/resources/SNS-MQ135.pdf

    mi

    mi

    hmmmm – kann es sein, dass der MQ-135 kein CO2 sondern nur CO misst ?

    Philipp Landhäußer

    Philipp Landhäußer

    Hallo,
    ein sehr guter Bericht aber das Problem ist, dass der MG-135 nur CO misst und kein CO2. Dafür wäre eher der MHZ-19 geeignet.

    Mfg

    Andreas Waldbrenner

    Andreas Waldbrenner

    Wäre super, wenn man mit einem Knopfdruck alle Teile im Warenkorb hätte. Oder habe ich diese Funktion übersehen? Andi

    Laisser un commentaire

    Tous les commentaires sont modérés avant d'être publiés

    Messages de blogs recommandés

    1. Installez maintenant ESP32 via l'administrateur de la carte
    2. Lüftersteuerung Raspberry Pi
    3. Arduino IDE - Programmieren für Einsteiger - Teil 1
    4. ESP32 - das Multitalent
    5. OTA-Over the Air-ESP Programmation par WiFi