Arduino ile Ultrasonik Mesafe Sensörü Kullanımı
- Arduino ile Ultrasonik Mesafe Sensörü Kullanımı
- 1. Ultrasonik Sensör Nedir?
- 2. HC-SR04 Sensörünün Çalışma Prensibi
- 3. HC-SR04 Teknik Özellikleri
- 4. Gerekli Malzemeler
- 5. HC-SR04 Pin Bağlantısı
- 6. Arduino Kodları (Temel Mesafe Ölçümü)
- 7. Kodun Mantığı
- 8. LCD Ekranda Mesafe Gösterimi
- 9. Buzzer ile Yakınlık Uyarı Sistemi
- 10. Ses Hızını Ortam Koşullarına Göre Hesaplamak
- 11. HC-SR04 Sensörünün Görüş Açısı
- 12. Doğruluğu Artırma Yöntemleri
- 13. Ultrasonik Sensör ile Servo Motor Kullanımı
- 14. Ultrasonik Sensör ile LED Göstergesi
- 15. Uygulama Alanları
- 16. Sık Karşılaşılan Sorunlar ve Çözümleri
- 17. HC-SR04 ile Alternatif Kütüphaneler
- 18. Gerçek Hayat Kalibrasyonu
- 19. Gelişmiş Proje Fikirleri
- 20. Sonuç
Arduino ile Ultrasonik Mesafe Sensörü Kullanımı
Elektronik projelerde nesnelerin uzaklığını ölçmek, otomasyonun en önemli bileşenlerinden biridir.
Bir robotun önündeki engeli algılaması, park sensörünün mesafeyi hesaplaması veya sıvı seviyesinin ölçülmesi gibi birçok sistemde ultrasonik sensörler aktif olarak kullanılır.
Bu yazıda, Arduino ile HC-SR04 ultrasonik mesafe sensörünün nasıl kullanılacağını, çalışma prensibini, bağlantılarını, kodlarını, sık yapılan hataları ve uygulama örneklerini adım adım öğreneceksin.
1. Ultrasonik Sensör Nedir?
Ultrasonik sensör, ses dalgaları kullanarak nesneye olan mesafeyi ölçen bir elektronik sensördür.
Bu sensör, insan kulağının duyamayacağı kadar yüksek frekanstaki (genellikle 40 kHz civarında) ses dalgalarını gönderir ve geri dönen yankıyı ölçer.
Sensör, gönderilen dalganın geri dönme süresini hesaplayarak mesafeyi (cm veya mm cinsinden) bulur.
2. HC-SR04 Sensörünün Çalışma Prensibi
HC-SR04 sensöründe iki ana bileşen vardır:
- TRIG (Trigger): Ses dalgasını başlatmak için kullanılır.
- ECHO: Geri dönen yankıyı algılar.
Sensör, TRIG pininden 10 mikro saniyelik bir sinyal gönderdiğinde, 40 kHz frekansında 8 ses darbesi üretir.
Bu dalgalar bir nesneye çarpıp geri döndüğünde, ECHO pini aktif hale gelir.
Arduino, bu yankının geri dönme süresini mikro saniye (µs) cinsinden ölçer.
Sesin havadaki hızı yaklaşık 343 m/s olduğundan, şu formülle mesafe hesaplanır:
Mesafe (cm) = (Zaman × Ses Hızı) / 2 Mesafe (cm) = (Zaman (µs) × 0.0343) / 2
Buradaki “/2” işlemi, sesin gidip gelme süresinden dolayı uygulanır.
3. HC-SR04 Teknik Özellikleri
HC-SR04 Teknik Özellikleri ---------------------------------------- Çalışma Gerilimi: 5V DC Akım Tüketimi: 15 mA Frekans: 40 kHz Menzil: 2 cm – 400 cm Doğruluk: ±3 mm Açı (konik ölçüm): 15° TRIG Sinyali: 10 µs (yüksek) ECHO Gerilimi: 0 – 5V Boyut: 45 mm x 20 mm x 15 mm ----------------------------------------
HC-SR04, düşük maliyetli ve güvenilir yapısıyla hem amatör hem profesyonel Arduino projelerinde en çok kullanılan mesafe sensörlerinden biridir.
4. Gerekli Malzemeler
Bu projeyi yapmak için aşağıdaki bileşenler yeterlidir:
- Arduino UNO / Nano / Mega
- HC-SR04 Ultrasonik Sensör
- Breadboard
- Jumper kablolar
- (İsteğe bağlı) 16x2 LCD ekran veya buzzer
5. HC-SR04 Pin Bağlantısı
HC-SR04 Sensör Pin Bağlantısı ---------------------------------------- 1. VCC → 5V 2. TRIG → Arduino Dijital Pin 9 3. ECHO → Arduino Dijital Pin 10 4. GND → GND ----------------------------------------
Not:
ECHO pini 5V sinyal üretir. Eğer 3.3V tabanlı bir kart (örneğin ESP8266, ESP32) kullanıyorsan, araya 10K–20K direnç bölücü eklemelisin.
6. Arduino Kodları (Temel Mesafe Ölçümü)
Aşağıdaki kod, HC-SR04 sensöründen mesafeyi cm cinsinden ölçüp Seri Monitör’de gösterir.
#define trigPin 9
#define echoPin 10
long sure;
int mesafe;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.0343 / 2;
Serial.print("Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
delay(500);
}Açıklama:
pulseIn()fonksiyonu, yankının geri dönme süresini ölçer.- 0.0343 değeri, sesin havadaki hızını temsil eder.
- “/2” çarpanı, sesin gidip gelme mesafesini düzeltir.
7. Kodun Mantığı
- TRIG pini ile kısa bir sinyal gönderilir.
- Sensör ses dalgasını yollar.
- Yankı geri döner ve ECHO pini aktif olur.
- Arduino, yankının süresini ölçer.
- Süreyi mesafeye çevirir ve sonucu ekrana yazar.
Bu prensip, radar sistemlerinin temelinde de kullanılır.
8. LCD Ekranda Mesafe Gösterimi
16x2 LCD ekran kullanarak mesafeyi doğrudan görüntüleyebilirsin.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define trigPin 9
#define echoPin 10
long sure;
int mesafe;
void setup() {
lcd.begin(16, 2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.0343 / 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mesafe:");
lcd.setCursor(0, 1);
lcd.print(mesafe);
lcd.print(" cm");
delay(500);
}Bu sayede mesafe bilgisi her 0.5 saniyede bir ekranda güncellenir.
9. Buzzer ile Yakınlık Uyarı Sistemi
HC-SR04, sadece mesafe ölçmek için değil, uyarı sistemleri yapmak için de kullanılabilir.
Örneğin nesne yaklaştığında buzzer uyarısı verebilir.
#define trigPin 9
#define echoPin 10
#define buzzer 7
long sure;
int mesafe;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.0343 / 2;
if (mesafe < 10) digitalWrite(buzzer, HIGH);
else digitalWrite(buzzer, LOW);
Serial.print("Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
delay(300);
}Bu sistem, park sensörü veya yakınlık alarmı olarak kullanılabilir.
10. Ses Hızını Ortam Koşullarına Göre Hesaplamak
Sesin hızı sabit değildir. Sıcaklığa bağlı olarak değişir:
Ses Hızı = 331 + (0.6 × Sıcaklık °C)
Örneğin:
- 20°C’de ses hızı ≈ 343 m/s
- 30°C’de ses hızı ≈ 349 m/s
Eğer yüksek doğruluk istiyorsan, sıcaklığı DHT11 veya DHT22 sensörüyle ölçüp hesaplamaya dahil edebilirsin.
11. HC-SR04 Sensörünün Görüş Açısı
HC-SR04, 15°’lik konik bir algılama açısına sahiptir.
Bu nedenle:
- Küçük veya ince nesneleri zor algılar.
- Aşırı eğimli yüzeylerden yansıma zayıf olabilir.
- Yumuşak yüzeyler (örneğin kumaş) sesi iyi yansıtmaz.
Bu durumlarda sensörün yerleşimi ve yönü çok önemlidir.
12. Doğruluğu Artırma Yöntemleri
- Ortalama Alma:
- Ölçümü birkaç kez tekrarlayıp ortalamasını al.
mesafe = (okuma1 + okuma2 + okuma3) / 3;
- Zaman Gecikmesi:
- Her ölçüm arasında en az 50–100 ms bekle.
- Filtreleme:
- Çok değişken ölçümleri
medianveyamoving averageyöntemiyle filtrele. - Zemin Kalibrasyonu:
- Boş ortamda referans ölçümü alarak hata payını düzelt.
13. Ultrasonik Sensör ile Servo Motor Kullanımı
Bir servo motor yardımıyla sensörü farklı yönlere döndürüp çevre taraması yapabilirsin.
Bu yöntem, robotik radar sistemi için idealdir.
#include <Servo.h>
Servo servo;
#define trigPin 9
#define echoPin 10
long sure;
int mesafe;
void setup() {
servo.attach(3);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
for (int i = 0; i <= 180; i += 10) {
servo.write(i);
delay(200);
mesafeOlc();
}
for (int i = 180; i >= 0; i -= 10) {
servo.write(i);
delay(200);
mesafeOlc();
}
}
void mesafeOlc() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.0343 / 2;
Serial.print("Aci: ");
Serial.print(servo.read());
Serial.print(" | Mesafe: ");
Serial.print(mesafe);
Serial.println(" cm");
}Bu kod ile servo motor 180°’lik tarama yapar ve her açıda ölçüm alır.
14. Ultrasonik Sensör ile LED Göstergesi
Farklı mesafelerde farklı LED’leri yakarak görsel bir geri bildirim sağlayabilirsin.
#define trigPin 9
#define echoPin 10
#define led1 3
#define led2 4
#define led3 5
long sure;
int mesafe;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
mesafe = sure * 0.0343 / 2;
if (mesafe < 10) {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
} else if (mesafe < 20) {
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
} else {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
}
Serial.print("Mesafe: ");
Serial.println(mesafe);
delay(300);
}15. Uygulama Alanları
Ultrasonik mesafe sensörleri birçok farklı alanda kullanılır:
- Robotik engel algılama sistemleri
- Akıllı park sistemleri
- Sıvı seviye ölçüm sistemleri
- Akıllı çöp kutuları
- Otonom araç projeleri
- Endüstriyel üretim hatları
16. Sık Karşılaşılan Sorunlar ve Çözümleri
Yaygın HC-SR04 Problemleri ---------------------------------------- 1. Sabit 0 cm okuma → VCC yanlış veya GND kopuk. 2. Değer sürekli değişiyor → Gürültü veya yansıma. 3. Ölçüm sıfır gösteriyor → TRIG ve ECHO pinleri karışmış. 4. Fazla mesafe → Zaman aşımı (pulseIn süresi yetmiyor). 5. 3.3V kartta hata → Seviye düşürücü devre gerekli. ----------------------------------------
17. HC-SR04 ile Alternatif Kütüphaneler
Dilersen manuel ölçüm yerine hazır kütüphane kullanabilirsin:
#include <NewPing.h>
#define TRIG 9
#define ECHO 10
#define MAX_DISTANCE 400
NewPing sonar(TRIG, ECHO, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
Serial.print("Mesafe: ");
Serial.print(sonar.ping_cm());
Serial.println(" cm");
}NewPing kütüphanesi, ölçüm hızını artırır ve kodu basitleştirir.
18. Gerçek Hayat Kalibrasyonu
Sensörü kullanmadan önce şu adımlarla kalibre etmelisin:
- 10 cm ve 50 cm referans noktalarıyla test et.
- Sapma varsa kodda düzeltme ekle:
mesafe = mesafe - 2; // 2 cm sapma düzeltmesi
19. Gelişmiş Proje Fikirleri
- Engelden Kaçan Robot:
- HC-SR04 + Servo ile yön değiştiren otonom robot.
- Akıllı Park Sensörü:
- LED’lerle mesafe göstergesi, buzzer ile sesli uyarı.
- Sıvı Seviye Ölçer:
- Sensör üst kısımda, sıvı seviyesini sürekli ölçer.
- Otomatik Kapı Açma:
- Belirli bir mesafede kişi algılanınca servo ile kapı açılır.
- IoT Uygulaması:
- Mesafe verisini ESP8266 ile buluta göndererek uzaktan izleme yapılır.
20. Sonuç
HC-SR04 Ultrasonik Mesafe Sensörü, Arduino projelerinde mesafe ölçümü için en pratik ve uygun maliyetli çözümlerden biridir.
Bu sensör sayesinde nesne algılama, engel önleme, sıvı seviye kontrolü gibi pek çok akıllı sistem geliştirmek mümkündür.
Artık biliyorsun:
- HC-SR04’ün nasıl çalıştığını,
- Arduino bağlantılarını,
- Ölçüm kodlarını,
- Hataları ve çözümlerini,
- Gerçek uygulama örneklerini.
Bu bilgilerle kendi akıllı mesafe ölçüm sistemini kolayca oluşturabilir, daha gelişmiş robotik projelere temel hazırlayabilirsin.