/*NOTE
Sensor sentuh TTP223B tidak ada di wokwi, diganti pushbutton (sama" bereaksi bila di klik/sentuh, bedanya TTP223B lebih seamless, ga ceklak ceklek)
Sensor gas MQ-2 tidak ada di wokwi, diganti potensiometer (yang sama" membaca kondisi lingkungan, bedanya MQ-2 pin digital, potensiometer pin analog)
Penerangan Otomatis dilengkapi Pendeteksi Asap
menggunakan Sensor Cahaya LDR, Touch Sensor TTP223B, dan Gas Sensor MQ-2
PSTI C
1. Rafael Pascal Jeremiah (2215061007)
2. Fiska Viola Nadila (2215061051)
3. Yosi Arjunita Putri (2215061095)
4. Nada Berliani Putri (2215061119)
5. Theofani Hati K (2255061004)
6. Rakha Ukta Pamungkas (2255061012)
*/
const int TOUCH_PIN = 13; // Pin sensor sentuh
const int RELAY_PIN = 12; // Pin relay
const int LDR_PIN = A0; // Pin LDR
const int GAS_PIN = A1; // Pin Sensor Gas (harusnya pakai MQ-2 Gas Sensor ke pin digital, tapi di wokwi gaada, jadi pakai potensiometer ke pin analog)
const int BUZZER_PIN= 11; // Pin buzzer
int kondisiSentuhSekarang = 0; // var hasil baca sensor sentuh
int kondisiRelay = 0; // update var.kondisi relay/ hidup mati Lampu yg connect ke relay
int ambangCahaya = 170; // ambang intensitas lumen utk nyatakan lingkungan terang/gelap
int nilaiLDR; // var hasil baca LDR
bool gelap; // var pembanding value LDR dan intensitas lux
int ambangGas = 250; // ambang konsenterasi gas
int nilaiGas; // var hasil baca sensor gas
bool gasBahaya; // var pembanding value gas dgn konsenterasi ambang
void setup() {
Serial.begin(9600);
pinMode(TOUCH_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
pinMode(GAS_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// Cek kondisi gelap (nilai LDR di bawah ambang batas)
nilaiLDR = analogRead(LDR_PIN);
gelap = nilaiLDR > ambangCahaya;
Serial.print("Nilai LDR : ");
Serial.println(nilaiLDR);
// Cek apakah konsenterasi gas nya berbahaya
nilaiGas = analogRead(GAS_PIN);
gasBahaya = nilaiGas > ambangGas;
Serial.print("konsenterasi gas : ");
Serial.println(nilaiGas);
// Cek sensor disentuh
kondisiSentuhSekarang = digitalRead(TOUCH_PIN);
//===================================GELAP===================================
//---------------TANPA SENTUH---------------
if(gelap && kondisiSentuhSekarang == LOW ){ // GELAP no sentuh
digitalWrite(RELAY_PIN, HIGH);
kondisiRelay = HIGH;
Serial.println("Keadaan gelap, lampu menyala");
delay(500);
//------------------DISENTUH------------------
}else if(gelap && kondisiSentuhSekarang == HIGH){ // Jika gelap dan disentuh
if (kondisiRelay == HIGH) { // Jika jumlah sentuhan ganjil
digitalWrite(RELAY_PIN, LOW);
kondisiRelay = LOW;
Serial.println("Keadaan gelap, namun sensor disentuh, lampu mati");
kondisiSentuhSekarang=LOW;
if(kondisiSentuhSekarang == LOW){
while(kondisiSentuhSekarang==LOW){
digitalWrite(RELAY_PIN, LOW);
kondisiRelay = LOW;
delay(1);
kondisiSentuhSekarang = digitalRead(TOUCH_PIN);
}
}
} else { // Jika jumlah sentuhan genap
digitalWrite(RELAY_PIN, HIGH);
kondisiRelay = HIGH;
}
//===================================TERANG===================================
//---------------TANPA SENTUH---------------
}else if(!gelap && kondisiSentuhSekarang == LOW){ // TERANG no sentuh
digitalWrite(RELAY_PIN, LOW);
kondisiRelay = LOW;
Serial.println("Keadaan terang, lampu mati");
delay(500);
//------------------DISENTUH------------------
}else if(!gelap && kondisiSentuhSekarang == HIGH){ // Jika terang dan disentuh
if (kondisiRelay == LOW) { // Jika jumlah sentuhan ganjil
digitalWrite(RELAY_PIN, HIGH);
kondisiRelay = HIGH;
Serial.println("Keadaan terang, namun sensor disentuh, lampu nyala");
kondisiSentuhSekarang=LOW;
if(kondisiSentuhSekarang == LOW){
while(kondisiSentuhSekarang==LOW){
digitalWrite(RELAY_PIN, HIGH);
kondisiRelay = HIGH;
delay(1);
kondisiSentuhSekarang = digitalRead(TOUCH_PIN);
}
}
} else { // Jika jumlah sentuhan genap
digitalWrite(RELAY_PIN, LOW);
kondisiRelay = LOW;
}
}
// Bunyikan alarm bila gas bahaya
if(gasBahaya){
tone(BUZZER_PIN, 523, 200);
delay(300);
tone(BUZZER_PIN, 523, 200);
delay(300);
}
}