Elektronik / Mikrodenetleyici Projeleri/

PIC16F876 ile lcd göstergeli renk algılama sistemi

Sponsorlu Bağlantılar

PIC16F876 ile Renk algılama sistemi 16f876 mikro denetleyici üzerine kurulu yazılım picbasic pro ile hazırlandı. Renk bilgilerini 2X16 LCD ve ledler ile gösterebiliyor.

Devrenin proteus isis simülasyon şeması

pic16f876-renk-algilama-sistemi-color-sens-isis

RENK-OLC.bas yazılım içeriği


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [E.T.E]                                           *
'*  Notice  : Copyright (c) 2005 Ete]                           *
'*          : All Rights Reserved                               *
'*  Date    : 28.10.2005                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
PORTA=0:PORTB=0:PORTC=0
TRISA=%00000001   'Bit0 ve bit 2 giriş diğerleri çıkış yapıldı
TRISB=0   '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 PIC16F876  'işlemci 16F876
@ DEVICE PIC16F876, WDT_on  'Watch Dog timer açık
@ DEVICE PIC16F876, PWRT_ON 'Power on timer açık
@ DEVICE PIC16F876, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE PIC16F876, 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
'-------------------------------------------------------------------------
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
SARI    var byte
TURUNCU var byte

SYMBOL  TUS=PORTC.7
symbol  LED_KIR=PORTC.0
SYMBOL  LED_YES=PORTC.1
SYMBOL  LED_MAV=PORTC.2
symbol  LED_SAR=PORTC.3
SYMBOL  LED_TUR=PORTC.4

'------------------------------------------------------------------------
LOW PORTB.2  'LCD R/W BACAĞI LOW A ÇEKİLDİ
LCDOUT $FE,1
PAUSE 300 'LCD AKTİF
LCDOUT $FE,1,  " RENK  ALGILAMA "
LCDOUT $FE,$C0,"     SISTEMI    "
PAUSE 500
'------------------------------------------------------------------------
BASLA:
LCDOUT $FE,1,  "CISMI  YERLESTIR"
LCDOUT $FE,$C0,"VE START'A BASIN"
PAUSE 200
IF TUS=0 THEN ALGILA
GOTO BASLA
ALGILA:
GOSUB EKRAN
PORTC=0
HIGH LED_KIR
PAUSE 500
GOSUB ADCAL
KIRMIZI=HAM
PAUSE 200
LOW LED_KIR

HIGH LED_YES
PAUSE 500
GOSUB ADCAL
YESIL=HAM
PAUSE 200
LOW LED_YES

HIGH LED_MAV
PAUSE 500
GOSUB ADCAL
MAVI=HAM
PAUSE 200
LOW LED_MAV

HIGH LED_SAR
PAUSE 500
GOSUB ADCAL
SARI=HAM
PAUSE 200
LOW LED_SAR

HIGH LED_TUR
PAUSE 500
GOSUB ADCAL
TURUNCU=HAM
PAUSE 200
LOW LED_TUR
'-----------------OKUMA OLCME BİTTİ----------------------------------
'      IF KIRMIZI>YESIL THEN
'         IF MAVI>KIRMIZI THEN ENMAVI
'         GOTO ENKIRMIZI
'      ENDIF
'      IF YESIL>KIRMIZI THEN
'         IF MAVI>YESIL THEN ENMAVI
'         GOTO ENYESIL
'      ENDIF
'      IF KIRMIZI=YESIL THEN
'         IF YESIL=MAVI THEN BEYAZ
'      ENDIF
RENK_BUL:
IF KIRMIZI=YESIL THEN
IF YESIL=MAVI THEN
IF MAVI=SARI THEN
IF SARI=TURUNCU THEN BEYAZ
ENDIF
ENDIF
ENDIF

IF YESIL>KIRMIZI THEN IKI
IF MAVI >KIRMIZI THEN UC
IF SARI >KIRMIZI THEN DORT
IF TURUNCU>KIRMIZI THEN BES
GOTO ENKIRMIZI
IKI:
IF MAVI>YESIL THEN UC
IF SARI>YESIL THEN DORT
IF TURUNCU>YESIL THEN BES
GOTO ENYESIL
UC:
IF SARI>MAVI THEN DORT
IF TURUNCU>MAVI THEN BES
GOTO ENMAVI
DORT:
IF TURUNCU>SARI THEN BES
GOTO ENSARI
BES:
IF TURUNCU>0 THEN ENTURUNCU

LCDOUT $FE,1,  "OKUMA VEYA HESAP"
LCDOUT $FE,$C0," HATASI VAR  !!!"
pause 2000
goto ALGILA

ENKIRMIZI:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0,"** KIRMIZIDIR **"
PAUSE 2000
GOTO BASLA
ENYESIL:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0,"*** YESILDIR ***"
PAUSE 2000
GOTO BASLA
ENMAVI:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0," *** MAVIDIR ***"
PAUSE 2000
GOTO BASLA
ENSARI:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0," *** SARIDIR ***"
PAUSE 2000
GOTO BASLA
ENTURUNCU:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0,"** TURUNCUDUR **"
PAUSE 2000
GOTO BASLA
BEYAZ:
LCDOUT $FE,1,  "  CISMIN RENGI  "
LCDOUT $FE,$C0,"*** BEYAZDIR ***"
PAUSE 2000
GOTO BASLA

ADCAL:
ADCIN 0,HAM
BIR:  IF ADCON0.2=1 THEN BIR
RETURN

EKRAN:
LCDOUT $FE,1,  " CISMIN RENGINI "
LCDOUT $FE,$C0,"    ALGILIYOR   "
PAUSE 200
RETURN

END

Projeye ait isis şema ve picbasic kod dosyaları: PIC16F876 ile lcd göstergeli renk algılama sistemi

Dosya indirme LINK listesi (TXT formatında) link-11272.zip şifre-pass: 320volt.com

  • muratk

    merhaba ete,
    tasarlamış olduğun renk algılama devresini için teşekkürler. Güzel bir çalışma. devreyi kurdum fakat çalışmasında sorun çıktı ve düzeltemiyorum. renkleri algılamasında sorun var ve bir türlü doğru rengi algılamıyor. ledleri ve ldryi siyah ve kapalı küçük birkutuya monte ettim. ldr yi cisimden yansıyan ışığı alacak şekilde izole ettim(ledlerden direkt etkilenmesin diye). artık ne yapacağımı bilmiyorum. yardımcı olursan memnun olurum.
    iyi çalışmalar, teşekkürler.

  • ete

    Bu devre tamamen ödev amaçlı tasarlanmış bir devredir. Elbette profesyonel renk algılama devreden beklenemez çok basit bir şey çünkü.
    Ama bunun yanıda da hiç çalışmamasıda beklenemez elbette.

    Sorununuz bir iki şeyden kaynaklanabilir.

    Birincisi kullandığınız LDR ya çok hassas yada çok sağırdır. Bunu değiştirmeyi deneyin lütfen.

    Diğer bir konuda işik şiddeti olabilir. Ledlerin hepsinin aynı akımı şektiğinden emin olmanız herekir. Bir diğerine göre baskın olursa sistem yine doğru çalışmayacaktır.

    Her bir ledi dışarıda 10-15 ma akım çekecek şekilde çalıştırın (5V gerilim vererek ve arada uygun seridirenç kullanarak) Yapmanız gereken şey direnç değerinin 15 ma akım çekecek şekilde ayarlanması olmalıdır. Bütün ledler için bunu uyguladıktan sonra yeniden deneme yapın. Kullandığınız LDR yüzey alanı küçük ise bir büyüğünü kullanmaya çalışın.
    Başkada yapacak bir şeyim yok maalesef.

    Ete