14 Ağustos 2019 Çarşamba

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




Hiç yorum yok:

Yorum Gönder