|
Allarme a Zone |
|
Identificazione progetto
Progetto |
autore |
email |
note |
Tipologia: Allarme a zone con visualizzazione di stato su Display . Tipo
di scheda :Micro_GT equipaggiata con Micro 16f876A |
Aurelio Isoardi (Cuneo) |
isoardi.aurelio@alice.it |
Questo è il mio primo progetto
utilizzando la Micro-GT Mini. L’IDE utilizzato è il Proton
Basic e come programmatore ho usato il
Pic KIT 2 V 1.20 |
Premessa
Salve a tutti mi chiamo Isoardi Aurelio sono un Tecnico di manutenzione Impianti di sicurezza in RFI. Da tempo sono appassionato di elettronica , negli ultimi anni con l’avvento dei micro programmabili mi sono inevitabilmente avvicinato a questo mondo che mi affascina molto. Recentemente ho scoperto e acquistato queste fantastiche schede per prototipi (Micro-GT e la sua sorella più grande, la Versatile IDE .) Premetto che sono completamente autodidatta e con un limitato tempo di applicazione in questa materia e la mia esperienza deriva da riviste e soprattutto da internet da dove attingo la maggior parte delle mie informazioni. Il progetto che vi voglio presentare è assolutamente di formato didattico e vuole descrivere una semplice applicazione di allarme a zone con segnalazione acustica e visiva verso l’utente il quale potrebbe trovare applicazione in locali come ,case , capannoni e con le opportune modifiche su mezzi tipo camper , furgoni , ecc.
Schema
elettrico con descrizione
L’hardware
di questo prototipo è formato da una Micro-GT mini , cuore del sistema con a bordo
un 16f876A opportunamente programmato, da una scheda di riordino alimentazioni
con resistenze di pull up per i sensori magnetici di Zona , un trimmer per il
contrasto del display , un pulsante NA collegato a RB0 del micro (interrupt) il
quale serve a comandare l’attivazione e la disattivazione del sistema , un LCD
16x2 , una Scheda con 4 Relè e 4 pulsanti NO con resistenza pull up da 10k (di recupero da progetti precedenti) con solo
un relè e un pulsante utilizzati , e di
un alimentatore 220-12Vcc. Il programma è stato scritto ed assemblato
utilizzando in Proton Basic e trasferito sul micro con l’ausilio di una scheda
FT650 di Futurel (Futura Elettronica) e PicKit2 V 1.20.
Descrizione
del funzionamento:
La pressione del pulsante NO presente sulla scheda di riordino e collegato a RB0 attiva o disattiva l’antifurto, l’attivazione può avvenire con qualsiasi contatto NO ,telecomandi ,chiavi , schede magnetiche , gsm..….. ne dà avviso del regolare inserimento una serie di 3 beep e una scritta sul display.”Attenzione Allarme Attivo”.Il programma passa subito in”Gestione Ingressi”, e all’apertura di uno dei 3 micro di Zona il Relè 1 “Uscita per la Sirena” si eccita per un tempo di circa 10 sec (tempo impostato per prove) e dalla scritta “Tentato accesso Zona X” dopo 4 cicli esegue una pausa tecnica,”Pausa allarme 5 secondi” questo per non rischiare cicli ravvicinati e all’infinito fastidiosi e illegali nel caso di un reale utilizzo del sistema .La disattivazione in condizioni normali viene segnalata da un beep lungo e dalla scritta “Allarme disattivato”,nel caso in cui il sistema abbia rilevato un’intrusione la disattivazione ne da avviso con un beep lungo seguito da alcuni beep brevi nonche dalla visualizzazione a display della natura e dalla quantità di cicli.”N X Allarmi Zona X” ecc. Qualora l’inserimento avvenisse con una condizione di anomalia di un sensore viene segnalata dal display. L’inserimento è comunque possibile anche con uno o più sensori attivi (es : una finestra aperta) previa pressione di un tasto di conferma _F1_ dopo una segnalazione acustica “Zona X esclusa dal controllo”. Il prototipo è comunque ampliabile e modificabile a piacere per esempio si può far eccitare Relè2 per attivare una chiamata telefonica , aggiungere altre Zone ecc.
Sta solo nella nostra fantasia
e nell’utilizzo che ne vogliamo fare.
Questo
è lo schema del prototipo , alcune parti si riferiscono alla scheda <Micro
GT> il resto è facilmente intuibile.
Circuito
stampato descrizione
Non
sono stati progettati circuiti stampati per questo progetto.
Descrizione
del firmware
Le mie conoscenze in programmazione sono completamente autodidatte ,attingo informazioni dal web e da qualche rivista specializzata. Per la programmazione dei micro sono partito dall’ Assembler e poi sono passato a Proton Basic , ma quando mi sono imbattuto nei tutorial del Dott Gottardo sto muovendo i primi difficili passi con Hitech C .
Vi segnalo questa pubblicazione, poco pubblicizzata, che è una versione estrapolata dall'opera più grande ma comunque molto utile e completa per imparare a programmare in C. IL prezzo è anche molto favorevole.
Visita il sito AMAZON per comprare il libro ONLINE.
Allego
il file sorgente con alcuni commenti .
'***********************************************************************************
'* Name : All_aZone01.bas
'* Autore
: Isoardi Aurelio
'* Notizie : Prototipo didattico con Micro
GT
'*
:
'* Date : 21-12-13
'* Version :
3.0
'* Notes
: Pin di Interrupt su RB0
'* : Testato funziona 06/02/14 ORE
24,00
'* : inserito la possibilita di
disinserire le zone tutte
'* :
'* :
'* :
'* :
'* :
'*
'* Connessioni al
16F876a
'*
;* | MCLR B7 | Lcd D7
;* F1 | A0
B6 | Lcd D6
;* Nc
Button2 | A1 B5 | Lcd D5
;* Nc
Button3 | A2 B4 | Lcd D4
;* Nc
Button4 | A3 B3 | Lcd EN
;* Micro Zona 1 | A4 B2 | Lcd RS
;*
nc | A5 B1 | Backlicht
;*
Ground | - B0 |
Interuttore n/a Interrupt RB0 res 10k a positivo
;*
| Osc 1 + | +5v
;*
| Osc 2 - | Ground
;*
Relay 1 | C0 C7 | nc
;* Nc
Relay 2 | C1 C6 | Buzz
;* Nc
Relay 3 | C2 C5 | Micro Zona
3
;* Nc Relay 4 | C3 C4 | Micro Zona 2
;*
; **********************************************************************************
Declare BOOTLOADER = off
Device 16F876A
Config hs_osc,wdt_off,pwrte_on,BODEN_On,LVP_OFF
ADCON1 = 7 ; disabilita
ingressi analogici
Declare XTAL = 4
Declare SLOW_BUS 0
Declare LCD_TYPE 0
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.2
Declare LCD_INTERFACE 4
Declare LCD_LINES 2
ALL_DIGITAL = true
Symbol F1 PORTA.0
; Pulsante NO per ex zone
Symbol Button2 PORTA.1
; nc
Symbol Button3 PORTA.2
; nc
Symbol Button4 PORTA.3
; nc
Symbol M1 PORTA.4
; Micro NC magnetico Zona 1 sempre a Negativo
Symbol Button6 PORTA.5
; nc
Symbol M2 PORTC.4
; Micro NC magnetico Zona 2 sempre a Negativo
Symbol M3 PORTC.5 ; Micro NC magnetico Zona 3 sempre a
Negativo
Symbol Buzz PORTC.6 ; Buzzer
Symbol Button10 PORTC.7 ; nc
Symbol Backlight
PORTB.1 ; backlight LCD
Symbol Relay1 PORTC.0 ; Relay 1
Sirena Allarme
Symbol Relay2 PORTC.1 ; Relay 2 nc
Symbol Relay3 PORTC.2 ; Relay 3 nc
Symbol Relay4 PORTC.3
; Relay 4 nc
TRISC=%10110000 ;1 = INGRESSO 0 =
USCITA
TRISB=%00000001 ;1 = INGRESSO 0 = USCITA RB0 Interrupt
Cls
Dim Conta_Int As
Byte
Dim Mem_All As
Byte
Dim Conf_IR As
Byte
Dim Carica_Batt As
Byte
Dim All As Byte
Dim Temp As Byte
Dim TempAll As
Byte
Dim Xpos As Byte
Dim Ypos As Byte
Dim Passaggi As
Byte
Dim All1 As Byte
Dim All2 As Byte
Dim All3 As Byte
Dim All4 As Byte
Dim Ex_Zona1 As Byte
Dim Ex_Zona2 As
Byte
Dim EX_Zona3 As
Byte
Dim I As Byte
;*******************************************************************************
ON_INTERRUPT GoTo Interrupt_Routine
GoTo Start
;*******************************************************************************
Start:
Clear INTCON ;
Clear OPTION_REG ;
Clear F1 ;
Clear Button2 ;
Clear Button3 ;
Clear Button4 ;
Clear Button6 ;
Clear Buzz ;
Clear Button10 ;
Clear Relay1 ;
Clear Relay2 ;
Clear Relay3 ;
Clear Relay4 ;
Clear Backlight ;
Clear Temp ;
Clear Passaggi ; numero di passaggi scritta scorrevole
in stand by
Clear All1
Clear All2
Clear All3
Clear All4
Clear M1
Clear M2
Clear M3
Clear Ex_Zona1
Clear Ex_Zona2
Clear EX_Zona3
GoTo Main
'------------------------------------------------------------------------------
'
Subroutine di Interrupt
'------------------------------------------------------------------------------
Interrupt_Routine:
If INTCON.1 = 1 Then GoSub Gest_All 'se RB0 =
0 salta
Clear INTCON.1
Clear INTCON.5
Clear INTCON.2
Clear INTCON.4
INTCON = %10110000
OPTION_REG = %00000111
Context Restore
'------------------------------------------------------------------------------
' Inizio del programma di
gestione allarme
'------------------------------------------------------------------------------
Main:
Clear All1
Clear All2
Clear All3
Clear All4
Clear Relay1
Clear Relay2
Clear Relay3
Clear Relay4
Clear Passaggi
Clear Buzz
Clear Conta_Int
Clear Mem_All
Clear All
Backlight = 1
Print $FE ,2, " Allarme "
;stampa su prima linea
Print $FE ,$C0 ,"
disinserito ! " ;stampa su seconda linea
INTCON = %10110000 'abilita timer e rb0
OPTION_REG =
%00000111
Inc Temp
DelayMS 2000
If Temp
= 5 Then GoSub Scritta1
GoTo Main
'------------------------------------------------------------------------------
' Gestione inserimento
allarme
'------------------------------------------------------------------------------
Gest_All:
Backlight =
1
If All
= 1 Then GoTo Disatt_All 'Se All = 1 disattiva
If All = 0 Then
GoTo Ins_All 'Se All = 0 attiva
Return
'------------------------------------------------------------------------------
' Gestione disattivazione
allarme
'------------------------------------------------------------------------------
Disatt_All:
Buzz = 1
Relay1 = 0
Print $FE ,2, " Disattivazione " 'comunicazione ottico acustica
Print $FE ,$C0 ,"
Allarme ! "
'di avvenuto disinserimento
Backlight = 1 'allarme senza
tentativi di introduzione
DelayMS 2000
If
Mem_All > 0 Then GoSub All_Avv
'salta se sono intervenuti i
micro di zona
Buzz = 0
DelayMS 1000
All = 0
INTCON = %10110000
OPTION_REG =
%00000111
Temp = 0
Clear Ex_Zona1
Clear Ex_Zona2
Clear EX_Zona3
GoTo Main
'------------------------------------------------------------------------------
' Inserimento allarme
'------------------------------------------------------------------------------
Ins_All:
Print $FE ,2, " Attenzione "
'segnalazione ottico acustica
Print $FE ,$C0 ," Allarme
Attivo " 'fase di
inserimento allarme
GoSub Gest_Anom_In
Buzz = 1
DelayMS 1000
Buzz = 0
DelayMS 1000
Buzz = 1
DelayMS 1000
Buzz = 0
DelayMS 1000
Buzz = 1
DelayMS 1000
Buzz = 0
All = 1
INTCON = %10110000
OPTION_REG =
%00000111
DelayMS 5000 'attendo 5 secondi
Temp = 0
GoTo Gest_Ingressi
'------------------------------------------------------------------------------
' Gestione anomalia
sensori ingresso
'------------------------------------------------------------------------------
Gest_Anom_In:
Backlight =
1
If M1 = 1 And Ex_Zona1 = 0 Then
GoSub Avvisa1
If M2
= 1 And Ex_Zona2 = 0 Then GoSub Avvisa2
If M3
= 1 And EX_Zona3 = 0 Then GoSub Avvisa3
Temp = 0
Return
''------------------------------------------------------------------------------
' Gestione degli ingressi
'------------------------------------------------------------------------------
Gest_Ingressi:
Inc Temp
If Temp > 25 Then Backlight = 0
Print $FE
,2, " Gestione "
Print $FE ,$C0
,"
Ingressi "
If M1 = 1 And Ex_Zona1
= 0 Then GoSub Allarme1
If M2
= 1 And Ex_Zona2 = 0 Then GoSub Allarme2
If M3
= 1 And EX_Zona3 = 0 Then GoSub Allarme3
DelayMS 500
GoTo Gest_Ingressi
'------------------------------------------------------------------------------
' Gestione degli allermi
'------------------------------------------------------------------------------
Allarme:
Temp = 0
Relay1 = 1
Inc Mem_All
Inc Conta_Int
DelayMS 10000
Relay1 = 0
If Conta_Int
= 4 Then GoTo Stand_by
DelayMS 3000
Cls
GoTo Gest_Ingressi
'------------------------------------------------------------------------------
' Attesa dopo conteggio
avvenuti allarmi
'------------------------------------------------------------------------------
Stand_by:
Backlight =
1
Print $FE
,2, " Pausa Allarme "
Print $FE ,$C0
," 5 Secondi "
DelayMS 5000
Backlight =
0
Clear Conta_Int
Temp = 0
GoTo Gest_Ingressi
'------------------------------------------------------------------------------
' Segnalazione allarme
avvenuto
'------------------------------------------------------------------------------
All_Avv:
Backlight =
1
Buzz = 1
DelayMS 300
Buzz = 0
DelayMS 300
Buzz = 1
DelayMS 300
Buzz = 0
DelayMS 300
Buzz = 1
DelayMS 300
Buzz = 0
DelayMS 300
Buzz = 1
DelayMS 1000
Buzz = 0
GoSub DispAll
Temp = 0
Return
'-------------------------------------------------------------------------------
' Scritta scorrevole di stand
by
'-------------------------------------------------------------------------------
Scritta1:
Temp = 0
Ypos = 1 ' Start prima linea
For Xpos = 16 To 1 Step
-1 ' loop of 16
Cls ' Clear LCD
Cursor Ypos ,
Xpos ' sposta cursore Ypos,Xpos
Print "Allarme a
Zone "
DelayMS 400
Next
Ypos = 2 ' sposta linea 2
For Xpos = 16 To 1 Step
-1
Cls ' Clear LCD
Cursor Ypos , Xpos ' sposta cursore Ypos,Xpos
Print " By_Iso
"
DelayMS 400
Next
GoTo Scritta2 ' Ripeti
'----------------------------------------------------------------------------
Scritta2:
Ypos =
1
For Xpos
= 16 To 1 Step -1
Cls
Cursor Ypos , Xpos
Print "**Experimenta**"
DelayMS 400
Next
Ypos = 2
For Xpos
= 16 To 1 Step -1
Cls
Cursor Ypos , Xpos
Print "*Micro_GT Board*"
DelayMS 400
Next
DelayMS 1000
Cls
Print $fe,
$7e,$11, $00
DelayMS 2000
Cls
Print $fe, $7c,
$01
DelayMS 2000
Passaggi =
Passaggi + 1
If Passaggi = 3 Then Backlight =
0
Temp = 0
GoTo Scritta1 ' Ripeti per num.
passaggi
'******************************************************************************
'------------------------------------------------------------------------------
' Gestione avviso e allarmi
ingresso 1
'------------------------------------------------------------------------------
'******************************************************************************
'Avvisa in caso
di anomalia (contatto attivo ) durante l'inserimento dell 'antifurto
Avvisa1:
Backlight = 1
For I = 2 To 1
Step -1
Cls
Print $FE ,2, " Anomalia Ingr. "
Print $FE ,$C0 ," Zona1.Ex
Zona1? "
DelayMS 1000
Cls
Print $FE ,2, " Ex Zona1 Premi
"
Print $FE ,$C0
," F1 al Beep "
DelayMS 1000
Buzz = 1
DelayMS 1000
If F1
= 0 Then GoTo Zona1_Off
DelayMS 1000
Buzz = 0
Next I
GoTo Main
'------------------------------------------------------------------------------
' Esclusione zona 1
'------------------------------------------------------------------------------
Zona1_Off:
DelayMS 500
Buzz = 0
I = 0
Ex_Zona1 = 1
DelayMS 1000
Print $FE ,2, " Zona1 Esclusa "
Print $FE ,$C0 ," dal controllo
"
DelayMS 2000
Cls
GoTo Ins_All
'-------------------------------------------------------------------------------
' Accesso alla zona 1
'-------------------------------------------------------------------------------
Allarme1:
Backlight = 1
Print $FE ,2, " Tentato accesso "
Print $FE ,$C0 ," Zona 1
"
Inc All1
GoTo Allarme
End
'******************************************************************************
'------------------------------------------------------------------------------
' Gestione avviso e allarmi
ingresso 2
'------------------------------------------------------------------------------
'******************************************************************************
Avvisa2:
Backlight = 1
For I = 2 To 1
Step -1
Cls
Print $FE ,2, " Anomalia Ingr. "
Print $FE ,$C0 ," Zona1.Ex
Zona2? "
DelayMS 1000
Cls
Print $FE ,2, " Ex Zona2 Premi
"
Print $FE ,$C0
," F1 al Beep "
DelayMS 1000
Buzz = 1
DelayMS 1000
If F1
= 0 Then GoTo Zona2_Off
DelayMS 1000
Buzz = 0
Next I
GoTo Main
'------------------------------------------------------------------------------
' Esclusione zona 2
'------------------------------------------------------------------------------
Zona2_Off:
DelayMS 500
Buzz = 0
I = 0
Ex_Zona2 = 1
DelayMS 1000
Print $FE ,2, " Zona2 Esclusa "
Print $FE ,$C0 ," dal controllo
"
DelayMS 2000
Cls
GoTo Ins_All
'-------------------------------------------------------------------------------
' Accesso alla zona 2
'-------------------------------------------------------------------------------
Allarme2:
Backlight = 1
Print $FE ,2, " Tentato accesso "
Print $FE ,$C0 ," Zona2
"
Inc All2
GoTo Allarme
'******************************************************************************
'------------------------------------------------------------------------------
' Gestione avviso e allarmi
ingresso 3
'------------------------------------------------------------------------------
'******************************************************************************
Avvisa3:
Backlight = 1
For I = 2 To 1
Step -1
Cls
Print $FE ,2, " Anomalia Ingr. "
Print $FE ,$C0 ," Zona1.Ex
Zona3? "
DelayMS 1000
Cls
Print $FE ,2, " Ex Zona3 Premi
"
Print $FE ,$C0
," F1 al Beep "
DelayMS 1000
Buzz = 1
DelayMS 1000
If F1
= 0 Then GoTo Zona3_Off
DelayMS 1000
Buzz = 0
Next I
GoTo Main
'------------------------------------------------------------------------------
' Escusione zona 3
'------------------------------------------------------------------------------
Zona3_Off:
DelayMS 500
Buzz = 0
I = 0
EX_Zona3 = 1
DelayMS 1000
Print $FE ,2, " Zona3 Esclusa "
Print $FE ,$C0 ," dal controllo
"
DelayMS 2000
Cls
GoTo Ins_All
'-------------------------------------------------------------------------------
' Accesso alla zona 3
'-------------------------------------------------------------------------------
Allarme3:
Backlight = 1
Print $FE ,2, " Tentato accesso "
Print $FE ,$C0 ," Zona 3
"
Inc All3
GoTo Allarme
'-------------------------------------------------------------------------------
' DisplAll
'-------------------------------------------------------------------------------
DispAll:
DelayMS 2000
If All1
> 0 Then GoTo Write1
If All2 > 0
Then GoTo Write2
If All3 > 0
Then GoTo Write3
GoTo EndDispl
'-------------------------------------------------------------------------------
Write1:
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All1," allarmi"
Print $FE ,$C0 ," Su zona 1
"
DelayMS 2000
Cls
DelayMS 2000
Print $FE ,2, "N°
",Dec All1," allarmi"
Print $FE ,$C0 ," Su zona 1
"
DelayMS 2000
All1 = 0
GoTo DispAll
'-------------------------------------------------------------------------------
Write2:
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All2," allarmi"
Print $FE ,$C0 ," Su zona 2
"
DelayMS 2000
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All2," allarmi"
Print $FE ,$C0 ," Su zona 2
"
DelayMS 2000
All2 = 0
GoTo DispAll
'-------------------------------------------------------------------------------
Write3:
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All3," allarmi"
Print $FE ,$C0 ," Su zona 3
"
DelayMS 2000
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All3," allarmi"
Print $FE ,$C0 ," Su zona 3
"
DelayMS 2000
All3 = 0
GoTo DispAll
'-------------------------------------------------------------------------------
Write4:
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All4," allarmi"
Print $FE ,$C0 ," Su zona 4
"
DelayMS 2000
Cls
DelayMS 2000
Print $FE
,2, "N° ",Dec All4," allarmi"
Print $FE ,$C0 ," Su zona 4
"
DelayMS 2000
Cls
All4 = 0
GoTo EndDispl
EndDispl:
DelayMS 2000
Temp = 0
Return
'-------------------------------------------------------------------------------
'
'-------------------------------------------------------------------------------
File .Hex
Questo progetto è
ridistribuibile secondo i termini di licenzaCreative
Commons Attribuzione-Condividi allo stesso modo 3.0 Italia
Note
aggiuntive
Spero
che il prototipo sia di vostro gradimento visto che l’impegno da parte mia è stato
notevole e gli addetti al mestiere lo sanno bene,spero ancora di essere presente
su questa community per altri progetti .
Grazie a tutti.
Isoardi
Aurelio