Abstrak
Pada saat kita bepergian meninggalkan rumah dan menginap di tempat lain kadang kita lupa menyalakan lampu d imalam hari sehingga lampu rumah kita gelap di saat malam hari dan hal kurang bagus buat lingkungan tetangga karena lampu kita gelap dan kurang bagus juga untuk keamanan karena dengan lampu mati rumah kita ketahuan kalo kosong.
Berangkat dari alasan tersebut di atas maka kami ada membuat perangkat /alat yg bisa di program untuk menyalakan maupun mematikan lampu maupun perangkat lain.
Dengan alat ini kita tidak akan kuatir jika bepergian dengan jangka waktu yang lama. Kita bisa set lampu atau perangkat lain mati/off jam berapa maupun lampu nyala jam berapa.
Komponen yg di butuhkan
1. Arduino Nano 1 buah
2. RTC DS 1302 1 buah
3. LCD 16x2 +I2C 1 buah
4. Saklar micro button 4 buah
5. Relay 5 V 1 buah
Harga komponen di toko online
1. Arduino Nano
2. RTC DS1302
3. LCD 16x2 + I2C
4. Button
5. Relay
PIN OUT ARDUINO NANO
Seperti kita lihat pin out Arduino nano bahwa untuk
A5 -> SCL
A4 -> SDA
Rangkaian komponen
Flow chart program
Program Arduino
//memanggil library header virtuabotixRTC
#include <virtuabotixRTC.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int i=0;int j=0; int pin10;int pin11;int pin12;
int jam_off;
int jam_on;
int menit_off;
int menit_on;
int counter=0;
int detik,menit,jam,tgl,bulan;
String detikstr,menitstr,jamstr,tglstr,bulanstr;
//Inisialisasi pin (CLK, DAT, RST)
virtuabotixRTC myRTC(6,7,8);
void setup(){
//Inisialisasi port serial arduino dengan komputer
Serial.begin(9600);
//pinMode(9, INPUT);
lcd.begin();
lcd.clear();
lcd.setBacklight(1);
pinMode(9, INPUT_PULLUP); //masuk seeting
pinMode(10, INPUT_PULLUP); // ubah data
pinMode(11, INPUT_PULLUP); //save
pinMode(12, INPUT_PULLUP); //exit without save
pinMode(3, OUTPUT); //Relay
//menit_off=10;
//menit_on=20;
//pinMode(11, OUTPUT);
//tulis waktu ff
//tulis_eeprom(1,3,"05");
//waktu on
//tulis_eeprom(4,6,"18");
jam_off=baca_eeprom(1,3).toInt();
jam_on=baca_eeprom(4,6).toInt();
menit_off=baca_eeprom(7,9).toInt();
menit_on=baca_eeprom(10,12).toInt();
//penulisan data pertama kali dan disarankan saat transfer
//ke-2 ini tidak digunakan dikarenakan akan menghapus data
//sebelumnya
//myRTC.setDS1302Time(00,53,15,6,10,10,2020);
//detik, menit, jam, hari dalam seminggu, tanggal, bulan, tahun
// 00:59:23 "Rabu" 7-September-2017
}
void tulis_waktu_off(String waktuoff)
{
tulis_eeprom(1,3,waktuoff);
}
void tulis_waktu_on(String waktuon)
{
tulis_eeprom(4,6,waktuon);
}
void tulis_menit_on(String waktuon)
{
tulis_eeprom(10,12,waktuon);
}
void tulis_menit_off(String waktuon)
{
tulis_eeprom(7,9,waktuon);
}
void tulis_eeprom(int pos1, int pos2,String strText)
{
int pj_strText=strText.length()+1;
char stringIn[pj_strText];
strText.toCharArray(stringIn,pj_strText);
// char* stringIn;
int j=-1;
for(int i = pos1; i <pos2+1; i++){
j++;
if (i<pos1+pj_strText ) {EEPROM.write(i, stringIn[j]);}
else {EEPROM.write(i, '\0');}
}
}
String baca_eeprom(int pos1,int pos2){
int i;char c;
String hasil="";
for (i=pos1;i<pos2;i++)
{
c=EEPROM.read(i);
delay(30);
hasil=hasil+String(c);
}
hasil=hasil+'\0';
return hasil;
}
void loop(){
awal:
counter++;
if (counter>=60) {lcd.setBacklight(1);counter=31;}
//memanggil fungsi untuk update data waktu
myRTC.updateTime();
//fungsi penulisan data untuk detik
//Serial.println(myRTC.seconds);
int pin9=digitalRead(9);
Serial.println("pin9=");
Serial.println(pin9);
if (pin9==0) {
lcd.setBacklight(1);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" SETTING DATA");
delay(1000);
goto Setting;
}
awal2:
detik=myRTC.seconds;
menit=myRTC.minutes;
jam=myRTC.hours;
tgl=myRTC.dayofmonth;
bulan=myRTC.month;
//if (jam>=jamon && jam<=23) {digitalWrite(12, HIGH);}
//if (jam>=0 && jam<jamoff) {digitalWrite(12, HIGH);}
if (Konversi(jam)+Konversi(menit) >=Konversi(jam_off)+ Konversi(menit_off) && Konversi(jam)+Konversi(menit) < Konversi(jam_on)+ Konversi(menit_on)) {
digitalWrite(3, LOW);
//lcd.setBacklight(0);
} else
{
digitalWrite(3, HIGH);
// lcd.setBacklight(1);
}
if (detik<=9){ detikstr="0"+ String(detik);} else{detikstr=detik;}
if (menit<=9){ menitstr="0"+ String(menit);} else{menitstr=menit;}
if (jam<=9){ jamstr="0"+ String(jam);} else{jamstr=jam;}
if (tgl<=9){ tglstr="0"+ String(tgl);} else{tglstr=tgl;}
if (bulan<=9){ bulanstr="0"+ String(bulan);} else{bulanstr=bulan;}
lcd.setCursor(0+4,0); lcd.print(jamstr);
lcd.setCursor(2+4,0); lcd.print(":");
lcd.setCursor(3+4,0); lcd.print(menitstr);
lcd.setCursor(5+4,0); lcd.print(":");
lcd.setCursor(6+4,0); lcd.print(detikstr);
lcd.setCursor(0, 1);lcd.print("" + Konversi(jam_off)+":"+Konversi(menit_off));
//lcd.setCursor(2,1); lcd.print("-");
///lcd.setCursor(3,1); lcd.print(bulanstr);
//lcd.setCursor(5,1); lcd.print("-");
lcd.setCursor(9,1); lcd.print(" "+Konversi(jam_on)+":"+Konversi(menit_on));
i++;
//if (i>5) { lcd.setBacklight(1);}
//f (i>10) { i=0; lcd.setBacklight(0);}
//if (pin9==0) {lcd.setBacklight(1);} else {lcd.setBacklight(0);}
delay( 1000);
//lcd.clear();
pin12=digitalRead(12);
if (pin12==0) {
lcd.setBacklight(1);
//lcd.clear();
counter=0;
delay(100);
}
goto awal;
Setting:
// lcd.clear();
pin10=digitalRead(10);
pin9=digitalRead(9);
pin11=digitalRead(11);
pin12=digitalRead(12);
if (pin10==0 && j==1 ) {
jam++;
if (jam==24) jam=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM");
lcd.setCursor(0, 1);lcd.print(Konversi(jam));
delay(50);
}
if (pin10==0 && j==2 ) {
menit++;
if (menit==60) menit=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT");
lcd.setCursor(0, 1);lcd.print(Konversi(menit));
delay(50);
}
if (pin10==0 && j==3 ) {
detik++;
if (detik==60) detik=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING DETIK");
lcd.setCursor(0, 1);lcd.print(Konversi(detik));
delay(50);
}
if (pin10==0 && j==4 ) {
jam_off++;
if (jam_off==24) jam_off=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM OFF");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_off)+":"+Konversi(menit_off));
tulis_waktu_off(Konversi(jam_off));
delay(50);
}
if (pin10==0 && j==5) {
menit_off++;
if (menit_off==60) menit_off=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT OFF");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_off)+":"+Konversi(menit_off));
tulis_menit_off(Konversi(menit_off));
delay(50);
}
if (pin10==0 && j==6 ) {
jam_on++;
if (jam_on==24) jam_on=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM ON");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_on)+":"+Konversi(menit_on));
tulis_waktu_on(Konversi(jam_on));
delay(50);
}
if (pin10==0 && j==0 ) {
menit_on++;
if (menit_on==60) menit_on=0;
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT ON");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_on)+":"+Konversi(menit_on));
tulis_menit_on(Konversi(menit_on));
delay(50);
}
//ubah yg akan di update
if (pin9==0) {
j++;
if (j==1) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM");
lcd.setCursor(0, 1);lcd.print(Konversi(jam));
delay(50);
}
if (j==2) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT");
lcd.setCursor(0, 1);lcd.print(Konversi(menit));
delay(50);
}
if (j==3) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING DETIK");
lcd.setCursor(0, 1);lcd.print(Konversi(detik));
delay(50);
}
if (j==4) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM OFF");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_off)+":"+Konversi(menit_off));
delay(50);
}
if (j==5) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT OFF");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_off)+":"+Konversi(menit_off));
delay(50);
}
if (j==6) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING JAM ON");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_on)+":"+Konversi(menit_on));
delay(50);
}
if (j==7) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("SETTING MENIT ON");
lcd.setCursor(0, 1);lcd.print(Konversi(jam_on)+":"+Konversi(menit_on));
j=0;
delay(50);
}
}
//save data
if (pin11==0) {
lcd.clear();
counter=0;
myRTC.setDS1302Time(detik,menit,jam,6,10,10,2020);
delay(50);
goto awal;
}
//cancel no save data
if (pin12==0) {
lcd.clear();
counter=0;
//myRTC.setDS1302Time(detik,menit,jam,6,10,10,2020);
delay(50);
goto awal;
}
delay(100);
goto Setting;
}
String Konversi(int sInput) {
if (sInput < 10)
{
return"0" + String(sInput);
}
else
{
return String(sInput);
}
}