Controllo Bluetooth con 12F675

 

Questo è un semplice controllo tramite bluetooth. La cosa è veloce da implementare usando quei moduli disponibili sul mercato. Con un HC-06 e pochi componenti si crea una facile controllo con la comunicazione di dati via seriale.


Il progetto è un modulo che permette il controllo di 2 relè sulla scheda. Si possono controllare diversi dispositivi sparsi per casa senza dovere passare fili, tramite uno smartphone o computer con il bluetooth.
Posso solo dire che la distanza non è eccellente e ci si deve accontentare di avere la comunicazione entro la stessa stanza.

Descrizione

Un progetto composto da un microcontrollore della Microchip (esattamente il 12F675, 8 piedini), un modulo bluetooth e qualche componente discreto.

È prevista una alimentazione leggermente livellata in entrata di 12 Vdc. Dalla alimentazione a 12 V poi c’è un regolatore a 5 Vdc sulla scheda, per il microcontrollore. Mentre per pilotare le bobine dei relè basterà i 12 Volts.

Inoltre è incluso un partitore per l’ ingresso del modulo HC-06, per compatibilità ai 3,3 Volts usati dal modulo.

Il progetto include alcune peculiarità :

  • Il numero di 2 uscite. Il programma permetterebbe di configurare l’ uso di una.

  • Le uscite sono configurabili attive alte oppure basse. Nel programma per difetto si è assunto uscite attive alte. Per pilotare i relè a bordo. Potrebbe essere in certi casi necessaria l’ opzione attive bassa oppure i relè in logica inversa.

  • Le uscite possono essere configurate sia come fisse che come temporizzate. Il 12F675 si prende cura di tenere il conteggio. Da cui, una volta avviato un conteggio, chi ha inviato il comando potrà anche assentarsi.

  • I comandi si inviano con un breve messaggio e aspetta che siano stati inviati tutti i sei caratteri richiesti per completare la trasmissione.

  • Previsto l’utilizzo di quarzo a 16 MHz oppure a 20 MHz. Basta cambiare la dichiarazione agli inizi del programma col $define XTAL16 (per i 16 MHz) oppure
    $define XTAL20 (per i 20 MHz).


Schema Elettrico

Ovviamente i transistor non sono critici, qualsiasi tipo NPN farà il suo lavoro, comunque devono aver i piedini come i 2N2222, del tipo BC547, per esempio.
L’ alimentatore deve essere da 12 Volt leggermente filtrato e alquanto robusto per alimentare i relé, se alimentati dalla scheda. Meglio che sia da un Ampere.
Nello schema si denota un connettore (4 poli) per alloggiare l’ HC-06.

Lista materiale

     Quantità 
Posizione    Valore   
Specifiche
Condensatori
2 C1-C2 22 pF
2 C3-C4 100µF 16V
Resistenze
1 R1 1k8
1 R2 3k3
2 R4-R5 1k5
Circuiti integrati
1 U1 PIC12F675
1 U2 78L05
Transistor
2 Q1-Q2 2N2222
Diodi
2 D1-D2 1N4148
Varie
1 H1 100 µH
1 J1 Per HC-06
1 J2 Per Alimentazione
2 J3-J4 Per comando relé
1 X1 Quarzo da 16 MHz

Circuito Stampato

SOTTO

SOPRA

ATTENZIONE!!

Lo stampato di sotto è rovesciato, per metterlo sulla faccia ramata tramite trasferimento con il fotoresist o toner a caldo.

Si può scaricare tutto il pacchetto qui.

Descrizione delle funzionalità del programma

Le variabili che permettono di configurare sono le seguenti:

$define ACTIVE_LOW

se viene commentata la linea, le uscite diventano attive alte. I relé che ho usato invece funzionano in logica positiva. Quindi il programma modificato potrebbe valere solo al di fuori di questa scheda.

symbol BUFLEN

se viene alterato si può usare una diversa capacità d’ input dalla seriale. Solo per coloro che intendono modificare il firmware per diversi scopi, entro certi limiti.

symbol PORTMASK

si definisce quelle uscite che non saranno influenzate da una accensione generale.Questo per evitare che comandi che richiedono solo un impulso, possano essere impostati a condizione permanente continua.

symbol NUMTIMER

Il modulo ha 2 relé, perciò c’è messo uno ( che viene contato dall’ indice zero). Nel caso si volesse installare solo un relè, si potrebbe modificare questo parametro.

Come si potrebbe intuire i valori sono stati messi in una lista all’ inizio del firmware. Per coloro che capiscono la programmazione sarà facile da individuare.

I comandi da inviare al controllo sono siffatti:

  1. Per accensione fissa di una uscita si comanda con la lettera maiuscola A o B. Interverra’ il limite imposto da quante uscite s’è configurato con NUMTIMER.

  2. Per lo spegnimento si usa la lettera miniscola a o b . Che opererà sul relativo canale.

  3. Per lo spegnimento di tutte le uscite si usa la lettera x minuscola incluse le uscite temporizzate.

  4. Per l’ accensione di tutte le uscite, si usa la lettera X maiuscola. Saranno escluse quelle definite non accessibili dalla maschera di output.

  5. Per i comandi con i temporizzatori si usa la seguente stringa:
    t
    (carattere iniziale fisso) definizione per indicare un timer, non importa se maiuscola o minuscola.

    0 o 1
    (secondo carattere fisso) definiti dal firmware. ATTENZIONE che l’ HEX carica per 2 uscite. L’indicizzazione parte da zero.

    s o m oppure h
    (terzo carattere fisso) definizione della unita’ misura da impostare. Con s si indica i secondi, m si indicano i minuti e h le ore. Non importa se maiuscola o minuscola.

    da una a tre cifre
    il valora da impostare al timer con la grandezza precedente voluta. Per le ore c’è il limite fissato a 9 ore.

    Riempimento della stringa con spazi
    conclude la stringa ricevuta. quindi con il programma DCmote si dovrà impostare i comandi con un riempimento con spazi fino a 6 caratteri ricevuti.

Per esempio “t1s45 “, si traduce con l’ uscita 2 attiva per 45 secondi. Virgolette escluse e uno spazio dopo in cinque.

Caso limite, inviando un valore zero ad un timer, questo viene concluso

Esiste un altro programma nel pacchetto, che ho usato per inviare un impulso ai comandi del cancello, dato che non serve mantenere premuto di continuo.

VOTO
0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento