Arduino ile Engelden Kaçan Robot Yapımı

İlk robotumuzu yapmaya başlayalım. Robotumuzu yapmak için derste gördüğümüz uzaklık sensörümüzü ve DC motor sürücümüzü kullanacağız. Eğer bu konular hakkında bilgi sahibi değilseniz bu konuları tekrardan gözden geçirmeniz yararlı olabilir.
Haydi Başlayalım… Öncelikle malzeme listemizi çıkartalım:

  • 1 adet şase: Tüm malzemeleri ve motorları sabitlemek için bir plaka
  • 2 adet DC motor
  • 2 adet tekerlek: DC motorun ucuna tam uymalı
  • 1 adet motor sürücü: Kendi yaptığımız da olur
  • 1 adet sarhoş tekerlek: Veya yüzeyle sürtünmeyi azaltacak bir çubuk ( ben genellikle LED’in kafasını kullanmaktayım)
  • Pil : 11.1 Voltluk lipo piller uygun olacaktır. 9 Voltluk pil motorlar için yetersiz kaldığı oluyor Denemek lazım
  • 3 adet HC-SR04 uzaklık sensörü
  • Ve tabii ki bir Arduino

İlk başta robotun mekaniğini yapalım. Şasemizin arkasına iki motoru yerleştirelim. Robotun ön tarafına sarhoş tekerimizi yerleştirelim. Sarhoşumuz yoksa dengeyi sağlayacak şekilde robotun altına LED’ler koyalım. DC motorlarımıza tekerlerimizi takalım ve robotumuzun dengede durmasını sağlayalım. Şimdi Arduino ve motor sürücümüz için güzel bir yer ayarlayalım. Kablolamayı iyi yapmanız robotu rahat test etmenizi sağlayacaktır. Son olarak da sensörleri 0-90-180 derece şeklinde yerleştirelim.
Robotun yerleşimi resimdeki gibi olacaktır.
Elektronik bağlantıları daha önceki konularda bahsettiğimiz gibi dikkatlice yapalım.

Kablolamayı bitirdiğimize göre yazılıma geçelim ve robotumuzu test edelim.

const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
/*
trigPin1 ve echoPin1 = soldaki uzaklık sensörümüz
trigPin2 ve echoPin2 = öndeki uzaklık sensörümüz
trigPin3 ve echoPin3 = sağdaki uzaklık sensörümüz
*/
int trigPin1 = 6;
int echoPin1 = 7;
int trigPin2 = 4;
int echoPin2 = 5;
int trigPin3 = 2;
int echoPin3 = 3;
float uzaklik(int trigPin, int echoPin){
float olcum;
float cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
olcum = pulseIn(echoPin, HIGH);
cm= olcum /29.1/2;
return cm;
}
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1,INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2,INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3,INPUT);
}
void loop(){
while( uzaklik(trigPin2, echoPin2 ) < 10 ){   // önüne engel gelene kadar düz git
ileri(100,100);
}
dur();   // engel geldikten sonra dur
delay(1000); // 1 saniye bekle
if( uzaklik(trigPin1, echoPin1) > 10 ){   // soluna bak
ileri(150,0);   // engel yoksa sola dön
delay(500);   // 90 derece dönene kadar geçecek süre. Bu süreyi kendinize göre ayarlayın
dur();   // dur
delay(1000);
}else if(uzaklik(trigPin3, echoPin3) > 10 ){   // sol dolu ise sağa bak
ileri(0,150);   // engel yoksa sağa dön
delay(500);   // 90 derece dönene kadar geçecek süre. Bu süreyi kendinize göre ayarlayın
dur();   // dur
delay(1000);
}else {   // sağ ve solda engel varsa geri gidip dönelim
geri(100,100);
delay(1000);
ileri(150,0);
delay(500);
dur();
delay(1000);
}
}

Yaptığınız robot ve kodların uygun olarak çalışması için kodlar üzerinde bazı değişiklikler yapmak gerekebilir.
Bu robot ile labirent çözen robot yapılabilir. Burada tek önemli olan robotun tam 90 derece dönmesini sağlamaktır.

İlgili Mesajlar

Abone ol
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments