Sistem Pemantauan Kebakaran Hutan Real-Time dengan Peringatan SMS
Komponen dan Perlengkapan
Modul Itead Gboard Pro 800 SIM800 GSM / GPRS 3.3v ATmega2560 Mainboard Untuk Arduino Starter
×
1
Arduino UNO
×
1
Sensor Suhu & Kelembaban DHT11 (3 pin)
×
2
Kabel jumper (umum)
×
1
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
Proses deteksi kebakaran hutan dimulai pada salah satu node yang ditanam di pohon di dalam hutan. Hutan memiliki jaringan node yang ditempatkan pada jarak yang sesuai satu sama lain, node memiliki kemampuan untuk berkomunikasi melalui perangkat (modul RF dalam kasus kami) dan dengan menggunakan Arduino. Jika ada perubahan di atas nilai ambang ditemukan dalam parameter atmosfer (kenaikan suhu, kontaminasi udara dengan asap, dll.) dekat sebuah node (node sumber), informasi disampaikan ke node perantara terdekat sampai mencapai terminal utama/kepala. Terminal utama/kepala menggunakan modem GSM untuk menyampaikan informasi ke ponsel (pusat pemantauan kebakaran hutan).
BAGIAN TRANSMITTER MODEL FISIK
Modul deteksi kebakaran hutan bekerja dalam tiga tahap berbeda. Tahap pertama terdiri dari membaca beberapa parameter lingkungan eksternal seperti suhu dan asap. Tahap pertama dilakukan dengan bantuan beberapa sensor yang digunakan untuk merasakan dan mengubah data analog menjadi data digital. Sensor membaca parameter seperti suhu, kelembaban, dan kualitas udara lalu mengirim informasi ini ke node terdekat berikutnya. Proses ini berlanjut sampai informasi mencapai node akhir atau terminal utama yang merupakan tahap kedua dari proses keseluruhan. Tahap ketiga terdiri dari transmisi informasi ke unit pemantauan kebakaran hutan.
Setiap node memiliki sensor suhu dan kelembaban, sensor asap, dan unit mikrokontroler. Arduino telah digunakan sebagai perangkat mikrokontroler. Sensor berinteraksi dengan Arduino dan menyimpan informasi untuk proses perbandingan. Ada nilai ambang yang telah ditentukan untuk setiap parameter ini. Mikroprosesor membandingkan nilai sensor pada interval waktu yang teratur dengan nilai ambang. Berdasarkan perbandingan jika nilai input sensor melebihi ambang node mentransmisikan informasi ke node terdekat yang lain yang lagi kali mentransmisikan informasi ke node terdekat lainnya. Dengan cara ini aliran pesan diatur dalam model ini.
MODEL FISIK APARATUR
BAGIAN TRANSMITTER MODEL FISIK
PEMBACAAN SERIAL DI SERIAL MONITOR
PESAN YANG DITERIMA OLEH MODUL GSM
Kode
Kode Modul Arduino Sisi Penerima dan Pengirim
Kode Modul Arduino Sisi Penerima dan PengirimPython
Kode ini mengonfigurasi sisi penerima Modul Arduino untuk Pemantauan Suhu dan Kelembaban. Jika nilai melebihi ambang, SMS dikirim ke stasiun dasar untuk memperingatkan mereka tentang hal yang sama. Jika ada kenaikan nilai pada sisi node pengirim, ini dikomunikasikan melalui modul RF-Transmitter pada sisi Arduino Uno pengirim ke modul RF-Receiver pada sisi Arduino Uno penerima. Perhatikan bahwa kode di bawah ini terdiri dari dua bagian satu untuk "arduino sisi penerima" dan yang lain untuk "arduino sisi pengirim"
########( PART-1 )###### Receiver Side Arduino CODE ########################## // Include RadioHead Amplitude Shift Keying Library #include <SoftwareSerial.h> #include <RH_ASK.h> // Include dependant SPI Library #include <SPI.h> #include <DHT.h> SoftwareSerial mySerial(4, 3); //Constants #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT11 // DHT11 int smokeA0 = A5; // Your threshold value int sensorThres = 400; // Define Variables DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino //Variables float hum; //Stores humidity value float temp; //Stores temperature value // Define output strings String str_humid; String str_temp; String str_smk; String str_out; // Create Amplitude Shift Keying Object RH_ASK rf_driver; void setup() { pinMode(smokeA0, INPUT); dht.begin(); // Initialize ASK Object rf_driver.init(); // Setup Serial Monitor Serial.begin(9600); mySerial.begin(115200); } void loop() { delay(2000); hum = dht.readHumidity(); temp= dht.readTemperature(); Serial.print("Reciever Humidity = "); Serial.print(hum); Serial.print('\n'); Serial.print("Reciever Temperature = "); Serial.println(temp); int analogSensor = analogRead(smokeA0); String smk; // Checks if it has reached the threshold value if (analogSensor > sensorThres) { Serial.print("Smoke at Reciever"); Serial.print('\n'); smk = "Smoke"; } else { Serial.print("Clean at Reciever"); Serial.print('\n'); smk = "Clean"; } // Set buffer to size of expected message uint8_t buf[20]; uint8_t buflen = sizeof(buf); // Check if received packet is correct size if (rf_driver.recv(buf, &buflen)) { str_out = String((char*)buf); for (int i = 0; i < str_out.length(); i++) { if (str_out.substring(i, i+1) == ",") { str_humid = str_out.substring(0, i); str_temp = str_out.substring(i+1, i+6); str_smk = str_out.substring(i+7,i+12 ); break; } } } // Print values to Serial Monitor Serial.print("Humidity: "); Serial.print(str_humid); Serial.print(" - Temperature: "); Serial.println(str_temp); Serial.print(" - Air Quality: "); Serial.println(str_smk); if( hum >= 60 && temp >= 25 ) { Serial.print("Fire Detected at Reciever "); mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode delay(1000); // Delay of 1000 milli seconds or 1 second mySerial.println("AT+CMGS=\"+918744984131\"\r"); // Replace x with mobile number delay(1000); mySerial.println(" FIRE ALERT !! "); Serial.println('\n'); mySerial.println("Fire at Reciever Node "); Serial.println('\n'); mySerial.println("Temperature : " + String(temp)); Serial.print('\n'); mySerial.println("Humidity : " + String(hum)); Serial.print('\n'); mySerial.println("Air Quality : " + smk); delay(100); mySerial.println((char)26);// ASCII code of CTRL+Z delay(1000); } if( str_humid.toInt() >= 60 && str_temp.toInt() >= 25 ) { Serial.print("Fire Detected at Transmitter "); mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode delay(1000); mySerial.println("AT+CMGS=\"+918744984131\"\r"); // Replace x with mobile number delay(1000); mySerial.println(" FIRE ALERT !! "); Serial.println('\n'); mySerial.println("Fire at Transmitter Node "); Serial.println('\n'); mySerial.println("Temperature : " + str_temp); Serial.print('\n'); mySerial.println("Humidity : " + str_humid); Serial.print('\n'); mySerial.println("Air Quality : " + String(str_smk)); delay(100); mySerial.println((char)26);// ASCII code of CTRL+Z delay(1000); } } #######( PART-2 )############ Transmitter Side Arduino Code ############ ############################################################################ #include <RH_ASK.h> #include <SPI.h> #include <DHT.h> //Constants #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT11 // DHT11 DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino int smokeA0 = A5; // Your threshold value int sensorThres = 400; // Define Variables float hum; // Stores humidity value in percent float temp; // Stores temperature value in Celcius float smk; // Define output strings String str_humid; String str_temp; String str_smk; String str_out; // Create Amplitude Shift Keying Object RH_ASK rf_driver; // Initialize DHT sensor for normal 16mhz Arduino void setup() { dht.begin(); pinMode(smokeA0, INPUT); // Initialize ASK Object rf_driver.init(); } void loop() { delay(2000); // Delay so DHT-22 sensor can stabalize hum = dht.readHumidity(); // Get Humidity value temp= dht.readTemperature(); // Get Temperature value // Convert Humidity to string str_humid = String(hum); Serial.print(hum); // Convert Temperature to string str_temp = String(temp); Serial.print(temp); int analogSensor = analogRead(smokeA0); // Checks if it has reached the threshold value if (analogSensor > sensorThres) { str_smk = "1"; } else { str_smk = "0"; } // Combine Humidity and Temperature if(str_smk == "1") { str_out = str_humid + "," + str_temp + "," + "Smoke"; } if(str_smk == "0") { str_out = str_humid + "," + str_temp+ "," + "Clean"; } // Compose output character const char *msg = str_out.c_str(); rf_driver.send((uint8_t *)msg, strlen(msg)); rf_driver.waitPacketSent(); }