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:
Merhabalar,
Yakın zamanda Ardduino için ücretsiz e-kitap yazdım.
İncelemek isterseniz link aşağıdadır.
Ücretsiz Arduino Kitabı
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
merhabalar ben tam olarak pulsein komutunu analyamadım pulsein içine neden hıgh yazdık biraz pulsein den bahsedebilirmisinğiz mümkünse ?
Bu mesafe sensörü sıcak bir suyu ölçerse ısıdan etkilenirmi ?
Yorum Gönder