Engelden Kaçan Robot Devresi

Engelden kaçan robot,diğer adıyla engel algılayan robot, otonom olarak çevre kontrolü yapabilen ve hareketini önleyebilecek cisimleri atlatabilen robot tipidir. Çevre kontrolünü sağlayabilmesi için ultrasonik, kızılötesi vb. gibi çeşitli sensörlere ihtiyaç duyar.
Ultrasonik sensör ile karşılaştığımız engelleri algılayıp buna göre yön değiştiren bir robot yapacağız. Robotumuzun hızını ve yönünü bir motor sürücü ile kontrol edeceğiz.
Malzemeler
Arduino Uno
L298N Voltaj Regulatörlü Çift Motor Sürücü Kartı
HC-SR04 Ultrasonik Mesafe Sensörü
Pil ( Alkalin piller robotu yaklaşık 15 dk. verimli şekilde çalıştıracaktır. Li-Po pil kullanmanız robotu daha uzun süre ve daha verimli çalıştıracaktır.)
6’lı AA Pil Yuvası
Jumper

Engelden Kaçan Robot Devresi

Örnek olarak engelle karşılaştığında sağ/sol yöne hamle yapan bir robotun temel algoritması

Engelden Kaçan Robot Devresi

Bu algoritmayı Arduino’da yazalım

#define echoPin 12 //Ultrasonik sensörün echo pini Arduino'nun 12.pinine
#define trigPin 13 //Ultrasonik sensörün trig pini Arduino'nun 13.pinine tanımlandı.
#define MotorR1 7
#define MotorR2 6
#define MotorRE 9  // Motor pinlerini tanımlıyoruz.
#define MotorL1 5
#define MotorL2 4
#define MotorLE 3

long sure, uzaklik; //süre ve uzaklık diye iki değişken tanımlıyoruz.

void setup() {

  // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış),
  // bu dalgaları Echo pini ile geri aldığı için INPUT (Giriş) olarak tanımlanır.
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  pinMode(MotorL1, OUTPUT);
  pinMode(MotorL2, OUTPUT);
  pinMode(MotorLE, OUTPUT); //Motorlarımızı çıkış olarak tanımlıyoruz.
  pinMode(MotorR1, OUTPUT);
  pinMode(MotorR2, OUTPUT);
  pinMode(MotorRE, OUTPUT);

  Serial.begin(9600);

}

void loop() {

  digitalWrite(trigPin, LOW); //sensör pasif hale getirildi
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi

  sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor
  uzaklik = sure / 29.1 / 2; //ölçülen süre uzaklığa çevriliyor

  Serial.println(uzaklik);

  if (uzaklik < 15) // Uzaklık 15'den küçük ise,
  {
    go_backward();  // 150 ms geri git
    delay(150);
    turn_right();  // 250 ms sağa dön
    delay(250);
  }
  else {  // değil ise,
    go_forward(); // ileri git
  }

}

void motor_left(String dir, int spd) // sol motor kontrolü
{ // yön(dir) ve hız(spd) için değişkenler.
  if ( dir == "FORWARD")             // FORWARD komutu ileri hareket için.
  {
    digitalWrite(MotorL1, LOW);
    digitalWrite(MotorL2, HIGH);
    analogWrite(MotorLE, spd);
  }

  if ( dir == "BACKWARD")           //BACKWARD komutu geriye hareket için.
  {
    digitalWrite(MotorL1, HIGH);
    digitalWrite(MotorL2, LOW);
    analogWrite(MotorLE, spd);
  }

}
void motor_right(String dir, int spd)// sağ motor kontrolü
{ // yön(dir) ve hız(spd) için değişkenler.
  if ( dir == "FORWARD")             // FORWARD komutu ileri hareket için.
  {
    digitalWrite(MotorR1, HIGH);
    digitalWrite(MotorR2, LOW);
    analogWrite(MotorRE, spd);
  }

  if ( dir == "BACKWARD")           //BACKWARD komutu geriye hareket için.
  {
    digitalWrite(MotorR1, LOW);
    digitalWrite(MotorR2, HIGH);
    analogWrite(MotorRE, spd);
  }
}

void go_forward() // Robot ileri gitsin.
{
  motor_right("FORWARD", 200); // Sağ ve sol motorlar ileri yönde 200 hızında
  motor_left("FORWARD", 200);
}
void turn_right() // Robot sağa dönsün.
{
  motor_right("BACKWARD", 200); //Sağ motor 200 hızında geri
  motor_left("FORWARD", 200); //Sol motor 200 hızında ileri
}

void go_backward() // Robot geri gitsin.
{
  motor_right("BACKWARD", 200); //Sağ motor 200 hızında geri
  motor_left("BACKWARD", 200); //Sol motor 200 hızında geri
}
Rate this post

YAZAR : Ali Celal

- Elektronik Mühendisi - E.Ü. Tıp Fakültesi Kalibrasyon Sorumlusu Test kontrol ve kalibrasyon sorumlu müdürü (Sağ.Bak. ÜTS) - X-Işınlı Görüntüleme Sistemleri Test Kontrol ve Kalibrasyon Uzmanı (Sağ.Bak.) - Usta Öğretici (MEB) - Hatalı veya kaldırılmasını istediğiniz sayfaları diyot.net@gmail.com bildirin

BU YAZIYI DA İNCELEDİNİZ Mİ ?

Teleduino

Arduino ile İnternet Üzerinden Bir LED’i Kontrol Edin ( Devrenin Çalışması ile ilgili ing bilgi …

Bir yanıt yazın