Membuat Jam Breadboard Kurang Dari 30 Menit

Kebetulan saya masih punya cadangan 2 IC Realtime Clock DS1307. Ditambah lagi dengan 10 buah sample DS1307+ dari Maxim Integrated yang saya terima tempo hari. Berbekal chip DS1307 yang melimpah, saya tanpa ragu iseng membuat Jambredbrod (Jam Breadboard).

Dalam membuat Jambredbrod, saya masih mengandalkan Arduino Nano. Untuk display saya menggunakan 7-segment yang praktis. Setelah semua komponen dipersiapkan, target pembuatan Jambredbrod ini ditarget kurang dari 30 menit karena komponennya sedikit dan tidak rumit. Berikut adalah skema (*tumben saya rajin membuat skema*) dan daftar komponennya.

Skema Jambredbrod

Skema Jambredbrod

Label Part Type Properties
32.768KHz Crystal package THT; frequency 16 Mhz; type crystal; pin spacing 5.08mm
7-Segment DIP – 12 pins package DIP (Dual Inline) [THT]; hole size 1.0mm,0.508mm; true; chip label 7-Segment; pins 12; pin spacing 300mil
C1 Ceramic Capacitor package 100 mil [THT, multilayer]; capacitance 100nF; voltage 6.3V
IC1 DIP – 8 pins package DIP (Dual Inline) [THT]; hole size 1.0mm,0.508mm; true; chip label DS1307; pins 8; pin spacing 300mil
LED DOT Red LED – 5mm package 5 mm [THT]; leg yes; color Red (633nm)
Nano1 Arduino Nano v2.3 processor ATmega; variant Arduino Nano v2.3
R1 1.5k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1.5kΩ; pin spacing 400 mil
R2 1.5k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1.5kΩ; pin spacing 400 mil
R3 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R4 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 220Ω; pin spacing 400 mil
R5 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R6 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R7 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R8 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R9 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R10 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R11 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
R12 1k Ω Resistor package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil
Set Pushbutton package [THT]
Vcc 3V Battery voltage 3V

Di bawah ini adalah foto-foto hasilnya. Pembuatan dimulai jam 23:30. Persiapan komponen dan perakitan kurang dari 15 menit. Hanya saja penyempurnaan program memakan waktu lebih dari 20 menit (sempat ketiduran 10 menit) sehingga total pengerjaan lebih dari 30 menit, lebih dari target, hehehe… Mungkin kalau mengulang mengerjakannya lagi bisa dikerjakan kurang dari 15 menit, hehehe… (*optimis nih yeee*)

Foto-foto dibuat saat program belum disempurnakan. Paling tidak proyek ini telah membuktikan bahwa membuat jam digital itu tidak sulit dan bisa dikerjakan dalam waktu singkat.

Tampilan Jambredbrod

Tampilan Jambredbrod

Saya menambahkan LED merah untuk berkedip bergantian dengan titik di digit ke-2 seven segment untuk menunjukkan detik (foto masih belum bergantian nyalanya). Tombol kecil itu fungsinya keren banget, yaitu untuk mencocokkan jam. Hanya dengan sekali tekan jam di DS1307 akan sinkron dengan jam di PC. Syaratnya hanya menghubungkan Arduino Nano ke PC. Jadi tidak perlu beberapa tombol untuk mengeset jam. Praktis kan?

LED detik dan tombol ajaib untuk mencocokkan jam

LED detik dan tombol ajaib untuk mencocokkan jam

Di bawah ini adalah foto dari RTC DS1307 lengkap dengan baterai CR2032, crystal 32.768KHz, capacitor dan 2 buah resistor pull-up.

Modul RTC DS1307

Modul RTC DS1307

Berikut tampilan lengkap dari Jambredbrod. Oh iya, saya menggunakan 2 buah breadboard yang disatukan.

Wah, sudah jam 01:07. Ngopreknya di tempat tidur. Begitu jadi langsung pules.

Wah, sudah jam 01:07. Ngopreknya di tempat tidur. Begitu jadi langsung pules.

Berikut adalah source code dari Jambredbrod. Seperti biasa, proyek ini open source & open hardware. Silakan untuk menggunakan dan mengembangkannya. Saya juga comot beberapa fungsi dari sana-sini. Semoga dapat bermanfaat.

/*
Emanuel Setio Dewo, setio.dewo@gmail.com
06/11/2012
"Jambret" (jam breadboard)
*/

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;

byte pin_digit[] = { 5, 4, 3, 2 };
byte pin_segmen[] = { 8, 6, 12, 10, 9, 7, 13, 11 };
byte angka[] = {
  1, 1, 1, 1, 1, 1, 0, 0, // 0
  0, 1, 1, 0, 0, 0, 0, 0, // 1
  1, 1, 0, 1, 1, 0, 1, 0, // 2
  1, 1, 1, 1, 0, 0, 1, 0, // 3
  0, 1, 1, 0, 0, 1, 1, 0, // 4
  1, 0, 1, 1, 0, 1, 1, 0, // 5
  1, 0, 1, 1, 1, 1, 1, 0, // 6
  1, 1, 1, 0, 0, 0, 0, 0, // 7
  1, 1, 1, 1, 1, 1, 1, 0, // 8
  1, 1, 1, 1, 0, 1, 1, 0 // 9
};

int jeda = 1000;
long sblm = 0;
boolean dot = LOW;
byte pin_dot = 14;
byte jam = 0;
byte menit = 0;
byte detik = 0;
byte detik0 = 0;
byte pin_tombol = 15;

void setup() {
  Serial.begin(9600);
  // init
  for (int i=2; i<=14; i++) pinMode(i, OUTPUT);
  matikan_semua();
  
  Wire.begin();
  RTC.begin();
  if (!RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  baca_waktu();
  tulis_waktu();
  //digitalWrite(pin_digit[1], HIGH);
  //for (int i = 0; i<8; i++) digitalWrite(pin_segmen[i], LOW);
  
  if (digitalRead(pin_tombol)==HIGH && millis()-sblm > jeda) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
    matikan_semua();
    delay(1000);
    sblm = millis();
  }
}

void matikan_semua() {
  for (int i=0; i<4; i++) digitalWrite(pin_digit[i], LOW);
  for (int i=0; i<8; i++) digitalWrite(pin_segmen[i], HIGH);
}

void baca_waktu() {
  if (millis() - sblm > jeda) {
    DateTime now = RTC.now();
    
    jam = now.hour();
    menit = now.minute();
    detik = now.second();
    Serial.print(jam);
    Serial.print(":");
    Serial.println(menit);

    /*
    if (dot == HIGH) dot = LOW;
    else dot = HIGH;
    digitalWrite(pin_dot, dot);
    */
    sblm = millis();
  }
}

void tulis_waktu() {
  // tuliskan jam
  if (jam < 10) {
    tulis(0, 0);
  }
  else {
    int _jam = jam / 10;
    tulis(0, _jam);
  }
  byte __jam = jam %10;
  tulis(1, __jam);
  
  // tuliskan menit
  if (menit < 10) {
    tulis(2, 0);
  }
  else {
    int _menit = menit / 10;
    tulis(2, _menit);
  }
  tulis(3, menit %10);
}

void tulis(int d, int a) {
  hapus();
  //if (digitalRead(pin_digit[d]) == LOW) digitalWrite(pin_digit[d], HIGH);
  digitalWrite(pin_digit[d], HIGH);
  int idx = a * 8;
  for (int i=0; i<8; i++) {
    if (angka[idx+i] == 1) digitalWrite(pin_segmen[i], LOW);
    else digitalWrite(pin_segmen[i], HIGH);
  }
  
  if (detik0 != detik) {
    detik0 = detik;
    if (dot == true) dot = false; else dot = true;
  }
  if (d == 1) {
    if (dot) {
      digitalWrite(pin_segmen[7], HIGH);
      digitalWrite(pin_dot, HIGH);
    }
    else {
      digitalWrite(pin_segmen[7], LOW);
      digitalWrite(pin_dot, LOW);
    }
  }
  delayMicroseconds(100);
}

void hapus() {
  for (int i=0; i<4; i++) digitalWrite(pin_digit[i], LOW);
  for (int i=0; i<8; i++) digitalWrite(pin_segmen[i], HIGH);
}

Iklan

Tentang Emanuel Setio Dewo

Tumbuh, Berkembang, Berbuah...
Pos ini dipublikasikan di Arduino, Code, Dewo, Elektronika, Personal, Prototype dan tag , , , , . Tandai permalink.

55 Balasan ke Membuat Jam Breadboard Kurang Dari 30 Menit

  1. Lidya berkata:

    keren mas, kalau aku yg bikin belum tentu 2 bulan jadi 😀

  2. zedeen berkata:

    glek..iki biyen bjalare piye..??

  3. piye kie le sinau dadi koyo ngene aku malah baru tahu jan sebelumnya bisa kayak ginian

  4. JOYONOTO berkata:

    salam..
    bro bisa gak orang awam bikin jam ginian? tolong donk kl bisa detail komponen + belinya dimana. mumpung cuti ni mo otak-atik.. hehe.. trims ya..

    bisa emal bro..

    salut

  5. adi berkata:

    aku cba cara yg di atas, tpi gak pke 7segment dulu, krna blum punya, tpi kan bsa dilihat di serial monitor, tp kok gak bsa ngakirin jamnya ya, mslahnya dimna ya mas?

  6. afrizal berkata:

    mas mau tanya.. ini kan ukuran layarnya kecil mas.. bisa ngak yah layar 7segmentnya digunakan ukuran yang besar dan masalah daya jadi AC .. ?

  7. afrizal berkata:

    kalau untuk setingan atmega/atmel apakah sama mas?

  8. ryo kuncoro berkata:

    mas kalo mau pake arduino uno ada yang harus dirubah gak ya?

  9. jumantoro berkata:

    lho mas kok saya verivikasi masih ada errornya Di RTCnya

    sketch_nov04a.cpp:8:20: error: RTClib.h: No such file or directory
    sketch_nov04a:8: error: ‘RTC_DS1307’ does not name a type
    sketch_nov04a.cpp: In function ‘void setup()’:
    sketch_nov04a:42: error: ‘RTC’ was not declared in this scope
    sketch_nov04a:44: error: ‘DateTime’ was not declared in this scope
    sketch_nov04a.cpp: In function ‘void loop()’:
    sketch_nov04a:55: error: ‘RTC’ was not declared in this scope
    sketch_nov04a:55: error: ‘DateTime’ was not declared in this scope
    sketch_nov04a.cpp: In function ‘void baca_waktu()’:
    sketch_nov04a:69: error: ‘DateTime’ was not declared in this scope
    sketch_nov04a:69: error: expected `;’ before ‘now’
    sketch_nov04a:71: error: ‘now’ was not declared in this scope

  10. Galih berkata:

    mau tanya mas….compilernya pake apa ya…??

  11. rokhmad berkata:

    sippppppp….. makasih informasinya, bmampir sini gan.. ada e-book membuat jam digital : sippp.. postingannya … silahkan mampir my blog untuk buat jam digital dengan gampang dilengkapi dengan e-booknya.. : http://rokhmad.blogspot.com/2014/10/membuat-jam-digital-sendiri-dengan-7.html

  12. ridwan berkata:

    mas mau tanya
    beli led dotnya dimana? panjang gelombangnya 633nm pas banget nih mas buat proyek akhir

    makasih banyak sebelumnya

  13. M. Mulia Maulana berkata:

    salam mas dewo,
    dimana bisa mendapatkan library RTC_DS1307? saya udah coba download dari web arduino.cc tapi ketika dicompile, library-nya tidak sesuai dengan program yang mas tulis diatas.
    terima kasih sebelumnya.

  14. Eko Rudiawan berkata:

    Hy, kita juga ada loh tutorial cara membuat jam digital yang simple dan gak pakai ribet, cek disini ya http://eko-rudiawan.com/membuat-jam-digital-tanpa-program-dengan-dot-matrix-p10/

  15. Hadi Arya berkata:

    om yang pake RTCDS1307 tampilan LCD 16 x 2 dong gimana cara nya

  16. lfauzilukman berkata:

    mas mau tanya…..
    saya kan coba program yang diatas, terus saya compile tapi kok ada peringatan
    ” expected ‘,’or’,’before ‘byte’ ” , ini kenapa ya Mas

  17. lfauzilukman berkata:

    oh ya mas Dewo, mau nanya lagi. fungsi tombol push button rangkaian itu untuk apa…. ?
    semisal saya buat rangkaian jam digital seperti di atas tapi tidak memakai tombol push button bisa ngaak yah…

    • Tombol kecil itu fungsinya keren banget, yaitu untuk mencocokkan jam. Hanya dengan sekali tekan jam di DS1307 akan sinkron dengan jam di PC. Syaratnya hanya menghubungkan Arduino Nano ke PC. Jadi tidak perlu beberapa tombol untuk mengeset jam.

  18. didot17 berkata:

    good job.
    bagaimana menambahkan 2 fungsi tombol untuk setting manual jam dan menit ?
    ini perlu bila tidak ada komputer.

  19. Muhammad Fadhli berkata:

    mana schematik rangkaian nya?

  20. Mas dewo itu seven segmen yg digunakan Anoda atau katoda

  21. Kadek Paulus berkata:

    Gmana nginstall Library RTC DS1307 nya Mas Dewo? Saya udah coba masih error belum bisa diupload. Tq

  22. memet berkata:

    mohon pencerahannya mas.buat newbi….
    pin yang tersisa cuma 2 pin digital. dari pin digital 1 saya sudah coba menambah alarm yang selanjutnya menyalakan modul relai. tapi kenapa relay saya menyala mebgikuti detak jam?

  23. nelly berkata:

    asalamualaikum. kak kalo pake arduino uno gimana ?

  24. radipta berkata:

    tutorialnya keren mas dewo, saya mau tanya, kalo pake 7 segmen yang katoda apakah ada perubahan? trima kasih sebelumnya

  25. iqlimah berkata:

    cara pemrograman pake aplikasi apa ya?
    itu kabel penghubung namae apa?

  26. sepnukurniawan berkata:

    Punya saya mencoba seperti itu tapi kok angka nya manjer 8 semua ya mas. Gmana solusinya

  27. Tri Ryadi berkata:

    salam bro…
    bisa gak orang awam bikin jam ginian ya? tolong donk kalo bisa detail komponen + skema boardnya kalo pake eagle, sama belinya dimana. lagi mau belajar2 Elektronika ni. hehe.. trims ya..

    bisa emal bro..

    sukses bro

  28. bayu berkata:

    saya simulasikan di proteus, jalan/ normal, kalau pake 7 segment yang besar apa, harus ada penambahan component??

  29. bayu segara berkata:

    pak kalau pakai proteus gimana,maksud saya pakai 7 segment di software proteus di situ kan ada keterangan abcdefg,dp,dan juga 1234. itu gimana pak penjelasannya? terimakasih sebelumnya maaf pemula

    • Jadi setiap segmen itu ada kodenya: a,b,c,d,e,f,g dan dp (titik). Jadi untuk menyalakan angka 1 perlu menyalakan segmen b dan c. Kalau mau menyalakan angka 2 perlu menyalakan segmen a, b, d, e dan g. Kurang lebih begitu.

      Maaf saya tidak tahu dengan proteus. Salam.

  30. bayu segara berkata:

    ok pak makasih hehe

  31. bayu segara berkata:

    pak dewo terima kasih banyak ya,jamnya sudah jadi hehehe,maaf saya pemula

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s