HIZLI VE GÜVENİLİR KARGO
1.750 TL üzeri ücretsiz kargo
HIZLI VE GÜVENİLİR KARGO
1.750 TL üzeri ücretsiz kargo
Mesafe Ölçer Projesi: 7 Segment Ekranlı Dijital Metre

Mesafe Ölçer Projesi: 7 Segment Ekranlı Dijital Metre

Ultrasonik sensörler ile mesafe ölçmek, Arduino projelerinin en popüler uygulamalarından biridir. Peki ya bu mesafeyi dijital bir ekranda görmek ister misiniz? Bu projede, bir ultrasonik sensörden gelen mesafe bilgisini, 4 haneli 7 segment bir ekranda nasıl göstereceğimizi adım adım öğreneceğiz. Hem sensör okumayı hem de dijital ekranları kontrol etmeyi bu projeyle pekiştireceksiniz!

Gerekli Malzemeler

Bu projeyi hayata geçirmek için ihtiyacınız olan malzemeler aşağıda listelenmiştir. Bu bileşenler genellikle elektronik hobi kitlerinde bulunur.

  • Arduino Uno R3: Projemizin beyni, sensörden gelen veriyi işleyecek ve ekrana gönderecek.
  • Ultrasonik sensör (HC-SR04): Ses dalgaları yayarak mesafeyi ölçen sensörümüz.
  • 4 haneli 7 segment display: Mesafe değerini göstereceğimiz dijital ekran. Set halindeki modüller genellikle daha kolay bağlantı sunar. Eğer tekli 7 segment display kullanacaksanız, 4 adet gerekecektir.
  • 8 x 220Ω direnç: Her bir 7 segment display'in segment bacakları için akım sınırlayıcı dirençler. (Eğer 7 segment modülünüzde entegre dirençler varsa buna gerek kalmayabilir.)
  • Breadboard: Devre bağlantılarını lehim yapmadan kurmak için.
  • Jumper kablolar: Bileşenleri birbirine ve Arduino'ya bağlamak için.
  • USB kablosu: Arduino'yu bilgisayara bağlamak ve kod yüklemek için.
  • (Opsiyonel) 10kΩ potansiyometre: Ekran parlaklığını ayarlamak isterseniz.

Devre Bağlantı Şeması

Devre bağlantıları projenin doğru çalışması için kritik öneme sahiptir. Özellikle 7 segment ekran bağlantıları biraz kablo kalabalığı yaratabilir, bu yüzden dikkatlice takip edin.

1. Ultrasonik Sensör (HC-SR04) Bağlantıları:

  • VCC pinini Arduino'nun 5V pinine bağlayın.
  • GND pinini Arduino'nun GND pinine bağlayın.
  • Trig pinini Arduino'nun D9 pinine bağlayın.
  • Echo pinini Arduino'nun D10 pinine bağlayın.

2. 4 Haneli 7 Segment Display Bağlantıları:

  • Eğer elinizdeki 4 haneli 7 segment display, bir TM1637 gibi modül ise, bağlantılar çok daha basittir:VCC pinini Arduino 5V'aGND pinini Arduino GND'yeDIO pinini Arduino D2'ye (veri pini)CLK pinini Arduino D3'e (saat pini) bağlayın.
  • VCC pinini Arduino 5V'a
  • GND pinini Arduino GND'ye
  • DIO pinini Arduino D2'ye (veri pini)
  • CLK pinini Arduino D3'e (saat pini) bağlayın.
  • Eğer 4 ayrı ortak katot (common cathode) 7 segment display kullanıyorsanız ve bunları multiplexing ile sürecekseniz, bağlantı şeması daha karmaşık olacaktır. Her bir segment (A, B, C, D, E, F, G, DP) için Arduino'nun dijital pinlerine (örn. D4-D11) birer adet 220Ω direnç üzerinden bağlantı yapmanız gerekir. Ayrıca her haneyi (digit) açıp kapatmak için 4 adet NPN transistör (örn. BC547) ve bunların baz (base) pinlerine Arduino'dan gelecek kontrol sinyalleri (örn. A0-A3) gerekecektir. Bu senaryo için kod ve bağlantı oldukça uzayacaktır. Bu blog yazısında, basitlik açısından genellikle tek bir entegre modül (TM1637 gibi) veya tek haneli displayler üzerinden anlatım yapılacaktır.Basit Birleşik 7 Segment Modül (Örn: TM1637) Varsayımı ile devam edelim:Modülün VCC pinini Arduino 5V'a.Modülün GND pinini Arduino GND'ye.Modülün DIO (Data Input/Output) pinini Arduino D2'ye.Modülün CLK (Clock) pinini Arduino D3'e.
  • Basit Birleşik 7 Segment Modül (Örn: TM1637) Varsayımı ile devam edelim:Modülün VCC pinini Arduino 5V'a.Modülün GND pinini Arduino GND'ye.Modülün DIO (Data Input/Output) pinini Arduino D2'ye.Modülün CLK (Clock) pinini Arduino D3'e.
  • Modülün VCC pinini Arduino 5V'a.
  • Modülün GND pinini Arduino GND'ye.
  • Modülün DIO (Data Input/Output) pinini Arduino D2'ye.
  • Modülün CLK (Clock) pinini Arduino D3'e.

3. Genel Güç Bağlantıları:

  • Arduino'yu bilgisayarınıza USB kablosu ile bağlayın.

Arduino Kodları

Devre bağlantılarını tamamladıktan sonra sıra projenin beynini oluşturan koda geldi. Arduino IDE'yi açın ve aşağıdaki kodları kopyalayıp yapıştırın. Bu kod, ultrasonik sensörden gelen mesafe verisini okuyacak ve 7 segment ekranda gösterecektir.

Not: Bu kod, TM1637 gibi entegre 4 haneli 7 segment display modülleri için yazılmıştır ve "TM1637Display" kütüphanesini gerektirir. Kütüphaneyi kurmak için Arduino IDE'de Taslak > Kütüphaneleri Dahil Et > Kütüphaneleri Yönet yolunu izleyip "TM1637Display" aratarak kurabilirsiniz.

C++

#include <TM1637Display.h> // TM1637 7-Segment Display kütüphanesini dahil ediyoruz

// Ultrasonik sensör pinleri
const int trigPin = 9;
const int echoPin = 10;

// TM1637 Display pinleri
const int CLK = 3; // CLK pini Arduino D3'e bağlı
const int DIO = 2; // DIO pini Arduino D2'ye bağlı

// TM1637Display nesnesini oluşturuyoruz
TM1637Display display(CLK, DIO);

long duration;
int distance;

void setup() {
  // Ultrasonik sensör pinlerini ayarlıyoruz
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
  Serial.begin(9600); // Seri monitörü başlatıyoruz
  
  // Display'i başlatıyoruz
  display.setBrightness(0x0a); // Parlaklık ayarı (0x00 en düşük, 0x0f en yüksek)
}

void loop() {
  // Mesafe ölçüm fonksiyonunu çağırıyoruz
  distance = getDistance();
  
  // Eğer mesafe 0'dan büyükse (geçerli bir ölçüm)
  if (distance > 0) {
    // Mesafeyi Seri Monitöre yazdırıyoruz
    Serial.print("Mesafe: ");
    Serial.print(distance);
    Serial.println(" cm");

    // Mesafeyi 7-segment ekranda gösteriyoruz
    // Eğer mesafe 9999 cm'den büyükse, ekranda "----" gösterelim
    if (distance > 9999) {
      display.showNumberDecEx(0000, 0b11100000, false, 4, 0); // "----" gibi bir şey
    } else {
      // Mesafeyi desimal olarak gösteriyoruz, önde sıfırları gizlemiyoruz
      display.showNumberDec(distance, false, 4, 0); 
    }
  } else {
    // Geçersiz okuma olursa ekranda "Err " gösterebiliriz
    // 'E', 'r', 'r', ' ' karakterlerini temsil eden segment desenleri gerekebilir
    // Ya da basitçe ekranda sıfır bırakabiliriz
    display.showNumberDec(0, false, 4, 0); 
    Serial.println("Mesafe okunamadı.");
  }
  
  delay(200); // Her ölçüm arasında kısa bir bekleme
}

// Mesafe ölçümü yapan fonksiyon
int getDistance() {
  // Trig pinine kısa bir sinyal gönderiyoruz
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Echo pininden gelen sinyalin süresini ölçüyoruz
  duration = pulseIn(echoPin, HIGH);
  
  // Süreyi mesafeye çeviriyoruz (cm cinsinden)
  // Ses hızı ~0.034 cm/mikrosaniye'dir
  int dist = duration * 0.034 / 2;
  return dist;
}

Projenin Çalışma Mantığı ve Geliştirme Fikirleri

Bu projede, ultrasonik sensörden gelen mesafe verisini okuyarak bunu 4 haneli bir 7 segment ekranda görüntülemeyi öğrendiniz. Kod, getDistance() fonksiyonu ile mesafeyi hesaplar ve TM1637Display kütüphanesi yardımıyla bu değeri ekrana yansıtır.

Bu projeyi daha da geliştirmek isterseniz:

  • Birim Değişikliği: Mesafeyi santimetre yerine inç veya metre olarak gösterme seçeneği ekleyebilirsiniz.
  • Alarm Fonksiyonu: Belirli bir mesafenin altına düşüldüğünde bir buzzer ile sesli uyarı verebilirsiniz.
  • Ortam Işığına Göre Parlaklık: Bir LDR (ışık sensörü) kullanarak ekranın parlaklığını ortam ışığına göre otomatik olarak ayarlayabilirsiniz (potansiyometre yerine).
  • Hareket Algılama: Mesafe değişimi çok hızlı olduğunda (bir nesne hızla yaklaştığında veya uzaklaştığında) farklı bir aksiyon tetikleyebilirsiniz.

Bu proje, hem sensör kullanımını hem de dijital ekranlarla veri görüntülemeyi birleştiren harika bir temel oluşturuyor. Kendi fikirlerini ekleyerek projeyi daha da kişiselleştirmekten çekinme!