otomatik renk algılamalı konveyör bant

Başlatan yolcu27, 30 Ekim 2017, 22:26:16

yolcu27

merhabalar 320volt sitesindeki lcd ekranlı renk algılama devresini konveyör banda uyarlamaya calıştım.

bant motoru ve ayırıcı motor olarak dedüktörlü dc motor düşündüm. hatta röle ile sürmek istememdeki amac buyuk akım gerektıren motorların kontrolunu saglayabılırlık acısındandır. en kolay olarak pır sensor ıle cısımı rahatlıkla algılarım dıye düşündüm(elımde olması da baska bır sebep)  kodlara eklemeler yaptım sımulasyonda renk algılayamıyorum pır sensor ıcın buton koydum. Ayırıcı motoru ayırma ıslemı yaptıktan sonra eskı konumuna gelmesı ıcın de kod yazdım.  kodları ve semayı eklıyorum.

alogaritma  bant calısmaya baslar pır sensor cisimi algılayınca bant durur bu duran yerde renk algılama sensoru bulunur. cisim rengi tespit edilince bant calısır ve ayırıcı motora getiri cisimi. ayırıcı motor renge göre sağa sola atar yada hareketsiz kalır bant motoru devam eder ve cisimler ayrılır.


klavyemdeki tuşların azizliğinden dolayı özür dilerim.



burada ne gıbı degısıklikler yapabilirim geliştirebilirim yada mantık hataları nelerdir sizden ricam budur


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 
TRISD=%00000001   '     DC MOTOR KONTROL PORTU   ve pır sensor giriş
PORTD=0
'-----------------------------------------------------------------
@ 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
      PORTD.7=1
      if portd.0=1  THEN  ' pır sensor cıkıs verirse
      portd.7=0
      else
      goto ALGILA           ' bant motoru durdur
      endif 
     
      '''''''' ölcüm icin ledler sırası ile yanıyor         
      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:       ' SAĞA ATACAK
      LCDOUT $FE,1,  "C",0,"SM",0,"N RENG",0,"  "     
      LCDOUT $FE,$C0,"==> KIRMIZIDIR"
      portd.7=1         ' bant motoru 2sn calıstı  cisim ayırıcı motora denk geldi
      pause 2000
      portd.7=0         ' bant motoru durdu cisim dusurecek
      PAUSE 100
      PORTD.4=1        ' ayırıcı motor 300ms sağa donecek
      PAUSE 300
      PORTD.4=0        ' ayırıcı motor duracak
      pause 200        ' cisim düştü
      portd.5=1        ' ayırıcı motor eski haline gelmesi lazım
      pause 300        ' eski haline gelmesi 300ms ters yone dondu
      portd.5=0         ' motor 300ms sonra eski haline geldi
      portd.7=1          ' bant motoru calısmaya basladı
      PAUSE 100
      IF TUS=0 THEN GOTO BASLA
      GOTO KIRMIZI_RENK
YESIL_RENK:           ' SOLA ATACAK
      LCDOUT $FE,1,  "C",0,"SM",0,"N RENG",0,"  "     
      LCDOUT $FE,$C0,"==>YESILDIR"
      portd.7=1         ' bant motoru 2sn calıstı
      pause 2000
      portd.7=0         ' bant motoru durdu cisim dusurecek
      PAUSE 100
      PORTD.5=1        'ayırıcı motor 300ms sola donecek
      PAUSE 300         
      PORTD.5=0        ' ayırıcı motor duracak
      pause 200        ' cisim düştü
      portd.4=1        ' ayırıcı motor eski haline gelmesi lazım
      pause 300        ' eski haline gelmesi 300ms ters yone dondu
      portd.4=0         ' motor 300ms sonra eski haline geldi
      PAUSE 100
      portd.7=1          ' bant motoru calısmaya basladı
      IF TUS=0 THEN GOTO BASLA
      GOTO YESIL_RENK
MAVI_RENK:            ' DİREK DEVAM EDECEK
      LCDOUT $FE,1,  "C",0,"SM",0,"N RENG",0,"  "     
      LCDOUT $FE,$C0,"==> MAVIDIR"
      PORTD.7=1         ' bant motoru 5sn calısacak
   
      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



yolcu27

Pir sensör algılama için koyduğum buton bant motorunu durduruyor. Ama renk seçimini simülasyonda yapamadığım için ayrıt edici motorun çalışma şeklini göremedim.

Powered by EzPortal