Isi kandungan:

Stesen Pemantauan Partikel Debu Bertenaga Arduino: 4 Langkah (dengan Gambar)
Stesen Pemantauan Partikel Debu Bertenaga Arduino: 4 Langkah (dengan Gambar)

Video: Stesen Pemantauan Partikel Debu Bertenaga Arduino: 4 Langkah (dengan Gambar)

Video: Stesen Pemantauan Partikel Debu Bertenaga Arduino: 4 Langkah (dengan Gambar)
Video: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, Julai
Anonim
Stesen Pemantauan Zarah Bertenaga Arduino
Stesen Pemantauan Zarah Bertenaga Arduino

Anda boleh membina peranti DIY barang-barang DIY dengan mudah untuk memantau pencemaran debu di rumah anda dengan harga kurang dari $ 50 dan mendapat pemberitahuan apabila tahap debu terlalu tinggi sehingga anda dapat mengudarakan bilik, atau anda dapat menyetelnya ke luar dan diberitahu jika ia berada selamat pergi ke luar jika anda tinggal di kawasan yang sangat tercemar.

Saya menjadikannya sebagai projek sekolah, jadi saya tidak mempunyai cukup waktu untuk mencari perkhidmatan yang akan mengambil mesej MQTT dan menghantarnya kepada anda seperti pemberitahuan atau e-mel.

Perhatikan juga bahawa memastikan sensor sentiasa dihidupkan akan mengurangkan jangka hayat kipas.

Langkah 1: Bahagian Diperlukan

Bahagian Diperlukan
Bahagian Diperlukan

Apa yang anda perlukan

  • Arduino Uno
  • Perisai Ethernet Arduino
  • Sensor laser zarah partikulat (biasanya berharga $ 10- $ 30 di eBay / aliexpress)
  • Sensor suhu dan kelembapan DHT11 (pilihan)
  • Papan roti
  • Kabel pelompat

Langkah 2: Pasang Bahagian

Pasang Bahagian
Pasang Bahagian

Pertama, anda perlu memasang pelindung ethernet di Arduino

Sensor PM mempunyai banyak wayar, tetapi yang kami perlukan ialah VCC, GND, TX, RX.

Sambungkan VCC dan GND ke + dan - di papan roti masing-masing.

Arduino mempunyai pin RX dan TX perkakasan, tetapi kami akan menggunakan emulasi perisian pin RX dan TX masing-masing pada pin 2 dan 3. Pasang RX sensor ke TX Arduino dan TX sensor ke RX Arduino.

Sekiranya anda akan menggunakan sensor suhu, pasangkan garis VCC dan GND ke + dan - pada Breadboard dan garis data ke pin 7.

Langkah 3: Kodnya

Anda boleh memasang broker MQTT pada raspberry pi atau komputer yang selalu anda gunakan di rumah, atau menggunakan perkhidmatan MQTT awan, seperti Cloud MQTT. Kemudian anda boleh menulis skrip yang mengirim data sebagai HTTP ke webhook IFTT, kerana mereka belum lagi menyokong webhook MQTT dan mengatur pemberitahuan ketika tahap debu di rumah anda terlalu tinggi.

Stesen udara Arduino

#sertakan

#sertakan
#sertakan
#sertakan
#sertakan
#sertakan

#sertakan

#sertakan
# tentukanDHT11_PIN7
# tentukanRX_PIN2
# tentukanTX_PIN3
IP Alamat IP (169, 169, 100, 98);
bait 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"; // Sambungan pelanggan tidak boleh mempunyai nama sambungan yang sama
EthernetClient etClient;
Pelanggan PubSubClient (ethClient);
PerisianSerial pmSerial (RX_PIN, TX_PIN);
dht DHT;
int pm1;
int pm2_5;
int pm10;
id yang tidak ditandatangani;
// Fail myFile;
Rentetan s;
StaticJsonBuffer <200> jsonBuffer;
JsonObject & root = jsonBuffer.createObject ();
kekosongan () {
Serial.begin (57600);
pmSerial.begin (9600);
id = 0;
pm1 = 0;
pm2_5 = 0;
pm10 = 0;
jika (Ethernet.begin (mac) == 0)
{
Serial.println ("Gagal mengkonfigurasi Ethernet menggunakan DHCP");
// cubaan dengan addr ip tetap
Ethernet.begin (mac, ip);
}
client.setServer (mqtt_server, mqtt_port);
client.setCallback (panggilan balik);
kelewatan (2000);
Serial.println (Ethernet.localIP ());
client.connect ("arduinoClient", mqtt_user, mqtt_pass);
Serial.print ("rc =");
Serial.print (pelanggan.state ());
Cetakan bersiri ("\ n");
}
kekosongan () {
intindex = 0;
nilai char;
char sebelumnyaValue;
jika (! client.connected ())
{
jika (client.connect ("arduinoClient", mqtt_user, mqtt_pass)) {
Serial.println ("bersambung");
}
}
sementara (pmSerial.available ()) {
nilai = pmSerial.read ();
jika ((indeks == 0 && nilai! = 0x42) || (indeks == 1 && nilai! = 0x4d)) {
Serial.println ("Tidak dapat mencari tajuk data.");
kembali;
}
jika (index == 4 || index == 6 || index == 8 || index == 10 || index == 12 || index == 14) {
sebelumnyaValue = nilai;
}
elseif (indeks == 5) {
pm1 = 256 * sebelumnyaValue + nilai;
root ["pm1"] = abs (pm1);
}
elseif (indeks == 7) {
pm2_5 = 256 * sebelumnyaValue + nilai;
root ["pm2_5"] = abs (pm2_5);
}
elseif (indeks == 9) {
pm10 = 256 * sebelumnyaValue + nilai;
root ["pm10"] = abs (pm10);
}
elseif (indeks> 15) {
rehat;
}
indeks ++;
}
sementara (pmSerial.available ()) pmSerial.read ();
int chk = DHT.read11 (DHT11_PIN);
jika (DHT.temperature == -999 || DHT.humidity == -999) {
root ["suhu"] = "N / A";
root ["kelembapan"] = "N / A";
} lain {
root ["suhu"] = Suhu DHT;
root ["kelembapan"] = DHT.kelembapan;
}
sendResults ();
id ++;
kelewatan (5000);
}
voidsendResults () {
// terbitkan ke MQTT
char jsonChar [100];
root.printTo (jsonChar);
Serial.println (client.publish ("arduino", jsonChar));
// debug ke siri
root.printTo (Bersiri);
Cetakan bersiri ('\ n');
}
// Mengendalikan mesej yang tiba pada topik yang dilanggan
voidcallback (char * topic, byte * payload, unsignedint length) {
}

lihat rawair_quality.ino dihoskan dengan ❤ oleh GitHub

Langkah 4: Pasang Kotak

Pasang Kotak
Pasang Kotak
Pasang Kotak
Pasang Kotak
Pasang Kotak
Pasang Kotak

Saya baru sahaja menggunakan kotak yang saya terbaring dan menggerudi lubang untuk mendapatkan sensor dari udara dan memotong lubang untuk kabel keluar (walaupun agak besar).

Saya menggunakan pelekat untuk memasang sensor ke kotak, menjajarkan lubang input sensor dengan lubang yang dibor pada kotak.

Akhirnya, saya memasang kabel ethernet dan kuasa.

Disyorkan: