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


KULLANILAN PROGRAMLAR: Arduino Ide 1.8.9




Yorumlar