#include <WiFi.h>
#include <ThingSpeak.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Include the LiquidCrystal_I2C library
// LiquidCrystal_I2C settings
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the I2C address for your LCD
#define trigerPin 12
#define echoPin 13
#define ledPin 14
#define speakerPin 15
#define pitch 262
#define CM_TO_INCH 0.393701
long duration;
float distance;
float distanceInch;
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient alfa;
unsigned long ChannelID = 1725919;
const char *WriteAPI = "S9MVHFKU2S38LLV8";
void setup() {
Serial.begin(115200);
pinMode(trigerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(speakerPin, OUTPUT);
Serial.println("Scan WiFi...");
int networks = WiFi.scanNetworks();
if (networks == 0) {
Serial.println("No WiFi Networks!");
} else {
Serial.print(networks);
Serial.println(" Networks Found!");
for (int i = 0; i < networks; i++)
Serial.println(WiFi.SSID());
delay(10);
}
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
ThingSpeak.begin(alfa);
// Initialize the LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ESP32 Ultrasonic");
lcd.setCursor(0, 1);
lcd.print("Alarm System");
delay(2000);
lcd.clear();
}
void loop() {
digitalWrite(trigerPin, LOW);
delayMicroseconds(2);
digitalWrite(trigerPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigerPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) * 0.0343;
distanceInch = distance * CM_TO_INCH;
if (distance < 100) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(100);
tone(14, 262, 1000);
} else {
digitalWrite(ledPin, LOW);
}
int x = ThingSpeak.writeField(ChannelID, 1, distance, WriteAPI);
if (distance < 100) {
Serial.println("WARNING!");
Serial.println("Distance (cm): " + String(distance));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ALERT: Intruder");
lcd.setCursor(0, 1);
lcd.print("Distance (cm): " + String(distance));
} else {
Serial.println("JARAK AMAN");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Security Status:");
lcd.setCursor(0, 1);
lcd.print("Safe");
}
delay(2000);
}