Çizgiyi Takip Eden Robot Uygulaması Projesi ( PoeBot )

1. Devre Açıklaması

Çizgi takip eden araba projesinde ihtiyaç duyulan hususlar şunlardır:

1) Zeminde takip edilecek çizgiyi okuyabilecek devre
2) Gün ışığından etkileşimini en aza indirgenmesi
3) Motorlara kumanda edecek devre
4) Çizgi dışına çıkıldığında tekrar çizgiyi bulması

Mikrodenetleyici kullanarak bu özellikler kolayca gerçeklenebilir. Önce yerdeki çizgiyi takip edecek, çizgiyi anlayabilecek devre hazırlamamız gerekmektedir.

1.1 Sensör Genel

Bunun için bir LED’in verdiği ışığın yerden yansımasını okuyabilen bir foto direnç kullanılmıştır.

Image

Şekil 1 Sensör devresi çalışma mantığı

Ledin yaydığı ışıktan zemine çarpıp geri yansıyan kısmı foto direnç üzerine düşer. Bu ışık ne kadar fazla ise o kadar foto direncin direnci azalır.

1.1.2 Sensörün Çalışması

Image

Şekil 2 Sensör çalışması

Sensör devresinde ledin yansıttığı ışığı alan foto direncin direnç değerinin değişimlerini okuyarak yol çizgisini anlaşılabilir. Şekil 2’den de görüldüğü gibi foto diyot olan R2, R3 üzerinden +5V’ta bağlanmıştır. Yani bir gerilim bölme düzeneği yapılmıştır. Foto direnç üzerinde ne kadar çok ışık yansıması olursa o kadar çok foto direnç değerini düşüreceğinden o kadar daha düşük bir voltaj düşümü gerçekleşecektir. Bu gerilim analog dijital çeviricinin girişine bağlandığında bize yansıma değerinin sayısal karşılığını adc çıkışında verecektir. Bu şekilde aynı sensörden yan yana üç adet bağlayarak, ortadaki sensör yol çizgisine konumlandırıldığında yol ve çizgi arasındaki renk farkından da faydalanarak çizgi takibi yapılabilecektir.

1.1.3 Sensör Ledi Işık Şiddeti Ayarı

LED diyotun verdiği ışık şiddeti ayarlı olduğunda zeminden yansıyan ışığın şiddeti de ayarlı olacak ve gün ışığından etkilenmesi bu şekilde giderilmiş olacaktır. Bunu ise aşağıdaki devre ile yapmak mümkündür.

Image

Şekil 3 Işık şiddetinin ayarlanması

RV1 1K’lık potta orta uç şasede olduğunda R5 üzerinden beyzi sürülen Q5 transistörü kesime gidecek ve LED’ler sönük kalacaktır. RV1’i saat yönünde çevirerek potun orta ucunu R6 direncine yaklaştırıldığında Q5 transistörü daha fazla sürülecek ve LED’ler giderek artan bir parlaklıkta yanacaktır. İstenilen parlaklık değeri elde edildiğinde pot o konumda bırakılmalıdır. Bu ayar yol çizgi rengi ve yol rengi arasındaki fark belirgin olacak bir şekilde bırakılmalıdır. Ledlerin ışığı az olursa yol rengi ve çizgi rengi arasındaki fark az olacağından adc çıkışındaki sayısal değerler birbirine yakın olacaktır. Çizgiyi ayırt etmek zorlaşacaktır. Işık çok fazla açıldığında ise çizgiden yansıyan ışık ile yoldan yansıyan ışık yine çok fazla olacağından ayır etmek zorlaşacaktır.

1.2 Hareket

Aracı hareket ettirmek için iki adet redüktörlü motor kullanılmıştır. Bu motorlar arka tarafta biri sağda diğeri solda olmak üzere, hareketin yanı sıra yön kontrolünü de yapmaktadırlar. Motor bağlantısı şekildeki gibidir.

Image

Şekil 4 Tek Motor için kumanda

1.2.1 Yön Kontrolü

Yön kontrolü motorların sadece birine voltaj uygulanarak yapılır. İleri hareket için her iki motora birden voltaj uygulanır. Sağa hareket için sol motor, sola hareket için sağ motor enerjilenir. Bu şekilde motorların hareketi kontrol edilmiş olur. Sağ motor Pic entegresinin PORTB.3 nolu pinine, sol motor PORTB.6 nolu pinine bağlanmıştır.

1.3 Pic Programı

Hex Dosyası, PicBasicPro Dosyası

Hex Dosyası :

:020000040000FA
:100000003928A000A00DA00D200D3839C1389F005F
:100010000030A100323020201F151F190D28A1012A
:100020001E083428A301A200FF30A207031CA30767
:10003000031C34280330A100DF3020201428A10144
:10004000E83EA000A109FC30031C2928A0070318E2
:100050002628A0076400A10F262820182F28A01CFE
:10006000332800003328080083130313831264002D
:100070000800831609309F000F308500860170301C
:100080008F008312860185010F30BC008611831614
:100090008611831206138316061383120130BB00E8
:1000A00064000B303B0203185C2801300120BD00C6
:1000B000C8301220BB0F5028061783160613831270
:1000C000861583168611831200300120B900013095
:1000D0000120B80002300120BA003D083C07BB00F7
:1000E000640038083B0203188A2864003B083A027F
:1000F00003187F28061383160613831264286400EE
:100100003B08390203188928861183168611831249
:100110006428922806178316061383128615831601
:0601200086118312642821
:02400E00142F6D


:00000001FF

PicBasicPro Dosyası Örnek Aşağıda verilmiştir.

' RA0,RA1,RA3 Analog input
' m1s 1.motor sürücü pin PORTB.6 ,m2s 2. motor sürücü pin PORTB.3
@ __config _INTRC_IO & _WDT_ON & _PWRTE_ON & _LVP_OFF & _CP_OFF & _MCLR_OFF & _WRT_ENABLE_OFF & _CCP1_RB3 & _BODEN_OFF
@ messg "config YAZILDI"
define osc 8
sol var byte 'o anda yoldan okunan sol sensor değeri
sag var byte 'o anda yoldan okunan sol sensor değeri
mrk var byte 'o anda yoldan okunan sol sensor değeri
yol var byte 'Başlangıçta öğrenilen yolun olması gereken merkez değeri
tolera var byte 'yoldan çıkmış olarak görmesi için gerekli fark değeri
temp var byte 'geçici değerler için
starter:
ADCON1=%00001001 '8 bit sonuç
TRISA=15 'analog girişleri input yap
TRISB=0 'PORTB nin bütün pinlerini output yap
OSCCON=%01110000 'internal osilatörü 8MHZ de çalış
PORTB=0 'portb yi sıfırla
PORTA=0 'porta yi sıfırla
tolera=15 'tolerans değeri
low PORTB.3 'motoru durdur
low PORTB.6 'motoru durdur
ogren:
for temp=1 to 10 ' yol değerini 10 k ez oku
adcin 1,yol ' Ortadaki sensör
pause 200 ' her okuma arasında 200ms bekle
next temp
high PORTB.6 'm1 motoruna hareket ver
high PORTB.3 'm2 motoruna hareket ver
start: 'döngünün başlangıcı
adcin 0,sag 'sağ sensörü oku
adcin 1,mrk 'merkez sensörü oku
adcin 2,sol 'sol sensörü oku
temp=yol+tolera 'temp değerine tolerans ve yol değerini topla
if mrk > temp then ' merkez sensörden okunan değer tempten büyükse
if sol < temp then 'sol sensöre bak tempten küçükmü?
low PORTB.6 'm1 motorunu durdur
goto start 'başlangıça dön
endif
if sag < temp then 'sağ sensör tempten küçükse
low PORTB.3 'm2 motorunu durdur
goto start 'başlangıca dön
endif
else 'temp değeri merkez sensörden okunan değerden büyükse
high PORTB.6 'm1 motoruna hareket ver
high PORTB.3 'm2 motoruna hareket ver
endif
goto start 'başa dön

 

 

———————————————–

Pic Entegresini programlamak için kullanılan programlama dili Pic Basic Pro’ dur. Kullanımı kolay olması ve bilinen Basic dili biçiminde pic komutlarının kontrol edilmesi, assemblere göre program yazmaya göre çok büyük kolaylık sağlamaktadır.

' RA0,RA1,RA3 Analog input
' m1s 1.motor sürücü pin PORTB.6 ,m2s 2. motor sürücü pin PORTB.3
@        __config _INTRC_IO & _WDT_ON & _PWRTE_ON & 
_LVP_OFF & _CP_OFF & _MCLR_OFF &
_WRT_ENABLE_OFF & _CCP1_RB3 & _BODEN_OFF
@	messg "config YAZILDI"
define osc 8
sol	var 	byte	'o anda yoldan okunan sol sensor değeri
sag	var 	byte	'o anda yoldan okunan sol sensor değeri
mrk	var	byte	'o anda yoldan okunan sol sensor değeri
yol 	var	byte	'Başlangıçta öğrenilen yolun olması gereken merkez değeri
tolera	var	byte	'yoldan çıkmış olarak görmesi için gerekli fark değeri
temp	var	byte	'geçici değerler için
starter:
	ADCON1=%00001001	'8 bit sonuç
	TRISA=15		'analog girişleri input yap
	TRISB=0			'PORTB nin bütün pinlerini output yap
	OSCCON=%01110000     	'internal osilatörü 8MHZ de çalış
	PORTB=0			'portb yi sıfırla
	PORTA=0			'porta yi sıfırla
	tolera=15		'tolerans değeri
	low PORTB.3		'motoru durdur
	low PORTB.6		'motoru durdur
ogren:
	for temp=1 to 10	' yol değerini 10 kez oku
		adcin 1,yol	' Ortadaki sensör
		pause 200	' her okuma arasında 200ms bekle
	next temp		
	high PORTB.6		'm1 motoruna hareket ver
	high PORTB.3		'm2 motoruna hareket ver
start:				'döngünün başlangıcı
	adcin 0,sag		'sağ sensörü oku
	adcin 1,mrk		'merkez sensörü oku
	adcin 2,sol		'sol sensörü oku
	temp=yol+tolera		'temp değerine tolerans ve yol değerini topla
	if mrk > temp then 	' merkez sensörden okunan değer tempten büyükse
		if sol < temp then		'sol sensöre bak tempten küçükmü?
			low PORTB.6			'm1 motorunu durdur
			goto	start		'başlangıça dön
		endif				
		if sag < temp then		'sağ sensör tempten küçükse 
			low PORTB.3			'm2 motorunu durdur
			goto	start		'başlangıca dön
		endif				
	else			'temp değeri merkez sensörden okunan değerden büyükse
		high PORTB.6			'm1 motoruna hareket ver
		high PORTB.3			'm2 motoruna hareket ver
	endif
	goto	start		'başa dön

1.3.1 Programın Algoritması

Image

Şekil 5 Akış Diagramı

1.3.2 Programın Açıklaması

Devreye voltaj verilmeden önce araç çizgi üzerine konur. Ortadaki sensör çizginin üzerine konumlanmış olmalıdır. Ogren adlı kısımda ortadaki sensör okunur ve bu değer çizgi değeri olarak saklanır. Motora hareket verilir. Daha sonra sag ve sol oku adlı kısımda sağ sensör ve sol sensör okunur. Okunan bu değer sol sensörden okunan bilgiyle karşılaştırılır. Bu karşılaştırma işleminde belirlenen toleranstan küçükse motorun sol yapması gerektiği anlaşılır. Aynı şekilde sağ sensörden okunan veride karşılaştırılır ve motorun hangi yöne gitmesi gerektiğine karar verilir.

1.4 Devre Şeması ( Proteus Isis Dosyası )

Image

1.5 Baskılı Devre Şeması ( Proteus Ares Dosyası )

Image

2. Kullanılan Yazılımlar

Pic programlamanın ne demek olduğunu kısaca özetlenirse

Text olarak istenilen programın bir derleyici diline uygun olarak yazılması

Programın derlenmesi

Derleme sonucunda ortaya çıkan HEX dosyasının bir programlayıcı ile pic entegresine yüklenmesi

Bu projede derleyici Pic Basic Pro seçilmiştir. Metin editörü olarak basit bir notepad uygulaması bile yeterli olmasına karşılık derleme işinin otomatikleştirilmesi açısından MPLAB IDE programı kullanılmıştır. Hex dosyasının pic entegresine yüklenmesi için yine MPAB IDE kullanılmıştır.

2.1 Pic Basic Pro

Pic için assembler kullanarak program yazmak biraz zordur. Bu zorluk Pic Basic Pro kullanarak aşılabilir. Örnek olarak assemblerde herhangi bir portun bir bitini sıfır yapmak için, önce ilgili portun tris registerinde ilgili bite sıfır yazmak gerekmektedir. Bunun için bank değiştirmek vs. gibi işlemler yapmak gerekmektedir. Halbuki Pic Basic Pro’da herhangi bir biti çıkış yapmak için

Low porta.0 yazmak yeterlidir.

2.1.1Pic Basic Pro’nun Kurulması

Pic Basic Pro’yu kaynak kodları CD’sinde pbp243 adlı dizinin içerisinde bulunan pbp243.zip adlı sıkıştırılmış dosyadan c: sürücüsünün ana dizinine c:\pbp243 adlı dizinine açmak gerekmektedir.

2.1.2. Pic Basic Pronun Mplab IDE’ye entegre edilmesi

Mplab IDE programı kurulduktan sonra Project menüsü altında bulunan Select Language Tool Loacations menüsü seçilir. Bu açılan pencereden micro eng. Pic Basic Pro seçilir ve executable olarak c:\pbp243 dizini altından Pbpw.exe seçilir.

Image

Şekil 6 Pic basic Pro’nun Mplab IDE’ye tanıtılması

Bu işi yaptıktan sonra mpasmwin.exe adlı dosyanın olduğu dizininde sistem path tanımı içerisine alınması gerekmektedir. Bunun için önce mpasmwin.exe adlı dosyayı başlat->bul->tümdosya ve klasörler diyerek arattıralım.

Image

Şekil 7 mpasmwin.exe dosyasının bulunması

Daha sonra bulunan herhangi bir mpasmwin.exe dosyasına sağ tuşla tıklayıp özellikler diyelim ve dosyanın yolunu kopyalayalım.daha sonra bilgisayarıma sağ tuşla tıklayıp özellikler diyelim. Gelen pencereden gelişmiş sekmesine tıklayalım

Image

Şekil 8 Bilgisayarım gelişmiş seçenekleri

Bu açılan pencereden ortam değişkenleri yazan butona tıklayalım. Aşağıdaki diyaloğ kutusu gelecektir.

Image

Şekil 9 Ortam değişkenleri kutusu

Bu kutuda alt kısımda path yazan yere tıklayıp düzenle diyelim. Aşağıdaki kutu açılacaktır.

Image

Şekil 10 Path Tanımının yazılacağı yer

Bu açılan pencerede değişken değeri hizasındaki metin kutusuna tıklayıp end tuşuna basalım ve ; (noktalı virgül) koyalım ve SHIFT + ENTER tuşuna basalım. Bu şekilde arattırıp bulduğumuz mpasmwin.exe dosyasının path tanımını buradaki path tanımı kutusuna eklemiş olduk. Şimdi mplab ide programını kapatıp açtığımızda program path tanımını öğrenmiş ve hazır olarak karşımıza gelecektir. Şimdi istediğimiz pic Basic programını yazabiliriz. Mplab IDE menüsünden Project->Project wizard seçtiğimizde kullanacağımız pic entegresini, kulanacağımız programlama dilini ve projenin nerede olacağını seçeceğimiz bir sihirbaz yardımcısı gelecektir. Bunu kullanarak proje oluşturulur. Dosya menüsünden yeni dosya seçilir ve bu dosya içine program yazılır ve bas uzantılı olarak kaydedilir. Bu dosya projeye eklenir ve derlenir. Böylece hex dosyası oluşturulur.

2.2 MPLAB IDE

MPLAB IDE programı pic için program yazmanın yanı sıra debug (hata ayıklama), programlama gibi birçok işlevi barındıran bir programdır. Bu programla uyumlu çalışan programlayıcılar kullanılarak başka bir yazılıma gerek kalmadan pic entegresinin programlanması sağlanabilir. MPLAB IDE değişik derleyiciler kullanarak değişik programlama dilleri ile program yazmaya olanak tanır. Bu projede Pic Basic Pro derleyicisi kullanılmıştır. Bu derleyiciyi kullanmak için önce bu derleyicinin MPLAB IDE’ye tanıtılması gerekmektedir. Bu işlemin nasıl yapılacağı 2.1.2 nolu başlık olan “Pic Basic Pronun Mplab IDE’ye entegre edilmesi” kısmında açıklanmıştır.

2.2.1 Mplab IDE programının Kurulması

Mplab IDE programının Pic Basic Pro desteği bulunmaktadır. Yalnız yeni Mplab IDE versiyonlarında bu destek buluınmamaktadır. Bunun için önce mplab v641 kurulur daha sonra yeni versiyonlardan istenilen biri kurulur. Kaynak kodları CD’sinde mp641 dizini içerisinde bulunan mplab v641.exe dosyasını çalıştırıp dialog kutularını takip ederek ileri ileri diyerek default ayarları kabul ederek MPLAB IDE versiyon 6.41 kurulur. Yine aynı şekilde mplap v7.10 da kaynak kodları CD’sinden kurulur.

2.3 Pic Entegresinin Programlanması

Programlama için Warp13 adlı programlayıcı kullanıldı. Bu progrmlayıcı Mplab IDE altında Pic Start Plus olarak çalışıyor ve başka bir programlayıcı programa gerek duymuyor. İstenirse kendi warp13 programı ile de kullanılabiliyor.

Kaynak : Mustafa Patan ( www.otomatikmakine.com )

Posted in Uncategorized.

Bir cevap yazın