Mini%20microGT_assembled

Allarme a Zone

autor_picture

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.

 

a

 

 

 

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 .

ALL_AZONE01.zip

'***********************************************************************************

'*  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

 ALL_AZONE01.zip

Questo progetto è ridistribuibile secondo i termini di licenzahttp://www.gtronic.it/energiaingioco/it/scienza/cap12_RobotHandV2_file/image025.gifCreative 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    

 

  Pagina precedente