Arduino Uno ile Park Sensörü Projesi

Güncelleme tarihi: 9 Ara 2021

Bu projemizde Arduino Uno kartına bağlanan Ultrasonik Mesafe sensörünü kullanarak Park Sensörü yapılacaktır. Mesafe değerlerine göre LED’ler yanacak ve Buzzerdan ses çıkışı gerçekleşecektir. Kullancağımız malzemeler:

  • Arduino Uno

  • 2 Adet 5mm Yeşil Led

  • 3 Adet 5mm Sarı Led

  • 3adet 5mm Kırmızı Led

  • Buzzer

  • HC-SR04

  • Breadboard

  • 10 Adet 220 Ohm Direnç

  • Jumper Kablo

  • 9V Pil

  • Pil Yatağı

  • 74HC595

Buzzer: Buzzerlar işitsel ikaz cihazlarıdır.


HC-SR04: Ultrasonik Mesafe sensörünün çalışma prensibi TRIG pininden sinyal verildiğinde 40KHz frekansında bir ses dalgası sensör tarafından üretilir ve bu ses dalgası bir cisme çarpıp geri döndüğünden ECHO pini aktifleşir. Geçerli mesafe aralığı 3 cm – 400 cm dir.


74HC595: Bu entegre seri girilen verinin paralel olarak alınmasını sağlayan bir kaydırmalı kaydedicidir. Mikro-denetleyicilerde çıkış pini sayısında sıkıntı olması durumunda seri giriş, paralel çıkış olarak çalışan, 74HC595 entegresi kullanılabilir. Bu entegre 3 giriş ile kontrol edilir, 8-bit paralel çıkış verir.


Devre şeması aşağıdaki gibi verilmiştir.


Devre şemasını kurduktan sonra kodlama kısmına geçebiliriz. Arduino IDE üzerinden kodlarımızı yazıyoruz. Her LED'in yanacağı durum tanımlanmalıdır. Mesafe aralıklarına göre hangi LED'in yanacağı belirlenir.

double durum8 = 100;
double durum7 = 87;
double durum6 = 74.5;
double durum5 = 62.5;
double durum4 = 50;
double durum3 = 37.5;
double durum2 = 25;
double durum1 = 12.5;
double durum0Special = 5;

void setup() içerisinde ECHO'nun giriş pini, TRIG ve Buzzer'ın çıkış pini olduğunu tanımlıyoruz. Çıkış değerlerinin baz alınarak hangi pinin yanacağını for döngüsü oluşturarak kodumuza devam ediyoruz.

void setup() {
  pinMode(echoPin1, INPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(buzzer, OUTPUT);

  for (int i = 0; i <= 8; i++) {
    pinMode(leds[i], OUTPUT);
  }

  Serial.begin(9600);

  hello();
}

void loop() içerisinde mesafenin tanımlanan durumlar karşısındaki değerlerine göre hangi LED'in ve Buzzer'ın ses çıkışının kontrolü yapılır. İf ve else if koşul yapıları kullanılarak kodlama yapılır.

  if (mesafe < durum0Special) {
    while (mesafeOlc() < durum0Special) {
      for (int i = 0; i <= 2; i++) {
        digitalWrite(leds[i], HIGH);
      }
      digitalWrite(buzzer, HIGH);
      delay(150);
      for (int i = 2; i >= 0; i--) {
        digitalWrite(leds[i], LOW);
      }
      digitalWrite(buzzer, LOW);
      delay(150);
    }
  }
  else if (mesafe < durum1) {
    for (int i = 0; i < 8; i++) {
      if (i <= 0) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }

Kodun tamamı aşağıda verilmiştir.

#define echoPin1 9
#define trigPin1 10
#define buzzer 4
int leds[] = {11, 8, 7, 6, 5, 4, 3, 2};

double durum8 = 100;
double durum7 = 87;
double durum6 = 74.5;
double durum5 = 62.5;
double durum4 = 50;
double durum3 = 37.5;
double durum2 = 25;
double durum1 = 12.5;
double durum0Special = 5;

void setup() {
  pinMode(echoPin1, INPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(buzzer, OUTPUT);

  for (int i = 0; i <= 8; i++) {
    pinMode(leds[i], OUTPUT);
  }

  Serial.begin(9600);

  hello();
}

void loop() {
  int mesafe = mesafeOlc();
  Serial.println("Mesafe: " + String(mesafe));
  if (mesafe < durum0Special) {
    while (mesafeOlc() < durum0Special) {
      for (int i = 0; i <= 2; i++) {
        digitalWrite(leds[i], HIGH);
      }
      digitalWrite(buzzer, HIGH);
      delay(150);
      for (int i = 2; i >= 0; i--) {
        digitalWrite(leds[i], LOW);
      }
      digitalWrite(buzzer, LOW);
      delay(150);
    }
  }
  else if (mesafe < durum1) {
    for (int i = 0; i < 8; i++) {
      if (i <= 0) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum2) {
    for (int i = 0; i < 8; i++) {
      if (i <= 1) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum3) {
    for (int i = 0; i < 8; i++) {
      if (i <= 2) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum4) {
    for (int i = 0; i < 8; i++) {
      if (i <= 3) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum5) {
    for (int i = 0; i < 8; i++) {
      if (i <= 4) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum6) {
    for (int i = 0; i < 8; i++) {
      if (i <= 5) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum7) {
    for (int i = 0; i < 8; i++) {
      if (i <= 6) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe < durum8) {
    for (int i = 0; i < 8; i++) {
      if (i <= 7) {
        digitalWrite(leds[i], HIGH);
        continue;
      }
      digitalWrite(leds[i], LOW);
    }
  }
  else if (mesafe > durum8) {
    for (int i = 0; i < 8; i++) {
      digitalWrite(leds[i], HIGH);
    }
  }
  delay(200);

}

int mesafeOlc() {
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  int sure = pulseIn(echoPin1, HIGH);
  int uzaklik = sure / 29.1 / 2;
  return uzaklik;

}

void hello() {
  digitalWrite(buzzer, HIGH);
  for (int i = 0; i <= 8; i++) {
    digitalWrite(leds[i], HIGH);
    delay(100);
  }
  for (int i = 8; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
    delay(100);
  }
  delay(1500);
  digitalWrite(buzzer, LOW);

}

Son Paylaşımlar