Sommario:

Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: 4 passaggi (con immagini)
Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: 4 passaggi (con immagini)

Video: Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: 4 passaggi (con immagini)

Video: Stazione di monitoraggio delle particelle di polvere alimentata da Arduino: 4 passaggi (con immagini)
Video: PROGETTO Arduino: Stazione qualità dell'aria 2024, Luglio
Anonim
Stazione di monitoraggio delle particelle di polvere alimentata da Arduino
Stazione di monitoraggio delle particelle di polvere alimentata da Arduino

Puoi costruire abbastanza facilmente un dispositivo Internet delle cose fai-da-te che monitora l'inquinamento da polvere nella tua casa per meno di $ 50 e ricevere una notifica quando il livello di polvere diventa troppo alto in modo da poter aerare la stanza, oppure puoi impostarlo all'esterno e ricevere una notifica se è sicuro uscire se vivi in una zona altamente inquinata.

L'ho realizzato come progetto scolastico, quindi non ho avuto abbastanza tempo per trovare un servizio che prenda i messaggi MQTT e te li invii come notifiche o e-mail.

Si noti inoltre che mantenere il sensore sempre alimentato ridurrà la durata della ventola.

Passaggio 1: parti necessarie

Parti necessarie
Parti necessarie

Di cosa avrai bisogno

  • Arduino Uno
  • Scudo Ethernet Arduino
  • Sensore laser per particolato (di solito va da $ 10 a $ 30 su eBay / aliexpress)
  • Sensore di temperatura e umidità DHT11 (opzionale)
  • tagliere
  • Cavi jumper

Passaggio 2: assemblare le parti

Assemblare le parti
Assemblare le parti

Per prima cosa, devi collegare lo shield ethernet ad Arduino

Il sensore PM ha più fili, ma quelli di cui abbiamo bisogno sono VCC, GND, TX, RX.

Collega VCC e GND rispettivamente a + e - sulla breadboard.

L'Arduino ha pin hardware RX e TX, ma utilizzeremo l'emulazione software dei pin RX e TX rispettivamente sui pin 2 e 3. Collega l'RX del sensore al TX dell'Arduino e il TX del sensore all'RX dell'Arduino.

Se intendi utilizzare il sensore di temperatura, collega le linee VCC e GND a + e - sulla breadboard e la linea dati al pin 7.

Passaggio 3: il codice

Puoi installare il broker MQTT su un raspberry pi o su un computer che hai sempre a casa, oppure utilizzare un servizio MQTT cloud, come Cloud MQTT. Quindi puoi scrivere uno script che invii i dati come HTTP a un webhook IFTT, poiché non supportano ancora i webhook MQTT e impostare notifiche per quando i livelli di polvere in casa diventano troppo alti.

Stazione aerea Arduino

#includere

#includere
#includere
#includere
#includere
#includere

#includere

#includere
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IPAddress 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"; // Le connessioni client non possono avere lo stesso nome di connessione
Client Ethernet ethClient;
PubSubClient client(ethClient);
SoftwareSerial pmSerial(RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
ID unsignedlong;
//File mioFile;
Stringhe;
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("Impossibile configurare Ethernet utilizzando DHCP");
// tentativo con indirizzo IP fisso
Ethernet.begin(mac, ip);
}
client.setServer(mqtt_server, mqtt_port);
client.setCallback(richiamata);
ritardo (2000);
Serial.println(Ethernet.localIP());
client.connect("arduinoClient", mqtt_user, mqtt_pass);
Serial.print("rc=");
Serial.print(client.state());
Serial.print("\n");
}
voidloop() {
indice = 0;
valore del carattere;
char valore precedente;
if (!client.connected())
{
if (client.connect("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println("connesso");
}
}
while (pmSerial.available()) {
valore = pmSerial.read();
if ((indice == 0 && valore != 0x42) || (indice == 1 && valore != 0x4d)) {
Serial.println("Impossibile trovare l'intestazione dei dati.");
Restituzione;
}
if (indice == 4 || indice == 6 || indice == 8 || indice == 10 || indice == 12 || indice == 14) {
precedenteValore = valore;
}
elseif (indice == 5) {
pm1 = 256 * valore precedente + valore;
root["pm1"] = abs(pm1);
}
elseif (indice == 7) {
pm2_5 = 256 * valore precedente + valore;
root["pm2_5"] = abs(pm2_5);
}
elseif (indice == 9) {
pm10 = 256 * valore precedente + valore;
radice["pm10"] = abs(pm10);
}
elseif (indice >15) {
rottura;
}
indice++;
}
while (pmSerial.available()) pmSerial.read();
int chk = DHT.read11(DHT11_PIN);
if (DHT.temperatura == -999 || DHT.umidità == -999) {
root["temperatura"] = "N/A";
root["umidità"] = "N/A";
} altro {
root["temperatura"] = DHT.temperatura;
root["umidità"] = DHT.umidità;
}
sendResults();
id++;
ritardo (5000);
}
voidsendResults() {
// pubblica su MQTT
char jsonChar[100];
root.printTo(jsonChar);
Serial.println(client.publish("arduino", jsonChar));
// debug su seriale
root.printTo(Seriale);
Serial.print('\n');
}
// Gestisce i messaggi arrivati su argomenti sottoscritti
voidcallback(char* argomento, byte* payload, lunghezza unsignedint) {
}

visualizza rawair_quality.ino ospitato con ❤ da GitHub

Passaggio 4: assemblare la scatola

Assemblare la scatola
Assemblare la scatola
Assemblare la scatola
Assemblare la scatola
Assemblare la scatola
Assemblare la scatola

Ho appena usato una scatola che avevo in giro e ho praticato un foro per il sensore da cui prendere l'aria e ho ritagliato un foro per far uscire i cavi (anche se era un po' troppo grande).

Ho usato dei cuscinetti di colla per attaccare il sensore alla scatola, allineando il foro di ingresso del sensore con il foro praticato sulla scatola.

Infine, ho collegato i cavi ethernet e di alimentazione.

Consigliato: