Ifrim Valentin Personal Web Page
 


Microcontrollori / Campanello

 

         
 

Il campanello intelligente

 
   

Questo progetto ha al centro un microcontrollore PIC12F675 e ha lo scopo di monitorizzare il campanello all'entrata di un appartamento - più precisamente ha le seguenti utilità:

 
   

indipendentemente di quanto tempo si preme il pulsante del campanello questo suona finché si risponde al citofono o si apre la porta, ma non suona più di 30 secondi;
se non si risponde in quei 30 secondi questo fatto sarà percepito come un appello perduto e sarà memorizzato;
avverte quando la porta resta aperta per più di 15 secondi;
mostra il numero di chiamate persi (quante volte siamo stati cercati e nessuno ha risposto)

 
         
    HARDWARE  
         
    - Il circuito è alimentato da una sorgente di tensione continua di approssimativamente 8V (7- 11V) e 30-40mA, ho usato un caricabatterie di un cellulare Nokia 3410 ( o Nokia 3XXX).
- Il microcontrollore si può programmare In Circuito con un programmatore che si connetta al connettore SL1 (Main board). Il programmatore deve avere i piedini come nello schema (ICSP). Si raccomanda per il montaggio di non alimentare nel momento di programmazione.
- !! Per collegare la schedina al campanello che funziona a 220V si usa una piccola scheda con foto-accoppiatore (OK2) che è montato vicino al campanello e si usa per separare il montaggio (Main board) dalla rete elettrica di 220V~ !!!
- La stessa cosa bisogna fare anche per collegare la schedina al citofono (con foto-accoppiatore OK1)

- Si possono escludere le due schedine descritte sopra se non si usa questo progetto per monitorizzare il campanello (o il citofono) già esistente. In questo caso si usa il pulsante S2 (e il progetto funziona da solo come un campanello).
- L'interruttore S3 si colloca sotto il ricettore del citofono se si desidera che il campanello si fermi quando si alza il ricettore.
- L'interruttore S4 (Clear) ha ruolo di fermare la seguenza di segnali ottici e acustici, che segnalano il numero di chiamate senza risposta.
- L'interruttore S1 (Door) si colloca alla porta e in situazione "normale chiuso" quando questa è chiusa. Quando si apre la porta si apre anche S1.
- Per avvertire si fa uso di un Buzzer (piezo ceramic audio transducer) - SG1.
 
    L'annuncio di chiamate perse si fa con il led rosso (D4) che lampeggia quante volte siamo stati cercati e non ha risposto nessuno. La numerazione comincia dopo il segnale acustico e dopo che si spegne il led verde.  
   
   

L'elenco dei componenti elettronici

Main board:
R1 = 100; R2 = 470; R3 = 10k; C1 =22uF/16V; C2=10uF/6.3V; C3=1uF/6,3V;
D1 = 1N4148; D3 = 3mm Green LED; D4 = 3mm Red LED;
IC1 = PIC12F675; SG1 = Piezo Ceramic Audio Transducer
Out door:
R4, 5, 6, 7 = 470; R8, 9 = 10k/0.5W; R10 = 5k6(6k8); R11, 12 = 1k; R13 = 330;
C4 = 1uF/400V; C5 ,6 = 22uF/35V; C7 = 4,7uF/35V; C8 = 10uF/16V;
U$1 = 1.3W/30V Zenerdiode; B2 = 4x1N4007; B1 = 4x1N4007
OK1, 2 = 4N35

 
         
    SOFTWARE  
         
    Il programma per PIC12F675 è scritto con MPLAB (dal sito www.microchip.com scaricatevi l'ultima versione dell' MPLAB) .
Semplificato, l'algoritmo è il seguente :
 
     
    Config Word è '0x31C4' o per meglio dire
_CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

Il microcontrollore come si vede funziona con l'oscillatore interno. Questo deve essere calibrato mettendo nel registro OSCCAL il valore scritto del produttore nell'ultima locazione di memoria programma . Più precisamente all' indirizzo 0x3FF si trova l'istruzione RETLW 0xXX dove 0xXX è il valore scritto del produttore.
E' indicato prima della programmazione del PIC12F675 di leggere il valore scritto dal produttore (all'indirizzo 0x3FF) e di salvarlo per evitare di perdere questo dato.
Io ho scritto quest' istruzione ( RETLW 0xXX ) all' indirizzo 0x3FE per evitare un eventuale conflitto con qualche tipo di programmatore che non voglia scrivere l'indirizzo 0x3FF (nel caso di PIC16F675 ).
Per maggiori dettagli studiate il datasheet del PIC16F675.
 
   
La parte del programma che si occupa della calibrazione dell'oscillatore interno
..........    
CALL 0x3FE ; retrieve factory calibration value
BANK1    
MOVWF OSCCAL ; update register with factory cal value
...........    
...........    
ORG 0x3FE  
RETLW b'01000000' ; calibration value
END   ; directive 'end of program'
 
         
   

Per capire meglio il programma si usa qualche 'macro'.
Il file "bank.inc" contiene il macro per selezionare i banchi di memoria ( BANK1 e BANK2)
Il file "beep.inc" contiene il macro per generare i suoni e per gestire i LED come segue:
"BEEP x y" -- Genera una nota (suono) dove x è frequenza del souno e y è la durata ;
"LED_off" -- LED off ;
"LED_g" -- LED verde on ;
"LED_r" -- LED rosso on ;

Il file "Wait_i.inc" contiene il macro"WAIT x" (per il ritardo) dove Waittime = x * prescaler .
Nel nostro caso il prescaler ha il valore 0x03 (1:16) => Waittime =(4,09 * x) ms.

 
         
    Download  
   

File compressi campanello.zip (16Kb) -- contenente i file sorgenti del programma (main.asm, beep.inc etc..)

 
       
Inizio della pagina
Termini e condizioni
Copyright ©2013 Ifrimv      Site designed by Ifrim Valentin