Catatan: resistor pull-up dan kapasitor ada pada modul.
×
1
Layar OLED - I2C - SSD1306
×
1
LED Hijau Broadcom
×
1
LED Kuning Broadcom
×
1
LED Merah Broadcom
×
1
Kapasitor 100 nF
Opsional: kapasitor untuk DHT22.
×
1
Resistor Through Hole, 4.7 kohm
Opsional: resistor untuk DHT22.
×
1
Power Bank
Lihat deskripsi.
×
1
Resistor Through Hole, 390 ohm
Resistor untuk LED.
×
3
Baut Mesin, M3x16
Baut casing.
×
4
Baut Mesin, M3x6
Baut SDS018.
×
1
SOCKET LAMPU, LUMEX 3MM LED
Opsional: Peralatan pemasangan LED.
×
3
Jumper female untuk kabel
×
3
Tabung heat-shrink
×
1
Pin header (2 pin)
×
1
Jumper Umum (0.1")
×
1
Alat dan Mesin yang Diperlukan
Paku solder (umum)
Kawat Solder, Bebas Timbal
Printer 3D (umum)
Pistol Lem Panas (umum)
Bor / Obeng, Tanpa Kabel
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
Abstrak
Studi eksperimental akan menyatakan kemungkinan bahwa partikel particulat dapat bertindak sebagai “pengantar” untuk penyebaran infeksi viral COVID-19.
Ini berarti virus dapat dibawa jarak lebih jauh oleh partikel halus yang tergantung di udara dan dapat tetap viable selama jam, hari atau bahkan minggu dalam partikel kecil. Jadi, partikel polusi udara dapat membantu coronavirus berjalan lebih jauh di udara, meningkatkan jumlah orang yang terinfeksi.
Di Italia Utara lockdown tidak menghasilkan penurunan yang signifikan pada partikel particulat, karena partikel particulat juga didapatkan dalam jumlah besar oleh peternakan ternak intensif, selain pabrik dan mobil. Jadi, meskipun selama lockdown pabrik ditutup dan mobil tidak beredar, tingkat konsentrasi partikel particulat di Lombardia (Italia) tetap tinggi dalam setiap kasus, karena peternakan ternak intensif yang terletak di wilayahnya yang terus menghasilkan pupuk kandang, dan oleh karena itu polutan di udara, dan di antaranya, partikel particulat.
Ilmuwan dan peneliti menyarankan bahwa tingkat polusi partikel yang lebih tinggi dapat menjelaskan tingkat infeksi yang lebih tinggi di sebagian Italia Utara.
Pendahuluan
Beberapa minggu yang lalu saya menonton acara TV Italia bernama “Report”. Ini adalah acara investigatif yang disiarkan pada saluran tiga (RAI 3) oleh televisi Italia.
Sebuah karya menarik menarik perhatian saya… Ini tentang polusi dan khususnya tentang jenis polusi yang disebabkan oleh peternakan hewan intensif. (Klik di sini untuk melihat bagian yang sesuai: dari menit 27:25 sampai menit 56:00).
Peternakan ternak intensif mengacu pada sistem peternakan di mana jumlah besar hewan (seperti sapi, babi, peru atau ayam) dipelihara bersama dalam ruang yang relatif kecil. Tujuannya adalah untuk menghasilkan jumlah besar daging, telur, atau susu dengan biaya terendah mungkin. Mereka juga dikenal sebagai “pabrik pakan”.
Hewan yang dipelihara di peternakan yang ramai dan model pabrik menghasilkan jumlah besar limbah hewan, seperti urine dan pupuk kandang. Pupuk kandang umumnya disimpan dalam kolam terbuka luas, yang sering kali sebesar beberapa lapangan sepak bola, yang rentan terhadap kebocoran dan tumpahan, mencemari tanah dan mencemari bekalan air. Limbah hewan juga mengeluarkan gas berbahaya ke atmosfer (seperti amonia, endotoksin, sulfida hidrogen dan metana) dan melepaskan jumlah besar partikel particulat (PM10 dan PM2.5; PM10 adalah singkatan dari “partikel particulat dengan diameter ≤ 10 µm”, PM2.5 adalah singkatan dari “partikel particulat dengan diameter ≤ 2.5 µm”), yang menciptakan masalah lingkungan. Partikel particulat mengandung padatan mikroskopis atau titik cair yang sangat kecil sehingga dapat dihirup dan menyebabkan masalah kesehatan serius.
Ketika kolam limbah mencapai kapasitasnya, peternak menyemprot pupuk kandang yang tidak dirawat ke lapangan sekitar sebagai pupuk, dan itu membawa lebih banyak lagi dari zat berbahaya ini ke udara.
Limbah yang tidak dirawat mencemari udara dengan bau (bau yang tidak dapat ditahan) dan menciptakan masalah kesehatan, secara signifikan menurunkan kualitas hidup pekerja, orang di sekitar dan komunitas tetangga serta nilai properti. Studi telah menunjukkan bahwa orang yang tinggal dekat peternakan ternak intensif memiliki risiko yang jauh lebih besar untuk mengalami masalah pernapasan, seperti asma dan bronkitis kronis.
Di Italia sebagian besar peternakan ternak intensif terletak di Utara negara. Lombardia adalah salah satu wilayah dengan konsentrasi tertinggi peternakan ternak intensif; akibatnya jumlah kotoran dan limbah hewan yang dihasilkan di fasilitas ternak sangat tinggi dan menghasilkan jumlah besar gas dan partikel particulat.
Perlu diperhatikan bahwa, di Lombardia 85% amonia yang terpencil di atmosfer dihasilkan oleh pupuk kandang: sepertinya peternak mencemari dengan cara yang sama seperti mobil.
Sebuah studi yang dilakukan oleh peneliti dari beberapa universitas Italia dan diterbitkan bulan Maret lalu dengan judul “Evaluasi hubungan potensial antara polusi Partikel Partikulat (PM) dan penyebaran infeksi COVID-19 di Italia” (di tautan berikut dapat diunduh Position Paper: https://www.simaonlus.it/?page_id=694 , tautan langsung ke pdf bahasa Inggris https://www.simaonlus.it/wpsima/wp-content/uploads/2020/03/COVID_19_position-paper_ENG.pdf - Saya merekomendasikan membacanya!) membicara tentang kemungkinan korelasi antara tingkat konsentrasi partikel particulat dan jumlah orang yang terinfeksi oleh COVID-19 (seperti yang dapat Anda lihat dalam diagram berikut).
Peneliti telah mengumpulkan dan menganalisis data berikut:
Tingkat konsentrasi harian PM10 (data yang disediakan oleh Badan Perlindungan Lingkungan Daerah - ARPA - dan dikumpulkan di seluruh Italia);
Pelanggaran nilai batas harian PM10;
Jumlah orang yang terinfeksi COVID-19 untuk setiap provinsi yang dipilih, yang dikomunikasikan oleh Perlindungan Sipil dan diperbarui dengan frekuensi harian.
dan telah menemukan hubungan yang signifikan antara pelanggaran harian PM10 dan penyebaran infeksi COVID-19 selama periode studi (10-29 Februari 2020), dengan konsentrasi tinggi Kasus Coronavirus di Italia Utara, khususnya di Lembah Po dan terutama di Lombardia, sementara di Italia Selatan difusi dan letalitas virus jauh lebih rendah jika dibandingkan dengan yang diamati di wilayah Utara.
Dalam position paper ini dapat dibaca “Hipotesis hubungan langsung antara kasus COVID-19 dan tingkat PM10 diperkuat oleh bukti bahwa konsentrasi wabah COVID-19 yang dilaporkan di Lembah Po [di Italia Utara] lebih tinggi daripada di bagian lain Italia” (seperti yang dapat Anda lihat dalam gambar berikut, yang menunjukkan pelanggaran batas polusi PM10 yang tercatat di Italia dalam periode 10 Februari - 29 Februari dan di mana dapat dicatat bahwa Lembah Po adalah area paling tercemar di Italia).
Sangat menarik bahwa sebagian besar kasus Coronavirus di Italia terletak di Lombardia, di mana konsentrasi peternakan ternak intensif sangat tinggi dan produksi partikel particulat yang diakibatkannya sangat besar.
Perlu diperhatikan bahwa fenomena ini berlanjut bahkan selama lockdown, saat pabrik sepenuhnya ditutup dan mobil tidak beredar.
Menurut studi ini, di wilayah Selatan Italia (yang kurang tercemar) pola transmisi viral yang prevalen akan terjadi melalui kontak antara orang-orang (sesuai dengan model epidemi berdasarkan mode transmisi kontak orang-orang yang umum), sementara di wilayah Italia Utara (yang lebih tercemar), infeksi akan menyebar dengan cara yang berbeda, yaitu melalui agen pengantar (yang diwakili oleh partikel particulat yang tergantung di atmosfer).
Kurva ekspansi infeksi berikut menyoroti anomali Italia Utara dalam penyebaran infeksi COVID-19, dibandingkan dengan Italia Tengah dan Selatan.
Berdasarkan data yang dikumpulkan dan hubungan yang diamati, peneliti menyimpulkan bahwa wajar untuk mengasumsikan bahwa, selama periode 10-29 Februari 2020, tingkat konsentrasi PM10 yang tinggi yang tercatat di wilayah Italia Utara tertentu memiliki efek pengantar dan peningkatan bagi penyebaran virulenta wabah COVID-19, mempromosikan difusi COVID-19 di antara populasi yang terpapar, fenomena yang tidak diamati di wilayah Italia lainnya yang terpapar kontaminasi selama periode yang sama.
Studi lain telah menunjukkan bahwa PM akan bertindak sebagai pengantar untuk virus. Virus, kenyataannya, dapat menempel pada partikel particulat, yang partikel kecilnya dapat menjelajahi jarak jauh melalui arus udara dan tetap di atmosfer selama jam, hari atau bahkan minggu.
Partikel particulat juga akan mewakili substrat yang memungkinkan virus untuk tetap aktif di atmosfer untuk beberapa waktu (jam atau hari). Faktor lingkungan memainkan peran penting dalam aktivasi dan presistensi virus di atmosfer:
Suhu tinggi dan radiasi matahari mempercepat inaktivitas;
Kelembaban relatif tinggi dapat meningkatkan tingkat difusi.
Sebuah penelitian telah menunjukkan bahwa keberlangsungan virus pada permukaan menurun saat kelembaban relatif dipertahankan sekitar 50%, sementara virus tetap aktif saat nilai kelembaban relatif di bawah 40% dan di atas 60%.
Penelitian lain dari Yale University telah menunjukkan bagaimana kondisi kelembaban rendah memungkinkan partikel terinfeksi menyebar lebih baik dan bertahan lebih lama (klik di sini untuk melihat artikel).
Solusi Saya
Berdasarkan pertimbangan ini, saya telah memikirkan untuk menciptakan perangkat yang dapat direplikasi, biaya rendah dan mudah digunakan yang mampu mengukur tingkat konsentrasi PM10, suhu dan kelembaban relatif (faktor lingkungan yang terlibat dalam penyebaran infeksi viral), untuk memperingatkan orang ketika nilai-nilai ini terlalu tinggi dan berpotensi berbahaya bagi kesehatan mereka, sehingga mereka dapat memilih untuk tinggal di rumah dan tidak keluar atau, jika mereka di luar, untuk pulang ke rumah, atau mengenakan masker, meskipun jarak antara orang-orang jauh lebih besar dari satu meter.
Perangkat ini terdiri dari sensor PM10, sensor suhu dan kelembaban relatif, layar dan tiga LED, semua dikontrol oleh Arduino Nano. Data sensor ditampilkan di layar dan LED menunjukkan situasi udara.
Saya telah mengidentifikasi empat situasi berbeda:
1. Normal – Konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban antara 40% dan 60%;
2. Low - Konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban < 40% atau > 60%;
3. Low - Konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban antara 40% dan 60%;
4. Warning - Konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban < 40% atau > 60%;
5. Warning - Konsentrasi partikel particulat > 51 µg/m3 dan kelembaban antara 40% dan 60%;
6. Alarm - Konsentrasi partikel particulat > 51 µg/m3 dan kelembaban < 40% atau > 60%.
LED yang terkait:
Normal: LED OFF;
Low: LED Hijau NYALA;
Warning: LED Hijau dan Kuning NYALA;
Alarm: LED Hijau, Kuning dan Merah NYALA.
SDS018 - Sensor PM10
SDS018 dapat mendapatkan konsentrasi partikel antara 0.3 hingga 10μm di udara, dengan menggunakan prinsip pencaharan laser. Stabil dan dapat diandalkan dengan output digital dan kipas bawaan.
Akurat dan Dapat Diandalkan: deteksi laser, stabil, konsistensi yang baik;
Respon Cepat: waktu respons kurang dari 10 detik saat scene berubah;
Pin T (7) sensor SDS018 terhubung ke pin RX Arduino Nano;
Sensor DHT22
DHT22 adalah sensor suhu dan kelembaban relatif digital. Fitur utamanya adalah:
Daya 3 hingga 5V dan I/O;
Penggunaan arus maksimal 2,5mA selama konversi (saat meminta data);
Baca kelembaban 0-100% dengan akurasi 2-5%;
Baca suhu -40 hingga 80°C ±0.5°C akurasi;
Tingkat sampling 0,5 Hz (sekala 2 detik sekali).
Penutupan pin sensor DHT22:
VDD: Pasokan daya;
DATA: Output sinyal data;
NC: Tidak terhubung;
GND: Ground, hubungkan ke kutub negatif.
Koneksi sensor DHT22 ke Arduino Nano
Pin VDD sensor DHT22 terhubung ke pin 5V Arduino Nano;
Pin GND sensor DHT22 terhubung ke pin GND Arduino Nano;
Di antara pin VDD dan GND sensor DHT22 saya memasang kapasitor 100nF;
Di antara pin DATA dan VCC sensor DHT22 saya memasang resistor pull-up 4,7k;
Pin DATA sensor DHT22 terhubung ke pin D2 Arduino Nano.
Arduino IDE
Saya telah menginstal library sensor DHT oleh Adafruit - Versi 1.3.10
Layar OLED Dot Matrix
VCC: 3.3-5V;
Resolusi: 128x32 piksel;
Latar belakang hitam dengan karakter putih;
Driver: SSD1306;
Antarmuka: I2C.
Penutupan pin Layar OLED I2C:
SDA: Data serial I2C;
SCL: Jam serial I2C;
VCC: Pasokan daya;
GND: Ground, terhubung ke kutub negatif.
Koneksi Layar OLED I2C ke Arduino Nano
Pin VCC layar terhubung ke pin 5V Arduino Nano;
Pin GND layar terhubung ke pin GND Arduino Nano;
Pin SCL layar terhubung ke pin A5 Arduino Nano;
Pin SDA layar terhubung ke pin A4 Arduino Nano.
Arduino IDE
Saya telah menginstal library Adafruit SSD1306 oleh Adafruit - Versi 2.2.1
Koneksi LED
Saya menggunakan tiga LED 3mm: merah, hijau dan kuning.
Anoda LED merah terhubung ke pin D3 Arduino Nano;
Anoda LED hijau terhubung ke pin D4 Arduino Nano;
Anoda LED kuning terhubung ke pin D5 Arduino Nano;
Saya menyolder resistor 390 Ohm secara seri ke katoda setiap LED dan saya menghubungkan pin lain resistor ke GND Arduino Nano.
Modifikasi Hardware Arduino Nano
Untuk membaca output serial SDS018 saya telah memodifikasi Arduino Nano.
Saya menghapus resistor SMD yang ditunjukkan dalam gambar berikut dengan panah merah.
Saya menyolder resistor SMD secara vertikal lalu saya menyolder dua kabel ke resistor. Saya menyolder pin header di ujung kabel.
Saya memasukkan jumper pada pin header hanya saat saya memprogram Arduino Nano. Dengan cara ini, ketika jumper dicabut Arduino Nano dapat membaca data dari sensor SDS018 dan secara bersamaan dapat mengirim data ke serial monitor Arduino IDE.
Atau lebih sederhana, setelah memprogram papan Arduino Nano Anda dapat mencabut resistor secara permanen, tetapi dengan cara ini tidak akan mungkin lagi untuk memrogram ulang papan Arduino Nano.
Pasokan Daya
Arduino Nano dapat diberi daya dengan dua cara berbeda:
USB;
Pin Vin (dan pin GND): 7-12V.
Saya memberi daya pada papan melalui USB melalui power bank.
Casing dan Pemasangan
Saya merancang dan mencetak 3D casing PLA oranye untuk memperbaiki sensor, layar, LED dan Arduino Nano. Casing terdiri dari dua bagian: bagian bawah, tempat Arduino Nano dan SDS018 dipasang; dan bagian atas tempat DHT22, layar dan LED dipasang. Di bagian bawah terdapat pembuka untuk kabel Mini-B USB. Di bagian atas terdapat tiga lubang dari mana tiga LED keluar. Jika Anda ingin, Anda dapat menggunakan peralatan pemasangan LED untuk memperbaiki LED (hanya memperbesar lubang hingga 5mm).
Berikut ini dilampirkan dua berkas yang Anda butuhkan untuk mencetak 3D dua bagian casing.
Saya menggunakan lem panas untuk memperbaiki Arduino Nano, layar dan DHT22 di dalam casing.
Gambar 1 - Saya menyolder LED dengan resistor mereka dan saya memasangnya di bagian atas casing;
Gambar 2 - Saya memasukkan tabung heat-shrink pada setiap resistor dan pada setiap kabel;
Gambar 3/4 - Saya memperbaiki modul sensor DHT22 dengan lem panas;
Gambar 5 - Saya memperbaiki modul layar dengan lem panas;
Gambar 6 - Saya menyolder semua kabel ke papan Arduino Nano;
Gambar 7 - Saya memperbaiki papan Arduino Nano dengan lem panas;
Gambar 8 - Saya menyolder semua kabel positif (merah) bersama dan saya memasukkan tabung heat-shrink; Saya menyolder semua kabel negatif (hitam) bersama dan saya memasukkan tabung heat-shrink;
Gambar 9 - Saya memperbaiki kabel merah dan hitam dengan lem panas berkilau (Saya sudah kehabisan yang transparan :))
Gambar 10 - Saya menyolder tiga jumper female pada setiap kabel untuk menghubungkan modul sensor SDS018;
Gambar 11 - Saya memasukkan tabung heat-shrink pada setiap jumper female dan saya memasukkannya ke dalam modul sensor SDS018;
Gambar 12 - Saya memasang modul sensor SDS018 di bagian bawah casing dengan baut mesin M3x6;
Gambar 13 - Saya menutup casing dengan empat baut mesin M3x16.
Firmware
Firmware adalah sketsa Arduino. Dalam gambar berikut Anda dapat melihat diagram alur yang disederhanakan.
Pada saat startup, setup periferal dijalankan dan LED diperiksa.
Loop utama:
Hanya pada loop pertama (startup) ada penundaan 2 detik;
Sensor DHT22 dibaca;
Suhu dan kelembaban relatif dikirim ke serial monitor Arduino IDE (lihat gambar di bawah);
Sensor SDS018 dibaca;
PM2.5 dan PM10 dikirim ke serial monitor Arduino IDE (lihat gambar di bawah);
Jika konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban antara 40% dan 60% - keadaan alarm Normal -, maka semua LED mati;
Jika konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban < 40% atau > 60% atau konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban antara 40% dan 60% (untuk menyederhanakan kode saya memisahkan kondisi) - keadaan alarm Low -, maka hanya LED hijau yang nyala;
Jika konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban < 40% atau > 60% atau konsentrasi partikel particulat > 51 µg/m3 dan kelembaban antara 40% dan 60% (untuk menyederhanakan kode saya memisahkan kondisi) - keadaan alarm Warning -, maka LED hijau dan kuning nyala;
Jika konsentrasi partikel particulat > 51 µg/m3 dan kelembaban < 40% atau > 60% - keadaan Alarm -, maka semua LED nyala;
Jika variabel flag switchDisplay sama dengan nol, maka PM10 dan kelembaban divisualisasikan di layar, jika tidak PM2.5 dan suhu dalam derajat Celsius divisualisasikan; jika ada keadaan alarm, alih-alih menampilkan PM10, kata "Alarm!!!" divisualisasikan.
Pada akhir loop saya memasukkan penundaan 2 detik.
Selesai!
Jika Anda memiliki pertanyaan atau saran jangan ragu untuk meninggalkan komentar di bawah. Terima kasih!
Kode
Tingkat COVID-19 dan PM10! - Kode
Tingkat COVID-19 dan PM10! - KodeArduino
Firmware adalah sketsa Arduino.
#include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // Lebar layar OLED, dalam piksel #define SCREEN_HEIGHT 32 // Tinggi layar OLED, dalam piksel // Deklarasi untuk layar SSD1306 yang terhubung ke I2C (pin SDA, SCL) #define OLED_RESET 4 // Pin # Reset (atau -1 jika berbagi pin reset Arduino) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #include "DHT.h" #define DHTPIN 2 // Pin digital yang terhubung ke sensor DHT #define DHTTYPE DHT22 // DHT22 (AM2302) DHT dht(DHTPIN, DHTTYPE); int startdhr22 = 0; // Variabel flag startup: menunggu pengukuran pertama DHT22 int switchDisplay = 0; // Variabel flag untuk mengalihkan data di layar const int ledRed = 3; // Nomor pin LED Merah const int ledGreen = 4; // Nomor pin LED Hijau const int ledYellow = 5; // Nomor pin LED Kuning void setup() { pinMode(LED_BUILTIN, OUTPUT); // LED papan - inisialisasi pin digital LED_BUILTIN sebagai output pinMode(ledRed, OUTPUT); // Inisialisasi pin digital sebagai output pinMode(ledGreen, OUTPUT); // Inisialisasi pin digital sebagai output pinMode(ledYellow, OUTPUT); // Inisialisasi pin digital sebagai output dht.begin(); Serial.begin(9600); Serial.println("start"); // SSD1306_SWITCHCAPVCC = generate daya layar dari 3.3V secara internal if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Alamat 0x3C untuk 128x32 Serial.println(F("SSD1306 allocation failed")); for(;;); // Jangan lanjutkan, loop selamanya } display.clearDisplay(); // Bersihkan buffer display.setTextSize(2); // Gambar teks skala 2X display.setTextColor(SSD1306_WHITE); // Startup: Tes LED digitalWrite(ledGreen, HIGH); // Nyalakan LED delay(500); // Tunggu 0,5 detik digitalWrite(ledYellow, HIGH); // Nyalakan LED delay(500); // Tunggu 0,5 detik digitalWrite(ledRed, HIGH); // Nyalakan LED delay(500); // Tunggu 0,5 detik digitalWrite(ledGreen, LOW); // Matikan LED digitalWrite(ledYellow, LOW); // Matikan LED digitalWrite(ledRed, LOW); // Matikan LED delay(500); // Tunggu 0,5 detik } void loop() { // ########################################################################### // DHT22 // Tingkat sampling 0,5 Hz (sekala 2 detik sekali). // ########################################################################### if(0 == startdhr22) { delay(2000); // Startup: menunggu pengukuran pertama DHT22 startdhr22 = 1; } float h = dht.readHumidity(); float t = dht.readTemperature(); // Baca suhu dalam Celsius (default) // Periksa apakah ada pembacaan yang gagal dan keluar lebih awal (untuk mencoba lagi). if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read from DHT sensor!")); return; } Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.println(F("°C ")); // ########################################################################### // SDS018 // ########################################################################### uint8_t dataIN[10] = {0}; // Array data dari SDS018 float pm25; float pm10; while(Serial.available() > 0) { for(int i=0; i<10; ++i) { // loop untuk mengambil 10 byte dataIN[i] = Serial.read(); // Simpan data ke dalam array dataIN // Serial.println(dataIN[i], HEX); // Test: Cetak data ke port serial (cetak sebagai heksadesimal yang dienkode ASCII) } if((0xAA == dataIN[0]) && (0xC0 == dataIN[1]) && (0xAB == dataIN[9])) { // periksa apakah array berisi dataIN[0]=0xAA dan dataIN[1]=0xC0 dan dataIN[1]=0xAB uint8_t cksum = 0; for(int i=2; i<=7; ++i) { cksum += dataIN[i]; // Perhitungan checksum } //Serial.print("check-sum: "); // Test: Serial monitor //Serial.println(cksum, HEX); if(cksum == dataIN[8]) { digitalWrite(LED_BUILTIN, HIGH); // Nyalakan LED (HIGH adalah tingkat tegangan) uint8_t pm25Lo = dataIN[2]; // Byte rendah PM2.5 uint8_t pm25Hi = dataIN[3]; // Byte tinggi PM2.5 uint8_t pm10Lo = dataIN[4]; // Byte rendah PM10 uint8_t pm10Hi = dataIN[5]; // Byte tinggi PM10 pm25 = ((pm25Hi * 256.0) + pm25Lo)/10.0; // Perhitungan nilai PM2.5 pm10 = ((pm10Hi * 256.0) + pm10Lo)/10.0; // Perhitungan nilai PM10 Serial.print("PM2.5: "); // Serial monitor Serial.print(pm25); Serial.println(" ug/m3"); Serial.print("PM10: "); Serial.print(pm10); Serial.println(" ug/m3"); } Serial.println("-----------------"); } Serial.flush(); } // ########################################################################### // LED // ########################################################################### if((pm10 <= 25) && ((h >= 40) && (h <= 60))) // Normal – Konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban antara 40% dan 60%; { digitalWrite(ledGreen, LOW); // Matikan LED digitalWrite(ledYellow, LOW); // Matikan LED digitalWrite(ledRed, LOW); // Matikan LED } else if((pm10 <= 25) && ((h < 40) || (h > 60))) // Low - Konsentrasi partikel particulat dari 0 hingga 25 µg/m3 dan kelembaban < 40% atau > 60%; { digitalWrite(ledGreen, HIGH); // Nyalakan LED digitalWrite(ledYellow, LOW); // Matikan LED digitalWrite(ledRed, LOW); // Matikan LED } else if(((pm10 > 25) && (pm10 <= 50)) && ((h >= 40) && (h <= 60))) // Low - Konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban antara 40% dan 60%; { digitalWrite(ledGreen, HIGH); // Nyalakan LED digitalWrite(ledYellow, LOW); // Matikan LED digitalWrite(ledRed, LOW); // Matikan LED } else if(((pm10 > 25) && (pm10 <= 50)) && ((h < 40) || (h > 60))) // Warning - Konsentrasi partikel particulat dari 26 hingga 50 µg/m3 dan kelembaban < 40% atau > 60%; { digitalWrite(ledGreen, HIGH); // Nyalakan LED digitalWrite(ledYellow, HIGH); // Nyalakan LED digitalWrite(ledRed, LOW); // Matikan LED } else if((pm10 > 50) && ((h >= 40) && (h <= 60))) // Warning - Konsentrasi partikel particulat > 51 µg/m3 dan kelembaban antara 40% dan 60%; { digitalWrite(ledGreen, HIGH); // Nyalakan LED digitalWrite(ledYellow, HIGH); // Nyalakan LED digitalWrite(ledRed, LOW); // Matikan LED } else // Alarm - Konsentrasi partikel particulat > 51 µg/m3 dan kelembaban < 40% atau > 60%. { digitalWrite(ledGreen, HIGH); // Nyalakan LED digitalWrite(ledYellow, HIGH); // Nyalakan LED digitalWrite(ledRed, HIGH); // Nyalakan LED } // ########################################################################### // Layar // ########################################################################### if(0 == switchDisplay) { display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); // Atur posisi kursor (Lebar, Tinggi) if(pm10 > 50) // Visualisasikan kata "Alarm" di layar { display.print("Alarm!!!"); } else // Visualisasikan nilai PM10 di layar { display.print("PM10:"); display.println(pm10); } display.print(" HR%:"); // Visualisasikan nilai kelembaban di layar display.println(h); display.display(); switchDisplay = 1; } else { display.clearDisplay(); display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Gambar teks 'terbalik' display.setCursor(0,0); // Atur posisi kursor (Lebar, Tinggi) display.print("PM25:"); // Visualisasikan nilai PM2.5 di layar display.println(pm25); display.print("T[C]:"); // Visualisasikan nilai suhu di layar display.println(t); display.display(); switchDisplay = 0; } delay(500); // Penundaan 500ms digitalWrite(LED_BUILTIN, LOW); // TEST: matikan LED_BUILTIN delay(1500); // Penundaan 1500ms }