#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#define SERVO_PIN 25
#define LED_PIN 13
#define TRIG_PIN 12
#define ECHO_PIN 14
#define BUZZER_PIN 27
Servo pintuServo;
LiquidCrystal_I2C lcd(0x27, 20, 4);
String statusLampu = "OFF";
String statusPintu = "LOCKED";
bool welcomeSpoken = false;
void setup() {
Serial.begin(115200);
pintuServo.attach(SERVO_PIN);
pintuServo.write(0); // Pintu awal terkunci
pinMode(LED_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); lcd.print("SMART HOME SYSTEM");
lcd.setCursor(0, 1); lcd.print("Awaiting Commands...");
Serial.println("--- JARVIS VOICE TERMINAL ACTIVE ---");
Serial.println("Gunakan Perintah: 'buka pintu', 'tutup pintu', 'nyalakan lampu', 'matikan lampu'");
updateLCD();
}
void loop() {
// 1. Fitur Welcome System (Sensor Jarak)
digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
if (distance < 20 && !welcomeSpoken) {
tone(BUZZER_PIN, 1200, 100);
lcd.setCursor(0, 3);
lcd.print("Gimana Kabar bos");
welcomeSpoken = true;
delay(2000);
updateLCD();
} else if (distance >= 20) {
welcomeSpoken = false;
}
// 2. Fitur Simulasi Voice Command via Serial Monitor
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
command.trim();
if (command == "buka pintu") {
pintuServo.write(90);
statusPintu = "OPEN";
tone(BUZZER_PIN, 1000, 200);
}
else if (command == "tutup pintu") {
pintuServo.write(0);
statusPintu = "LOCKED";
tone(BUZZER_PIN, 800, 200);
}
else if (command == "nyalakan lampu") {
digitalWrite(LED_PIN, HIGH);
statusLampu = "ON";
}
else if (command == "matikan lampu") {
digitalWrite(LED_PIN, LOW);
statusLampu = "OFF";
}
updateLCD();
}
delay(100);
}
void updateLCD() {
lcd.setCursor(0, 0); lcd.print("HABIB SMART HUB ");
lcd.setCursor(1, 1); lcd.print("Lampu Utama: " + statusLampu + " ");
lcd.setCursor(0, 2); lcd.print("Pintu Lab : " + statusPintu + " ");
lcd.setCursor(0, 3); lcd.print("System Status: READY");
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4