Taula de continguts:
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-13 06:57
Podeu construir bastant fàcilment un dispositiu de bricolatge Internet de les coses que supervisi la contaminació de la pols a casa vostra per menys de 50 dòlars i us notifiqui quan el nivell de pols sigui massa elevat perquè pugueu airejar l'habitació o podeu configurar-lo a l'exterior i rebre'n una notificació si sortir segur si viu en una zona altament contaminada.
Ho vaig fer com a projecte escolar, de manera que no vaig tenir prou temps per trobar un servei que agafés missatges MQTT i us els enviés com a notificacions o correus electrònics.
Tingueu en compte també que el manteniment del sensor en tot moment reduirà la vida del ventilador.
Pas 1: parts necessàries
El que necessiteu
- Arduino Uno
- Escut Ethernet Arduino
- Sensor làser de matèria de partícules (normalment costa entre 10 i 30 dòlars a eBay / AliExpress)
- Sensor de temperatura i humitat DHT11 (opcional)
- Taula de pa
- Cables de pont
Pas 2: Munteu les peces
En primer lloc, heu de connectar l’escut Ethernet a l’Arduino
El sensor PM té diversos cables, però els que necessitem són VCC, GND, TX, RX.
Connecteu el VCC i el GND a + i - a la taula de suport, respectivament.
L'Arduino té pins RX i TX de maquinari, però utilitzarem l'emulació de programari de pins RX i TX als pins 2 i 3 respectivament. Connecteu l'RX del sensor a TX de l'Arduino i TX del sensor a RX de l'Arduino.
Si utilitzeu el sensor de temperatura, connecteu les línies VCC i GND a + i - a la taula de pa i la línia de dades al pin 7.
Pas 3: el codi
Podeu instal·lar el broker MQTT en un raspberry pi o en un ordinador que tingueu sempre a casa o fer servir un servei MQTT al núvol, com Cloud MQTT. A continuació, podeu escriure un script que enviï les dades com a HTTP a un webhook IFTT, ja que encara no admeten els webhook MQTT i configureu notificacions per quan els nivells de pols de la vostra llar augmentin massa.
Estació aèria Arduino
#incloure |
#incloure |
#incloure |
#incloure |
#incloure |
#incloure |
#incloure |
#incloure |
# defineDHT11_PIN7 |
# defineRX_PIN2 |
# defineTX_PIN3 |
Adreça 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"; // Les connexions de clients no poden tenir el mateix nom de connexió |
EthernetClient ethClient; |
Client de PubSubClient (ethClient); |
SoftwareSerial pmSerial (RX_PIN, TX_PIN); |
dht DHT; |
int pm1; |
int pm2_5; |
int pm10; |
unsignedlong id; |
// Arxiva el meu fitxer; |
Cordes; |
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 ("No s'ha pogut configurar Ethernet mitjançant DHCP"); |
// intentar amb addr ip fix |
Ethernet.begin (mac, ip); |
} |
client.setServer (mqtt_server, mqtt_port); |
client.setCallback (devolució de trucada); |
endarreriment (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 del caràcter; |
charValor anterior; |
if (! client.connected ()) |
{ |
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) { |
Serial.println ("connectat"); |
} |
} |
while (pmSerial.available ()) { |
valor = pmSerial.read (); |
if ((índex == 0 && valor! = 0x42) || (índex == 1 && valor! = 0x4d)) { |
Serial.println ("No es pot trobar la capçalera de dades."); |
tornar; |
} |
if (índex == 4 || índex == 6 || índex == 8 || índex == 10 || índex == 12 || índex == 14) { |
ValorValor = valor; |
} |
elseif (índex == 5) { |
pm1 = 256 * ValorValor + valor anterior; |
arrel ["pm1"] = abs (pm1); |
} |
elseif (índex == 7) { |
pm2_5 = 256 * Valor anterior + valor; |
root ["pm2_5"] = abs (pm2_5); |
} |
elseif (índex == 9) { |
pm10 = 256 * Valor anterior + valor; |
root ["pm10"] = abs (pm10); |
} |
elseif (índex> 15) { |
trencar; |
} |
índex ++; |
} |
while (pmSerial.available ()) pmSerial.read (); |
int chk = DHT.read11 (DHT11_PIN); |
if (DHT.temperature == -999 || DHT.humidity == -999) { |
root ["temperature"] = "N / A"; |
root ["humiditat"] = "N / A"; |
} més { |
root ["temperature"] = temperatura DHT; |
arrel ["humitat"] = DHT.humitat; |
} |
sendResults (); |
id ++; |
retard (5000); |
} |
voidsendResults () { |
// publica a MQTT |
char jsonChar [100]; |
root.printTo (jsonChar); |
Serial.println (client.publish ("arduino", jsonChar)); |
// depuració a sèrie |
root.printTo (sèrie); |
Serial.print ('\ n'); |
} |
// Gestiona els missatges arribats als temes subscrits |
voidcallback (tema char *, byte * càrrega útil, longitud sense signar) { |
} |
veure rawair_quality.ino allotjat amb ❤ per GitHub
Pas 4: munteu la caixa
Acabo d’utilitzar una caixa que tenia al voltant i vaig perforar un forat perquè el sensor tregués aire i retallar un forat perquè els cables sortissin (tot i que era una mica massa gran).
Vaig utilitzar coixinets per fixar el sensor a la caixa, alineant el forat d’entrada del sensor amb el forat de la caixa.
Finalment, vaig endollar els cables d’alimentació i Ethernet.