ENGELLERE ÇARPMAYAN ROBOT


ENGELLERE ÇARPMAYAN ROBOT (TÜBİTAK OKUL PROJESİ)

















Üstten görünüm


Bu projede 2 adet MZ-80 kızılötesi sensör, HC-SR04 ultrasonik sensör, servo motor, L298 motor sürücü devresi, 11,1 V Li-Po pil, robot kit kullanıldı.


ROBOT KİT: ENGEL YAZILIMI
// Yazılım Geliştirme By Robimek - 2015
//Düzenleme&Geliştirme: Aytekin TUZLALI - 2017
#include <Servo.h>// servo motor kütüphanesi
#include <NewPing.h>
//motor pinleri
#define SolMotorileri 6
#define SolMotorGeri 7
#define SagMotorileri 8
#define SagMotorGeri 9
//sensör pinleri
#define USTrigger 4
#define USEcho 5
#define Maksimum_uzaklik 400
Servo servo; //servo motor tanımlama
NewPing sonar(USTrigger, USEcho, Maksimum_uzaklik);//ultrasonik sensör tanımlama
//kullanılacak eleman tanımı
unsigned int uzaklik;
unsigned int on_uzaklik;
unsigned int sol_uzaklik;
unsigned int sag_uzaklik;
unsigned int zaman;
// program ilk çalıştığında sadece bir kez çalışacak programlar
void setup()
{
  Serial.begin(9600);
  //motor çıkışları
  pinMode(SolMotorileri, OUTPUT);
  pinMode(SolMotorGeri, OUTPUT);
  pinMode(SagMotorileri, OUTPUT);
  pinMode(SagMotorGeri, OUTPUT);
  servo.attach(10); //servo pin tanımı
}
// sonsuz döngü
void loop()
{
  Serial.println(uzaklik);
  Serial.println(on_uzaklik);
  Serial.println(sol_uzaklik);
  Serial.println(sag_uzaklik);
  Serial.println(zaman);
  Serial.println("------------------------------");
  delay(300);
  servo.write(90);
  sensor_olcum();
  on_uzaklik = uzaklik;
  if (on_uzaklik > 45)  // || on_uzaklik == 0)
  {
    ileri();
  }
  else    {
    dur();
    servo.write(180);
    delay(500);
    sensor_olcum();
    sol_uzaklik = uzaklik;
    servo.write(0);
    delay(500);
    sensor_olcum();
    sag_uzaklik = uzaklik;
    servo.write(90);
    delay(500);
    if (sag_uzaklik < sol_uzaklik)    {
      geri();
      delay(400);
      sol();
      delay(140);
      ileri();
    }
    else if (sol_uzaklik < sag_uzaklik)    {
      geri();
      delay(400);
      sag();
      delay(140);
      ileri();
    }
    else    {
      geri();
      delay(500);
    }
  }
}
// robotun yön komutları
void ileri()
{
  digitalWrite(SolMotorileri, HIGH);
  digitalWrite(SolMotorGeri, LOW);
  digitalWrite(SagMotorileri, HIGH);
  digitalWrite(SagMotorGeri, LOW);
}
void geri()
{
  digitalWrite(SolMotorileri, LOW);
  digitalWrite(SolMotorGeri, HIGH);
  digitalWrite(SagMotorileri, LOW);
  digitalWrite(SagMotorGeri, HIGH);
}
void sol()
{
  digitalWrite(SolMotorileri, LOW);
  digitalWrite(SolMotorGeri, HIGH);
  digitalWrite(SagMotorileri, HIGH);
  digitalWrite(SagMotorGeri, LOW);
}
void sag()
{
  digitalWrite(SolMotorileri, HIGH);
  digitalWrite(SolMotorGeri, LOW);
  digitalWrite(SagMotorileri, LOW);
  digitalWrite(SagMotorGeri, HIGH);
}
void dur()
{
  digitalWrite(SolMotorGeri, LOW);
  digitalWrite(SolMotorileri, LOW);
  digitalWrite(SagMotorileri, LOW);
  digitalWrite(SagMotorGeri, LOW);
}
// sensörün mesafe ölçümü
void sensor_olcum()
{
  delay(50);
  zaman = sonar.ping();
  uzaklik = zaman / US_ROUNDTRIP_CM;
}

Hiç yorum yok:

Yorum Gönder