Engelden Kaçan Robot Yapımı(BurakOBOT)

Merhaba arkadaşlar uzun zaman önce WALL-E oyuncağı ile bir adet engelden kaçan robot yapmıştım. Bu robot 3 Adet servo motor kullanılmıştı. Yoğun istekten dolayı bu sefer oğlumla birlikte bu robotu yapma çalışmalarına başladık.

Oğlum çok ısrar ettiğinden dolayı onu biraz meşgul edebilirim düşüncesiyle kolları sıvadık.

Robot bir tane servo ve 2 adet DC motordan oluşuyor. Ayrıca DC motorların kontrolü için Motor sürücü modülünü kullanmak zorunda kaldık. DC motor yerine servo motor kullansaydık bu modülü kullanmamıza gerek kalmayacaktı.

Projede 2x 18650 Li-on pilleri seri bağlayarak projenin daha uzun çalışmasını sağladım.

Bu pillerin şarj edilmesiyle yaklaşık hiç  durmadan 3 saat çalışıyor . Burak test etti ismini BURAKOBOT koyduk 🙂

Proje biraz şekilsiz duruyor projenin gövdesi 1Lt lik Dondurma kutularının kapağından yaptık. 3 kapağı birleştirerek sert bir gövde oluşturdum ve maalesef silikon tabancasında bir tane silikon çubuğu bitirdim. Deneme yapacağım bakalım uzun süre oğlum Burak’ın elinden kurtulabilecek mi?

Projede şunu belirtmek istiyorum . Program size motor hızını ayarlamanızı sağlıyor ve unutmayın ilk kalkışta en çok enerji tüketilen zaman olduğundan dolayı bunu motorları yavaştan hızlıya doğru yaptığından dolayı batarya ömrü biraz daha uzun olacaktır.

Kullanılan Malzemeler

Arduino UNO

L293D Arduino UNO Motor Shield

2x DC Motor.

1x Servo Motor

1x Ultrasonik Sensör

Bağlantı Şekli

Projede kullanılan DC motorların soldaki olanını Motor kontrol modülünün M1 girişine, Sağdaki motoru ise M2 girişine bağlayın.

Ultrasonik sensörün GND ve VCC uçlarını arduinonun GND ve VCC uçlarına bağlayın. Şimdi en önemli sorun Motor modülünü yerleştirdiğiniz zaman size  A0-A5 pinlerini kullanmaya izin veriyor.

Bizde Trig için A5  , Echo için A4 pinlerini kullandık.

Servo motoru L293D motor sürücüsünde Servo1 pinine bağlayınız . Projeniz artık hazır hale gelecektir.

Not: Ön teker için kullanacağınız Crazy tekerden bulamadığımız için Burak kendi legolarından bir kombinasyon hazırladı. Bundan dolayı   halı üzerinde hareketlerinde zorlanıyor.

Projemizin Resimleri

Programımız

Bunun için öncelikle NewPing ve AFMotor kütüphanelerini indirmeniz gerekmektedir. Bu kütüphaneleri Alttaki linklerden indirebilirsiniz.

https://github.com/adafruit/Adafruit-Motor-Shield-library

https://bitbucket.org/teckel12/arduino-new-ping/downloads/NewPing_v1.8.zip

 

 

   //////////////////////////////////////////////
  //          Arduino Burakobot               //
 //                                          //
//           http://www.arduinom.org        //
/////////////////////////////////////////////

#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h> 

#define TRIG_PIN A5 
#define ECHO_PIN A4 
#define MAX_DISTANCE 200 
#define MAX_SPEED 190 // Motorlarin hizlarini ayarlayabilirsiniz.
#define MAX_SPEED_OFFSET 20

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); 

AF_DCMotor motor1(1, MOTOR12_1KHZ); 
AF_DCMotor motor2(2, MOTOR12_1KHZ);

Servo myservo;   

boolean goesForward=false;
int distance = 100;
int speedSet = 0;

void setup() {

  myservo.attach(9);  
  myservo.write(115); 
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop() {
 int distanceR = 0;
 int distanceL =  0;
 delay(40);
 
 if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL)
  {
    turnRight();
    moveStop();
  }else
  {
    turnLeft();
    moveStop();
  }
 }else
 {
  moveForward();
 }
 distance = readPing();
}

int lookRight()
{
    myservo.write(50); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
}

int lookLeft()
{
    myservo.write(170); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
    delay(100);
}

int readPing() { 
  delay(70);
  int cm = sonar.ping_cm();
  if(cm==0)
  {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
  } 
  
void moveForward() {

 if(!goesForward)
  {
    goesForward=true;
    motor1.run(FORWARD);      
    motor2.run(FORWARD);      
   for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
   {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
   }
  }
}

void moveBackward() {
    goesForward=false;
    motor1.run(BACKWARD);      
    motor2.run(BACKWARD);  
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
  }
}  

void turnRight() {
  motor1.run(FORWARD);
  motor2.run(BACKWARD);     
  delay(300);
  motor1.run(FORWARD);      
  motor2.run(FORWARD);      
} 
 
void turnLeft() {
  motor1.run(BACKWARD);     
  motor2.run(FORWARD);     
  delay(300);
  motor1.run(FORWARD);     
  motor2.run(FORWARD);
}  


Boş zamanlarda arduino ile uğraşan kendi halinde bir Öğretmen.

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.