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:

 

LCD_bb

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
  • 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);
	}

}
7 Comments

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir