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→ ESP8266D2SCL→ ESP8266D1VCC→ ESP82663V3GND→ ESP8266GND
HC-SR04 Bağlantısı (Seviye Bölücü ile):
TRIG→ ESP8266D5ECHO→ ESP8266D6(1kΩ/2kΩ direnç bölücü ile)VCC→ ESP82665VGND→ ESP8266GND
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
- ESP8266'yı USB'ye bağlayın
- Kodu derleyip yükleyin
- OLED'de "Mesafe: X cm" yazısı görünmeli
- Elinizi sensörün önüne getirin
- 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.