//Nama : Dwi Suti Febriani
//NPM : 203510050
// Program Kontrol Hama menggunakan Sensor Ultrasonik dan Mikcrocontroler ESP32 dengan koneksi Blynk dan Telegram
// Konfigurasi untuk menghubungkan program dengan Platform Blynk
#define BLYNK_TEMPLATE_ID "TMPL6grHJ0A9o"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#define BLYNK_AUTH_TOKEN "zHNJ8EfQ6FMK-VY7K02oXQthF2lRuxAU"
#define BLYNK_PRINT Serial
// Memasukan Library yang dibutuhkan
#include "CTBot.h";
#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp32.h>
//Mendefinisikan pin-pin yang dipakai
#define Echo 15
#define Trig 2
#define Merah 14
#define Kuning 12
#define Hijau 13
#define buzzer 26
//Mendefinisikan token autentikasi dan ID untuk bot Telegram yang akan digunakan
String token = "6879538011:AAHCn8x9v6BiJ74d0pZWvegIxuxvav8-jo0";
const int bot_id = 1072750191;
//konfigurasi untuk proyek Blynk yang menggunakan koneksi Wi-Fi
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
CTBot mybot;
BlynkTimer timer;
//inisialiasi nilai jarak dan nada
float jarak = 0;
int nada;
//Fungsi untuk mengukur jarak
void ukur_jarak(){
digitalWrite(Trig, LOW); //memberikan sinyal awal pada sensor ultrasonik.
delay(10);
digitalWrite(Trig, HIGH);//memulai pengukuran jarak
delay(10);
digitalWrite(Trig, LOW);//menghentikan sinyal dan mempersiapkan sensor untuk membaca hasil pengukuran
int duration = pulseIn(Echo, HIGH);//Mengukur durasi sinyal yang dikirimkan oleh sensor ultrasonik yang dipantulkan dari objek
jarak = duration * 0.034 / 2 + 1;
Serial.print("Jarak: ");//menampilkan nilai jarak
Serial.print(jarak);
Serial.println(" cm");
}
//Fungsi Menampilkan Jarak
void output_jarak(){
if(jarak > 400) { // jika jarak kurang besar 400 maka menampilkan pesan Aman dan lampu hijau menyala
Serial.println("Aman");
digitalWrite(Hijau, HIGH);
}
else if(jarak > 200 && jarak < 400) { // jika jarak antara 200- 399 maka menampilkan pesan Hama Mendekat
Serial.println("Hama Mendekat!"); // dan lampu kuning menyala
digitalWrite(Kuning, HIGH);
}
else if(jarak < 200) {
Serial.println("Ada Hama");// jika jarak kurang dari 200 maka akan menampilkan pesan Ada Hama
digitalWrite(Merah, HIGH);// lampu merah menyala
}
}
//fungsi pesan yang akan masuk di Telegram
void pesan(){
TBMessage msg;
if(jarak < 200) { //jika jarak kurang dari 200 maka menampilkan pesan "Ada Hama Kurang dari 2 meter!"
tone(buzzer, nada); // buzzer berbunyi
mybot.sendMessage(bot_id, "Ada Hama Kurang dari 2 meter!");
if(mybot.getNewMessage(msg)) {
Serial.println("Pesan masuk: " + msg.text);
String pesan = msg.text;
if(pesan == "on") { //jika input on maka Alarm dinyalakan
mybot.sendMessage(bot_id, "Alarm Dinyalakan");
}
if(pesan == "off") {
noTone(buzzer);
mybot.sendMessage(bot_id, "Alarm Dimatikan");
}
}
}
else {
noTone(buzzer);
}
}
BLYNK_WRITE(V4) {
nada = param.asInt();
}
//mengirim data ke server Blynk
// V1 = Aman LED Hijau
// V2 = Waspada LED Kuning
// V3 = Berbahaya LED Merah
void kirim_blynk(){
Blynk.virtualWrite(V0, jarak); // jika jarak besar dari 400 maka tampilan dashboard V1 LED hijau menyala
if(jarak > 400) {
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V3, 0);
}
else if(jarak >= 200 && jarak <= 400) {
Blynk.virtualWrite(V1, 0); // jika jarak 200-399 maka tampilan dashboard LED kuning menyala
Blynk.virtualWrite(V2, 1);
Blynk.virtualWrite(V3, 0);
}
else if(jarak < 200) { // jika jarak kurang 200 maka tampilan dashboard LED merah menyala
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V3, 1);
}
Blynk.virtualWrite(V4, nada); // nada buzer berbunyi
}
//konfigurasi pin sebagai INPUT atau OUTPUT
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Merah, OUTPUT);
pinMode(Hijau, OUTPUT);
pinMode(Kuning,OUTPUT);
pinMode(buzzer, OUTPUT);
timer.setInterval(2000L, kirim_blynk);
Serial.println("Memulai Telegram Bot");
mybot.wifiConnect(ssid, pass);
mybot.setTelegramToken(token);
if(mybot.testConnection()) {
Serial.println("Koneksi Berhasil");
}
else {
Serial.println("Koneksi Gagal");
}
}
// mematikan lampu sebelum melakukan pengukuran jarak
void loop() {
digitalWrite(Merah, LOW);
digitalWrite(Kuning, LOW);
digitalWrite(Hijau, LOW);
ukur_jarak();
output_jarak();
pesan();
Blynk.run();
timer.run();
delay(1000);
}