สารบัญ:

Arduino Powered Dust Particles Monitoring Station: 4 ขั้นตอน (พร้อมรูปภาพ)
Arduino Powered Dust Particles Monitoring Station: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Powered Dust Particles Monitoring Station: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Powered Dust Particles Monitoring Station: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Arduino - dust density monitor 2024, กรกฎาคม
Anonim
Arduino Powered Dust Particles Monitoring Station
Arduino Powered Dust Particles Monitoring Station

คุณสามารถสร้างอุปกรณ์อินเทอร์เน็ต DIY ของสิ่งต่าง ๆ ได้อย่างง่ายดายซึ่งตรวจสอบมลพิษทางฝุ่นในบ้านของคุณในราคาน้อยกว่า $ 50 และรับการแจ้งเตือนเมื่อระดับฝุ่นสูงเกินไปเพื่อให้คุณสามารถระบายอากาศในห้องหรือคุณสามารถตั้งค่าภายนอกและรับการแจ้งเตือนหากถูก ปลอดภัยที่จะออกไปข้างนอกหากคุณอาศัยอยู่ในพื้นที่ที่มีมลพิษสูง

ฉันทำสิ่งนี้เป็นโครงการของโรงเรียน ดังนั้นฉันจึงไม่มีเวลามากพอที่จะค้นหาบริการที่จะรับข้อความ MQTT และส่งข้อความถึงคุณ เช่น การแจ้งเตือนหรืออีเมล

โปรดทราบด้วยว่าการรักษาให้เซ็นเซอร์ได้รับพลังงานอยู่ตลอดเวลาจะลดอายุการใช้งานของพัดลม

ขั้นตอนที่ 1: อะไหล่ที่จำเป็น

อะไหล่ที่จำเป็น
อะไหล่ที่จำเป็น

สิ่งที่คุณต้องการ

  • Arduino Uno
  • Arduino อีเธอร์เน็ตชิลด์
  • เซ็นเซอร์เลเซอร์เรื่องอนุภาค (ปกติราคา $10 - $30 บน eBay/aliexpress)
  • เซ็นเซอร์อุณหภูมิและความชื้น DHT11 (อุปกรณ์เสริม)
  • เขียงหั่นขนม
  • สายจัมเปอร์

ขั้นตอนที่ 2: ประกอบชิ้นส่วน

ประกอบชิ้นส่วน
ประกอบชิ้นส่วน

ก่อนอื่น คุณต้องเสียบอีเทอร์เน็ตชิลด์บน Arduino

เซ็นเซอร์ PM มีสายไฟหลายเส้น แต่สายไฟที่เราต้องการคือ VCC, GND, TX, RX

เชื่อมต่อ VCC และ GND กับ + และ - บนเขียงหั่นขนมตามลำดับ

Arduino มีพิน RX และ TX ของฮาร์ดแวร์ แต่เราจะใช้การจำลองซอฟต์แวร์ของพิน RX และ TX บนพิน 2 และ 3 ตามลำดับ เสียบ RX ของเซ็นเซอร์เข้ากับ TX ของ Arduino และ TX ของเซ็นเซอร์เข้ากับ RX ของ Arduino

หากคุณกำลังจะใช้เซ็นเซอร์อุณหภูมิ ให้เสียบสาย VCC และ GND กับ + และ - บน Breadboard และต่อสายข้อมูลไปที่พิน 7

ขั้นตอนที่ 3: รหัส

คุณสามารถติดตั้งโบรกเกอร์ MQTT บน raspberry pi หรือคอมพิวเตอร์ที่คุณเปิดอยู่เสมอ หรือใช้บริการ Cloud MQTT เช่น Cloud MQTT จากนั้น คุณสามารถเขียนสคริปต์ที่ส่งข้อมูลเป็น HTTP ไปยังเว็บฮุค IFTT ได้ เนื่องจากพวกมันยังไม่รองรับเว็บฮุค MQTT และตั้งค่าการแจ้งเตือนเมื่อระดับฝุ่นในบ้านของคุณสูงเกินไป

สถานีอากาศ Arduino

#รวม
#รวม
#รวม
#รวม
#รวม
#รวม

#รวม

#รวม
#defineDHT11_PIN7
#defineRX_PIN2
#defineTX_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);
ซอฟต์แวร์Serial pmSerial (RX_PIN, TX_PIN);
ดีเอชที ดีเอชที;
int pm1;
ภายใน pm2_5;
ภายใน pm10;
unsignedlong id;
// ไฟล์ myFile;
สตริง s;
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
voidsetup() {
Serial.begin(57600);
pmSerial.begin(9600);
รหัส = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
ถ้า (Ethernet.begin(mac) == 0)
{
Serial.println("ไม่สามารถกำหนดค่าอีเทอร์เน็ตโดยใช้ 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");
}
โมฆะลูป () {
ดัชนี = 0;
ค่าถ่าน;
ถ่านค่าก่อนหน้า;
ถ้า (!client.connected())
{
ถ้า (client.connect("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println("เชื่อมต่อ");
}
}
ในขณะที่ (pmSerial.available ()) {
ค่า = pmSerial.read();
if ((ดัชนี == 0 && ค่า != 0x42) || (ดัชนี == 1 && ค่า != 0x4d)) {
Serial.println("ไม่พบส่วนหัวของข้อมูล");
กลับ;
}
ถ้า (ดัชนี == 4 || ดัชนี == 6 || ดัชนี == 8 || ดัชนี == 10 || ดัชนี == 12 || ดัชนี == 14) {
PreviousValue = ค่า;
}
elseif (ดัชนี == 5) {
pm1 = 256 * ค่าก่อนหน้า + ค่า;
รูท["pm1"] = เอบีเอส (pm1);
}
elseif (ดัชนี == 7) {
pm2_5 = 256 * ค่าก่อนหน้า + ค่า;
รูท["pm2_5"] = เอบีเอส (pm2_5);
}
elseif (ดัชนี == 9) {
pm10 = 256 * ค่าก่อนหน้า + ค่า;
รูท["pm10"] = เอบีเอส (pm10);
}
elseif (ดัชนี >15) {
หยุดพัก;
}
ดัชนี++;
}
ในขณะที่ (pmSerial.available()) pmSerial.read();
int chk = DHT.read11(DHT11_PIN);
ถ้า (DHT.temperature == -999 || DHT.humidity == -999) {
ราก["อุณหภูมิ"] = "ไม่มี";
ราก["ความชื้น"] = "ไม่มี";
} อื่น {
ราก["อุณหภูมิ"] = DHT.อุณหภูมิ;
ราก["ความชื้น"] = DHT.ความชื้น;
}
sendResults();
ไอดี++;
ล่าช้า (5000);
}
voidsendResults() {
// เผยแพร่ไปยัง MQTT
ถ่าน jsonChar[100];
root.printTo(jsonChar);
Serial.println(client.publish("arduino", jsonChar));
// ดีบักเป็นอนุกรม
root.printTo(ซีเรียล);
Serial.print('\n');
}
// จัดการข้อความที่มาถึงในหัวข้อที่สมัครรับข้อมูล
voidcallback (หัวข้อถ่าน*, เพย์โหลดไบต์*, ความยาวที่ไม่ได้ลงชื่อ) {
}

ดู rawair_quality.ino โฮสต์ด้วย ❤ โดย GitHub

ขั้นตอนที่ 4: ประกอบกล่อง

ประกอบกล่อง
ประกอบกล่อง
ประกอบกล่อง
ประกอบกล่อง
ประกอบกล่อง
ประกอบกล่อง

ฉันเพิ่งใช้กล่องที่ฉันนอนอยู่รอบๆ และเจาะรูเพื่อให้เซ็นเซอร์รับอากาศและตัดรูเพื่อให้สายเคเบิลออกไป (แม้ว่ามันจะใหญ่ไปหน่อย)

ฉันใช้แผ่นกาวติดเซ็นเซอร์เข้ากับกล่อง โดยจัดตำแหน่งรูอินพุตของเซ็นเซอร์ให้ตรงกับรูที่เจาะบนกล่อง

ในที่สุดฉันก็เสียบสายอีเธอร์เน็ตและสายไฟ

แนะนำ: