radar ESP8266 Projeleri
schedule 18 dakika okuma

OLED Mesafe Ölçer

ESP8266, HC-SR04 ultrasonik sensör ve OLED ekran ile pratik bir mesafe ölçer yapalım. Grafik gösterim ve seviye dönüştürme teknikleri!

memory ESP8266
sensors HC-SR04
display_settings OLED Ekran

Giriş

Ultrasonik mesafe ölçümü kulağa karmaşık gelebilir ama aslında fikir basit: Sensör kısa bir "ping" gönderir, nesneden seken "eko" geri dönünce iki olay arasındaki zamanı ölçer, sesten daha yavaş hiçbir şey yok kuralıyla mesafeyi hesaplarız. Bu projede, ESP8266 ile hem sensörü okuyacağız hem de sonuçları minik bir OLED ekranda grafik olarak göstereceğiz. Sonunda elinizde, bir nesne yaklaştıkça dolan bir bar grafik oluşacak; projeyi hareket sensörü, park sensörü ya da robotik mesafe telemetrisine dönüştürmek için ideal bir temel.

Yeni başlayanlar için asıl kritik nokta seviye dönüşümü: HC-SR04'ün ECHO pini 5 V seviyesinde; ESP8266 ise 3.3 V ile çalışır. Bu yazıda iki dirençle nasıl basit bir bölücü kuracağınızı, OLED'in I2C adresini nasıl kontrol edeceğinizi ve ölçüm zaman aşımı (timeout) gibi gerçek dünyadan sorunları nasıl ele alacağınızı adım adım anlatıyoruz.

Öğreneceklerin

  • Seviye dönüştürme: HC-SR04 ECHO'su 5V → ESP8266 3.3V (bölücü şart)
  • OLED'de metin + basit grafik çizimi
  • PlatformIO'da ESP8266 projesi kurulumu
  • Ultrasonik mesafe ölçüm prensipleri

Gerekli Parçalar

📶

ESP8266 NodeMCU

WiFi özellikli mikrodenetleyici

📡

HC-SR04 Sensör

Ultrasonik mesafe ölçümü

🖥️

0.96" OLED

Grafik LCD ekran

Bağlantı Şeması

OLED I2C Bağlantısı:

  • SDA → ESP8266 D2
  • SCL → ESP8266 D1
  • VCC → ESP8266 3V3
  • GND → ESP8266 GND

HC-SR04 Bağlantısı (Seviye Bölücü ile):

  • TRIG → ESP8266 D5
  • ECHO → ESP8266 D6 (1kΩ/2kΩ direnç bölücü ile)
  • VCC → ESP8266 5V
  • GND → ESP8266 GND
⚠️ Önemli Uyarı: HC-SR04'ün ECHO pini 5V seviyesindedir! ESP8266'nın D6 pinine doğrudan bağlamayın. 1kΩ ve 2kΩ dirençlerle bölücü devre kurun, yoksa ESP8266 zarar görebilir.

PlatformIO Konfigürasyonu

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
  adafruit/Adafruit SSD1306 @ ^2.5.9
  adafruit/Adafruit GFX Library @ ^1.11.10

Arduino Kodu

#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// OLED ekran boyutları
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// OLED nesnesi oluştur
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// HC-SR04 pin tanımları
const int PIN_TRIG = D5;
const int PIN_ECHO = D6;

long measureCM() {
  // Temiz sinyal için TRIG'i LOW yap
  digitalWrite(PIN_TRIG, LOW);
  delayMicroseconds(3);

  // 10μs'lik TRIG pulse'u gönder
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);

  // ECHO'dan dönen pulse'u oku (timeout 30ms)
  long duration = pulseIn(PIN_ECHO, HIGH, 30000);

  // Ölçüm başarısızsa 0 döndür
  if (duration == 0) return 0;

  // Saniyede 343 metre = 29.155 μs/cm
  // Gidiş dönüş olduğu için / 2 = 58.3 μs/cm
  return duration / 58;
}

void setup() {
  // HC-SR04 pin modlarını ayarla
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);

  // I2C'yi başlat
  Wire.begin();

  // OLED'i başlat (I2C adresi genelde 0x3C)
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  // Ekranı temizle
  oled.clearDisplay();
}

void loop() {
  // Mesafeyi ölç
  long cm = measureCM();

  // Maksimum 200cm ile sınırla
  if (cm > 200) cm = 200;

  // Ekranı temizle
  oled.clearDisplay();

  // Metin gösterimi
  oled.setTextSize(1);
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0, 0);
  oled.print("Mesafe: ");
  oled.print(cm);
  oled.println(" cm");

  // Bar grafik çizimi
  // 0cm = tam dolu bar, 200cm = boş bar
  int barWidth = map(cm, 0, 200, 120, 0);

  // Bar çerçeve çiz
  oled.drawRect(0, 16, 120, 12, SSD1306_WHITE);

  // Dolu bar çiz
  oled.fillRect(0, 16, barWidth, 12, SSD1306_WHITE);

  // Ekranı güncelle
  oled.display();

  // 120ms bekle (yaklaşık 8Hz)
  delay(120);
}

Projenin Çalışma Mantığı

Ultrasonik Mesafe Ölçümü

HC-SR04 sensörü, ultrasonik ses dalgaları (40kHz) kullanarak mesafe ölçer. Çalışma prensibi şöyledir:

  • TRIG pinine 10μs'lik bir pulse gönderilir
  • Sensör 8 adet 40kHz ultrasonik pulse gönderir
  • Gönderilen dalgalar nesneye çarpıp geri döner
  • ECHO pini, gönderme ile alma arasındaki süreyi HIGH olarak tutar
  • Bu süre mesafeyle orantılıdır: Mesafe = (Süre × Ses Hızı) / 2

OLED Grafik Ekran

0.96" OLED ekran, SSD1306 sürücüsü ile çalışır. Özellikleri:

  • 128×64 piksel çözünürlük
  • I2C protokolü (sadece 4 kablo)
  • Düşük güç tüketimi (20mA)
  • Yüksek kontrast ve okunabilirlik
  • Adafruit GFX kütüphanesi ile kolay grafik çizimi

Test Etme ve Sorun Giderme

İlk Test

  1. ESP8266'yı USB'ye bağlayın
  2. Kodu derleyip yükleyin
  3. OLED'de "Mesafe: X cm" yazısı görünmeli
  4. Elinizi sensörün önüne getirin
  5. Bar grafiği el hareketlerinizi takip etmeli

Sık Karşılaşılan Hatalar

ESP8266 Zarar Görüyor

  • Çözüm: HC-SR04 ECHO'suna 1kΩ/2kΩ direnç bölücü ekleyin
  • Neden: ESP8266 3.3V ile çalışır, HC-SR04 5V çıkış verir

OLED Adresi Hatası

  • Çözüm: 0x3C yerine 0x3D deneyin
  • Neden: Bazı OLED modüllerinde I2C adresi farklı olabilir

Genişletme Önerileri

Basit Geliştirmeler

  • Sesli Uyarı: Buzzer ile yakınlık uyarısı
  • LED Göstergesi: RGB LED ile renkli mesafe göstergesi
  • Buton Kontrolü: Manuel ölçüm başlatma

İleri Seviye Geliştirmeler

  • Servo Entegrasyonu: Dönen radar sistemi
  • WiFi Entegrasyonu: Web arayüzü ile uzaktan izleme
  • SD Kart Kayıt: Mesafe verilerini kaydetme

Sonuç

Bu proje, ESP8266'nın yeteneklerini keşfetmek ve ultrasonik sensörlerle çalışmak için mükemmel bir başlangıç noktasıdır. Seviye dönüştürme, grafik çizimi ve zamanlama gibi pratik konuları öğrenirken aynı zamanda çalışır bir cihaz elde edersiniz.

✅ Proje Tamamlandı!

Artık kendi OLED mesafe ölçerinizi yaptınız! Bu proje ESP8266 programlama ve grafik arayüz geliştirme konusunda size sağlam bir temel sağlayacak.