4 Haneli 7 Segment Led Display
Arduino ile yapılan projeler arttıkça tek haneli 7 segment display modülleri yetmez hale geldi. 4 haneli 7 segment display, projelerde daha çok işlev kazanarak en basitten en kompleks devrelerde yerini aldı. Projemizde, ortak katotlu, 4 haneli 7 segment display ile çeşitli sayısal çıkışlar alarak modülün kullanımını görmüş olacağız.
Kullanılan Malzemeler
- Bir adet Arduino Uno kartı,
- Bir adet 4 haneli 7 segment display,
- Bir adet 10 kiloohm potansiyometre,
- Dört adet BC547 npn transistor,
- Dört adet 390 ohm direnç.
Tasarım
Modüldeki her bir segment multipleks yapıdadır. Yani bunun anlamı segmentlerin aynı anot bağlantısını paylaşması demektir. Katotların hepsi ise tek bir bağlantı noktasındadır. 4 haneli 7 segment display ile birçok sayıda led kullanmaktan ve onları kontrol etmekten kurtulmuş bulunuyoruz.
Display’in girişlerine 5 volt gerilim uygulanacağı zaman akım sınırlayıcı olarak dirençler kullanmak devre mantığı için daha uygun olur. Direnç değerleri 330 ile 470 ohm arasında olabilir. Mikrodenetleyici pinlerinden en fazla 40 mA akım çekebildiğimiz için bu akımları daha da yükseltmek adına transistörler kullanılır. Örneğin 8 rakamını display üzerinde görmek istesek, gerekli akım 40 mA‘yı geçecektir.
Arduino kartın analog 0 girişine bağlı 10 kiloohm değerindeki bir potansiyometreyi sağa sola çevirdiğimizde display üzerinde 0 ile 1023 arasındaki sayıları görebiliriz. Display’in 12 adet ucu bulunmaktadır. Bunlardan biri ortak katot için (DP), dördü hangi display hanesini seçmek gerektiğini belli etmek için (DO, D1, D2, D3), yedi tanesi de hanelerdeki hangi led çubuğunun yanacağını saptamak içindir (A, B, C, D, E, F, G). Hane seçim işini yapacak dört girişe NPN tipine BC547 transistörleri bağlanmıştır. Transistörler ile uçlar arasında 390 ohm dirençler vardır. Transistöre gelecek akımı sınırlamak içinde 1 kiloohm dirençler kullanılır.
Kodlar
Kodların gerekli görünen açıklamaları yanlarında yazmaktadır.
// A-G segmentlerinin seçimi 0-9 rakamları için const int rakamlar[10] = { //sayıların desimal karşılıkları B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 }; // herbir segment için pin tanımlamaları // DP,G,F,E,D,C,B,A const int segment_pinleri[] = { 13,8,7,6,5,4,3,2 }; const int haneler= 4; // displayin haneleri const int hane_pinleri[haneler] = { 9,10,11,12 }; void setup() { for(int i=0; i < 8; i++) { pinMode(segment_pinleri[i], OUTPUT); // segment pinleri çıkış yapılır } for(int i=0; i < haneler; i++) { pinMode(hane_pinleri[i], OUTPUT); } } void loop() { int value = analogRead(0); rakam_goster(value); } void rakam_goster( int rakam) { if(rakam == 0) { hane_sec( 0, haneler-1) ; // sağdaki haneyi görüntüleme } else { // her haneye karşılık gelen değerler // soldaki hane 0 ise sağdaki haneden eksilt for( int hane = haneler-1; hane >= 0; hane--) { if(rakam > 0) { hane_sec( rakam % 10, hane) ; rakam = rakam / 10; } } } } // hane_sec,hane durumuna göre rakam gösterme fonskiyonu void hane_sec( int rakam, int hane) { digitalWrite( hane_pinleri[hane], HIGH ); for(int segment = 1; segment < 8; segment++) { boolean isBitSet = bitRead(rakamlar[rakam], segment); // isBitSet fonksiyonu sorgulanan bit 1 ise true değerini döndürür digitalWrite( segment_pinleri[segment], isBitSet); } delay(5); digitalWrite( hane_pinleri[hane], LOW ); }