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.

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.

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?

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

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

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); }
keren mas, kalau aku yg bikin belum tentu 2 bulan jadi 😀
Komponennya tidak banyak kok, Mbak. Mestinya bisa cepat. Yg paling ruwet cuma pengkabelannya.
Salam
glek..iki biyen bjalare piye..??
belajar elektronika, mas. enaknya jaman sekarang SD & SMP sudah banyak praktikum elektronika.
piye kie le sinau dadi koyo ngene aku malah baru tahu jan sebelumnya bisa kayak ginian
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
Bisa Bro
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?
Sirkuit tombol sudah benar? Sudah upload program dgn benar?
mas mau tanya.. ini kan ukuran layarnya kecil mas.. bisa ngak yah layar 7segmentnya digunakan ukuran yang besar dan masalah daya jadi AC .. ?
Utk layar yg besar perlu menggunakan catu dari luar, tidak bisa dari pin Arduino.
kalau untuk setingan atmega/atmel apakah sama mas?
Settingan apa ya?
mas kalo mau pake arduino uno ada yang harus dirubah gak ya?
Gak ada perubahan, mas
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
Itu berarti belum terinstall library RTC-nya, mas.
mau tanya mas….compilernya pake apa ya…??
Compile-nya langsung dari Arduino. Mungkin pakai GCC.
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
mas mau tanya
beli led dotnya dimana? panjang gelombangnya 633nm pas banget nih mas buat proyek akhir
makasih banyak sebelumnya
Oh itu di toko elektronik ada kok
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.
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/
om yang pake RTCDS1307 tampilan LCD 16 x 2 dong gimana cara nya
mas mau tanya…..
saya kan coba program yang diatas, terus saya compile tapi kok ada peringatan
” expected ‘,’or’,’before ‘byte’ ” , ini kenapa ya Mas
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.
good job.
bagaimana menambahkan 2 fungsi tombol untuk setting manual jam dan menit ?
ini perlu bila tidak ada komputer.
mana schematik rangkaian nya?
https://dewo.files.wordpress.com/2012/11/dewo_jambret.png?w=640&h=348
Mas dewo itu seven segmen yg digunakan Anoda atau katoda
https://dewo.wordpress.com/2012/11/04/bermain-dengan-seven-segment/
Gmana nginstall Library RTC DS1307 nya Mas Dewo? Saya udah coba masih error belum bisa diupload. Tq
Ma’s setio..bisa minta file schematic Dan brd eagle nya gak?
Itu di atas ada skematiknya
File eagle sch Dan bed yg udh jadi nya gan ma’s setio
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?
Mungkin di code nya
asalamualaikum. kak kalo pake arduino uno gimana ?
tutorialnya keren mas dewo, saya mau tanya, kalo pake 7 segmen yang katoda apakah ada perubahan? trima kasih sebelumnya
Iya, ada perubahan.
cara pemrograman pake aplikasi apa ya?
itu kabel penghubung namae apa?
Pakai Arduino IDE
Punya saya mencoba seperti itu tapi kok angka nya manjer 8 semua ya mas. Gmana solusinya
Sudah di-upload programnya?
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
Salam…
Bisa kok. Skema di atas sudah lengkap kok Bro.
Silakan dibuat.
Semoga berhasil.
saya simulasikan di proteus, jalan/ normal, kalau pake 7 segment yang besar apa, harus ada penambahan component??
Kalau pakai 7-segment besar harus pakai ULN2803.
Referensi:
https://dewo.wordpress.com/2013/02/01/mendesain-antrian-poliklinikspesialis-1/
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.
ok pak makasih hehe
pak dewo terima kasih banyak ya,jamnya sudah jadi hehehe,maaf saya pemula
Mantab…