Arduino Park Sensörü
Arduino park sensörü yapalım. Nesneye yaklaştıkça ses çıkarsın ve ses tonu uzaklığa göre değişsin. Görsel olarak da engele uzaklığımızı görelim, uyarı ışıkları da olsun.
ARDUINO IDE KODLARI:
/*----------------------------------------
* PARK SENSÖRÜ
* KODLA GİTSİN
* kodlagitsin.blogspot.com
* HC-SR04 ultrasonik sensör
* I2C LCD
* BUZZER ile yaklaşma tonu
* LCD EKRANA ÖZEl KARAKTER BASIMI
*----------------------------------------*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
//I2C LCD bağlantıarı:
//I2C LCD SCL (clock) ==> pin A5
//I2C LCD SDA (data) ==> pin A4
//HC-SR04 ultrasonik sensör bağlantıları:
#define echo 1 //pin 1
#define trig 0 //pin 0
//Buzzer bağlantısı:
#define buzz 11 //pin 11
//LED bağlantısı:
#define led1 12 //pin12
byte karakter0[8] = {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}; // özel karakterimiz
byte karakter1[8] = {0x15,0xA,0x15,0xA,0x15,0xA,0x15,0xA}; // diğer özel karakterimiz
int maximumAra = 50;
int minimumAra = 0;
int a=1;
void setup() {
lcd.begin(16, 2);
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.createChar(0, karakter0); // özel karakterimizi lcd ye yüklüyoruz
lcd.createChar(1, karakter1); // diğer özel karakterimizi lcd ye yüklüyoruz
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzz, OUTPUT);
pinMode(led1, OUTPUT);
}
void loop() {
int olcum = hedef(maximumAra, minimumAra);
ses_ton(olcum*10);
lcd.setCursor(0, 0);
//lcd.setCursor(0, 1);
if (olcum<10){lcd.print("0");};
lcd.print(olcum);
lcd.print(" cm ");
if (olcum >= 1 && olcum <= 5){lcd.setCursor(6, 0);lcd.print ("DUR ");digitalWrite(led1, HIGH);}
else if (olcum >= 5 && olcum <= 10){lcd.setCursor(6, 0);lcd.print ("DiKKAT ");digitalWrite(led1, HIGH);}
else if (olcum >= 10 && olcum <= 20){lcd.setCursor(6, 0);lcd.print("DAHA YAVA$");digitalWrite(led1, LOW);}
else if (olcum >= 20 && olcum <= 30){lcd.setCursor(6, 0);lcd.print("YAVA$LA ");digitalWrite(led1, LOW);}
else if (olcum >= 30 && olcum <= 50){lcd.setCursor(6, 0);lcd.print("GUVENLi ");digitalWrite(led1, LOW);}
else {lcd.setCursor(6, 0);lcd.print(" ");digitalWrite(led1, LOW);}
lcd.setCursor(0, 1); // lcd 2.satırdaki mesafe çubuklarını oluşturuyoruz
while( a <= olcum/2)
{
a = a + 1;
lcd.write(byte(0)); // özel karakterimizi yazdırıyoruz
//lcd.write(byte(1)); // diğer özel karakterimizi yazdırıyoruz.
}
a=1;
delay(100);
lcd.setCursor(0, 1);
lcd.print(" "); // lcd 2.satırı temizlemekiçin
}
int hedef(int maxAra, int minAra)
{
long zaman, mesafe;
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
zaman = pulseIn(echo, HIGH);
mesafe = zaman / 58.2;
delay(50);
if(mesafe >= maxAra || mesafe <= minAra)
return 0;
return mesafe;
}
int ses_ton(int gecikme)
{
tone(buzz, 440);
delay(gecikme);
noTone(buzz);
delay(gecikme);
}
KULLANILAN PROGRAMLAR: Arduino Ide 1.8.9
Devre elemanları:
Arduino Uno modülü, HC-SR04 Ultrasonik Sensör Modülü, I2C Seri Arayüz Modülü, 16x2LCD (1602A), Buzzer, LED, 2K2 Direnç.
BUZZER ile yaklaşma tonu çalıyoruz. LCD ekrana yaklaşma çubukları için özel karakterlerimizi düzenliyoruz. Program içinde 2 tane özel karakter tanımladım ama yalnızca birini kullandım. İkinci karakteri nasıl ekleyip, kullanabileceğinizi görmeniz için ekledim. Tercih sizin.
Özel karakterleri LCD KarakterMatik - DC (v.4.5) programı ile hazırlayıp, kodlarını oradan kopyalayıp programıma yapıştırıyorum. Kullanışlı bir program.
Devredeki tüm pin bağlantıları şema üzerinde verilmiştir, ayrıca program kodları içinde de ayrıntılı açıklamalar mevcuttur.
DEVRE ŞEMASI:
ARDUINO IDE KODLARI:
/*----------------------------------------
* PARK SENSÖRÜ
* KODLA GİTSİN
* kodlagitsin.blogspot.com
* HC-SR04 ultrasonik sensör
* I2C LCD
* BUZZER ile yaklaşma tonu
* LCD EKRANA ÖZEl KARAKTER BASIMI
*----------------------------------------*/
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
//I2C LCD bağlantıarı:
//I2C LCD SCL (clock) ==> pin A5
//I2C LCD SDA (data) ==> pin A4
//HC-SR04 ultrasonik sensör bağlantıları:
#define echo 1 //pin 1
#define trig 0 //pin 0
//Buzzer bağlantısı:
#define buzz 11 //pin 11
//LED bağlantısı:
#define led1 12 //pin12
byte karakter0[8] = {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}; // özel karakterimiz
byte karakter1[8] = {0x15,0xA,0x15,0xA,0x15,0xA,0x15,0xA}; // diğer özel karakterimiz
int maximumAra = 50;
int minimumAra = 0;
int a=1;
void setup() {
lcd.begin(16, 2);
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.createChar(0, karakter0); // özel karakterimizi lcd ye yüklüyoruz
lcd.createChar(1, karakter1); // diğer özel karakterimizi lcd ye yüklüyoruz
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzz, OUTPUT);
pinMode(led1, OUTPUT);
}
void loop() {
int olcum = hedef(maximumAra, minimumAra);
ses_ton(olcum*10);
lcd.setCursor(0, 0);
//lcd.setCursor(0, 1);
if (olcum<10){lcd.print("0");};
lcd.print(olcum);
lcd.print(" cm ");
if (olcum >= 1 && olcum <= 5){lcd.setCursor(6, 0);lcd.print ("DUR ");digitalWrite(led1, HIGH);}
else if (olcum >= 5 && olcum <= 10){lcd.setCursor(6, 0);lcd.print ("DiKKAT ");digitalWrite(led1, HIGH);}
else if (olcum >= 10 && olcum <= 20){lcd.setCursor(6, 0);lcd.print("DAHA YAVA$");digitalWrite(led1, LOW);}
else if (olcum >= 20 && olcum <= 30){lcd.setCursor(6, 0);lcd.print("YAVA$LA ");digitalWrite(led1, LOW);}
else if (olcum >= 30 && olcum <= 50){lcd.setCursor(6, 0);lcd.print("GUVENLi ");digitalWrite(led1, LOW);}
else {lcd.setCursor(6, 0);lcd.print(" ");digitalWrite(led1, LOW);}
lcd.setCursor(0, 1); // lcd 2.satırdaki mesafe çubuklarını oluşturuyoruz
while( a <= olcum/2)
{
a = a + 1;
lcd.write(byte(0)); // özel karakterimizi yazdırıyoruz
//lcd.write(byte(1)); // diğer özel karakterimizi yazdırıyoruz.
}
a=1;
delay(100);
lcd.setCursor(0, 1);
lcd.print(" "); // lcd 2.satırı temizlemekiçin
}
int hedef(int maxAra, int minAra)
{
long zaman, mesafe;
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
zaman = pulseIn(echo, HIGH);
mesafe = zaman / 58.2;
delay(50);
if(mesafe >= maxAra || mesafe <= minAra)
return 0;
return mesafe;
}
int ses_ton(int gecikme)
{
tone(buzz, 440);
delay(gecikme);
noTone(buzz);
delay(gecikme);
}
Yorumlar
Yorum Gönder