Göçebe Robot

Göçebe Robot

Göçebe robotumunun çalışma mantığı,ulaşması gereken yere giderken yolda karşılaştığı engelleri aşarak hedefine ulaşmasıdır. Göçebe robotumun önünde ise aşması gereken otomatik çalışan kapı bulunmaktadır. Açılıp kapanan bu kapıdan geçmesi gerekmektedir. Kapı ya denk geldiği sırada kapı açık olsa bile geçmeden bekler ve kapı kapanıp tekrar açılınca altından motorlarını daha hızlı çalıştırarak geçer.

 

 

 

Kapıyla ilk karşılaşmasında açık konumda bulduğu kapıdan geçmemesinin amaçı ise kapının konumunu bilememesidir. Kapı açılıyor veya kapanıyor olabilir.Açılırken denk geldi ise sorun olmaz ama kapanacağı zaman denk gelirse kapıya sıkıntı olacaktır. Çünkü kapanma hareketi yaparken kısa sürede kapı aşağı iner. Ama açılma hareketinde ise kapı ardına kadar açılacak ve sonra kapanacağından geçen süre daha uzun olacaktır. Bunu şansa bırakmamak için robot kapının önüne gelince bekler kapalı ise kapı açılmasını,açık ise kapanıp tekrar açılmasını bekleyecektir.

Robotum yoluna düz devam etmesi için alt kısımda iki adet cny70 sensörü yardır. Siyah elektrik bandı ile yapılan yolda robotumuz düz istikamet izleyecektir.

Göçebe robotum duvar ve kapının yerlerini ölçerek ilk başta hafızasına alır ve kapının ve duvarın kendisine ne kadar uzaklıkta olduğu bilgisine sahip olarak yoluna başlar.

örnek;

duvara olan mesafe 150 cm

kapıya olan mesafe  100 cm olarak ölçüm alsın.

 

Göçebe robotum harekete başlarken ;

1- Duvara çarpmamak için 5 cm kala duracağını,

2- Kapı kapalı iken kapıya çarpmamak için 5 cm kala duracağını,

3- Kapı ile duvar arasında ki mesafenin 50 cm olduğunu

4- İlerleme başlayınca 55 cm durup kapının durumunu analiz edeceğini bilir.

 

Bu robotum tek kapı – 3 kapı – 6 kapı olarak yapıldı ve test edildi. Yazılımları farklı olarak tabikide.

Robotun hazır hale gelmesi:

Elektrik bandı sayesinde, beyaz zemine iki sıra yan yana gelecek şekilde yol çizilir.

Yolun bitişine duvar diye tabir ettiğim engel 90 derece olacak şekilde konur.

Rasgele robot ile kapı arasına kapı diye tabir ettiğim servo motor ile hareketi sağlanan engel düzeneği konumlandırılır. Bu kapı ilk olarak açık tır.

Robota enerji verilir robotumuz ilk olarak kapının mesafesini hafızaya alır ve buzzer sayesinde uyarı verir.

Uyarı alınınca kapı buton sayesinde kapalı konuma getirilir. Ve robotumuz ikinci uyarıyıda verdikten sonra harekete başlar.

Robotun harekete başlaması ile beraber kapı otomatik konuma alınır ve otonom olarak hareketi sağlanır.

Artık gerisi robota kalmıştır. Kapıya takılmadan duvara ulaşması beklenmektedir.


 

 

 

Kapı Devresi İçin Yazılım.

#include<Servo.h>
#include <LiquidCrystal.h>


//               (Rs, E, D4, D5, D6 ,D7)
LiquidCrystal lcd(13 , 12 , 11 , 10 , 9 , 8);
Servo ilkservo;
int a = 0;
int buton = 0;

#define sari_led 6
#define yesil_led 5
#define secim 4
void setup()
{ Serial.begin(9600);
  lcd.begin(16, 2);
  ilkservo.attach(3);
  ilkservo.write(90);

  pinMode(sari_led, OUTPUT);
  pinMode(yesil_led,  OUTPUT);
  pinMode(secim,  INPUT);
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.println("www.robotdevreleri.com");
  lcd.setCursor (0, 1);
  lcd.println("göcebe robot");
  delay (3000);
  
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.println("GOCEBE ROBOT    ");
  lcd.setCursor (0, 1);
  lcd.println("KAPI UYGULAMASI ");
  digitalWrite(yesil_led, HIGH);
  digitalWrite(sari_led, HIGH);
  delay (1000);
  digitalWrite(yesil_led, LOW);
  digitalWrite(sari_led, LOW);
  delay (1000);
  digitalWrite(yesil_led, HIGH);
  digitalWrite(sari_led, HIGH);
  delay (1000);
  digitalWrite(yesil_led, LOW);
  digitalWrite(sari_led, LOW);
  delay (1000);
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.println("Buton= 0 BEKLEME");
  lcd.setCursor (0, 1);
  lcd.println("Buton = 1 KAPALI");
  delay (3000);
   lcd.clear();
  lcd.setCursor (0, 0);
  lcd.println("Buton = 2 AKTIF ");
  lcd.setCursor (0, 1);
  lcd.println("Buton = 3 ACIK  ");
  delay (3000);
}
// sonsuz döngü
void loop() {
 int buton = digitalRead(secim);
  if (buton == HIGH)
  { a=a+1;
  if(a==4)
  {
a=1;
  }
    delay (500);
  }


  if (a == 0)
  { 
  
    digitalWrite(sari_led, HIGH);
    digitalWrite(yesil_led, HIGH);
    lcd.clear();
    lcd.setCursor (0, 0);
    lcd.println("KAPI AYARI ICIN ");
    lcd.setCursor (0, 1);
    lcd.println("BUTONA BASINIZ. ");
    delay(1000);
    lcd.clear();
    lcd.setCursor (0, 0);
    lcd.print("BUTON = "); lcd.print(a);lcd.println("       ");
    lcd.setCursor (0, 1);
    lcd.println("BEKLEMEDE...    ");
    delay(1000);
  }
  if (a == 1)
  {
    
    digitalWrite(yesil_led, HIGH);
    digitalWrite(sari_led, LOW);
    lcd.clear();
    lcd.setCursor (0, 0);
    lcd.print("BUTON = "); lcd.print(a);lcd.println("       ");
    lcd.setCursor (0, 1);
    lcd.println("KAPI KAPANDI    ");
    ilkservo.write(180);
    delay (1000);
  }

  if (a == 2)
  {
 
    lcd.clear();
    lcd.setCursor (0, 0);
    lcd.print("BUTON = "); lcd.print(a);lcd.println("       ");
    lcd.setCursor (0, 1);
    lcd.println("KAPI  AKTIF     ");
    ilkservo.write(90);
    digitalWrite(sari_led, HIGH);
    digitalWrite(yesil_led, LOW);
    delay (1000);
    ilkservo.write(180);
    digitalWrite(yesil_led, HIGH);
    digitalWrite(sari_led, LOW);
    delay (1000);

    }
    if (a == 3)
  {
 
    lcd.clear();
    lcd.setCursor (0, 0);
    lcd.print("BUTON = "); lcd.print(a);lcd.println("       ");
    lcd.setCursor (0, 1);
    lcd.println("KAPI  ACIK      ");
    ilkservo.write(90);
    digitalWrite(yesil_led, LOW);
    digitalWrite(sari_led, HIGH);
    delay (1000);

    }
  }




Robot İçin Yazılım.

const byte echo = 3;
const byte trig = 2;
int ilk = 0;
int son = 0;

int a = 0;
int sure = 0;
int mesafe = 0;
int motorhiz = 11;
int pos = 0;

int solcizgi = 0;
int sagcizgi = 0;
#define SolMotorileri 13
#define SolMotorGeri 12
#define SagMotorileri 10
#define SagMotorGeri 9
#define solled 6
#define buzzer 7
#define sagled 8

void setup()
{
  pinMode(echo , INPUT);
  pinMode(trig , OUTPUT);
  Serial.begin(9600); //iletişim ayarı
  //motor çıkışları
  pinMode(SolMotorileri, OUTPUT);
  pinMode(SolMotorGeri, OUTPUT);
  pinMode(SagMotorileri, OUTPUT);
  pinMode(SagMotorGeri, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(solled, OUTPUT);
  pinMode(sagled, OUTPUT);
  pinMode(buzzer, OUTPUT);
  digitalWrite(5, HIGH);
  digitalWrite(sagled, HIGH);
  digitalWrite(solled, HIGH);
  digitalWrite(buzzer, HIGH);
  delay (50);
  digitalWrite(sagled, LOW);
  digitalWrite(solled, LOW);
  digitalWrite(buzzer, LOW);
  delay (50);
  digitalWrite(sagled, HIGH);
  digitalWrite(solled, HIGH);
  digitalWrite(buzzer, HIGH);
  delay (50);
  digitalWrite(sagled, LOW);
  digitalWrite(solled, LOW);
  digitalWrite(buzzer, LOW);
  delay (50);
  digitalWrite(sagled, HIGH);
  digitalWrite(solled, HIGH);
  digitalWrite(buzzer, HIGH);
  delay (50);
  digitalWrite(sagled, LOW);
  digitalWrite(solled, LOW);
  digitalWrite(buzzer, LOW);
  delay (50);
  delay (1000);
  // kapı kalibrasyonu
  // -----------son kapı ölçümü --------------
  digitalWrite(trig , HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig , LOW);
  sure = pulseIn(echo , HIGH);
  son = (sure / 2) / 28.5 ;

  Serial.print("son olcum =");
  Serial.println(son);
  digitalWrite(buzzer, HIGH);
  delay (1000);
  digitalWrite(buzzer, LOW);
  delay (2000);


  //-------------------ilk kapı ölçümü
  digitalWrite(trig , HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig , LOW);
  sure = pulseIn(echo , HIGH);
  ilk = (sure / 2) / 28.5 ;
  Serial.print("ilk olcum =");
  Serial.println(ilk);
   digitalWrite(buzzer, HIGH);
  delay (1000);
  digitalWrite(buzzer, LOW);
  delay (2000);
  Serial.println("------------------");

}
// sonsuz döngü
void loop() {
  Serial.begin(9600);

  int solcizgi = analogRead(A5);
  int sagcizgi = analogRead(A4);

  Serial.print("solcizgi = ");  Serial.println(solcizgi);
  Serial.print("sagcizgi = ");  Serial.println(sagcizgi);
  
 
  digitalWrite(trig , HIGH);
  delayMicroseconds(1000);
  digitalWrite(trig , LOW);
  sure = pulseIn(echo , HIGH);
  mesafe = (sure / 2) / 28.5 ;
  Serial.print("son olcum =");
  Serial.println(son);
   

    if ((solcizgi < 200) && (sagcizgi < 200))
    {
      analogWrite(motorhiz, 80);
      digitalWrite(SolMotorileri, HIGH);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, HIGH);
      digitalWrite(SagMotorGeri, LOW);
      digitalWrite(solled, HIGH);
      digitalWrite(sagled, HIGH);

    }
    if ((solcizgi > 200) && (sagcizgi < 200))
    {
      analogWrite(motorhiz, 80);
      digitalWrite(SolMotorileri, LOW);
      digitalWrite(SolMotorGeri, HIGH);
      digitalWrite(SagMotorileri, HIGH);
      digitalWrite(SagMotorGeri, LOW);
      digitalWrite(solled, LOW);
      digitalWrite(sagled, HIGH);
     
    }
    if ((solcizgi < 200) && (sagcizgi > 200))
    {
      analogWrite(motorhiz, 80);
      digitalWrite(SolMotorileri, HIGH);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, LOW);
      digitalWrite(SagMotorGeri, HIGH);
      digitalWrite(solled, HIGH);
      digitalWrite(sagled, LOW);

    }
    if ((solcizgi > 200) && (sagcizgi > 200))
    {
      analogWrite(motorhiz, 80);
      digitalWrite(SolMotorileri, LOW);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, LOW);
      digitalWrite(SagMotorGeri, LOW);
      digitalWrite(sagled, HIGH);
      digitalWrite(solled, HIGH);
      digitalWrite(buzzer, HIGH);
      delay (50);
      digitalWrite(sagled, LOW);
      digitalWrite(solled, LOW);
      digitalWrite(buzzer, LOW);
      delay (50);
    }
       digitalWrite(trig , HIGH);
    delayMicroseconds(1000);
    digitalWrite(trig , LOW);
    sure = pulseIn(echo , HIGH);
    mesafe = (sure / 2) / 28.5 ;
    if ( (mesafe == (son - ilk + 4) ) || (mesafe == 4)) // ilk kapı önünde

    {
      Serial.print("1 sn beklemede  ilk kapi");
      digitalWrite(SolMotorileri, LOW);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, LOW);
      digitalWrite(SagMotorGeri, LOW);
      delay (1000);
      while (mesafe <= 5 )// bariyer kapalı

      { Serial.print("bariyer kapali ");
        digitalWrite(SolMotorileri, LOW);
        digitalWrite(SolMotorGeri, LOW);
        digitalWrite(SagMotorileri, LOW);
        digitalWrite(SagMotorGeri, LOW);
        Serial.println("gecmeyi bekliyor");
        digitalWrite(trig , HIGH);
        delayMicroseconds(1000);
        digitalWrite(trig , LOW);
        sure = pulseIn(echo , HIGH);
        mesafe = (sure / 2) / 28.5 ;
        Serial.print("mesafe 5 ve 5  ten büyük olacak =");
        Serial.println(mesafe);
      }
      while (mesafe > 5) // bariyer açık ilk açık durum
      {
        Serial.print("bariyer acik------------------");
        digitalWrite(SolMotorileri, LOW);
        digitalWrite(SolMotorGeri, LOW);
        digitalWrite(SagMotorileri, LOW);
        digitalWrite(SagMotorGeri, LOW);
        digitalWrite(trig , HIGH);
        delayMicroseconds(1000);
        digitalWrite(trig , LOW);
        sure = pulseIn(echo , HIGH);
        mesafe = (sure / 2) / 28.5 ;
      }

      while (mesafe <= 5 )  // bariyer kapalı

      { Serial.print("bariyer kapandi ");
        digitalWrite(SolMotorileri, LOW);
        digitalWrite(SolMotorGeri, LOW);
        digitalWrite(SagMotorileri, LOW);
        digitalWrite(SagMotorGeri, LOW);
        Serial.println("gecmeyi bekliyor");
        digitalWrite(trig , HIGH);
        delayMicroseconds(1000);
        digitalWrite(trig , LOW);
        sure = pulseIn(echo , HIGH);
        mesafe = (sure / 2) / 28.5 ;
        Serial.print("mesafe 5 ten büyük olacak =");
        Serial.println(mesafe);
      }

      if (mesafe > 5)
      { digitalWrite(trig , HIGH);
        delayMicroseconds(1000);
        digitalWrite(trig , LOW);
        sure = pulseIn(echo , HIGH);
        mesafe = (sure / 2) / 28.5 ;
        Serial.print("bariyer acik gecti =");
        Serial.println(mesafe);
        //___________________________________________________________-
          for (a =0; a < 500; a++)
  {

    
      if ((solcizgi < 200) && (sagcizgi < 200))
    {
      analogWrite(motorhiz, 255);
      digitalWrite(SolMotorileri, HIGH);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, HIGH);
      digitalWrite(SagMotorGeri, LOW);
      digitalWrite(solled, HIGH);
      digitalWrite(sagled, HIGH);
delay(1);
    }
    if ((solcizgi > 200) && (sagcizgi < 200))
    {
      analogWrite(motorhiz, 255);
      digitalWrite(SolMotorileri, LOW);
      digitalWrite(SolMotorGeri, HIGH);
      digitalWrite(SagMotorileri, HIGH);
      digitalWrite(SagMotorGeri, LOW);
      digitalWrite(solled, LOW);
      digitalWrite(sagled, HIGH);
   delay(1);  
    }
    if ((solcizgi < 200) && (sagcizgi > 200))
    {
      analogWrite(motorhiz, 255);
      digitalWrite(SolMotorileri, HIGH);
      digitalWrite(SolMotorGeri, LOW);
      digitalWrite(SagMotorileri, LOW);
      digitalWrite(SagMotorGeri, HIGH);
      digitalWrite(solled, HIGH);
      digitalWrite(sagled, LOW);
delay(1);
    }
        }
    }
    }


  //--------------------------------------------------------------------------------------------------------------
   

  }

  
  










Sosyal Medyada Paylaş Facebook Twitter Google+

Etiketler: , , , ,
Eklenme Tarihi: 22 Eylül 2017

Konu hakkında yorumunuzu yazın