PIC 16F877 ile Renk Algilayici

Hazirlayan : Mine Cüneyitoglu
ME - 1

Genel Bilgiler

Bu renk algilayici okuyacaginiz yüzeye yaklasik 5 mm - 40mmlik bir
uzakliga kadar yaklastirdiginizda yüzeyin rengini kirmizi, yesil veya mavi olarak
okur.(Bu mesafe disarisinin aydinlik oldugu varsayilarak belirtilmistir)

Farkli renkteki yüzeylerin kirmizi, yesil ve mavi isiklari farkli oranlarda
yansitmalarini dayanak alarak çalisir.Yüzeyden yansiyacak isinlari göndermek için
üç, okudugunuz renkleri görmek için üç tane LED,lambalarinizin parlakliklarini
ayarlamak için çesitli degerlerde direnç ve transistör,bir trimpot, bir LDR ve PIC
16F877 ile bu projeyi gerçeklestirebilirsiniz.LDR´den alinan analog bilgiyi dijital
bilgiye çevirmek için 16F877´nin analog giris portlarini (Analog to Digital Converter
- kisaca ADC ) kullandim.Dilerseniz bu projeyi ADC özelligi olmayan, daha farkli
bir mikroislemciyle birlikte bir ADC entegresi kullanarak da gerçeklestirebilirsiniz.

Dis Kisim

- Küçük Bir Parça Mukavva - Sert Karton (Tercihen siyah)
- Bant
- Maket Biçagi
- (Eger mukavvaniz siyah degilse) Siyah Tahta Kalemi vb bir boya

Kartondan yaklasik 81 mm x 25 mm´lik bir parça kesin.Bu parçanin bir
tarafini -eger siyah degilse- tahta kalemi ile boyayin.Kartonun siyah tarafinda
uzun kenarin her iki tarafindan 27 mm isaretleyip düz bir dogru çekin. Bu
dogrularin iki kenarini biraz oyun böylece karton kolay ve düzgün katlanir hale
gelsin.Bu dogrular boyunca kartonu katlayin, böylece kartonu iki tarafi bos bir
üçgen haline getirin ve sikica bantlayin.(Iç taraf siyah olacak) Bu üçgenin bir
tarafina elektronik devreyi yerlestirecegiz, diger tarafi da okudugumuz yüzeyi
yaklastiracagimiz taraf olacak.

Elektronik Devre

- 3 x Ultra Bright LED
- 3 x Normal LED
- 5 x 220 ohmluk direnç
- 470 ohmluk direnç
- 22 K´lik trimpot
- 2 x BC548 (BC546 veya 547 de olabilir) Transistor
- 1 x LDR
- PIC 16F877
- Delikli Pertinaks (Yaklasik 60 x 60 mm)

Kestiginiz üçgeninden biraz büyük bir pertinaks parçasi kesin.Bu pentinaksa
kartonun tam ortasina LDR ve üçgenin üç kösesine gelecek sekilde (asagidaki
sekildeki gibi) LEDleri ve LDRyi lehimleyin.

Sekildeki potansiyometre gerçek hayatta LDRnin iki bacagi ve trimpotun
degisken iki bacagidir.Trimpot voltaj bölmek için kullanilmistir.


Kirmizi LED


Ortadaki Kahverengi
Yuvarlak LDR

Yesil LED
Mavi LED



Algilayici Modeli


Proteus Simülasyonu


Eger hem programlama hem çalistirma modu olan bir programlama kartiniz varsa
PICe giden baglantilari kartinizin giris - çikis pinlerine tutturabilirsiniz.Ben üç ultra bright
LED ile LDRyi ayri ufak bir pertinaks parçasina lehimlemeyi tercih ettim.(Yukarida
anlattigim gibi.Ayrica resimlerde ve filmde görebilirsiniz) Diger üç LED´i ise bir diger
küçük pertinaks parçasina lehimledim.

Kirmizi LED digerlerinden daha parlak yandigi için onu PIC´e 470 Ohmluk dirençle
gönderdim.Diger iki LEDi ise transistörle sürdüm.Piyasadan alacaginiz LEDler farkli olabilir.
Ayrica her renk LEDin üzerinde kalmasi gereken voltaj farkli oldugundan PIC´ten gelen 5V
farkli parlakliklara yol açacaktir. Transistörleri yukaridaki gibi baglayabilirsiniz.


PIC Basic ile Programlama

1 - ) Ölçüm Yapmak Íçin Gerekli Olan Tüm Portlari 3 Saniyede Bir Tarayan PIC Basic
Programi :

Tarama süresini degistirmek için PAUSE´dan sonraki sayiyi degistiriniz. PAUSE 1, 1
milisaniyeye karsilik gelir.

TRISB=0

SYMBOL KIRMIZI = PORTB.1
SYMBOL YESIL = PORTB.2
SYMBOL MAVI = PORTB.3

PORTB = 0

ARTTIR:

HIGH MAVI
PAUSE 3000
LOW MAVI

HIGH KIRMIZI
PAUSE 3000
LOW KIRMIZI

HIGH YESIL
PAUSE 3000
LOW YESIL

GOTO ARTTIR

2 - ) 16F877'nin ADC Özelligini Kullanarak Çalisan PIC Basic Programi :

DEFINE OSC 4 `4 mHz´lik kristal kullandik
DEFINE ADC_BITS 8 ' 8 bitlik olcum yapilacak
DEFINE ADC_CLOCK 3 ' ADC´nin Clock Ayari (rc = 3)
DEFINE ADC_SAMPLEUS 50 ' Bu bilgileri Pic Basic´in Helpinden kopyalayabilirsiniz.

ADCON1 = 2 ' PORTA´yi analog giris yapti.

INPUT PORTA.0
TRISB = 0

SYMBOL VERI = PORTA.0 `Analog Bilgi

SYMBOL KIRMLED = PORTB.3
SYMBOL YESILLED = PORTB.5 `Rengi gösteren LEDler
SYMBOL MAVILED = PORTB.4

SYMBOL KIRMIZI = PORTB.0
SYMBOL YESIL = PORTB.1 `Tarayan LED´ler
SYMBOL MAVI = PORTB.2

BILGI VAR BYTE `ADC´den alacagimiz bilgi bu degiskene atilacak
BILGI_K VAR BYTE
BILGI_Y VAR BYTE
BILGI_M VAR BYTE

CLEAR

;****************************************************************
;****************************************************************
ANA: ;
;
CALL OKUMA `Ana Döngü ;
GOTO ANA ;
;
;****************************************************************
;****************************************************************

OKUMA: `Sirayla Lambalar taranir ve ADCden okunan deger
`baska degiskenlere atanir
HIGH KIRMIZI
PAUSE 5
CALL ADC_OKUMA
BILGI_K = BILGI
LOW KIRMIZI
PAUSE 5

HIGH YESIL
PAUSE 5
CALL ADC_OKUMA
BILGI_Y = BILGI
LOW YESIL
PAUSE 5

HIGH MAVI
PAUSE 5
CALL ADC_OKUMA
BILGI_M = BILGI
LOW MAVI
PAUSE 5


IF BILGI_K < BILGI_M && BILGI_K < BILGI_Y THEN `Karsilastirma Yapilir

HIGH KIRMLED
LOW MAVILED
LOW YESILLED
ENDIF

IF BILGI_Y < BILGI_M && BILGI_Y < BILGI_K THEN
HIGH YESILLED
LOW MAVILED
LOW KIRMLED
ENDIF

IF BILGI_M < BILGI_Y && BILGI_M < BILGI_K THEN
HIGH MAVILED
LOW KIRMLED
LOW YESILLED
PAUSE 20
ENDIF

RETURN

ADC_OKUMA: `ADCden bilgi okuma rutini

ADCIN VERI, BILGI

RETURN

3 - ) 16F877'nin ADC Özelligini Kullanarak Çalisan Programin Degerlere Göre
Düzenlemesi:

Programin karsilastirma yapilan kisminda son iki if durumu alttaki gibi degistirilir.

IF BILGI_Y-10 < BILGI_M && BILGI_Y < BILGI_K THEN
HIGH YESILLED
LOW MAVILED
LOW KIRMLED
ENDIF

IF BILGI_M < BILGI_Y-10 && BILGI_M < BILGI_K THEN
HIGH MAVILED
LOW KIRMLED
LOW YESILLED
PAUSE 20
ENDIF

Bu degistirme mavi ile yesil arasinda karisiklik oldugu için yapilmistir.Eger
sisteminizin farkli renklerde sorunlari varsa degisik degerleri toplayip çikarabilirsiniz.


Yapilmasi Gereken Ölçümler :

Devrenizin sadece ultra bright kismini (PIC ile LEDlerin baglantisi) yaptiktan sonra
LDRnizi 10 mmlik küçük bir karton boru içerisine almaniz ve multimetrenizi 20 V
kademesine getirip bazi ölçümler yapmaniz gerekiyor.

PICinize LEDleri bagladiginiz 3 Portu sirasiyla HIGH – LOW yapan bir program
yükleyin.(Programlama kisminda örnegi var) Algilayicinizin altina çesitli tonlarda ve
parlakliklari - matliklari farkli farkli kirmizi mavi ve yesil yüzeyler koyun. 3 saniyede bir
yanan lamba degistikçe LDRnin üzerindeki voltaji ölçün.Verilerinizi asagidakine benzer bir
tabloya yerlestirin.Eger LDRnin bir bacagini +5V´a ve diger bacagini trimpotla topraga
gönderirseniz asagidakine benzer bir artis azalis degerlerine sahip olursunuz. Trimpotu
dilediginiz voltaj araliginda gezmek için kullanabilirsiniz.22 k´lik bir trimpotu ortalarinda bir
yere ayarlarsiniz asagi yukari 2.5 V dolaylarini yakalarsiniz.(Piyasadaki LDR´ler genelde bu
parlaklik sartlarinda 10k - 20 k gibi bir direnç degisimi gösteriyorlar.) Trimpotu iki uca
fazla yaklastirmayiniz çünkü PICin bacagina dogrudan 5V yada ground vererek saglikli bir
ölçüm yapmis olmazsiniz.En dogrusal degisimi 2.5 V dolaylarinda yakalarsiniz.





|
vRenk Lamba


KIRMIZI

YESÍL

MAVÍ
Kirmizi Parlak 3.14 V 1.23 V 1.11 V
Koyu Kirmizi 2.99 V 1.45 V 1.36 V
Koyu Yesil Mat 2.24 V 2.89 V 3.11 V
Açik Yesil Parlak 1.27 V 3.78 V 3.37 V
Yesil Mat 1.51 V 3.44 V 2.39 V
Açik Mavi Mat 1.11 V 2.84 V 3.24 V
Mavi Mat 1.23 V 2.87 V 3.17 V
Koyu Mavi Parlak 2.22 V 2.57 V 3.36 V

Örnek Ölçüm Tablosu

Tablonuzu yaptiktan sonra inceleyin.Eger LDR + kutba bagliysa ölçtügünüz voltaj
gösterdiginiz yüzeyin rengindeki lamba yanarken en yüksek,eger LDR - kutba bagliysa en
düsük olmalidir.Yani :
LDR + için : Yesil yüzeyde yesil lamba yanarken, mavi yüzeyde mavi lamba
yanarken, kirmizi yüzeyde kirmizi lamba yanarken en yüksek voltaji ölçülmeli,
LDR - için : Yesil yüzeyde yesil lamba yanarken, mavi yüzeyde mavi lamba
yanarken, kirmizi yüzeyde kirmizi lamba yanarken en düsük voltaji ölçülmelidir.
Eger yukaridaki tabloyu incelersek +´ya bagli bir LDR için koyu yesil matin ADC
kullanildigi taktirde yesil yerine mavi okunacagini görürüz.Bu yanlis okumayi önlemek için
lamba parlakliklariyla oynanabilir.Bunu taktiginiz dirençlerin degerleriyle oynayarak
yapabilirsiniz.Eger degerler birbirine çok yakinsa ve diger tonlarda yesil voltaji maviye
göre oldukça farkliysa Programlama kismindaki 3. Programi kullanabilirsiniz.Yada
analogtan dijitale çeviricinin çalisma prensibine uygun degisimler yapabilirsiniz.

ADC Üzerine Kisa Bilgi

ADC özelligi 16F877 gibi bazi PIClerde olmasinin yani sira,analog bilgiyi
dijitale çevirici özel entegreler de bulunmaktadir.Eger böyle bir entegre
kullanirsaniz mikroislemcinizde bu özelligin bulundugu portlarin olmasina gerek
yoktur.(Bkz: PIC 16f628, PIC 16F84)Bu tip bir uygulamayi www.antrak.org.tr´ de
bulabilirsiniz.

PIC sonuçta dijital bir eleman oldugu için portlarindan birim zamanda sadece
high ve low yani 1 ve 0 bilgisi alir.Yani 0 - 5 V arasi degerlere duyarlidir
diyemeyiz.Eger mikroislemcinizin Schmitt Trigger özellikli portlarina böyle bilgiler
verirseniz, 0 - 2,5 V arasini 0, 2,5 - 5 V arasini 1 kabul eder.Diger portlarina
baglarsaniz kararsiz durumlar olusur.ADC ise gelen analog bilgiyi (mesela 3.27 V)
0 - 255 arasi (8 bitlik ADC için) bir degere dönüstürür.Tabi böylece gelen bilginizin
256 birim çözünürlügü olur.Bu uygulamada 8 bitlik ADC yeterli olmustur.Yani
analog girise 3.27 V veriirse bu porttan okunacak 167 - 168 gibi bir sayi olacaktir.
(3.27*256/5) Detayli bilgi için 16F877 Datasheet´ine bakiniz. Datasheetini
www.microchip.com ´dan bulabilirsiniz.

:* 4 )+ * ' .5 $ ") :* )+ * )+ * $ 4 $ 4 (& ' $ & ' $ ' B ' 9 ' )+ * $ ' 5 C % 5 4 ) :* 7 ) :* )+ * % ) :* + (. ) ( : 62 A ) :* $ 4 ' ! 1 ' $ ' 4 4 $ 3$ ' $ ! ' 4 & "* ' $ 4 % $) .

64 6 + 1 C 9 9A E +8 . + # 4 # ( 9A E +8 . :* . $ 37 " 6. 6+1 ' ' 1 2 @ E< * C . 1 2 A8/ * J 9 . 1 22C 5 > * J)2 .0 # 3$ %:8 )E 6 + < A C 9 . K / ' K* . I ' KC 9 . ' : & # ( ) . 1 2 8 76 :? * J1 ) 8 H I.0 # 3$ 5A 7A A 6 + + F E C 9 .0 # 3$ 71 A:* E 6 + D) C 9 . C 2 8 .0 # 3$ D A 6 + 1 :+ E C 9 .0 # 3$ 5A 7A A 6 + + F E C 9 .0 # 3$ %:8 ) :* E 6 + A) C 9 . / ) 0 1 ) ) 2 / " ) ) 3 4 ) 5. $ D # ( ! -.0 # 3$ 5A 7) E 6 + > + :* C 9 . 0 C 4 ) :* ! 62 A.0 # 3$ %:8 )E 6 + A C 9 H1 H+ & ) :* H9 ) .5 & 1 ! * 4 ' ) :* ) :* ) :* $ 9 4 ' & & $ 6 ( ! 62 A. $ 37 "343 8! % % % % 71 A D > 71 A D 5A 7A A + F > 5A 7A A + F %:8 ) A > %:8 ) A 1 9A + 9+ 9 % . $ 37 " 6. 2 1 2 1 E >" K 6 .0 # 3$ 71 A 6 + > D E C 9 6+ E C 9 1 9 AG + 9+ " 6.

" 71 A D 6.0 # 3$ 71 A 6 + < D E C 9 AL )A AL J ) A5 AL J ) A% AL J ) A7 $ MN N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN MN N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN 1 1 @ G M M $ $ C 71 5? H1 * & M "343 1 1 @ M M MN N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN MN N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN C 71 5? G " 5A 7A A + F 6. . AL J O AL J P ) A5 ) A 7 P AL J O AL J 4 ) A5 ) A% " $ 37 $ 37 . $ $ 1 2 C 71 * J 5? AL J E AL ) A5 )A $ 37 5A 7A A + F 6.. $ $ 1 2 C 71 * J 5? AL J E AL ) A% )A $ 37 %:8 ) A 6.% 5A 7) + :* 71 A:* D) %:8 ) :* A) . H5 % ' " $ 37 $ 37 . $ $ 1 2 C 71 * J 5? AL J E AL ) A7 )A $ 37 71 A D 6.% AL J O AL J P ) A% ) A 7 P AL J O AL J 4 ) A% ) A5 %:8 ) :* A) 71 A:* D) 5A 7) + :* . " %:8 ) A 6. " $ 37 AL J O AL J P ) A7 ) A % P AL J O AL J 4 ) A7 ) A5 71 A:* D) 5A 7) + :* . H8 H ) 1 2 * < < < < # 04 # 04 # 04 # 04 H1 2 * .

! AL J .$ 37 %:8 ) :* A) 6./ ) 4 $ &$ ' >6 & HIGH – LOW 62 A $ ) :* " * )+ ' < D "1 (&$ Q D . 6 & D < D 4' ' ! &$ $ ' .P ) A7 ) A% P AL J O AL J 4 ) A7 ) A5 " 71 A:* D) $ 37 5A 7) + :* $ 37 %:8 ) :* A) 6. ' : & ) % "= 6 " $ 37 $ 37 .% .O AL J P ) A% ) A 7 P AL J O AL J 4 ) A% ) A5 %:8 ) :* A) 71 A:* D) 5A 7) + :* AL J O AL J . 1 2 C 71 * J 5? G % . D A AL :+ )A H1 2 * 46 .% ' . < . D ' $ ' > ' ' 9 ' )+ * . < . 5!% 9 ) ( % . ! $ ' ' '$ : 0 1 ) (" * ' 62 A 6 ' 3 ) :* . "9 ' ' ! ! $ )+ * : )+ * ( < D $ $ < 62 A : & << .% 46 .

!</ 62 . 62 A 4 4 S : $ ( & ' > <0D " % 4 . 0 4 .> *+ 5 5 5 1 $ % 1 $ 7 5 ) 6 5 % 7 % 6 7 7 7 7 7 6 . $ ' % 3 D 84 9 & ' 3< D < 3 D * 1 2 * 3< / 1 2$ " * & 9 & < .D -<> D < << D ..#/ " A . & G 62 ./ . * SSS 4' .#/0 . > <0 < .D ->.#/0 * . & $ ( % )+$ * & 1 2 * $ ( 1 2& * $ . " * N T $ .03 . 0 & 62 A : ' & ' SSS . . A ./ ) 4 A ( ' : ) +Q * &$ ) +3 * ( (&$ ) +3 $ G % * (&$ : ' ' & : $ ! ( % B $ 6 $ '( # $ ' > 6 ' Q.-D -.D <R D R << D -<0D .D > >0D < >RD >< D >. 9 & % G ) +Q $ G % * ' ? 0 @$ 2 -<> D D < /RD >0 D / > D </ D < /0D < 0D < 2 -.D >.D >. $ & / 1 2 * > <0D ' .D 0 > >.

Sign up to vote on this title
UsefulNot useful