Masih dengan 7 Segment Display ya teman-teman, dari simulasi sebelumnya mari kita simulasikan jam digital 7 Segment dengan RTC DS1307. Disini kita akan menggunakan skema simulasi yang digunakan pada rangkaian papan skor (dengan 4 display 7 segment) jadi hanya akan menampilkan menit dan jam saja. Nah untuk teman-teman yang mau mencoba dengan 6 display silahkan dikembangkan saja dari tutorial ini.
Rangkaian Proteus
Untuk komponen yang digunakan adalah arduino uno (lib Arduino Proteus bisa donlot disini), IC 74HC595, 7 Segment Common Anoda (CA), beberapa Resistor, dan RTC DS1307. IC RTC DS 1307 menggunakan cryztal osilator dengan frekuensi 32.768 KHZ. Arduino dan DS1307 berkomunikasi secara I2C dengan pin SDA (Arduino pin analog 4) dan SCL (arduino analog 5). Rangkainya di proteus seperti berikut:
Arduino Program
Untuk program, kita memerlukan library RTC yaitu RTClib ver.2.1.1 by adafruit . Kamu dapat menambahkannya via library manager. Selanjutnya silahkan untuk langsung copas program dibawah ini.
/* * Program jam digital arduino 7 segment display * www.arducoding.com */ // Date and time functions using a DS1307 RTC connected via I2C and Wire lib #include "RTClib.h" #include "Wire.h" #define DATA 2 #define CLK 3 #define LATCH 4 #define LED 11 //konfigurasi segment dengan hex / biner 8 bit = https://www.electrical4u.com/images/march16/1460385570.PNG byte segment[10]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x7, 0x7F, 0x6F}; byte ani_char[8]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x01,0x40}; int jam_puluhan = 0; int jam_satuan = 0; int menit_puluhan = 0; int menit_satuan = 0; //int detik_puluhan = 0; //int detik_satuan = 0; int led_stat = 0; RTC_DS1307 rtc; void setup () { Serial.begin(115200); pinMode(LATCH, OUTPUT); pinMode(CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(LED, OUTPUT); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); Serial.flush(); while (1) delay(10); } if (! rtc.isrunning()) { Serial.println("RTC is NOT running, let's set the time!"); led_blink(5); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } // opening animation int i = 0; while(i<8){ i++; digitalWrite(LATCH, LOW); shiftOut(DATA, CLK, MSBFIRST, ~ani_char[i]); shiftOut(DATA, CLK, MSBFIRST, ~ani_char[i]); shiftOut(DATA, CLK, MSBFIRST, ~ani_char[i]); shiftOut(DATA, CLK, MSBFIRST, ~ani_char[i]); digitalWrite(LATCH, HIGH); delay(200); } led_blink(2); delay(200); } void loop () { DateTime now = rtc.now(); //jam if (now.hour()<10){ jam_puluhan = 0; jam_satuan = now.hour(); }else{ jam_puluhan = now.hour() / 10; jam_satuan = now.hour() % 10; } //menit if (now.minute()<10){ menit_puluhan = 0; menit_satuan = now.minute(); }else{ menit_puluhan = now.minute() / 10; menit_satuan = now.minute() % 10; } //detik // if (now.second()<10){ // detik_puluhan = 0; // detik_satuan = now.second(); // }else{ // detik_puluhan = now.second() / 10; // detik_satuan = now.second() % 10; // } //led kedip-kedip if (led_stat == 0){ digitalWrite(LED, HIGH); led_stat =1; }else{ digitalWrite(LED, LOW); led_stat =0; } //for monitoring data via serial monitor //Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC);Serial.println(); //Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC);Serial.println(); digitalWrite(LATCH, LOW); shiftOut(DATA, CLK, MSBFIRST, ~segment[menit_satuan]); // display 4 shiftOut(DATA, CLK, MSBFIRST, ~segment[menit_puluhan]); // display 3 shiftOut(DATA, CLK, MSBFIRST, ~segment[jam_satuan]); // display 2 shiftOut(DATA, CLK, MSBFIRST, ~segment[jam_puluhan]); // display 1 digitalWrite(LATCH, HIGH); Serial.println(); //delay(1000); delay(500); //buat simulasi delaynya agak cepet aja } void led_blink(int blink_times){ int x = 0; while (x <= blink_times){ x++; digitalWrite(LED, HIGH);delay(200);digitalWrite(LED, LOW);delay(200); } digitalWrite(LED, HIGH); }
Compile programnya dan hasilnya kira-kira begini:
Nah.. hasil diatas hanya menggunakan 7 Segment Display 4 Digit. cobe deh untuk ditambahkan 2 digit lagi untuk menampilkan detik.. Selamat mencoba.. Untuk file Proteus dari Project Arduino digital 7 Segment Clock silahkan dapat di download pada link berikut :
0 Komentar