CONTROLLO BLUETOOTH RELE’


Progetto Composto da Arduino Nano, un Modulo Bluetooth ed un Modulo di Relè Opto-isolato Controllati da Utente…


 
 
 
 




 

INTRO
Con un po’ di tempo a disposizione ho pensato di mettere su un controllo tramite bluetooth. La cosa è alquanto semplice usando quei moduli disponibili
sul mercato. Io ho preso un HC-06, che permette la semplice comunicazione di dati via seriale.
Avevo provato anche con un PIC 16F84A, con discreto successo, ma per problemi di programmazione del microcontrollore ho sospeso il progetto. Mi
prometto di riprenderlo presto.
E’ una semplice operazione di collegare le uscite dell’ Arduino con i seguenti moduli e una manciata di componenti discreti per pilotare un alto-parlante e quella di togliere l’ alimentazione al modulo Bluetooth per poter disconnettere da dispositivi quando si dimentica connessi.

DESCRIZIONE
Un progetto composto da Arduino Nano, un modulo Bluetooth ed un modulo di rele’ opto-isolato. Il progetto include alcune peculiarità :
•Il numero di uscite e le porte sono configurabili tramite firmware. Bisogna aggiustare 2 variabili [1].
•Le uscite sono configurabili attive alte oppure attive basse. Nel programma per difetto si è assunto uscite attive basse.
•Le uscite possono essere configurate sia come fisse che come temporizzate. L’ Arduino si prende cura di tenere il conteggio, anche se
chi ha invito il comando non è più presente. Faccio presente perché ho notato programmi di temporizzazione tramite lo smartphone. Quello
implica una costante connessione con il telefono.
•I comandi [2] si inviano con un comando tramite carattere spazio oppure con carattere di ritorno-a-capo, al limite quando sono stati inviati
6 caratteri. Perchè questo, per il semplice fatto che molti programmi, per Android, non danno la possibilità di aggiungere caratteri non
stampabili come il ritorno-a-capo. Io ho scelto il programma DCmote. Alquanto spartano per la configurazione, ma del resto semplice da capire. Soprattutto per quelli che non sanno tanto l’ uso di funzioni complicate dello smartphone. L’interfaccia e semplificata al massimo e permette di accedere
velocemente ai comandi, dopo aver connesso al controllo.
•Il controllo disconnette l’ utente inattivo (senza invio caratteri) dopo 30 secondi. Questo permette ad altri utenti di poter accedere al controllo.
Forse è più una lacuna del ricevitore bluetooth, che piuttosto una miglioria. In tal modo se uno si dimentica la connessione attiva, viene
disconnesso e gli altri membri (della mia famiglia) potranno accedere ai comandi.


•Il lampeggio, tanto per vedere che il sistema è attivo e funzionante.
•Un comando per suonare un allarme od altro suono.
Le postille [1] e [2] vedasi più in basso.
 




 

SCHEMA ELETTRICO
Ovviamente i transistor non sono critici, qualsiasi tipo NPN e PNP faranno il lavoro. La R2 è un valore di 330 Ohm, tanto da pilotare un led da mettere sul
pannello del contenitore. I jumpers serviranno per la programmazione in loco, togliendoli si potrebbe programmare
l’ Arduino, senza interferenze. Ma la sconsiglierei tanto che io ho previsto degli zoccoli per accomodare il Nano. Si eviteranno possibili fughe di
tensione verso l’ alimentatore. L’ alimentatore deve essere da 5 Volt stabilizzato e alquanto robusto per
alimentare i relé, se alimentati dalla scheda. Meglio che sia da un Ampere. L’ Arduino non e’ incluso nello stampato. Nello schema si denota una serie di
connettori (4 da 8 poli) per alloggiare l’ Arduino.
 





 

CIRCUITI STAMPATI
SOTTO:


SOPRA:


ATTENZIONE!!
Lo stampato di sotto è corretto, per metterlo sulla faccia ramata.
 
DESCRIZIONE FUNZIONALITA’ DEL PROGRAMMA
Come definito dalle peculiarità si può anche modificare il firmware per ottenere la flessibilità voluta
Le variabili che permettono di configurare sono le seguenti:
#define ACTIVE_LOW se viene venisse commentata la linea, le uscite diventano attiva alte. I rele’ che ho usato invece funzionano in logica negata.
#define BUFLEN se viene alterato si può usare una diversa capacità di input dalla seriale. Solo per coloro che intendono modificare il firmware per diversi scopi.
#define OUTPUTMASK si definisce quelle uscite che non saranno influenzate da una accensione generale. Nel mio caso specifico, non posso tenere il contatto chiuso per il comando definito ad uso ad impulso per muovere il cancello. Il sistema del cancello ha già le sue sicurezze, ovviamente.
#define NUMTIMER se viene alterato si può stabilire quante uscite si vuole impegnare. Io ho un modulo a 4 relè, perciò c’è messo quattro. Ma si può aumentare sino ad otto tenendo conto che gli assegnamenti definiti dal programma sono i piedini
12,11,10,9,A0,A1,A2,A3. Anche questi facilmente modificabili, vedi sotto.
#define INPUT_TMO una definizione di quanto aspettare prima di sconnettere un utente inattivo. Il valore è in mezzi secondi. Il valore massimo è si 255 (oltre 4 minuti), senza alterare altre parti del programma.
array port_pin[] si può definire quali piedini assegnare. A partire da
sinistra come primo assegnato. 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 una lettera maiuscola da A a H. Interverrà il limite imposto da quante
    uscite s’è configurato con NUMTIMER.
  2. Per avviare una melodia si usa la lettera p, indifferentemente se maiuscola o minuscola. Le melodie sono eseguite in
    sequenza. Per i più esperti si potrà configurare per suonare anche una sorta di sirena o altro. Basta mettere nella lista
    const uint16_t melody e modificare TUNENUM che stabilisce quante sono. C’è un limite nella lun-ghezza di un array che è
    127. Per sicurezza la funzione carica solo i primi 126 valori oppure si ferma con due zeri conseguitivi. Per chiarire, la
    funzione si aspetta una coppia di valori che sono la frequenza e la durata.
  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)
    definizione per indicare un timer, non importa se maiuscola o minuscola.
    una cifra da 0 al numero dei timer
    definiti dal firmware. ATTENZIONE che l’ HEX carica per 4 uscite. (secondo carattere). Ora ne conta solo 4. Se ci fosse abilitata la
    comunicazione seriale, si vedono i messaggi di errore. Quindi per esempio da 0 a 3. L’indicizzazione parte da zero.
    s o m oppure h
    definizione della unita’ misura da impostare. Con s si indica i secondi, m si indicano i minuti e h le ore.
    da una a tre cifre
    il valore da impostare al timer con la grandezza precedente voluta. Per le ore c’è il limite fissato a 9 ore. Potrebbe esserci
    un problema ad impostare 999 minuti. Credo che aggiornerò il programma presto.
    uno spazio
    conclude la stringa ricevuto. quindi con il programma DCmote si dovrà impostare i comandi con una terminazione con lo
    spazio. Anche il ritorno-a-capo conclude.

Per esempio t3s45, si traduce con l’ uscita 4 attiva per 45 secondi. Caso limite, inviando un valore zero ad un timer, questo viene concluso. Infine una piccola dimostrazione pratica QUI!!!


Ho fatto anche il programma che converte RTTTL in valori da caricare in C. Come si può notate dal listato ci sono diverse melodie che ho convertito con il mio programma. Incluso nel pacchetto. Per funzionare serve python versione 3.5.
 
DOWNLOAD

Potete scaricare tutti i file necessari al seguente LINK!!!




 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

1 pensiero su “CONTROLLO BLUETOOTH RELE’

  1. Buon giorno ,
    stavo valutando il vs progetto nel tentativo di far girare il codice ( con funzione verifica dell’IDE di arduino),
    si blocca alla riga 106 dando il seguente errore:

    BTcontrol-19:106:12: error: variable ‘error’ with dynamic initialization put into program memory area
    const char error PROGMEM = “\nError: “;
    ^
    BTcontrol-19:107:12: error: variable ‘wrgprs’ with dynamic initialization put into program memory area
    const char wrgprs PROGMEM = “parsing value\n”;
    ^
    BTcontrol-19:108:12: error: variable ‘wrgtmr’ with dynamic initialization put into program memory area
    const char wrgtmr PROGMEM = “what’s the timer selected\n”;
    ^
    lto-wrapper: fatal error: /home/roberto/Scaricati/Arduino/arduino-1.8.13/hardware/tools/avr/bin/avr-gcc returned 1 exit status
    compilation terminated.
    /home/roberto/Scaricati/Arduino/arduino-1.8.13/hardware/tools/avr/bin/../lib/gcc/avr/7.3.0/../../../../avr/bin/ld: error: lto-wrapper failed
    collect2: error: ld returned 1 exit status
    Uso la libreria SoftwareSerial alla versione 1.0 nella cartella: /home/roberto/Scaricati/Arduino/arduino-1.8.13/hardware/arduino/avr/libraries/SoftwareSerial
    Uso la libreria TimerOne alla versione 1.1 nella cartella: /home/roberto/Arduino/libraries/TimerOne
    Uso la libreria Tone alla versione 1.0.0 nella cartella: /home/roberto/Arduino/libraries/Tone
    exit status 1
    variable ‘error’ with dynamic initialization put into program memory area……….
    Non essendo esperto di programmazione , ma in particolare il debug su IDE arduino non è proprio per principianti.
    Hai qualche idea xchè si blocchi , nel caso specifico puoi anche spiegarlo .
    Grazie x l’att.ne
    roberto

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *