//--------------------------------------------------------------------------
// Nama : Rakhmat Akrom
// NIM : 2021157001
// Prodi : Teknik Informatika
// Semester : 6
// Makul : Teknologi IoT
// Dosen Pengampu : Muslim Hidayat., M.Kom.
//--------------------------------------------------------------------------
#include<LiquidCrystal_I2C.h>; //Library LCD
#include<ESP32Servo.h>; //Library Servo
LiquidCrystal_I2C lcd(0x27, 16, 2); //Menentukan jenis lcd
// HCSR Sensor (Smart Gate)
#define triggerPin 2 //Posisi Pin Trigger pada sensor HCSR
#define echoPin 4 //Posisi Pin Echo pada sensor HCSR
#define buzzPin 12 //Posisi Pin Alarm Penanda Smart Gate
#define ledPin 14 //Posisi Pin Lampu Penanda Smart Gate
#define servoPin 13 //Posisi Pin Output Servo
long duration, jarak; //Tipe data long untuk rumus perhitungan
Servo servo1; //Variabel untuk servo Smart Gate
// Sensor Cahaya (Smart Rooftop + Lamp)
#define analogPin 34 //Posisi Pin Output Sensor LDR
#define ledBPin 33 //Posisi Pin Lampu
#define servoBPin 32 //Posisi Pin Servo Smart Lamp
int cahaya = 0; //Nilai
Servo servo2; //Variabel untuk servo Smart Rooftop
void setup()
{
Serial.begin(115200);
lcd.init(); //Menyalakan fungsi lcd
lcd.backlight(); //Menyalakan latar belakang lcd
lcd.setCursor(0,0); //Posisi Tulisan pada baris pertama lcd
lcd.print("Gerbang Otomatis");
lcd.setCursor(0, 1); //Posisi Tulisan pada baris kedua lcd
lcd.print("Siap berfungsi...");
pinMode(echoPin, INPUT);
pinMode(triggerPin, OUTPUT);
pinMode(buzzPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledBPin, OUTPUT);
servo1.attach(servoPin);
servo2.attach(servoBPin);
}
void loop()
{
digitalWrite(triggerPin, LOW); //Set triggerPin low
delayMicroseconds(2); // delay 2 micro second
digitalWrite(triggerPin, HIGH); // Set triggerPin high
delayMicroseconds(10); // triggerPin high selama 10 micro seconds
digitalWrite(triggerPin, LOW); // triggerPinPin low
duration = pulseIn(echoPin, HIGH); //Pembacaan Echo pin dan durasi
jarak = (duration * 0.034)/2; ///Menghitung jarak
Serial.print("Jarak : ");
Serial.print(jarak);
Serial.println(" cm");
//Kondisi Jarak Benda antara 10 - 19 cm, Delay Alarm 100 ms
if((jarak < 20) && (jarak >= 10)) {
digitalWrite(buzzPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(buzzPin, LOW);
delay(100);
digitalWrite(buzzPin, HIGH);
delay(100);
digitalWrite(buzzPin, LOW);
digitalWrite(ledPin, LOW);
delay(100);
//Kondisi Jarak Benda antara 5 - 9 cm, Delay Alarm 50 ms
} else if((jarak < 10) && (jarak >= 5)) {
digitalWrite(buzzPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(buzzPin, LOW);
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(buzzPin, HIGH);
digitalWrite(ledPin, HIGH);
delay(50);
digitalWrite(buzzPin, LOW);
digitalWrite(ledPin, LOW);
delay(50);
//Kondisi Jarak Benda antara 1 - 4 cm, Alarm menyala tanpa delay
} else if((jarak < 5) && (jarak >= 1)) {
digitalWrite(buzzPin, HIGH);
digitalWrite(ledPin, HIGH);
// Gerbang dibuka pada kondisi ini
servo1.write(90);
delay(20);
} else {
digitalWrite(buzzPin, LOW);
// Gerbang ditutup setelah tidak ada benda yang menghalangi sensor lebih dari 19 cm
servo1.write(0);
}
// Sensor Cahaya
cahaya = analogRead(analogPin); //Deklarasikan variabel cahaya agar lebih mudah membaca nilai cahaya dalam sinyal analog
Serial.print("Intensitas Cahaya : ");
Serial.println(cahaya);
if (cahaya > 1800) {
digitalWrite(ledBPin, HIGH);
// Atap di tutup saat cahaya mulai gelap
servo2.write(0);
delay(20);
} else {
digitalWrite(ledBPin, LOW);
// Atap dibuka saat cahaya mulai terang
servo2.write(65);
delay(20);
}
// Tampilkan Jarak di LCD
lcd.clear();
lcd.setContrast(25);
lcd.print("Jarak : ");
lcd.print(jarak);
lcd.print(" cm");
// Tampilkan Intensitas Cahaya di LCD
lcd.setCursor(0, 1);
lcd.print("Cahaya : ");
lcd.print(cahaya);
delay(500);
}