118 lines
3.6 KiB
C++
118 lines
3.6 KiB
C++
#include <ESP8266WiFi.h>
|
|
#include <ThingSpeak.h>
|
|
|
|
const char* ssid = "RAJPBS"; // Nama jaringan WiFi Anda
|
|
const char* password = "20012003"; // Kata sandi WiFi Anda
|
|
|
|
const int trigPin = D1; // Pin Trig sensor ultrasonik
|
|
const int echoPin = D2; // Pin Echo sensor ultrasonik
|
|
const int buzzerPin = D3;
|
|
const int rainSensorPin = A0; // Pin sensor hujan analog
|
|
long duration;
|
|
int distance;
|
|
int height;
|
|
|
|
// Informasi ThingSpeak
|
|
const char *thingSpeakAddress = "api.thingspeak.com";
|
|
const unsigned long channelID = 2610710; // Masukkan ID saluran ThingSpeak Anda
|
|
const char *writeAPIKey = "S7E9ATGV103DCUZO"; // Masukkan Write API Key Anda
|
|
|
|
WiFiClient client;
|
|
|
|
void setup() {
|
|
Serial.begin(9600); // Memulai komunikasi serial dengan baudrate 9600
|
|
pinMode(trigPin, OUTPUT); // Menetapkan trigPin sebagai OUTPUT
|
|
pinMode(echoPin, INPUT); // Menetapkan echoPin sebagai INPUT
|
|
pinMode(buzzerPin, OUTPUT);
|
|
|
|
// Menghubungkan ke jaringan WiFi
|
|
Serial.print("Menghubungkan ke ");
|
|
Serial.println(ssid);
|
|
WiFi.begin(ssid, password);
|
|
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
Serial.println("");
|
|
Serial.println("WiFi terhubung");
|
|
Serial.println("Alamat IP: ");
|
|
Serial.println(WiFi.localIP());
|
|
|
|
ThingSpeak.begin(client); // Inisialisasi ThingSpeak
|
|
}
|
|
|
|
void loop() {
|
|
// Menetapkan trigPin HIGH selama 10 mikrodetik untuk mengirimkan pulsa ultrasonik
|
|
digitalWrite(trigPin, HIGH);
|
|
delayMicroseconds(10);
|
|
digitalWrite(trigPin, LOW);
|
|
|
|
// Membaca durasi pulsa dari echoPin
|
|
duration = pulseIn(echoPin, HIGH);
|
|
|
|
// Menghitung jarak dalam cm
|
|
distance = duration * 0.034 / 2;
|
|
|
|
// Mengonversi jarak menjadi ketinggian permukaan air (12 terdekat dan 1 terjauh)
|
|
if (distance >= 1 && distance <= 12) {
|
|
height = 13 - distance;
|
|
Serial.print("Ketinggian permukaan air: ");
|
|
Serial.print(height);
|
|
Serial.println(" cm");
|
|
|
|
// Cek kondisi ketinggian air dan tampilkan status
|
|
if (height >= 8 && height <= 12) {
|
|
digitalWrite(buzzerPin, HIGH);
|
|
Serial.println("Status: Bahaya!");
|
|
delay(5000);
|
|
digitalWrite(buzzerPin, LOW);
|
|
} else if (height > 4 && height <= 8) {
|
|
Serial.println("Status: Waspada");
|
|
digitalWrite(buzzerPin, LOW);
|
|
} else if (height > 1 && height <= 4) {
|
|
Serial.println("Status: Aman");
|
|
digitalWrite(buzzerPin, LOW);
|
|
} else {
|
|
digitalWrite(buzzerPin, LOW);
|
|
Serial.println("Status: Ketinggian air aman");
|
|
}
|
|
|
|
} else {
|
|
Serial.println("Jarak di luar rentang yang diharapkan");
|
|
digitalWrite(buzzerPin, LOW);
|
|
}
|
|
|
|
int sensorValue = analogRead(rainSensorPin); // Baca nilai analog dari sensor hujan
|
|
Serial.print("Nilai Sensor Hujan: ");
|
|
Serial.println(sensorValue); // Cetak nilai sensor ke serial monitor
|
|
|
|
// Logika untuk mendeteksi intensitas hujan
|
|
String rainStatus;
|
|
if (sensorValue > 900) {
|
|
rainStatus = "Tidak ada hujan";
|
|
} else if (sensorValue <= 900 && sensorValue > 700) {
|
|
rainStatus = "Hujan ringan";
|
|
} else if (sensorValue <= 700 && sensorValue > 300) {
|
|
rainStatus = "Hujan deras";
|
|
} else {
|
|
rainStatus = "Hujan sangat deras";
|
|
}
|
|
Serial.println("Status Hujan: " + rainStatus);
|
|
|
|
// Kirim data ke ThingSpeak
|
|
ThingSpeak.setField(1, height); // Field 1 untuk ketinggian air
|
|
ThingSpeak.setField(2, sensorValue); // Field 2 untuk nilai sensor hujan
|
|
|
|
int httpCode = ThingSpeak.writeFields(channelID, writeAPIKey);
|
|
if (httpCode == 200) {
|
|
Serial.println("Data berhasil dikirim ke ThingSpeak");
|
|
} else {
|
|
Serial.print("Masalah saat mengirim data ke ThingSpeak. Kode error HTTP: ");
|
|
Serial.println(httpCode);
|
|
}
|
|
|
|
// Menunggu 15 detik sebelum mengirim data lagi
|
|
delay(15000);
|
|
}
|