Pengaturan Jam Digital Manual tanpa Keypad

Indobot Update

Halo sahabat indobot.

Sedang ada project apa hari ini?

Sudah pernah membuat jam digital? banyak cara untuk membuat jam digital dengan menggunakan arduino atau mikrokontroler lainnya. Mulai dari pembuatan dengan sistem online, ada juga dengan menggunakan device tambahan seperti RTC, dan bisa juga dengan membuatnya secara manual (tanpa menggunakan tambahan).

Pembuatan jam digital secara online, dapat menggunakan NTP server. NTP Server ini dapat terakses dengan menghubungkan mikrokontroler dengan modul wifi atau mikrokontroler wifi. Wifi ini digunakan untuk menghubungkan dengan internet untuk mengaksesnya. NTP server digunakan untuk singkronisasi waktu dalam sebuah jaringan internet. aplikasi NTP sudah berjalan dalam internet tanpa berhenti sedikitpun.

RTC sama seperti NTP Server, di mana update waktu sudah dilakukan secara otomatis tanpa harus diatur terlebih dahulu. Penggunaan RTC ini biasanya digunakan untuk membuat jam digital tanpa harus adanya koneksi internet.

Sedangkan untuk cara manual, waktu disetting secara manual (dari waktu dan tanggal). Kelebihan dari jam digital dengan cara manual adalah tidak diperlukannya device tambahan bahkan koneksi internet. Lebih hemat? Jelas lebih hemat. Namun apakah bisa dibuat seakurat NTP Server atau RTC?

Nah pada kali ini kita akan membuat Jam Digital Manual. Jam Digital ini menggunakan library Timer untuk membuat waktu dengan akurasi per detik yang baik. Berbeda jika kita menggunakan delay sebagai penghitung detik. Selain itu, kita juga menggunakan tombol untuk mengatur time agar kita tidak perlu mengupdate dengan edit program di Arduino IDE.

Bagaimana cara membuatnya? yuk kita simak.

 

Belajar Elektronika, Arduino, dan juga IoT step by step dengan bantuan tangga belajar? Daftar sekarang dan dapatkan PROMO

 

Alat dan Bahan

Alat dan juga bahan untuk project ini adalah sebagai berikut.

  1. Software Arduino ID
  2. Arduino Uno
  3. LCD 16×2
  4. LCM 1602 IIC (Driver LCD)
  5. Button
  6. Resistor
  7. Projectboard
  8. Kabel jumper
Rangkaian

Susun device di atas menjadi rangkaian seperti berikut. Pastikan semua terhubung dengan baik.

baca juga: Tutorial Arduino UNO R3 Membuat Jam Digital dengan Modul RTC DS 1302

Program

Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut. Perhatikan keterangan (comment) untuk memahami program dengan baik.

 

 
//Program setting Jam Digital Manual oleh Indobot 
#include <LiquidCrystal_I2C.h> //library untuk LCD
#include <TimeLib.h> //library untuk time
LiquidCrystal_I2C lcd(0x27, 16, 2); //alamat I2C dan ukuran LCD
#define buttonTambah 2 //Tombol untuk mengatur angka
#define buttonPindah 3 //tombol untuk memindah pengaturan angka
#define buttonSetting 4 //tombol untuk melakukan setting
int tambahDetik_p = 0; //memberikan nilai detik puluhan
int tambahDetik_s = 0; //memberikan nilai detik satuan
int tambahMenit_p = 0; //memberikan nilai menit puluhan
int tambahMenit_s = 0; //memberikan nilai menit satuan
int tambahjam_p = 0; //memberikan nilai jam puluhan
int tambahjam_s = 0; //memberikan nilai jam satuan
int nilai = 0; //nilai angka
int bTambah = 0; //hasil pembacaan tombol tambah
int bPindah = 0; //hasil pembacaan tombol pindah
int bSetting = 0; //hasil pembacaan tombol setting
int nilaiPindah = 0; //nilai untuk memindah kursor
int jam = 0; //jam hasil setting
int menit = 0; //menit hasil setting
int detik = 0; //detik hasil setting
bool atur = 0; //mengatur pilihan setting dan hasil


void setup()
{
	
	lcd.init();  //inisialisasi LCD
  Serial.begin(9600); //Serial monitor menggunakan 9600
  pinMode(buttonTambah, INPUT); //inisialisasi button menjadi input
  pinMode(buttonPindah, INPUT); //inisialisasi button menjadi input
	lcd.backlight(); //menyalakan latar LCD
}

void loop()
{ //membaca hasil masukan dari button
  bTambah = digitalRead(buttonTambah); 
  bPindah = digitalRead(buttonPindah);
  bSetting = digitalRead(buttonSetting);
  settingManual(); //function untuk setting manual
 
}

// Function untuk Setting jam secara manual
void settingManual(){
  if (bSetting ==HIGH){
    atur = !atur;
    delay(500);
  }
  if (atur == 1) {
    pengaturanWaktu();
  }
  else if (atur == 0){
   hasilpengaturan();
  }
}

// Function untuk menampilkan hasil setting jam
void hasilpengaturan(){
  lcd.setCursor(0,0);
  lcd.print("Pukul :         ");
  lcd.setCursor(0,1);
  printkurangdarinol(hour());
  lcd.print(":");
  printkurangdarinol(minute());
  lcd.print(":");
  printkurangdarinol(second());
  //Serial.println(" ");
  Serial.println(second());
  delay (1000);
}

// Function untuk menuliskan angka nol ketika jam hanya ada 1 digit
void printkurangdarinol(int data){
  if (data >= 0 && data < 10){
    lcd.print('0');
  }
  lcd .print(data);
}

// Function untuk setting waktu dengan button
void pengaturanWaktu(){
  lcd.setCursor(0,0);
  lcd.print("Pengaturan Waktu");
  if(bPindah == HIGH){
    nilaiPindah++;
    if (nilaiPindah == 6) {
      nilaiPindah = 0;
    }
    nilai = 0;
  }
  if(nilaiPindah == 0){
    setNilai(0,2);
    tambahjam_p = nilai;
  }
  else if (nilaiPindah == 1){
    if(tambahjam_p > 1) setNilai(1,3);
    else setNilai(1,9);
    tambahjam_s = nilai;
  }
  else if (nilaiPindah == 2){
    setNilai(3,5);
    tambahMenit_p = nilai;
  }
  else if (nilaiPindah == 3){
    setNilai(4,9);
    tambahMenit_s = nilai;
  }
  else if (nilaiPindah == 4){
    setNilai(6,5);
    tambahDetik_p = nilai;
  }
  else if (nilaiPindah == 5){
    setNilai(7,9);
    tambahDetik_s = nilai;
  }
  jam = tambahjam_p*10 + tambahjam_s;
  menit = tambahMenit_p*10 + tambahMenit_s;
  detik = tambahDetik_p*10 + tambahDetik_s;
  setTime(jam,menit,detik,0,0,0);
}


// Function untuk mengontrol nilai
void setNilai(int kolom, int maks){
  if (bTambah == HIGH){
    nilai++;
    if (nilai > maks) {
      nilai = 0;
    }
    lcd.setCursor(kolom,1);
    lcd.print (nilai);
   // Serial.println (nilai);
    delay(500);
  }
  else {
    //tambah = nilai;
    lcd.setCursor(kolom,1);
    lcd.print (" ");
    delay(100);
    lcd.setCursor(kolom,1);
    lcd.print (nilai);
    delay(500);
  }
}

baca juga: Menampilkan Tanggal dan Waktu pada LCD dengan NTP Server

Program di atas menggunakan 3 tombol dengan fungsi pilihan Setting, Menambah angka, dan kemudian memindah kursor untuk edit angka. Cara penggunaannya hampir sama seperti setting jam tangan digital.

Klik Setting untuk mengatur waktu. Kursor akan menandai dengan kedip dari angka yang akan mengedit. klik tombol menambah angka untuk menaikkan angka dari 0-9 (dan maksimal jam, menit, dan detik). Jika sudah, klik tombol memindah kursor. Ini berfungsi untuk menggeser angka yang akan diubah dari jam hingga detik. Setelah selesai, klik setting untuk kembali ke tampilan jam.

Selamat mencoba.


Mau belajar elektronika dasar? Arduino? atau bahkan Internet of Things? Ikuti kursus online Indobot Academy!

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tinggalkan komentar

whatsapp whatsapp