Parçalar · 4 dk okuma

7 Segment Display Kullanımı: Arduino ile Sayı Gösterme, Ortak Anot ve Katot

7 segment display nasıl çalışır? Segment harfleri (a–g, dp), ortak katot ve ortak anot farkı, pin dizilimi ve dirençler, 0–9 sayma kodu, 4 haneli display ve çoklama, TM1637 modülü, ESP32 ve Pico.

7 segment display, "8" rakamı şeklinde dizilmiş yedi çubuk LED'den ve küçük bir noktadan oluşan basit bir göstergedir. Dijital saatler, mikrodalga fırın zamanlayıcıları, skor tabelaları ve akaryakıt pompaları hep bu göstergeyi kullanır. Ucuzdur, çok parlaktır ve uzaktan bile rahat okunur. Arduino projelerinde sayaç, zar, kronometre ve saat yapmak için en klasik çıkış elemanlarından biridir.

Tek haneli 7 segment display
Tek haneli 7 segment display: yedi çubuk segment ve bir nokta (dp); altta ve üstte beşer olmak üzere 10 pini vardır.

7 segment display nasıl çalışır?

Segmentler harflerle adlandırılır: en üstteki a'dan başlayıp saat yönünde b (sağ üst), c (sağ alt), d (alt), e (sol alt), f (sol üst) gelir; ortadaki çubuk g, nokta ise dp'dir. Her segment aslında ayrı bir LED'dir ve hangilerinin yandığına göre farklı rakamlar oluşur. Örneğin "1" için yalnızca b ve c yanar, "8" için ise yedisi birden.

RakamYanan segmentler
0a, b, c, d, e, f
1b, c
2a, b, d, e, g
3a, b, c, d, g
4b, c, f, g
5a, c, d, f, g
6a, c, d, e, f, g
7a, b, c
8a, b, c, d, e, f, g
9a, b, c, d, f, g

Ortak katot mu, ortak anot mu?

Tıpkı RGB LED'de olduğu gibi segmentlerin bir ucu ortak bir pinde birleşir. Ortak katotlu display'de ortak pin GND'ye bağlanır ve bir segment HIGH verilince yanar. Ortak anotlu display'de ortak pin 5V'a bağlanır ve segment LOW verilince yanar. İkisi dışarıdan aynı görünür; hangisine sahip olduğunu ortak pini GND'ye bağlayıp bir segment pinini 220 Ω'luk dirençle 5V'a dokundurarak anlayabilirsin. Segment yanıyorsa ortak katottur, yanmıyorsa bağlantıyı ters çevirip tekrar dene.

ÖzellikOrtak katot (CC)Ortak anot (CA)
Ortak pin (3 ve 8)GND5V
Segmenti yakmak içinHIGHLOW
KoddadigitalWrite(pin, açık)digitalWrite(pin, !açık)

Pin dizilimi ve Arduino bağlantısı

Yaygın 10 pinli tek haneli display'lerde pinler, display önü sana bakarken sol alttan başlayarak saat yönünün tersine numaralanır. Ortadaki iki pin (3 ve 8) ortak uçtur ve içeride birbirine bağlıdır. Aşağıdaki tablo hem display pinlerini hem de bu yazıdaki kodun kullandığı Arduino pinlerini gösterir:

Display piniSegmentArduino pini
7aD2
6bD3
4cD4
2dD5
1eD6
9fD7
10gD8
5dpD9
3 ve 8OrtakGND (ortak katot) ya da 5V (ortak anot)
Her segmente kendi direncini tak (5 V'ta 220–330 Ω). Tek bir direnci ortak pine koyarsan akım yanan segment sayısına bölünür: "1" çok parlak, "8" ise sönük görünür. Direnç değerini hesaplamak için LED direnci aracını kullanabilirsin.

Arduino ile 0'dan 9'a saymak

Her rakamın hangi segmentleri yakacağını bir dizi içinde bitlerle saklamak kodu kısaltır. Aşağıdaki örnekte her baytın en soldaki biti a, en sağdaki biti g segmentidir. showDigit() fonksiyonu bu bitleri tek tek okuyup pinlere yazar; ortak anot bir display kullanıyorsan COMMON_ANODE değerini true yapman yeterlidir.

Arduino (C++)
1const int SEG_PINS[7] = {2, 3, 4, 5, 6, 7, 8};   // a, b, c, d, e, f, g
2const bool COMMON_ANODE = false;                 // ortak anotsa true / true for common anode
3
4// her rakam için a–g segmentleri (1 = yanar) / a–g segments per digit (1 = on)
5const byte DIGITS[10] = {
6  0b1111110, // 0
7  0b0110000, // 1
8  0b1101101, // 2
9  0b1111001, // 3
10  0b0110011, // 4
11  0b1011011, // 5
12  0b1011111, // 6
13  0b1110000, // 7
14  0b1111111, // 8
15  0b1111011  // 9
16};
17
18void showDigit(int n) {
19  for (int i = 0; i < 7; i++) {
20    bool on = DIGITS[n] & (1 << (6 - i));       // a en soldaki bit / a is the leftmost bit
21    digitalWrite(SEG_PINS[i], COMMON_ANODE ? !on : on);
22  }
23}
24
25void setup() {
26  for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
27}
28
29void loop() {
30  for (int n = 0; n <= 9; n++) {
31    showDigit(n);
32    delay(1000);
33  }
34}
Bu koda bir buton eklersen her basışta sayıyı bir artıran bir sayaç ya da rastgele bir sayı gösteren bir elektronik zar yapabilirsin. Butonun bağlantısı ve sıçrama sorunu Arduino'ya Buton Nasıl Bağlanır? yazısında anlatılıyor.

4 haneli display ve çoklama (multiplexing)

4 haneli 7 segment display
4 haneli 7 segment display: 8 segment hattı dört hane arasında ortaktır, her hanenin ayrıca kendi seçme pini vardır; toplam 12 pin.

Dört haneli display'de dört hane için 32 ayrı segment pini yerine yalnızca 12 pin bulunur: 8 segment hattı (a–g ve dp) bütün hanelerde ortaktır, 4 pin ise hangi hanenin yanacağını seçer. Segment hatları ortak olduğu için aynı anda farklı hanelerde farklı rakamlar yakamazsın. Çözüm çoklamadır: önce yalnızca 1. haneyi birkaç milisaniye yakarsın, sonra 2.'yi, 3.'yü ve 4.'yü. Bu döngü saniyede 50 kereden hızlı tekrarlandığında göz dört haneyi aynı anda yanıyormuş gibi görür. Bu taramayı elle yazmak yerine SevSeg kütüphanesini kullanmak çok daha kolaydır:

Arduino (C++)
1#include "SevSeg.h"
2
3SevSeg sevseg;
4
5void setup() {
6  byte digitPins[] = {2, 3, 4, 5};                    // hane seçme pinleri / digit select pins
7  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};  // a, b, c, d, e, f, g, dp
8  sevseg.begin(COMMON_CATHODE, 4, digitPins, segmentPins, true);  // dirençler segmentlerde / resistors on segments
9  sevseg.setBrightness(90);
10}
11
12void loop() {
13  sevseg.setNumber(millis() / 1000);   // geçen saniye / elapsed seconds
14  sevseg.refreshDisplay();             // sürekli çağrılmalı / must be called continuously
15}
Çoklamalı bir display'de loop() içinde delay() kullanma. Tarama durur ve ekranda yalnızca son hane yanık kalır. Zamanlamayı millis() ile yap ve refreshDisplay() fonksiyonunun sürekli çağrılmasını sağla.

TM1637 modülü: 4 hane, yalnızca 2 kablo

TM1637 4 haneli 7 segment ekran modülü
TM1637 modülü: tarama işini içindeki sürücü yonga yapar; CLK, DIO, VCC ve GND olmak üzere yalnızca 4 pinle bağlanır.

12 kablo ve sürekli tarama zahmetli geliyorsa TM1637 modülü tam sana göre. Üzerindeki sürücü yonga çoklamayı kendisi yapar; Arduino yalnızca CLK ve DIO pinleriyle hangi sayının gösterileceğini söyler. Çoğu modelde saat yapmak için ortada iki nokta (:) da bulunur. Kütüphane Yöneticisi'nden Avishay Orpaz'ın TM1637 kütüphanesini kur; aşağıdaki kod dakika ve saniyeyi iki noktayla birlikte gösterir:

Arduino (C++)
1#include <TM1637Display.h>
2
3TM1637Display display(2, 3);   // CLK, DIO
4
5void setup() {
6  display.setBrightness(5);    // 0–7
7}
8
9void loop() {
10  int minutes = (millis() / 60000) % 60;
11  int seconds = (millis() / 1000) % 60;
12  // ortadaki iki noktayla dakika:saniye / minutes:seconds with the colon
13  display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
14  delay(200);
15}

ESP32 ve Raspberry Pi Pico ile 7 segment

Tek haneli bir display'i ESP32 ya da Pico'ya doğrudan bağlayabilirsin; pinler 3,3 V verdiği için segmentler biraz daha sönük yanar, bu yüzden 100–150 Ω gibi daha küçük dirençler kullan. TM1637 modülü 3,3 V ile de çalışır ve ESP32'de aynı Arduino kütüphanesiyle kullanılır. Pico'da MicroPython için tm1637.py dosyasını (mcauser'ın kütüphanesi) Pico'ya kopyalaman yeterlidir:

MicroPython
1import tm1637
2from machine import Pin
3import time
4
5tm = tm1637.TM1637(clk=Pin(16), dio=Pin(17))   # tm1637.py Pico'da olmalı / tm1637.py must be on the Pico
6tm.brightness(4)                               # 0–7
7
8count = 0
9while True:
10    tm.number(count)        # -999 … 9999
11    count += 1
12    time.sleep(1)

7 segment mi, LCD mi, OLED mi?

Özellik7 segment16x2 LCDOLED
GösterebildiğiRakamlar ve birkaç harfHarf, rakam, özel karakterMetin, grafik, simge
OkunabilirlikÇok parlak, uzaktan okunurArka ışıkla iyiYüksek kontrast ama küçük
Pin ihtiyacı8 ve üzeri (TM1637 ile 2)2 (I2C)2 (I2C)
Uygun kullanımSaat, sayaç, skor tabelasıMenü, ölçüm metniGrafik, ikon, küçük cihazlar

Yalnızca sayı göstereceksen ve uzaktan okunması önemliyse 7 segment rakipsizdir. Metin, birim ve menü gerekiyorsa I2C LCD Ekran Kullanımı yazısına göz at.

7 segment display ile proje fikirleri

  • Elektronik zar: Butona basınca 1–6 arası rastgele bir sayı göster.
  • Butonlu sayaç: Bir butonla artan, diğeriyle sıfırlanan bir sayaç yap.
  • Dijital saat: TM1637 ve bir RTC saat modülüyle elektrik kesilse de saati kaybetmeyen bir saat.
  • Geri sayım: Masa oyunları ya da deneyler için ayarlanabilir bir zamanlayıcı.
  • Sıcaklık göstergesi: DHT11 ile ölçülen sıcaklığı büyük rakamlarla göster.
  • Reaksiyon testi: LED yandıktan sonra butona ne kadar hızlı bastığını milisaniye olarak göster.

Sık yapılan hatalar ve çözümleri

  • Hiçbir segment yanmıyor: Ortak pin yanlış yerde; ortak anotlu bir display'i GND'ye bağlamış olabilirsin.
  • Rakamlar bozuk görünüyor: Segment ile Arduino pini eşlemesi hatalı; her segmenti tek tek yakarak kontrol et.
  • Bazı rakamlar sönük: Tek direnç ortak pine takılmış; her segmente ayrı direnç kullan.
  • 4 hanede yalnızca bir hane yanıyor ya da titriyor: loop() içinde delay() var ya da tarama yeterince sık yapılmıyor.
  • Yanması gerekenler sönük, diğerleri yanık: Ortak anot ve katot karışmış; COMMON_ANODE değerini değiştir.
  • Pin yetmiyor: TM1637 modülü, MAX7219 sürücü ya da 74HC595 kaydırma yazmacıyla pin sayısını azalt.

Her segmentin aslında bir LED olduğunu bilmek, 7 segment display'i anlamanın anahtarıdır; temeller için LED Nedir? yazısına göz at. BlueGrays uygulamasında 0–9 sayma, butonlu sayaç, zar, 4 haneli dijital saat ve bomba animasyonu projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.

Sıkça sorulan sorular

7 segment display'e kaç ohm direnç takılır?

5 V'ta her segment için 220–330 Ω uygundur; 220 Ω daha parlak, 330 Ω daha az akımlı bir ışık verir. ESP32 ve Pico gibi 3,3 V kartlarda 100–150 Ω kullanabilirsin. Direnci ortak pine değil, her segment hattına ayrı ayrı tak.

7 segment display'in ortak anot mu ortak katot mu olduğunu nasıl anlarım?

Ortak pini (3 ya da 8) GND'ye bağla ve bir segment pinini 220 Ω dirençle 5V'a dokundur; segment yanıyorsa ortak katottur. Yanmıyorsa ortak pini 5V'a, segment pinini dirençle GND'ye bağla; şimdi yanıyorsa ortak anottur. Ürün kodunda genelde CC ya da CA ibaresi de bulunur.

7 segment display kaç pinlidir?

Tek haneli display'lerde 10 pin vardır: 7 segment, 1 nokta ve 2 ortak pin. Dört haneli display'lerde 12 pin bulunur: 8 ortak segment hattı ve 4 hane seçme pini. TM1637 gibi modüller ise yalnızca 4 pinle (CLK, DIO, VCC, GND) bağlanır.

4 haneli display'de neden sadece bir hane yanıyor?

Dört haneli display'ler çoklamayla çalışır ve hanelerin sürekli sırayla taranması gerekir. loop() içinde delay() kullanırsan tarama durur ve yalnızca son hane yanık kalır. SevSeg gibi bir kütüphane kullan, refreshDisplay() fonksiyonunu sürekli çağır ve zamanlamayı millis() ile yap.

7 segment display'de harf yazılabilir mi?

Bazı harfler yazılabilir: A, b, C, d, E, F, H, L, P, U ve o gibi harfler tanınabilir şekilde gösterilir. K, M, W ve X gibi harfler ise yedi segmentle düzgün çizilemez. Metin göstermen gerekiyorsa LCD ya da OLED ekran daha uygundur.

7 segment display'i daha az pinle nasıl kullanırım?

En kolay yol sürücü yongalı bir modül kullanmaktır: TM1637 dört haneyi 2 kabloyla, MAX7219 sekiz haneyi 3 kabloyla sürer. Kendi devreni kurmak istersen 74HC595 kaydırma yazmacıyla 8 segmenti yalnızca 3 Arduino pininden kontrol edebilirsin.

Tüm projeleri gör
7 Segment Display İle 0-9 Sayı Yazdırma
#41Orta
Premium

7 Segment Display İle 0-9 Sayı Yazdırma

7 segment display üzerinde 0'dan 9'a kadar sayıları sırayla gösteren proje. Segment pinlerini kontrol ederek rakam oluşturma mantığını öğretir.

4.5(30)
42
7 Segment Display İle 0-99 Sayı Yazdırma
#42İleri
Premium

7 Segment Display İle 0-99 Sayı Yazdırma

Çift haneli 7 segment display ile 0'dan 99'a kadar sayıları gösteren proje. Bit işlemleri (bitRead) ve birler-onlar basamağı ayrıştırma mantığını öğretir.

4.5(27)
35
7 Segment Display Ve Buton İle Sayaç
#43İleri
Premium

7 Segment Display Ve Buton İle Sayaç

3 buton ile 7 segment display üzerindeki sayıyı artıran, azaltan ve sıfırlayan sayaç projesi. Sınır kontrolü ve kullanıcı etkileşimli sayaç mantığını öğretir.

4.6(35)
46
Zar Projesi
#79Orta
Premium

Zar Projesi

Butona her basışta 1–6 arasında rastgele bir sayı üretip 7 segment ekranda gösteren zar projesi. Debounce mekanizması sayesinde tek basışta tek sonuç üretilir.

5.0(48)
67
4'lü 7 Segment Display'e 0-9999 Sayı Yazdırma
#47Orta
Premium

4'lü 7 Segment Display'e 0-9999 Sayı Yazdırma

4'lü 7 segment display üzerinde 0'dan 9999'a kadar sayıları SevSeg kütüphanesi ile gösteren proje. Multiplexing (tarama) yöntemiyle çok haneli gösterim mantığını öğretir.

4.4(19)
25
4'lü 7 Segment Display İle Dijital Saat
#48Orta
Premium

4'lü 7 Segment Display İle Dijital Saat

DS1302 RTC modülü ve 4'lü 7 segment display ile saat ve dakikayı gösteren dijital saat projesi. Gerçek zamanlı saat verisi ile segment gösterimini birleştirir.

4.8(56)
73
4'lü 7 Segment Display İle Bomba Animasyonu
#49Başlangıç
Premium

4'lü 7 Segment Display İle Bomba Animasyonu

4'lü 7 segment display üzerinde geri sayım yapan, potansiyometre ile hızlandırılabilen ve butonlarla iptal edilebilen bomba animasyonu projesi. Zamanlayıcı, çoklu giriş kontrolü ve millis() kullanımın

4.8(62)
78
ESP32 TM1637 4 Haneli 7-Segment Display
#125Orta
Premium

ESP32 TM1637 4 Haneli 7-Segment Display

TM1637 sürücülü 4 haneli 7-segment display modülünü ESP32 ile kontrol ediyoruz. Sadece 2 GPIO (CLK ve DIO) kullanarak 0-9999 arası sayaç çalıştırıyor, parlaklık seviyesini ayarlıyor ve ortadaki iki nokta (`:`) karakterini saat formatında gösteriyoruz. TM1637Display kütüphanesi sayesinde sayı, hex, segment ve string kontrolü çok kolay.

4.7(20)
32

7 segment display'in segmentlerini ve pin dizilimini, ortak anot ile katodu ayırt etmeyi, Arduino ile 0–9 saymayı, 4 haneli ekranda çoklamayı ve TM1637 modülüyle 2 kabloluk saat yapmayı öğren.

7 Segment Display Kullanımı: Arduino ile Sayı Gösterme, Ortak Anot ve Katot | BlueGrays