Բովանդակություն:

Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան. 4 քայլ (նկարներով)
Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան. 4 քայլ (նկարներով)

Video: Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան. 4 քայլ (նկարներով)

Video: Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան. 4 քայլ (նկարներով)
Video: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, Նոյեմբեր
Anonim
Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան
Arduino սնուցվող փոշու մասնիկների մոնիտորինգի կայան

Դուք կարող եք բավականին հեշտությամբ սարքել սարքերի ինտերնետ, որը վերահսկում է ձեր տանը փոշու աղտոտվածությունը 50 դոլարից ցածր գնով և ծանուցվել, երբ փոշու մակարդակը չափազանց բարձր է, այնպես որ կարող եք օդափոխել սենյակը, կամ կարող եք այն դրսում դնել և տեղեկանալ, եթե դա անվտանգ է դուրս գալը, եթե ապրում եք խիստ աղտոտված տարածքում:

Ես դա արել եմ որպես դպրոցական նախագիծ, այնպես որ ես չունեի բավարար ժամանակ գտնելու ծառայություն, որը կվերցնի MQTT հաղորդագրությունները և դրանք կուղարկի ձեզ ծանուցումների կամ էլ.

Նաև նշեք, որ սենսորը մշտապես սնուցված պահելը կնվազեցնի երկրպագուի կյանքը:

Քայլ 1: Անհրաժեշտ մասեր

Պահանջվող մասեր
Պահանջվող մասեր

Այն, ինչ ձեզ հարկավոր կլինի

  • Արդուինո Ունո
  • Arduino Ethernet վահան
  • Մանր մասնիկների լազերային սենսոր (սովորաբար eBay/aliexpress- ում վճարվում է $ 10-$ 30)
  • DHT11 ջերմաստիճանի և խոնավության տվիչ (ըստ ցանկության)
  • Breadboard
  • Թռիչքային մալուխներ

Քայլ 2: Հավաքեք մասերը

Հավաքեք մասերը
Հավաքեք մասերը

Նախ, անհրաժեշտ է միացնել ethernet վահանը Arduino- ին

PM սենսորն ունի բազմաթիվ լարեր, բայց մեզ անհրաժեշտ են VCC, GND, TX, RX:

Միացրեք VCC- ն և GND- ը համապատասխանաբար + և - սեղանի վրա:

Arduino- ն ունի ապարատային RX և TX կապիչներ, բայց մենք կօգտագործենք համապատասխանաբար 2 և 3 կապում RX և TX կապերի ծրագրային նմանակում: Միացրեք սենսորի RX- ը Arduino- ի TX- ին և սենսորի TX- ը Arduino- ի RX- ին:

Եթե դուք պատրաստվում եք օգտագործել ջերմաստիճանի տվիչը, VCC և GND տողերը միացրեք + և - ին Breadboard- ի վրա և տվյալների տողը ՝ 7 -ի կապում:

Քայլ 3: Կոդ

Դուք կարող եք կամ տեղադրել MQTT բրոքեր ազնվամորու pi- ի կամ համակարգչի վրա, որը միշտ ունեք տանը, կամ օգտագործել ամպային MQTT ծառայություն, ինչպես Cloud MQTT- ը: Այնուհետև կարող եք գրել մի սցենար, որը տվյալները փոխանցում է որպես HTTP IFTT վեբհուք, քանի որ դրանք դեռ չեն աջակցում MQTT վեբ -բռնակներին և ծանուցումներ են ստեղծում, երբ ձեր տանը փոշու մակարդակը չափազանց բարձր է դառնում:

Արդուինո ավիաընկերություն

#ներառում

#ներառում
#ներառում
#ներառում
#ներառում
#ներառում

#ներառում

#ներառում
#սահմանել DHT11_PIN7
#սահմանելRX_PIN2
#սահմանելTX_PIN3
IPAddress ip (169, 169, 100, 98);
բայթ mac = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};
constchar *mqtt_server = "m23.cloudmqtt.com";
սահմանափակում mqtt_port = 11895;
constchar *mqtt_user = "jhetjewk";
constchar *mqtt_pass = "QB2p9PiMV6pn";
constchar *mqtt_client_name = "arduinoClient1"; // Հաճախորդի կապերը չեն կարող ունենալ նույն կապի անունը
EthernetClient ethClient;
PubSubClient հաճախորդ (ethClient);
Softwareրագրային ապահովում Սերիա pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
անստորագիր 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;
եթե (Ethernet.begin (mac) == 0)
{
Serial.println ("Չհաջողվեց կարգավորել Ethernet- ը DHCP- ի միջոցով");
// փորձ ՝ ֆիքսված ip հավելիչով
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 () {
ինտինդեքս = 0;
char արժեքը;
char previousValue;
եթե (! client.connected ())
{
if (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println («կապված»);
}
}
իսկ (pmSerial.available ()) {
արժեք = pmSerial.read ();
if ((index == 0 && value! = 0x42) || (index == 1 && value! = 0x4d)) {
Serial.println ("Հնարավոր չէ գտնել տվյալների վերնագիրը");
վերադարձ;
}
եթե (ինդեքս == 4 || ինդեքս == 6 || ինդեքս == 8 || ինդեքս == 10 || ինդեքս == 12 || ցուցանիշ == 14) {
previousValue = արժեք;
}
elseif (ինդեքս == 5) {
pm1 = 256 * նախորդԱրժեք + արժեք;
արմատ ["pm1"] = abs (pm1);
}
elseif (ինդեքս == 7) {
pm2_5 = 256 * նախորդԱրժեք + արժեք;
արմատ ["pm2_5"] = abs (pm2_5);
}
elseif (ինդեքս == 9) {
pm10 = 256 * նախորդԱրժեք + արժեք;
արմատ ["pm10"] = abs (pm10);
}
elseif (ինդեքս> 15) {
ընդմիջում;
}
ցուցանիշ ++;
}
իսկ (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
եթե (DHT.temperature == -999 || DHT.humidity == -999) {
արմատ ["ջերմաստիճան"] = "Չ/Ա";
արմատ ["խոնավություն"] = "Չ/Ա";
} ուրիշ {
արմատ ["ջերմաստիճան"] = DHT.temperature;
արմատ ["խոնավություն"] = 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- ն hosted -ի հետ հյուրընկալված GitHub- ի կողմից

Քայլ 4: Հավաքեք տուփը

Հավաքեք արկղը
Հավաքեք արկղը
Հավաքեք արկղը
Հավաքեք արկղը
Հավաքեք արկղը
Հավաքեք արկղը

Ես պարզապես օգտագործեցի մի տուփ, որի շուրջը պառկած էի և սենսորի համար անցք բացեցի, որպեսզի օդը դուրս գա, և մալուխների դուրս գալու համար անցք կտրեցի (չնայած այն մի փոքր չափազանց մեծ էր):

Օգտագործեցի սոսինձ բարձիկներ `սենսորը տուփին ամրացնելու համար, սենսորի մուտքի անցքը հավասարեցնելով տուփի վրա փորված անցքի հետ:

Ի վերջո, ես միացրեցի ethernet և հոսանքի մալուխները:

Խորհուրդ ենք տալիս: