/* ================================================ ==================================
Program : Kelompok EK-3B/02
1. Aira Alfario Rizahaqi Surianto NIM 3.32.20.1.02
2. Dhyaa Nanda Puspita NIM 3.32.20.1.09
================================================== ===================================
Proyek Laboratorium Mikrokontroler II
file : B02-Lab-Mikro.ino
Program Alat Pendeteksi Suhu dan Kelembaban Udara serta Suhu Tanah sebagai Peringatan
Dini Gunung Meletus Berbasis IoT
-------------------------------------------------- -----------------------------------
Komponen :
- Node MCU ESP8266
- Sensor Suhu dan Kelembaban Udara DHT 21 AM2301
- Sensor Suhu Tanah DS18B20
- Bel
- LED Berwarna Merah, Kuning, dan Hijau
================================================== =================================== */
/* Daftar Pustaka */
#termasuk <Arduino.h>
#termasuk <FirebaseESP8266.h>
#termasuk <ESP8266WiFi.h>
#sertakan <SPI.h>
#termasuk <Wire.h>
#termasuk <OneWire.h>
#termasuk <DallasTemperature.h>
#termasuk <DHT.h>
/* Bagian DHT */
#menentukan DHTPIN D5
DHT dhtA(DHTPIN, DHT22);
/* Setting Sensor Suhu Tanah */
#tentukan ONE_WIRE_BUS D1
OneWire oneWire(ONE_WIRE_BUS);
DallasSensor suhu(&oneWire);
uint8_t permukaan[8] = { 0x28, 0x20, 0xA5, 0x02, 0x00, 0x00, 0x00, 0x4E }; //Alamat Sensor Suhu Tanah Permukaan
uint8_t limacm[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x84, 0x1E, 0xDD, 0x0D }; //Alamat Sensor Suhu Tanah Kedalaman 5cm
uint8_t sepuluhcm[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x84, 0x0B, 0x1B, 0x09 }; //Alamat Sensor Suhu Tanah Kedalaman 10cm
uint8_t duapuluhcm[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x84, 0x1F, 0x5A, 0xC6 }; //Alamat Sensor Suhu Tanah Kedalaman 20cm
uint8_t limapuluhcm[8] = { 0x28, 0xAD, 0x1C, 0x48, 0xF6, 0x96, 0x3C, 0x81 }; //Alamat Sensor Suhu Tanah Kedalaman 50cm
/* Setting Wi-Fi */
#define WIFI_SSID "Heyhey" //Nama WiFi
#define WIFI_PASSWORD "12345678" //Kata sandi WiFi
/* Akses Firebase */
#define FIREBASE_HOST "project-bmkg-v1-default-rtdb.firebaseio.com" //Alamat firebase
#define FIREBASE_AUTH "d1Ha5vXkFBzYhwFcMdUpqEidsAHFK3hycrBdw2wF" //API Firebase
FirebaseData fbdo;
autentikasi FirebaseAuth;
konfigurasi FirebaseConfig;
batal printResult(FirebaseData &data); //Program untuk mengirim ke Firebase
Jalur string = "/AWSPrototype"; //Alamat Database di Firebase
unsigned long dataMillis = 0;
int jumlah = 0;
/* Pengenalan Peringatan */
const int BZZ = D0, LEDM = D6, LEDK = D7, LEDH = D8; //Pengenalan Indikator di alat
membatalkan penyiapan() {
Serial.mulai(9600); //Inisiasi komunikasi serial pada baudrate 9600
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //Menyambungkan NodeMCU ESP8266 dengan Wifi
Serial.print("Menghubungkan ke WiFi");
pinMode(DHTPIN, INPUT); //Mengenalkan pin DHT (D5) sebagai masukan
pinMode(BZZ, OUTPUT); //Mengenalkan pin Buzzer (D0) sebagai luaran
pinMode(LEDM, OUTPUT); //Mengenalkan pin LED Merah (D6) sebagai luaran
pinMode(LEDK, KELUARAN); //Mengenalkan pin LED Kuning (D7) sebagai luaran
pinMode(LEDH, OUTPUT); //Mengenalkan pin LED Hijau (D8) sebagai luaran
while (WiFi.status() != WL_CONNECTED) { //Inisiasi pengkoneksian wifi
digitalWrite(LEDM, RENDAH);
penundaan (1000);
Serial.print(".");
digitalWrite(LEDM, TINGGI);
}
Serial.println();
Serial.print("Terhubung ke "); //Menampilkan pada komunikasi serial wifi yang tersambung pada alat
Serial.println(WIFI_SSID);
Serial.print("Alamat IP: "); //Menampilkan pada komunikasi serial ip dari ESP8266
Serial.println(WiFi.localIP());
config.host = FIREBASE_HOST; //Menyambungkan alamat firebase dengan kunci API firebase
config.signer.tokens.legacy_token = FIREBASE_AUTH;
Firebase.sambungkan kembaliWiFi(benar);
Firebase.begin(&config, &auth);
/*Inisiasi test Led*/
digitalWrite(LEDM, TINGGI); //Indikasi ketika alat sudah tersambung dengan internet
penundaan (333);
digitalWrite(LEDK, TINGGI);
penundaan (333);
digitalWrite(LEDH, TINGGI);
penundaan (333);
digitalWrite(LEDM, RENDAH);
digitalWrite(LEDK, RENDAH);
digitalWrite(LEDH, RENDAH);
sensor.begin(); //Memulai pembacaan sensor DS18B20
dhtA.begin(); //Memulai pembacaan sensor DHT21
}
kekosongan loop() {
kembali :
penundaan (1000);
int i=0;
float h = dhtA.readHumidity(); //Pembacaan Kelembaban Udara oleh Sensor DHT 21
float t = dhtA.readTemperature(); //Pembacaan Suhu Udara oleh Sensor DHT 21
sensors.requestTemperatures(); //Meminta Sensor DS18B20 untuk mengukur suhu
sensors.setResolution(12); //Pengatur resolusi Sensor DS18B20 ke 12 bit
/* Mencari Suhu Tanah dengan kedalaman tertentu */
float temp1 = sensors.getTempC(permukaan);
float temp2 = sensors.getTempC(limacm);
float temp3 = sensors.getTempC(sepuluhcm);
float temp4 = sensors.getTempC(duapuluhcm);
float temp5 = sensors.getTempC(limapuluhcm);
/*mengirimkan data ke Firebase */
Serial.println(".................................................") ;
Serial.println("Mengirimkan Data :");
Serial.print("kelembapan: ");
Serial.println(h);
Serial.print("suhu: ");
Serial.println(t);
Serial.print("suhu permukaan tanah: ");
Serial.println(temp1);
Serial.print("suhu 5cm: ");
Serial.println(temp2);
Serial.print("suhu 10cm: ");
Serial.println(temp3);
Serial.print("suhu 20cm: ");
Serial.println(temp4);
Serial.print("suhu 50cm: ");
Serial.println(temp5);
/* Logika Kondisi Lapangan */
if (((temp1 >= 31.0) && (temp1 <= 34.0)) || ((temp2 >= 31.0) && (temp2 <= 34.0)) || ((temp3 >= 31.0) && (temp3 <= 34.0) ) || ((temp4 >= 31.0) && (temp4 <= 34.0)) || ((temp5 >= 31.0) && (temp5 <= 34.0))) {
digitalWrite(LEDM, RENDAH);
digitalWrite(LEDK, TINGGI);
digitalWrite(LEDH, RENDAH);
digitalWrite(BZZ, RENDAH);
Serial.println("===KEADAAN WASPADA==="); //Ketika suhu tanah dalam posisi tengah (Waspada) dengan kondisi 31oC <= Suhu Tanah <= 34oC
}
lain jika ((temp1 > 34) || (temp2 > 34) || (temp3 > 34) || (temp4 > 34) || (temp5 > 34)) {
digitalWrite(LEDM, TINGGI);
digitalWrite(LEDK, RENDAH);
digitalWrite(LEDH, RENDAH);
Serial.println("===KEADAAN SIAGA==="); //Ketika suhu tanah dalam posisi tertinggi (Siaga) dengan kondisi Suhu Tanah > 34oC
while ((temp1 > 34) || (temp2 > 34) || (temp3 > 34) || (temp4 > 34) || (temp5 > 34)) {
Serial.println("=== KEADAAN SIAGA BENCANA!! ===");
do { //Program untuk menyalakan notifikasi Buzzer nyala mati sebanyak 5x
digitalWrite(BZZ, TINGGI);
penundaan (500);
digitalWrite(BZZ, RENDAH);
penundaan (500);
saya ++;
}
sementara (i<5);
pergi pengiriman; //Menuju ke pengiriman program
kebagian kembali; //Menuju ke program kembali
}
}
lain jika ((temp1 < 31.0) || (temp2 < 31.0) || (temp3 < 31.0) || (temp4 < 31.0) || (temp5 < 31.0)) {
digitalWrite(LEDM, RENDAH);
digitalWrite(LEDK, RENDAH);
digitalWrite(LEDH, TINGGI);
Serial.println("===KEADAAN AMAN==="); //Ketika suhu tanah dalam posisi terrendah (Aman) dengan kondisi Suhu Tanah < 31oC
}
kalau tidak {
Serial.println("ERROR!, CEK ALAT ANDA"); //Ketika nilai suhu tidak terdeteksi, alat dalam keadaan error
digitalWrite(LEDH, TINGGI);
digitalWrite(LEDM, RENDAH);
penundaan (500);
digitalWrite(LEDM, TINGGI);
digitalWrite(LEDH, RENDAH);
penundaan (500);
}
pengiriman : //Program pengiriman ke database Firebase yang jika berhasil maka akan dikirim
if (Firebase.setFloat(fbdo, path + "/Kelembapan Udara", h)) {
Serial.println("DATA KELEMBABAN UDARA BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Udara", t)) {
Serial.println("DATA SUHU UDARA BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Permukaan Tanah", temp1)) {
Serial.println("DATA SUHU PERMUKAAN BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Tanah 5cm", temp2)) {
Serial.println("DATA SUHU 5CM BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Tanah 10cm", temp3)) {
Serial.println("DATA SUHU 10CM BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Tanah 20cm", temp4)) {
Serial.println("DATA SUHU 20CM BERHASIL TERKIRIM");
}
if (Firebase.setFloat(fbdo, path + "/Suhu Tanah 50cm", temp5)) {
Serial.println("DATA SUHU 50CM BERHASIL TERKIRIM");
} kalau tidak {
Serial.println("MAAF DATA TIDAK TERKIRIM");
Serial.println("ALASAN: " + fbdo.errorReason());
Serial.println(".................................................");
Serial.println();
}
}
Komentar
Posting Komentar