Índice:
Vídeo: Estação de monitoramento de partículas de poeira alimentada por Arduino: 4 etapas (com fotos)
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Você pode facilmente construir um dispositivo DIY de coisas que monitora a poluição de poeira em sua casa por menos de US $ 50 e ser notificado quando o nível de poeira ficar muito alto para que você possa arejar o ambiente, ou você pode colocá-lo do lado de fora e ser notificado se estiver seguro sair de casa se você mora em uma área altamente poluída.
Fiz isso como um projeto escolar, então não tive tempo suficiente para encontrar um serviço que pegará mensagens MQTT e as enviará para você como notificações ou e-mails.
Observe também que manter o sensor ligado o tempo todo reduzirá a vida útil do ventilador.
Etapa 1: peças necessárias
O que você precisará
- Arduino Uno
- Escudo Ethernet Arduino
- Sensor a laser de material particulado (geralmente custa US $ 10 a US $ 30 no eBay / aliexpress)
- Sensor de temperatura e umidade DHT11 (opcional)
- Tábua de pão
- Cabos jumper
Etapa 2: montar as peças
Primeiro, você precisa conectar o escudo Ethernet no Arduino
O sensor PM tem vários fios, mas os que precisamos são VCC, GND, TX, RX.
Conecte o VCC e o GND a + e - na placa de ensaio, respectivamente.
O Arduino tem pinos RX e TX de hardware, mas usaremos emulação de software dos pinos RX e TX nos pinos 2 e 3, respectivamente. Conecte o RX do sensor ao TX do Arduino e o TX do sensor ao RX do Arduino.
Se você for usar o sensor de temperatura, conecte as linhas VCC e GND a + e - na placa de ensaio e a linha de dados ao pino 7.
Etapa 3: O Código
Você pode instalar o corretor MQTT em um raspberry pi ou em um computador que está sempre ligado em casa, ou usar um serviço MQTT em nuvem, como o Cloud MQTT. Em seguida, você pode escrever um script que envia os dados como HTTP para um webhook IFTT, pois eles ainda não suportam webhooks MQTT e configurar notificações para quando os níveis de poeira em sua casa ficarem muito altos.
Estação aérea Arduino
#incluir |
#incluir |
#incluir |
#incluir |
#incluir |
#incluir |
#incluir |
#incluir |
# defineDHT11_PIN7 |
# defineRX_PIN2 |
# defineTX_PIN3 |
Endereço IP ip (169, 169, 100, 98); |
byte mac = { |
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 |
}; |
constchar * mqtt_server = "m23.cloudmqtt.com"; |
constint mqtt_port = 11895; |
constchar * mqtt_user = "jhetjewk"; |
constchar * mqtt_pass = "QB2p9PiMV6pn"; |
constchar * mqtt_client_name = "arduinoClient1"; // As conexões do cliente não podem ter o mesmo nome de conexão |
EthernetClient ethClient; |
Cliente PubSubClient (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
id sem sinal longo; |
// Arquivo meuArquivo; |
Cordas; |
StaticJsonBuffer <200> jsonBuffer; |
JsonObject & root = jsonBuffer.createObject (); |
voidsetup () { |
Serial.begin (57600); |
pmSerial.begin (9600); |
id = 0; |
pm1 = 0; |
pm2_5 = 0; |
pm10 = 0; |
if (Ethernet.begin (mac) == 0) |
{ |
Serial.println ("Falha ao configurar Ethernet usando DHCP"); |
// tentativa com endereço de ip fixo |
Ethernet.begin (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (callback); |
atraso (2000); |
Serial.println (Ethernet.localIP ()); |
client.connect ("arduinoClient", mqtt_user, mqtt_pass); |
Serial.print ("rc ="); |
Serial.print (client.state ()); |
Serial.print ("\ n"); |
} |
voidloop () { |
intindex = 0; |
valor char; |
char previousValue; |
if (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("conectado"); |
} |
} |
while (pmSerial.available ()) { |
valor = pmSerial.read (); |
if ((índice == 0 && valor! = 0x42) || (índice == 1 && valor! = 0x4d)) { |
Serial.println ("Não é possível encontrar o cabeçalho dos dados."); |
Retorna; |
} |
if (índice == 4 || índice == 6 || índice == 8 || índice == 10 || índice == 12 || índice == 14) { |
previousValue = value; |
} |
elseif (índice == 5) { |
pm1 = 256 * valor anterior + valor; |
root ["pm1"] = abs (pm1); |
} |
elseif (índice == 7) { |
pm2_5 = 256 * valor anterior + valor; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (índice == 9) { |
pm10 = 256 * valor anterior + valor; |
raiz ["pm10"] = abs (pm10); |
} |
elseif (índice> 15) { |
pausa; |
} |
index ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
if (DHT.temperature == -999 || DHT.umidity == -999) { |
raiz ["temperatura"] = "N / A"; |
raiz ["umidade"] = "N / A"; |
} outro { |
root ["temperatura"] = DHT.temperatura; |
raiz ["umidade"] = DHT.umidade; |
} |
sendResults (); |
id ++; |
atraso (5000); |
} |
voidsendResults () { |
// publicar no MQTT |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// depurar para serial |
root.printTo (Serial); |
Serial.print ('\ n'); |
} |
// Lida com mensagens recebidas em tópicos assinados |
voidcallback (char * topic, byte * payload, unsignedint length) { |
} |
veja rawair_quality.ino hospedado com ❤ por GitHub
Etapa 4: montar a caixa
Eu apenas usei uma caixa que eu tinha largado e fiz um buraco para o sensor tirar o ar e cortei um buraco para os cabos saírem (embora fosse um pouco grande).
Usei almofadas de cola para prender o sensor à caixa, alinhando o orifício de entrada do sensor com o orifício perfurado na caixa.
Finalmente, conectei os cabos Ethernet e de alimentação.