Membuat Timer ON OFF dengan Arduino

Seringkali kita memerlukan peralatan otomatis seperti lampu, kipas angin, pompa ataupun peralatan listrik lainnya yang bisa menyala dan mati secara otomatis sesuai dengan waktu yang kita atur. Dengan proyek ini Anda akan dapat mengontrol untuk menghidupkan dan mematikan perangkat Anda antara waktu yang Anda inginkan. Kami akan menggunakan arduino, LCD dan RTC 1307 untuk menunjukkan dan mengontrol waktu. Anda dapat mengatur jam “ON” dan jam “OFF”, dengan 4 tombol tekan yang memungkinkan Anda menambah atau mengurangi “SET POINT”. Juga, Anda akan belajar membuat jam dengan arduino. Saya menyertakan skema fritzing dan video, sehingga Anda dapat membuat proyek ini.

Bahan yang diperlukan

  • Arduino Uno
  • RTC 1307 module
  • LCD 16X2
  • 5V relay module
  • 10K trimpot
  • 1K resistor
  • 10K resistors x 4
  • Push buttons x 4
  • Breadboard dan jumpers secukupnya.

Pemasangan RTC, LCD dan Arduino

Hubungkan tegangan 5v dan GROUND,

Hubungkan Pin LCD ke pin Arduino

  • VSS – GND
  • VDD – 5V
  • VO – Trimpot center
  • RS – pin 2
  • RW – GND
  • EN atau E – pin 3
  • D0 – NC
  • D1 – NC
  • D2 – NC
  • D3 – NC
  • D4 – pin 4
  • D5 – pin 5
  • D6 – pin 6
  • D7 – pin 7
  • A – 5V
  • 16 K – GND dengan resistor 1K
  • Trimpot – 5V and GND

Hubungkan RTC ke Arduino

  • SDA – pin 4
  • SCL – pin 5
  • GND dan 5V

Setting Waktu

Sekarang kita harus mengatur jam. Jalankan kode sketch di bawah ini. Sketch ini mengambil Tanggal dan Waktu sesuai dengan komputer yang Anda gunakan (tepat saat Anda mengkompilasi kode) dan menggunakannya untuk memprogram RTC. Jika waktu komputer Anda tidak diatur dengan benar, Anda harus memperbaikinya terlebih dahulu. Kemudian Anda harus menekan tombol Download untuk mengkompilasi.

// Fungsi tanggal dan waktu menggunakan DS1307 RTC yang terhubung melalui I2C dan Wire lib

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC tidak aktif!");

// baris berikut menetapkan RTC ke tanggal & waktu pada saat sketch ini dikompilasi
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since 1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calculate a date which is 7 days and 3
DateTime future (now.unixtime() + 7 * 8);
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}

Menampilkan Waktu

Dengan waktu yang ditentukan, buka dan Download kode sketch di bawah ini . Trimpot 10K adalah untuk mengatur kontras lcd. Putar untuk menyesuaikan kontras dan melihat angka dengan jelas.



#include <LiquidCrystal.h>   
#include <RTClib.h>
#include <Wire.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 


RTC_DS1307 RTC;                     

void setup(){
     Wire.begin();
     RTC.begin();
     lcd.begin(16, 2); 
     lcd.setCursor(0,0);  
     lcd.print("TIME");  
}

void loop(){

DateTime now = RTC.now();        
now = RTC.now();
lcd.setCursor(5,0);                 
if(now.hour() < 10)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC); 
lcd.print(':');
if(now.minute() < 10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC); 
lcd.print(':');
if(now.second() < 10)
{
lcd.print("0");
}
lcd.print(now.second(), DEC); 
}

Memasang Tombol Timer dan Relay

Sekarang kita tambahkan tombol push dan relay. Ikuti skema di atas.

Baca juga :  Membuat Robot Self Balancing dengan Arduino

Jadi, Anda memiliki pin 8, 9, 10 dan 11 yang terhubung ke gnd dengan resistor 10K (LOW). Saat Anda menekan, itu akan terhubung ke 5V (HIGH).

Relay terhubung ke pin 12. Dengan relay Anda dapat mengontrol perangkat listrik Anda seperti lampu, kipas angin, pompa, dll. Hati-hati dengan beban maksimal relay! Jangan menggunakan perangkat listrik yang melebihi beban arus Relay.

Setting Timer

Buka dan kompilasi kode sketch di bawah ini. Anda akan melihat waktu saat ini, set point “ON” dan set point “OFF”. Waktu default “ON” dan “OFF” adalah 12.

Timer berjalan dari 0 hingga 23 jam, dan seterusnya. Tekan tombol untuk mengubah titik setel ke atas dan ke bawah. Timer akan segera dimulai jika berada di antara nilai pengaturan. Jika tidak, akan menunggu hingga jam “ON”.

#include <LiquidCrystal.h>   
#include <RTClib.h>
#include <Wire.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 
RTC_DS1307 RTC;                      

const int DOWN_BUTTONon =9;         
const int UP_BUTTONon =8;
const int DOWN_BUTTONoff =11;       
const int UP_BUTTONoff =10;
const int Relay =12;              

boolean lastDownONButton = LOW;
boolean currentDownONButton = LOW;
boolean lastUpONButton = LOW;
boolean currentUpONButton = LOW;
boolean lastDownOFFButton = LOW;
boolean currentDownOFFButton = LOW;
boolean lastUpOFFButton = LOW;
boolean currentUpOFFButton = LOW;

int set_on = 12;         
int set_off= 12;         

void setup(){
  pinMode(Relay, OUTPUT);
  
     Wire.begin();
     RTC.begin();
     lcd.begin(16, 2);  
     
     lcd.setCursor(0,0);   
     lcd.print("TIME");
     lcd.setCursor(0,1);
     lcd.print("ON");     
     lcd.setCursor(6,1);
     lcd.print("OFF");   
}

boolean debounce(boolean last, int pin)
{
boolean current = digitalRead(pin);
if (last != current)
{
delay(5);
current = digitalRead(pin);
}
return current;
}
   
void loop(){
 
DateTime now = RTC.now();         
now = RTC.now();

lcd.setCursor(5,0);                 
if(now.hour() < 10)
{
lcd.print("0");
}
lcd.print(now.hour(), DEC);  
lcd.print(':');
if(now.minute() < 10)
{
lcd.print("0");
}
lcd.print(now.minute(), DEC);  
lcd.print(':');
if(now.second() < 10)
{
lcd.print("0");
}
lcd.print(now.second(), DEC);  

currentDownONButton = debounce(lastDownONButton, DOWN_BUTTONon);
currentUpONButton = debounce(lastUpONButton, UP_BUTTONon);
currentDownOFFButton = debounce(lastDownOFFButton, DOWN_BUTTONoff);
currentUpOFFButton = debounce(lastUpOFFButton, UP_BUTTONoff);

if (lastDownONButton== LOW && currentDownONButton == HIGH)
{
if(set_on>0){     
set_on--;        
}
else{
  lcd.setCursor(3,1);
  lcd.print("0");
}
}

else if (lastUpONButton== LOW && currentUpONButton == HIGH)
{
  if(set_on<23){    
  set_on++;
}
else{
  lcd.setCursor(3,1);
  lcd.print("23");
}
}

 lcd.setCursor(3,1);
if(set_on < 10){   
  lcd.print("0");
}
lcd.print(set_on);
lastDownONButton = currentDownONButton;
lastUpONButton = currentUpONButton;

if (lastDownOFFButton== LOW && currentDownOFFButton == HIGH)
{
if(set_off>0){     
set_off--;
}
else{
  lcd.setCursor(10,1);
  lcd.print("0");
}
}

else if (lastUpOFFButton== LOW && currentUpOFFButton == HIGH)
{
  if(set_off<23){    
  set_off++;
}
else{
  lcd.setCursor(10,1);
  lcd.print("23");
}
}

lcd.setCursor(10,1);
if(set_off < 10){   
  lcd.print("0");
}
lcd.print(set_off);
lastDownOFFButton = currentDownOFFButton;
lastUpOFFButton = currentUpOFFButton;

if(set_on == set_off){
   digitalWrite(Relay, LOW);
}

if(set_on < set_off){
  
             if(now.hour() >= set_on && now.hour() < set_off ){             
             digitalWrite(Relay, HIGH);
             }
             else if(now.hour() >= set_off) {
             digitalWrite(Relay, LOW);
             }
             else{
             digitalWrite(Relay, LOW);
             }
}
if (set_on > set_off){

            if(now.hour() >= set_on && now.hour() <= 23){                  //Start
            digitalWrite(Relay, HIGH);  
            }
            else if(now.hour() < set_off){
            digitalWrite(Relay, HIGH);
            }
            else if(now.hour() >= set_off && now.hour() < set_on){
            digitalWrite(Relay, LOW);  
            }
}

}

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *