PIC16F877 İle lcd göstergeli renk algılayıcı devresi

PIC 16F877 İLE RENK ALGILAYICI DEVRESİ PICBASIC PRO
Bu devrede PIC 16f877 mikrodenetleyicisi kullanılarak LCD (Liquid Crystal Display) üzerinde renk algılayıcı uygulaması yapılmıştır. Devre tasarımı ve baskı devre işlemleri için Proteus ISIS ve Proteus ARES programları kullanılmıştır. Devrenin çalışma mantığı kapalı bir ortamda LDR’nin sırayla yanıp sönen ledlerin yaydığı ışıktan etkilenerek direncini değiştirmesi esasına dayanır.
LDR önüne konan cisimden yansıyan ışığın etkisiyle analog bir sinyal üretir bu sinyal 16F877 mikrodenetleyicisinin ADC pinlerinden PORTA.0 ‘a girilerek ölçüm yapılır. Bu devrede daha önce belirlenmiş renkli kartonlar LDR önüne konarak her rengin kendine ait sinyal tablosu çıkarılmıştır.

Elde edilen tablodan MAVİ rengin toplamda 515-525 aralığında YEŞİL rengin 505-515 aralığında KIRMIZI renginse 490-500 aralığında olduğu gözlenmiştir. Bu değerler kullanılarak LDR önüne konan cismin rengi algılanmaktadır. Ölçüm yaparken cisimle LDR ve ledlerin önünü tamamen kapatmalısınız.
LDR BAĞLANTISI

LDR şekildeki gibi üç ledin ortasında olacak şekilde delikli pertinaksa lehimlenir ve direnç bağlantıları yapılır. Daha sonra devremizin sensör kısmını kapatacak şekilde herhangi bir kutu, kapak vs. ve ledlerin etrafını kapatmak için siyah renkli kartondan bir üçgen şekli yapılır.
NOT: Devre içinde LDR’den gelen sinyal kablosuna paralel bir led koyarsanız bu değerlere yakın değerler bulursunuz. Değerleri bu şekilde bulmak için direnç denedim ama elimde 330Ω’dan küçük direnç olmadığı için çok küçük değerler çıkıyordu bende led bağladım :)
Ön panel Görünümü

1: Renk algılama işlemine başlama butonu
Devre şeması ve baskı devre alt üst görünüm

NOT: Bu devreyi kronometre ve geri sayım devresinde kullanmak için yapmıştım dolayısıyla yanyana olan 10kΩ dirençlerden sadece PORTA.4 pinine direnç bağlamalısınız.
Malzeme listesi ve fiyatlar

Devreye ait mikrodenetleyici kodları MicroCode Studio Plus – PICBASIC PRO derleyicisinde yazılmış ve derlenmiştir. Derleme işlemi için bilgisayarınızda PBP246 ve MPASM assembly derleyici dosyaları bulunmalıdır.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 07.04.2009 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
PORTA=0:PORTB=0:PORTC=0
TRISA=%00010001 'Bit0 ve bit 2 giriş diğerleri çıkış yapıldı
TRISB=%00000001 'PortB tuş takımı için ayarlandı 1-2-3 giriş diğerleri çıkış
TRISC=%10000000 '7. bit'e tuş bağlandı giriş oldu '
'-----------------------------------------------------------------
@ DEVICE PIC16F877 'işlemci 16F876
@ DEVICE PIC16F877, WDT_on 'Watch Dog timer açık
@ DEVICE PIC16F877, PWRT_ON 'Power on timer açık
@ DEVICE PIC16F877, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE PIC16F877, XT_OSC 'XT osilatör kullanılacak
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
DEFINE OSC 4
DEFINE ADC_BITS 8 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100
'-----------------------LCD KARAKTER TANIM [BAŞLA]------------------------
LCDOUT $FE,$40, $04, $00, $0E, $04, $04, $04, $0E, $00 'CGRAM 0. "İ"
LCDOUT $FE,$48, $0E, $11, $10, $10, $11, $0E, $04, $00 'CGRAM 1. "Ç"
LCDOUT $FE,$58, $00, $0E, $11, $11, $11, $11, $0E, $00 'CGRAM 3. "LED OFF"
LCDOUT $FE,$60, $00, $0E, $1F, $1F, $1F, $1F, $0E, $00 'CGRAM 4. "LED ON"
'----------------------LCD KARAKTER TANIM [BİTİŞ]-----------------------
OPTION_REG.7=1 'Pull up dirençleri İPTAL
ADCON1=%00000100 'PORTA.0 VE PORTA.1 ANALOG DİĞERLERİ DİGİTAL
HAM VAR BYTE
KIRMIZI VAR BYTE
YESIL VAR BYTE
MAVI VAR BYTE
SYMBOL TUS=PORTA.4
symbol LED_KIR=PORTA.1
SYMBOL LED_YES=PORTA.2
SYMBOL LED_MAV=PORTA.3
INPUT PORTA.0
'------------------------------------------------------------------------
LOW PORTB.2
LCDOUT $FE,1
PAUSE 300
LCDOUT $FE,$86, "RENK"
LCDOUT $FE,$C0,"ALGILAMA ","S",0,"STEM",0
PAUSE 1500
'----------------------------OKUMA OLCME [BAŞLA]---------------------------
BASLA:
LCDOUT $FE,1, "ALGILAMA ",0,1,0,"N"
LCDOUT $FE,$C0,"BUTON'A BASIN..."
PAUSE 200
IF TUS=0 THEN ALGILA
GOTO BASLA
ALGILA:
LCDOUT $FE,1
HIGH LED_KIR
LCDOUT $FE,$80, "C",0,"SM",0,"N RENG",0,"N",0
LCDOUT $FE,$C0,"ALGILIYOR ",3,3,4
PAUSE 200
GOSUB ADCAL
KIRMIZI=HAM
PAUSE 200
LOW LED_KIR
HIGH LED_YES
LCDOUT $FE,$80, "C",0,"SM",0,"N RENG",0,"N",0
LCDOUT $FE,$C0,"ALGILIYOR ",3,4,3
PAUSE 200
GOSUB ADCAL
YESIL=HAM
PAUSE 200
LOW LED_YES
HIGH LED_MAV
LCDOUT $FE,$80, "C",0,"SM",0,"N RENG",0,"N",0
LCDOUT $FE,$C0,"ALGILIYOR ",4,3,3
PAUSE 200
GOSUB ADCAL
MAVI=HAM
PAUSE 200
LOW LED_MAV
'-----------------OKUMA OLCME [BİTİŞ]----------------------------------
RENK_BUL:
IF KIRMIZI+YESIL+MAVI=>490 AND KIRMIZI+YESIL+MAVI=<500 THEN GOTO KIRMIZI_RENK
IF KIRMIZI+YESIL+MAVI=>505 AND KIRMIZI+YESIL+MAVI=<515 THEN GOTO YESIL_RENK
IF KIRMIZI+YESIL+MAVI=>515 AND KIRMIZI+YESIL+MAVI=<525 THEN GOTO MAVI_RENK
LCDOUT $FE,1, "OKUMA VEYA HESAP"
LCDOUT $FE,$C0," HATASI VAR !!!"
pause 2000
goto BASLA
KIRMIZI_RENK:
LCDOUT $FE,1, "C",0,"SM",0,"N RENG",0," "
LCDOUT $FE,$C0,"==> KIRMIZIDIR"
PAUSE 100
IF TUS=0 THEN GOTO BASLA
GOTO KIRMIZI_RENK
YESIL_RENK:
LCDOUT $FE,1, "C",0,"SM",0,"N RENG",0," "
LCDOUT $FE,$C0,"==>YESILDIR"
PAUSE 100
IF TUS=0 THEN GOTO BASLA
GOTO YESIL_RENK
MAVI_RENK:
LCDOUT $FE,1, "C",0,"SM",0,"N RENG",0," "
LCDOUT $FE,$C0,"==> MAVIDIR"
PAUSE 100
IF TUS=0 THEN GOTO BASLA
GOTO MAVI_RENK
ADCAL:
ADCIN PORTA.0,HAM
GIT: IF ADCON0.2=1 THEN GIT
RETURN
END
Teşekkür: Bu devreyi yaparken bilgilerinden yararlandığım Mine Cüneyitoğlu ve ETE hocamıza değerli bilgilerini internette paylaştıkları için teşekkür ederim.
PIC16F877 İle renk algılayıcı devresine ait tüm dosyalar isis simülasyon ares pcb ve kaynak picbasic pro yazılım dosyaları pic16f877-renk-algilayici-devresi.rar
Projenin yapım aşaması tamamlanmış hali ve test aşamalarına ait resimler











Yazar: Konyalı
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 15 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; Konyali











Yazılar e-postanıza gönderilsin
Paylaşım için sağolun biz bu devreyi yapmaya çalışacağız ama 5 metre mesafeden algılamasını istiyoruz bir fikri olan varsa lütfen paylaşsın teşekkürler.
5 metre oldukça fazla bir mesafe. Ama aklıma lazer ışığı ile belki olabileceği geldi. Rengi belirlenecek kağıttan yansıyan lazer ışığının tekrar toplanması. Veya infrared ledler ile olabilirmi?
Her rengin ışığa tepkisi farklıdır. Renk koyulaştıkça ışığı yansıtma oranı düşer. Renk beyaza yaklaştıkça yansıtma oranı artar. Sadece bir fikir, böyle bir devre olup olmadığını da bilmiyorum kolaygelsin…
5 metreden herhangi bir sensörle algılama yapabileceğinizi sanmam ancak bir webcam aracılığıyla bilgisayara kontrol ettirebilirsiniz
ben bu devreyi eksizsiz yaptım herşey normal ama lcd’ye data gelmiyor. lcd test ediyorum çalışıyor karakterler görünüyor.tekrar devreye taktığımda çalışmıyor..bunun nedeni ne olabilir ben bulamadım.yada neyı yanlış yapmış olabilirim..
merhabalar.ben de aynı şekilde devreyi eksiksiz kurdum.LCD ve PIC normal olarak çalışıyor fakat benim sorunum algılama kısmında.LDR etrafını kapatmama rağmen hep hatalı okuma alıyorum.Bu algılama sorununun herhangi bir çözümü var mı ? yardımcı olabilirseniz sevinirim.
Beyza büyük ihtimalle lcd bağlantılarını yanlış yapıyorsun.
Texas kullandığın ldr omajı farklı olabilir, ledlerin parlaklığından kaynaklanabilir veya algılamaya çalıştığın renklerin tonu farklıdır programda küçük değişiklikler yaparak okuduğun rengin değerini lcd de göster ve elde ettiğin değerleri kullanarak programı tekrar düzenle.
Kolay gelsin
merhaba konyalı ben alper bu devreyi nasıl yapacağıma dair bilgiler yok sadece resimler ve proglamlar var bağlantıları nasıl yapacağımı bilmiyorum ve ayrıca siz devrede lcd’i lmd61 kullanmışsınız başka bir lcd i kullansak çalışırmı? yardımcı olursanız sevinirim…
bunu 4 renkli yapmak için ne yapmamız gerekiyor ?
Ben bu devreye birde sarı led ekleyerek 12 renk okuyan bi devre yapmıştım ama burda paylaşmaya vaktim olmadı ledlerin aktif olma sırasını ve süreleriyle oynayarak renk sayısını artırabilirsiniz. yani 4 led için (kırmızı,mavi,yeşil,sarı) 14 farklı şekilde sıralama yapabilirsiniz.
4 renk olan benim proje ödevim. ben 4.rengin pic’e girilcek olan direnc aralığını nasıl bulacağım ona karar vermedim mesela demişsiniz 515-525 aralığında. ben sarı rengi eklediğimde nasıl bir aralık yapmam lazım. yardımcı olursanız çok sevinirim yoksa dersten geçemiyorum.
Kırmızı led yak=> ADC oku
Yeşil led yak=> ADC oku
Mavi led yak=> ADC oku
Sarı led yak=> ADC oku
Daha sonra tüm bu ADC değerlerini topla her zaman ayrı renkler için aynı değeri verir o değeride if-else kullanarak kontrol edip hangi renk olduğuna karar verirsin
İyi akşamlar mhb konyalı biz kağanla aynı projeyi yapıyoruz.Baya uğraştık açıkcası bu sene öss de var hocalarımızda hiç yardımcı olmuyor siz yapsanız bize biz gelip onu sizden alma gibi bi imkanımız varmı ? ve bu cidden bizim için çook önemli bir iş sınıfı geçme söz konusu herkes büyük yol kat etti ama bizde hala bir şey yok cevablarsanız beni bahtiyar kılarsınız. İyi akşamlar tekrardan.
merhaba. ben de aynı projeyi 10 cm ile 50 cm arasında çalışan şekilde yapmak istiyorum acaba mümkün olur mu ya da ne çeşit bir led kullanmalıyım? teşekkürler.
@Hale
Ben denemelerimde en fazla 3-4 cm den okuma yaptırabilmiştim. Cisim ile sensör arasında kalan ortamın aydınlık seviyesi LDR yi etkiliyor buda ölçüm sonucunu değiştiriyor. Eğer bir şekilde ortama göre devreyi kalibre edebilirsen sanırım 10cm den okuma yapabilirsin. 50 cm den okuma yapmak için sensör ve ledlerin olduğu başlığa optik(ince, kalın kenarlı mercekler vs) bir aparat yaparak cisimden yansıyan ışığı LDR üzerinde toplaman gerekebilir.
Kolay gelsin
arkadaşlar merhaba ben bu devreyi yapacağım bitirme ödevim olacak yalnız bir sıkıntım var bu delikli plakete yapılan devreyi baskı devrede nereye bağlıyacağuz bilmiyorum yardımcı olursanız sevinirim
merhaba ben bu devreyi yapıyorum.bir kaç sorum var?
picin önünde direnç var o direncin üstünde bir eleman var o nedir?
altta klemenslerin önünde kondansatör var? kaç ohm ve kutupları nedir?
ben ledlere gidecek klemens yollarına direnç bağladım. sizin gibi sensör kısmına direnç kullanmam gerekir mi? yardımcı olursanız sevinirim. şimdiden teşekkürler.
ben bu devreyi yaptım fakat sağlıklı ölçüm yapamıyorum.
mavi ile yeşili ölçtüm kırmızıyı ölçemedim.
sonra kırmızıyı ölçtüm bu sefer herşeye kırmızı demeye başladı.
pic’e tekrar yazılım attım düzeldi mavi-yeşil yapıyordu kırmızı yine yapmadı. şuan hiç birşey ölçmüyor. ne yapmam gerek?