Home > Progetti > Progetto di Impianto di apri-cancello elettrico automatico con barriera a fotocellule e lampeggiante

Progetto di Impianto di apri-cancello elettrico automatico con barriera a fotocellule e lampeggiante


Didasknol – elettronica

Authors

Scopo del progetto:

Lo scopo del progetto è la realizzazione di un impianto di apri-cancello elettrico automatizzato in apertura e chiusura con il riconoscimento del passaggio di ostacoli nella zona di azione del cancello e nel caso, correggere il funzionamento in base all’esigenza verificatasi, con relativa segnalazione del funzionamento dello stesso e dell’intervento di eventuali guasti.

Composizione dell’impianto:

L’impianto è costituito da una serie di dispositivi elettromeccanici ed elettronici riportati nel disegno allegato e qui di seguito elencati:

  • Dispositivo di comando con pulsante a chiave
  • Dispositivo di comando con pulsante a radiocomando
  • Motore asincrono trifase per l’azionamento in avanti e indietro
  • Dispositivo a fotocellule
  • Dispositivo di posizione
  • Condizioni di partenza:
  • Il motore fermo
  • Il pulsante a chiave (in posizione di zero NA)
  • Il pulsante a radiocomando (In posizione di zero NA)
  • Il sensore a fotocellula non attivato(contatti NA;NC)
  • Il dispositivo di posizione FCA non azionato (contatti NA;NC)
  • Il dispositivo di posizione FCC azionato (contatti NC; NA)
  • Lampeggiante spento
  • Lampada di intervento termico spenta
Ciclo di lavoro:
L’operatore aziona con il pulsante a chiave o con il radiocomando il cancello,

  1. esso viene mosso dal motore che si aprirà fino alla massima apertura consentita azionando il lampeggiante
  2. avverrà l’arresto tramite il fine corsa di apertura
  3. per alcuni secondi rimarrà fermo per consentire il passaggio dei mezzi attraverso il cancello
  4. ripartirà nel verso opposto chiudendo il cancello
  5. se si trova, in fase di chiusura, un ostacolo nel raggio di azione del cancello esso si arresta
  6. resta pochi secondi fermo
  7. riparte nel senso di apertura riprendendo dal ciclo 1
  8. se nessun ostacolo è presente, il cancello arriverà alla massima chiusura consentita
  9. avverrà l’arresto con lo spegnimento del lampeggiante.
Anomalie:
L’impianto deve fermarsi e si deve attivare la lampada di segnalazione Ltermic al verificarsi delle seguenti anomalie:
a) L’intervento del relè termico a protezione del motore.
Nota:
Al candidato si richiede la progettazione dell’impianto assegnato, ed in particolare:

     a)      Dimostrare la corretta e completa comprensione del progetto assegnato realizzando:

·         Il flow chart dell’impianto

b)       Programmazione in linguaggio MikroBasic – Assembler

c)       Verifica del funzionamento, mediante EasyPic5

 Il candidato può utilizzare il linguaggio più congeniale per la programmazione, riportando il listato in Mikrobasic e in Assembler, inoltre dovrà riportare la tabella degli indirizzi I/O utilizzati del PIC, attenendosi sempre al nome simbolico assegnato nella tabella allegata. Bisogna riportare inoltre uno schema di un prototipo di impianto di apricancello e lo schema elettrico del circuito del PIC.

Indirizzamento I/O

Schema elettrico

Listato in MiKroBasic per PIC 16F887

program cancelloAut
‘Progetto di cancello automatico con l’utilizzo del PIC16F887
‘Prof. Francesco Spina
dim stato as byte    ‘variabile di comodo che memorizza lo stato di avvio
dim stopa as byte    ‘variabile di comodo che memorizza lo stato del FCA
dim arresta as byte  ‘variabile di comodo che memorizza lo stato del FCC
Sub procedure lampeggio() ‘ sub che effettua il lampeggio
portc.7 = not portc.7
delay_ms(500)
end sub
sub procedure prot()      ‘sub che verifica l’intervento del termico
if portc.2=1 then
portb=%00000001         ‘segnala il guasto con l’accensione di RB0
portc=0
arresta=0
stopa=0
stato=0
end if
end sub
sub procedure avvia()    ‘sub che verifica l’avvio del cancello tramite
if (portc.0=1) or (portc.1=1) then ‘radiocomando e interruttore a chiave
stato=1
portb.5=1
end if
end sub
sub procedure fca()   ‘sub che verifica il finecorsa di apertura
if portc.3=1 then
stopa=1
end if
end sub
sub procedure alt()  ‘sub che verifica il finecorsa di chiusura
if portc.4=1 then
arresta=1
end if
end sub
sub procedure foto() ‘sub che verifica la fotocellula in chiusura
if (portc.5=1) and (portb.6=1) then
stopa=0
portb.6=0
delay_ms(500)
portb.5=1
end if
end sub
main:
TRISB=%00000000    ‘imposta la porta B come uscite
TRISC=%01111111    ‘imposta la porta C come ingressi ad esclusione della 7
PORTB=0            ‘azzera la porta B
PORTC=0            ‘azzera la porta C
stato=0            ‘azzera la variabile stato
stopa=0            ‘azzera la variabile stopa
arresta=0          ‘azzera la variabile arresta
inizio:
avvia()            ‘richiama la sub avvia
prot()             ‘richiama la sub prot
if stato = 1 then  ‘verifica la variabile stato e avvia l’impianto
fca()
lampeggio()  ‘richiama la sub lampeggio
if stopa = 1 then ‘verifica la variabile stopa ed esegue i successivi
portb.5=0
delay_ms(300)
portb.6=1
alt()
foto()
if (arresta = 1)  then ‘verifica la variabile arresta e ferma
portb.5=0              ‘tutto
portb.6=0
portc.7=0
delay_ms(30)
goto main
end if
end if
end if
goto inizio
end.

Listato in Assembly per PIC 16F887

cancelloAut_lampeggio:
;cancelloAut.mbas,5 ::                 Sub procedure lampeggio()
;cancelloAut.mbas,6 ::                 portc.7 = not portc.7
MOVLW      128
XORWF      PORTC+0, 1
;cancelloAut.mbas,7 ::                 delay_ms(500)
MOVLW      6
MOVWF      R11+0
MOVLW      19
MOVWF      R12+0
MOVLW      173
MOVWF      R13+0
L_cancelloAut_lampeggio1:
DECFSZ     R13+0, 1
GOTO       L_cancelloAut_lampeggio1
DECFSZ     R12+0, 1
GOTO       L_cancelloAut_lampeggio1
DECFSZ     R11+0, 1
GOTO       L_cancelloAut_lampeggio1
NOP
NOP
RETURN
; end of cancelloAut_lampeggio
cancelloAut_prot:
;cancelloAut.mbas,9 ::                 sub procedure prot()
;cancelloAut.mbas,10 ::                 if portc.2=1 then
BTFSS      PORTC+0, 2
GOTO       L_cancelloAut_prot4
;cancelloAut.mbas,11 ::                 portb=%00000001
MOVLW      1
MOVWF      PORTB+0
;cancelloAut.mbas,12 ::                 portc=0
CLRF       PORTC+0
;cancelloAut.mbas,13 ::                 arresta=0
CLRF       _arresta+0
;cancelloAut.mbas,14 ::                 stopa=0
CLRF       _stopa+0
;cancelloAut.mbas,15 ::                 stato=0
CLRF       _stato+0
L_cancelloAut_prot4:
;cancelloAut.mbas,16 ::                 end if
RETURN
; end of cancelloAut_prot
cancelloAut_avvia:
;cancelloAut.mbas,18 ::                 sub procedure avvia()
;cancelloAut.mbas,19 ::                 if (portc.0=1) or (portc.1=1) then
BTFSC      PORTC+0, 0
GOTO       L_cancelloAut_avvia38
BCF        114, 0
GOTO       L_cancelloAut_avvia39
L_cancelloAut_avvia38:
BSF        114, 0
L_cancelloAut_avvia39:
CLRF       R1+0
BTFSS      PORTC+0, 1
GOTO       L_cancelloAut_avvia10
MOVLW      255
MOVWF      R1+0
L_cancelloAut_avvia10:
CLRF       R0+0
BTFSC      114, 0
INCF       R0+0, 1
MOVF       R1+0, 0
IORWF      R0+0, 1
BTFSC      STATUS+0, 2
GOTO       L_cancelloAut_avvia8
;cancelloAut.mbas,20 ::                 stato=1
MOVLW      1
MOVWF      _stato+0
;cancelloAut.mbas,21 ::                 portb.5=1
BSF        PORTB+0, 5
L_cancelloAut_avvia8:
;cancelloAut.mbas,22 ::                 end if
RETURN
; end of cancelloAut_avvia
cancelloAut_fca:
;cancelloAut.mbas,24 ::                 sub procedure fca()
;cancelloAut.mbas,25 ::                 if portc.3=1 then
BTFSS      PORTC+0, 3
GOTO       L_cancelloAut_fca13
;cancelloAut.mbas,26 ::                 stopa=1
MOVLW      1
MOVWF      _stopa+0
L_cancelloAut_fca13:
;cancelloAut.mbas,27 ::                 end if
RETURN
; end of cancelloAut_fca
cancelloAut_alt:
;cancelloAut.mbas,29 ::                 sub procedure alt()
;cancelloAut.mbas,30 ::                 if portc.4=1 then
BTFSS      PORTC+0, 4
GOTO       L_cancelloAut_alt17
;cancelloAut.mbas,31 ::                 arresta=1
MOVLW      1
MOVWF      _arresta+0
L_cancelloAut_alt17:
;cancelloAut.mbas,32 ::                 end if
RETURN
; end of cancelloAut_alt
cancelloAut_foto:
;cancelloAut.mbas,34 ::                 sub procedure foto()
;cancelloAut.mbas,35 ::                 if (portc.5=1) and (portb.6=1) then
BTFSC      PORTC+0, 5
GOTO       L_cancelloAut_foto40
BCF        114, 0
GOTO       L_cancelloAut_foto41
L_cancelloAut_foto40:
BSF        114, 0
L_cancelloAut_foto41:
CLRF       R1+0
BTFSS      PORTB+0, 6
GOTO       L_cancelloAut_foto23
MOVLW      255
MOVWF      R1+0
L_cancelloAut_foto23:
CLRF       R0+0
BTFSC      114, 0
INCF       R0+0, 1
MOVF       R1+0, 0
ANDWF      R0+0, 1
BTFSC      STATUS+0, 2
GOTO       L_cancelloAut_foto21
;cancelloAut.mbas,36 ::                 stopa=0
CLRF       _stopa+0
;cancelloAut.mbas,37 ::                 portb.6=0
BCF        PORTB+0, 6
;cancelloAut.mbas,38 ::                 delay_ms(500)
MOVLW      6
MOVWF      R11+0
MOVLW      19
MOVWF      R12+0
MOVLW      173
MOVWF      R13+0
L_cancelloAut_foto24:
DECFSZ     R13+0, 1
GOTO       L_cancelloAut_foto24
DECFSZ     R12+0, 1
GOTO       L_cancelloAut_foto24
DECFSZ     R11+0, 1
GOTO       L_cancelloAut_foto24
NOP
NOP
;cancelloAut.mbas,39 ::                 portb.5=1
BSF        PORTB+0, 5
L_cancelloAut_foto21:
;cancelloAut.mbas,40 ::                 end if
RETURN
; end of cancelloAut_foto
_main:
;cancelloAut.mbas,42 ::                 main:
;cancelloAut.mbas,43 ::                 TRISB=%00000000
CLRF       TRISB+0
;cancelloAut.mbas,44 ::                 TRISC=%01111111
MOVLW      127
MOVWF      TRISC+0
;cancelloAut.mbas,45 ::                 PORTB=0
CLRF       PORTB+0
;cancelloAut.mbas,46 ::                 PORTC=0
CLRF       PORTC+0
;cancelloAut.mbas,47 ::                 stato=0
CLRF       _stato+0
;cancelloAut.mbas,48 ::                 stopa=0
CLRF       _stopa+0
;cancelloAut.mbas,49 ::                 arresta=0
CLRF       _arresta+0
;cancelloAut.mbas,50 ::                 inizio:
L__main_inizio:
;cancelloAut.mbas,51 ::                 avvia()
CALL       cancelloAut_avvia+0
;cancelloAut.mbas,52 ::                 prot()
CALL       cancelloAut_prot+0
;cancelloAut.mbas,53 ::                 if stato = 1 then
MOVF       _stato+0, 0
XORLW      1
BTFSS      STATUS+0, 2
GOTO       L__main28
;cancelloAut.mbas,54 ::                 fca()
CALL       cancelloAut_fca+0
;cancelloAut.mbas,55 ::                 lampeggio()
CALL       cancelloAut_lampeggio+0
;cancelloAut.mbas,56 ::                 if stopa = 1 then
MOVF       _stopa+0, 0
XORLW      1
BTFSS      STATUS+0, 2
GOTO       L__main31
;cancelloAut.mbas,57 ::                 portb.5=0
BCF        PORTB+0, 5
;cancelloAut.mbas,58 ::                 delay_ms(300)
MOVLW      4
MOVWF      R11+0
MOVLW      12
MOVWF      R12+0
MOVLW      51
MOVWF      R13+0
L__main33:
DECFSZ     R13+0, 1
GOTO       L__main33
DECFSZ     R12+0, 1
GOTO       L__main33
DECFSZ     R11+0, 1
GOTO       L__main33
NOP
NOP
;cancelloAut.mbas,59 ::                 portb.6=1
BSF        PORTB+0, 6
;cancelloAut.mbas,60 ::                 alt()
CALL       cancelloAut_alt+0
;cancelloAut.mbas,61 ::                 foto()
CALL       cancelloAut_foto+0
;cancelloAut.mbas,62 ::                 if (arresta = 1)  then
MOVF       _arresta+0, 0
XORLW      1
BTFSS      STATUS+0, 2
GOTO       L__main35
;cancelloAut.mbas,63 ::                 portb.5=0
BCF        PORTB+0, 5
;cancelloAut.mbas,64 ::                 portb.6=0
BCF        PORTB+0, 6
;cancelloAut.mbas,65 ::                 portc.7=0
BCF        PORTC+0, 7
;cancelloAut.mbas,66 ::                 delay_ms(30)
MOVLW      78
MOVWF      R12+0
MOVLW      235
MOVWF      R13+0
L__main37:
DECFSZ     R13+0, 1
GOTO       L__main37
DECFSZ     R12+0, 1
GOTO       L__main37
;cancelloAut.mbas,67 ::                 goto main
GOTO       _main+0
L__main35:
;cancelloAut.mbas,68 ::                 end if
L__main31:
;cancelloAut.mbas,69 ::                 end if
L__main28:
;cancelloAut.mbas,71 ::                 goto inizio
GOTO       L__main_inizio
GOTO       $+0
; end of _main
*************************************************************************

Formato .HEX

:100000004728FF3FFF3FFF3F063003138312FC00EA
:10001000FF30FB00FF30FA00FC0B0F281628FB0B0B
:1000200012281528FA0B12280F280C281A30FB006A
:10003000FF30FA00FB0B1D282028FA0B1D281A2878
:100040004230FA00FA0B2228000086170630FC0026
:10005000FF30FB00FF30FA00FC0B2F283628FB0B8B
:1000600032283528FA0B32282F282C281A30FB008A
:10007000FF30FA00FB0B3D284028FA0B3D283A28B8
:100080004230FA00FA0B42280000861308000330C1
:10009000031383168600FF30870083122008023A7C
:1000A000031D5428042086164D285528FF3FFF3F86
:04400E00F22FFFFF8F
:00000001FF

*************************************************************************

Flow Chart

Programma principale
Sub procedure
About these ads
Categorie: Progetti
  1. 24 aprile 2013 alle 06:27

    Fabulous, what a blog it is! This web site gives helpful information to us, keep it up.

  2. Claudio
    28 maggio 2013 alle 08:40

    Brilliant article. Thank you so much!

  3. 28 settembre 2013 alle 18:21

    Hi, I do believe this is a great site. I stumbledupon it ;
    ) I will come back yet again since i have bookmarked it.
    Money and freedom is the greatest way to change, may you be rich and continue to guide others.

  1. No trackbacks yet.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

%d blogger cliccano Mi Piace per questo: