- Composants requis
- Capteur Nova PM SDS011 pour la mesure des PM2,5 et PM10
- Principes de base du module d'affichage OLED 0,96 '
- Préparation du capteur MQ-7 pour mesurer le monoxyde de carbone (CO)
- Calcul de l'indice de qualité de l'air
- Schéma
- Construction du circuit du système de surveillance de la qualité de l'air sur le panneau Perf
- Configuration Adafruit IO
- Explication du code pour
- Boîtier imprimé en 3D pour système de surveillance AQI
- Test du système de surveillance AQI
À l'arrivée de l'hiver, l'air qui plane au-dessus de nous s'épaissit avec la fumée et les émissions gazeuses des champs en feu, des usines industrielles et de la circulation des véhicules, bloquant le soleil et rendant la respiration difficile. Les experts disent que les niveaux élevés de pollution atmosphérique et la pandémie de COVID-19 peuvent être un mélange dangereux qui peut avoir de graves conséquences. La nécessité d'une surveillance en temps réel de la qualité de l'air est très flagrante.
Donc, dans ce projet, nous allons construire un système de surveillance de la qualité de l'air ESP32 utilisant le capteur Nova PM SDS011, le capteur MQ-7 et le capteur DHT11. Nous utiliserons également un module d'affichage OLED pour afficher les valeurs de qualité de l'air. L' indice de qualité de l'air (IQA) en Inde est basé sur huit polluants, PM10, PM2,5, SO2 et NO2, CO, ozone, NH3 et Pb. Cependant, il n'est pas nécessaire de mesurer tous les polluants. Nous allons donc mesurer la concentration de PM2,5, de PM10 et de monoxyde de carbone pour calculer l'indice de qualité de l'air. Les valeurs AQI seront publiées sur Adafruit IO afin que nous puissions la surveiller de n'importe où. Auparavant, nous avons également mesuré la concentration de GPL, de fumée et d'ammoniac à l'aide d'Arduino.
Composants requis
- ESP32
- Capteur Nova PM SDS011
- Module d'affichage OLED SPI 0,96 '
- Capteur DHT11
- Capteur MQ-7
- Fils de cavalier
Capteur Nova PM SDS011 pour la mesure des PM2,5 et PM10
Le capteur SDS011 est un capteur de qualité de l'air très récent développé par Nova Fitness. Il fonctionne sur le principe de la diffusion laser et peut obtenir une concentration de particules comprise entre 0,3 et 10 μm dans l'air. Ce capteur se compose d'un petit ventilateur, d'une vanne d'entrée d'air, d'une diode laser et d'une photodiode. L'air entre par l'entrée d'air où une source de lumière (laser) illumine les particules et la lumière diffusée est transformée en un signal par un photodétecteur. Ces signaux sont ensuite amplifiés et traités pour obtenir la concentration de particules de PM2,5 et PM10. Nous avons précédemment utilisé Nova PM Sensor avec Arduino pour calculer la concentration de PM10 et PM2,5.
Spécifications du capteur SDS011:
- Sortie: PM2.5, PM10
- Plage de mesure: 0,0-999,9 μg / m3
- Tension d'entrée: 4,7 V à 5,3 V
- Courant maximum: 100mA
- Courant de sommeil: 2mA
- Temps de réponse: 1 seconde
- Fréquence de sortie des données série: 1 fois / seconde
- Résolution du diamètre des particules: ≤0,3 μm
- Erreur relative: 10%
- Plage de température: -20 ~ 50 ° C
Principes de base du module d'affichage OLED 0,96 '
OLED (diode électroluminescente organique) est une sorte de diode électroluminescente fabriquée à partir de composés organiques qui excite lorsque le courant électrique est autorisé à les traverser. Ces composés organiques ont leur propre lumière et ne nécessitent donc aucun circuit de rétroéclairage comme les écrans LCD normaux. Pour cette raison, la technologie d'affichage OLED est économe en énergie et largement utilisée dans les téléviseurs et autres produits d'affichage.
Différents types d'OLED sont disponibles sur le marché en fonction de la couleur de l'écran, du nombre de broches, de la taille et du contrôleur IC. Dans ce tutoriel, nous utiliserons le module OLED Monochrome Blue 7 broches SSD1306 0,96 ”qui mesure 128 pixels de large et 64 pixels de long. Cet OLED à 7 broches prend en charge le protocole SPI et le contrôleur IC SSD1306 aide l'OLED à afficher les caractères reçus. En savoir plus sur OLED et son interface avec différents microcontrôleurs en suivant le lien.
Préparation du capteur MQ-7 pour mesurer le monoxyde de carbone (CO)
Le module de capteur de monoxyde de carbone MQ-7 CO détecte les concentrations de CO dans l'air. Le capteur peut mesurer des concentrations de 10 à 10 000 ppm. Le capteur MQ-7 peut être acheté en tant que module ou simplement en tant que capteur seul. Auparavant, nous avons utilisé de nombreux types de capteurs de gaz pour détecter et mesurer divers gaz, vous pouvez également les vérifier si vous êtes intéressé. Dans ce projet, nous utilisons le module de capteur MQ-7 pour mesurer la concentration de monoxyde de carbone en PPM. Le schéma de circuit de la carte MQ-7 est donné ci-dessous:
La résistance de charge RL joue un rôle très important dans le fonctionnement du capteur. Cette résistance change sa valeur de résistance en fonction de la concentration de gaz. La carte de capteur MQ-7 est livrée avec une résistance de charge de 1KΩ qui est inutile et affecte les lectures du capteur. Donc, pour mesurer les valeurs de concentration de CO appropriées, vous devez remplacer la résistance 1KΩ par une résistance 10KΩ.
Calcul de l'indice de qualité de l'air
L'IQA en Inde est calculé sur la base de la concentration moyenne d'un polluant particulier mesurée sur un intervalle de temps standard (24 heures pour la plupart des polluants, 8 heures pour le monoxyde de carbone et l'ozone). Par exemple, l'AQI pour les PM2,5 et PM10 est basé sur la concentration moyenne sur 24 heures et l'AQI pour le monoxyde de carbone est basé sur la concentration moyenne sur 8 heures). Les calculs de l'IQA incluent les huit polluants que sont les PM10, les PM2,5, le dioxyde d'azote (NO 2), le dioxyde de soufre (SO 2), le monoxyde de carbone (CO), l'ozone troposphérique (O 3), l'ammoniac (NH 3), et plomb (Pb). Cependant, tous les polluants ne sont pas mesurés à chaque endroit.
Sur la base des concentrations ambiantes mesurées sur 24 heures d'un polluant, un sous-indice est calculé, qui est une fonction linéaire de la concentration (par exemple, le sous-indice pour les PM2,5 sera 51 à la concentration 31 µg / m3, 100 à la concentration 60 µg / m3 et 75 à une concentration de 45 µg / m3). Le pire sous-indice (ou le maximum de tous les paramètres) détermine l'AQI global.
Schéma
Le schéma de circuit du système de surveillance de la qualité de l'air basé sur l'IoT est très simple et donné ci-dessous:
Les capteurs SDS011, DHT11 et MQ-7 sont alimentés en + 5V tandis que le module d'affichage OLED est alimenté en 3,3V. Les broches de l'émetteur et du récepteur du SDS011 sont connectées aux GPIO16 et 17 de l'ESP32. La broche de sortie analogique du capteur MQ-7 est connectée au GPIO 25 et la broche de données du capteur DHT11 est connectée au capteur GPIO27. Étant donné que le module d'affichage OLED utilise la communication SPI, nous avons établi une communication SPI entre le module OLED et ESP32. Les connexions sont indiquées dans le tableau ci-dessous:
S. Non |
Broche du module OLED |
Broche ESP32 |
1 |
GND |
Sol |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
sept |
CS |
5 |
S. Non |
Broche SDS011 |
Broche ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S. Non |
Broche DHT |
Broche ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Les données |
27 |
S. Non |
Broche MQ-7 |
Broche ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Construction du circuit du système de surveillance de la qualité de l'air sur le panneau Perf
Comme vous pouvez le voir sur l'image principale, l'idée était d'utiliser ce circuit à l'intérieur d'un boîtier imprimé en 3D. Ainsi, le circuit complet illustré ci-dessus est soudé sur une carte de performance. Assurez-vous d'utiliser des fils pour laisser une distance suffisante pour monter l'OLED et les capteurs. Ma carte de performance soudée à OLED et le module de capteur est illustré ci-dessous.
Configuration Adafruit IO
Adafruit IO est une plate-forme de données ouvertes qui vous permet d'agréger, de visualiser et d'analyser des données en direct sur le cloud. En utilisant Adafruit IO, vous pouvez télécharger, afficher et surveiller vos données sur Internet et activer l'IoT de votre projet. Vous pouvez contrôler les moteurs, lire les données des capteurs et créer des applications IoT intéressantes sur Internet à l'aide d'Adafruit IO.
Pour utiliser Adafruit IO, créez d'abord un compte sur Adafruit IO. Pour ce faire, rendez-vous sur le site Web d'Adafruit IO et cliquez sur «Commencer gratuitement» en haut à droite de l'écran.
Une fois le processus de création de compte terminé, connectez-vous au compte et cliquez sur «Afficher la clé AIO» dans le coin supérieur droit pour obtenir le nom d'utilisateur du compte et la clé AIO.
Lorsque vous cliquez sur «Clé AIO», une fenêtre apparaît avec la clé Adafruit IO AIO et le nom d'utilisateur. Copiez cette clé et ce nom d'utilisateur, ils seront utilisés dans le code.
Maintenant, après avoir obtenu les clés AIO, créez un flux pour stocker les données du capteur DHT. Pour créer un flux, cliquez sur "Flux". Cliquez ensuite sur "Actions", puis sélectionnez "Créer un nouveau flux" parmi les options disponibles.
Après cela, une nouvelle fenêtre s'ouvrira dans laquelle vous devrez saisir le nom et la description du flux. La rédaction d'une description est facultative.
Cliquez sur «Créer» après cela; vous serez redirigé vers le flux nouvellement créé.
Pour ce projet, nous avons créé un total de six alimentations pour les valeurs PM10, PM2,5, CO, température, humidité et AQI. Suivez la même procédure que ci-dessus pour créer le reste des flux.
Après avoir créé des flux, nous allons maintenant créer une fonctionnalité de tableau de bord Adafruit IO pour visualiser les données du capteur sur une seule page. Pour cela, créez d'abord un tableau de bord, puis ajoutez tous ces flux dans ce tableau de bord.
Pour créer un tableau de bord, cliquez sur l'option Tableau de bord, puis sur «Action», puis sur «Créer un nouveau tableau de bord».
Dans la fenêtre suivante, entrez le nom du tableau de bord et cliquez sur «Créer».
Au fur et à mesure de la création du tableau de bord, nous allons maintenant utiliser les blocs Adafruit IO tels que Gauge et Slider pour visualiser les données. Pour ajouter un bloc, cliquez sur le '+' dans le coin supérieur droit.
Sélectionnez ensuite le bloc «Jauge».
Dans la fenêtre suivante, sélectionnez les données de flux que vous souhaitez visualiser.
Dans la dernière étape, modifiez les paramètres du bloc pour le personnaliser.
Suivez maintenant la même procédure que ci-dessus pour ajouter des blocs de visualisation pour le reste des flux. Mon tableau de bord Adafruit IO ressemblait à ceci:
Explication du code pour
Le code complet de ce projet est donné à la fin du document. Nous expliquons ici certaines parties importantes du code.
Le code utilise les SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, et DHT.h bibliothèques. Les bibliothèques SDS011, Adafruit_GFX et Adafruit_SSD1306 peuvent être téléchargées à partir du gestionnaire de bibliothèque dans l'IDE Arduino et installées à partir de là. Pour cela, ouvrez l'IDE Arduino et accédez à Sketch <Inclure la bibliothèque <Gérer les bibliothèques . Recherchez maintenant SDS011 et installez la bibliothèque de capteurs SDS de R. Zschiegner.
De même, installez les bibliothèques Adafruit GFX et Adafruit SSD1306 d'Adafruit. Adafruit_MQTT.h et DHT11.h peuvent être téléchargés à partir des liens indiqués.
Après avoir installé les bibliothèques sur Arduino IDE, démarrez le code en incluant les fichiers de bibliothèques nécessaires.
#comprendre
Dans les lignes suivantes, définissez la largeur et la hauteur de l'écran OLED. Dans ce projet, j'ai utilisé un écran OLED 128 × 64 SPI. Vous pouvez modifier le SCREEN_WIDTH et screen_height des variables en fonction de votre écran.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Définissez ensuite les broches de communication SPI sur lesquelles l'écran OLED est connecté.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Ensuite, créez une instance pour l'affichage Adafruit avec la largeur et la hauteur et le protocole de communication SPI définis précédemment.
Affichage Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Incluez ensuite les informations d'identification WiFi et Adafruit IO que vous avez copiées à partir du serveur Adafruit IO. Ceux-ci comprendront le serveur MQTT, le numéro de port, le nom d'utilisateur et la clé AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Configurez ensuite les flux Adafruit IO pour stocker les données du capteur. Dans mon cas, j'ai défini six flux pour stocker différentes données de capteur, à savoir: Qualité de l'air, Température, Humidité, PM10, PM25 et CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Adafruit_MQTT_Publish Humidité = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidité"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Maintenant, dans la fonction setup () , initialisez le Serial Monitor à une vitesse de transmission de 9600 à des fins de débogage. Initialisez également l'écran OLED, le capteur DHT et le capteur SDS011 avec la fonction begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
La boucle for à l'intérieur de la fonction de configuration est utilisée pour collecter les valeurs jusqu'à un nombre défini, puis mettre le compteur à zéro.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Lecture des valeurs du capteur:
Maintenant, dans la fonction de boucle, utilisez la méthode millis () pour lire les valeurs du capteur toutes les heures. Chacun des capteurs de gaz émet une valeur analogique de 0 à 4095. Pour convertir cette valeur en tension, utilisez l'équation suivante: RvRo = MQ7Raw * (3,3 / 4095); où MQ7Raw est la valeur analogique de la broche analogique du capteur. Lisez également les lectures de PM2,5 et PM10 du capteur SDS011.
if ((unsigned long) (currentMillis - previousMillis)> = intervalle) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); erreur = mes_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Conversion des valeurs:
Les valeurs de PM2,5 et PM10 sont déjà en µg / m 3, mais nous devons convertir les valeurs de monoxyde de carbone de PPM en mg / m 3. La formule de conversion est donnée ci-dessous:
Concentration (mg / m 3) = Concentration (PPM) × (Masse moléculaire (g / mol) / Volume molaire (L))
Où: La masse moléculaire de CO est de 28,06 g / mol et le volume molaire de 24,45 L à 25 0 C
Concentration INmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Calcul de la moyenne sur 24 heures:
Ensuite, dans les lignes suivantes, calculez la moyenne sur 24 heures pour les mesures de PM10, de PM2,5 et de 8 heures pour les mesures de monoxyde de carbone. Dans la première ligne de code, prenez le total actuel et soustrayez le premier élément du tableau, maintenant enregistrez-le comme nouveau total. Au départ, ce sera zéro. Ensuite, obtenez les valeurs du capteur et ajoutez la lecture actuelle au total et augmentez l'indice numérique. Si la valeur de l'index est égale ou supérieure à numReadings, remettez l'index à zéro.
totalPM10 = totalPM10 - lecturesPM10; lecturesPM10 = p10; totalPM10 = totalPM10 + lecturesPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Puis, enfin, publiez ces valeurs sur Adafruit IO.
if (! Temperature.publish (temperature)) {delay (30000); } if (! Humidity.publish (humidité)) {délai (30000); ………………………………………………………. ……………………………………………………….
Boîtier imprimé en 3D pour système de surveillance AQI
Ensuite, j'ai mesuré les dimensions de l'installation à l'aide de mon vernier et mesuré également les dimensions des capteurs et de l'OLED pour concevoir un boîtier. Ma conception ressemblait à quelque chose comme ça ci-dessous, une fois qu'il a été fait.
Une fois satisfait de la conception, je l'ai exporté sous forme de fichier STL, je l'ai découpé en tranches en fonction des paramètres de l'imprimante et je l'ai finalement imprimé. Encore une fois, le fichier STL est également disponible en téléchargement sur Thingiverse et vous pouvez imprimer votre boîtier en l'utilisant.
Une fois l'impression terminée, j'ai procédé à l'assemblage du projet mis en place dans une enceinte permanente pour l'installer dans une installation. Une fois la connexion terminée, j'ai assemblé le circuit dans mon boîtier et tout était bien ajusté comme vous pouvez le voir ici.
Test du système de surveillance AQI
Une fois que le matériel et le code sont prêts, il est temps de tester l'appareil. Nous avons utilisé un adaptateur externe 12V 1A pour alimenter l'appareil. Comme vous pouvez le voir, l'appareil affichera la concentration de PM10, PM2,5 et monoxyde de carbone sur l'écran OLED. Les concentrations de PM2,5 et PM10 sont en µg / m 3 tandis que la concentration de monoxyde de carbone est en mg / m 3.
Ces lectures seront également publiées sur le tableau de bord Adafruit IO. Le maximum de tous les paramètres (PM10, PM2.5 & CO) sera l'AQI.
Les valeurs AQI des 30 derniers jours seront affichées sous forme de graphique.
C'est ainsi que vous pouvez utiliser les capteurs SDS011 et MQ-7 pour calculer l'indice de qualité de l'air. Le fonctionnement complet du projet peut également être trouvé dans la vidéo ci-dessous. J'espère que vous avez apprécié le projet et que vous avez trouvé intéressant de créer le vôtre. Si vous avez des questions, veuillez les laisser dans la section commentaires ci-dessous.