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

  • Elle Uzaktan Kontrollü Araba Uygulaması

    Görseldeki eldiven üzerine yerleştirilmiş verici devresi görülmektedir. Görseldeki vericide kullanılan MPU6050 sensörü küçük deney borduna SDA pini A4, SCL pini A5’e gelecek şekilde takılmıştır. Görseldeki alıcı devresinde nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü, MPU6050 ivme sensörü I2C protokolünü kullanmaktadır. İvme sensörünün x ve y ekseninde -16384 ile…

  • NTC’yle Analog Giriş Uygulaması

    Görseldeki devrede NTC ve NTC’ye seri bağlı direnç gerilim bölücü olarak çalışmaktadır.Oda sıcaklığında (yaklaşık 25 °C) NTC’nin direnci yaklaşık 8 kΩ-10 kΩ’dur. NTC’nin sıcaklığı arttırıldığında direnci ve üzerine düşen gerilim azalır. Böylelikle 10 kΩ’luk sabit direnç üzerindekigerilim artar. Direnç üzerindeki bu gerilim analog giriş tarafından algılanarak değeri 1023’e doğruyaklaşır. Bu değer belirlenen referans değerini aştığında…

  • LCD Uygulaması

    Görseldeki LCD uygulamasında V0 ucuna bağlı dirençle ekran parlaklığı ayarlanmıştır. Bupine potansiyometre bağlanarak da LCD ekranın parlaklığı ayarlanabilir. LCD kütüphanesi dâhilîkütüphanelerde mevcuttur. Menülerden “Taslak  Library Ekle  LiquidCrystal” seçilerek kütüphane taslakta kullanılır. Aşağıdaki program LCD ekrana “Merhaba dünya.” yazdırmaktadır. Buprogramın bir örneğine menülerden “Dosya  Örnekler  LiquidCrystal  HelloWorld” adımlarını izleyerek de ulaşılır….

  • Wi-Fi Uygulaması NodeMCU 1.0 (ESP-12E) nem sensörü

    Bu uygulamada NodeMCU 1.0 (ESP-12E) kullanılarak Arduino IoT Cloud üzerinden başka birkonumdaki LED’i yakıp söndürme ve ortamın nem ve sıcaklık bilgisini bilgisayar veya akıllı telefon üzerinden görüntüleme yapılmaktadır. #include "thingProperties.h" #include "DHT.h" //Adafruit DHT Sensor Library v1.2.3 #define DHTpin 4 // Sensörün bağlandığı pin. NodeMCU 1.0 (ESP-12E) D2 pini. #define DHTtipi DHT11 // Sensör tipi:…

  • 7 segment displayle dijital çıkış uygulaması yapmak

    Görselde ortak katotlu ve ortak anotlu 7 segment displayin yapısı, Görsel 2.25b’de ise dijital çıkış şeması ve devresi görülmektedir. Displayin a, b, c, d, e, f, g segmentleri sırasıylaArduino’nun 6, 5, 4, 3, 2, 1, 0 numaralı pinlerine bağlıdır. Ortak katot Arduino’nun GND ucunabağlıdır. Karar yapısı olarak switch case kullanılmıştır. Rakam değişkenin içeriğine göre ilgili…

  • Akıllı Ev Aydınlatma Uygulaması NodeMCU 1.0 (ESP-12E)

    Görseldeki devrede NodeMCU ortamdaki kablosuz ağa bağlanmaktadır (STA modu). Seri ekrandan NodeMCU kartının aldığı IP adresi görülür. Bilgisayar görselde veya akıllı telefondan Görseldeki tarayıcı adres çubuğuna NodeMCU’nun IP adresi girilerek odaların lamba kontrolleri gerçekleştirilir. #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> /*Ağ adınızı ve Şifrenizi Giriniz*/ const char* kablosuzAgAdi = "ZyXEL"; // Ağ adınızı girin const char* sifre…

Bir Yorum Yazın

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