Silulasi Proteus - Jam Digital Arduino 7 Segment dengan RTC DS1307
Masih dengan 7 Segment Display ya teman-teman, dari simulasi sebelumnya mari kita simulasikan jam digital 7 Segment dengan RTC DS1307. Kita akan mulai dengan jumlah tampilan 4 display (Jam- menit). Selanjutnya nanti akan kita tambah menjadi 2 digit lagi untuk menampilkan nilai detik. Nilai jam, menit dan detik akan ditampilkan dalam 2 Digit.
Simulasi Jam 4 Digit (Jam, Menit)
1. Rangkaian Proteus jam 4 digit
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:
2. Arduino Program jam 4 digit
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 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; } //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); }
Pada Arduino IDE, Patikan board yang dipilih adalah arduino uno.
Selanjutnya pastikan Arduino IDE dapat melakukan verify code dengan pilih menu File > Preferences > Check list pada opsi Verify code after Upload
Setelah semua dipastikan, langkah selanjutnya dalah Compile programnya dengan klik tombol Verify. Akan diperoleh file dengan ekstensi .hex pada vie compiling process
Copy lokasi file .hex tersebut berada (blok kemudian CTRL+C), balik ke rangkaian proteus, double klick pada komponen arduino. Selanjutnya paste lokasi file .hex tadi ke bagian Upload hex file . Pilih OK kalau udah beres!
Jalankan Simulasi proteusnya 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 4 Digit 7 Segment Digital Clock silahkan dapat di download pada link berikut :
Simulasi Jam 6 Digit (Jam, Menit, Detik)
1. Rangkaian Proteus jam 6 digit
/* * 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]); 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[detik_satuan]); // display 6 shiftOut(DATA, CLK, MSBFIRST, ~segment[detik_puluhan]); // display 5 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); }
Pada Arduino IDE, Patikan board yang dipilih adalah arduino uno kemudian Compile programnya sebagaimana langkah yang sudah dijelaskan pada proses diatas (4 Digit 7 Segment) dan hasilnya kira-kira begini:
Gabung dalam percakapan