Circuit Documentation
Summary
This circuit is designed for fire detection and response. It utilizes an Arduino UNO microcontroller to read data from a flame sensor and control a relay, which in turn controls a water pump. Additionally, the circuit includes an I2C LCD for displaying messages and a buzzer for audible alerts. The system also incorporates a DS1302 RTC module for timekeeping.
Component List
Arduino UNO
- Description: A microcontroller board based on the ATmega328P.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
16x2 I2C LCD
- Description: A 16x2 character LCD display with I2C interface.
- Pins: GND, VCC, SDA, SCL
12V Single Channel Relay
- Description: A relay module for switching high voltage devices.
- Pins: NC, COM, NO, IN, GND, VCC
Mini Diaphragm Water Pump
- Description: A small water pump powered by 12V.
- Pins: Positive (+), Negative (-)
12V 7Ah Battery
- Description: A 12V lead-acid battery.
- Pins: 12v +, 12v -
KY-026 Flame Sensor
- Description: A flame sensor module for detecting fire.
- Pins: AO, GND, VCC, DO
Buzzer
- Description: A simple piezoelectric buzzer.
- Pins: PIN, GND
DS1302 RTC
- Description: A real-time clock module for timekeeping.
- Pins: VCC, GND, CLK, DATA, RST
Wiring Details
Arduino UNO
- D9: Connected to Buzzer PIN
- D2: Connected to Relay IN
- D8: Connected to DS1302 RTC RST
- D7: Connected to DS1302 RTC DATA
- D6: Connected to DS1302 RTC CLK
- GND: Connected to LCD VCC, DS1302 RTC VCC, Flame Sensor VCC, Relay VCC
- 5V: Connected to LCD GND, DS1302 RTC GND, Buzzer GND, Flame Sensor GND, Relay GND
- A0: Connected to Flame Sensor AO
- SCL: Connected to LCD SCL
- SDA: Connected to LCD SDA
16x2 I2C LCD
- VCC: Connected to Arduino GND
- GND: Connected to Arduino 5V
- SDA: Connected to Arduino SDA
- SCL: Connected to Arduino SCL
12V Single Channel Relay
- IN: Connected to Arduino D2
- VCC: Connected to Arduino GND
- GND: Connected to Arduino 5V
- NC: Connected to Water Pump Positive (+)
- COM: Connected to Battery 12v +
Mini Diaphragm Water Pump
- Positive (+): Connected to Relay NC
- Negative (-): Connected to Battery 12v -
12V 7Ah Battery
- 12v +: Connected to Relay COM
- 12v -: Connected to Water Pump Negative (-)
KY-026 Flame Sensor
- AO: Connected to Arduino A0
- GND: Connected to Arduino 5V
- VCC: Connected to Arduino GND
Buzzer
- PIN: Connected to Arduino D9
- GND: Connected to Arduino 5V
DS1302 RTC
- VCC: Connected to Arduino GND
- GND: Connected to Arduino 5V
- CLK: Connected to Arduino D6
- DATA: Connected to Arduino D7
- RST: Connected to Arduino D8
Code Documentation
#include <virtuabotixRTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi RTC pada pin 6, 7, dan 8 (sesuaikan jika berbeda)
virtuabotixRTC myRTC(6, 7, 8); // C D R
// Inisialisasi LCD I2C pada alamat 0x27 (sesuaikan jika berbeda) dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
int flameSensorPin = A0;
int buzzerPin = 9;
int threshold = 950;
int relay = 2;
void setup() {
pinMode(flameSensorPin, INPUT); // Atur flame sensor sebagai input
pinMode(buzzerPin, OUTPUT); // Atur buzzer sebagai output
pinMode(relay, OUTPUT); // Atur relay sebagai output
Serial.begin(9600); // Memulai komunikasi serial untuk debugging
// Inisialisasi LCD
lcd.init(); // Mengganti lcd.begin() dengan lcd.init()
lcd.backlight(); // Menyalakan backlight LCD
lcd.setCursor(0, 0);
lcd.print("Fire Detection");
delay(2000); // Tampilkan pesan awal selama 2 detik
lcd.clear();
// Tampilkan pesan untuk mengatur waktu RTC
Serial.println("Masukkan waktu RTC (format: HH:MM:SS DD/MM/YYYY):");
}
void loop() {
// Mengecek apakah ada input waktu baru yang diterima dari Serial Monitor
if (Serial.available() > 0) {
String inputTime = Serial.readString(); // Membaca input waktu dari serial
setRTCTime(inputTime); // Set RTC time berdasarkan input
}
myRTC.updateTime(); // Update waktu dari RTC
int sensorValue = analogRead(flameSensorPin); // Membaca nilai dari flame sensor
if (sensorValue < threshold) { // Jika nilai sensor lebih rendah dari threshold (terdeteksi api)
digitalWrite(relay, HIGH); // Aktifkan relay
// Tampilkan waktu terdeteksi api di Serial Monitor
Serial.print("Terdeteksi Api Pada Waktu : ");
Serial.print(myRTC.dayofmonth); // Tanggal
Serial.print("/");
Serial.print(myRTC.month); // Bulan
Serial.print("/");
Serial.print(myRTC.year); // Tahun
Serial.print(" ");
Serial.print(myRTC.hours); // Jam
Serial.print(":");
Serial.print(myRTC.minutes); // Menit
Serial.print(":");
Serial.println(myRTC.seconds); // Detik
// Tampilkan pesan "Fire Detected" di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fire Detected!");
lcd.setCursor(0, 1);
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.print(" ");
lcd.print(myRTC.dayofmonth); // Tanggal
lcd.print("/");
lcd.print(myRTC.month); // Bulan
lcd.print("/");
lcd.print(myRTC.year); // Tahun
while (analogRead(flameSensorPin) < threshold) {
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(100);
}
digitalWrite(relay, LOW);
} else {
digitalWrite(buzzerPin, LOW);
digitalWrite(relay, LOW);
// Tampilkan nilai sensor dan waktu standby di Serial Monitor
Serial.print("Nilai Sensor: ");
Serial.println(sensorValue);
Serial.print("System Time: ");
Serial.print(myRTC.dayofmonth); // Tanggal
Serial.print("/");
Serial.print(myRTC.month); // Bulan
Serial.print("/");
Serial.print(myRTC.year); // Tahun
Serial.print(" ");
Serial.print(myRTC.hours); // Jam
Serial.print(":");
Serial.print(myRTC.minutes); // Menit
Serial.print(":");
Serial.println(myRTC.seconds); // Detik
Serial.println("---------Standby---------");
// Tampilkan waktu standby di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System Standby");
lcd.setCursor(0, 1);
lcd.print(myRTC.hours);
lcd.print(":");
lcd.print(myRTC.minutes);
lcd.print(" ");
lcd.print(myRTC.dayofmonth); // Tanggal
lcd.print("/");
lcd.print(myRTC.month); // Bulan
lcd.print("/");
lcd.print(myRTC.year); // Tahun
}
delay(1000); // Jeda 1
