Minggu, 03 April 2022

Membuat Jam LED 7 Segment CD4094 Arduino

 

Jam digital LED seven segment CD4094
Jam digital LED seven segment CD4094

Pada proyek-proyek sebelumnya saya telah membuat rangkaian modul seven segment yang dibuat dari display bekas tepatnya display bekas wartel yang menggunakan IC shift register CMOS CD4094 dan tentunya led seven segment yang jumlahnya sebanyak 16 digit dengan masing-masing shift register CMOS CD4094 kemudian saya jadikan modul seven segment empat digit dibagi dua yang dipisahkan dengan titik dua yang pcbnya dicetak di PCBWay dan seperti inilah hasilnya. 


Modul display seven segment
Modul display seven segment

Tujuannya adalah untuk membuat jam jadwal waktu sholat digital menggunakan seven segment karena ukuran led seven segmentnya juga kecil sekitar 0.8" sehingga sangat cocok untuk digunakan pada proyek tersebut namun untuk ukuran jamnya biasanya harus memakai ukuran yang lebih besar minimal 2" agar lebih jelas kelihatan.


Baca juga : Universal Minimum Sistem Trainer Kit Atmega328


Dirumah saya memiliki banyak sekali led 5mm bekas sehingga menjadikan saya berkeinginan untuk memanfaatkannya menjadi led seven segment yang ukurannya cukup besar, dulu pun saya sebelum seperti saat ini yang selalu mencetak pcb di PCBWay saya pernah membuat led seven segment dari led bekas tersebut dan menjadikannya jam digital seperti video berikut ini. 



Kini setelah saya tau situs PCBWay.com yaitu sebuah tempat cetak pcb profesional dengan kualitas premium namun dengan harga terjangkau yakni hanya sebesar $5 saja saya sudah bisa mendapatkan pcb 5 keping bahkan sampai 10 keping pcb dengan berbagi pilihan warna menarik didukung dengan pelayanan yang baik juga banyak menyediakan program menarik . Disamping keunggulan tadi ada lagi untuk pengguna baru akan mendapatkan saldo welcome bonus sebesar $5 untuk digunakan sebagai biaya cetak pcb di PCBWay, jadi tunggu apalagi segera daftar akun PCBWay pada tautan ini.

Pcbway.com
PCBWay.com

Daftar akun PCBWay dapatkan welcome bonus
Daftar akun PCBWay dapatkan welcome bonus

LED sebanyak yang saya miliki itu akan saya manfaatkan sebagai modul LED seven segment berukuran cukup besar dengan menggunakan shift register CMOS CD4094 seperti modul seven segment jws sebelumnya namun untuk LED seven segment ini perlu menambahkan IC penguat seperti ULN2003 atau ULN2803 karena jika langsung dari IC shift register CMOS CD4094 tentunya tidak akan mencukupi untuk kebutuhan arusnya karena untuk setiap segmentnya saya paralel sebanyak 5 LED dengan tegangan 5V namun tentunya masih memerlukan sebuah resistor sebagai pembatas arusnya. Setelah dirasa cukup saya mulai membuat layout LED seven segment dengan tinggi sekitar 10 cm dengan digit yang dapat digabungkan dengan mudah untuk masing-masing digitnya. Inilah skema yang saya rancang beserta layoutnya. 

Skema modul LED seven segment
Skema modul LED seven segment

Layout dual layer modul LED seven segment
Layout dual layer modul LED seven segment


Untuk download atau cetak langsung pcbnya di situs PCBWay.com file gerber nya silakan download disini

Layout yang telah saya desain tersebut kemudian saya cetak di PCBWay.com dengan pilihan warna hitam glossy karena saya lagi suka dengan pcb warna hitam, kelihatan keren dan kontras dengan silkscreen baik bentuk komponen maupun tulisannya, nah setelah pcb dari PCBWay saya terima seperti inilah hasilnya. 

PCB modul LED seven segment cetakan PCBWay

Untuk lebih jelasnya bisa disimak pada video Unboxing berikut ini. 


Nah setelah itu saya mempersiapkan komponen untuk saya pasangkan pada PCB modul LED seven segment diantaranya yaitu komponen utama LED 5mm, resistor 100 ohm, IC shift register CD4094 dan IC driver ULN2003 kemudian mulailah saya rakit satu persatu. Dua digit modul led seven segment digabungkan menjadi satu modul yang nantinya bisa digunakan sebagai modul untuk jam, menit dan detik. Satu modul yang sudah digabungkan untuk input dan outputnya dipasang pinheader siku yang nantinya memudahkan dalam penggabungan untuk ketiga modulnya, jadinya nanti lengkap untuk jam, menit dan detiknya. Berikut ini tampilan modul led seven segment dua digit yang sudah digabung. 

Dua digit LED seven segment
Dua digit LED seven segment

Nah pada gambar diatas itu merupakan hasil percobaan sementara untuk bagian detiknya saja, karena baru dibuat satu modul dua digit led seven segment. Setelah dirakit menjadi tiga modul enam digit maka hasilnya sempurna untuk menampilkan keseluruhan waktu, selain menampilkan keseluruhan waktu saya juga menampilkan tanggal disetiap detik ke 20 dan detik ke 40 dan juga untuk mengatur waktunya bisa menggunakan Aplikasi Android lewat Bluetooth HC-05 agar lebih mudah menyinkronkan waktunya secara otomatis sesuai waktu yang ada pada ponsel android. 


Dibawah ini saya tampilkan kode program arduino. Karena ukurannya cukup kecil program jam digital ini bisa menggunakan mikrokontroller atmega8 (Arduino NG/Older dengan chip atmega8 lihat caranya pada video dibawah), kode program saya pisah untuk program utama dan program parameter bluetooth nya. 


Kode program atau sketch jam digital led seven segment CD4094 



#include < Wire.h>
#include < Sodaq_DS3231.h>

#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;

//====================================
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);

}

void loop() {
  
  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]); // digit 6
  shiftOut(DATA, CLK, MSBFIRST, ~digit_1[s2]); // digit 5
  shiftOut(DATA, CLK, MSBFIRST, ~digit_1[m1]); // digit 4
  shiftOut(DATA, CLK, MSBFIRST, ~digit_1[m2]); // digit 3
  shiftOut(DATA, CLK, MSBFIRST, ~digit_1[h1]); // digit 2
  shiftOut(DATA, CLK, MSBFIRST, ~digit_1[h2]); // digit 1
  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]); 
  shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); 
  shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); 
  shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); 
  shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); 
  shiftOut(DATA, CLK, MSBFIRST, digit_1[8]); 
  digitalWrite(LATCH, HIGH);
}


Kode program parameter bluetooth untuk pengaturan jam 

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);
  }
}


Kedua sketch diatas bisa di download pada tautan ini.

Kini saatnya untuk melihat secara menyeluruh tahapan dari awal hingga akhir proses pembuatan modul LED seven segment CD4094 hingga menjadi sebuah jam digital yang sangat keren sekali dalam video berikut ini.