Skip to Content
ProjelerArduino ProjeleriArduino ile OLED Ekranlı Ultrasonik Mesafe Ölçer

Arduino ile OLED Ekranlı Ultrasonik Mesafe Ölçer

Bu projede Arduino Uno ile küçük bir dijital mesafe ölçer yapacaksınız. Cihaz, HC-SR04 ultrasonik sensör ile karşısındaki cismin uzaklığını santimetre cinsinden ölçer, sonucu OLED ekranda gerçek zamanlı gösterir ve cisim 10 cm’nin altına yaklaştığında buzzer ile sesli uyarı verir.

Kullanım alanları oldukça geniştir: arabalarda kullanılan park sensörlerinin temel çalışma prensibi, engel algılayan robotlar, otomatik açılan çöp kovaları ve mesafe temelli tüm akıllı sistemler bu projede öğreneceğiniz mantığa dayanır.

Bu proje, sensör okuma, ekran kullanımı ve sesli uyarı gibi üç farklı bileşeni bir arada çalıştırmayı öğrenmek isteyenler için ideal bir uygulamadır. Anlatım baştan sona sade tutulmuş, tüm bağlantılar adım adım açıklanmıştır.

Projenin Amacı

Bu projenin amacı, Arduino Uno kullanarak ultrasonik ses dalgalarıyla mesafe ölçen ve sonucu görsel + sesli olarak kullanıcıya bildiren bir cihaz oluşturmaktır.

Bu çalışma sonunda:

  • Ultrasonik mesafe sensörünün çalışma mantığını,
  • Arduino Uno ile dijital giriş ve çıkışların kullanımını,
  • I2C haberleşme protokolünün temel yapısını,
  • SSD1306 OLED ekran üzerine yazı ve sayı yazdırmayı,
  • tone() fonksiyonuyla sesli alarm oluşturmayı,
  • Sensör verisine göre karar veren Arduino kodu yazmayı öğrenebilirsiniz.

HC-SR04 Nasıl Çalışır?

HC-SR04, karşısındaki cisme kadar olan uzaklığı ölçen bir sensördür. Çalışma mantığı, yarasaların engellerden kaçınmak için kullandığı yöntemin aynısıdır: eko prensibi.

Sensörün üzerinde iki adet yuvarlak metal silindir bulunur. Bunlardan biri verici (transmitter), diğeri alıcıdır (receiver). Ölçüm yapılırken şunlar olur:

  1. Verici, insan kulağının duyamayacağı yüksek frekanslı bir ses dalgası gönderir.
  2. Bu dalga karşısındaki cisme çarpıp geri döner.
  3. Alıcı, geri dönen dalgayı yakalar.
  4. Arduino, dalganın gidip gelme süresini ölçer.
  5. Ses hızı bilindiği için (yaklaşık 343 m/s) bu süreden mesafe hesaplanır.

Kısacası: Mesafe = (Ses hızı × Süre) / 2. İkiye bölüyoruz çünkü ses dalgası mesafeyi hem gidip hem gelerek iki kez katediyor.

Gerekli Malzemeler

Aşağıdaki görselde proje için kullanılacak temel malzemeler yer almaktadır.

Arduino OLED ekranlı ultrasonik mesafe ölçer gerekli malzemeler

MalzemeGörevi
Arduino UnoProjenin ana kontrol kartıdır.
USB kablosuArduino’yu bilgisayara bağlamak ve kod yüklemek için kullanılır.
HC-SR04 ultrasonik mesafe sensörüKarşısındaki cismin uzaklığını ölçer.
1.3 inç 128×64 OLED ekran (SSD1306, I2C, 4 pin)Ölçüm sonuçlarını gerçek zamanlı gösterir.
Aktif buzzer (5V)Cisim çok yaklaştığında sesli uyarı verir.
BreadboardDevreyi lehim yapmadan kurmak için kullanılır.
Erkek-erkek jumper kablo (16 adet)Arduino ve breadboard arasında bağlantı kurmak için kullanılır.

Not: 1.3 inç OLED yerine 0.96 inç SSD1306 OLED ekran da kullanılabilir. Her ikisi de aynı sürücüyü kullanır ve aynı kodla çalışır.

1. Adım: Parçaların Breadboard’a Yerleştirilmesi

İlk olarak OLED ekranı, HC-SR04 sensörünü ve buzzerı breadboard üzerine yerleştirin. Bağlantı kablolarını takmadan önce parçaların doğru konumda olduğundan emin olun.

OLED ekran: Breadboard’un sol tarafına yerleştirin. Ekranın görüntü yüzeyi yukarı bakmalıdır. Ekran üzerindeki dört pin (VCC, GND, SCK, SDA) breadboard üzerinde farklı sütunlara girmelidir.

HC-SR04 sensörü: Breadboard’un orta üst kısmına yerleştirin. Sensörün iki yuvarlak metal silindirinin ölçüm yapacağınız yöne dönük olduğundan emin olun. Sensörün dört pini (VCC, TRIG, ECHO, GND) breadboard üzerinde farklı sütunlara girmelidir.

Buzzer: Breadboard’un boş kalan alt kısmına yerleştirin. Buzzer üzerinde bir + işareti varsa hangi bacağın pozitif olduğunu not edin. İki bacağın farklı sütunlarda olmasına dikkat edin.

OLED ekran HC-SR04 ve buzzerın breadboard yerleşimi

Dikkat: Parçaların pinlerini aynı bağlantı sütununa takmayın. Bu durum kısa devreye ve parçaların çalışmamasına neden olur. Pinlerin çevresinde jumper kabloları takabilecek kadar boşluk bırakın.

2. Adım: Breadboard Güç Hatlarının Bağlanması

Bu adımda Arduino Uno’nun 5V ve GND pinleri breadboard üzerindeki güç hatlarına bağlanır. Böylece tüm bileşenler (OLED, HC-SR04, buzzer) aynı güç hattından beslenebilir.

Yapılacak bağlantılar:

  • Arduino 5V pinini bir jumper kablo ile breadboard üzerindeki kırmızı çizgili (+) güç hattına bağlayın. Bu hat artık tüm devreye 5 volt taşıyacaktır.
  • Arduino GND pinini bir jumper kablo ile breadboard üzerindeki mavi çizgili (–) hatta bağlayın. Bu hat devrenin ortak eksi bağlantısıdır ve elektrik akımının devreyi tamamlayıp Arduino’ya geri dönmesini sağlar.

Arduino breadboard güç hatları bağlantısı

Güç hattı bağlantı özeti

BağlantıNereye bağlanır?
Arduino 5VBreadboard + hattı (kırmızı)
Arduino GNDBreadboard – hattı (mavi)

İpucu: Güç hatlarını en başta bağlamak, sonraki adımlarda tüm parçaların besleme kablolarını doğrudan breadboard’a takabilmenizi sağlar. Bu, kablo karışıklığını büyük ölçüde azaltır.

3. Adım: HC-SR04 Sensör Bağlantılarının Yapılması

Şimdi HC-SR04 ultrasonik sensörün güç ve sinyal bağlantılarını yapacağız. Sensörün üzerinde dört pin bulunur: VCC, TRIG, ECHO, GND. Bağlantı yaparken sensör kartının üzerinde yazan pin isimlerini kontrol edin.

  • VCC pinini breadboard üzerindeki + güç hattına bağlayın. Bu bağlantı sensörü 5 voltluk enerjiyle besler.
  • GND pinini breadboard üzerindeki – hatta bağlayın. Bu bağlantı sensörle Arduino arasında ortak toprak oluşturur.
  • TRIG pinini Arduino’nun D9 dijital pinine bağlayın. Arduino bu pin üzerinden sensöre “ölçüm başlat” komutu gönderir.
  • ECHO pinini Arduino’nun D10 dijital pinine bağlayın. Sensör, gönderilen ses dalgasının geri dönme süresini bu pin üzerinden Arduino’ya bildirir.

HC-SR04 bağlantı özeti

BağlantıNereye bağlanır?
HC-SR04 VCCBreadboard + hattı
HC-SR04 GNDBreadboard – hattı
HC-SR04 TRIGArduino D9
HC-SR04 ECHOArduino D10

4. Adım: OLED Ekran Bağlantılarının Yapılması

OLED ekran üzerinde dört bağlantı pini bulunur: VCC, GND, SDA ve SCK. Bu ekran, Arduino ile I2C haberleşmesi kullanır. I2C, yalnızca iki kabloyla (SDA veri hattı ve SCK saat hattı) veri aktarımı yapılmasını sağlayan pratik bir haberleşme yöntemidir.

  • VCC pinini breadboard üzerindeki + güç hattına bağlayın.
  • GND pinini breadboard üzerindeki – hatta bağlayın.
  • SDA pinini Arduino’nun A4 pinine bağlayın. Ekranda gösterilecek yazılar ve sayılar bu hat üzerinden gönderilir.
  • SCK pinini Arduino’nun A5 pinine bağlayın. Bu hat haberleşmenin zamanlamasını düzenleyen saat sinyalini taşır. Bazı ekranlarda SCL olarak da adlandırılır.

OLED bağlantı özeti

BağlantıNereye bağlanır?
OLED VCCBreadboard + hattı
OLED GNDBreadboard – hattı
OLED SDAArduino A4
OLED SCKArduino A5

Dikkat: OLED ekranların pin sıralaması modele göre değişebilir. Kabloları bağlamadan önce ekran kartı üzerindeki VCC, GND, SDA ve SCK yazılarını mutlaka kontrol edin. Yanlış besleme bağlantısı ekrana zarar verebilir.

5. Adım: Buzzer Bağlantılarının Yapılması

Buzzer, ölçülen mesafe 10 cm veya daha az olduğunda Arduino tarafından çalıştırılacak ve sesli uyarı verecek.

  • Buzzerın pozitif (+) bacağını Arduino’nun D6 dijital pinine bağlayın. Arduino bu pin üzerinden buzzerı açıp kapatır.
  • Buzzerın negatif (–) bacağını breadboard üzerindeki – hatta bağlayın. Bu hat zaten Arduino GND’ye bağlı olduğu için buzzerın negatif bacağı da dolaylı olarak Arduino GND’ye bağlanmış olur.

Buzzer bağlantısı yapılmış devre

Buzzer bağlantı özeti

BağlantıNereye bağlanır?
Buzzer + (pozitif)Arduino D6
Buzzer – (negatif)Breadboard – hattı

Devre Bağlantı Özeti

Tüm bağlantılar tamamlandığında Arduino üzerindeki pinler şu şekilde kullanılır:

ElemanArduino bağlantısı
HC-SR04 TRIGD9
HC-SR04 ECHOD10
Buzzer +D6
OLED SDAA4
OLED SCKA5
Tüm VCC pinleri5V (breadboard + hattı üzerinden)
Tüm GND pinleriGND (breadboard – hattı üzerinden)

Devrenin tam olarak kurulmuş hali aşağıdaki görseldeki gibi olmalıdır:

Ultrasonik mesafe ölçer tam devre bağlantısı

6. Adım: Arduino IDE’yi Hazırlama ve Kütüphaneleri Yükleme

Devre bağlantılarını tamamladıktan sonra Arduino Uno’yu USB kablosuyla bilgisayara bağlayın. Arduino üzerindeki güç ışığının yanması, kartın bilgisayardan enerji aldığını gösterir.

Kart ve Port Seçimi

Arduino IDE’yi açın ve üst menüden şu adımları izleyin:

  1. Araçlar → Kart → Arduino AVR Boards → Arduino Uno seçin.
  2. Araçlar → Port menüsünden Arduino’nun bağlı olduğu portu seçin.

Port adı bilgisayara göre değişebilir. Windows’ta genellikle COM3, COM4 veya COM5 gibi görünür.

Not: Port seçeneği görünmüyorsa USB kablosunu çıkarıp yeniden takın. Ayrıca kullandığınız USB kablosunun yalnızca şarj kablosu değil, veri aktarımını destekleyen bir kablo olduğundan emin olun.

Kütüphaneleri Yükleme

Bu projede OLED ekranı çalıştırmak için üç kütüphaneye ihtiyaç vardır. HC-SR04 sensörü ve buzzer için ayrıca bir kütüphane kurulmasına gerek yoktur — bu bileşenler Arduino’nun temel komutlarıyla kontrol edilir.

Arduino IDE’de Araçlar → Kütüphaneleri Yönet yolunu izleyerek Kütüphane Yöneticisini açın.

Arama kutusunu kullanarak aşağıdaki kütüphaneleri tek tek aratın ve Yükle düğmesine basın:

KütüphaneGörevi
Adafruit GFX LibraryOLED ekrana yazı, sayı, çizgi ve şekil çizmek için kullanılan temel grafik kütüphanesidir.
Adafruit SSD1306SSD1306 sürücülü OLED ekranın Arduino tarafından kontrol edilmesini sağlar.
Adafruit BusIOArduino ile OLED arasındaki I2C haberleşmesinde yardımcı olur.

Dikkat: Aynı isimde farklı geliştiricilere ait kütüphaneler bulunabilir. Kurulum yaparken mümkün olduğunca Adafruit tarafından yayımlanan kütüphaneleri seçin. Adafruit SSD1306 yüklerken bağımlılıkları soran bir pencere açılırsa “Install all” (Tümünü yükle) seçeneğine basın.

Arduino Kodu

Aşağıdaki kod, HC-SR04 sensöründen mesafeyi okur, OLED ekranda gösterir ve mesafe 10 cm’nin altına düştüğünde buzzerı çalıştırır.

#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // OLED ekran ayarlari #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 #define SCREEN_ADDRESS 0x3C // HC-SR04 pinleri #define TRIG_PIN 9 #define ECHO_PIN 10 // Buzzer pini #define BUZZER_PIN 6 // Alarmin calisacagi mesafe (cm) #define ALARM_MESAFESI 10.0 Adafruit_SSD1306 display( SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET ); void setup() { Serial.begin(9600); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(TRIG_PIN, LOW); noTone(BUZZER_PIN); // OLED ekrani baslat if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println("OLED ekran baslatilamadi!"); while (true) { noTone(BUZZER_PIN); delay(100); } } display.clearDisplay(); display.setTextColor(SSD1306_WHITE); // Baslangic mesaji display.setTextSize(1); display.setCursor(20, 18); display.println("ULTRASONIK"); display.setCursor(16, 34); display.println("MESAFE OLCER"); display.display(); delay(2000); } void loop() { // HC-SR04 sensorune olcum sinyali gonder digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // ECHO pinindeki sinyal suresini olc unsigned long sure = pulseIn(ECHO_PIN, HIGH, 30000); // Sensorden olcum alinamazsa if (sure == 0) { noTone(BUZZER_PIN); Serial.println("Mesafe okunamadi!"); display.clearDisplay(); display.setTextSize(1); display.setCursor(12, 22); display.println("Olcum alinamadi"); display.setCursor(14, 38); display.println("Baglantiyi kontrol et"); display.display(); delay(500); return; } // Mesafeyi santimetre olarak hesapla // Ses hizi 343 m/s = 0.0343 cm/mikrosaniye // Dalga gidip geldigi icin 2'ye boluyoruz float mesafe = sure * 0.0343 / 2.0; Serial.print("Mesafe: "); Serial.print(mesafe, 1); Serial.println(" cm"); // 10 cm veya daha yakinsa buzzeri calistir if (mesafe > 0 && mesafe <= ALARM_MESAFESI) { tone(BUZZER_PIN, 1000); } else { noTone(BUZZER_PIN); } // OLED ekrani guncelle display.clearDisplay(); // Baslik display.setTextSize(1); display.setCursor(39, 2); display.println("MESAFE"); // Mesafe degeri display.setTextSize(2); display.setCursor(18, 20); display.print(mesafe, 1); display.print(" cm"); // Mesafeye gore uyari display.setTextSize(1); if (mesafe > 0 && mesafe <= ALARM_MESAFESI) { display.setCursor(13, 50); display.println("DIKKAT! COK YAKIN"); } else if (mesafe < 50) { display.setCursor(49, 50); display.println("YAKIN"); } else { display.setCursor(52, 50); display.println("UZAK"); } display.display(); delay(200); }

Kodu Arduino Uno’ya Yükleme

  1. Kodu Arduino IDE’ye yapıştırın ve sol üstteki Doğrula (✓) düğmesine basın. Kodda hata bulunmuyorsa alt bölümde “Done compiling” mesajı görünür.
  2. Arduino Uno’nun bilgisayara bağlı olduğundan emin olun ve Yükle (→) düğmesine basın.
  3. Yükleme tamamlandığında IDE’nin alt kısmında “Yükleme tamamlandı” mesajı görüntülenir.

Not: OLED ekranda görüntü oluşmazsa kod içerisindeki 0x3C adresini 0x3D olarak değiştirip tekrar deneyin. Bazı OLED modelleri farklı I2C adresi kullanır.

Projenin Çalışması

Arduino Uno’ya enerji verildiğinde ekranda kısa süreyle “ULTRASONIK MESAFE OLCER” başlangıç mesajı görüntülenir. Ardından ölçüm ekranına geçilir.

Ekranda üç bilgi görüntülenir:

  • Üst kısımda: “MESAFE” başlığı
  • Orta kısımda: Ölçülen mesafe (örneğin 23.5 cm)
  • Alt kısımda: Mesafeye göre durum bilgisi
    • DIKKAT! COK YAKIN — 10 cm ve altında (buzzer da çalar)
    • YAKIN — 10 cm ile 50 cm arası
    • UZAK — 50 cm ve üzeri

Cisimleri sensörün önünde hareket ettirerek değerin nasıl değiştiğini gözlemleyebilirsiniz. Serial Monitör’ü (9600 baud) açarak ölçümleri bilgisayarınızdan da takip edebilirsiniz.

Sorun Giderme

SorunOlası çözüm
OLED ekranda görüntü yokKoddaki 0x3C adresini 0x3D yapın. VCC, GND, SDA, SCK bağlantılarını kontrol edin.
Ekranda “Olcum alinamadi” yazıyorHC-SR04’ün VCC, GND, TRIG (D9) ve ECHO (D10) bağlantılarını kontrol edin. Sensörün önünde 2 cm’den yakın veya çok uzak cisim olmadığından emin olun.
Değerler sürekli değişiyor / kararsızSensörün önünde yumuşak, ışığı emen yüzeyler (halı, süngerimsi kumaş) doğru ölçüm alınmasını zorlaştırır. Düz sert bir yüzey deneyin.
Buzzer sürekli ötüyorBuzzerın (+) bacağının D6’ya, (–) bacağının GND hattına bağlı olduğundan emin olun.
Kod yüklenmiyor / derleme hatasıDoğru kart ve portun seçili olduğundan, üç Adafruit kütüphanesinin de yüklü olduğundan emin olun.

Bu Projeyi Geliştirmek İster misiniz?

Cihazınız çalıştıktan sonra şu geliştirmeleri deneyebilirsiniz:

  • Kademeli alarm: Cisim yaklaştıkça buzzer daha sık ötmesin — arabalardaki park sensörü gibi. Mesafeye göre delay() süresini azaltın.
  • LED şerit ekleyin: Mesafeye göre yeşil–sarı–kırmızı LED yakarak görsel uyarı ekleyin.
  • Servo motor ekleyin: Sensörü servo motora monte ederek 180° tarayan bir mini radar sistemi yapın.
  • Uzaklık grafiği: OLED ekranın alt kısmında son 30 ölçümü grafik olarak çizdirin — mesafenin zaman içindeki değişimini görün.