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); }
No responses yet