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.
Ş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ı
Ş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.
Ş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.
Ş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ı
Ş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ı )
1.5 Baskılı Devre Şeması ( Proteus Ares Dosyası )
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.
Ş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.
Ş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
Ş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.
Ş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.
Ş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 )