Bu yazıyı herkes okusun

Bu yazıyı herkes okusun - Perspektif
Klasman dışı - İçimizdeki Savaşlar

10 Mart 2015 Salı

Arduino - HC-SR04 Ultrasonik Sensör ile Mesafe Ölçer Uygulaması






Bu yazımızda HC-SR04 ultrasonic sensörünü tanıyıp cisim algılama ve de mesafe ölçümü yapacağız. Ses dalgaları sınıflandırılmasında 20 kHz-1 GHz arasındaki ses sinyalleri ultrasonic ses olarak tanımlanmıştır.Bizim sensörümüz ve bir çok ultrasonic sensör 40 kHz frekansında ultrasonic ses üretmektedir. Burada önemli olan sesin yüksekliğinde belirleyici olan etken frekanstır.Ses yüksekse frekansta yüksektir.Ultrasonic ses sinyallerini insan kulağı algılayamaz.




Aslında HC-SR04 tüm haliyle bir transdüserdir. Transdüser ile sensör arasındaki fark ise sensör herhangi fiziksel bir değişimi algılayan bir eleman iken, transdüser bu değişimi algılayıp elektrik,ısı vs. bir çok enerji formuna dönüştürebilen bir elektronik devredir.

HC-SR04'te 2 adet araba farını andıran bir tanesi ses iletici diğeri de ses alıcı olan transdüser bulunmakta. Sol taraftan 40 KHz'de üretilen ses sinyal darbesi engele çarpıp sağ tarafa gelir ve biz bu gidiş-geliş arasındaki zamanı, cm'ye çevirerek uzaklığı ölçeceğiz.





T=0 zamanında darbe iletilir(ultrasonic ses sinyali), cisimden yansır, transdüser tarafından algılanır ve tekrar gönderilir.Sonraki darbe ilk darbenin ultrasonik enerjisinin hepsi absorbe edildiğinde iletilmelidir.Bu yüzden sensöre bir pals gönderilir sensör okunur ve sensörün datasheetinde yazan süre kadar sensöre tekrar pals gönderilmez.Eğer bekleme yapmaksak sensör saçma değerler döndürür.Çünkü ilk yolladıgımız sinyal bir yerden yansıyarak sensöre geri dönmeye devam eder.



Sensör üzerinde 4 adet pin mevcut.Bunlar;vcc,gnd,trig,echo pinleri.Sensör kendi içerisinde 40khz frekansında bir sinyal üretip 8 pals verici transdüsere gönderiyor.Bu ses dalgası havada, deniz seviyesinde ve 15 °C sıcaklıkta 340 m/s bir hızla yol alır.Bir cisme çarpar ve geri sensöre yansır.Cismin sensörden uzaklıgı ile doğru orantılı olarak echo pini bir süre lojik 1 seviyesinde kalır ve tekrar lojik 0 olur.Bizim bu mesafeyi ölçmekiçin tek yapmamız gereken echo pininin ne kadar lojik1 oldugunun süresini bulmaktır.Bu yapı yukarıdaki resimden daha iyi görülebilir.



Echo pininin lojik 1de kalma süresini mikrodenetleyici timerı ile ölçelim. Klasik yol=hız*zaman dan ve sesin 340m/sn lik hızınıda 34000cm/1000000us (340000/1000000=1/29) olarak düzenlersek formül x=t/29 olarak bulunur.Fakat burada önemli bir nokta sensörün bize döndürdüğü süre, ses sinyalinin gönderilmesi ile alınması arasındaki oluşan süre. Yani yol=zaman/29 ile aradaki mesafeyi iki ile çarpmış oluyoruz.Çünkü ses hem gitti hem geldi.Bu yüzden x=t/58 formulüyle aradaki mesafeyi ölçmüş olacağız . Bazı yerlerde 58 yerine 58.2 veya 59 yazanı da gördüm artık sizin kararınıza kalmış birşey.

Buna ek olarak da 13.pine led bağladım ve mesafe 15 cm altına düştüğünde led yansın istedim.Siz isterseniz bir buzzer koyabilirsiniz. Buyrun kodlar ;

#include <LiquidCrystal.h>


LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

int trigPin=2; //define trigPin 2

int echoPin=3; //define echoPin 3

int led=13;

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(led,OUTPUT);

lcd.begin(16,2);

}

void loop() {

int sure, uzaklik;

lcd.clear();

lcd.setCursor(0,0);

digitalWrite(trigPin, HIGH);

delayMicroseconds(1000);

digitalWrite(trigPin, LOW);

sure = pulseIn(echoPin, HIGH);

uzaklik = (sure/58);

if (uzaklik<15)

{digitalWrite(led,HIGH);}

else {digitalWrite(led,LOW);}

lcd.print("Uzaklik = ");

lcd.print(uzaklik);

lcd.print(" cm");

delay(400);

}

1 Mart 2015 Pazar

Arduino - LCD Ekran Uygulaması





LCD uygulamaları mikroişlemciler ile yapılan uygulamalar için önemli bir temel taş. Çünkü ölçülmesini istediğimiz (mesafe ölçümü,hız ölçümü vs.) birimleri aynı anda ekranda görebilme imkanımız bulunmakta.

Öncelikle LCD ekrandan bahsetmek istiyorum.Gereksiz bilgi ama açılımı Liquid-Cyrstal Display. Piyasada çok çeşidi var hatta Arduino için üretilmiş olanları bile var.Fakat ben LCD ekranımı Arduino'yu almadan çok çok önce aldığım için biraz farklı ve bağlantıları resimden de anlaşılacağı üzere biraz karmaşık oldu.

Bu karmaşıklığı LCD numaralarını göstererek daha basite indirgeyebiliriz. Aşağıda LM016'nın numaralandırılmış hali var.Fakat sorunlar burda da bitmiyor. LCD üreticisi firmalar bu numaraları sıralı bir şekilde üretmeyebiliyor.




Ben 1-16 arasında numaralandırılmış olan kısmı lehimleme tercihinde bulundum.

Ekran parlaklığını potansiyometre ile ayarlıcaz.Bunu da VDD-VSS arasında potansiyometre koyarak yapcaz. Yani LCD'nin 3 numaralı kısmı potansiyometrenin orta bacağına takılı olcak. 2 numara VDD ve potansiyometrenin uç bacağı, 1 numara VSS ve o da potansiyometrenin diğer uç bacağına bağlı olacak.

LCD 4 numaralı pin data girişi yeri, 5 numaralı pin toprağa bağlı ekrana datayı yazacak ve 6 numaralı pin de sinyal aktifliği yeri.Daha çok bilgiyi aşağıdaki adresten LM016L'nin datasheetinden edinebilirsiniz.

http://pdf1.alldatasheet.com/datasheet-pdf/view/146552/HITACHI/LM016L.html


Kodlarımız;

#include <LiquidCrystal.h> // Kütüphane Gerekli

LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Arduino pinleri LCD için

void setup(){

lcd.begin(16,2);
}

void loop(){

lcd.clear();

lcd.setCursor(0,0); //komutu ile imleci istediğimiz karakter kutusunda konumlanmasını sağlıyoruz.İlk satırın ilk sütununa.
lcd.print("arduinotik"); // İmlecten itibaren bu yazı yazılacak

lcd.setCursor(0,1); // 2.satırın ilk sütunundayız şimdi de

lcd.print("dunyasi"); // 2.satıra bu yazı yazılacak

delay(15000); //Bu kısım LCD'lerin frekans çalışma aralığı yüzünden giriliyor.
}


LCD'nin
1 - Toprak
2- +VDD
3- Potansiyometrenin Ortası
4- Arduino 7.pinine
5- Toprak
6- Arduino 8.pinine

11- Arduino 9.pinine
12- Arduino 10.pinine
13- Arduino 11.pinine
14- Ardunio 12.pinine
15- +VDD
16- Toprak

Potansiyometrenin

Sağ Bacak Toprak, Sol Bacak +Vcc