2014-01-17

Arduino HC-SR04 Ultrasonic Sensor ile Mesafe Ölçümü

HC-SR04 basitçe bir hoparlör ve bir mikrofondan oluşan bir mesafe sensörüdür. Gönerilen ses 40MHz frekansında olup, 2cm - 4m arasında , önünde duran en yakın nesnenin mesafesini vermektedir. Uzak nesneleri algılaması için nesnenin daha büyük olması gerekmektedir. Algılama açısı yaklaşık 15 derecedir.

HC-SR04 giden ve dönen ses arasındaki süre farkını mikrosaniye (1/1,000,000sn) cinsinden vermektedir. Sesin hızını havada yaklaşık 343m/s olarak kabul edebiliriz. Hesapları cm cinsinden yapmak istersek ses hızı 34300 cm/s olarak alabiliriz. Zaman birimini mikrosaniye cinsinden aldığımızda 0,0343 cm/us olarak karşımıza çıkmaktadır. Sesin gidişi ve gelişi 2 kat sürdüğü için tek gidiş veya tek geliş için ilk hesapladığımız değeri ikiye bölebiliriz, sonuç 0,01715 cm/ us olarak ortaya çıkmaktadır. Hesapları Arduino için daha kolay integer değerleri cinsinden yapmak istersek 1/0,01715 = 58 olduğunu görebiliriz. Böylece HC-SR04'nin bize verdiği mikrosaniye cinsinden değeri 0,01715 ile çarpar veya 58'e bölersek santimetre cinsinden en yakın yansıtıcı nesnenin mesafesini bulmuş oluruz.

Arduino'ya bağlantılar ise oldukça kolay. vcc 5v güç kaynağna, gnd toprak, Trig (trigger) ses gönderecek pin'e, echo, yansıyan sesi alacak pin'e bağlanmalı. Bağlantı şemasını kod bölümünden sonra bulabilirsiniz. 


/*
 HC-SR04 Ultrasonik ping mesafe sensörü:
 Datasheet http://users.ece.utexas.edu/~valvano/Datasheets/HCSR04b.pdf
 VCC >> Arduino 5V'a bağlanacak 
 GND >> Arduino GND Toprak
 Trig >> Arduino pin 8 (Ses gönderme)
 Echo >> Arduino pin 7 (Eko ses algılama)

 Mikrosaniye olarak gelen yansıma süresinden sesin havadaki hızına göre cm cinsinden mesafeyi hesaplar.  
 Ses hızı= 343 m/sn , 34300 cm/ sn, 0,0343 cm/mikrosaniye
 Gidiş geliş süresi = gidiş veya gelişin 2 katıdır.  
 cmMesafe = microsaniyeSure/ ((343 x 100) / 1000000) / 2 = microsaniyeSure x 0,01715 = 1 / 58,309037900874635568513119533528
 
 This sketch originates from Virtualmix: http://goo.gl/kJ8Gl
 Has been modified by Winkle ink here: http://winkleink.blogspot.com.au/2012/05/arduino-hc-sr04-ultrasonic-cmMesafe.html
 And modified further by ScottC here: http://arduinobasics.blogspot.com.au/2012/11/arduinobasics-hc-sr04-ultrasonic-sensor.html
 Son değişiklikler Nevit Dilmen http://nevit.blogspot.com/
 
 */

#define trigPin 12 // Trigger Pini (Ses gönderme)
#define echoPin 11 // Echo Pini (Yansıyan ses algılama)

int maksimumMesafe = 200; // Maksimum mesafe. Farketmesi için uzak nesneler daha büyük olmalıdır. 
int minimumMesafe = 3; // Minimum mesafe 
long microsaniyeSure, cmMesafe; // Mesafe hesabında kullanılan değişkenler

void setup() {
 Serial.begin (9600); // Seri iletişimi başlat
 pinMode(trigPin, OUTPUT); // Ses gönderme pin türünü çıkış olarak ayarla
 pinMode(echoPin, INPUT);  // Yansıyan ses algılama pin türünü giriş olarak ayarla

}

void loop() {
/* Aşağıda trigPin/echoPin döngüsü en yakın nesneden yansıyan sesin yansıma süresini hesaplar. */ 
 digitalWrite(trigPin, LOW); // Hoparlör 2ms sessiz
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH); // Hoparlör 10ms sesli
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW); // Hoparlör sessiz
 microsaniyeSure = pulseIn(echoPin, HIGH); // Mikrofonu dinle, yansıma süresini microsaniyeSure değişkenine al
 
// Serial.println(microsaniyeSure); // Sesin gitme ve geri yansıma süresi 

 cmMesafe = microsaniyeSure/58.3; // microsaniyeSure'dan cm olarak mesafeyi hesapla
 
 if (cmMesafe >= maksimumMesafe) // Gelen mesafe aşırı uzak ise 
 {
 Serial.println("Cok uzak >200cm");
 }
 
 else if (cmMesafe <= minimumMesafe) // Gelen mesafe aşırı yakın ise 
 {
  Serial.println("Cok yakin < 3cm");   
 }
 
 else {
 /* Seri iletişimden ölçülen mesafeyi bilgisayara gönder */
 Serial.print(cmMesafe); //Mesafe bilgisi
 Serial.println(" cm"); // Birim değeri
 }
 
 delay(50);  //Sonraki ölçümden önce bekleme süresi. 
}


2cm'den 400cm'ye kadar 3mm hassasiyetle ölçüm yapabilen bu ultrasonik sensör çeşitli uzaklık okuma, radar ve robot uygulamalarında kullanılabilir. 
 
 Çalışma Voltajı DC 5V
 Çektiği Akım  15 mA
 Çalışma Frekansı 40 Hz
 Maksimum Görme Menzili 4m
 Minimum Görme Menzili 2cm
 Görme Açısı 15°
 Tetik Bacağı Giriş Sinyali 10 us TTL Darbesi
 Echo Çıkış Sinyali Giriş TTL sinyali ve Mesafe Oranı
 Boyutları 45mm x 20mm x 15mm


4 yorum:

blog dedi ki...

Merhabalar,

Yakın zamanda Ardduino için ücretsiz e-kitap yazdım.
İncelemek isterseniz link aşağıdadır.
Ücretsiz Arduino Kitabı

Mehmet Zahit Bas dedi ki...


daha güncel bir kod. Alıntı linki ve kodda ihtiyaç olunan NewPing kütüphanesi linki aşağıdadır.

A working code:

#include

#define TRIGGER_PIN 12

#define ECHO_PIN 11

#define MAX_DISTANCE 200

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {

Serial.begin(9600);

}

void loop() {

delay(50);

unsigned int uS = sonar.ping();

pinMode(ECHO_PIN,OUTPUT);

digitalWrite(ECHO_PIN,LOW);

pinMode(ECHO_PIN,INPUT);

Serial.print("Ping: ");

Serial.print(uS / US_ROUNDTRIP_CM);

Serial.println("cm");

}

link: http://forum.arduino.cc/index.php?topic=55119.15

NewPing link: http://playground.arduino.cc/Code/NewPing

kod yazan dedi ki...

merhabalar ben tam olarak pulsein komutunu analyamadım pulsein içine neden hıgh yazdık biraz pulsein den bahsedebilirmisinğiz mümkünse ?

Deba Sheesh dedi ki...

Most of the time I don’t make comments on any post, but I'd like to say that this content is really helpful. Please share with us more post like this.
Ultrasonic Level Sensor