TiDiGino il telecontrollo GSM basato su Arduino: lo sketch di Daniele Denaro

Ecco il terzo sketch giunto in redazione per il concorso TiDiGino Contest.

L’autore di questo firmware è Daniele Denaro, laureato in Ingegneria Nucleare con un dottorato in Informatica.

Ecco la sua presentazione
I microcontrollori li ho visti nascere (sono del 48) e mi hanno sempre intrigato. Per cui non ho potuto non farmi coinvolgere dal fenomeno Arduino. Fra l’altro mi piace chi si propone come standard. Con TiDiGino è entrato anche il mondo GSM a complicare un po’ le cose, ma alla fine mi sono divertito anche se non è stato semplice come pensavo.

Ed ecco il suo lavoro.

Descrizione introduttiva

Il telecontrollo può essere gestito tramite comandi SMS oppure mediante comandi spediti attraverso la porta seriale (attualmente collegata al convertitore USB). I messaggi hanno lo stesso formato nei due casi, eccetto per l’avvertenza di farli precedere dal numero chiamante (fittizio), nel caso di utilizzo della porta seriale. Ai messaggi segue una risposta (SMS o sulla porta seriale) verso il telefono originante , nel caso di comando SMS. Ma la risposta automatica può essere disabilitata.
Oltre alla gestione tramite comandi, il telecontrollo può essere utilizzato anche come apri cancello, mediante semplice squillo telefonico. Oppure come telecontrollo on-off , pilotato da una tastiera a toni multi-frequenza (DTMF). Od infine, come termostato utilizzando un sensore interno di temperatura.

Inoltre è previsto un funzionamento come allarme con l’invio automatico di SMS o chiamate vocali, sulla base di condizioni su ciascuno dei due input.

In particolare possiamo elencare i seguenti gruppi di funzionalità:

  • Funzionalità di amministrazione. Sono i comandi che inseriscono o cancellano i numeri abilitati, o abilitano su questi numeri la chiamata o l’invio di SMS in caso di allarme.
  • Funzionalità di gestione operativa del telecontrollo. Sono i comandi che definiscono il comportamento del telecontrollo, mediante il “settaggio” di alcune proprietà. Oppure attivano direttamente i relè di output o leggono lo stato delle due porte di ingresso optoisolate.
  • Funzionalità di allarme remoto. Al raggiungimento della soglia stabilita (bassa o alta), il telefono abilitato viene raggiunto da una chiamata normale o da un SMS. Può essere avvisato con un secondo messaggio anche della fine della condizione di allarme.
  • Funzionalità di apri cancello. All’arrivo della chiamata da un telefono abilitato viene attivato il relè. Ma alla chiamata non c’è risposta.
  • Funzionalità di telecontrollo tramite DTMF. All’arrivo della chiamata da un telefono abilitato, viene aperta la linea di comunicazione ed il telecontrollo si mette in ascolto dei toni multi-frequenza. Ad ogni tono ricevuto, viene attivato il comando associato e viene risposto con una sequenza di toni prestabilita. Dopo un certo periodo la comunicazione viene interrotta (nel caso non fosse già stata chiusa dal chiamante).

 

Formato dei comandi

I comandi SMS hanno il seguente formato: codice [parametro] [: password]

Esempio:

NUM +39333333333 : 123456 “abilita numero manager”

OU2 ON “attiva relè 2”

ST? “chiede lo stato dell’uscite e dell’input”

Nei comandi da seriale bisogna premettere il numero chiamante che deve finire con “cancelletto”:

+39…# codice [parametro] [: password]

Esempio:

+3933333333# PWD 567890 : 123456 “cambia la password”

+3933333333# OU1 OFF “disattiva relè 1”

+3933333333# AL? “chiede per quali numeri gli allarmi sono abilitati”

I numeri telefonici devono iniziare tutti con il prefisso nazionale (+39 per l’Italia), perché è cosi che viene identificato il chiamante dal modem.

I codici sono tutti formati da acronimi di 3 caratteri fissi.

Gli spazi nel formato ci possono essere o mancare (es.: OU1OFF è ammesso).

Inoltre maiuscolo o minuscolo non hanno importanza (case-insensitive).

E’ possibile lanciare più comandi con un unico SMS (fino a 10) separandoli con il carattere “;” (solo da SMS!)

Esempio: NUM +39333333333:123456;NUM +39222222222:123456;OU1 ON;OU2 OFF

Approfondimento funzionalità e modalità di gestione

All’accensione (start-up) il led giallo (led 3 nello schema) si illumina per segnalare lo switch-on. Successivamente, quando si accende il modem , si accende il led verde e comincia a lampeggiare. Infine quando parte il ciclo operativo che rileva i comandi, il led giallo comincia a lampeggiare segnalando ad ogni lampeggio il completamento di un ciclo operativo.

Nel caso sia stato fatto uno start-up con reset ai valori di default (premendo il pulsante P2 come si vedrà più avanti), il led giallo 4 si mette a lampeggiare velocemente per 4 secondi, per segnalare il reset avvenuto.
Le password sono due: una per il management del telecontrollo ed una per l’autoinserimento del proprio telefono nella lista degli abilitati alla funzione apri cancello.
Ambedue le password non possono essere < di 4 caratteri e > di 6 caratteri.
La password per autoinserimento lista apricancello, non può essere “000000”, perché il questo caso l’autoinserimento è negato a chiunque . Per default la password di gestione è “123456” e quella per lista apri cancello è “000000” (autoinserimento disabilitato).
Le liste dei telefoni sono 2: una per i telefoni abilitati alla gestione (telefoni manager), fino ad 8; ed una per l’abilitazione ad apri cancello tramite squillo telefonico, fino a 200.
Su ogni telefono manager può essere abilitato un flag per l’avviso automatico di allarme sia via SMS che con chiamata diretta.
I numeri telefonici hanno una lunghezza massima di 16 caratteri (compreso il prefisso +39).
I comandi principali di gestione “amministrativa” come l’inserimento dei numeri manager abilitati, la modifica della password o l’abilitazione alla chiamata d’allarme, hanno bisogno della password. Ma possono essere inviati da qualunque telefono . Esiste, comunque, una modalità di extra sicurezza (per default disabilitata), che richiede sempre l’invio da un telefono abilitato oltre alla password.
Gli altri comandi di gestione “operativa” non hanno bisogno della password ma devono essere spediti da telefoni abilitati.
Per permettere l’auto inserimento nella lista dei telefoni abilitati per la funzione di apri cancello tramite squillo, è stata inserita una seconda password che può essere comunicata ai candidati. Anche in questo caso il comando può essere inviato da qualunque telefono che viene, così, inserito automaticamente nella lista. Con questa password è ovviamente possibile utilizzare i soli comandi di inserimento e cancellazione dalla lista del proprio numero.
Per disabilitare questa funzionalità basta porre a “000000” la password.
L’inserimento di telefoni nella lista per apri cancello rimane comunque sempre possibile da un telefono manager fornendo come parametro del comando il numero da abilitare.
Il pulsante P2 è stato utilizzato per il reset del firmware. Ovvero se allo startup (accensione o pulsante P1), viene rilevata la pressione su P2, viene effettuato il caricamento dei valori di default nei parametri del telecontrollo.
In questo modo spariscono,però, anche tutti i telefoni nelle liste! Esiste, comunque, un comando speciale di reset che ha lo stesso scopo. Il comando deve provenire da un numero manager, deve avere anche la password e deve contenere il parametro “CONFERMA”.
Nell’utilizzo normale (per esempio riaccensione per mancanza di alimentazione o ripartenza causa P1), i parametri, sempre salvati in copia sulla EEPROM, vengono ricaricati nella memoria volatile operativa.
Gli output possono avere diverse funzionalità; alcune mutualmente esclusive, altre no.
Ogni output può essere bistabile o monostabile (con una temporizzazione che può essere modificata)
Ogni output può avere lo stato volatile o salvato in memoria EEPROM . In questo caso alla ripartenza viene attivato.
Ogni output può essere assegnato alla funzione apri cancello (ma in questo caso è monostabile con tempo 100 millisec e volatile).
L’output 1 può essere assegnato al termostato caldaia (ma allora è bistabile e volatile); mentre l’output 2 può essere assegnato al rinfrescamento (anche esso bistabile e volatile).La temperatura di riferimento per il riscaldamento attiva il relè, se quella misurata dal sensore del telecontrollo è inferiore e lo disattiva se è superiore; con una isteresi di ±0.5 C°.
In modalità opposta quella per il rinfrescamento.
Inoltre l’output 1 e 2 possono essere abilitati da un segnale di un interruttore, timer o termostato esterno, che sarà rilevato da input 1 o input 2 (rispettivamente).(L’abilitazione è data dalla alimentazione del diodo dell’optoisolatore)
Ogni input può essere abilitato a rilevare una condizione di allarme: L’allarme può essere su livello alto o basso. E’ possibile modificare il tempo di inibizione del rilevamento allarme persistente. Se è 0 allora l’input deve essere settato di nuovo come rilevatore di allarme, prima che agisca nuovamente. L’allarme può essere anche abilitato a rilevare il ritorno allo stato iniziale (fine allarme). In questo caso sarà inviato un opportuno messaggio di fine allarme.
Bisogna comunque tenere sempre presente che l’input è negato, ovvero in assenza di tensione sull’input (diodo non alimentato) il valore dell’input è alto.
Se un telefono manager è abilitato ad essere chiamato in caso di allarme, alla connessione sarà emessa una serie di toni per circa 15 sec e successivamente la chiamata sarà chiusa.
Altrimenti se è abilitato alla segnalazione via SMS, riceverà un messaggio il cui testo standard può essere modificato.
(per es. un testo diverso per ciascuno degli input)

Come si è detto, i comandi possono essere inviati con lo stesso formato anche da un collegamento seriale come quello stabilito tramite USB (a patto di premettere il numero originante fittizio con il carattere # finale). Per semplificare la gestione è stata però predisposta anche un’applicazione di interfaccia (vedi più avanti). Questa applicazione gestisce il collegamento seriale ed ha anche un protocollo di comunicazione specializzato per caricare ed aggiornare tutta la configurazione.
A causa del funzionamento di Arduino con il collegamento USB, ad ogni apertura di comunicazione viene effettuato un restart del firmware a meno di non aver eliminato il ponticello JP2 (collocato accanto alla presa USB). In questo caso per il reset bisogna utilizzare il pulsante P1. Il reset senza la pressione contestuale di P2 non fa altro che far ripartire il firmware ricaricando i parametri del controller da EEPROM. Il controller si può considerare operativo se si è acceso (e lampeggia) il led verde del modem e soprattutto se il led giallo comincia a lampeggiare con un periodo di circa mezzo secondo.
Nei sorgenti del firmware è stato predisposto un secondo collegamento seriale (attualmente non attivo) che potrebbe essere utilizzato per un collegamento WI-FI o BlueTooth.
Infine è presente una attività di logging che attualmente è indirizzata sulla porta seriale USB (logway=1). In questo log viene registrata sinteticamente l’attività. Il log può essere disabilitato (logway=0).

Installazione del firmware

ATTENZIONE ! Dopo l’istallazione del software (ovvero “uploading” da ambiente Arduino) è necessario effettuare un reset tenendo pigiati i pulsanti P1 e P2 insieme per caricare nella EEPROM i valori di default. Questo evento, come si è detto, è visualizzato da un lampeggio veloce del led giallo per circa 4 secondi. A questo punto il controller può partire con valori corretti (di default) caricandoli dalla EEPROM.

Applicazione Java per la gestione

E’ stata predisposta un’applicazione Java in modalità grafica, per la gestione semplificata del controller tramite collegamento USB. Questa applicazione, oltre a permettere l’utilizzo dei comandi per via seriale, utilizza anche un protocollo dedicato per la lettura ed il successivo caricamento della configurazione eventualmente modificata. Più avanti è mostrato il suo “layout” ed utilizzo. L’applicazione (attualmente) può essere utilizzata solo in ambiente WINDOWS a causa della libreria dll necessaria per il funzionamento del collegamento seriale e non compresa nelle distribuzioni Java.

Sono allegati due file, uno per Windows32 ed uno per Windows64:

  • TiDiGinoW32.jar
  • TiDiGinoW64.jarNB. Naturalmente occorre aver installato l’ambiente Java ed in questo caso quindi basta cliccare sul nome del file. Se, per qualche motivo, i file jar non fossero associati a Java, si può aprire una finestra console e lanciare il comando:

Java -jar TiDiGinoW32.jar (o W64)

Comandi

Comandi di amministrazione

Comandi che possono giungere da qualunque numero ma hanno bisogno di password.

Nel caso sia abilitata la funzionalità di extra sicurezza, i comandi oltre ad avere la password devono provenire da telefoni abilitati. Per default (quindi dopo un reset) la modalità di massima sicurezza è disabilitata. L’extra sicurezza può essere abilitata solo dall’applicazione di interfaccia (vedi più avanti).

Questi comandi finiscono sempre con “:xxxxxx” (dove xxxxxx è la password per manager)

  • Cambia password manager
  • Cambia password per inserimento numero per apricancello (se “000000” disabilita autoinserimento)
  • Aggiunge telefono abilitato manager
  • Cancella telefono abilitato manager
  • Set allarme SMS su telefono nnn…

  • Reset allarme SMS su telefono nnn…

  • Set allarme VOC su telefono nnn…
  • Reset allarme VOC su telefono nnn…
  • Aggiunge numero abilitato per apricancello
  • Cancella numero abilitato per apricancello

Comandi di amministrazione senza password

Comandi che possono giungere solo da numeri manager.

  • Cancella tutti i numeri abilitati per apricancello
  • Modifica velocità seriale
  • Abilita o disabilita la risposta tramite SMS
  • Lista telefoni manager
  • Lista telefoni abilitati per apricancello
  • Lista completa del setting del telecontrollo

Comandi autoinserimento cliente apricancello

Comandi che possono giungere da qualunque numero ma hanno bisogno della password apricancello. Questi comandi finiscono sempre con “:xxxxxx” (dove xxxxxx è la password per apricancello (non può essere “000000”). Se la password per apricancello è “000000” non è possibile inserire il proprio telefono. Non hanno parametro perchè il numero da abilitare è quello chiamante.

  • Aggiunge il proprio telefono
  • Cancella il proprio telefono

Comandi di setting

Comandi che possono giungere solo dai telefoni manager (non hanno bisogno di password)

Setting sezione hardware di base

  • Lettura stato in-out
  • Out 1 On|Off
  • Out 2 On|Off
  • Modalità out 1 MONO|BIST|MEM|NOMEM
  • Modalità out 2 MONO|BIST|MEM|NOMEM
  • Timer monostabile out 1 : secondi
  • Timer monostabile out 2 : secondi
  • Lettura setting out
  • Allarme abilitato inp 1 On|Off
  • Allarme abilitato inp 2 On|Off
  • Set soglia allarme inp 1 H|L|C|S (alta,bassa,rileva anche cambiamento di ritorno,solo soglia)
  • Set soglia allarme inp 2 H|L|C|S (alta,bassa,rileva anche cambiamento di ritorno,solo soglia)
  • Timer inibizione seconda chiamata allarme (se 0 allora un solo messaggio e allarme disabilitato)
  • Testo messaggio allarme inp 1
  • Testo messaggio allarme inp 2
  • Testo messaggio fine allarme 1 (usato solo se abilitato rilevamento di fine allarme)
  • Testo messaggio fine allarme 2 (usato solo se abilitato rilevamento di fine allarme)
  • Lettura setting allarmi

Setting sezione apricancello

  • Abilita out1 per apricancello On|Off (abilita|disabilita out allo squillo dai telefoni memorizzati)
  • Abilita out2 per apricancello On|Off (abilita|disabilita out allo squillo dai telefoni memorizzati)
  • Lettura out abilitati

Setting sezione termostato

  • Lettura temperatura
  • Abilita out1 per termostato riscaldamento On|Off
  • Abilita out2 per termostato rinfrescamento On|Off
  • Set soglia alta temperatura (riferimento riscaldamento)
  • Set soglia bassa temperatura (riferimento rinfrescamento)
  • Riscaldamento On|Off (manuale)
  • Rinfrescamento On|Off (manuale)
  • Abilita controllo esterno riscaldamento On|Off
  • Abilita controllo esterno rinfrescamento On|Off
  • Lettura setting out come termostati

Setting sezione telecontrollo DTMF

  • Attivazione DTMF On|Off

Uso apricancello

Solo da numeri (max 200) memorizzati (vedi comandi di amministrazione)

Squillo senza risposta senza apertura comunicazione.

Uso telecontrollo DTMF

Solo da numeri manager.

Comandi ad una sola cifra:

  1. Out1 On
  2. Out2 On
  3. Out1 Off (inattivo se Out1 monostabile)
  4. Out2 Off (inattivo se Out2 monostabile)
  5. Legge stato Out1
  6. Legge stato Out2
  7. Legge stato In1
  8. Legge Stato In2

Dettaglio Comandi

Amministrazione (Formato effettivo= “formato:password amministrazione”)

 

Comando Formato Default Risposta
Cambia password manager PWD xxxxxx 123456 PWD cambiata
Cambia password utente apricancello PAC xxxxxx 000000 PAC cambiata
Aggiunge telefono abilitato manager NUM +39nnnn… Inserito mgr num ….
Cancella telefono abilitato manager DNM +39nnnn…. Cacellato mgr num …
Set allarme SMS ASM +39nnnnn… Tutti OFF Allarme SMS su …
Reset allarme SMS ARM +39nnnnn Allarme disabiltato su nnn…

Set allarme VOC

AVC +39nnnnn Tutti OFF Allarme VOC su…
Reset allarme VOC ARV +39nnnnn Allarme disabilto su nnn…
Aggiunge numero abilitato per apricancello NAC +39nnnn… Inserito per AC num..
Cancella numero abilitato per apricancello DAC +39nnnn… Cancellato NAC …

Amministr. solo da num. mgr (Formato effettivo = “formato”) (senza passw.)

 

Cancella tutti i numeri abilitati per apricancello RAC OK Cancellati abilitati AC
Abilita SMS di risposta RIS ON|OFF ON Abilitata|disabilitata risposta
Velocità della seriale (al nuovo riavvio) SER xxxxxx 9600 Seriale a xxxxxx bauds
Visualizza telefoni abilitati come manager TL? Lista(possono essere +SMS)
Visualizza telefoni abilitati per apri cancello TC? Lista(possono essere +SMS)
Visualizza completo settaggio ??? Lista di tutto (+SMS)

Autoins. numeri per apri cancello (Formato=”formato:password apricancello”)

Comando Formato Default Risposta
Aggiunge telefono abilitato NAC Abilitato num ….
Cancella telefono abilitato DAC Disabilitato num …

Comando speciale. Da numero manager + password

Comando Formato Default Risposta
Reset (con valori di default e cancellaz. numeri) RST CONFERMA Reset effettuato

Operativo di base (solo da numeri manager)(senza password)

Comando Formato Default Risposta
Lettura stato in-out ST?

Inp1=H|L Inp2=H|L Out1=H|L …

Out 1

OU1 ON|OFF

OFF

Out1 On|Off

Out 2

OU2 ON|OFF

OFF

Out2 On|Off

Modalità Out 1

OS1 MONO|BIST

MEM|NOMEM

BIST

NOMEM

Out1 Mod. …

Modalità Out 2

OS2 MON|BIST

MEM|NOMEM

BIST

NOMEM

Out2 Mod. …

Timer monostabile out 1 : secondi(ss)

OT1 ss

1

Out1 Timer ss sec.

Timer monostabile out 2 : secondi(ss)

OT2 ss

1

Out2 Timer ss sec.

Lettura setting out

OU?

 

Out1:mono|bist, Out2 …

Allarme inp1 on|off

AL1 ON|OFF

OFF

All. Inp1|2

Allarme inp2 on|off

AL1 ON|OFF

OFF

All. Inp1|2

Set soglia allarme inp1 SI1 H|L|C|S H e S Soglia 1 …
Set soglia allarme inp2 SI2 H|L|C|S H e S Soglia 2 …
Timer inibizione seconda chiamata all. TIN mm 0 Timer inibizione ripetizione all.(min)
Testo messaggio allarme inp1 TA1 [END]aaaa… Allarme1… Testo [fine] Allarme 1 : …
Testo messaggio allarme inp2 TA2 [END]aaaa… Allarme1… Testo [fine] Allarme 2 : …
Lettura setting allarmi AL? All1: abilitato,soglia alta …..

Setting Apricancello (solo da numeri manager)

 

Comando Formato Default Risposta
Abilita out 1 per apricancello AC1 ON|OFF OFF Apricanc. si/no su out1
abilita out 2 per apricancello AC2 ON|OFF OFF Apricanc. si|no su out2
Lettura out abilitati AC? Apric. su …

Setting Termostato (solo da numeri manager)

Comando Formato Default Risposta
Lettura temperatura TM? Temperatura C° …
Abilita out 1 per termostato riscaldamento TR1 ON|OFF OFF Term. Riscald. Abilitato
Abilita out 2 per termostato rinfrescamento TR2 ON|OFF OFF Term. Rinfresc. Abilitato
Set massima temperatura riscald TMX tt 21 T max = tt
Set minima temperatura rinfresc TMN tt 27 T min = tt
Caldaia on|off CLD ON|OFF OFF Caldaia accesa|spenta
Condizionatore on|off CND ON|OFF OFF Condiz. acceso|spento
Abilita termostato esterno per out1 ET1 ON|OFF OFF Abil|dis term. esterno 1
Abilita termostato esterno per out2 ET2 ON|OFF OFF Abil|dis term.esterno 2
Lettura settaggio termostato TR?

Setting DTMF (solo da numeri manager)

 

Comando Formato Default Risposta
Attivazione DTMF on|off DTM ON|OFF OFF DTMF …
Lettura attivazione DTMF DT?

Applicazione di interfaccia

Benchè sia possibile usare qualunque terminale seriale per spedire comandi, è stata predisposta una applicazione per semplificare la gestione del controller.

E’ in Java (ma è solo per Windows a causa della libreria specializzata per la porta seriale).

Per caricare la configurazione, va inserita la password manager.

Nel caso di primo utilizzo (o dopo startup con reset) la password di default è: 123456

La schermata è costituita da 4 zone:

  • Zona in alto. Dedicata a stabilire la comunicazione e a leggere o salvare la configurazione
  • Zona successiva con comandi immediati utili per verificare l’hardware.
  • Zona di programmazione. Contiene tutte le variabili ed i flag (alcuni mutualmente esclusivi) di configurazione. Questi dati possono essere caricati, aggiornati e salvati.
  • Zona dei comandi. Nella prima finestra si può inserire un comando così come sarebbe inserito in un SMS. Attenzione! Per i comandi che necessitano di un numero telefonico abilitato, questo deve essere inserito correttamente nel campo predisposto al numero telefonico simulato. Infatti l’applicazione premette automaticamente il numero al comando.
  • Invece non viene aggiunta automaticamente la password. Quindi va inserita nel comando la dove è necessaria. La password inserita nel campo predisposto serve solo per il carico ed il salvataggio della configurazione.
  • I comandi non vengono inviati dopo la eventuale premuta del tasto invio della tastiera, ma solo tramite il pulsante “Spedisce”.
  • L’applicazione salva alcuni dati (seriale utilizzata, bauds e numero fittizio) su un file di caratteristiche che sarà letto alla successiva partenza.

Sezione di approfondimento strutturale

Variabili non volatili

Password

Descrizione Nome Tipo Default
Password manager PWD Stringa 6 caratteri 123456
Password apricancello PAC Stringa 6 caratteri 000000

Telefoni

Descrizione Nome Tipo Default
Telefoni manager TMGR Array (8) 1carattere+stringhe fix 16 car 8 posiz vuote
Allarme SMS su x ALSMS Byte utilizzato come array di 8 bit 0 (disabilitato)
Allarme VOC su x ALVOC Byte utilizzato come array di 8 bit 0 (disabilitato)
Telefoni utenti apricanc. TAPC Array(200max) stringhe fix 16 car vuoto

Setting

Descrizione Nome Tipo Default
Abilita risposta RISP Byte (1|0) 1
Out1 OUT1 Byte 0
Out1 stato Bit OUT1(0) 0 (basso)
Out1 modalità bist|monost Bit OUT1(1) 0 (bistabile)
Out1 modalità apricanc. Bit OUT1(2) 0 (disabilitato)
Out1 modalità termostato Bit OUT1(3) 0 (disabilitato)
Out1 mod. term. esterno

 

Bit OUT1(4)

0 (disabilitato)
Out1 memorizzato

 

Bit OUT1(7)

0 (disabilitato)

Out2

OUT2

Byte

0

Out2 stato

 

Bit OUT2(0)

0 (basso)

Out2 modalità bist|most

 

Bit OUT2(1)

0 (bistabile)
Out2 modalità apricancello Bit OUT2(2) 0 (disabilitato)
Out2 modalità termostato Bit OUT2(3) 0 (disabilitato)
Out2 mod. term. esterno

 

Bit OUT2(4)

0 (disabilitato)
Out2 memorizzato

 

Bit OUT2(7)

0 (disabilitato)

Timer monostabile Out1

TIMOUT1

Byte

1 (secondi)

Timer monostabile Out2

TIMOUT2

Byte

1 (secondi)

Allarme inp1

AINP1

Byte

2

Allarme 1 abilitazione Bit AINP1(0) 0
Allarme 1 soglia Bit AINP1(1) 1 (alta)
Rileva ritorno stato Bit AINP1(2) 0 (no)
Allarme inp2 AINP2 Byte 2
Allarme 2 abilitazione Bit AINP2(0) 0
Allarme 2 soglia Bit AINP2(1) 1 (alta)
Rileva ritorno stato Bit AINP2(2) 0 (no)
Timer inibiz. 2° chiamata TIMINIB Byte 0
Testo messaggio allarme1 ALL1TXT Stringa 30 char Allarme 1 !
Testo messaggio allarme2 ALL2TXT Stringa 30 char Allarme 2 !
Testo messaggio fine all.1 ALL1ENDTXT Stringa 30 char Fine allarme 1
Testo messaggio fine all.2 ALL2ENDTXT Stringa 30 char Fine allarme 2
Temperatura max (risc.) TEMPMAX Signed Byte 21
Temperatura min (rinfr.) TEMPMIN Signed Byte 27
Abilitazione DTMF DTMF Byte (1|0) 0
Reset RESET Byte 1
Destinazione log ½ ByteRESET(0-15) 1 (seriale)
Extra sicurezza Bit RESET(6) 0 (no extra sicurezza)
Ultima ripartenza Bit RESET(7) 0 (1 se c’è stato reset)
Velocità della seriale SER Word 9600

Procedure

Procedura di start-up

  • Se è premuto il tasto di Reset (pulsante P2) chiama una routine di reset che carica in memoria volatile ed EEPROM i valori di default. Altrimenti carica una copia in RAM delle variabili in EEPROM.
  • Apre la seriale alla velocità impostata.
  • Attiva OUT1 e OUT2 secondo i valori salvati (ma solo se sono definiti come bistabili e memorizzati)
  • Ciclo operativo.

Ciclo operativo

  • Verifica l’arrivo di un comando da seriale. Se buffer vuoto passa oltre. Altrimenti esegue un solo comando.
  • Verifica l’arrivo di un comando da GSM. Se non è arrivato nulla passa oltre. Altrimenti esegue un solo comando.
  • Verifica che ci sia una chiamata in arrivo. Se non c’è passa oltre. Altrimenti attiva l’apertura cancello (se il numero è abilitato), e passa oltre. Oppure, se il numero è un numero manager, apre la comunicazione attivando i comandi DTMF fino ad un tempo massimo di 1 min. Nel qual caso chiude la comunicazione e passa oltre.
  • Controlla allarmi (se abilitati)
  • Controlla temperatura (se il termostato è abilitato)
  • Ripete

Esecuzione comando

  • Verifica se il numero di provenienza è un numero manager. Altrimenti il comando deve essere seguito da password.
  • Controllo di eventuale password (password manager o per inserimento apricancello).
  • Parsing del comando .
  • Esecuzione effettiva del comando. Se il comando è una modifica del setting di qualche variabile, questa viene modificata in RAM ma anche in EEPROM.
  • Risposta (se abilitata).

Procedura attivata da squillo telefonico

  • Controlla se il numero chiamante è un numero abilitato ad apricancello. In questo caso attiva l’apricancello senza aprire la comunicazione.
  • Altrimenti verifica se il numero chiamante è un numero manager. In questo caso controlla se è abilitato il controllo DTMF. In questo ultimo caso apre la comunicazione ed esegue la procedura DTMF.

N.B. Ne consegue che un numero manager, se inserito anche nella lista abilitati per apricancello, non può utilizzare i comandi DTMF.

Procedura controllo allarmi

  • Se qualche input è allarmato, viene controllata la soglia stabilita (alta o bassa).
  • Se l’input vi si trova, viene attivata la procedura di allarme ma solo se il timer di inibizione è scaduto (o 0).
  • In questo caso se qualche telefono è prenotato per avviso SMS o vocale spedisce un SMS o/e chiama il numero.
  • Appena la comunicazione è stabilita, invia una serie di toni e chiude la comunicazione. Se il chiamato non risponde, prova a mandare un SMS.
  • A questo punto inizializza il timer di inibizione di ulteriori chiamate. Se il timeout memorizzato è = 0, allora disattiva l’allarme, che deve essere quindi riabilitato manualmente. In pratica, se il timeout è uguale a 0, l’allarme scatta solo la prima volta che si verifica la condizione.

Procedura controllo termostati

  • Se qualche output è definito come termostato, verifica se è soggetto a controllo esterno.
  • In questo caso prima di controllare la temperatura di riferimento, verifica che l’input collegato sia basso (diodo alimentato).
  • Se si , controlla il riferimento altrimenti disattiva l’output.
  • Altrimenti controlla semplicemente il riferimento .
  • Il controllo della temperatura di riferimento avviene con una isteresi di ± 0.5 C°
  • Per il riscaldamento (output1) l’attivazione avviene per T<TMAX-0.5 e la disattivazione per T>TMAX+0.5
  • Per il rinfrescamento si ha l’opposto: ON per T>TMIN+0.5 OFF per T<TMIN-0.5

Procedura controllo modalità astabile (monostabile)

  • Ad ogni passaggio del ciclo vengono controllati i timer degli output, se qualcuno di questi è stato definito come monostabile.
  • In questo caso se il timer è scaduto l’output viene “resettato”.

N.B. Liste telefoni

La lista degli 8 telefoni manager è duplicata in RAM, mentre quella dei 200 telefoni per ApriCancello esiste solo in EEPROM per evitare la saturazione della RAM (con conseguenti problemi di stack). La differente velocità di accesso è assolutamente ininfluente nell’utilizzo del controller. In ogni caso la scrittura su EEPROM è condizionata alla effettiva variazione, per prolungarne la vita operativa. Ovvero un byte è riscritto solo se è veramente cambiato.

N.B. Il software e il firmware sono da considerare “Open Source”, per cui si declina ogni responsabilità per il suo uso.

Comandi in ordine alfabetico di codice

Comando Codice Parametro Default
Visualizza completo settaggio ???
Lettura out abilitati AC?
Abilita out 1 per apricancello AC1 ON|OFF OFF
abilita out 2 per apricancello AC2 ON|OFF OFF
Lettura setting allarmi AL?
Allarme inp1 on|off AL1 ON|OFF OFF
Allarme inp2 on|off AL1 ON|OFF OFF
Reset allarme SMS ARM +39nnn… (numero tel.)
Reset allarme VOC ARV +39nnn… (numero tel.)
Set allarme SMS ASM +39nnn… (numero tel.) Tutti OFF
Set allarme VOC AVC +39nnn… (numero tel.) Tutti OFF
Caldaia on|off CLD ON|OFF OFF
Condizionatore on|off CND ON|OFF OFF
Cancella telefono abilitato (con passw. apric.) DAC
Cancella numero abilitato per apri cancello DAC +39nnn… (numero tel.)
Cancella telefono abilitato manager DNM +39nnn… (numero tel.)
Lettura attivazione DTMF DT?
Attivazione DTMF on|off DTM ON|OFF OFF
Abilita termostato esterno per out1 ET1 ON|OFF OFF
Abilita termostato esterno per out2 ET2 ON|OFF OFF
Aggiunge telefono abilitato (con passw. apric.) NAC
Aggiunge numero abilitato per apri cancello NAC +39nnn… (numero tel.)
Aggiunge telefono abilitato manager NUM +39nnn… (numero tel.)
Modalità Out 1 OS1 MONO|BIST|
MEM|NOMEM
BIST
NOMEM
Modalità Out 2 OS2 MONO|BIST|
MEM|NOMEM
BIST
NOMEM
Timer monostabile out 1 : secondi(ss) OT1 ss (secondi <256) 1
Timer monostabile out 2 : secondi(ss) OT2 ss (secondi <256) 1
Lettura setting out OU?
Out 1 OU1 ON|OFF OFF
Out 2 OU2 ON|OFF OFF
Cambia password utente apri cancello PAC xxxxxx (password) 0
Cambia password manager PWD xxxxxx (password) 123456
Cancella tutti i numeri abilitati per apricancello RAC OK
Abilita SMS di risposta RIS ON|OFF ON
Reset (con valori di default e cancellaz. numeri) RST CONFERMA
Velocità della seriale (al nuovo riavvio) SER xxxxxx 9600
Set soglia allarme inp1 SI1 H|L| (Alto|Basso)
C|S (Cambio st.|sing.)
H
S
Set soglia allarme inp2 SI2 H|L| (Alto|Basso)
C|S (Cambio st.|sing.)
H
S
Lettura stato in-out ST?
Testo messaggio allarme inp1 TA1 [END]a… (testo mess.) Allarme1|2
Testo messaggio allarme inp2 TA2 [END]a… (testo mess.) Allarme1|2
Visualizza telefoni abilitati per apri cancello TC?
Timer inibizione seconda chiamata allarme TIN mm (minuti <256) 0
Visualizza telefoni abilitati come manager TL?
Lettura temperatura TM?
Set minima temperatura rinfresc TMN tt (-100<gradi<100) 27
Set massima temperatura riscald TMX tt (-100<gradi<100) 21
Lettura settaggio termostato TR?
Abilita out 1 per termostato riscaldamento TR1 ON|OFF OFF
Abilita out 2 per termostato rinfrescamento TR2 ON|OFF OFF

Download

Dalla pagina http://code.google.com/p/tidigino potete scaricare le ultime release del firmware

Sketch
Librerie
Software


3 Commenti

  1. Progetto bellisimo. Se si aggiunge un'altro DS1820, x temp Esterna, un paio di ingressi ( antifurto, blocco caldaia ) e la funzione cronotermostato si avvicina alla perfezione......

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Main Menu