Tutorial Shift Register yang dimpementasikan pada Seven Segment 4 digit

Selamat berkunjung sahabat blogger, kali ini saya akan berbagi cara membuat countdown dengan menggabungkan 4 Seven Segment dengan 1 IC Shift Reigster 76HC164. Saya senang sekali berbagi ilmu ini, mungkin bagi anda hal ini sangat bermanfaat.

Arduino Uno, itulah nama dari sebuah produk hardware yang bisa anda otak atik program yang ada di dalamnya sesuai denga keinginan anda. Disini saya pakai Arduino Uno untuk mengiplentasikan sistem Countdown ini.

Alat dan Bahan yang harus di persiapkan :
  • Arduino Uno 1x
  • IC 74HC164 1x
  • Resistor 330 ohm 4x
  • Seven Segment Anode/Katode 4x (Pada tutorial ini saya menggunakan Anode Seven Segment)
  • Jumper
  • Project Board(Bread Board)
  • Laptop/PC yang sudah terinstal IDE Arduino
Langkah-langkah pengerjaan :
  • Rangkai Seven Segment dan IC  pada Project Board mengikuti rangkaian pada gambar berikut.








  • Hubungkan rangkaian ke Arduino Uno sesuai gambar tersebut.
    1. Pin 2 sebagai data
    2. Pin 3 sebagai clock
    3. Pin 4 Vcc 1  sebagai sumber daya seven segment digit 1 (paling kanan)
    4. Pin 5 Vcc 2 sebagai digit 2 
    5. Pin 6 Vcc 3 sebagai digit 3
    6. Pin 7 Vcc 4 sebagai digit 4
    Berikut rangkaian Seven Segment Paralel.










  • Setelah semua rangkaian di rangkai, silahkan cek dulu rangkaian seven segment dengan kode berikut.


  • --- Code Test Seven Segment -----

    //---------------------------------------//
    // ----------===[ KEBUN IT]===-----------//
    // --=[ Contact : kebunit@gmail.com ]=-- //
    //---------------------------------------//
    // for Anode Seven Segment
    #define ON HIGH
    #define OFF LOW
    // for Cathode Seven Segment
    //#define ON LOW
    //#define OFF HIGH
    
    // definisi port yang di pakai
    #define data 2
    #define clock 3
    #define D1 4 
    #define D2 5
    #define D3 6
    #define D4 7
    
    void setup() {
     pinMode(data,OUTPUT);
     pinMode(clock,OUTPUT);
     pinMode(D1,OUTPUT);
     pinMode(D2,OUTPUT);
     pinMode(D3,OUTPUT);
     pinMode(D4,OUTPUT);
     Serial.begin(9600);
    }
    
    // Angka 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 pada Shift Register
    byte segment[]={B11000000,B01111001,B0100100,
              B0110000,B0011001,B0010010,
              B0000010,B01111000,B0000000,B0010000};
    
    void loop(){
      for (int i = 0; i < 100000; i++){
        for (int j = 0; j <=9;j++){
        shiftOut(data, clock, MSBFIRST, segment[j]); // menampilkan angka 0 sampai 9
        digitalWrite(D1, ON);
        digitalWrite(D2, ON);
        digitalWrite(D3, ON);
        digitalWrite(D4, ON);
            delay(1000);
        }
      }
    }
    

    jika code tersebut sudah berjalan sesuai keinginan. Maka selanjutnya kita akan membuat kode untuk countdown. Pada kode di atas, semua seven segment masih hidup dan menampilkan angka yang sama untuk setiap digit. Bagaimana cara agar tiap digit bisa menghasikan kombinasi angka yang kita inginkan? jawabannya adalah dengan membuat delay sendiri.

    Sistem Arduino mereprensentasikan sebuah rekursif yang terus berjalan (Infinite Loop). Kemudian Shift Register berfungsi untuk memotong arus untuk di nyalakan pada setiap pin output secara bergantian mulai dari Q0 sampai Q7. Secara logika kita tidak mungkin mengunakan delay yang lama untuk membuat sebuah countdown. Oleh karena itu, Kita bisa membuat delay manual sesuai keinginan kita. Yaitu dengan memakai salah satu operator handal yaitu % (Modulo). Modulo merupakan operator yang digunakan untuk menentukan sisa dari sebuah hasil pembagian angka. 

    Modulo berfungsi untuk memecah delay manual buatan sendiri yang dibuat pada masing-masing digit. Sehingga setiap digit berjalan sebagai angka satuan, puluhan, ratusan, dan ribuan. Dengan demikian, kita bisa melakukan perhitungan angka yang ingin kita keluarkan.

    Sistem rangkaian ini mensimulasikan penggunaan countdown yang di mulai dari sebuah angka yang mempunyai maksimal 4 digit angka dan minimal 0. Ketika sudah mencapai angka nol (0000), maka angka nol tersebut akan delay beberapa saat setelah itu akan di lakukan countdown kembali dari angka yang telah ditetapkan angka .

    Berikut kode Countdown dalam detik.
    
    //---------------------------------------//
    // ----------===[ KEBUN IT]===-----------//
    // --=[ Contact : kebunit@gmail.com ]=-- //
    //---------------------------------------//
    
    // for Anode Seven Segment
    #define ON HIGH
    #define OFF LOW
    
    // for Cathode Seven Segment
    #define ON HIGH
    #define OFF LOW
    
    #define data 2
    #define clock 3
    #define D1 4
    #define D2 5
    #define D3 6
    #define D4 7
    
    void setup() {
     pinMode(data,OUTPUT);
     pinMode(clock,OUTPUT);
     pinMode(D1,OUTPUT);
     pinMode(D2,OUTPUT);
     pinMode(D3,OUTPUT);
     pinMode(D4,OUTPUT);
     Serial.begin(9600);
    }
    
    // digit 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    byte segment[]={B11000000,B01111001,B0100100,
              B0110000,B0011001,B0010010,
              B0000010,B01111000,B0000000,B0010000};
    
    // Set angka yang anda inginkan berdasarkan digit
    // contoh Countdown dimulai dari 1000
    int angka1 = 0; // angka satuan
    int angka2 = 0; // angka puluhan
    int angka3 = 0; // angka ratusan
    int angka4 = 1; // angka ribuan
    
    int digit1 = 0, a = angka1; 
    int digit2 = 0, b = angka2; 
    int digit3 = 0, c = angka3; 
    int digit4 = 0, d = angka4; 
    int pembatas = 0;
    bool berhenti = true;
    
    void loop(){
      hitungMundur();
    }
    
    void hitungMundur(){
        digit1--;
        digit2--;
        digit3--;
        digit4--;
        if ((a == angka1)&& (b == angka2 ) && (c == angka3) && (d == angka4)){ 
          for (int x =0 ; x < 200;x++){
            Number(1,angka1);
            clearLED();
            Number(2,angka2);
            clearLED();
            Number(3,angka3);
            clearLED();
            Number(4,angka4);
            clearLED();
          }
          c = angka3-1;
          berhenti = false;
          Serial.println("Tampilan pertama timer dalam detik");
        }
        // delay angka satuan
        if (digit1 % 10 == 0) {
          a--;
          Serial.println("==>> digit1");
          clearLED();
        }
        if (digit1 < 0){
            digit1 = 100;
            a = 9;
            Serial.println("=========>> digit2");
        }
        
        // delay angka puluhan
        if (digit2 % 100 == 0) {
          b--;
          clearLED();
        }
        if (digit2 < 0){
            digit2 = 1000;
            b = 9;
            Serial.println("===================>> digit3 ");
        }
        
        // delay angka ratusan
        if (digit3 % 1000 == 0) {
          c--;
          clearLED();
        }
        if ((digit3 < 0)&&(c < 0)){
            pembatas++;
            digit3 = 1000;
            c = 9;
            Serial.println("==========================================>> digit4");
            d--;  // untuk angka ribuan (digit ke-4)
            if (d < 0) {
              d = 0;
            }
        }   
        
        Number(1,a);
        clearLED();
        Number(2,b);
        clearLED();
        Number(3,c);
        clearLED();
        Number(4,d);
        clearLED();
        
        // delay ketika |0|0|0|0|
        if ((c == 0)&&(d == 0) &&(b == 0 ) && (a == 0)){
          Serial.println("Delay untuk angka |0|0|0|0| ");
          for (int y = 0; y < 500; y++){
            Number(1,a);
            clearLED();
            Number(2,b);
            clearLED();
            Number(3,c);
            clearLED();
            Number(4,d);
            clearLED();
          }
          c = angka3;
          d = angka4;
          b = angka2;
          a = angka1;
          digit1 = 0;
          digit2 = 0;
          digit3 = 0;
          digit4 = 0;
          berhenti = true;
        }
    }
    
    void clearLED(){
      delay(3);  // Untuk setting kecepatan detik, tinggal kurangi atau tambahi nilai delay-nya
      digitalWrite(D1,OFF);
      digitalWrite(D2,OFF);
      digitalWrite(D3,OFF);
      digitalWrite(D4,OFF);
    }
    
    void Number(int digit,int angka){
      switch (digit) {
        case 1:
          digitalWrite(D1,ON);
          break;
        case 2:
          digitalWrite(D2,ON);
          break;
        case 3:
          digitalWrite(D3,ON);
          break;
        case 4:
          digitalWrite(D4,ON);
          break;
      }
      switch (angka){ 
        case 0:
            shiftOut(data, clock, MSBFIRST, segment[0]);
            break;
         case 1:
            shiftOut(data, clock, MSBFIRST, segment[1]);
            break;
        case 2:
            shiftOut(data, clock, MSBFIRST, segment[2]);
            break;
        case 3:
            shiftOut(data, clock, MSBFIRST, segment[3]);
            break;
        case 4:
            shiftOut(data, clock, MSBFIRST, segment[4]);
            break;
        case 5:
            shiftOut(data, clock, MSBFIRST, segment[5]);
            break;
        case 6:
            shiftOut(data, clock, MSBFIRST, segment[6]);
            break;
        case 7:
            shiftOut(data, clock, MSBFIRST, segment[7]);
            break;
        case 8:
            shiftOut(data, clock, MSBFIRST, segment[8]);
            break;
        case 9:
            shiftOut(data, clock, MSBFIRST, segment[9]);
            break;
      }
    }
    

    Untuk melihat log activity program, Anda bisa langsung membuka menu pada IDE Arduino. Yaitu  Tools -> Serial Monitor  atau bisa pake shortkey Ctrl+Shift+M. Anda bisa melihat hasil Looping program yang sedang berjalan.




    Semoga tutorial di atas bermanfaat untuk anda yang memanfaatkan kode di atas untuk sebuah kebaikan yang berarti. 

    Cintai negerimu dengan mencintai hal kecil dalam hidupmu. Mulai dengan berbagi ilmu, bukan maksud untuk menggurui. Namun apalah  daya diriku hanyalah mahluk ciptaan Tuhan yang hanya ingin berbagi sesuatu hal yang sederhana. Disinilah aku berbagi kepada kalian wahai generasi penerus bangsa. 

    --- Kebahagianku ketika aku bisa berbagi kepada mereka yang membutuhkan ---



    Kelemaan pacaran tapi nggak di lamar-lamar = korban PHP
    Sumber gambar

    Terkadang kita terlalu tersibukkan oleh sebuah dunia yang kurang bermanfaat untuk para remaja yaitu pacaran. Sehingga lupa untuk belajar dan meneruskan generasi para pejuang bangsa ini. Para pejuang bangsa ini telah bersusah payah untuk merdeka, namun seiiring berjalannya waktu hal itu semakin menjadi pudar.


    Pacaran menjadi budaya yang nge-tren bagi anak remaja jaman sekarang. Muncullah berbagai istilah yang sudah tidak asing ditelinga seperti Cinta Monyet, CLBK, PHP, dll. Daripada di PHP-in(Pemberi Harapan Palsu) cewek mending kita belajar bahasa yang membuat hidup anda dinamis seperti layaknya web responsive.

    PHP(Hypertext Preprocessor) merupakan server side scipting language dan juga merupakan general purpose programming language yang secara khusus di gunakan untuk mengembangkan situs web dan bisa di masukkan ke dalam HTML. Berikut saya bagi kode simple yang mudah-mudahan bermanfaat.

    <!-- File name : apaaja.php tapi lebih enak pake index.php untuk coba-coba -->
    <!DOCTYPE HTML>
    <html>
        <head>
            <title>Pemberi Harapan Palsu</title>
        </head>
        <body>
            <?php
     echo "Echo : Hai, Aku echo PHP. Kamu siapa? <br/>";
     print(" Print : Aku print PHP. Echo aku ingin mengatakan sesuatu 
    kepadamu <br/>");
     echo "Echo : wah .. so sweet. kau buat aku penasaran. emang 
    kamu mau bilang apa?<br/>";
     print("Print : engg... kasih tau gak yaaaww....haha... <br/>");
            ?>
        </body>
    </html>
    

    itulah sekilah tentang PHP. Jangan lupa PHP tidak bisa berjalan tanpa server. Untuk itu kita harus membuat server lokal dalam laptop/komputer kita agar bisa menjalan PHP. Server lokal bisa pake aplikasi XAMPP untuk Window/Linux,WAMP server untuk Windows, LAMPP server untuk Linux.

    "Sampaikanlah kebaikan meskipun hanya sebuah bahasa PHP"
    "Semangat belajar putra-putri generasi bangsa di masa yang akan datang...".
    "Belajar memang butuh kesabaran dan perjuangan. Urusan hasil itu bukan urusan manusia.."
    --------------------------------------Good Day -------------------------------------------

    ~ KEBUN IT ~

    ~ sebuah catatan panjang dalam perjalanan ~

    Copyright © | KEBUN IT | All Right Reserved