สารบัญ:
วีดีโอ: Arduino Powered Dust Particles Monitoring Station: 4 ขั้นตอน (พร้อมรูปภาพ)
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
คุณสามารถสร้างอุปกรณ์อินเทอร์เน็ต 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: ประกอบกล่อง
ฉันเพิ่งใช้กล่องที่ฉันนอนอยู่รอบๆ และเจาะรูเพื่อให้เซ็นเซอร์รับอากาศและตัดรูเพื่อให้สายเคเบิลออกไป (แม้ว่ามันจะใหญ่ไปหน่อย)
ฉันใช้แผ่นกาวติดเซ็นเซอร์เข้ากับกล่อง โดยจัดตำแหน่งรูอินพุตของเซ็นเซอร์ให้ตรงกับรูที่เจาะบนกล่อง
ในที่สุดฉันก็เสียบสายอีเธอร์เน็ตและสายไฟ