LED 7 Segment Shift Register 74HC595 ULN2003 |
Pada proyek sebelumnya dikarenakan saya masih memiliki banyak stok LED maka sayang sekali jika tidak dimanfaatkan secara maksimal untuk itu saya kembali membuat proyek yang sama seperti sebelumnya yaitu sebuah proyek led 7 segment dengan susunan led pada setiap segment nya, perbedaan dari proyek sebelumnya adalah penggunaan shift registernya yaitu jikalau proyek sebelumnya menggunakan shift register berjenis CMOS CD4094 maka pada proyek kali ini saya akan menggunakan shift register berjenis TTL 74HC595 ini dimaksudkan juga agar proyek serupa menjadi lebih fleksibel penggunaanya tidak berfokus kepada satu jenis shift register saja.
Karena sama-sama menggunakan shift register meskipun berbeda jenis akan tetapi perintah input sama-sama alhasil pada prakteknya bisa digunakan secara bersamaan namun untuk power supply nya tetap menggunakan tegangan 5 volt mengacu kepada tegangan yang direkomendasikan untuk shift register 74HC595 meskipun untuk jenis shift register CMOS CD4094 bisa sampai maksimal 15 volt akan tetapi susunan led saya buat untuk digunakan pada tegangan 5 volt juga.
Baca juga : Membuat Jam LED 7 Segment CD4094 Arduino
Rangkaian led 7 segment ini bisa digunakan untuk berbagai keperluan dalam setiap projek misalnya projek jam digital, proyek stopwatch, proyek jws ataupun proyek-proyek lainnya yang mengharuskan penggunaan display 7 segment, nah dibawah ini saya tampilkan skema led 7 segment yang menggunakan IC shift register 74HC595 dan juga saya tampilkan juga layoutnya yang telah saya desain namun membuatnya dalam dual layer karena saya tidak akan membuat sendiri pcbnya melainkan akan saya cetak di situs PCBWay.com.
Skema Modul LED seven segment 74HC595 |
Layout Modul LED seven segment 74HC595 |
Untuk download atau cetak langsung pcbnya di situs PCBWay.com file gerber nya silakan download dibawah ini.
Seperti terlihat diatas desain pcb led 7 segment 74HC595 ini saya rancang menggunakan dual layer karena saya tidak akan membuat pcb sendiri melainkan akan saya cetak di situs PCBWay.com karena kemudahan dan biaya cetak yang relatif terjangkau yakni hanya sebesar 5 dolar saya bisa mendapatkan 5 bahkan 10 keping pcb makanya saya setiap bikin pcb selalu dicetak disana, eh iya satu lagi jika belum pernah cetak pcb disana dan ingin mencoba maka ketika daftar akun PCBWay untuk pertama kalinya maka akan ada saldo welcome bonus sebesar 5 dolar untuk biaya cetak pertamamu, jadi biaya cetak pertamamu adalah seolah gratis jadi silakan daftar akun PCBWay sekarang juga melalui tautan ini.
PCBWay.com |
Dapatkan saldo welcome bonus untuk pendaftar pertama |
PCB Modul LED seven segment 74HC595 |
Setelah pesanan paket pcb dari PCBWay datang maka untuk yang penasaran seperti apa maka saya buatkan video unboxing nya dan biasanya sekali pesan saya langsung 2 sampai 3 desain pcb sekaligus dan juga ditambah dengan beberapa modul sensor-sensor dan lain sebagainya mari kita simak dulu video unboxingnya berikut ini.
#include
#include
#define DATA 4 //DS=====jam
#define CLK 3 //SH_CP
#define LATCH 2 //ST_CP
//#define led 13 //led detik
unsigned char h1, h2, m1, m2, s1, s2, d1, d2, mo1, mo2, y1, y2, y3, y4;
// 0 1 2 3 4 5 6 7 8 9
//byte digit_1[10] = {0xBD, 0x90, 0xA7, 0xB6, 0x9A, 0x3E, 0x3F, 0xB0, 0xBF, 0xBE}; //CA
//byte digit_2[10] = {0xBD, 0x90, 0xA7, 0xB6, 0x9A, 0x3E, 0x3F, 0xB0, 0xBF, 0xBE};
//====================================
byte digit_1[10] = {0xA0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //CA
///byte digit_2[10] = {0x40, 0xF9, 0x24, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//byte digit_1[10]= {0x3F, 0x06,0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //CC
//byte digit_2[10]= {0x3F, 0x06,0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//Blue tooth Pram Receive
char CH_Prm[155];
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
pinMode(DATA, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LATCH, OUTPUT);
//pinMode(led, OUTPUT);
}
void loop() {
//tampil_detik();
show_jam();
}
void show_jam()
{
DateTime now = rtc.now();
int s = now.second();
int m = now.minute();
int h = now.hour();
s1 = s % 10;
s2 = s / 10;
m1 = m % 10;
m2 = m / 10;
h1 = h % 10;
h2 = h / 10;
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[s1]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[s2]); // digitOne
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[m1]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[m2]); // digitOne
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[h1]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[h2]); // digitOne
digitalWrite(LATCH, HIGH);
//Menampilkan tanggal setiap detik ke 20 dan detik ke 40
if (((s2 == 2)&&(s1 == 0)) || ((s2 == 4)&&(s1 == 0))) {
displayOff();
delay(100);
show_tgl();
delay(2000);
displayOff();
delay(250);
}
}
void show_tgl()
{
DateTime now = rtc.now();
int y = now.year();
int mo = now.month();
int d = now.date();
y1 = y % 10;
y2 = (y / 10) % 10;
y3 = (y / 100) % 10;
y4 = (y / 1000) % 10;
mo1 = mo % 10;
mo2 = mo / 10;
d1 = d % 10;
d2 = d / 10;
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[y1]); // digit_6
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[y2]); // digit_5
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[mo1]); // digit_4
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[mo2]); // digit_3
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[d1]); // digit_2
shiftOut(DATA, CLK, MSBFIRST, ~digit_1[d2]); // digit_1
digitalWrite(LATCH, HIGH);
}
void displayOff()
{
//digitalWrite(LATCH, LOW);
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitOne
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitOne
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitTwo
shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); // digitOne
digitalWrite(LATCH, HIGH);
}
byte tgl, bln, thn, jam, mnt, dtk, hri;
void serialEvent()
{
int prm_idx = 0;
char bchar;
bchar = Serial.peek();
while ((bchar != '\n') and (prm_idx < 149))
{
if (Serial.available())
{
bchar = (char)Serial.read();
CH_Prm[prm_idx] = bchar;
prm_idx ++;
}
}
CH_Prm[prm_idx - 1] = '\0';
LoadPrm();
}
void LoadPrm()
{
String BT_Param;
if (CH_Prm[0] == 'S' and CH_Prm[1] == 'D' and CH_Prm[2] == 'T')
{
BT_Param = String(CH_Prm);
tgl = byte(BT_Param.substring(3, 5).toInt()) ;
bln = byte(BT_Param.substring(5, 7).toInt()) ;
thn = byte(BT_Param.substring(7, 9).toInt()) ;
jam = byte(BT_Param.substring(9, 11).toInt()) ;
mnt = byte(BT_Param.substring(11, 13).toInt()) ;
dtk = byte(BT_Param.substring(13, 15).toInt());
hri = byte(BT_Param.substring(15, 16).toInt()) ;
DateTime dt(thn, bln, tgl, jam, mnt, dtk, hri);
rtc.setDateTime(dt);
}
}