Sunday, June 27, 2021

Pembuatan Saklar otomatis terprogram dengan menggunakan Arduino Nano

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);

  }

}

 

 

Membuat Counter mundur menuju Azan dengan Arduino Wemos

Membuat Counter Mundur Menuju Azan dengan Arduino Wemos  #include <Wire.h> #include "RTClib.h" #include "SPI.h" #i...