/*
Nama : Aisyah Rizki Utari
NPM : 203510537
Kelas : 7F
Project : Sensor Ultrasonik dengan LED dan Buzzer pada Wokwi,yang terhubung
Via Blynk dan Telegram
*/
#define BLYNK_TEMPLATE_ID "TMPL6uuWiYU2b"
#define BLYNK_TEMPLATE_NAME "UASLABIOT"
#define BLYNK_AUTH_TOKEN "fr7VbhXN0KeDVpPwN7FuO7GJe-O7meS5"
#define BLYNK_PRINT Serial
//pertama kita bikin library yang telah kita masukkan tadi seperti ini
#include "CTBot.h";
#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <BlynkSimpleEsp32.h>
//setelah itu kita mendefenisikan fungsi-fungsi dari
//perangkat yang kita pasang tadi seperti buzzer,led,pin,serta ultrasoniknya
#define Echo 15
#define Trig 2
#define Merah 14
#define Kuning 12
#define Hijau 13
#define buzzer 26
//
String token = "6829520411:AAHDqQaIitblULZvTChMc0XLzSW9xbTeabE";
const int bot_id = 865978903;
//inisialisasi autentifikasinya itu dengan BLYNK_AUTH_TOKEN yang berasal dari blynk versi web nya,
//lalu ssid nya WOKWI-Guest,dan pass nya dikosongin aja
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
CTBot mybot;
BlynkTimer timer;
//lalu kita defenisikan variabel jarak,
//kita set jaraknya itu =0,variabel nada itu untuk mengubah intonasi nada
float jarak = 0;
int nada;
//lalu kita buat void ukur jarak,yang berisi operasi pengukuran jarak
void ukur_jarak(){
digitalWrite(Trig, LOW);
delay(10);
digitalWrite(Trig, HIGH);
delay(10);
digitalWrite(Trig, LOW);
//disini ada integer durasi=pulseIn,dengan echo nya itu kita set High,lalu jaraknya kita operasikan dengan jarak itu tadi.ini merupakan
//contoh operasi agar di ultrasonik dan di blynk nya itu hasilnya sama
int duration = pulseIn(Echo, HIGH);
jarak = duration * 0.034 / 2 + 1;
//selanjutkan kita ketikkan juga ouput jarak,disini untuk jarak sy gunakan ‘cm’
Serial.print("Jarak: ");
Serial.print(jarak);
Serial.println(" cm");
}
void output_jarak(){
if(jarak > 350) {
Serial.println("Aman");
digitalWrite(Hijau, HIGH);
}
else if(jarak > 200 && jarak < 350) {
Serial.println("Hama Mendekat!");
digitalWrite(Kuning, HIGH);
}
else if(jarak < 200) {
Serial.println("Ada Hama");
digitalWrite(Merah, HIGH);
}
}
//lalu defenisi void pesan,nah jadi karna ini pesannya menyambung ke telegram,jadi kita defenisi TBMessage sebagai msg.
//jadi dika jaraknya kurang dari 200 nanti tone buzzernya akan bunyi sesuai dengan nada yang diinputkan di blynk.jadi nanti di blynk itu bisa mengatur frekuensi nadanya.
//nah di telegramnya nanti akan muncul juga pesan bertuliskan ‘bahaya!!Hama kurang dari 2 meter’.
void pesan(){
TBMessage msg;
if(jarak < 200) {
tone(buzzer, nada);
mybot.sendMessage(bot_id, "Bahaya!!Hama Kurang dari 2 meter!");
if(mybot.getNewMessage(msg)) {
Serial.println("Pesan masuk: " + msg.text);
String pesan = msg.text;
if(pesan == "on") {
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();
}
//selanjutnya disini defenisi dari virtual pin nya dengan V0 yaitu Jarak.
//jadi Jika kondisi jaraknya itu lebih dari 350-400,nanti si lampu2nya itu ada yang nyala yaitu yang berwarna hijau / V1
void kirim_blynk(){
Blynk.virtualWrite(V0, jarak);
if(jarak > 350) {
Blynk.virtualWrite(V1, 1);
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V3, 0);
}
//jika jaraknya lebih dari 200 dan kurang dari 350,berarti yang nyala itu yang kuning / V2
else if(jarak >= 200 && jarak <= 350) {
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 1);
Blynk.virtualWrite(V3, 0);
}
//jika jaraknya kurang dari 200,itu lampu merah yang nyala /V3
else if(jarak < 200) {
Blynk.virtualWrite(V1, 0);
Blynk.virtualWrite(V2, 0);
Blynk.virtualWrite(V3, 1);
}
//untuk membaca virtual bagian nada /V4
Blynk.virtualWrite(V4, nada);
}
//pada void setup,itu kita memulai si blynk nya itu dengan parameter auth,ssid,dan pass.lalu pinModenya
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Merah, OUTPUT);
pinMode(Hijau, OUTPUT);
pinMode(buzzer, OUTPUT);
timer.setInterval(2000L, kirim_blynk);
Serial.println("Memulai Telegram Bot");
mybot.wifiConnect(ssid, pass);
mybot.setTelegramToken(token);
//lalu kita mencetak bot telegram,sebelum itu kita defenisikan CTBot nya itu dengan mybot.pemanggilannya cukup dg mybot,dengan fungsi wificonnect parameternya ssid dan pass.
//fungsi setTelegram dengan parameter token yang berisi token dari telegram tadi di line 19-20 beserta id nya.
//Lalu kita masuk ke pengkondisian,nanti kalo mybot nya masuk akan keluar output ‘koneksi berhasil’ kalo ga berhasil keluar output ‘koneksi gagal’
if(mybot.testConnection()) {
Serial.println("Koneksi Berhasil");
}
else {
Serial.println("Koneksi Gagal");
}
}
// selanjutnya void loop,defenisikan dulu lampu2nya,setelah itu panggil ukur jarak dan output_jarak juga
void loop() {
digitalWrite(Merah, LOW);
digitalWrite(Kuning, LOW);
digitalWrite(Hijau, LOW);
ukur_jarak();
output_jarak();
pesan();
//tak lupa juga blynk,timer nya juga untuk di run,dan delay nya menjadi 1000/mili second
Blynk.run();
timer.run();
delay(1000);
}