#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define PINDHT 7
#define DHTTYPE DHT22
DHT dht(PINDHT, DHTTYPE);
#define buzzer 6
const int Trig1 =8;
const int Echo1 =9;
const int Trig2 =10;
const int Echo2 =11;
#define led_lampu 13
#define led_suhu 12
#define potensio A0
LiquidCrystal_I2C lcd(0x27,16,2);
unsigned int jarak1,jarak2, timer;
unsigned int jumlahOrang;
bool buzzerActive = false;
void ukurJarak1(){
digitalWrite(Trig1, LOW);
delayMicroseconds(2);
digitalWrite(Trig1, HIGH);
delayMicroseconds(10);
digitalWrite(Trig1, LOW);
timer=pulseIn(Echo1,HIGH);
jarak1=timer/58;
}
void ukurJarak2(){
digitalWrite(Trig2, LOW);
delayMicroseconds(2);
digitalWrite(Trig2, HIGH);
delayMicroseconds(10);
digitalWrite(Trig2, LOW);
timer=pulseIn(Echo2,HIGH);
jarak2=timer/58;
}
void setup() {
dht.begin();
lcd.begin(16,2);
pinMode(led_lampu, OUTPUT);
pinMode(led_suhu, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(potensio, INPUT);
lcd.print("Perpustakaan");
lcd.setCursor(0,1);
lcd.print("Hari ini");
digitalWrite(led_lampu, HIGH);
digitalWrite(led_suhu, LOW);
digitalWrite(buzzer, LOW);
delay(2000);
lcd.clear();
lcd.print("Ttl Orang:0 /40");
lcd.setCursor(0,1);
lcd.print("0 C | 0 db");
pinMode(Echo1, INPUT);
pinMode(Echo2, INPUT);
pinMode(Trig1, OUTPUT);
pinMode(Trig2, OUTPUT);
}
void loop() {
float suhu= dht.readTemperature();
int nilaiPotensio=analogRead(potensio);
lcd.setCursor(0,1);
lcd.print(suhu);
lcd.print(" C | ");
lcd.print(nilaiPotensio);
lcd.print(" db");
ukurJarak1();
// terdeteksi jika kurang dari 20 cm
if (jarak1 < 20){
// lalu mendeteksi disensor selanjutnya
while(jarak2 >20){
ukurJarak2();
}
// memastikan agar sensor mendeteksi pengunjung sampai jauh dari jangkauan
while (jarak2 <40){
ukurJarak2();
}
jumlahOrang=jumlahOrang+1;
lcd.setCursor(10,0);
lcd.print(jumlahOrang);
delay(1000);
}
ukurJarak2();
// terdeteksi jika kurang dari 20 cm
if (jarak2 < 20 && jumlahOrang >0){
// lalu mendeteksi disensor selanjutnya
while(jarak1 >20){
ukurJarak1();
}
// memastikan agar sensor mendeteksi pengunjung sampai jauh dari jangkauan
while (jarak1 <40){
ukurJarak1();
}
jumlahOrang=jumlahOrang-1;
lcd.setCursor(10,0);
lcd.print(jumlahOrang);
delay(1000);
}
// Nyala Lampu
if(jumlahOrang >0){
digitalWrite(led_lampu, HIGH);
// suhu
if(suhu >30){
digitalWrite(led_suhu, HIGH);
}
else{
digitalWrite(led_suhu, LOW);
}
// Simulasi sensor kebisingan dengan dht22
int frequencies[] = {1000,1200}; // Frekuensi yang digunakan
int durations[] = {500, 500}; // Durasi setiap frekuensi dalam milidetik
if (nilaiPotensio > 50 && !buzzerActive) {
buzzerActive = true; // Set flag bahwa buzzer sudah berbunyi
for (int i = 0; i < sizeof(frequencies) / sizeof(frequencies[0]); i++) {
tone(buzzer, frequencies[i], durations[i]);
delay(durations[i]); // Memberi sedikit jeda antara setiap frekuensi
}
} else if (nilaiPotensio <= 50 && buzzerActive) {
buzzerActive = false; // Reset flag jika kebisingan turun
noTone(buzzer);
}
}
else{
digitalWrite(led_lampu, LOW);
digitalWrite(led_suhu, LOW);
}
// jika melebihi kapasitas yaitu 40 orang, agar mempermudah disimulasikan 10 orang
if(jumlahOrang >10){
tone(buzzer,700,1000);
}
}