Construire un Moniteur de Qualité d'Air Arduino avec Capteur Poussière DSM501A
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Module capteur poussière DSM501A | 1 |
| Écran LCD alphanumérique 16×2 | 1 |
| Kit ventilateur 40 mm | 1 |
| LED (génériques) | 5 |
| Résistance 221 Ω | 1 |
| Potentiomètre mono-tour 10 kΩ | 1 |
Outils nécessaires
- Fer à souder (générique)
Applications et services en ligne
- Arduino IDE
À propos du projet
La surveillance de la qualité de l'air est une science bien établie depuis les années 80. À l'époque, la technologie était limitée, les solutions pour quantifier la pollution de l'air complexes, encombrantes et très coûteuses.
Heureusement, avec les technologies modernes, les solutions de surveillance deviennent plus précises, plus rapides, plus compactes et bien plus abordables. Ce dispositif utilise le capteur Samyoung DSM501A, l'un des moins chers du marché (quelques dollars sur AliExpress). Il détecte les particules PM2,5 et PM10.
Câblage
Le circuit est très simple :
- Vout1 (PM2,5) → Pin D2 Arduino
- Vout2 (PM10) → Pin D3 Arduino
- Vcc → +5V Arduino
- GND → GND Arduino
- 5 LED → Pins A1 à A5 (configurées en sorties)
- Écran LCD 16×2 compatible Hitachi HD44780
L'écran affiche la concentration PM10 en pcs/0,01 cf et 5 états de qualité d'air :
- Clean (Propre)
- Good (Bon)
- Acceptable
- Heavy (Élevé)
- Hazard (Dangereux)
Les concentrations PM10 et PM2,5 sont aussi visibles sur le moniteur série. Selon le niveau de contamination (PM10), une LED de couleur correspondante s'allume pour une lecture rapide. L'ajout d'un ventilateur aspirant l'air par la sortie du capteur améliore significativement la stabilité des mesures (réduction des pics parasites). L'ensemble est logé dans un boîtier d'installation électrique.
À l'avenir, je testerai d'autres capteurs poussières bon marché pour comparer les résultats.
Code
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int pin2 = 3;
int pin1 = 2;
unsigned long duration1;
unsigned long duration2;
unsigned long starttime;
unsigned long sampletime_ms = 30000; // échantillonnage 30s
unsigned long lowpulseoccupancy1 = 0;
unsigned long lowpulseoccupancy2 = 0;
float ratio1 = 0;
float ratio2 = 0;
float concentration1 = 0;
float concentration2 = 0;
int wLed = A1;
int gLed = A2;
int yLed = A3;
int rLed = A4;
int bLed = A5;
void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(wLed, OUTPUT);
pinMode(gLed, OUTPUT);
pinMode(yLed, OUTPUT);
pinMode(rLed, OUTPUT);
pinMode(bLed, OUTPUT);
starttime = millis();
lcd.begin(16, 2);
}
void loop() {
duration1 = pulseIn(pin1, LOW);
duration2 = pulseIn(pin2, LOW);
lowpulseoccupancy1 += duration1;
lowpulseoccupancy2 += duration2;
if ((millis() - starttime) > sampletime_ms) {
ratio1 = lowpulseoccupancy1 / (sampletime_ms * 10.0);
concentration1 = 1.1 * pow(ratio1, 3) - 3.8 * pow(ratio1, 2) + 520 * ratio1 + 0.62;
ratio2 = lowpulseoccupancy2 / (sampletime_ms * 10.0);
concentration2 = 1.1 * pow(ratio2, 3) - 3.8 * pow(ratio2, 2) + 520 * ratio2 + 0.62;
lcd.setCursor(0, 0);
lcd.print("PM10 ");
lcd.setCursor(6, 0);
lcd.print(concentration1, 3);
Serial.print("concentration1 = ");
Serial.print(concentration1);
Serial.print(" pcs/0.01cf - ");
Serial.print("concentration2 = ");
Serial.print(concentration2);
Serial.print(" pcs/0.01cf - ");
// Affichage état qualité air + LED
if (concentration1 < 1000) {
afficherEtat("CLEAN", wLed);
} else if (concentration1 < 10000) {
afficherEtat("GOOD", gLed);
} else if (concentration1 < 20000) {
afficherEtat("ACCEPTABLE", yLed);
} else if (concentration1 < 50000) {
afficherEtat("HEAVY", rLed);
} else {
afficherEtat("HAZARD", bLed);
}
lowpulseoccupancy1 = 0;
lowpulseoccupancy2 = 0;
starttime = millis();
}
}
void afficherEtat(const char* etat, int ledActive) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) lcd.write(' ');
lcd.setCursor(4, 1);
lcd.print(etat);
int leds[5] = {wLed, gLed, yLed, rLed, bLed};
for (int i = 0; i < 5; i++) digitalWrite(leds[i], leds[i] == ledActive ? HIGH : LOW);
}
Schémas
Processus de fabrication
- Mesurer la qualité de l'air avec OpenSensors : Guide Arduino et Python
- Capteur de qualité de l'air solaire basé sur Helium : Guide de conception et déploiement
- Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
- Système de Capteur de Température Multi-Position pour Intégration Domotique
- Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
- Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
- Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
- Créer une jauge IoT connectée au Web avec Arduino, Yaler et IFTTT
- Capteur NO₂ avancé à base de carbone pour une surveillance de la qualité de l'air intérieur améliorée