Ultrasonik Sensör ile Robot

Bu Robotta 3 adet servo motor kullanılmıştır. Tekerleklerde kullanılan servo motorlar hacklenmiş servo motorlardır. ultrasonik sensörün altındaki normal servo motordur. Tekerleklerde sağa sola dönüşü kulaylaştıran  crazy motor denilen bir teker vardır . Tabiki size bağlı ben crazy teker kullanmadan direk tank paletleri gibi bir oyuncak bulduğumdan dolayı, bu oyuncağı kullandım

Kullanılan malzemeler

  1. Arduino
  2. 3 adet servo
  3. Bir adet Ultrasonik sensör
  4. Bir adet güç butonu

Proje Bağlantıları

1. Bağlantısında tüm servo motorların artı ve eksileri birleştirerek gücü arduinodan vermeden beslenmelidir.

2.Ultrasonik sensörü hareket ettiren servo motorumuz 6 numaralı pine bağlıdır

3.Ultrasonic sensör 7 ve 8. pinlere bağlanmıştır

4.Sol teker servo motoru 9. pine

5.Sağ teker servo motoru 10. pine bağlanmıştır.

 

Programımız


# include <servo .h >
  
//Servo dosyaları dahil ediliyor
  
Servo leftservo;     //Sol servo
  
Servo rightservo;    //Sağ servo
  
Servo scanservo;     //Sensörün bağlı olduğu servo
  
//Pin ve diğer ayarlar
  
const int turntime = 500;  //Number of milliseconds to turn when turning
  
const int pingPin = 7;     //Sensörün ping pini
  
const int leftservopin = 9; //sol servo pin
  
const int rightservopin = 10; // sağ servo pin
  
const int scanservopin = 6;   // sensör servo pin
  
const int distancelimit = 10;   //Mesafe limiti (inç)
  
  
  
//Yüklemeler
  
void setup()
  
{
  
//Servo yüklemeleri
  
leftservo.attach(leftservopin);
  
rightservo.attach(rightservopin);
  
scanservo.attach(scanservopin);
  
delay(2000);        // wait two seconds
  
}
  
  
  
//Ana program başlangıç
  
void loop(){
  
go();  //go() fonksiyonuna git
  
  
  
int distance = ping();
  
// ping() fonksiyonunda ölçülen değeri distance değişkenine ata
  
  
  
if (distance < distancelimit){
  
stopmotors();
  
char turndirection = scan();
  
//scan() fonksiyonundan ölçülen değere göre hareket et
  
switch (turndirection){
  
case ‘l’:
  
turnleft(turntime);
  
break;
  
case ‘r’:
  
turnright(turntime);
  
break;
  
case ‘s’:
  
turnleft(turnaroundtime);
  
break;
  
}
  
}
  
}
  
//Ana program bitiş
  
//Mesaja ölçme fonksiyonu başlangıç
  
int ping(){
  
long duration, inches, cm;
  
//Ölçüm Ayarlamaları
  
pinMode(pingPin, OUTPUT);
  
digitalWrite(pingPin, LOW);
  
delayMicroseconds(2);
  
digitalWrite(pingPin, HIGH);
  
delayMicroseconds(5);
  
digitalWrite(pingPin, LOW);
  
//Ölçülen değerin değişkene atılması
  
pinMode(pingPin, INPUT);
  
duration = pulseIn(pingPin, HIGH);
  
// değer dönüşümleri
  
inches = microsecondsToInches(duration);
  
cm = microsecondsToCentimeters(duration);
  
//ekrana yazdırma
  
Serial.print(“Ping:  ”);
  
Serial.println(inches);
  
return round(inches);
  
}
  
//Mesafe ölçüm fonksiyonu bitiş
  
  
  
//go() fonksiyonu
  
void go(){
  
leftservo.write(30);
  
rightservo.write(150);
  
}
  
  
  
//sola dönüş
  
void turnleft(int t){
  
leftservo.write(150);
  
rightservo.write(150);
  
delay(t);
  
}
  
  
  
//sağa dönüş
  
void turnright(int t){
  
leftservo.write(30);
  
rightservo.write(30);
  
delay(t);
  
}
  
  
  
//düz gitme
  
void forward(int t){
  
leftservo.write(30);
  
rightservo.write(150);
  
delay(t);
  
}
  
  
  
//geriye dönme
  
void backward(int t){
  
leftservo.write(150);
  
rightservo.write(30);
  
delay(t);
  
}
  
  
  
//motorları durdurma
  
void stopmotors(){
  
leftservo.write(90);
  
rightservo.write(90);
  
}
  
//scan() fonksiyonu başlangıç
  
char scan(){
  
int leftscanval, centerscanval, rightscanval;
  
char choice;
  
//Solu tara
  
scanservo.write(30);
  
delay(300);
  
leftscanval = ping();
  
//Sağı tara
  
scanservo.write(150);
  
delay(1000);
  
rightscanval = ping();
  
//Önü tara
  
scanservo.write(88);
  
//Boş alanı bul
  
if (leftscanval>rightscanval && leftscanval>centerscanval){
  
choice = ‘l’;
  
}
  
else if (rightscanval>leftscanval && rightscanval>centerscanval){
  
choice = ‘r’;
  
}
  
else{
  
choice = ‘s’;
  
}
  
  
  
Serial.print(“Choice:  ”);
  
Serial.println(choice);
  
return choice;
  
}
  
//scan() fonksiyonu bitiş
  
  
  
long microsecondsToInches(long microseconds){
  
return microseconds / 74 / 2;
  
}
  
  
  
long microsecondsToCentimeters(long microseconds){
  
return microseconds / 29 / 2;
  
}
  1. kemal 15 Ekim 2016 16:25

    Merhaba, bu projeye benzer diğer engelden kaçan robotlarda önce mesafe ölçüp sonra gidiyor. Bu araçdaki sürekli tarama yapması ve durmadan gitmesi çok güzel. Aynı kodları servo motor ile değilde DC Gear Motor ile yapılan engelden kaçan robota yükleyebilirmiyiz.
    Kütüphanenin değişmesi yeterli olurmu ?

    Cevapla
    • Arduinocu 16 Ekim 2016 14:29

      cok buyuk degisiklikler yapmadan yapabilirsiniz. elimde guclu dc motorlar olmadigi icin bu sekilde yapmistim . yapmaniz gereken dongulere dc motorun bagli oldugu pini high yada low yapmak .

      Cevapla

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.