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

Categories:

Tags:

No responses yet

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Dersler