Arduino
OKUDUĞUNUZ KONU
Basit Hızlı Çizgi İzleyen Robot Nasıl Yapılır
8

Basit Hızlı Çizgi İzleyen Robot Nasıl Yapılır

Yazar : hasanbozdag24 Mayıs 2016

Merhaba arkadaşlar bu yazımızda Hızlı Çizgi İzleyen Robot projesini inceleyeceğiz bildiğiniz üzere bu sene onuncusu düzenlenen uluslararası meb robot yarışmasında yeni bir kategori olarak açılan Hızlı Çizgi İzleyen Robot aynı zaman en çok ilgi göre kategorilerden biri oldu.1609 Robotun katıldığı Belkıs-Zeugma temalı onuncu uluslararası meb robot yarışmasında 316 robot Hızlı Çizgi İzleyen kategorisinde mücadele etti.

İsterseniz gelin bu kategoride mücadele etmenin kurallarına değinelim biraz.Öncelikle yarışacağınız pist siyah zemin üzerinde beyaz çizgi şeklindedir mücadele alanı ise 1500mm genişliğinde,20000mm uzunluğundadır her bir robot için 300mm genişliğinde yolun tam ortasında düz beyaz bir çizgi bulunmaktadır başlangıç çizgisi ise pist başlangıcından 500mm içeridedir.Bu kategorideki esas amaç 5’erli grup yarışlarından birinci gelerek final yarışına kadar yükselmektir ancak bu sanıldığı kadar basit değildir öncelikle bu yarışlarda yer alabilmek için robotunuzun 120×160 mm boyutlarını ve 50 mm yükseklik sınırını aşmaması gerekmektedir.Şimdi gelin Hızlı Çizgi İzleyen robot basitçe nasıl yapılır bundan bahsedelim işi temelden alacak olursak aşağıdaki malzemeler işimizi görecektir.

  • Arduino Uno
  • Adafruit Motor Sürücü
  • QTR 8A
  • Sarhoş Tekerlek
  • 120x160mm Şase
  • Mz80
  • Güç Kaynağı(Pil)
  • Mikro DC Motor 3000Rpm daha yüksek hız isteniyorsa Fırçasız Dc motorları araştırınız ancak hız arttıkça kontrol zorlaşacaktır ve bunun için yazılımınızı daha iyi yapmanız gerekir.

Robotun montajlı hali aşağıdaki gibidir.

Yukarıda görseli verilen robot üzerinde 2000 rpm keskinler mikro dc motor bulunmaktadır.Yapılan robot hızlı çizgi izleyenin sadece temelini anlatmak amacıyla yapılmıştır eğer yarışmalara katılmayı düşünüyorsanız bu temel üzerinden daha kaliteli bir donanım ile yarışmaya katılmanız gerekmektedir.

QTR ve MZ80 Bağlantısı

QTR 8A Adafruit Motor Sürücü üzerinde bulunan arduinonun analog pinlerine bağlanmaktadır bu projede QTR’nin 6 sensörünü kullanmaktayız MZ80 ise sürücü üzerinde bulunan ve tek boş pin olan ikinci pine bağlanmaktadır.Sizlere geliştirmeye açık 2 adet PD kontrollü yazılım sunmaktayız kendi donanımınıza göre veya yaptığınız robota göre yazılımı düzenleyebilirsiniz.


#include <QTRSensors.h>

#include <AFMotor.h>

AF_DCMotor solmotor(2,MOTOR12_8KHZ);
AF_DCMotor sagmotor(3,MOTOR12_8KHZ);

#define m1_hiz 10
#define m2_hiz 10

#define NUM_SENSORS 6
#define NUM_SAMPLES_PER_SENSOR 4
#define EMITTER_PIN 2

#define kp 1
#define kd 2.50

int hata=0;
int oncekihata=0;

QTRSensorsAnalog qtra((unsigned char[]) {0, 1, 2, 3, 4, 5},
NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];

void setup() {

delay(200);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
for (int i = 0; i < 400; i++) 
{ qtra.calibrate(); } 
digitalWrite(13, LOW); } 
void loop() { 
unsigned int sensorler[6]; 
int position = qtra.readLine(sensorler,QTR_EMITTERS_ON,1); 
int hata=position-2500; 
int hizim=kp*hata+kd*(hata-oncekihata); 
oncekihata=hata; 
int solmotorhiz=m1_hiz+hizim; 
int sagmotorhiz=m1_hiz-hizim; 
if(solmotorhiz>m1_hiz)solmotorhiz=m1_hiz;

if(sagmotorhiz>m2_hiz)sagmotorhiz=m2_hiz;

solmotor.run(FORWARD);
solmotor.setSpeed(solmotorhiz);
sagmotor.run(FORWARD);
sagmotor.setSpeed(sagmotorhiz);

}

#include <AFMotor.h>

AF_DCMotor motor2pin(2,MOTOR12_8KHZ);
AF_DCMotor motor3pin(3,MOTOR12_8KHZ);

#define ref 35 //referans 3.50
#define Kp 4
#define Kd 5
#define ham 50
#define Speed 50

int hata = 0;
int oncekiHata = 0;
int hiz = 0;
int turev = 0;
int pwm_sag = 70;
int pwm_sol = 70;
int konum=0;

int say=0;
int oku1,oku2,oku3,oku4,oku5,oku6;
int ledon=2;

void setup() {

Serial.begin(9600);
pinMode(ledon, OUTPUT);
analogWrite (ledon,255);

}

void loop() {

oku1 = analogRead(A0);
oku2 = analogRead(A1);
oku3 = analogRead(A2);
oku4 = analogRead(A3);
oku5 = analogRead(A4);
oku6 = analogRead(A5);

if(oku1 < ham){ say++; konum+=0; }
if(oku2 < ham){ say++; konum+=10; }
if(oku3 < ham){ say++; konum+=20; }
if(oku4 < ham){ say++; konum+=30; }
if(oku5 < ham){ say++; konum+=40; }
if(oku6 < ham){ say++; konum+=50; } 
if(say==0){ konum=0; } 
else { konum=konum/say;} 
oncekiHata = hata; 
hata = ref - konum; // yoldan ne kadar saptığımızı görmek için 35 yani referanstan şuanki konumu çıkardık. 
pwm_sol = Speed - (Kp * hata + Kd *(hata - oncekiHata)); // sol motorun pwm hesabını yaptık, kp*hata hizimizi veriyor, kd*turev ani yoldan çıkma işlemimiz 
pwm_sag = Speed + (Kp * hata + Kd *(hata - oncekiHata)); // sağ motorun pwm hesabını yaptık, kp*hata hizimizi veriyor, kd*turev ani yoldan çıkma işlemimiz 
if (pwm_sol > 245 ) pwm_sol = 250; //sağ motorun kısıtlamalarını yapıyoruz, eğer büyükse kısıtladığımız değere eşitliyoruz.
if (pwm_sag > 245 ) pwm_sag = 250; //Sol motorun kısıtlamalarını yapıyoruz, eğer büyükse kısıtladığımız değere eşitliyoruz.
if (pwm_sol < 10) pwm_sol = 10; //sağ motorun kısıtlamalarını yapıyoruz, eğer 0 dan küçükse 0 a eşitliyoruz.
if (pwm_sag < 10) pwm_sag = 10; //sol motorun kısıtlamalarını yapıyoruz, eğer 0 dan küçükse 0 a eşitliyoruz

motor2pin.setSpeed(pwm_sol);
motor3pin.setSpeed(pwm_sag);
motor2pin.run(FORWARD);
motor3pin.run(FORWARD);
konum=0;say=0;

}
SİZCE NASIL OLMUŞ?
Beğendim
79%
İlginç
2%
Eh İşte
2%
Anlamadım
10%
Kötü
0%
Berbat
6%
YAZAR HAKKINDA
hasanbozdag
hasanbozdag
İstanbul Bağcılarda doğdum memleketim ankara 18 yaşındayım Çanakkale 18 Mart Üniversitesinde Mekatronik okuyorum.
8 YORUMLAR
  • ibrahim kılıç
    26 Mayıs 2016 at 16:03

    mz80 durdurmak için değil mi?

  • ibrahim kılıç
    26 Mayıs 2016 at 16:04

    fritzing şemasını paylaşabilir misin_?

  • hasanbozdag
    hasanbozdag
    26 Mayıs 2016 at 23:07

    Evet Mz80 durdurmak için ancak yukarıda verilen yazılımda kullanılmadı ancak yarışmaya katılan robotlarda bulunmak zorunda.
    Fritzing kullanmıyorum ancak şema gerektirecek pekte bir durum yok Adafruit motor sürücüyü Arduino üzerine geçirdikten sonra Motor sürücü üzerindeki analog pinlere 6 adet QTR sensörü bağlayınız ve 2 numaralı pine mz80 sensörünü bağlayınız eğer halledemesseniz https://www.facebook.com/hsnbzdg buradan benimle iletişime geçerseniz daha detaylı yardımcı olurum 🙂

  • 12 Haziran 2016 at 17:48

    merhaba. hayirli isler dilerim. size elin koluna. saglik. harika calisiyor. hayri ramazanlar. dilerim. size.
    allaha emanet olun. boll kazanclar. dilerim. size

  • 10 Temmuz 2016 at 14:55

    merhaba. hayirli. islerdilerim. size. ogun. 2 kodu degerlendirdim. calisti. simdi. 2 kodu . degerlendirdim. QTR sensör. inculede(AFmotor.
    calismiyor. libererdemi. kaynakliyor. bu konudan. bilgi. almak. istiyorum. ne yapmam. gerekli. tesekkurler. allaha emanet olun

  • 10 Temmuz 2016 at 15:37

    merhaba. hayirli isler. dilerim. size hatayi. buldum. sag olun. allaha emanet olun

  • yusuf
    4 Şubat 2017 at 16:01

    merhaba
    ben malzemeleri temin ettim motorları vs. montajlarını yaptım şaseye fakat bağlantıları yapamadım adafruite lehimleyerekmi yapıcaz nerelere lehimlicez yardım edermisiniz?

  • erol
    9 Şubat 2017 at 12:45

    MOTOR12_8KHZ bu tam olarak nedir

YORUM YAP