Construa um Monitor de Qualidade do Ar Baseado em Arduino com Sensor de Poeira DSM501A
Componentes e Materiais
| Arduino Nano R3 | 1 |
| Módulo Sensor de Poeira DSM501A | 1 |
| Display LCD Alfanumérico 16x2 | 1 |
| Kit Ventoinha 40mm | 1 |
| LED (genérico) | 5 |
| Resistor 221 ohm | 1 |
| Potenciômetro de Volta Única - 10k ohms | 1 |
Ferramentas Necessárias
- Ferro de Solda (genérico)
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
A monitoração da qualidade do ar é uma ciência bem estabelecida que começou nos anos 80. Naquela época, a tecnologia era bastante limitada e as soluções para quantificar a poluição do ar eram complexas, volumosas e muito caras.
Felizmente, hoje em dia, com as tecnologias mais recentes e modernas, as soluções para monitoramento de qualidade do ar estão se tornando não apenas mais precisas, mas também mais rápidas na medição. Os dispositivos estão ficando menores e custam muito mais acessíveis do que nunca. O dispositivo apresentado usa o sensor de poeira Samyoung "DSM501A", que é um dos mais baratos do mercado e pode ser comprado no AliExpress por poucos dólares. Este sensor é capaz de detectar partículas PM2.5 e PM10.

O circuito é muito simples:
- Vout1 (PM2.5) do sensor conectado ao pino D2 do Arduino
- Vout2 (PM10) conectado ao pino D3
- Vcc ao +5V do Arduino
- GND ao pino GND do Arduino
Os diodos LED são conectados aos pinos analógicos A1 a A5 do Arduino, que são definidos como saídas no código. O display LCD com 16x2 caracteres é compatível com o controlador Hitachi HD44780. Ele mostra a concentração de partículas PM10 em pcs/0.01cf e 5 estados de qualidade do ar:
- Limpo (Clean)
- Bom (Good)
- Aceitável (Acceptable)
- Pesado (Heavy)
- Perigoso (Hazard)
A concentração de PM10 e PM2.5 pode ser monitorada no monitor serial do Arduino. Dependendo do grau de contaminação (PM10), um LED de cor apropriada acende para permitir uma leitura rápida e fácil do resultado. Não tenho muita experiência em programação, então talvez o código possa ser melhorado. É muito importante enfatizar que a instalação de uma ventoinha que suga o ar pela saída do sensor melhora significativamente as características na área de valores de pico indesejados. Todo o dispositivo é montado em uma caixa plástica para instalação elétrica.

No futuro, pretendo testar mais alguns sensores de poeira baratos para que você possa encontrar os resultados em um dos meus próximos projetos.
Código
#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 = 3000; // amostra de 3s
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(); // obtém o tempo atual
lcd.begin(16, 2);
}
void loop() {
duration1 = pulseIn(pin1, LOW);
duration2 = pulseIn(pin2, LOW);
lowpulseoccupancy1 = lowpulseoccupancy1 + duration1;
lowpulseoccupancy2 = lowpulseoccupancy2 + duration2;
if ((millis() - starttime) > sampletime_ms) { // se o tempo de amostra == 3s
ratio1 = lowpulseoccupancy1 / (sampletime_ms * 10.0); // Porcentagem inteira 0=>100
concentration1 = 1.1 * pow(ratio1, 3) - 3.8 * pow(ratio1, 2) + 520 * ratio1 + 0.62; // usando curva da folha de especificação
ratio2 = lowpulseoccupancy2 / (sampletime_ms * 10.0); // Porcentagem inteira 0=>100
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 - ");
if (concentration1 < 1000) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) { lcd.write(' '); }
lcd.setCursor(4, 1);
lcd.print("LIMPO");
digitalWrite(wLed, HIGH);
digitalWrite(gLed, LOW);
digitalWrite(yLed, LOW);
digitalWrite(rLed, LOW);
digitalWrite(bLed, LOW);
}
if (concentration1 > 1000 && concentration1 < 10000) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) { lcd.write(' '); }
lcd.setCursor(4, 1);
lcd.print("BOM");
digitalWrite(wLed, LOW);
digitalWrite(gLed, HIGH);
digitalWrite(yLed, LOW);
digitalWrite(rLed, LOW);
digitalWrite(bLed, LOW);
}
if (concentration1 > 10000 && concentration1 < 20000) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) { lcd.write(' '); }
lcd.setCursor(4, 1);
lcd.print("ACEITAVEL");
digitalWrite(wLed, LOW);
digitalWrite(gLed, LOW);
digitalWrite(yLed, HIGH);
digitalWrite(rLed, LOW);
digitalWrite(bLed, LOW);
}
if (concentration1 > 20000 && concentration1 < 50000) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) { lcd.write(' '); }
lcd.setCursor(4, 1);
lcd.print("PESADO");
digitalWrite(wLed, LOW);
digitalWrite(gLed, LOW);
digitalWrite(yLed, LOW);
digitalWrite(rLed, HIGH);
digitalWrite(bLed, LOW);
}
if (concentration1 > 50000) {
lcd.setCursor(0, 1);
for (int i = 0; i < 16; ++i) { lcd.write(' '); }
lcd.setCursor(4, 1);
lcd.print("PERIGOSO");
digitalWrite(wLed, LOW);
digitalWrite(gLed, LOW);
digitalWrite(yLed, LOW);
digitalWrite(rLed, LOW);
digitalWrite(bLed, HIGH);
}
lowpulseoccupancy1 = 0;
lowpulseoccupancy2 = 0;
starttime = millis();
}
}
Esquemáticos
Processo de manufatura
- Monitoramento de Qualidade do Ar com OpenSensors: Guia Arduino e Python
- Sensor de Qualidade do Ar Solar com Helium: Guia de Projeto e Deploy
- Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
- Sistema Multi-Posição de Sensores de Temperatura para Integração em Casa Inteligente
- Sensor K30 CO₂: Monitoramento de Qualidade do Ar Interno em Tempo Real
- Construa um Sensor de Obstáculos Simples com Arduino – Tutorial Fácil com LED IR e Fotodiodo
- Integrando Sensor de Impressão Digital Capacitivo DFRobot com Arduino ou ESP8266
- Crie um Medidor IoT Web com Arduino, Yaler e IFTTT
- Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
- Sensor Avançado de NO₂ Baseado em Carbono Melhora Monitoramento da Qualidade do Ar Interno