Merhaba arkadaşlar arduino ile projelerimizde olabildiğince hızlı ilerlemeye çalışıyoruz. Bugün ki yazımızın konusu başlıkta da belirttiğim üzere Arduino ile Engelden Kaçan Robot nasıl yapılır ve engelden kaçan robot nerelerde kullanılır veyahut engelden kaçan robot sistemi nerelerde işimize yarar bunlardan bahsedeceğim. Bildiğiniz üzere son zamanlarda robot yarışları oldukça arttı birden farklı kategoride binlerce robot yarıştırılıyor. Bizim bugün ki yapacağımız engelden kaçan robot ise bir nevi labirent çözen robot adlı kategori elemanı sayılabilir, hatta öyle ama biraz ilkel hali geliştirilmesi gerek. 🙂
Ama bu haliyle ile de çok kullanışlı mesela el süpürgeleri var bilirsiniz şarjlı, onun motorunu bu engelden kaçan robota takarak basit bir akıllı ev süpürgesi elde etmiş olursunuz ve böyle bir akıllı süpürgeye sahip olmak için binlerce Tl harcamanıza gerek yok 🙂
engelden kaçan robotumuzun sistemi oldukça basit önünde bir HC-SR04 Ultrasonik Mesafe Sensörü(Bu sensörün kullanımını şu postta anlatmıştık) bulunmakta normal durumunda engelden kaçan robotumuz öne giderken eğer önüne bir engel çıkarsa ve bu engelle arasındaki mesafe 10 cm den az ise sensöre bağlı servo sayesinde sağa ve sola dönerek nerenin boş olduğuna bakıyor, hangi taraf boşsa engelden kaçan robotumuz o tarafa dönüyor. Eğer her iki tarafta kapalıysa geri giderek aynı şeyleri tekrar yapıyor ve ilerlemeye devam ediyor. Ve eğer yine karşısına engel çıkarsa aynı algoritmayı uyguluyor. Böylelikle bir yere çarpmadan hareket edebiliyor 🙂 Az kalsın unutuyordum üzerindeki buton sayesinde engelden kaçan robotumuzu açıp kapayabiliyoruz 🙂
Ön bilgilendirmemiz tamam olduğuna göre isterseniz zaman kaybetmeden projemize geçelim 🙂
Her zamanki gibi bir kaç malzemeye ihtiyacımız var 🙂
İçindekiler
Engelden Kaçan Robot Malzeme Listesi
1- Arduino Uno
2- L298 motor sürücü modülü
3- 2 Adet dc motorlu tekerlekler
4- Micro Servo
5- HC-SR04 ultrasonik sensör
6- Led ve 220 ohm direnç
7- buzzer
8- 9v pil ve şasi için gerekli elemanlar
Ayrıca arka destek tekerleğini yapmak için bir adet büyük (metal) ataç ve bir boncuk gerekiyor ama siz isterseniz bunu 4×4 te yapabilirsiniz 2 dc motor sayesinde 😉
Not: Tüm bu malzemeleri elektronik parça satan yerlerde bulabilirsiniz yada şu ve bu adreslerden internet üzerinden güvenle sipariş edebilirsiniz
Ayrıca eğer zamanım bol diyorsanız Çin’den de Aliexpress vasıtasıyla getirtebilirsiniz. Daha uygun fiyata gelecektir. 🙂
Engelden Kaçan Robot Şasisinin Hazırlanması
Öncelikle pleksiglasımızı (12 x 9,5 cm) keselim. 🙂
Motorlarımızı ve pil yuvamızı silikon yada vida ile şasimize tutturalım :),
Ataç ile yaptığımız arka tekeri şasimize monte edelim 🙂
Kartları monte edelim. 🙂
Sensörü ve servo motor montajını yapalım 🙂
Arduino İle Engelden Kaçan Robot Devre Şeması
Alt tarafta çizdiğimiz devre şemasına bakarak uygun arduino modeline göre devremizi breadboard’umuza kuralım.
Gerekli bağlantıları da yaptığımızda aşağıdaki gibi bir sonuç çıkacaktır. 🙂
Montajı bitirdiğimize göre sıra yazılımda.. 🙂
Engelden Kaçan Robot Yazılımı
Bu proje için yazılımın kendisinde barındıran kütüphaneye ihtiyaç duyuyoruz.. Bunları aşağıda vereceğim.. Alttan kopyalarsanız kütüphaneyi de kendiniz alttan kopyalayıp oluşturmanız gerekecek ama ben size bütün bir halini aşağıda bir linkte vereceğim.. 🙂
// DONANIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// 2019
#include <Servo.h>
#include "Ultrasonic.h"
const int button = 2;
const int led = 3;
const int buzzer = 4;
const int motorA1= 6; // Giriş pinlerini tanımladık
const int motorA2= 9;
const int motorB1=10;
const int motorB2=11;
Ultrasonic ultrasonic(A4 ,A5); //Ultrasensörün trig ve echo pinini atadık
Servo sensorservo; //servomusu tanımladık
int mesafe; //Variable to store mesafe from an object
int sagkontrol;
int solkontrol;
int fonksiyon=0;
int buttonState=0;
int pos=90;
int flag=0;
void setup()
{
sensorservo.attach(5); //Servomuzu 5. pine bağladık
sensorservo.write(pos); // pos değişkenimizi servomuza yazdırdık
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(motorA1,OUTPUT); // Çıkış pinlerini tanımladık
pinMode(motorA2,OUTPUT);
pinMode(motorB1,OUTPUT);
pinMode(motorB2,OUTPUT);
}
void loop()
{
buttonState = digitalRead(button);
unsigned long currentMillis = millis();
if (buttonState == LOW) {
delay(500);
if ( flag == 0){ //Düğmeye bastığımızda durduran yada çalıştıran bölüm
fonksiyon = 1;
flag=1;
}
else if ( flag == 1){
fonksiyon = 0;
flag=0;
}
}
if (fonksiyon == 0){
sensorservo.write(90);
stop();
noTone(buzzer);
digitalWrite(led, HIGH);
}
else if (fonksiyon == 1){
//mesafeyi oku
mesafe = ultrasonic.Ranging(CM); //cm yada inç seçimi biz cm seçtik
if (mesafe > 10){
ileri(); //All clear, move ileri!
noTone(buzzer);
digitalWrite(led,LOW);
}
else if (mesafe <=10){
stop();
tone(buzzer,500);
digitalWrite(led,HIGH);
//Start scanning...
for(pos = 0; pos < 180; pos += 1){
sensorservo.write(pos);
delay(10);
}
solkontrol = ultrasonic.Ranging(CM);
for(pos = 180; pos>=0; pos-=1){
sensorservo.write(pos);
delay(10);
}
sagkontrol= ultrasonic.Ranging(CM);
sensorservo.write(90);
if (solkontrol < sagkontrol){
sol();
delay(400);
}
else if (solkontrol > sagkontrol){
sag();
delay(400);
}
else if (solkontrol <=10 && sagkontrol <=10){
geri();
sol();
}
}
}
}
void ileri(){
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void geri(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void sol(){
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void sag(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void stop(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, LOW);
}
Ultrasonic.h Kütüphanesi
#ifndef Ultrasonic_h
#define Ultrasonic_h
#include "Arduino.h"
#define CM 1
#define INC 0
class Ultrasonic
{
public:
Ultrasonic(int TP, int EP);
long Timing();
long Ranging(int sys);
private:
int Trig_pin;
int Echo_pin;
long duration,distacne_cm,distance_inc;
};
#endif
Ultrasonic.cpp Kütüphanesi
#include "Arduino.h"
#include "Ultrasonic.h"
Ultrasonic::Ultrasonic(int TP, int EP)
{
pinMode(TP,OUTPUT);
pinMode(EP,INPUT);
Trig_pin=TP;
Echo_pin=EP;
}
long Ultrasonic::Timing()
{
digitalWrite(Trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(Trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_pin, LOW);
duration = pulseIn(Echo_pin,HIGH);
return duration;
}
long Ultrasonic::Ranging(int sys)
{
Timing();
distacne_cm = duration /29 / 2 ;
distance_inc = duration / 74 / 2;
if (sys)
return distacne_cm;
else
return distance_inc;
}
Bunları ayrı ayrı yeni sekme açıp uzantılarıyla birlikte kaydetmeniz gerekiyor yada aşağıda vereceğim linkten direkt indirin 🙂 Ben yinede manuel yapanlar için aşamaların resimlerini aşağıya bırakıyorum.. 🙂
Aşama 1>>> yeni sekme açımı..
Aşama 2 >>>Ultrasonic.h kütüphanesi için Ultrasonic.h adlı dosya açma yukarıdaki Ultrasonic.h adlı kodları buraya yapıştırın.
Aşağıda olduğu gibi 🙂
Aşama 3 >>>Ultrasonic.cpp kütüphanesi için Ultrasonic.cpp adlı dosya açma yukarıdaki Ultrasonic.cpp adlı kodları buraya yapıştırın. Aşağıda olduğu gibi 🙂
Son olarak aşağıdaki gibi bir görüntü olacak 🙂
Ve Sonuç;
engelden kaçan robotumuzun proje kodlarını aşağıdan indirebilirsiniz 🙂
Rar Şifresi: donanimplus.com
Galiba bir yazının daha sonuna geldik. Ama arkadaşlar şunu belirteyim bu tür basit şeyler bence bizim geleceğimiz gelecekte bu tür vatandaşlar hizmet edecek bize.. Yine her zamanki gibi bir kaç tiyo vermek istiyorum.. Bu engelden kaçan robot projesine eski projelerimize bakarak bluetooth falan ekleyip rc araba gibi de kullanabilirsiniz yada ses komutu falan eklersiniz tamamen sizin hayal dünyanıza kalmış.. Umarım anlaşılmıştır ama olur da anlamadığınız bir yer olursa yorumdan yada kişisel sosyal medya hesaplarımdan ulaşabilirsiniz kolay gelsin.. 🙂
güzel fakat led ne için