Arduino İle HC-SR04 İle Mesafe Ölçme
Allah (azze ve celle), bütün varlıkları bir sebep dairesinde yaratmıştır. Teknoloji bu kaide üzerine insanları, hayvanları ve bitkileri inceler. Bu projemizde yarasaların en önemli özelliğinden faydalanacağız. Yarasaların doğasını ilk kez bilim adamı Lazzaro Spallanzani araştırmıştır. 18. yüzyılda yaptığı araştırmada yarasaların gözleri kapalı olsa bile nesnelere çarpmadığını fark etmiştir. Yönlerini seslerden faydalanarak bulduğunu öne sürmüştür. Yarasalar ortama bir ses sinyali göndererek sesin gidiş ve geliş süresine göre bulunan nesnelerin mesafelerini ölçerler. HC-SR04 sensörüde bu kurala dayanan bir mesafe ölçüm aparatıdır.
Kullanılan Malzemeler
- Bir adet Arduino Uno Kartı,
- Bir adet HC-SR04 Mesafe Ölçüm Sensörü,
- İki adet led (yeşil ve kırmızı),
- İki adet direnç (560 ohm),
- Board ve devre tasarım elemanları.
Tasarım
HC-SR04, 2 cm‘den 400 cm‘ye kadar 3 mm hassasiyetle ölçüm yapabilen, çeşitli projelerde uzaklık okuma, radar ve robot uygulamalarında kullanılan bir mesafe ölçüm sensörüdür. Sensörün geniş özellikleri aşağıda sıralanmıştır:
Ç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.
HC-SR04 sensörünün 4 adet pini bulunmaktadır. Bunlar 5 volt gerilimin ,alındığı VCC pini, ses sinyalinin gönderildiği Trig pini, ses sinyalinin alındığı Echo pini ve topraklama için kullanılan GND pinidir. Sensör önce ortama ses sinyali gönderir. Bir nesneye çarpan ses geri döner. Bu dönme mesafesine göre nesnenin sensöre olan uzaklığı ölçülür.
Devremizin kurulumu şu şekilde olacaktır: Bir board’un üzerine HC-SR04 sensörünün 4 pini bağlanır. Board’un üzerinde ayrıca yeşil ve kırmızı ledler ile bunlara bağlı 560 ohm dirençler vardır. Arduino Uno kartının 5 volt çıkışından gelen bağlantı board’un pozitif besleme şeridine, GND çıkışından gelen bağlantı negatif besleme şeridine bağlanır.
Devrede en başta yeşil led yanma durumunda olacaktır. Eğer bir nesne, sensöre 2 cm veya daha yakın bir mesafede durursa, yeşil led sönüp kırmızı led yanacaktır. Durum eski haline dönüp nesne 1 metreye kadar uzaklaşırsa, kırmızı sönüp yeşil led yanar. Nesne 1 metreden daha uzağa veya sensörün ölçüm yapamayacağı kadar yakına gelirse, “Nesne ölçüm dışında” uyarısı verilecektir. Şimdi kodlara bakalım.
Kodlar
Sensörün sesi gönderip/alması için gerekli şey Trig pinine bağlı olan sensörün içindeki dalganın mikrosaniyeler içinde yükselip alçalmasıdır. Bunu sağlayan komut şu şekildedir.
#define trigPin 13 //trig pini sabit olarak tanımlandı #define echoPin 12 // echo pini sabit olarak tanımlandı #define kirmizi_led 11 // kırmızı ledin bağlı olduğu pin #define yesil_led 10 //yeşil ledin bağlı olduğu pin void setup() { Serial.begin (9600); //seri iletişim başlatılıyor. pinMode(trigPin, OUTPUT); // ses sinyali görderme pini çıkış pinMode(echoPin, INPUT); // sinyali geri alma pini giriş pinMode(kirmizi_led, OUTPUT); //led ler çıkış pinMode(yesil_led, OUTPUT); } void loop() { long sure, mesafe; // ses sinyalinin hesabı için sure ve mesafe değişkenleri digitalWrite(trigPin, LOW); // ses sinyali beklemede delayMicroseconds(2); // 2 mikrosaniye sonra digitalWrite(trigPin, HIGH); // ses sinyali yükseltiliyor delayMicroseconds(10); // 10 mikrosaniye sonra digitalWrite(trigPin, LOW); // ses sinyali alçaltılıyor sure = pulseIn(echoPin, HIGH); // ses sinyalinin alınması sorgulanıyor mesafe = (sure/2) / 29.1; // mesafe için hesaplama yapılıyor if (mesafe < 4) { // eğer nesne ile sensör arasındaki mesafe 2 cm'den küçülürse digitalWrite(kirmizi_led,HIGH); // kırmızı led yakılıyor digitalWrite(yesil_led,LOW); // yeşil led sönüyor } else { // 2 cm'den uzaksa digitalWrite(kirmizi_led,LOW); // kırmızı led sönüp digitalWrite(yesil_led,HIGH); // yeşil led yanıyor } if (mesafe >= 200 || mesafe <= 0){ // eğer mesafe 1 metreden büyük veya negatifse Serial.println("Nesne ölçüm dışında"); } else { // değilse mesafenin değeri yazılır Serial.print(mesafe); Serial.println(" cm"); } delay(500); }