Çizgi İzleyen robot tasarımı - selcuk.edu.tr · 1. uygulamanın İçeriği uygulama kapsamında...

16
04.08.2014 Hazırlayan: Araş. Gör. Okan UYAR Teknoloji Fakültesi Çizgi İzleyen Robot Tasarımı

Upload: nguyendiep

Post on 12-Sep-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

04.08.2014

Hazırlayan: Araş. Gör. Okan UYAR

Teknoloji Fakültesi

Çizgi İzleyen Robot Tasarımı

İçindekiler 1. Uygulamanın İçeriği ......................................................................................................................... 1

2. Uygulamanın Hedefi ........................................................................................................................ 1

3. Ön Bilgi ............................................................................................................................................ 1

3.1. Çalışma Prensibi ...................................................................................................................... 1

3.2. Motor Sürücü .......................................................................................................................... 2

3.3. Sensör ...................................................................................................................................... 4

3.4. Regülatör ................................................................................................................................. 5

3.5. Mikrodenetleyici ...................................................................................................................... 6

3.6. Mekanik, Motor ve Tekerler .................................................................................................... 7

4. Devre Şemaları ve Baskı Devreleri ................................................................................................... 9

4.1. Ana Devre ................................................................................................................................ 9

4.2. Sensör Kiti .............................................................................................................................. 11

4.3. Motor Sürücü ........................................................................................................................ 12

........................................................................................................................................................... 12

5. Programlama ................................................................................................................................. 13

1. Uygulamanın İçeriği Uygulama kapsamında birçok eleman kullanarak oluşturulan pistte çizgiyi takip edebilecek bir

Çizgi İzleyen Robot yapılacaktır. Uygulama kapsamında baskı devre tasarımı ve gerçekleştirilmesi,

devre elemanı lehimleme, mikrodenetleyici programlama, mekanik tasarım ve işleme, test ve

deneme aşamaları gerçekleştirilecektir.

2. Uygulamanın Hedefi Uygulama sonunda öğrencilerin aşağıdaki konularda farkındalığı sağlanacaktır:

Elektronik devrenin çizimi, benzetimi ve baskı devre tasarımı

DC motor sürücü, kontrast algılama ve temel mikro denetleyici devreleri

Çizgi izleyen robotun mekanik tasarımı

Çizgi izleyen robot program algoritması

3. Ön Bilgi Çizgi izleyen robot adından da anlaşılabileceği gibi bir zemin üzerinde oluşturulmuş çizgi

şeklindeki yolu otonom(öz denetimli) olarak izleyen robotlardır. Bu amaçla kullanılabilecek

sensörlerin kontrastı yani koyu ve açık renk ayrımı yapabilmesi nedeniyle siyah zemin üstünde beyaz

çizgi yada beyaz zemin üzerinde siyah çizgi bulunan yollar bu robotlar için tercih edilir.

3.1. Çalışma Prensibi

4

Robotun çalışma prensibi, çizgiyi ortadaki algılayıcıda tutarak ilerlemesine dayanmaktadır.

Robot kısa aralıklarla algılayıcının durumunu kontrol ederek çizgiye göre konumunu belirler. Bunun

için tasarım fikrine bağlı olarak belli sayıda ve belli aralıklarla ve yerleşim şekli ile çizgi algılama

sensörleri kullanılır ve motorlar buradan gelen bilgilere göre kontrol edilir.

Robot ilerlerken, çizgi robotun sağ tarafına gelirse, 3 nolu algılayıcı çizgiyi görecektir. Böylece

robot çizginin sol tarafında olduğunu anlayacak ve programı içinde belirtilen sağa dönüşkomutunu

uygulayacaktır.

Dönme işlemi, ortadaki algılayıcının çizgiyi tekrar görmesine kadar devam eder. Bu algılayıcı

çizgiyi gördüğünde, robot tekrar düz hareket etmeye başlar.

Eğer, çizgi robotun sol tarafına gelirse, aynı işlemler bu taraf için tekrarlanır ve böylelikle çizgi

izleme işlemi yerine getirilir.

3.2. Motor Sürücü Robotlarımızda genellikle 6-12V’ luk elektrik motoru(DC motor) kullanıyoruz. Hız gerektiren

projelerde(çizgi izleyen robot) genelde yüksek devirli düşük torklu motor kullanılır, tork gerektiren

projelerde(sumo robot, mini sumo robot gibi) ise düşük devirli yüksek torklu motor kullanılır. Bu

motorlarda çekilen akım motorun boyutlarına ve özelliklerine göre değişir. Örnek verecek olursak bir

motor boşta dönerken 30mA akım çeker, yükte ise bu 700mA çekebilir veya daha fazla. Örneğin sumo

robotlarda kullanılan çoğu motor zorlanma anında 10 A kadar akım çekebilir. Motorları sürmek için

çok akım gerekir, ancak biz motorları kontrol etmek için PIC kullandığımız için, PIC çıkışlarına

maksimum 25mA ve 5V verebildiği için direkt PIC çıkışıyla motor süremeyiz. İşte bu yüzden PIC den

gelen düşük gerilim ve akımı kuvvetlendirmek için motor sürücü devreleri kullanıyoruz. Kullanım

amacına göre tek yönde ve sabit hızda sürme devreleri olduğu gibi çift yönde ve değişken hızda

motor sürmemizi sağlayan devre topolojileri de vardır.

PIC ile motor sürmek için, PICten gelen sinyali güçlendirip motorlara iletmemiz gerekir. Bunu

yapmak için de transistör ve türevleri(FET-JFET-MOSFET) ve motor sürücü entegreleri kullanıyoruz.

Eğer tek bir transistör kullanırsak, motoru sadece tek yönde çalıştırabiliyoruz. Motoru 2 yöne de

döndürmek istersek, 4 adet transistörleyukarıdaki resimde gösterilen “H köprüsü” kurup motorları

sürebiliriz. Motor sürücü entegrelerinin içinde genellikle 2 adet H köprüsü vardır ve böylece tek bir

motor sürücü entegresiyle 2 adet motoru birbirinden bağımsız ve iki yönlü sürebiliriz.

Aşağıda, robot projelerinde sıkça kullanılan entegrelerin resimleri ve önemli özellikleri

verilmiştir.

L298N

Çalışma Gerilimi: 7,5-46V Kanal Başına Akım: 2A Frekans: 40 KHz Aşırı sıcaklıkta kapama

L293D

Çalışma Gerilimi: 4,5-36V Kanal Başına Akım: 600mA Frekans: ~10 KHz Dahili Kenetleme Diyotu Dahili ESD Koruma Aşırı sıcaklıkta kapama

L6207N

Çalışma Gerilimi: 8-52V Kanal Başına Akım: 2,8A Frekans: 100 KHz RDSon=0,3 Ohm Dahili Serbest Geçiş Diyotu Aşırı sıcaklıkta kapama

TB6612FNG

Çalışma Gerilimi: 15V Kanal Başına Akım: 1,2A Frekans: 100 KHz RDSon=0,5Ohm Aşırı sıcaklıkta kapama

Çalışma kapsamında L298N sürücüsünü kullanacağız.

Bu entegre de toplam 15 adet bacak bulunmaktadır. Bunlardan IN1, IN2, OUT1, OUT2, ENA,

SENSA A köprüsü için, IN3, IN4, OUT3, OUT4, ENB, SENSB B köprüsü içindir.

IN1,IN2(5,7): Bu bacaklar A köprüsü için olan girişlerdir. +5 volt ile çalışır.

Eğer IN1’e 5V, IN2’ye 0V verince motor ileri dönerse, tam tersini verdiğimizde geri

dönecektir. Her iki bacağa da aynı değeri verirsek (0V-0V veya 5V-5V) motor dönmez.

IN3,IN4(10,12): Bu bacaklar B köprüsü için olan girişlerdir. A köprüsüyle aynı şekilde çalışır.

OUT1,OUT2(2,3):A köprüsü için çıkış bacaklarıdır. Bu çıkışları motorun iki ucuna

bağlanacaktır. Motorların herhangi bir zorlanma durumunda oluşacak olan ters akımın entegreye

zarar vermemesi için çıkışlar ile motor arasına ikişer adet diyot bağlanmalıdır. Bu diyotların birisinin

yönü topraktan çıkışa doğru, diğeri de çıkıştan VS’ ye doğru olmalıdır.

OUT3,OUT4(13,14): B köprüsü için çıkış bacaklarıdır. A köprüsüyle aynı şekilde çalışır.

ENA,ENB(6,11): A ve B köprülerini etkinleştirmek için bu bacaklara +5 volt bağlamak

gerekmektedir. Eğer bu uçlara mikrodenetleyiciden PWM sinyali verilirse motorun hızı kontrol

edilebilir.

SENSA,SENSB(1,15): A ve B köprülerinin çalışması için bu bacaklar toprağa çekilmelidir. Bu

bacaklarla toprak arasına bağlayacağımız 0,47 Ohm/2 W değerinde direnç ile çıkış akımını kontrol

edebiliriz, fakat direnç bağlamadan da çalışır.

VS(4): Çıkışlardan kaç volt almak istiyorsak bu bacağı o voltaja bağlıyoruz. En fazla 46 volt

verebiliriz, biz genelde 12 volt kullanıyoruz. Ayrıca DC üzerindeki küçük salınımları yok etmek için bu

bacakla toprak arasına 100nF’ lık kondansatör bağlanmalıdır.

VSS(9): Bu bacak, L298’ in çalışması için +5 volta bağlanmalıdır. Yine küçük salınımları yok

etmek için VSS ile toprak arasına 100nF’lık kondansatör bağlanmalıdır.

GND(8): Bu bacak, L298’ in çalışması için toprağa bağlanmalıdır.

3.3. Sensör Çizgiyi algılamak için kızılötesi led ve optik olarak

iletime geçen bir transistör barındıran sensörler

kullanılmaktadır. Kızılötesi ledden yansıyan ışınlar

siyah zeminden az beyaz zeminden çok yansıdığı

için sensör içindeki elektronik anahtar(transistör)

yansıyan bu ışına göre iletime veya kesime giderek

bize çizgi hakkında bilgi vermektedir. Buradan

gelen bilgi mikrodenetleyici ile değerlendirilerek

motorların kontrolü sağlanmakta ve robot

yönlendirilmektedir.

Bahsedilen amaçla kullanılan bazı sensörler şunlardır: QRD1114, CNY70, SFH9241, QTR-8A

Çizgi izleyen robotta kullanılan sensörler genellikle 3mm lik bir yükseklikten çizgiyi

algılayabilmektedir. Robot mekaniği tasarlanırken bu konuya da dikkat edilmelidir. Buna ek olarak,

kullanılacak sensör sayısı, sensörler arasındaki mesafe ve sensörlerin yerleşim şekli de robotun

tasarımında önemli konulardır. Çizgi kalınlığı 2cm olduğu için sensörler arasında genelde 2cm aralık

bırakılır. Çok yakın şekilde yerleştirilmiş sensörlerin gönderdiği sinyaller birbirini etkileyecektir.

Sensör bağlantısı aşağıdaki gibi yapılmalıdır.

R1 direnci 100 – 220 ohm arasında bir değerde

olabilir. R2 direnci ise 10K seçilmelidir. R1 direncine göre

sensör içindeki kızılötesi ledin ışık şiddeti ayarlanabilir. Bu

ayarlama, sensörün yerden yüksekliğine göre yapılmalıdır.

Maksimum parlaklık için 50 mA değerini geçmeyecek bir

direnç bağlanmalıdır. R2 direnci ise yansıma olmadığı

zaman sensör çıkışının 5V da kalmasını, yansıma olduğunda

ise 0V çıkış vermesini sağlamaktadır. Işık şiddetine göre

Vout ucundan alınan gerilim sayısal bilgi oluşturacak kadar

düzgün çıkmadığı için sensörün çıkışına 74HC14 isimli

içinde 6 adet karşılaştırıcı bulunan bir entegre

kullanılmaktadır. Ayrıntıları devre şemalarında görülebilir.

3.4. Regülatör Robotumuzda motor sürmek için 7,4V veya 11,1V gibi bataryalara ihtiyaç duyulmaktadır. Aynı

besleme kaynağı ile elektronik kontrol devresini de sürmemiz gerektiğinden ve bu devrelerin 5V

ile çalışmasından dolayı bir gerilim düzenleyiciye ihtiyaç duyulmaktadır.

Yukarıda bahsedilen amaçla kullanılabilecek bazı regülatörler şöyledir: 7805, LM2576-5,

LM1117-5, LT123A, LT1076-5. Bunlardan en sık kullanılanları 7805 ve LM2576 dır. Bilgi

sayfalarında daha yüksek değerler yazılsa da 7805 girişine uygulanan 0-15 V u 5V seviyesine

düşürürken çıkışına 500mA akım çeken bir yük bağlanabilir. Bu sınırların dışında entegre aşırı

ısınmakta ve kararlı çalışmamaktadır. LM2576 entegresi ise 0-30 V giriş gerilimine ve 3A lik çıkış

yüküne uygun yapıdadır ancak 7805 e göre daha fazla ek devre elemanı gerektirmektedir.

Motordan dolayı ani olarak fazla akım çekme durumlarında PIC mikrodenetleyicisi

resetlenebilmektedir. LM2576 entegresinin yapısından dolayı bu problem daha az yaşandığı için

bu entegre kullanılacaktır. Devre şeması aşağıda verilmiştir.

3.5. Mikrodenetleyici Bir mikrodenetleyici (MCU ve µC olarak da adlandırılır), bir mikroişlemcinin, merkezi işlem

birimi(CPU), hafıza ve giriş - çıkışlar, kristal osilatör, zamanlayıcılar (timers), seri ve analog giriş

çıkışlar, programlanabilir hafıza (NOR Flash, OTP ROM) gibi bileşenlerle tek bir tümleşik devre

üzerinde üretilmiş halidir. Kısıtlı miktarda olmakla birlikte, yeterince hafıza birimlerine ve giriş – çıkış

uçlarına sahip olmaları sayesinde tek başlarına çalışabildikleri gibi, donanımı oluşturan diğer

elektronik devrelerle irtibat kurabilir, uygulamanın gerektirdiği fonksiyonları gerçekleştirebilirler.

Üzerlerinde analog-dijital çevirici gibi tümleşik devreler barındırmaları sayesinde algılayıcılardan her

türlü verinin toplanması ve işlenmesinde kullanılabilmektedirler. Ufak ve düşük maliyetli olmaları

gömülü uygulamalarda tercih edilmelerini sağlamaktadır.

Piyasada Microchip, Atmel, Motorola, Intel, Zilog, Infineon, ST gibi firmaların ürettiği

mikrodenetleyiciler vardır. Bu firmaların arasındaki Mikrochip’in üretmiş olduğu PIC

mikrodenetleyicileri, en çok kullanılan mikrodenetleyicilerdendir. Çok sayıda örnek uygulama ve

doküman bulunması, birçok derleyici seçeneğinin olması bunun temel sebepleridir.

PIC mikrodenetleyicinin çalışması için gereken temel şema Reset devresi ve Osilatör

devresinden oluşmaktadır. Osilatör devresinde Kristal ve seçilen frekansa göre 22pF – 68 pF arasında

bir değerde kondansatör seçilir. Rs direnci kullanımı zorunlu değildir.

3.6. Mekanik, Motor ve Tekerler Robotun gövdesi için birçok farklı tasarım yapılabilir. Hazır gövdeler de kullanabilirsiniz

(örneğin oyuncak araba gövdeleri), ya da pleksiglas, sert plastik malzemeler kullanarak da

robotunuzun gövdesini hazırlayabilirsiniz. Bu tip malzemeler kullanarak istediğiniz tasarımları daha

kolay gerçekleştirebilirsiniz. Gövde malzeme seçerken fazla ağır olmamasına ve işlenmesinin kolay

olmasına dikkat edilmelidir.

Çizgi izleyen robot projelerinde en çok tercih edilen sürüş sistemi diferansiyel sürüş

sistemidir. Bu sistemde robotun sağında ve solunda birbirinden bağımsız motorlar ve bunlara bağlı

tekerlekler bulunur. Genellikle maliyet açısından sağ ve solda birer motor ve birer tekerlek kullanılır.

Bu şekildeki kullanımlarda robotun daha rahat hareketi ve dönüşleri için robotta kullanılan gövdenin

durumuna göre önde ve/veya arkada sarhoş tekerlek ya da bilye tekerlek (roll-on tekerlek) kullanılır.

Diferansiyel sürüş sisteminde robotun dönüşü birbirinden bağımsız çalışan iki motorun

arasındaki hız farkıyla sağlanır. Aşağıdaki şemada diferansiyel sürüş sisteminin çalışması

gösterilmiştir.

Mekanik tasarlanırken tekerler aynı oranda ve yeterince yere basmalı. Robotun ağırlığı ve

tekerleklerin sürtünme oranı da hassas bir noktadır çünkü bu seçimler robotun patinaj atarak enerji-

zaman-kontrol kaybına ya da aşırı sürtünmeden hız kaybetmesine neden olabilir. Robotun üzerine

koyulan batarya ve diğer elemanların ağırlık merkezinin düzenli olması dengeli bir hareket

sağlayacaktır.

Robotun yere bastığı noktaların ve motorlar arasındaki mesafe de manevra kabiliyeti

açısından önemlidir. Yarışma pisti çok sık sinüzoidal dönüşler içeriyorsa robot boyunun çok uzun

olmaması gerekir. Eğer daha çok düz yollar var ise robot da uzun yapılabilir. Arka tekerler arasındaki

mesafe az olursa manevra kabiliyeti azalır, fazla olursa da çizgi sensörleri harekete

yetişemeyeceğinden robot çizgi etrafında yalpalayarak gider. En:1 / Boy: 1,15 oranı ideal olmaktadır.

Kullanacağımız motorların 1000 ila 1500 devir arasında olması robotumuzun saniyede 2

metreden daha fazla yol kat etmesi için yeterlidir. Bu hızla gidebilmek tekerlek seçimi şöyle

yapılmalıdır:

Tekerin çevresi 2 п r dir.

Motorların hızı devir/dakika (RPM) olarak birimlendirilir. Bu yüzden devir/saniyeye çevirmek

lazım. 1000 devir/dakika ise 1000/60=16,6 devir/saniye yapar.

Tekerimizin çapı 3cm ise 2 x п r D= X 2x3,14x1,5x16,6=156,372 cm

Eğer robotta hiçbir kayıp olmazsa saniyede 1 metre 56 cm gidebilir.

Tekerin çapı ile bu değeri değiştirebiliriz. Ancak unutulmamalıdır ki eğer motorunuzun torku

(santimetre başına düşen kaldırma kuvveti cm/kg) düşükse, tekerin çapı arttıkça torkunuz da

düşecektir. Robotunuzu daha rahat kontrol edebilmek için mümkün oldukça tekerin çapını küçük

tutun. Çünkü motorun hızını değiştirirken tekerin çapı 3 cm ise her 9.42 cm’de bir hızınızın değişimi

robot üzerinde fark edilecektir. 6 cm ise 18,84 cm’de bir hızınızın değişimi robot üzerinde fark

edilecektir. Tekerin genişliği ise çok ince olursa patinaj atacaktır ve kontrolü zorlaştıracaktır.

Gereğinden fazla olursa da sürtünme artacağından hız ve enerji kaybı olacağından piyasada bulunan

tekerlerden en uygun olanı denemeler sonrasında seçilmelidir.

4. Devre Şemaları ve Baskı Devreleri

4.1. Ana Devre

4.2. Sensör Kiti

4.3. Motor Sürücü

5. Programlama

#include <18f252.h> #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,PUT,NOWRT,NODEBUG,NOCPD #use delay (clock=8000000) #define s1 pin_b4 // ensag #define s2 pin_b3 // sag #define s3 pin_b0 // orta #define s4 pin_b1 // sol #define s5 pin_b2 // ensol #define in1 pin_c0 #define in2 pin_c3 #define in3 pin_c4 #define in4 pin_c5 int hiz1=150; int hiz2=150; int portlar; int1 durum; void saga() { set_pwm1_duty(hiz1); set_pwm2_duty(hiz2); output_low(in1); output_low(in2); output_high(in3); output_low(in4); } void sola() { set_pwm1_duty(hiz1); // PWM1 çıkışı görev saykılı belirleniyor set_pwm2_duty(hiz2); output_high(in1); output_low(in2); output_low(in3); output_low(in4); } void sertsag() { set_pwm1_duty(150); set_pwm2_duty(150); output_high(in1); output_low(in2); output_low(in3); output_high(in4); } void sertsol() { set_pwm1_duty(150); set_pwm2_duty(150); output_low(in1); output_high(in2); output_high(in3); output_low(in4); }

void geri() { set_pwm1_duty(100); set_pwm2_duty(100); output_low(in1); output_high(in2); output_low(in3); output_high(in4); } void ileri() { set_pwm1_duty(hiz1); set_pwm2_duty(hiz2); output_high(in1); output_low(in2); output_high(in3); output_low(in4); } void dur() { set_pwm1_duty(0); set_pwm2_duty(0); output_low(in1); output_low(in2); output_low(in3); output_low(in4); } void test() { ileri(); delay_ms(800); saga(); delay_ms(800); sola(); delay_ms(800); }

void main ( ) { setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok setup_adc(ADC_OFF); // ADC birimi devre dışı set_tris_a(0xFF); set_tris_B(0xFF); set_tris_c(0x00); setup_ccp1(CCP_PWM); // CCP1 birimi PWM çıkışı için ayarlandı setup_ccp2(CCP_PWM); // CCP2 birimi PWM çıkışı için ayarlandı setup_timer_2(T2_DIV_BY_4,170,1); // Timer2 ayarları yapılıyor set_pwm1_duty(hiz1); // PWM1 çıkışı görev saykılı belirleniyor set_pwm2_duty(hiz2); // PWM2 çıkışı görev saykılı belirleniyor delay_ms(1000); ////s1 s2 s3 s4 s5////// /// 0 0 1 0 0 = 01 (tersi=30) /// 0 1 0 0 0 = 02 (tersi=29) /// 1 0 0 0 0 = 04 (tersi=27) /// 0 0 0 1 0 = 08 (tersi=23) /// 0 0 0 0 1 = 16 (tersi=15) /// 0 0 1 1 1 = 25 (tersi=06) /// 1 1 1 0 0 = 07 (tersi=24) //////////////////////// while(1) { //test(); portlar=input_b(); while ((portlar==1)||(portlar==30)){hiz1=160;hiz2=160;ileri();portlar=0;}//ileri while ((portlar==2)||(portlar==29)){hiz1=140;hiz2=170;ileri();portlar=0;}//az saga while ((portlar==8)||(portlar==23)){hiz1=170;hiz2=140;ileri();portlar=0;}//az sola while ((portlar==25)||(portlar==6)){sertsag();portlar=0;} while ((portlar==7)||(portlar==24)){sertsol();portlar=0;} while ((portlar==16)||(portlar==15)){hiz1=165;hiz2=165;sola();portlar=0;} //tam sola while ((portlar==4)||(portlar==27)){hiz1=165;hiz2=165;saga();portlar=0;} //tam saga } }