İçeriğe geç

Rehber

Arduino ile HC-SR04 Ultrasonik Mesafe Sensörü Kullanımı

40 kHz ses, Trig ve Echo pinleri, 10 mikrosaniyelik darbe, pulseIn ve santimetre formülü. Seri monitörde mesafe.

3 dakika okuma

HC-SR04, hobi robotikte en çok rastlanan ultrasonik mesafe sensörüdür. Çalışma fikri basittir: kart 40 kHz’lik kısa bir ses paketi yollar, ses bir engele çarpıp geri döner, gidiş-dönüş süresi ölçülür, süre ses hızı ile çarpılıp ikiye bölünerek santimetreye çevrilir. Sensör bu çarpma işlemini tek başına yapmaz. Trig pinine doğru darbe vermek, Echo pinindeki yüksek süreyi okumak ve hesabı yazmak Arduino’nun (veya ESP32’nin) işidir.

Modül 5 volt ile çalışır, dört pini vardır: VCC, Trig, Echo ve GND. Görüş mesafesi üretici tablolarında kabaca 2 santimetreden 4 metreye kadar yazılır, görüş açısı dardır. Perde, sünger ve kumaş sesi yutar; düz duvar ve cam iyi yansıtır. Aynı masada iki HC-SR04 aynı anda ping atarsa paketler karışabilir.

Gerekli malzemeler

  • Arduino Uno (5 volt lojik, Echo için en rahat kart)
  • HC-SR04 ultrasonik mesafe sensörü
  • Breadboard ve jumper kablo

ESP32 kullanacaksanız Echo hattını 3.3 volta indirgemeden bağlamayın; bu yazının bağlantısı Uno içindir.

Pin bağlantısı

VCC pinini Uno’nun 5V pinine, GND pinini GND’ye alın. Trig’i örneğin 9 numaralı dijital pine, Echo’yu 10 numaralı dijital pine bağlayın. Bu numaralar zorunlu değildir, kodda aynı numaraları kullanmanız yeter. İlk denemede kısa kablo kullanın; uzun kablo gürültüye davetiye çıkarır.

Çalışma sırası

Ölçümün her turu aynı ritüeldir. Trig önce kısa bir süre alçak tutulur ki önceki ölçümün kalıntısı kalmasın. Ardından en az 10 mikrosaniye yüksek darbe verilir; datasheet bu 10 mikrosaniyeyi ister, 10’un altı bazı kopyalarda paket üretmez. Darbe bitince Trig yeniden alçak çekilir. Sensör içeride 8 darbelik 40 kHz paketi yollar. Echo pini, ses gidip gelene kadar yüksek kalır. `pulseIn(echoPin, HIGH)` bu yüksek süreyi mikrosaniye cinsinden döndürür.

Havadaki ses hızı kabaca 0.034 santimetre / mikrosaniyedir. Süre gidiş ve dönüşün toplamı olduğu için mesafe süre çarpı 0.034 bölü 2’dir. Aynı işe yakın bir kestirme, süreyi 58’e bölmektir.

Örnek kod

const int trigPin = 9;
const int echoPin = 10;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long sure = pulseIn(echoPin, HIGH);
  float mesafe = (sure * 0.034) / 2.0;

  Serial.print("Mesafe: ");
  Serial.print(mesafe);
  Serial.println(" cm");
  delay(100);
}

Kodu yükledikten sonra seri monitörü 9600 baud açın. Sensörü bir dosya kapağına veya duvara tutun ve cetvelle karşılaştırın. `pulseIn` yankı gelmezse 0 dönebilir; 0 santimetreyi “yapışık engel” sanmayın, çoğu zaman timeout’tur. Robot arabada eşik koyarken alt sınır da koyun: örneğin mesafe 2 ile 20 santimetre arasındaysa durun.

HC-SR501 bu kart değildir; PIR hareket algılar, santimetre vermez. Mesafe için HC-SR04 (veya analogı) gerekir. Ürün: HC-SR04. Uno tarafı Arduino Uno nedir, kodun `setup`/`loop` iskeleti nasıl kodlanır yazısında.

Mağaza

Bu yazıdaki parçalar stokta

WhatsApp