Skip to main content

Menampilkan angka di seven segment (seven segment) dengan arduino uno

Menampilkan angka di seven segment (seven segment) dengan arduino uno

7  Segment  merupakan  rangkaian  LED  yang  dikonfigurasikan  membentuk  7 segment/bagian  (+1  untuk  dot/titik).  7  segment  dapat digunakan  sebagai  opsi  untuk display selain menggunakan LCD 16x2, namun untuk menampilkan karakter yang lebih  terbatas tentunya. Gambar 7-1 merupakan tampilan 7 segment dalam berbagai ukuran  dan warna.
seven segment
seven segment

Sebelum belajar tentang cara memprogram 7 segment, mari kita memahami siapa  sih 7 segment itu? Eh, apa sih 7 segment itu? Hehehehe..
LED Common Anoda dan LED common Cathoda
LED Common Anoda dan LED common Cathoda


Jika kita lihat pada gambar di atas, terdapat 7 buah led (D1-D7) yang bagian katodanya terhubung menjadi 1, dan 7 buah led (D8-D14) lainnya bagian anodanya-lah yang terhubung menjadi 1. Rangkaian Led D1-D7 disebut commond katoda, dan rangkaian led D8-D14 disebut common anoda. Apa hubungannya dengan 7 segment?

Di dalam seven segment ternyata komponen utaman nya adalah LED, hanya saja dengan bentuk yang mungkin tidak sama dengan yang anda bayangkan,namun secara skematik, yang ada di dalam sebuah seven segment adalah LED yang di rangkai baik secara common anoda atau common cathode,silakan perhatikan gambar berikut :
Skematik seven segment common anoda
Skematik seven segment common anoda



Perhatikan gambar di bawah ini,ini adalah contoh mengakses 7 segment untuk menampilkan angka 1, sebagai catatatan jika anda perhatikan 7 segment yang ada, configutasinya adalah  common cathoda
7 segment membentuk angka 1


logika untuk menanpilkan angka pada seven segment common katoda  di tabel kan sebagai berikut:
logika untuk menanpilkan angka pada seven segment common katoda
Logika untuk menanpilkan angka pada seven segment common katoda





lalu bagaimana untuk menyalakan 2 buah seven segment yang semisal di paralel (dengan driver tentunya) driver pengontrolan led common katoda nya,semisal pin common katoda di berikan logika low otomatis seven segment yang bersesuaian dengan pin common catoda  akan menyala, namun ketika sebaliknya common katoda di berikan logika high maka seven segment yang bersesuaian dengan common catoda akan padam,

berikut gambarannya
akses seven segment paralel
akses seven segment paralel

Pada intinya, untuk menyalakan led pada 7 segment, pin CK (common katoda) harus berlogika low. Misalkan ingin menampilkan angka 20, maka prosesnya adalah: 

1. Membuat logika 1011011 pada pin A-G, 0 pada pin CKkiri dan 1 pada pin CKkanan
Ini membuat 7 segment bagian kiri akan menampilkan angka 2, sedangkan 7segment bagian kanan akan mati 


2. Membuat logika 0111111 pada pin A-G, 1 pada pin CKkiri dan 0 pada pin CKkanan
 Ini membuat 7 segment bagian kanan akan menampilkan angka 0, sedangkan 7segment bagian kiri akan mati 

3. Lakukan looping langkah1 dan langkah 2 secara terus menerus. Jadi sebenarnya, angka pada 7segmentkiri dan 7segmentkanan dinyalakan secara bergantian. Hanya saja, karena proses loopingnya cepat, mata kita melihatnya sebagai sebuah tampilan yang menyala secara bersamaan. 

7segment pin A, B, ..., G, dan Dot terhubung pada Arduino Uno pin 6-13
Pin aktifasi common anoda untuk segment kiri, kanan berturut-turut terhubung pada pin 5 dan 4. 
Karena aktifasi pin common anoda menggunakan transistor, maka agar pin common anoda berlogika low, pin 5 atau 4 harus berlogika high , perhatikan gambar






Source code Menampilkan angka di seven segment (seven segment) dengan arduino uno

const int segA = 6;
const int segB = 7;
const int segC = 8;
const int segD = 9;
const int segE = 10;
const int segF = 11;
const int segG = 12;
const int segDot = 13;

const int aktifSegmentKiri = 5;
const int aktifSegmentKanan = 4;

int segmentKiri = 0;
int segmentKanan = 0;
int konter;

void setup(){
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 
  pinMode(pButton1, INPUT_PULLUP);
  pinMode(pButton2, INPUT_PULLUP);  
  pinMode(pButton3, INPUT_PULLUP);  

}

void loop(){

 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

}
}


void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}


jika anda upload sketch di atas ke arduino dengan tampilan seven segment sebagaimana gambar yang ada pada penjelasan di atas, maka seven segment akan menampilkan angka 0-99 lalu kembali ke 0 dan naik 1 per 1 sampai angka 99

sedikit penjelasan

void bacaAngka(int angkaSegment){
  switch (angkaSegment){
  case 0:  angka0(); break;
  case 1:  angka1(); break;
  case 2:  angka2(); break;
  case 3:  angka3(); break;
  case 4:  angka4(); break;
  case 5:  angka5(); break;
  case 6:  angka6(); break;
  case 7:  angka7(); break;
  case 8:  angka8(); break;
  case 9:  angka9(); break;
  } 
}

merupakan fungsi untuk memanggil subprogram angka0() sampai dengan angka9(). Misalkan pada program utama kita tulis: bacaAngka(1);, maka subrutin angka1() akan dieksekusi


kemudian bagian 


void angka0()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka1()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka2()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka3()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka4()
{
  digitalWrite(segA, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka5()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka6()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka7()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segE, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
  digitalWrite(segDot, LOW);
}

void angka8()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

void angka9()
{
  digitalWrite(segA, HIGH);
  digitalWrite(segB, HIGH);
  digitalWrite(segC, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segE, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
  digitalWrite(segDot, LOW);
}

merupakan program untuk mengkonfigurasikan pin a-g agar dapat menampilkan angka 0 sampai dengan 9, cek tabel yang ada di tengah postingan ini, jika bingung cek tabel di bawah ini (saya tampilkan kembali)




nah ini program utama sebenar nya 



 konter= konter+1;
 if (konter>99){
 konter = 99;

 if (konter < 10){
  segmentKiri = 0;
  segmentKanan = konter;
 } else
 {
  segmentKiri = konter/10;
  segmentKanan = konter%10;
 }

 Penjelasan:
7segment pada Ardu Mini Lab bagian kiri akan menampilkan nilai puluhan, dan bagian kanan menampilkan nilai satuan. Misalkan nilai konter = 23, maka 7segmentkiri akan menampilkan angka 2, dan 7segmentkanan akan menampilkan angka 3.
Nilai puluhan akan disimpan pada variabel segmentKiri, dan nilai satuan akan disimpan pada variabel segmentKanan.
Apabila nilai konter <10, maka 7segmentkiri akan selalu menampilkan angka 0 dan 7segmentkanan akan menampilkan nilai konter (code 7-1.5a). Sehingga variabel segmentKiri diberi nilai nol, dan segmentKanan diberi nilai sama dengan nilai konter.
Apabila nilai konter >= 10, maka nilai konter /10 untuk mendapatkan nilai puluhan (disimpan pada variabel segmentKiri) dan nilai konter %10 untuk mendapatkan nilai satuan (disimpan pada variabel segmentKanan ) (code 7-1.5b).
Misalkan konter bernilai 54. “konter/10;” akan menghasilkan nilai segmentKiri = 5, dan “konter%10;” akan menghasilkan nilai segmentKanan=4. “%” merupakan modulus, digunakan untuk menghitung sisa pembagian. Misal 10%4 = 2, 3%2=1, dll.


untuk bagian ini

bacaAngka(segmentKiri);
 digitalWrite(aktifSegmentKiri,HIGH);
 digitalWrite(aktifSegmentKanan,LOW); 
 delay(5);
 bacaAngka(segmentKanan);
 digitalWrite(aktifSegmentKiri,LOW);
 digitalWrite(aktifSegmentKanan,HIGH);
 delay(5);

Penjelasan:
Sesuai penjelasan sebelumnya, apabila konter = 54, maka segmentKiri bernilai 5 dan segmentKanan bernilai 4.
Untuk menampilkan angka 5 pada 7segmentKiri, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKiri); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 5 (aktifSegmentKiri) berlogika High sedangkan pin 4 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 5 pada 7segmentkiri.
Untuk menampilkan angka 4 pada 7segmentkanan, terdapat 2 step, yaitu memanggil sub rutin bacaAngka(segmentKanan); untuk mengkonfigurasikan kondisi pin a-g, lalu membuat pin 4 (aktifSegmentKiri) berlogika High sedangkan pin 5 (aktifSegmentKanan) berlogika Low. Code 7-1.6a akan menampilkan angka 4 pada 7segmentkiri



Penjelasan:silakan di implementasi dikembangkan semisal untuk menampilkan data sensor suhu, pembacaan sensor suhu ada di halaman lain web site ini (cek postingan sebelumnya)

 

Comments

Post a Comment

Silakan dikomentari

Popular posts from this blog

GROUND bagian 1 by Sarono Elektronika Blog Adi Sanjaya Global Techno Solution - AS-GTS

GROUND bagian 1
Banyak pertanyaan kepada saya apa itu ground ? apa guna nya ? apakah selalu ground itu negatif ? Apa yang di maksud titik netral pada pencatu daya terbelah ?
Agak sulit menerangkan dengan kata kata, bahkan dari hasil diskusi saya dengan beberapa teman yang sudah pakar elektronik juga mereka menemukan kesulitan nya mengungkapkan dengan kata kata walau kita mengerti tentang ground.
Untuk itu saya mencoba menerangkan semaksimal mungkin, tetapi sesungguh nya yang"mendengar" mestinya sudah punya ilmu elektronika minimal sampai teknik penguat audio.
Jadi, jika belum memehami tentang teknik audio dan masih bingung tentang konsep dan aplikasi ground masih di maklum kan.
Pada rangkaian listrik sederhana tidak di perlukan ground, misalkan senter, (body nya terbuat dari plastik) itupun sering negatif nya di hubungkan dengan body senter terbuat dari logam.
a. Pengertian Ground
Ground adalah titik yang dianggap sebagai titik kembali nya arus listrik arus seara…

HAMBATAN LISTRIK by Sarono Elektronika Blog Adi Sanjaya Global Techno Solution - AS-GTS

HAMBATAN LISTRIK
Pada bahasan sebelumnya sudah di tegaskan bahwa menghubungkan langsung positip dan negatip battery tidak boleh di lakukan, karena jumlah elektron yang mengalir menjadi sangat besar dan selama mengalir antara elektron saling berbenturan dan menimbulkan panas yang besar.
TETAPI
1) Jika jalan yang di lalui panjang (kawat nya panjang), maka kawat itu akan menjadi perlawanan listrik, makin panjang kawat maka perlawanan terhadap arus listrik juga semakin besar.
2) Atau kalau jalan nya arus di kawat juga di kecilkan (tebal kawat) nya di tipiskan juga akan menghasilkan Hambatan bagi arus semakin besar (Hambatan listrik membesar).
Dengan demikian kita bisa menghambat arus listrik itu dengan membuat kawat yang panjang dan mengatur tipis nya (luas penampang) kawat.
Ada faktor ke 3 yaitu jenis kawat.
Jenis kawat tertentu lebih mudah melewatkan arus, sementara kawat yang lain lebih sulit melewatkan arus.
Dalam teori elektron dapat di jelas kan : kawat tertentu daya ika…

Cara menggunakan modul relay dengan arduino UNO.

Material yang di butuhkan:
- Relay module 2 channel
- Arduino UNO.
- kabel jumper male - female

Relay module 2 channel  5V dengan 2 channel output dapat digunakan sebagai saklar elektronik untuk mengendalikan perangkat listrik yang memerlukan tegangan dan arus yang besar. Kompatible dengan semua mikrokontroler khususnya Arduino


Spesifikasi
•    Jumlah Relay : 2
•    Control signal : TTL level (ACTIVE LOW) ini artinya relay akan aktif jika kita memberikan logika LOW ke pin trigger relay (pin in1 /in 2)

Catatan : gambar bisa jadi berbeda dengan fisik relay yang dikirim, tapi pin pin pasti terdiri dari pin Vcc GND dan pin in1/in2 … untuk jumlah channel lainnya maka pin in1 2, dst akan sesuai dengan jumlah channel relay modul
•    Rating arus : 10A 250VAC, 10A 30VDC, 10A 125VAC, 10A 28VDC
•    Contact action time : 10ms/5ms
•    Indikator LED untuk masing masing channel



Catatan : gambar bisa jadi berbeda dengan fisik relay yang dikirim, tapi pin pin pasti terdiri dari pin Vcc GND dan pin in1/in2…