Arduino Ultrasonic ile Mesafe Ölçmek ve LCD
|Merhabalar…
Bu konuda Ultrasonic mesafe sensörü ve 16×2 Lcd‘ yi beraber kullanımına değineceğiz. Yapacağımız işlem mesafe sensöründen okuduğumuz değerleri Lcd ekrana “cm” ve “inc” cinsinden yazdırmak olacak. Ayrıca birde yakınlığı belirten basit bir animasyonumuz.
Öncelikle Ultrasonic sensörün çalışma prensibine biraz değinelim. 40kHZ frekansta ses dalgaları üreten bir elektronik devre elemanıdır. Bu ses dalgaları insan kulağınca duyulmaz. Sensördeki transdüser(enerjiyi başka forma dönüştüren cihaz) dalgayı üretir. Bu dalga bir cisme çarparak tekrar sensöre geri döner. Dalganın gidiş ve geliş zamanı aradaki mesafe ile orantılıdır.
Biz sensörümüze trig pininden kare dalgalar göndereceğiz. Bu göndereceğimz dalga sıklığına göre sensörümüz ultrasonic dalgalar üretecek. Daha sonrada bu dalgaları echo pinini üzerinden Arduino’ daki bir fonksiyon yardımı ile sayacağız.
Katı ve sıvı cisimler ultrasonic enerjinin %99 unu yansıtır. Bu yüzden ultrasonic sensörün kullanım alanı çok geniştir. Engelden kaçan bir robottan park sensörüne kadar bir çok şeyi bu sensör yardımı ile yapabilirsiniz. Kullanımıda görüleceğiz üzre son derece basittir. Aşağıdaki Arduino kodlarında yapacağımız işlem sıradan bir kare dalga gönderme işleminden farksızdır.
Bağlantı şemamız:
Kodlarımız:
Öncelikle Lcd’ takacağımız pin bağlantılarından bahsedeceğim.
Benim kullandığım Lcd 16*2 ‘lik bir Lcd. Bu Lcd yi Arduino ile kullanmak için bir kütüphaneye ihtiyacımız var. Bu kütüphanenin ismi “LiquidCrystal.h”. Bu kütüphaneyi incelemeniz halinde bağlantı için bir kaç alternatif daha bulacaksınız. Ancak ben en çok kullanılan üzeriden göstereceğim.
Lcd üzerindeki:
- RW ve VSS pinlerimiz GND’ ye bağlanacak.
- V0 Pinine bir potansiyometre bağlanmalı
- RS arduino üzerinde 2. pine
- E arduino üzerinde 3. pine
- D4 arduino üzerinde 8. pine
- D5 arduino üzerinde 10. pine
- D7 arduino üzerinde 11. pine
bağlanmalıdır.
#include <LiquidCrystal.h> char karakter = 255; int cm, inc, uzunluk, i; int echoPin = 6, trigPin = 5; //Rw pin ==> GND //V0 pin ==> potansiyometre // (Rs, E, D4, D5, D6 ,D7) LiquidCrystal lcd(2 , 3, 8 , 9 , 10 , 11); void setup() { lcd.begin(16, 2); pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); lcd.setCursor(0,0); //imleci 1. satır 1. sutuna geitrdik Serial.begin(9600); } void loop() { digitalWrite(trigPin, LOW); //Kare dalga yolluyoruz delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); uzunluk = pulseIn(echoPin, HIGH); //Ses dalgalarını saydık cm = uzunlukCm(uzunluk); //Cm fonskiyonundan dönen değeri cm değişkenşne atadık inc = uzunlukInc(uzunluk); //İnc fonskiyonundan dönen değeri inc değişkenine atadık lcd.clear(); //Her döngü dönmesinde ekranı temizledik if(cm <= 14){ animasyon(cm / 2); //Animasyonun 14cm nın uzunluklarda devreye girmesini sağladık } lcd.setCursor(0,0); //İmleci 1,1 e getirdik lcd.print("cm: "); lcd.print(cm); lcd.setCursor(7,0); //imleci 1 e 7 ye getirdik lcd.print(" Inc: "); lcd.print(inc); delay(100); //Prepared by Oğuzhan Başer } int uzunlukCm(int a){ //uzunluk fonksiyonu pulseIn den gelen değeri argüman olarak kulladık return a / 29 / 2; } int uzunlukInc(int a){ //uzunluk fonksiyonu pulseIn den gelen değeri argüman olarak kulladık return a / 74 / 2; } void animasyon(int a){ //Animasyonumuz.. lcd.setCursor(7,1); for(i = 7; i >= a; i--){ lcd.setCursor(i,1); lcd.print(karakter); } for(i = 8; i < 16 - a; i++){ lcd.setCursor(i,1); lcd.print(karakter); } }
öncelikle ellerinize sağlık ama bir sıkıntı var sürekli olarak göstermiyor bunu sebebi nedir acaba
Yorumunuz için teşekkürler..
Sürekli göstermiyor derken nasıl bir sorun ile karşılaşıyorsunuz anlamadım, daha açık olursanız sevinirim.
Teşekkürler..
yani sürekli olarak 0 değerini gösteriyor sensörü çıkartıp takınca borda sabit bir değer gösterip sonra 0 yazısı ile karşılaşıyorum
ultrasonik sensor sıfırda takıldığı zaman echo pinini output yapıp, low pulse verip, tekrar input yapın. NewPing library kullanın. çözümü aldığım site linki ve Newping linki alttadır.
çalışan bir kod:
#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
irtibata geçmek için eklerseniz beni oradan daha rahat anlatırım
https://www.facebook.com/erkan.karabay.798
şimdiden teşekkürler
malzemelerin ismi ve hangi malzemedn kaçtane kullanıyoruz…
Merhaba, sanırım bağlantı şemasının olduğu resim silinmiş bu yüzden kusura bakmayın. Lakin yazılımdan da anlaşıldığı üzere projede bir ultrasonic sensör ve bir 16*2 LCD kullanılmış. iyi çalışmalar dilerim…