Elettro Esperienze

Allarme! Chiudere la porta!


Se vivi in campagna, soprattutto in estate, devi convivere con gli insetti. A partire dalle zanzare, le più fastidiose, continuando con moscerini, o scarafaggi, ragni. Per le finestre esistono le zanzariere, ma per le porte e i portoni può capitare di dimenticare la porta aperta, per qualche minuto, ma anche tutta la notte, risvegliandosi la mattina dopo con punture di insetti veramente spiacevoli.Partendo da questo problema, per esercitarmi sull'utilizzo dei famosi microcontrollori PIC, ho sviluppato questo progetto:Si tratta di un allarme, basato sul PIC 12F675. Lo schema è il seguente: 
Descrizione schema e funzionamento generale:SW2 è un interruttore a pulsante che andrà installato sulla porta. Bisogna far si che quando la porta è chiusa, SW2 è premuto e i contatti sono aperti, ed a causa della resistenza interna di pull-up (da abilitare con i registri Option_reg e WPU) sul pin GP5 si legge lo stato logico 1. Quando invece la porta è aperta, SW2 è rilasciato e i contatti si chiudono portando il pin GP5 a massa (valore logico = 0).Il pic all'accensione legge lo stato della porta GP5 e si comporta di conseguenza.1 - Se GP5 = 1 (porta chiusa) Manda il pic in modalità Sleep. Cioè spegne i circuiti interni, per consumare poca energia, e sta in attensa di un interrupt che lo "svegli" da questa condizione2 - Se Gp5 = 0 (porta aperta) Il pic dapprima fa un conteggio, tramite il registro TMR0, di circa 8 secondi, se dopo questi otto secondi la porta è ancora aperta allora inizia a far suonare l'allarme, mandando in uscita un onda quadra a circa 1000 Hz, con intervalli di 1 secondo di silenzio.L'integrato 7805 serve a portare i 9 volt della batteria a 5 Volt per il PIC.SW1 serve a scollegare l'alimentazione e quindi spegnere completamente il dispositivo. Il codice che fa tutto ciò è il seguente:unsigned short int contatore = 0;void main () {//inizializzazioneTRISIO = 0b00100000;OPTION_REG = 0b00000110;WPU = 0b00100000;INTCON= 0b10101000;IOC =   0b00100000;GPIO = 0;TMR0 = 0;while (1) {if (GPIO.GP5 == 0)   { if (contatore == 255)     {TMR0 = 0;      contatore = 0;      while (GPIO.GP5 == 0) {GPIO.GP0 = 0;                             Delay_us (500);                             GPIO.GP0 = 1;                             Delay_us (500);                             if (contatore == 30) {Delay_ms (1000); contatore = 0;} }}}if (GPIO.GP5 == 1) {asm {sleep} ;}}}void interrupt () {if (INTCON.GPIF == 1) {GPIO.GP0 = 0; INTCON.GPIF = 0; contatore = 0; TMR0 = 0;}if (INTCON.T0IF == 1) {INTCON.T0IF = 0; contatore ++;}}Per programmare il pic ho utilizzato il PICKIT2, e il software MicroC.Ciò che mi piace di questo progetto è l'utilizzo di pochissimi componenti, di nessun resistore o condensatore, di nessun oscillatore esterno, poichè il PIC12f675 possiede un oscillatore interno a 4MHz.   Note importanti:La CONFIGURATION WORD che ho utilizzato è: 0x0194 Per SW2 ho utilizzato un sensore di contatto, come quelli che si utilizzano per i robot: link. Essi hanno tre pin, in maniera tale da poter avere un apertura dei contatti quando viene premuto. Se non si dispone di un pulsante del genere, ma di quello classico, bisognerà modificare leggermente il codice.Lo speaker è un piccolo altoparlante di 8 Ohm recuperato da un giocattolo.GP3 si può settare o come Input o come reset (MCRL), agendo su la configuration word. In questo caso è un Input, quindi è buono portarlo a massa per evitare problemi dovuti al floating.Questo è il circuito alloggiato in un case di plastica:
 Per info TREVIS89@HOTMAIL.ITBYE!