#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Pin definisi
#define TRIG_PIN 4
#define ECHO_PIN 2
#define Buzzer 12
#define LED_PIN 13 // LED Merah
#define LED_YELLOW 14 // LED Kuning
#define LED_GREEN 21 // LED Hijau
// Konfigurasi WiFi dan Telegram
#define WIFI_SSID "Wokwi-GUEST" // Ganti dengan nama WiFi Anda
#define WIFI_PASSWORD "" // Ganti dengan password WiFi Anda
#define BOT_TOKEN "8130664971:AAFzymhZU0_tq9a3gZy3drZJaQ2wzrrYShc" // Token bot Telegram Anda
#define CHAT_ID "8030685561" // ID chat Telegram Anda
// Variabel untuk jarak dan waktu
float duration_us, distance_cm;
unsigned long lastNotification = 0; // Waktu terakhir notifikasi
const unsigned long notificationInterval = 10000; // Interval 10 detik
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
void setup() {
Serial.begin(9600);
while (!Serial) {} // Tunggu Serial Monitor terbuka
delay(3000);
// Inisialisasi pin
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(LED_PIN, OUTPUT); // LED Merah
pinMode(LED_YELLOW, OUTPUT); // LED Kuning
pinMode(LED_GREEN, OUTPUT); // LED Hijau
digitalWrite(Buzzer, LOW);
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
// Koneksi ke WiFi
Serial.print("Menghubungkan ke WiFi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nWiFi terhubung!");
Serial.println("Alamat IP: " + WiFi.localIP().toString());
// Abaikan validasi sertifikat SSL
secured_client.setInsecure();
// Kirim pesan ke Telegram setelah WiFi terhubung
if (bot.sendMessage(CHAT_ID, "Bot aktif dan siap mendeteksi objek!", "")) {
Serial.println("Pesan awal berhasil dikirim!");
} else {
Serial.println("Gagal mengirim pesan awal. Periksa koneksi!");
}
}
void loop() {
// Mengirimkan sinyal ultrasonik
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mengukur durasi pantulan
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us; // Konversi ke cm
Serial.print("Jarak: ");
Serial.print(distance_cm);
Serial.println(" cm");
// Indikasi LED berdasarkan jarak
if (distance_cm < 50) {
// Objek sangat dekat
tone(Buzzer, 1000); // Nyalakan buzzer
digitalWrite(LED_PIN, HIGH); // Nyalakan LED merah
digitalWrite(LED_YELLOW, LOW); // Matikan LED kuning
digitalWrite(LED_GREEN, LOW); // Matikan LED hijau
// Kirim notifikasi jika interval waktu terpenuhi
if (millis() - lastNotification > notificationInterval) {
String message = "Objek terdeteksi mendekat!\nJarak: ";
message += String(distance_cm);
message += " cm.";
if (bot.sendMessage(CHAT_ID, message, "")) {
Serial.println("Pesan terkirim ke Telegram: " + message);
} else {
Serial.println("Gagal mengirim pesan. Periksa koneksi atau token.");
}
lastNotification = millis(); // Perbarui waktu notifikasi terakhir
}
} else if (distance_cm >= 50 && distance_cm <= 100) {
// Objek sedang (50 cm - 1 meter)
noTone(Buzzer); // Matikan buzzer
digitalWrite(LED_PIN, LOW); // Matikan LED merah
digitalWrite(LED_YELLOW, HIGH); // Nyalakan LED kuning
digitalWrite(LED_GREEN, LOW); // Matikan LED hijau
} else {
// Objek jauh (> 1 meter)
noTone(Buzzer); // Matikan buzzer
digitalWrite(LED_PIN, LOW); // Matikan LED merah
digitalWrite(LED_YELLOW, LOW); // Matikan LED kuning
digitalWrite(LED_GREEN, HIGH); // Nyalakan LED hijau
}
delay(500); // Interval pembacaan sensor
}