Съдържание:

Станция за наблюдение на прахови частици с Arduino: 4 стъпки (със снимки)
Станция за наблюдение на прахови частици с Arduino: 4 стъпки (със снимки)

Видео: Станция за наблюдение на прахови частици с Arduino: 4 стъпки (със снимки)

Видео: Станция за наблюдение на прахови частици с Arduino: 4 стъпки (със снимки)
Видео: CS50 2015 - Week 4 2024, Ноември
Anonim
Станция за наблюдение на прахови частици Arduino
Станция за наблюдение на прахови частици Arduino

Можете сравнително лесно да изградите устройство „Направи си сам“интернет на нещата, което следи замърсяването с прах във вашия дом за по -малко от $ 50 и да получавате известия, когато нивото на прах стане твърде високо, за да можете да проветрите помещението или да го настроите навън и да получите известие, ако е безопасно да излизате навън, ако живеете в силно замърсена зона.

Направих това като училищен проект, така че нямах достатъчно време да намеря услуга, която да приема MQTT съобщения и да ви ги изпраща като известия или имейли.

Също така имайте предвид, че поддържането на сензора през цялото време ще намали живота на вентилатора.

Стъпка 1: Необходими части

Необходими части
Необходими части

Какво ще ви трябва

  • Arduino Uno
  • Arduino Ethernet щит
  • Лазерен сензор за прахови частици (обикновено отиват за $ 10-$ 30 на eBay/aliexpress)
  • DHT11 сензор за температура и влажност (по избор)
  • Платка
  • Джъмперни кабели

Стъпка 2: Сглобете частите

Сглобете частите
Сглобете частите

Първо, трябва да включите Ethernet щита на Arduino

PM сензорът има множество проводници, но тези, от които се нуждаем, са VCC, GND, TX, RX.

Свържете VCC и GND съответно към + и - на платката.

Arduino има хардуерни RX и TX пинове, но ще използваме софтуерна емулация на RX и TX щифтове съответно на пинове 2 и 3. Включете RX на сензора към TX на Arduino и TX на сензора към RX на Arduino.

Ако ще използвате температурния сензор, включете линиите VCC и GND към + и - на макета и линията за данни към щифт 7.

Стъпка 3: Кодът

Можете или да инсталирате MQTT брокер на малинов пи или компютър, който винаги сте имали у дома, или да използвате облачна MQTT услуга, като Cloud MQTT. След това можете да напишете скрипт, който изпраща данните като HTTP към IFTT уебхук, тъй като те все още не поддържат MQTT уеб куки и да настроите известия, когато нивата на прах в дома ви станат твърде високи.

Аерогара Ардуино

#включва

#включва
#включва
#включва
#включва
#включва

#включва

#включва
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_PIN3
IP Адрес ip (169, 169, 100, 98);
байт 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"; // Клиентските връзки не могат да имат същото име на връзка
EthernetClient ethClient;
PubSubClient клиент (ethClient);
SoftwareSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
unsignedlong id;
// Файл myFile;
Низове s;
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 ("Неуспешно конфигуриране на Ethernet чрез DHCP");
// опит с фиксиран ip addr
Ethernet.begin (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (обратно повикване);
забавяне (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;
char стойност;
char previousValue;
if (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println ("свързан");
}
}
while (pmSerial.available ()) {
стойност = pmSerial.read ();
if ((индекс == 0 && стойност! = 0x42) || (индекс == 1 && стойност! = 0x4d)) {
Serial.println ("Не мога да намеря заглавката на данните.");
връщане;
}
if (индекс == 4 || индекс == 6 || индекс == 8 || индекс == 10 || индекс == 12 || индекс == 14) {
previousValue = стойност;
}
elseif (индекс == 5) {
pm1 = 256 * previousValue + стойност;
root ["pm1"] = abs (pm1);
}
elseif (индекс == 7) {
pm2_5 = 256 * previousValue + стойност;
root ["pm2_5"] = abs (pm2_5);
}
elseif (индекс == 9) {
pm10 = 256 * previousValue + стойност;
root ["pm10"] = abs (pm10);
}
elseif (индекс> 15) {
прекъсване;
}
индекс ++;
}
while (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
if (DHT.temperature == -999 || DHT.humidity == -999) {
root ["температура"] = "N/A";
root ["влажност"] = "N/A";
} else {
root ["температура"] = DHT.температура;
root ["влажност"] = DHT.влажност;
}
sendResults ();
id ++;
забавяне (5000);
}
voidsendResults () {
// публикувам в MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// отстраняване на грешки в сериен
root.printTo (сериен);
Serial.print ('\ n');
}
// Обработва съобщения, пристигнали по абонаментирани теми
voidcallback (char* тема, байт* полезен товар, дължина без знак) {
}

вижте rawair_quality.ino, хоствано с ❤ от GitHub

Стъпка 4: Сглобете кутията

Сглобете кутията
Сглобете кутията
Сглобете кутията
Сглобете кутията
Сглобете кутията
Сглобете кутията

Току -що използвах кутия, която бях лежал наоколо, и пробих дупка за сензора, от който да излиза въздух, и изрязах дупка за излизане на кабелите (въпреки че беше малко прекалено голяма).

Използвах подложки за лепило, за да прикрепя сензора към кутията, като подравнявам входния отвор на сензора с пробития отвор на кутията.

Накрая включих Ethernet и захранващи кабели.

Препоръчано: