Arduino Ders 28: Park Sensörü 2


Bu yazımızda profesyonel anlamda park sensörü yapmak için gerekli arduino devre şemasını ve gerekli arduino kodlarını inceleyeceğiz.

İnternette paylaşılan ve arduino ile yapılmış bir çok park sensörü bazı yönleriyle eksik kalmaktadır. Genellikle mesafe sensöründen alınan uzaklık değeri çeşitli uzaklıklarda oranlanıp, uzaklık değerine göre led yakılmaktadır. Fakat buzzer kullanımında ya hiç buzzer kullanılmamakta ya da sadece en yakın mesafede buzzer ile ses çıkışı sağlanmaktadır.
Biz bu yazımızda arabalarda olduğu gibi mesafe durumuna göre değişen aralıklarla buzzerdan sesli uyarı ve yine mesafe durumuna göre yanan ledler ile tam manasıyla bir park sensörü yapmaya çalışacağız.
Arduino ile park sensörü yapmak için gerekli malzemeler;
• Arduino Uno 
• HC-SR04 Ultrasonik Mesafe Sensörü 



Park sensörü yaparken mesafeye göre hem sesli hem de görüntülü uyarı alacağız. Sesli uyarı almak için buzzerdan uzak mesafelerde daha uzun aralıklarla, yakınlaştıkça daha kısa aralıklarla bip sesi elde etmek için millis komutunu kullanacağız.

int trigPin = 10; 
int echoPin = 11;  
long sure;
long uzaklik;
 
int led1=2; int led2=3; int led3=4; int led4=5; int led5=6;
int buzzer=7;
 
unsigned long eskiZaman=0;
 void ses(int zaman){
  if(millis()-eskiZaman>zaman){
    digitalWrite(buzzer, !digitalRead(buzzer));
    eskiZaman=millis();  }
}
  
void setup(){
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin,INPUT); 
  pinMode(led1,OUTPUT);    pinMode(led2,OUTPUT);   pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);  pinMode(led5,OUTPUT);    pinMode(buzzer,OUTPUT);
}
 
void loop(){
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);  
  sure = pulseIn(echoPin, HIGH);
  uzaklik= (sure /29.1)/2;    
 
if(uzaklik<40 digitalwrite="" else="" if="" led1="" ses="" uzaklik="">40){digitalWrite(led1,LOW);}
if(uzaklik<30 digitalwrite="" else="" if="" led2="" ses="" uzaklik="">30){digitalWrite(led2,LOW);} 
if(uzaklik<20 digitalwrite="" else="" if="" led3="" ses="" uzaklik="">20){digitalWrite(led3,LOW);}
if(uzaklik<10 digitalwrite="" else="" if="" led4="" ses="" uzaklik="">10){digitalWrite(led4,LOW);}
if(uzaklik<5 digitalwrite="" else="" if="" led5="" ses="" uzaklik="">5){digitalWrite(led5,LOW);}
if(uzaklik>45){digitalWrite(buzzer,LOW);}
}


Kodları incelediğimizde; en üstte gerekli pin tanımlamalarını yapıyoruz. void setup() içinde pinlerin giriş veya çıkış durumlarını belirliyoruz.

digitalWrite(trigPin, LOW); 
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);  
  sure = pulseIn(echoPin, HIGH);
  uzaklik= (sure /29.1)/2;


loop dögüsü içerisindeki yukarıdaki kodları kullanarak ultrasonik mesafeden uzaklık değerini ölçüyoruz. Buradaki kodlar  ultrasonik mesafeden uzaklık değerini ölçebilmek için kullandığımız neredeyse standartlaşmış kodlardır.
Buzzerdan aralıklarla ses sinyali almak için millis komutunu kullanmamız gerektiğini başta belirtmiştik. Şimdi bu işlem için bir fonksiyon hazırlıyoruz.

unsigned long eskiZaman=0;
 void ses(int zaman){
  if(millis()-eskiZaman>zaman){
    digitalWrite(buzzer, !digitalRead(buzzer));
    eskiZaman=millis();  }
}


Yukarıdaki ses isimli fonksiyon ile gelen milisaniye değerine göre buzzerdan aralıklarla bip sesi alacağız. Bunun için kodlarda ses(milisaniye değeri) şeklinde çağırdığımız yerlerde bu fonksiyonu çalıştırmış olacağız.
Mesafeyi hesapladıktan sonra if komutu ile uzaklık değerini karşılaştırarak mesafeye göre gerekli ledi yakacağız, aynı zamanda hazırladığımız ses fonksiyonuna milisaniye değerleri göndererek mesafe kısaldıkça daha sık aralıklarla buzzerdan ses alacağız.

if(uzaklik<40 digitalwrite="" else="" if="" led1="" ses="" uzaklik="">40){digitalWrite(led1,LOW);}
if(uzaklik<30 digitalwrite="" else="" if="" led2="" ses="" uzaklik="">30){digitalWrite(led2,LOW);} 
if(uzaklik<20 digitalwrite="" else="" if="" led3="" ses="" uzaklik="">20){digitalWrite(led3,LOW);}
if(uzaklik<10 digitalwrite="" else="" if="" led4="" ses="" uzaklik="">10){digitalWrite(led4,LOW);}
if(uzaklik<5 digitalwrite="" else="" if="" led5="" ses="" uzaklik="">5){digitalWrite(led5,LOW);}
if(uzaklik>45){digitalWrite(buzzer,LOW);}


Yukarıdaki kodlarda ise uzaklık 40 cm altına düştüğünde 1. led yanacak ve ses(400); komutu ile yukarıdaki hazırladığımız millis fonksiyonu çalışacak ve 400 milisaniye aralıklarla buzzer ses verecektir. Mesafe azaldıkça diğer ledler yanacak ve buzzerdan daha sık ses almak için ses fonksiyonuna az milisaniye değerleri göndererek gerçek anlamda bir park sensörü elde etmiş olacağız. Uzaklık değeri 45 ve daha fazla ise digitalWrite(buzzer,LOW); komutu ile buzzer’ı susturmuş oluyoruz.
Buradaki if komutları içerisindeki mesafe değerlerini değiştirebilirsiniz. Aynı zamanda ses fonksiyonuna göndereceğiniz milisaniye değerlerini de değiştirerek daha farklı mesafelerde farklı davranan bir park sensörü elde edebilirsiniz.


2 Yorumlar

Daha yeni Daha eski