Système de surveillance de la qualité de l’air avec Arduino

Arduino Air Quality Monitoring System

Respirer un air propre et sain est essentiel pour notre bien-être, pourtant la qualité de l’air reste un problème dans de nombreux environnements. Dans cet article, nous nous plongeons dans la création d’un système de surveillance de la qualité de l’air basé sur Arduino. Auparavant, nous avions également construit un système de surveillance de la pollution de l’air basé sur l’IoT en utilisant l’ESP8266, mais pour ce projet, nous allons simplifier les choses et utiliser la populaire carte Arduino UNO pour construire un simple capteur de qualité de l’air DIY. Nous commencerons par parler des différents composants, puis nous passerons à l’interfaçage du capteur MQ135 avec la carte Arduino et enfin à sa programmation. Alors, plongeons-y directement.

L’indice de qualité de l’air (AQI) est une mesure normalisée utilisée pour communiquer la pollution ou la propreté de l’air dans une zone spécifique à un moment donné. Il offre un moyen facilement compréhensible de transmettre des informations sur la qualité de l’air au public.

L’AQI prend généralement en compte plusieurs polluants atmosphériques majeurs réglementés par les agences environnementales du monde entier, tels que l’ozone au niveau du sol, les particules fines (PM2,5 et PM10), le monoxyde de carbone (CO), le dioxyde de soufre (SO2) et le dioxyde d’azote (NO2). Chaque polluant a sa propre échelle et ses seuils qui déterminent la valeur de l’AQI.

L’échelle de l’AQI va de 0 à 500, avec des catégories spécifiques indiquant le niveau de préoccupation pour la santé associé à la qualité de l’air :

  • 0 à 150 : Normal à modérément pollué- Cette plage englobe des conditions de qualité de l’air considérées comme acceptables pour la plupart des individus, avec des préoccupations occasionnelles pour les groupes sensibles à la fin de l’échelle.
  • 151 à 200 : Mauvais- Tout le monde peut commencer à ressentir des effets sur la santé, et les groupes sensibles sont susceptibles d’être plus fortement affectés.
  • 201 à 300 : Très mauvais- Avertissements sanitaires pour les conditions d’urgence. Toute la population est susceptible d’être affectée, et des effets graves sur la santé peuvent survenir.
  • 301 à 500 : Toxique- Alerte sanitaire : tout le monde peut ressentir des effets sur la santé plus graves en raison de la très mauvaise qualité de l’air.

Pour ce projet, nous ne mesurerons pas les PM2,5 et PM10, mais vous pouvez consulter le système de surveillance de l’AQI si vous souhaitez en savoir plus et l’ajouter comme mise à niveau à ce projet ultérieurement.

<

Comment fonctionne le système de surveillance de la qualité de l’air ?

>

Le système de surveillance de la qualité de l’air fonctionne en utilisant des capteurs pour détecter les paramètres environnementaux tels que les niveaux de gaz, la température et l’humidité. Plus précisément, les lectures analogiques du capteur de gaz, connecté à une broche analogique d’un Arduino, fournissent des données sur la qualité de l’air. Ces lectures sont mappées sur des seuils prédéfinis, classifiant la qualité de l’air comme « Bon », « Mauvais », « Très mauvais » ou « Toxique ». Simultanément, un capteur DHT11 mesure l’humidité et la température. Les données collectées sont affichées en temps réel sur un écran OLED à l’aide des bibliothèques Adafruit. En surveillant continuellement ces paramètres, le système offre une vue d’ensemble des conditions de qualité de l’air, permettant aux utilisateurs d’évaluer et de réagir aux changements dans leur environnement.

Les composants requis pour ce projet sont :

  • Carte Arduino
  • Capteur de gaz MQ135 pour la détection de divers gaz.
  • Capteur de température et d’humidité DHT11
  • Écran OLED pour la sortie visuelle
  • Plaque de montage et fils de connexion


Diagramme de circuit du système de surveillance de la qualité de l’air avec Arduino

Le montage complet du projet de surveillance de la qualité de l’air est le suivant, avec un écran OLED, un capteur DHT11 et un capteur de gaz MQ135 connectés à Arduino Uno sur une plaque de montage.

Schéma de connexion du système de surveillance de la qualité de l'air

L’Arduino est connecté à l’écran OLED en utilisant le protocole I2C à l’aide des broches SDA et SCL. Le capteur de gaz MQ135 émet des signaux analogiques qui sont envoyés à la broche d’entrée analogique A0 de l’Arduino. Le capteur DHT11 a une broche de sortie de données numérique qui est connectée à la broche D2 de l’Arduino.

Voici à quoi le projet ressemblera après avoir été interfacé sur une plaque de montage.

Système de surveillance de la qualité de l'air avec Arduino

Explication du code du système de surveillance de la qualité de l’air basé sur Arduino

Ce code surveille la qualité de l’air et affiche les lectures des capteurs (température, humidité et niveau de gaz) sur un écran OLED. Analysons-le :

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <dht.h>

Ces lignes incluent les bibliothèques nécessaires pour les protocoles de communication (SPI, Wire), la gestion des graphiques (Adafruit_GFX), le contrôle de l’écran OLED (Adafruit_SSD1306) et pour le capteur DHT.

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4

Des constantes sont définies pour la largeur, la hauteur et la broche de réinitialisation de l’écran OLED.

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Un objet nommé « display » de type Adafruit_SSD1306 est créé pour contrôler l’écran OLED en utilisant la largeur, la hauteur, la communication (Wire) et la broche de réinitialisation spécifiées.

#define sensor A0
#define DHT11PIN 2

Des constantes sont définies pour la broche analogique connectée au capteur de gaz (sensor) et la broche connectée au capteur DHT11 (DHT11PIN).

int gasLevel = 0;
String quality = "";
dht DHT;

Des variables sont déclarées pour stocker les niveaux de gaz et les descriptions de qualité, et une instance « DHT » du capteur DHT est créée.

void sendSensor() {
 // Fonction pour lire la température et l'humidité à partir du capteur DHT
int readData = DHT.read11(DHT11PIN);
      float h = DHT.humidity;
      float t = DHT.temperature;

      if (isnan(h) || isnan(t)) {
      Serial.println("Failed  to read from DHT sensor!");
        return;
  }
      display.setTextColor(WHITE);
      display.setTextSize(1);
      display.setFont();
      display.setCursor(0, 43);
      display.println("Temp  :");
     display.setCursor(80, 43);
      display.println(t);
      display.setCursor(114, 43);
      display.println("C");
      display.setCursor(0,  56);
      display.println("RH    :");
      display.setCursor(80, 56);
      display.println(h);
      display.setCursor(114, 56);
      display.println("%");
}

Cette fonction est définie pour lire les données de température et d’humidité à partir du capteur DHT et les afficher sur l’écran OLED.

void air_sensor() {
gasLevel = analogRead(sensor);

      if(gasLevel<151){
        quality = "  GOOD!";
      }
      else if (gasLevel >151 && gasLevel<200){
        quality =  "  Poor!";
  }
      else if (gasLevel >200 && gasLevel<300){
        quality  = "Very bad!";
  }
        else if (gasLevel >300 && gasLevel<500){
        quality  = "Toxic!";
  }
        else{
        quality = " Toxic";   
}
  display.setTextColor(WHITE);
  display.setTextSize(1);  
  display.setCursor(1,5);
  display.setFont();
  display.println("Air Quality:");
  display.setTextSize(1);
  display.setCursor(5,23);
  display.println(gasLevel);
  
  display.setCursor(20,23);
  display.println(quality);  
}

Cette fonction est définie pour lire les niveaux de gaz à partir de la broche analogique connectée au capteur de gaz et déterminer la qualité de l’air en fonction des seuils prédéfinis. Elle affiche également le niveau de gaz et la qualité sur l’écran OLED.

void setup() {
 Serial.begin(9600);
  pinMode(sensor,INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Adresse  0x3D pour 128x64
    Serial.println(F("SSD1306 allocation failed"));
}
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  display.setTextSize(2);
  display.setCursor(50, 0);
  display.println("Air");
  display.setTextSize(1);
  display.setCursor(23, 20);
  display.println("Quality monitor");
  display.display();
  delay(1200);
  display.clearDisplay();
  
  display.setTextSize(1.5);
  display.setCursor(20, 20);
  display.println("BY Circuit");
  display.setCursor(20, 40);
  display.println("Digest");
  display.display();
  delay(1000);
  display.clearDisplay(); 

}

La fonction setup initialise la communication série, configure la broche du capteur en tant qu’entrée et initialise l’écran OLED. Elle affiche des messages d’introduction sur l’écran.

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();  

}

La fonction loop efface l’écran, lit les données des capteurs de gaz et de température/humidité à l’aide des fonctions définies, et met à jour continuellement l’écran avec les dernières lectures.

Ce code initialise essentiellement les capteurs, lit leurs données, détermine la qualité de l’air en fonction des niveaux de gaz et affiche toutes les informations sur l’écran OLED en boucle.

Démonstration de travail pour le projet de surveillance de la qualité de l’air avec Arduino

Voici la démonstration complète du projet. Vous pouvez voir qu’il affiche les valeurs de température et d’humidité en bas de l’écran OLED. En haut, vous pouvez voir que le niveau de toxicité est affiché, qui passe de bon à toxique après l’introduction de gaz provenant d’un briquet.

Projets Arduino similaires avec diagramme de circuit et code

Projets Arduino pour l'automatisation domestique

Projets Arduino pour l’automatisation domestique

Transformez votre espace de vie en une maison intelligente grâce aux projets d’automatisation domestique Arduino. De la commande des lumières et des appareils à la surveillance des conditions environnementales, ces projets DIY vous permettent de créer des solutions personnalisées adaptées à vos besoins.

Projets IoT basés sur Arduino

Projets IoT utilisant Arduino

Lancez-vous dans un voyage dans l’Internet des Objets (IoT) avec les projets Arduino ESP32, NodeMCU et ESP8266. Créez des dispositifs interconnectés qui communiquent parfaitement via Internet. Que ce soit pour la détection intelligente, le contrôle à distance ou la surveillance des données, ces projets vous permettent de rendre votre maison et votre environnement plus intelligents et plus efficaces.

1703926913 483 Systeme de surveillance de la qualite de lair avec Arduino

Projets Arduino de robotique

Plongez dans les projets de robotique Arduino où les circuits et le code se combinent pour donner vie aux machines. Explorez des créations telles que des robots suiveurs de ligne et des merveilles contrôlées par des gestes avec des schémas de circuit détaillés et des extraits de code. Plongez dans le monde de la robotique Arduino pour une expérience immersive d’apprentissage du matériel et de la programmation.

1695835981 891 Comment interconnecter Raspberry Pi Pico W avec le module de

Projets Arduino pour les débutants

Lancez-vous dans une aventure Arduino adaptée aux débutants, où vous maîtriserez les concepts fondamentaux de l’électronique et de la programmation. Participez à des exercices pratiques sur le clignotement des LED, l’exploration des capteurs et réalisez votre premier simulateur de feu de circulation, posant ainsi les bases d’une expertise en programmation. Plongez dans ce monde accessible des projets Arduino, même si vous êtes complètement débutant, et voyez vos idées prendre vie à chaque ligne de code.

Code

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include  <Adafruit_SSD1306.h>
#include <dht.h> 
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define  SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4  // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH,  SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sensor    A0 
#define DHT11PIN 2

int gasLevel  = 0;         //int variable for gas level
String quality = » »; 
dht DHT;

void sendSensor()
{
  int readData = DHT.read11(DHT11PIN);
  float h = DHT.humidity;
  float t = DHT.temperature;

  if (isnan(h) || isnan(t)) {
  Serial.println(« Failed  to read from DHT sensor! »);
    return;
  }
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setFont();
  display.setCursor(0, 43);
  display.println(« Temp  : »);
  display.setCursor(80, 43);
  display.println(t);
  display.setCursor(114, 43);
  display.println(« C »);
  display.setCursor(0, 56);
  display.println(« RH    : »);
  display.setCursor(80, 56);
  display.println(h);
  display.setCursor(114, 56);
  display.println(« % »);
}

void air_sensor()
{
  gasLevel = analogRead(sensor);

  if(gasLevel<151){
    quality =  »  GOOD! »;
  }
  else if (gasLevel >151 && gasLevel<200){
    quality =   »  Poor! »;
  }
  else if (gasLevel >200 && gasLevel<300){
    quality  = « Very bad! »;
  }
    else if (gasLevel >300 && gasLevel<500){
    quality  = « Toxic! »;
  }
    else{
    quality =  » Toxic »;   
}
  
  display.setTextColor(WHITE);
  display.setTextSize(1);  
  display.setCursor(1,5);
  display.setFont();
  display.println(« Air Quality: »);
  display.setTextSize(1);
  display.setCursor(5,23);
  display.println(gasLevel);
  
  display.setCursor(20,23);
  display.println(quality);  
}

void setup() {
  Serial.begin(9600);
  pinMode(sensor,INPUT);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address  0x3D for 128×64
    Serial.println(F(« SSD1306 allocation failed »));
}
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  display.setTextSize(2);
  display.setCursor(50, 0);
  display.println(« Air »);
  display.setTextSize(1);
  display.setCursor(23, 20);
  display.println(« Quality monitor »);
  display.display();
  delay(1200);
  display.clearDisplay();
  
  display.setTextSize(1.5);
  display.setCursor(20, 20);
  display.println(« BY Circuit »);
  display.setCursor(20, 40);
  display.println(« Digest »);
  display.display();
  delay(1000);
  display.clearDisplay();    
}

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();  
}

Retrouvez l’histoire de Raspberry Pi dans cette vidéo :