Robotunuzun duvarlara çarpmasını nasıl engellersiniz? Veya bir aracın arkasındaki park sensörü "Bip Bip" derken neyi ölçer? Cevap: Ses Dalgaları. Bu projede, yarasaların ve yunusların kullandığı SONAR teknolojisini Arduino ile birleştireceğiz.
1. Yarasalar ve Sesin Fiziği
HC-SR04, insanların duyamayacağı frekansta (Ultrasonik - 40kHz) ses dalgaları yayar. Bu dalgalar bir engele çarpıp geri döner. Sensör, sesin gidiş-dönüş süresini ölçerek mesafeyi hesaplar.
Sonar Mantığı
2. HC-SR04 Anatomisi
Sensör üzerinde 4 adet pin bulunur. Bunların ne işe yaradığını bilmek, kod yazarken işimizi kolaylaştırır.
- VCC Güç: +5V hattına bağlanır.
- TRIG Tetik (Trigger): Hoparlördür. Arduino buraya "BAĞIR!" sinyali gönderir.
- ECHO Yankı (Echo): Mikrofon görevi görür. Ses geri döndüğünde Arduino'ya "DUYDUM!" sinyali verir.
- GND Toprak: Eksi (-) hatta bağlanır.
- 📏 Menzil: 2cm - 400cm (4 Metre)
- 🎯 Hassasiyet: 3mm
- 📐 Görüş Açısı: 15 Derece (Dar açılı)
- ⚡ Voltaj: 5V DC
3. Arduino Bağlantısı
Sensörü breadboard üzerine takıp jumper kablolarla Arduino'ya bağlayalım. Örnekte Pin 9 ve Pin 10 kullanacağız.
4. Kodlamadan Önce Matematik
Arduino kodlarında sıkça göreceğiniz 0.034 sayısının sırrını çözelim. Bu, santimetre cinsinden Sesin Hızıdır.
Sesin havadaki hızı = 340 metre / saniye
1. Bunu cm'ye çevir: 34000 cm / saniye
2. Saniyeyi mikrosaniyeye çevir (Arduino mikrosaniye ölçer):
34000 cm / 1.000.000 µs = 0.034 cm/µs
5. Yazılım (Kodlama)
Aşağıdaki kodu kopyalayıp Arduino IDE'ye yapıştırın. Kodun yanında her satırın ne işe yaradığını yazdım.
// Pin Tanımlamaları const int trigPin = 9; // Ses gönderme pini const int echoPin = 10; // Ses alma pini // Değişkenler long sure; // Sesin gidip gelme süresi (mikrosaniye) int mesafe; // Hesaplanan mesafe (cm) void setup() { pinMode(trigPin, OUTPUT); // Trig çıkış olarak ayarlandı pinMode(echoPin, INPUT); // Echo giriş olarak ayarlandı Serial.begin(9600); // Seri haberleşme başlatıldı } void loop() { // 1. Temizlik: Trig pinini sıfırla digitalWrite(trigPin, LOW); delayMicroseconds(2); // 2. Ateşleme: 10 mikrosaniyelik ses dalgası gönder digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 3. Okuma: Echo pini HIGH olduğu süreyi ölç // pulseIn() fonksiyonu bize mikrosaniye döner sure = pulseIn(echoPin, HIGH); // 4. Hesaplama: Yol = Hız x Zaman // (0.034 ses hızıdır, 2'ye bölüyoruz çünkü gidiş-dönüş) mesafe = sure * 0.034 / 2; // 5. Ekrana Yazdırma Serial.print("Mesafe: "); Serial.print(mesafe); Serial.println(" cm"); delay(100); // Biraz bekle }
6. İpuçları ve Hatalar
sonar.ping_cm() yazarak mesafeyi alabilirsiniz. Profesyonel projelerde bu kütüphane önerilir.