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
güzel çalışma kpss sınavı bitirince yapmak isterim
merhaba
benim da bu devre gibisi var ama \” avr \” la hazir lanmis.
link:
http://bahramelectronic.com/1388-01-01-13-00-33/1388-01-16-21-25-21/8-avr
teşekkür ederim bahram arapça olduğu için pek bişey anlamadım ama yinede sağol
Konyalı kardeşim bu baskı devrede lcdyi nasıl bağlayacağız baskı devre üzerinde numaralandır hele bir de picin 33 bacağı kullanılmadığı halde baskı devrede yol yapılmış açıklarmısın devreyi yapacamda
arkadaşım yazıda da belirttiğim gibi baskı devre aslında kronometre ve geri sayım sayıcı devresinin kartı o yüzden bazı pinler açıkta kalıyor. lcd ve diğer tüm bağlantılara ait açıklama ve şemalar yazıda belirtilmiş direk pinler yazmıyor ama sanırım şemadan ve pic yazılımdan yararlanarak bulabilirsiniz. kolay gelsin
Bu devreyi hazır çalışır vazıyette nasıl bulabiliriz yardımcı olurmusunuz
sanırım hiçbi yerde bulamazsınız birilerine yaptırmanız gerekir konya veya çevresindeyseniz ben yardımcı olurum
konyalı arkadaşım sensör kısmında trimpot kullanmışsın doğrumudur hiç bu kısımdan bahsetmemişsin bu trimpot ne için kullanılacak.similasyon devresinde ldr simgesi olarak anladım
Arkadaşım devreyi yaptım hazır dorumda yanlız trimpot koymamışım şimdi bu trimpotu smilasyona göre anlatırsam LDRnin bir ucunu 5vta bağlı 470ohm direncin ucuna diğer ucunu potun 1.ucuna bağlayacam. Öyle anladım yazıdan bir yardımcı olabilirseniz çok iyi olur.
arkadaşım o trimpotu normalde ortamnın aydınlığına göre devreyi kalibre etmek için koymuştum sonra uygulamada anlamsız olduğunu gördüm. haklısın o konu hakkında birşey yazmamışım kusura bakmayın. Bu arada ldr ‘yi direkt 5v a bağlarsanız daha rahat okuyor yani bir ucu 5v diğer ucu toprak olacak şekilde.
merhaba arkadaşım devre rengi algılamadı ne yapmalıyım.ldr bağlantısını resimdeki gibi yaptım doğrumudur.Rengin sinyal tablosunu nasıl çıkardın biraz bahsetsen belki benim ldrnin direnç değerleri uymuyordur.ben kendi değerleri girsem.benim ldr biraz daha büyük farkedermi.ldrnin bağlantı resmi link link
Arkadaşlar bu devreyi mayıs(2009) sonuna kadar bu devreyi çalışır biçimde bulmam lazım
elinizde hazır varsa veya mayıs sonuna kadar yapabilirseniz bana bu adresten mail atın
konyalı arkadaşım snde varsa ekle beni konuşalım
key_20@mynet.com
selam arkadaşım ben myo 2. sınıf öğrencisiyim ve sistem analizi dersinde proje olarak bu devreyi aldım yanlız bir sorunum var ne yaptıysam açılışta lcd de görüntü alamadım bir de mclr yi boşta bırakmışsın bundan dolayı bir problem olur mu? yardım edersen sevinirim bu cuma teslim edicem bir fikrin varsa
buyaz2005@hotmail.com
dan bana ulaşabilirsin şimdiden teşekkürler…
Arkadaşlar ldr ve ledlerin açık bağlantısı var mı? ve devreye nasıl bağlayacağız,
ldr ve led bağlantılarını devre şemasına bakarak yapabilirsiniz picin gerekli pinlerine 3 led ve 3 direnci seri bağlayın ldr yide şekildeki gibi ortalarına denk gelecek şekilde lehimleyin
kolay gelsin
Selam konyalı arkadaşım bende konyadanım bu projeyi yaptım ama ekrandan görüntü alamadım önümüzdeki hafta hocaya teslim edeceğim bana çok acil yardım gerekiyor fbli_dj_musti@hotmail.com
devrenini hex kodunu tam olarak verebilecek olan var mı ?
mplab ile dermeye çalıştık sürekli sorun oldu.
Yardımlarınızı rica ediyorum
Dosya içinde .hex yazılımı var
hex kodu hata veriyor. Yani devre çalışmıyor. ayrıca devrede kullanılan ldr kaç k ohm luk ?
İsis programında ldr olmadığı için simülasyonda potans kullanılmış devrede kullanılan “LDR” standart ben hiç omajlarını sormadım şimdiye kadar :) neredeyse tüm malzemecilerde aynı tip bulunur kritik bir parça değil hex yazılımı için bir şey söyliyemem programlama bilgim yok “Konyalı ” arkadaşımız bilir ama hex yazılımı ne gibi bir hata hata veriyor simülasyon sırasındamı hata veriyor yoksa pic`e yazarkenmi birde buradaki projeyi incelemenizi öneririm iyi çalışmalar
Nasıl önemli değil ? Asm kodlarında direnç değerlerine göre renk kararı veriliyor. Aynı ışık alında 5 K lık ldr ile 10 K’lık ldr nin göstereceği değerler farklı oluyor. Dolayısı ile hata alıyoruz. Asm içinde değişim yapalım dedim . Ama burda verilen asm ile proje dosyasında verilen asm birbiriden çok farklı.
Ayrıca devre isis simülasyonu sırasında da okuma hatalı veriyor. Bu konuda yardımlarınızı rica ediyorum
ldr nin omajını bilmiyorum ama farklı bile olsa okunan ADC değerlerini kendinize göre ayarlayarak sonuç elde edebilirsiniz. Ayrıca hex dosyası nasıl bi hata verdi ben aynı dosyayı kullandım ve sorun olmadı. Ekranda görüntü alamama problemi büyük ihtimalle bağlantı uçlarınız doğru değildir yada kontrast problemiz vardır. Kaynak kodu mblap ta derleyemezsiniz çünkü picbasic ile yazdım dolayısıyla microcode studio plus veya muadili bi yazılım kullanmalısınız.
Kolay gelsin
IF KIRMIZI+YESIL+MAVI=>490 AND KIRMIZI+YESIL+MAVI=505 AND KIRMIZI+YESIL+MAVI=515 AND KIRMIZI+YESIL+MAVI=<525 THEN GOTO MAVI_RENK
işlemci algılanan rengi burada çözüyor. Yani 500,515,525 gibi değerleri kendiniz ldr değerinize göre belirtmelisiniz. Yazıda zaten bu değerlerin nasıl bulunduğu anlatılıyor. Ayrıca sizin düzenlemeye çalıştığınız asm kod picbasic derleyicisinin ürettiği asm kodlardır. Dolayısıyla asıl picbasic kodu dururken o kodlarla uğraşmak vakit kaybı. Devre isiste çalışmıyor doğrudur belirtilen adc değerlerini üretecek değerde bi pot koyarsanız çalışır :D
Arkadaşlar; bu devreyi yalnız 3 renkle sınırlı olmadan tüm renkleri algılayabilecek şekilde yapabilirsiniz. Size tavsiyen oldukça başarılı bulduğum TAOS firmasınca üretilen TCS230 renk sensörünü kullanmanız. Başarılar dilerim.
Pic’in ADC’si sağ olsun :D