Engelden Kaçan Robot Uygulaması

Engelden kaçan robotta engelleri algılamak için ultrasonik sensör kullanılmaktadır Görseldeki
Ultrasonik sensörden gelen bilgilerle mesafe hesaplanır. Mesafe 30 cm’nin altına indiğinde motor tarafından sürücüye sol tekerleği geriye döndürme bilgisi gönderilmektedir. 30 cm üzerindeki
tüm mesafe ölçümlerinde tekerlekler ileri yönde döndürülecek şekilde motor sürücüye bilgi gönderilmektedir. Taslaktaki “hiz=255;” değeri düz gitme ve dönüş için farklı değerlere ayarlanarak
robot yavaşlatılabilir. Görselde engelden kaçan robot uygulama devresi görülmektedir


const byte IN1 = 8, IN2 = 7, IN3 = 5, IN4 = 4; // Motor sürücü yön pinleri
const byte enA = 9, enB = 3; // Motor sürücü PWM pinleri
const byte echo = 11, trig = 12; // Ultrasonik sensör pinleri

byte hiz = 255; // PWM.
unsigned long sure;
int uzaklik;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.

  if (uzaklik < 30) { // Uzaklık 30 cm'den yakınsa sola dön.
    digitalWrite(IN1, 0);
    digitalWrite(IN2, 1);
    analogWrite(enA, hiz);
    analogWrite(enB, hiz);
  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    digitalWrite(IN1, 1);
    digitalWrite(IN2, 0);
    digitalWrite(IN3, 1);
    digitalWrite(IN4, 0);
    analogWrite(enA, hiz);
    analogWrite(enB, hiz);
  }
}

const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // Motor sürücü yön pinleri (PWM pinleri.)
const byte echo = 11, trig = 12; // Ultrasonik sensör pinleri

byte hiz = 150; // PWM.
unsigned long sure;
int uzaklik;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.

  if (uzaklik < 30) { // Uzaklık 30 cm'den yakınsa sola dön.
    analogWrite(IN1, 0);
    analogWrite(IN2, hiz);
    analogWrite(IN3, hiz);
    analogWrite(IN4, 0);
  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    analogWrite(IN1, hiz);
    analogWrite(IN2, 0);
    analogWrite(IN3, hiz);
    analogWrite(IN4, 0);
  }
}

const byte IN1 = 8, IN2 = 7, IN3 = 5, IN4 = 4; // Motor sürücü yön pinleri
const byte enA = 9, enB = 3; // Motor sürücü PWM pinleri
const byte echoSag = 6, trigSag = 2; // sağ Ultrasonik sensör pinleri
const byte echoOrta = 10, trigOrta = 11; // orta Ultrasonik sensör pinleri
const byte echoSol = 12, trigSol = 13; // sol Ultrasonik sensör pinleri


byte hiz = 100; // PWM.
unsigned long sure;
int uzaklik;
bool yon = 0; // 0 ise sol, 1 sag.

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(trigSag, OUTPUT);
  pinMode(echoSag, INPUT);
  pinMode(trigOrta, OUTPUT);
  pinMode(echoOrta, INPUT);
  pinMode(trigSol, OUTPUT);
  pinMode(echoSol, INPUT);
  analogWrite(enA, hiz);
  analogWrite(enB, hiz);
}

void loop() {

  byte uzaklikSag = mesafe(trigSag, echoSag);
  byte uzaklikOrta = mesafe(trigOrta, echoOrta);
  byte uzaklikSol = mesafe(trigSol, echoSol);

  if (uzaklikSag < 50)
    analogWrite(enB, 0);
  else analogWrite(enB, hiz);

  if (uzaklikSol < 50)
    analogWrite(enA, 0);
  else analogWrite(enA, hiz);

  if (uzaklikOrta < 30) { // Uzaklık 30 cm'den yakınsa sola dön.
    dur();
    delay(1000);
    geri();
    delay(300);
    donus();
    delay(400);

  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    digitalWrite(IN1, 1);
    digitalWrite(IN2, 0);
    digitalWrite(IN3, 1);
    digitalWrite(IN4, 0);
  }
}

byte mesafe(byte trig, byte echo) {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.
  return uzaklik;
}

void sag() {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}
void sol() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
}

void dur() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 0);
}

void geri() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}

void donus() {
  if (yon)
    sol();
  else
    sag();
}

const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // Motor sürücü yön pinleri
const byte echoSag = 3, trigSag = 4; // Sağ ultrasonik sensör pinleri
const byte echoOrta = 7, trigOrta = 8; // Orta ultrasonik sensör pinleri
const byte echoSol = 12, trigSol = 13; // Sol ultrasonik sensör pinleri

byte hiz = 100; // PWM.
unsigned long sure;
int uzaklik;

void setup() {
  pinMode(trigSag, OUTPUT);
  pinMode(echoSag, INPUT);
  pinMode(trigOrta, OUTPUT);
  pinMode(echoOrta, INPUT);
  pinMode(trigSol, OUTPUT);
  pinMode(echoSol, INPUT);
}

void loop() {

  byte uzaklikSag = mesafe(trigSag, echoSag);
  byte uzaklikOrta = mesafe(trigOrta, echoOrta);
  byte uzaklikSol = mesafe(trigSol, echoSol);

  if (uzaklikSag < 50)
    sag();

  if (uzaklikSol < 50)
    sol();

  if (uzaklikOrta < 30) { // Uzaklık 30 cm'den yakınsa dur, geri git, sola dön.
    dur();
    delay(1000);
    geri();
    delay(300);
    sol();
    delay(400);
  }
  else  ileri(); // Uzaklık 30 cm'den yakın değilse düz git.
}

byte mesafe(byte trig, byte echo) {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.
  return uzaklik;
}
void ileri() {
  analogWrite(IN1, hiz);
  analogWrite(IN2, 0);
  analogWrite(IN3, hiz);
  analogWrite(IN4, 0);
}
void geri() {
  analogWrite(IN1, 0);
  analogWrite(IN2, hiz);
  analogWrite(IN3, 0);
  analogWrite(IN4, hiz);
}
void sag() {
  analogWrite(IN1, hiz);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, 0);
}
void sol() {
  analogWrite(IN1, 0);
  analogWrite(IN2, 0);
  analogWrite(IN3, hiz);
  analogWrite(IN4, 0);
}
void dur() {
  analogWrite(IN1, 0);
  analogWrite(IN2, 0);
  analogWrite(IN3, 0);
  analogWrite(IN4, 0);
}

#include <NewPing.h>
const byte IN1 = 8, IN2 = 7, IN3 = 5, IN4 = 4; // Motor sürücü yön pinleri
const byte enA = 9, enB = 3; // Motor sürücü PWM pinleri
const byte trig0 = 13, echo0 = 12; // sol sensör 0 Ultrasonik sensör pinleri
const byte trig1 = 11, echo1 = 10; // orta sensör 1 Ultrasonik sensör pinleri
const byte trig2 = 1, echo2 = 0; // sag sensör 2 Ultrasonik sensör pinleri

byte hiz = 150; // PWM.
unsigned long sure;
int uzaklik;
bool tersle = 1;

byte sinir = 200;
NewPing sensor[3] = {   // Üç adet sensor nesnesi oluşturuldu.
  NewPing(13, 12, sinir), // sol sensör 0
  NewPing(11, 10, sinir),//orta sensör 1
  NewPing(1, 0, sinir) // sag sensör 2
};

void setup() {
  Serial.begin(9600); // Seri ekran  9600 baudrate'e ayarlandı.
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(trig0, OUTPUT);
  pinMode(echo0, INPUT);
  pinMode(trig1, OUTPUT);
  pinMode(echo1, INPUT);
  pinMode(trig2, OUTPUT);
  pinMode(echo2, INPUT);
}

void loop() {

  if (sensor[0].ping_cm() >1 & sensor[0].ping_cm() < 60)
    analogWrite(enB, hiz + 70);
  else
    analogWrite(enB, hiz);

  if (sensor[2].ping_cm() >1 & sensor[2].ping_cm() < 60)
    analogWrite(enA, hiz + 70);
  else
    analogWrite(enA, hiz);

  if (sensor[1].ping_cm() >1 & sensor[1].ping_cm() < 30) { // Uzaklık 30 cm'den yakınsa sola dön.
    dur();
    delay(1000);
    geri();
    delay(300);
    donus();
    delay(400);
  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    digitalWrite(IN1, 1);
    digitalWrite(IN2, 0);
    digitalWrite(IN3, 1);
    digitalWrite(IN4, 0);

  }
}

void mesafeGoster() {
  for (byte i = 0; i < 3; i++) { // Üç sensörün bilgileri göster.
    delay(50); // En az 29 ms beklenmeli.
    Serial.print(i);
    Serial.print("=");
    Serial.print(sensor[i].ping_cm());
    Serial.print("cm ");
  }
  Serial.println();
}

void donus() {

  if (tersle)
    sol();
  else
    sag();
  tersle = !tersle;
}

void sol() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
}
void sag() {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}
void dur() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 0);
}

void geri() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}

const byte IN1 = 8, IN2 = 7, IN3 = 5, IN4 = 4; // Motor sürücü yön pinleri
const byte enA = 9, enB = 3; // Motor sürücü PWM pinleri
const byte echo = 11, trig = 12; // Ultrasonik sensör pinleri

byte hiz = 150; // PWM.
unsigned long sure;
int uzaklik;
bool tersle=1;

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.

  analogWrite(enA, hiz);
  analogWrite(enB, hiz + 20);


  if (uzaklik < 40) { // Uzaklık 30 cm'den yakınsa sola dön.
    dur();
    delay(1000);
    geri();
    delay(300);
    donus();
    delay(400);
  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    digitalWrite(IN1, 1);
    digitalWrite(IN2, 0);
    digitalWrite(IN3, 1);
    digitalWrite(IN4, 0);

  }
}

void donus() {

  if (tersle)
    sol();
  else
    sag();
 tersle = !tersle;
}

void sol() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
}
void sag() {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}
void dur() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 0);
}

void geri() {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
}

Benzer Temrinler & Yazılar

  • EEPROM.read

    #include <EEPROM.h> byte deger; void setup() { Serial.begin(9600); int hafizaBoyutu = EEPROM.length(); //Kartın hafıza boyutunu al. for (int adres = 0; adres < hafizaBoyutu; adres++) { deger = EEPROM.read(adres); //Analog veriyi 10 ms aralıklarla tüm hafızadan sırayla oku. Serial.print("Adres = "); Serial.print(adres); Serial.print("\t Değer = "); Serial.println(deger); delay(10); } } void loop() { }

  • Bluetooth Kontrollü Araç Uygulaması

    Görselde bluetooth modülün RX ve TX pinlerinin SoftwareSerial.h kütüphanesi kullanılarak8 ve 7 numaralı pinlere bağlanması gösterilmiştir. Modülün TX ucu Arduino’nun RX (8. pin) ucuna, modülün RX ucu Arduino’nun TX (7. pin) ucuna bağlanmalıdır. Ancak modülün TX ucundançıkan 3,3 V Arduino RX ucunda lojik 1 olarak kabul edilirken Arduino’nun TX ucundan çıkan 5 Vmodülün RX ucuna…

  • Servo Motor Uygulaması

    Görseldeki uygulamada servo motor 0°den 180°ye birer derece açıyla gidip aynı şekilde geridöner. 0° ile 180° arası mesafe, bu servo motorda 300 ms sürmektedir. 300 ms’den hızlı komutlarda servo motor doğru çalışmaz. Menülerden ”Taslak  Library Ekle  Servo” seçilerek programın başına eklenir. Bu programların örneğine menülerden “Dosya  Örnekler  Servo  Sweep ve…

  • Alev Dedektörü Devresi

    Alev sensörleri ortamda alev algıladığında uyarı sinyali verir. Alev sensörü 760 nm – 1100 nm arasındaki dalga boyuna sahip ışığı (kızılötesi ışınım) tespit etmek için kullanılır. Görselde alev sensörü pin yapısı, Görseldeki ise alev dedektörü devresi görülmektedir. A0: Analog veri çıkışı. GND: Toprak pini. +: 3,3 V-5 V besleme. D0: Dijital veri çıkışı. const byte buzzer…

  • Keypad Uygulaması

    Görseldeki devrede tuş takımı uygulaması verilmiştir. Keypad kütüphanesini kurmak içinmenülerden ”Taslak  Library Ekle  Kütüphaneleri Yönet” seçeneğinden arama kutusuna“Keypad” yazılıp Keypad (Keypad by Mark Stanley and Alexander Brevig) kütüphanesi bulunarakkurulur. Daha sonra “Taslak  Library Ekle  Keypad” seçilerek programın başına eklenir. Buprogramın bir örneğine menülerden “Dosya  Örnekler  Keypad  CustomKeypad” adımlarıizlenerek…

Bir Yorum Yazın

E-posta adresiniz yayınlanmayacaktır. Gerekli alanlar * ile işaretlenmiştir.