Sei sulla pagina 1di 37

TiGiDino, il Factotum

TiGiDino, il Factotum
Programma per il Telecontrollo GSM multifunzione TiGiDino
di Ettore Massimo Albani

Premessa
stato bello e stimolante per me partecipare al contest: una vera e propria fontana della giovinezza. La sfida era quella, allet di ! anni, di imparare un nuovo linguaggio e di farlo con un progetto ben preciso in mente: un inseguitore solare ed un sistema di gestione dellenergia. "er il mio compleanno a met di #gosto mi sono fatto il regalo dell#rduino $ega % &' ed (o iniziato a studiare, facendo i primi sketch. # causa delle ferie (o letto del contest in ritardo, tuttavia (o c(iesto al Direttore di Elettronica In di partecipare ugualmente e verso la fine di )ettembre (o ricevuto il mio esemplare del TiDiGino: un pubblico ringraziamento al Dr. #rsenio )padoni * dobbligo per me. #ccantonato il mio progetto originale, (o preso in mano il TiDiGino e l(o studiato comparandolo con l#rduino $+G# % &' oltre al resto del materiale messo a disposizione. Le difficolt c(e (o incontrate sono state molte, non ultima il fatto c(e lesemplare ricevuto era difettoso e si * guastato dopo un paio di settimane, ma grazie alla pronta assistenza di Futura Elettronica ,un grazie anc(e a loro-. dopo alcuni giorni (o ricevuto un secondo esemplare. /ortunatamente, il contest nel frattempo era stato procrastinato, dandomi modo di terminare il mio lavoro ,anc(e se un soft0are non pu1 mai essere considerato finito, essendo tante le migliorie c(e si possono apportare.. 2omunque (o portato a termine una versione stabile del programma ed anc(e se non sar1 il vincitore, sono fiero del mio lavoro. )pero c(e scuserete eventuali ingenuit nella programmazione: prima di dire di conoscere un linguaggio, occorre molto pi3 tempo dei poc(i mesi c(e (o avuto a disposizione. Grazie per la pazienza.

4 di 5!

TiGiDino, il Factotum

La scheda
6l TiGiDino * il nuovo nato della serie di telecontrolli dotati di modulo G)$ )6$7''. Diversamente dai suoi predecessori, il TiGiDino si basa sul processore #Tmega% &', lo stesso adottato dall#rduino $+G# % &' e da questi deriva la sua struttura. 8ediamo in dettaglio le sue caratteristic(e, confrontandole con quelle dell#rduino $+G# % &' , edi allegato ! e ".. )i osserva c(e rispetto al modello normale ci sono in pi3: modulo G)$9 DT$/9 pulsante utente9 ponticello removibile per auto reset9 % ingressi optoisolati9 % uscite a rel*9 sensore di temperatura seriale con protocollo #ne $ire9 memoria ++":;$ seriale da 5% <= L+D: % rossi per le uscite rel*, 4 verde per lattivit del modulo G)$ e % disponibili per il programma.

"urtroppo, per limitare le dimensioni della sc(eda e limitare i costi, abbiamo dovuto rinunciare ad alcune cose: #limentazione solo esterna ,4%8, 4#. 6>; digitali o uscite "?$ limitati a 4' ,@% se non si adoperano gli interrupt esterni.9 ingressi analogici limitati a &9 interrupt esterni limitati a %9 porte seriali limitate ad 4 ,@4 utilizzata dal modulo G)$.9 connettore T?6 ,T%in $ire Interface. assente ,utilizzato dalla memoria ++":;$ seriale.9

Tuttavia, pur con queste limitazioni, TiGiDino rappresenta un potente sistema di telecontrollo programmabile grazie alla interfaccia 6D+ di #rduino. Auello c(e avrei desiderato in pi3 sulla sc(eda: un paio di L+D per monitorare gli ingressi9 un L+D collegato al pin 45 delle linee di 6>; digitale per uguagliare quello presente su #rduino $+G# % &' un cicalino piezoelettrico9 un microfono preamplificato ed un altoparlante per c(iamate vocali9 sensore temperatura esterno , edi Emulazione Temperatura..

Bo avuto modo di provare due esemplari di TiDiGino: il primo dopo qualc(e giorno (a presentato un problema (ard0are ,la linea :eset del micro non funzionava pi3. e (o dovuto aspettare un secondo esemplare per continuare le prove. 6l secondo esemplare aveva ancora il resistore :%' saldato sul "2=, mentre avrebbe dovuto essere eliminato per non causare problemi quando la porta C)= non * connessa.

% di 5!

TiGiDino, il Factotum 6nfatti, lalimentazione del micro di interfaccia C)= /T%5%:L * fornita direttamente dalla linea a 8 proveniente dal "2: senza lalimentazione la porta :T) , &e'uest To Send. attraverso il resistore :%' porta a massa la corrispondente porta :)T ,&eset. del #Tmega% &' c(e quindi rimane bloccato. "oic(D il TiDiGino * ancora in fase di testing avanzato ,beta testing. * facile c(e lassistenza non abbia ancora confidenza con questa informazione. 2omunque, nulla di grave, a patto c(e non vengano pi3 distribuite sc(ede con questo problema: essendo il componente a montaggio superficiale, non * agevole dissaldarlo, vista anc(e la vicinanza con altri componenti. Futura Elettronica (a a catalogo un contenitore plastico gi forato per fissaggio al muro: consiglio vivamente di acquistarlo insieme al TiDiGino. :icordatevi anc(e di acquistare un alimentatore a 4% 8 c(e possa erogare almeno 4 # di corrente continua anc(e di tipo non stabilizzato ed un cavo C)= ,masc(io # E masc(io micro #. per il collegamento al "2. )e poi volete strafare, perc(D non aggiungere una batteria tampone da 4% 8 !,% #( ,tipo quelle usate nei sistemi antifurto.F

5 di 5!

TiGiDino, il Factotum

Il modulo GSM
6l modulo G)$>G":) 'uadriband ,G '>7''>4G''>47'' $Bz. si basa sul processore SIM900 della SIM Com. 6l modulo (a 47 pin ,5 su un lato e 4& dallaltro. e si adatta perfettamente nellalloggio previsto sul TiDiGino. Cna volta alimentato ,esiste un apposito metodo della libreria G)$ per farlo. il minuscolo L+D verde sul modulo ed il L+D verde in parallelo sulla sc(eda iniziano a lampeggiare a circa 4 Bz, segno c(e il modulo * alimentato ed * alla ricerca di una rete a cui agganciarsi. )e * presente la )6$ nellapposito alloggiamento ed il segnale * sufficiente, il modulo aggancia la rete del gestore telefonico e la frequenza di lampeggio cambia a circa 4 volta ogni 5 secondi ,',5 Bz.. "eccato c(e non esistano nD un buzzer, nD un microfono, nD un altoparlante per avere la possibilit di comunicare come un normale cellulare. Luscita :/ fornisce 4 ? di potenza H 4G''>47'' $Bz e % ? H G '>7'' $Bz tramite un connettore femmina )$# per una antenna esterna. Lantenna fornita in dotazione * alta circa 4% cm, dispone di un paio di metri di cavo terminato da un connettore masc(io )$# ed una base magnetica per collocarla su di una superficie metallica. Iel caso non si disponga di una superficie metallica * consigliabile usare del velcro autoadesivo od una goccia di collante per fissarla stabilmente. #ttenzione a non appoggiarla troppo vicina al vostro "2 o notebook: il potente magnete potrebbe creare seri problemi allhard disk-

J di 5!

TiGiDino, il Factotum

Installazione ambiente di sviluppo


"er poter programmare la sc(eda TiDiGino * necessario disporre sul "2 o notebook dellambiente di sviluppo rduino attualmente alla versione ''%5. # questo proposito vi faccio notare c(e !actotum * stato sviluppato con la versione ''%%: non dovrebbero esserci problemi ad usare una versione pi3 recente, poic(D la versione ''%5 possiede in pi3 i riferimenti (ard0are ,inf. per le versioni pi3 recenti ,&(. delle sc(ede #rduino9 comunque rammentate questo particolare se ci fossero problemi. )e ancora non lo avete fatto, recatevi nel sito ,purtroppo solo in lingua inglese.: """#arduino#cc )caricate il soft0are ,circa G oppure *inu+.. $=. per il sistema operativo di cui disponete , $indo%s, Mac #S )

Lambiente di sviluppo * in realt unapplicazione $ava c(e consiglio di installare allinterno di una cartella ,director,. c(iamata rduino. 6o posseggo %indo"s &P Pro e l(o installato allinterno della cartella Documenti9 questo il percorso completo: C'(Documents and Settin)s(Knome utenteL(Documenti( rduino( rduino*00+, +ssendo unapplicazione Mava non viene registrata nel registro dei programmi di ?indo0s , &egistr,. e non viene neanc(e inserita nello Start: conviene creare a mano un collegamento al programma rduino#e-e da inserire sul DesNtop per un pi3 comodo accesso ad esso:

6nserire qui le librerie fornite a corredo.

2reare collegamento con il tasto destro del mouse.

2ollegamento da copiare o spostare sul DesNtop.

di 5!

TiGiDino, il Factotum ;ra bisogna aggiungere nella cartella libraries le librerie aggiuntive utilizzate da /actotum: per farlo copiate semplicemente le cartelle fornite: Dallas G)$OTDG6I; $%JL2% & ;ne?ire contiene versione modificata di GSM#h per eliminare il D+=CG

"oic(D la libreria G)$O TDG6I; viene fornita con attivato il D+=CG e questo consuma molta memoria, raccomando di usare la mia versione c(e (a il D+=CG disattivato, altrimenti il programma potrebbe non funzionare correttamente.

& di 5!

TiGiDino, il Factotum #desso loperazione pi3 delicata: bisogna sostituire il file pins.arduino#c con il file con lo stesso nome, ma contenente la mappa dei pin di TiDiGino. 6l file si trova nella cartella: /( rduino( rduino*00+,(hard"are(arduino(cores(arduino 8i consiglio, per1, di conservare il vecc(io file anzic(D cancellarlo rinominandolo, ad esempio, pins.arduino.0ri)inal#c, magari conservando anc(e una copia del nuovo. "restate molta attenzione a non inserire spazi nel nome del file.

/ile gi sostituito . /ile originale rinominato.

2opia del nuovo file.

2ome ultima operazione, copiate la cartella !actotum allinterno della cartella #rduino: vi consiglio di creare allo scopo una nuova cartella Pro)etti e di inserirci dentro la cartella /actotum.

! di 5!

TiGiDino, il Factotum #desso possiamo collegare, finalmente, lalimentazione al nostro TiDiGino e, quindi, collegare il cavetto C)= al nostro "2 o notebook. 6l TiDiGino, contrariamente alla sc(eda #rduino $+G# % &' c(e usa il processore #TmegaG, usa il processore /T%5% come interfaccia C)=, quindi i driver sono diversi e vanno caricati separatamente. Iiente paura, loperazione * quasi del tutto automatica: basta indicare in fase di installazione del dri e la cartella drivers di #rduino c(e contiene a sua volta la cartella FDTI USB Drivers.

G di 5!

TiGiDino, il Factotum Dopo aver caricato /actotum, vi troverete con una finestra simile a questa:

La prima cosa da fare * selezionare il tipo di sc(eda ,#rduino $+G# % &'.:

7 di 5!

TiGiDino, il Factotum "oi si indica la Serial Port fornita dal drive C)=:

/inalmente con licona Upload si pu1 caricare /actotum sulla sc(eda. )e tutto * stato fatto correttamente, i due L+D :P e TP a bordo di TiDiGino inizieranno a lampeggiare velocemente, indicando luploading.

4' di 5!

TiGiDino, il Factotum Cna volta terminata questa fase, si pu1 lanciare il Serial Monitor ,previa impostazione della velocit a 7&'' baud. per interagire con /actotum:

Iellesempio sopra riportato si osserva la versione del programma e la sua emulazione ,T+$"+:#TC:#.. )i noti come /actotum abbia caricato le variabili preferenziali e ripristinato le uscite ,variabile 1IP settata a true.. "oic(D il funzionamento dellemulazione era Automatico. /actotum ne segnala la condizione. 6l messaggio di Startup viene visualizzato e, poic(D nellesempio esisteva un numero preferenziale a cui inviare uno squillo, viene visualizzato levento. )e ci fossero stati pi3 numeri preferenziali a cui inviare squilli e>o )$), ci sarebbe stata lindicazione relativa. 6nviando T2MP3 ,campo in alto con il pulsante Send., si ottiene la temperatura minima, massima e ambientale.

44 di 5!

TiGiDino, il Factotum "urtroppo esiste un problema: come sar specificato pi3 avanti, il modulo G)$ allo startup potrebbe non configurarsi correttamente, risultando un apparente blocco. 2ompare la scritta QRichiesta passwordR come se il programma dovesse rispondere ad una c(iamata vocale ,DT$/. e rimane in quella situazione per 5' secondi, dopodic(D la c(iamata viene terminata ed il sistema prosegue normalmente le sue funzioni.

4% di 5!

TiGiDino, il Factotum

Il so4t"are
6l programma !actotum * il risultato del -ontest proposto da Elettronica In per sviluppare unapplicazione per TiGiDino c(e consentisse di emulare i precedenti progetti di telecontrollo G)$: TDG45J S #pricancello TDG455 S Telecontrollo % in > % out ,TDG4J' @ DT$/. TDG457 S Termostato pricancello, Telecontrollo, Temperatura.

Tre sono perci1 le versioni disponibili:

6l codice compilato della versione pi3 complessa occupa oltre <= della memoria /las( del processore, oltre ovviamente lo spazio di memorizzazione delle variabili nella ):#$. Ion * stata utilizzata la memoria 22P10M da J <= interna al processore, proprio per dare modo agli sviluppatori di caricare un programma diverso ,c(e usi questa memoria. senza cancellare i dati memorizzati nella memoria ++":;$ seriale ausiliaria da 5% <=. #nc(e la SIM ,Subscriber Identit, Module. del gestore telefonico scelto non viene utilizzata per memorizzare i numeri telefonici, poic(D, in questo modo, * possibile sostituirla con unTaltra senza perdere i numeri telefonici gi memorizzati. )ono stati aggiunti dei comandi speciali per consentire agli QsmanettoniR di accedere a tutti gli altri ingressi>uscite disponibili , edi -omandi aggiunti i.. Le parti essenziali sono: initialize setup loop inclusioni, direttive di compilazione, dic(iarazioni di variabili e costanti9 inizializzazione classi, inizializzazione variabili9 ciclo principale c(e comprende: procedure di input9 procedure di elaborazione dati9 procedure di output.

:esta da comprendere il complesso delle temporizzazioni nellambito del ciclo di loop. #lcune procedure, infatti, sono sottoposte ad un contatore temporale o timer. 6l processore, una volta terminata la fase di inizialize e quella di setup, entra in quella di loop e vi permane sino a quando non viene attivato il reset oppure viene tolta lalimentazione. La velocit di ciclo complessiva non * stimabile a priori poic(D esistono alcune procedure c(e usano una quantit di tempo variabile secondo il loro stato interno ,ad esempio la procedura di risposta ad una c(iamata vocale.. 6potizziamo c(e sia di volte in un secondo. cicli>secondo: la singola procedura di input, ad esempio, verrebbe eseguita

2onsideriamo la procedura di input relativa allacquisizione della temperatura: il processore eseguirebbe, perci1, la misura della temperatura volte ogni secondo. =asterebbe avere una lettura ogni 5SJ secondi e, con il tempo risparmiato, il ciclo complessivo diventerebbe pi3 breve, a tutto vantaggio di altre procedure pi3 lung(e. +cco spiegato luso dei timer: * un artificio per consentire alle varie procedure di essere eseguite a scadenze prefissate, solo quando il loro contatore temporale supera un certo valore. La funzione millis56 restituisce il numero di millisecondi passati dal momento in cui il sistema * partito: essendo un valore unsigned long raggiunge il suo massimo dopo circa ' giorni di funzionamento, dopodic(D il conteggio riparte da zero.

45 di 5!

TiGiDino, il Factotum 6nserendo questo valore in una variabile contatore * possibile ad ogni ciclo confrontare il nuovo valore di millis,. con quello memorizzato. )e la differenza * maggiore od uguale al valore programmato ,costante. il tempo * stato raggiunto, si esegue la procedura corrispondente e si reimposta la variabile contatore al nuovo valore di millis,.9 se, invece, la differenza * minore la procedura non viene eseguita. +siste, per1, un caso in cui il valore della variabile contatore * maggiore di millis,.: quando il contatore di millis,. raggiunge il suo massimo e si azzera tra un controllo e laltro. 6n questo caso si considera il tempo scaduto e si ricade nel primo caso. )enza questo controllo si risc(ia, dopo procedure di timing.
... // ---------- Utility - TimerCheck ---------boolean TimeElapsed(unsigned long Timer, unsigned long StopTime) unsigned long T ! millis()" i# (Timer $ T) return true" i# ((T - Timer) $ StopTime) return true" else return #alse" // internal timer resetted a#ter %&' days // time elapsed

' giorni di funzionamento, di non vedere eseguite le

( ...

+cco la dic(iarazione delle costanti di tempo allinizio del programma ,Timing.:


... // ---------- )EC*+,+T-./ - Timing ---------const unsigned long *E)Clock,e#resh ! 0'''" unsigned long *E)ClockTimer ! '" const unsigned long 1S2,e#resh ! 3'''" unsigned long 1S2Timer ! '" const byte +na-n,eads ! 0" const unsigned long +na-n)elay ! 04'" const unsigned long +na-n,e#resh ! 4'" unsigned long +na-nTimer ! '" const unsigned long )ig-n,e#resh ! 0''" const unsigned long )ig-n)ebounce ! 4'" unsigned long )ig-nTimer ! '" const unsigned long .pt-n,e#resh ! 0''" const unsigned long .pt-n)ebounce ! 4'" unsigned long .pt-nTimer ! '" const unsigned long Temp,e#resh ! 0'''" unsigned long TempTimer ! '" const unsigned long Ser,6,e#resh ! 0&'" unsigned long Ser,6Timer ! '" ... // 0'''-n ms // 0-n cicli lettura // 0''-n 5s (min time reading ! 0'' 5s 6 channel) // '-n ms // '-n ms // 4'-n ms // '-n ms // 4'-n ms // '-n ms // min-n ms 7min ! ,68u##er / (8aud / 00)9 // (: ;<'' baud ! 04=/=>3 ! 0?' ms)

Cn esempio * il lampeggio del L+D: per consentire di verificare c(e il programma * esecutivo, il L+D5 lampeggia alla velocit di 4 Bz. )e smette di lampeggiare non necessariamente significa c(e il sistema * bloccato, ma potrebbe essere impegnato in una procedura lunga ,ad esempio rispondere ad una c(iamata vocale..

4J di 5!

TiGiDino, il Factotum

Librerie a))iuntive
6l programma !actotum si avvale di alcune librerie aggiuntive ric(iamate nellarea 6I2LCD+:
... @include AEEB,.2.h$ @include ACire.h$ @include A24?*C4&<.h$ @include Astdlib.h$ @include A.neCire.h$ @include A)allasTemperature.h$ @include A1S2.h$ ... // +Tmega4&<' internal EEB,.2 // TDo Cire -4C protocol (used by serial EEB,.2) // serial EEB,.2 on Ti)i1ino // #or #loat to string conEersion // .ne Cire protocol (used by temperature sensor) // )allas )S0=84' temperature sensor // #or 1S2 S-2;'' module

%ire#h M+7LC+89#h stdlib#h 0ne%ire#h

protocollo T%o $ire I"- per comunicare con la serial ++":;$9 gestisce le routine di memorizzazione veloce della ++":;$ seriale9 contiene la funzione dtostrf./ per visualizzare valori float ,temperatura.9 gestisce il protocollo #ne $ire usato dal sensore di temperatura9 gestisce il sensore di temperatura Dallas9

DallasTemperature#h GSM#h

gestisce il modulo G)$ )6$7''.

Lultima libreria indicata ,GSM#h. * la pi3 importante poic(D gestisce il modulo G)$ )6$7''. Auesta libreria * derivata da quella utilizzata dal GSM Shield for Arduino, opportunamente modificata da =oris Landoni per funzionare con TiDiGino. "oic(D la libreria modificata non aveva indicazioni di come usarla ,escludendo gli esempi forniti non del tutto esaustivi., (o seguito le indicazioni di quella originale fornite da GSM Pla,ground Sketches: 000.(0Nitc(en.com>ne0s>gsmSplaUgroundSsNetc(es> )i faccia attenzione c(e nel manuale ci sono delle piccole differenze rispetto alla versione per TiDiGino ,ad esempio il TurnOn ! non (a nessun parametro.. 2ome afferma la documentazione a corredo , edi allegato., la tecnica usata per la comunicazione con il modulo * del tipo blocking, ovvero il processore * bloccato finc(D la comunicazione non termina. /ortunatamente sono stati inseriti dei timer di timeout per uscire da pericolose situazioni di blocco totale. 6l funzionamento della libreria * discreto, ma alla volte si presentano delle anomalie: in caso di caduta della tensione a seguito di un blacNout oppure a seguito di un reset, al suo ripristino il modulo G)$ non sempre si inizializza correttamente, indicando una c(iamata a cui il sistema sta rispondendo9 avendo inserito un timeout di 5' secondi, basta aspettare c(e la c(iamata venga c(iusa e il sistema riprende il suo funzionamento normale. i toni emessi dal DT$/ (anno un ritardo di risposta troppo elevato ,L 4%'' ms. e perci1 i beep sono troppo distanziati.

"er la verit inizialmente la libreria funzionava molto male, ma questo succedeva prima c(e scoprissi il problema: lecho. Lecho * una modalit usata nei terminali per visualizzare sullo sc(ermo ci1 c(e si batte sulla tastiera o si invia.

4 di 5!

TiGiDino, il Factotum La cosa pu1 sembrare scontata ma non lo *: il fatto c(e si inviino dei caratteri non implica necessariamente c(e essi siano visualizzato sul dispositivo di QascoltoR. Gli esempi forniti a corredo riportano la presenza del metodo aggiuntivo 2cho5:6 c(e consente di attivare lecho dei comandi #T, mentre nella libreria originale questo comando * stato disattivato. "robabilmente il metodo * stato aggiunto per effettuare il debug del sistema: peccato c(e, con il comando echo inserito, la ricezione degli )$) non potesse funzionare e forse anc(e altre funzioniLa spiegazione del perc(D * piuttosto complessa, ma possiamo dire c(e la presenza sul buffer di ricezione dellecho del penultimo comando inviato veniva interpretato come la risposta allultimo comando inviato. Bo impiegato diverso tempo per capire c(e il problema non era allinterno del mio soft0are, ma nella libreria: * normale dare per scontato c(e la libreria sia funzionante, non vi pareF "erci1, nel )etup di !actotum occorre inserire il comando 2cho506 e non 2cho5:6... ... // ---------- SETUB - 1S2 F )T2G ---------pin2ode(1S2)C)Bin, pin2ode(1S2,/1Bin, pin2ode(1S2CTSBin, pin2ode(1S2*E)Bin, pin2ode(1S2StaBin, -/BUT)" -/BUT)" -/BUT)" -/BUT)" -/BUT)"

pin2ode()T2GST)Bin, -/BUT)" pin2ode()T2GH0Bin, -/BUT)" pin2ode()T2GH4Bin, -/BUT)" pin2ode()T2GH3Bin, -/BUT)" pin2ode()T2GH?Bin, -/BUT)" pin2ode(1S2)T,Bin, pin2ode(1S2,TSBin, pin2ode(1S2,esBin, pin2ode(1S2BDrBin, .UTBUT)" .UTBUT)" .UTBUT)" .UTBUT)" // module poDer on // disable AT echo // Eeri#ica registraIione alla rete

gsm.Turn.n(00&4'')" gsm.Echo(0); gsm.Check,egistration()" ... ...

Tutte queste cose (anno contribuito non poco allallungamento della fase di debug ,decine e decine di telefonate ed )$) persi per questi problemi.. # mio avviso la libreria * da considerare pi3 un punto dinizio c(e la soluzione definitiva e sarebbe opportuno riscriverla per un migliore abbinamento con TiDiGino. Tuttavia, poic(D gli organizzatori del contest (anno fornito questa versione, questa non * stata modificata, accettandone le limitazioni.

4& di 5!

TiGiDino, il Factotum

Mappa di memoria
2ome gi accennato, !actotum adopera esclusivamente la memoria seriale ++":;$ per le sue variabili. +ssa * stata suddivisa in cinque aree:
Indirizz o Iniziale .he+/

Area

Indirizz o Finale .he+/

Descrizione

Generale 6ngressi Temperatura Cscite :ubrica

'''' '4'' '%'' '5'' 4'''

''// '4// '%// '5// 4///

2ontiene 2ontiene 2ontiene 2ontiene 2ontiene

i valori delle variabili generali i valori delle variabili ingressi i valori delle variabili temperatura i valori delle variabili uscite la rubrica dei numeri telefonici ,% &.

La mappa si commenta da sola: nella prima parte vengono salvati i valori delle variabili personalizzate dallutente, mentre nellultima vengono salvati i numeri telefonici da c(iamare e>o a cui mandare un )$) , edi allegato (.. )i noti c(e i Qbuc(iR ,gap. presenti ,aree di memoria libera. (anno il solo scopo di suddividere le varie zone per poter pi3 facilmente apportare delle aggiunte successive. #d ogni attivazione del programma, la ++":;$ seriale viene analizzata sul suo primo bUte per sapere se * vergine o meno ,contenuto // se vergine.: se lo * vengono salvate tutte le variabili nellarea di memoria corrispondente, altrimenti il sistema le caric(er dalla stessa area. + del tutto evidente c(e allinizio le variabile operative e quelle in memoria saranno identic(e. )uccessivamente, man mano c(e il sistema viene personalizzato ,cambiando, ad esempio, il messaggio iniziale di attivazione. sar possibile riallineare i due contenuti usando il comando speciale S ; ,sa e. c(e memorizza le variabili nella ++":;$: ci1 consentir ai successivi riavvii del sistema di usare le variabili personalizzate anzic(D quelle preimpostate. #vrei potuto memorizzare immediatamente i parametri nella ++":;$ seriale, ma in questo modo * possibile testare il risultato delle modific(e apportate prima di memorizzarle definitivamente. # tale scopo (o anc(e aggiunto il comando 12S<=ps"> c(e consente di resettare il sistema anc(e da remoto. )i noti c(e non * un vero reset (ard0are, ma piuttosto una reSinizializzazione. Cna certa attenzione va rivolta alluso del pulsante utente. 6nfatti, tenendolo premuto mentre si riavvia il sistema la memoria ++":;$ seriale viene completamente cancellata. La cosa pu1 essere utile, in caso di malfunzionamento del sistema, per ripristinare le impostazioni originali ed * segnalata sia sul $onitor )eriale con un apposito messaggio, sia attraverso 5 rapidi lampeggi del L+D5 ,giallo..

4! di 5!

TiGiDino, il Factotum

Memoria S1 M
Cn grosso problema c(e (o dovuto affrontare * quello del relativamente limitato spazio della memoria ):#$. # quanto sembra, oltre una certa occupazione di memoria, #rduino $+G# % &' entra in crisi. 2on una occupazione di circa &' <= della memoria /las( da parte del programma, lo spazio ):#$ si riduce a circa %, <= degli G <= iniziali. "u1 sembrare molto, ma per un programma come questo c(e si basa su una forte interazione QverbaleR con lutente, la memoria libera viene presto saturata dal contenuto delle variabili stringa, con un conseguente crash del sistema. "er esempio, inserendo i comandi aggiuntivi con lemulazione Telecontrollo, al momento della ricezione di un )$) ,c(e ric(iede ben 4&4 bUte per la sua allocazione., il sistema attualmente si resetta, segno c(e * stata esaurito lo spazio in memoria ):#$. Bo dovuto faticare non poco per limitare la dimensione delle string(e allo stretto necessario ,ecco il motivo per cui, ad esempio, i messaggi di allarme sono stati limitati a 5' caratteri dei 4'' originari.. 2erto si potrebbero usare delle tecnic(e particolari, come quella di memorizzare le variabili stringa nella memoria /las( oppure in quella della ++":;$ interna all#Tmega% &', ma mi sembra assurdo c(e i progettisti di #rduino non abbiano pensato a questa limitazione. )arebbe bastato portare a 4&< la memoria ):#$2omunque, conto di risolvere il problema nelle successive versioni del programma. ;ra come ora, per far funzionare correttamente /actotum occorre rinunciare alle modalit di debug della libreria G)$: in pratica bisogna trasformare in commento le definizioni nellarea DEFI0E ,parte iniziale del file GSM#h..

/J 1S2.h - library #or the 1S2 Blayground - 1S2 Shield #or +rduino ,eleased under the CreatiEe Commons +ttribution-Share +like 3.' *icense httpK//DDD.creatiEecommons.org/licenses/by-sa/3.'/ DDD.hDkitchen.com library Eersion 0.'0 by 8oris *andoni J/ @i#nde# LL1S2 @de#ine LL1S2 @include MCBrogram.hM // )EG-/E // @de#ine // @de#ine // @de#ine // @de#ine ... ... )E8U1LB,-/T )E8U1L1S2,N )E8U1L*E)LE/+8*E) )E8U1LS2SLE/+8*E)

4G di 5!

TiGiDino, il Factotum

Le emulazioni
)ono disponibili tre emulazioni: pricancello, Telecontrollo e Temperatura. #vrei voluto usare una variabile per attivare queste emulazioni, ma, purtroppo, a causa della limitazione di memoria accennata prima, lunico sistema per poter attivare queste emulazioni * quello di usare le direttive di compilazione ,anc(e in questo caso, eliminando le limitazioni di memoria nelle future versioni del programma, il problema sar risolto.. 6n pratica bisogna modificare nellarea DEFI0E le prime tre definizioni, lasciando attiva solo quella c(e interessa. Iellesempio sottostante viene attivata, ad esempio, lemulazione T+$"+:#TC:#, mentre le precedenti due sono state opportunamente trasformate in commento:

/J G+CT.TU2 0.' per Ti)i1ino Eers. 0.' by Ettore 2assimo +lbani 3'/00/4'00 DDD.cyberhs.it in#o:cyberhs.it J/ // !!!!!!!!!!!!!!!!!!!!!!!!! )EG-/E !!!!!!!!!!!!!!!!!!!!!!!!! //@de#ine +B,-C+/CE**. //@de#ine TE*EC./T,.**. @de#ine TE2BE,+TU,+ @de#ine C.2+/)-ENB //@de#ine )E8U1 ... ... // emulaIione apricancello (% ?& O8 Glash) // emulaIione telecontrollo (% &0 O8 Glash) // emulaIione termostato (% &4 O8 Glash) // comandi aggiuntiEi (% & O8 Glash) // solo per debug

)i noti la presenza della definizione C0M ?DI2&P c(e inserisci alcuni comandi aggiunti i utili per una interazione con le altre risorse del sistema , edi paragrafo comandi aggiunti i.. 6l passo successivo sar quello di eseguire l upload del programma sulla sc(eda TiGiDino connessa al "2 tramite la porta C)=.

I comandi
+sistono quattro modi diversi per fornire i comandi al TiGiDino dotato del programma !actotum: 4. diretto S tramite un "2 ed un qualsiasi programma terminale mediante la connessione C)=9 %. remoto S tramite un )$) inviato da un qualsiasi cellulare, purc(D il numero telefonico appartenga ad uno degli otto numeri autorizzati9 5. remoto S tramite una telefonata usando la tastiera DT$/, purc(D si disponga della pass0ord di autorizzazione9 J. remoto S tramite una telefonata, purc(D il numero telefonico appartenga ad uno dei % & numeri della lista apricancello ,compresi i primi otto autorizzati.. )i noti c(e, mentre i primi due metodi possono utilizzare tutti i comandi a disposizione, il terzo metodo * limitato ai soli comandi c(e gestiscono le due uscite, mentre il quarto pu1 funzionare solo con lemulazione apricancello, essendo luscita collegata allapricancello. Lelenco completo di tutti comandi * in allegato 1. )i * cercato il pi3 possibile di non modificare i comandi originali ,come ric(iesto dal contest. e di rendere la sintassi unica per tutti, semplificando il loro inserimento tramite )$).

47 di 5!

TiGiDino, il Factotum # tale scopo, i caratteri separatori K '> e K<> possono essere sostituiti da un semplice spazio ,molto pi3 facile da inserire in un )$). o qualsiasi altro carattere: il programma non si basa sulla loro presenza per verificare la sintassi del comando ,eccezione i comandi "++< e ";<+.. Iaturalmente occorrer prestare attenzione a non inserire due spazi al posto di uno, come pure non inserirlo affatto#d esempio, il comando ?01 +: oppure ?01'+: fornir lo stesso risultato ,temperatura normale impostata a %4 V2., ma scrivendo ?01+: la temperatura sar impostata a 4 V2. #ncora, nellinserimento numerico non confondete lo Q 0R ,zero. con la Q0R ,maiuscola o minuscola.. Auindi, occ(io alla sintassi"er evitare ambiguit, si * evitato luso del punto e della virgola come simboli separatori delle cifre decimali: come conseguenza non * possibile inserire cifre decimali, ma solo intere, eventualmente con segno negativo. Lunica occasione in cui si potrebbe sentire questa esigenza * nel settaggio delle variabili di temperatura LLM &, LLMI? e ?01, ma con piccole modific(e si potrebbe rimediare a questo inconveniente.

%' di 5!

TiGiDino, il Factotum

Comandi tramite @SA


il sistema pi3 pratico per personalizzare !actotum. Iaturalmente bisogna disporre di un "2, di un programma di comunicazione seriale ,tipo 2,perTerminal. e di un cavetto C)= masc(io # E masc(io = mini. La porta C)= del TiGiDino viene riconosciuta automaticamente, ma bisogna fornire i drive per il c(ip /T%5%. 2ontrariamente ai comandi tramite )$), la variabile 1ISP non viene resettata dopo aver inviata la risposta: quindi * possibile disattivare la risposta in maniera indefinita. Tramite i comandi aggiuntivi P22B e P0B2, esiste la possibilit di accedere allintera mappa di memoria tramite un programma esterno.

Comandi tramite SMS


#d ogni comando inviato tramite )$) da un numero telefonico preferenziale viene inviato un )$) di risposta. possibile inviare pi3 comandi nello stesso )$) avendo laccortezza di separarli con il carattere Q ,R: in questo modo si risparmia tempo e denaro con lunico limite dei 4&' caratteri a disposizione per un )$). +siste anc(e la possibilit di evitare la risposta usando il comando 1ISP'0!! c(e setta la corrispondente variabile booleana 1ISP a false. Auesto comando deve essere dato allinterno di ogni )$) a cui non si desidera avere risposta in quanto la variabile viene ripristinata a true dopo il suo utilizzo. )i consiglia di inviare questo comando solo dopo aver preso confidenza con il sistema.

Comandi tramite DTM!


2on questa modalit * possibile fornire dei comandi relativi agli ingressi optoisolati ad alle uscite a rel*. Lelenco completo di tutti comandi * in allegato 3. Auando il modulo riceve una c(iamata vocale, risponde con tre beep stando ad indicare la ric(iesta della pass0ord c(e * un numero di digit. #l quinto digit viene verificata la sua validit e la risposta * un beep. )e, invece, la pass0ord * errata, vengono emessi nuovamente tre beep e la verifica riprende. Tutto questo deve verificarsi in un tempo prestabilito dal timer c(e * stato predisposto per 5' secondi, dopo i quali la c(iamata viene terminata. "assata la verifica della pass0ord, possiamo fornire i comandi indicati nella tabella, ricevendo le risposte o le conferme sotto forma di beep.

%4 di 5!

TiGiDino, il Factotum

Comandi a))iuntivi
;ltre ai comandi standard, se in fase di compilazione * stato predisposto il define C0M ?DI2&P, sono disponibili dei comandi aggiunti i utili per conoscere lo stato degli ingressi e delle uscite non gestiti direttamente da /actotum. )i noti c(e (o ripartito in questo modo le altre porte di 6>; a disposizione:
Porte Pin 0ote

Digital 6nput Digital ;utput "?$ ;utput 6nterrupt #nalog 6nput

&%, J, , &, ! G, 7, 4', 44 4%, 45 %, 5 #', #4, #%, #5, #J, #

6l pin &% corrisponde al pulsante utente

Ion gestiti attualmente #ttivato resistore interno di pull up da %'<

"er quello c(e riguarda gli ingressi analogici, per evitare false letture, viene effettuata una media di n letture consecutive ,con n personalizzabile attraverso la costante #na6n:eads W 4Xn.. Cn comando aggiuntivo c(e (o dovuto eliminare per problemi di memoria * lutilissimo C2LP: avrebbe consentito di ottenere lelenco completo di tutti i comandi con relativo significato e sintassi. 2omunque non escludo, una volta risolto il problema della memoria, c(e le successive versioni possano contenere questo comando. 6l programma prevede una funzionalit di monitoraggio sulla serial 4 connessa al "2. Tutti gli eventi vengono visualizzati nella finestra del )erial $onitor dell6D+ di #rduino configurato con queste impostazioni: auto scroll, 7&'' baud, no line ending. 6 due ultimi comandi P22B e P0B2 danno la possibilit di leggere e scrivere le informazioni dalla>nella memoria ++":;$ seriale. )ono questi comandi pensati per una personalizzazione di /actotum attraverso linterazione con un programma di comunicazione esterno. )i noti c(e questi due comandi utilizzano i caratteri separatori K 'L e K<L c(e, quindi, non possono essere omessi. +cco un esempio di visualizzazione degli ingressi analogici:

%% di 5!

TiGiDino, il Factotum )i noti c(e lingresso #% * stato portato a massa, mentre gli altri sono liberi ,resistore di pullup interno da %' <.. 6n questo altro esempio sono visualizzati le uscite digitali, gli ingressi digitali e le uscite "?$ dopo aver settato luscita "?$ 4' a :

)i noti lerrore di assegnazione "?$ e la risposta del sistema.

%5 di 5!

TiGiDino, il Factotum

I numeri pre4erenziali e lDautoapprendimento


La rubrica * composta da % & numeri telefonici, ma i primi G (anno una funzione speciale e vengono detti preferenziali poic(D * con essi c(e * possibile impostare le preferenze. 6l numero preferenziale, infatti, consente di fornire comandi al TiDiGino sottoforma di )$) per personalizzare lambiente secondo le proprie esigenze o preferenze. Auando il programma parte per la prima volta oppure viene resettato con la cancellazione forzata della memoria seriale ++":;$ , edi 5Mappa di memoria6., non (a inserito alcun numero preferenziale da cui accettare gli )$) e, quindi, personalizzare TiDiGino. Lunico modo * tramite un collegamento locale con un "2 via C)=. Tuttavia, esiste unulteriore possibilit detta di autoapprendimento. )i c(iama semplicemente TiDiGino con il cellulare il cui numero telefonico si desidera diventi il primo della lista dei preferenziali: se la locazione * vuota, il programma memorizza il numero e da quel momento gli )$) ,da quel numero. verranno accettati. "er memorizzare gli altri numeri, si pu1 usare il comando ?@M=:EF>'=num><=ps"> mentre il comando ?@M=:EF><=ps"> li cancella. "er avere una lista completa di tutti gli G numeri preferenziali si deve usare il comando ?@M3<=ps"> c(e fornisce unuscita ,su monitor o tramite )$). come questa: 1: ": 3: 4: 5: %: 7: 8: +393458007 ### $ ! ### $ ! +39049805% ### $ ! ### $ ! ### $ ! ### $ ! ! $ ! numero c(e ricever solo squilli ,8. numero c(e ricever sia )$) ,). c(e squilli ,8.

6 comandi SMS=:+,###F>'=0?G0!!><=ps"> e ;0C=:+,###F>'=0?G0!!><=ps"> consentono di attivare o disattivare per ognuno dei numeri preferenziali linvio di )$) e>o squilli in caso di allarme ingressi. +sempio: $&$"48:'(;1"345 !')1"%8:'**;1"345 attiva invio )$) per numeri preferenziali %, J e G disattiva squilli per numeri preferenziali 4, %, & e G

%J di 5!

TiGiDino, il Factotum

2mulazione

pricancello

Auesta * lemulazione meno complessa. Ctilizza larea rubrica delle ++":;$ seriale per memorizzare, oltre agli G numeri preferenziali, altri %JG numeri telefonici, per un totale di % & numeri. 6 numeri telefonici sono stati previsti con un massimo di 4& caratteri, compreso il prefisso internazionale. stato aggiunto il comando P12'=pre4i-> c(e consente di inserire il prefisso di default c(e per l6talia * Q@57R. :icordo c(e il Q@R corrisponde al doppio zero Q''R. La sua lung(ezza massima * di caratteri. Iel caso il numero telefonico inserito non contenga il prefisso, questo viene automaticamente aggiunto dal programma. 6l numero telefonico ,a parte il prefisso. non pu1 essere pi3 lungo di 4' caratteri ,44 per zone ad alta concentrazioni di telefoni.. Auindi 44 caratteri pi3 di prefisso sono appunto 4& caratteri. )i noti c(e il limite di memorizzazione di % & numeri telefonici * pi3 c(e altro pratico, poic(D lo spazio di memoria consentirebbe la memorizzazione di altri 4 5& numeri#d ogni c(iamata ricevuta dal modulo G)$, viene controllata lidentit del c(iamante ovvero il numero di telefono. )e il numero di telefono corrisponde ad un elemento della lista, viene attivato il rel* 4 connesso al sistema apricancello e quindi il programma termina la telefonata. 6n questo modo il c(iamante non spende nulla per la telefonata ,un bel risparmio-.. La stessa apertura pu1 essere fatta anc(e in locale, tenendo premuto il pulsante utente della sc(eda per almeno un ciclo di loop ,circa 4 secondo.. 6 numeri preferenziali possono anc(e inviare )$) contenenti i comandi.

% di 5!

TiGiDino, il Factotum

2mulazione Telecontrollo
Cna spiegazione delle funzioni di allarme * dobbligo. Gli ingressi optoisolati possono essere processati se la variabile LI ,allarme ingressi. * true. La variabile viene controllata dal relativo comando LI ,c(e fantasia-.: se posto in ;I la variabile assume valore true, viceversa con ;// essa assume valore false. 6 livelli degli ingressi di allarme possono essere ,alto., A ,basso. e ; ,variazione.: impostando il comando LI;=:G+>'= GAG;> relativo ad uno dei due ingressi si stabilisce quando il livello di tensione deve essere considerato allarme. Cn ingresso entrato in stato di allarme non viene considerato subito tale, ma deve passare un certo tempo ,detto di osser azione o di preallarme.. Auesto tempo * controllato dalle variabili 0SS: e 0SS+ ed * settato dal relativo comando 0SS=:G+>'=0E89> ,tempo espresso in secondi.. Cna volta trascorso questo tempo, se lingresso non (a subito variazioni, lallarme diventa effettivo. a questo punto c(e parte il timer del tempo di inibizione controllato dalle variabili I?I: ed I?I+ e settato dal relativo comando I?I=:G+>'=0E89> ,tempo espresso in minuti.. 6n pratica, esprime il tempo per il quale lallarme non deve generare altri )$) e>o squilli agli otto possibili numeri preferenziali. 6 comandi SMS=:+,###F>'=0?G0!!><=ps"> e ;0C=:+,###F>'=0?G0!!><=ps"> consentono di attivare o disattivare per ognuno dei numeri preferenziali linvio di )$) e>o squilli in caso di allarme ingressi. +sempio: $&$"48:'(;1"345 !')1"%8:'**;1"345 attiva invio )$) per numeri preferenziali %, J e G disattiva squilli per numeri preferenziali 4, %, & e G

%& di 5!

TiGiDino, il Factotum

2mulazione Temperatura
6l sensore per la temperatura ambientale DS:FA+0 ,D LL S*M &IM. consente di scegliere vari livelli di risoluzione: 7 bit 4' bit 44 bit 4% bit risoluzione ', V2 risoluzione ',% V2 risoluzione ',4% V2 risoluzione ','&% V2

)i * scelto di usare la massima risoluzione di 4% bit per garantire lapprezzamento del decimo di grado. 6l range di temperatura del sensore * compreso tra S Y'. V2 * garantita tra S4'V2 e @G V2. V2 e @4% V2, anc(e se la precisione di

2omunque, per un controllo di temperatura ambientale sono valori pi3 c(e sufficienti. "urtroppo questa precisione della misura * falsata dal fatto c(e dopo qualc(e minuto di funzionamento del sistema, la temperatura rilevata sale di circa % gradi rispetto a quella ambiente. Tuttavia, non credo c(e il problema sia la vicinanza di qualc(e componente QcaldoR sulla sc(eda e neanc(e di qualc(e esoterica influenza del generatore :/ del modulo G)$. La logica vorrebbe c(e il sia pur minimo consumo di corrente ,da 4 a J m#. da parte del dispositivo fosse sufficiente ad innalzare la temperatura del diodo interno di rilevamento, ma possibile c(e i progettisti non se ne siano accortiF La casa costruttrice del sensore pare fosse a conoscenza di un problema simile per il sensore DS:F+0 , edi rapporto DA**AS allegato. sottoposto alla temperatura di vapore, imputando la causa ad un resistore collegato alloscillatore interno del sistema di conteggio c(e * sensibile agli stress meccanici. Lo stesso documento afferma c(e i problemi sono stati risolti con il DS:FS+0, ma non parla del D)4G=%' usato in questo caso. Ioto soltanto c(e con il D)4G)%' la risoluzione * scesa a soli 7 bit ,risoluzione ', V2.: come maiF 6l documento * del ! marzo %''' e dopo un anno la D#LL#) * stata acquisita dalla $#Z6$: forse nellacquisizione i tecnici si sono accorti dei problemi ed (anno ridotto la risoluzione per evitare QrogneR con la clientelaF $a(6l fatto * c(e il problema c* e non * trascurabile ,due gradi sono tanti[.. )i potrebbe pensare ad un offset di un paio di gradi da sottrarre progressivamente nellarco di minuti alla temperatura rilevata per tener conto di questo effetto indesiderato, ma sarebbe un palliativo poco elegante. $i domando, allora, se non sia meglio utilizzare un pi3 economico ? TI0? L LM,8, vista la presenza degli ingressi analogici inutilizzati. 8olendo proprio usare un sensore #ne $ire sarebbe stato meglio predisporne un montaggio separato dalla sc(eda del TiDiGino e, magari, prevedere un secondo sensore delle stesso tipo per la rilevazione della temperatura esterna: il protocollo, infatti, prevede la possibilit di pi3 dispositivi presenti sullo stesso bus. stata aggiunto il comando IST'=0E+0> collegato alla variabile IST c(e esprime listeresi in decimi di grado ,valore di default corrispondente a ', V2. per evitare ravvicinate attivazioni>disattivazioni del rel* 4 collegato alla caldaia. 6n pratica, il rel* si attiva sotto la temperatura di ,I;: S 6)T. e si disattiva sopra la temperatura di ,I;: @ 6)T.

%! di 5!

TiGiDino, il Factotum 2erto sarebbe stato meglio predisporre un controllo di tipo "6D , Proporzionale Integrati o Deri ati o. per prevedere il naturale ritardo nella risposta del sistema #mbienteS2aldaia ,dovuto al volano termico., cosa c(e * presente nei moderni cronoStermostati. Tuttavia, considerando le finalit di questo apparecc(io ,controllo remoto dellimpianto di riscaldamento della casa in montagna e simili., questa funzione non * indispensabile. "er lo stesso motivo, il range di temperatura * stato ridotto a valori compresi tra S4'V2 e @G V2, in modo da garantire la precisione della misura. Iaturalmente i comandi ?01, LLMI? ed LLM & verificano la congruenza delle temperature allinterno di questo range ed anc(e tra loro ,non * possibile, ad esempio, inserire un I;: a 4GV2 con un #LL$6I settato a %'V2.. "er quanto riguarda il pulsante utente, tenendolo premuto per almeno un ciclo di loop ,4 secondo., commuta la modalit di funzionamento ,#utomatico>$anuale>Termostato. in modo ciclico. 6l L+D5 si attiva quando il funzionamento * automatico, mentre il L+DJ si attiva quando il funzionamento * su termostato. 6n caso di funzionamento manuale, invece, i due L+D risultano spenti.
*ED -olore Segnalazione 0ote

4 % 5 J "er quanto riguarda

:osso )tato uscita 4 :osso )tato uscita % Giallo /unzionamento automatico Giallo /unzionamento termostato gli ingressi optoisolati:

2aldaia accesa>spenta non utilizzata )e spenti indicano il funzionamento manuale

Ingresso #ptoisolat o

Funzione

Allarme

0ote

4 %

2aldaia in avaria Termostato

#llarme caldaia nessuno

2ollegare in parallelo spia avaria caldaia 2ollegare in parallelo al termostato ambiente ,se presente.

possibile fornire comandi diretti alle uscite a rel*, ma solo per il rel* %. 6l rel* 4 ,caldaia. , essendo controllato dalla procedura di controllo temperatura, pu1 essere controllato solo se il funzionamento * manuale. 6 comandi SMS=:+,###F>'=0?G0!!><=ps"> e ;0C=:+,###F>'=0?G0!!><=ps"> consentono di attivare o disattivare, per ognuno dei numeri preferenziali, linvio di )$) e>o squilli in caso di allarme temperatura e>o caldaia.

%G di 5!

TiGiDino, il Factotum

Di4etti conosciuti
La prima regola di un programmatore * quella di non essere il collaudatore del proprio soft0are9 questa regola, in questo caso, non * stata osservata con la conseguenza c(e * possibile c(e nel soft0are ci siano delle sviste o degli errori in alcuni punti. Lascio ai validi tecnici di Futura Elettronica lonere delle prove, pregandoli di segnalarmi qualsiasi anomalia. 2erto sarebbe desiderabile c(e non esistessero difetti, ma purtroppo questo non pu1 accadere, almeno per le versioni iniziali del programma: in caso di caduta della tensione a seguito di un blacNout, al suo ripristino il modulo G)$ non sempre si inizializza correttamente ,presenza sul mio prototipo del resistore &"47.9 nel caso di assenza della )6$, la velocit di ciclo scende sensibilmente9 il comando !IL'=0?G0!!>, pur essendo presente e funzionante, non viene gestito ,non riesco a comprenderne lutilit.9 il comando SIC'=0?G0!!> non viene gestito poic(D i comandi DT$/ sono tutti condizionati dallinserimento della pass%ord ,una tantum.9 i beep DT$/ generati dal modulo G)$ ric(iedono un tempo eccessivamente lungo9 le temperature #LL$6I, #LL$#Z e I;: sono numeri interi e quindi non possono contenere decimali9 la temperatura rilevata dal sensore sale di due gradi rispetto a quella ambientale dopo minuti circa dallaccensione del sistema e ci1 * fuorviante ai fini del controllo ambientale9 non * indispensabile ma sarebbe meglio aggiungere un L+D per indicare lattivit del processore: il L+D5 usato allo scopo * gi utilizzato dallemulazione Temperatura, mentre sarebbe pi3 utile collegarne uno al classico pin 45 in modo da essere compatibile con la serie #rduino.

#d alcuni di essi si pu1 rimediare, ma per altri * ric(iesta una maggiore quantit di tempo per prove e migliorie.

%7 di 5!

TiGiDino, il Factotum

lle)ato : H TiDiGino

Po"er

1-GT-

@SA

uto 1eset

GSM SIM900

IG0 Di)itali

Serial 22P10M In)ressi nalo)ici

1eset

ICSP

1L:G+ @ser Temp # @ser mp# GSM ?et L2D

5' di 5!

TiGiDino, il Factotum

lle)ato + H Pinout
Tme)a+890
"in + , 9 I : 8 :8 :9 :I :F +, +7 +8 +9 97 9, :, :+ 79 78 77 7, IF II I9 I8 I7 I, I: 90 89 I+ 8F 8I 89 88 87 8, 80 I0 8+ 8: 7+ 7: 70 ,9 ,F ,I ,9 ,8 ++ +: +0 :9 9I 99 98 97 "in Iame "+' ,:ZD'S"26ITG. "+4 ,TZD'. "+J ,;25=S6ITJ. "+ ,;252S6IT . "G ,;2'=. "+5 ,;25#S#6I4. "B5 ,;2J#. "BJ ,;2J=. "B ,;2J2. "B& ,;2%=. "=J ,;2%#S"26ITJ. "= ,;24#S"26IT . "=& ,;24=S"26IT&. "=! ,;2'#S;242S"26IT!. "M4 ,TZD5S"26IT4'. "M' ,:ZD5S"26IT7. "B4 ,TZD%. "B' ,:ZD%. "D5 ,TZD4S6IT5. "D% ,:ZD4S6IT%. "D4 ,)D#S6IT4. "D' ,)2LS6IT'. "#' ,#D'. "#4 ,#D4. "#% ,#D%. "#5 ,#D5. "#J ,#DJ. "# ,#D . "#! ,#D!. "2! ,#4 . "2& ,#4J. "#& ,#D&. "2 ,#45. "2J ,#4%. "25 ,#44. "2% ,#4'. "24 ,#7. "2' ,#G. "D! ,T'. "G% ,#L+. "G4 ,:D. "G' ,?:. "L! "L& "L ,;2 2. "LJ ,;2 =. "L5 ,;2 #. "L% ,T . "L4 ,62" . "L' ,62"J. "=5 ,$6);S"26IT5. "=% ,$;)6S"26IT%. "=4 ,)2<S"26IT4. "=' ,))S"26IT'. "/' ,#D2'. "/4 ,#D24. "/% ,#D2%. "/5 ,#D25.

rduino M2G
"in 0 : + , 7 8 9 I F 9 :0 :: :+ :, :7 :8 :9 :I :F :9 +0 +: ++ +, +7 +8 +9 +I +9 ,0 ,: ,: ,+ ,, ,7 ,8 ,9 ,I ,F ,9 70 7: 7+ 7, 77 78 79 7I 7F 79 80 8: 8+ 8, 0 : + , "ort 0 : + , 7 8 9 I F 9 :0 :: :+ :, :7 :8 :9 :I :F :9 +0 +: ++ +, +7 +8 +9 +I +9 ,0 ,: ,: ,+ ,, ,7 ,8 ,9 ,I ,F ,9 70 7: 7+ 7, 77 78 79 7I 7F 79 80 8: 8+ 8, 87 88 89 8I

+890
"in 0 : + , 7 8 9 I F 9 :0 :: :+ :, "ort 0 : + , 7 8 9 I F 9 :0 :: :+ :, :7 :8 :9 :I :F :9 +0 +: ++ +, +7 +8 +9 +I +9 ,0 ,: ,: ,+ ,, ,7 ,8 ,9 ,I ,F ,9 70 7: 7+ 7, 77 78 79 7I 7F 79 80 8: 8+ 8, 87 88 89 8I

TiDiGino
"ort Iame :Z' TZ' "?$S6ITJ "?$S6IT "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ DT$/ )TD Kn.c.L Kn.c.L Kn.c.L G)$4 TZ4 G)$4& :Z4 )D# ,++":;$%. )2L ,++":;$%. Kn.c.L Kn.c.L Kn.c.L L+D5 L+DJ G)$ D2D G)$ :T) Kn.c.L Kn.c.L G)$ DT: Kn.c.L Kn.c.L G)$ :6IG G)$ :+)+T :L\;CT 4 :L\;CT % Kn.c.L G)$ 2T) Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L $6); $;)6 )2< Kn.c.L #nalog ' #nalog 4 #nalog % #nalog 5

"ort Iame :Z' TZ' "?$S6ITJ "?$S6IT "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ "?$ ,L+D. TZ5 :Z5 TZ% :Z% TZ4S6IT5 :Z4S6IT% )D#S6IT4 )2LS6IT' Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; Digital 6>; $6); ,62)"4. $;)6 ,62)"J. )2< ,62)"5. Digital 6>; ,)). #nalog ' #nalog 4 #nalog % #nalog 5

GSM:8 GSM:9

GSM:F GSM:7

GSM:I

GSM:+ GSM09

GSM:,

ICSP: ICSP7 ICSP, 0 : + ,

54 di 5!

TiGiDino, il Factotum
9, 9+ 9: 90 F9 FF FI F9 F8 F7 F, F+ 98 99 9I 9F 99 I9 9 F :0 ,: 9: F0 :00 9F :: ,+ 9+ F: 99 ,0 7 :7 +I +F +9 ,, ,7 7I 7F 79 "/J ,#D2JST2<. "/ ,#D2 ST$). "/& ,#D2&STD;. "/! ,#D2!STD6. "<' ,#D2GS"26IT4&. "<4 ,#D27S"26IT4!. "<% ,#D24'S"26IT4G. "<5 ,#D244S"26IT47. "<J ,#D24%S"26IT%'. "< ,#D245S"26IT%4. "<& ,#D24JS"26IT%%. "<! ,#D24 S"26IT%5. "M% ,Z2<5S"26IT44. "M5 ,"26IT4%. "MJ ,"26IT45. "M ,"26IT4J. "M& ,"26IT 4 . "M! "+! ,2L<;S62"5S6IT!. "+& ,T5S6IT&. 822 822 822 822 #822 #:+/ GID GID GID GID #GID :+)+T "+% ,Z2<'S#6I'. "B% ,Z2<%. "B! ,TJ. "G5 ,T;)2%. "GJ ,T;)24. ZT#L% ZT#L4 "DJ ,62"4. "D ,Z2<4. "D& ,T4. 7 8 9 I F 9 :0 :: :+ :, :7 :8 8F 89 90 9: 9+ 9, 97 98 99 9I 9F 99 I+ I, I7 I8 I9 II F, F7 #nalog J #nalog #nalog & #nalog ! #nalog G #nalog 7 #nalog 4' #nalog 44 #nalog 4% #nalog 45 #nalog 4J #nalog 4 Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L 7 8 8F 89 90 9: 9+ 9, 97 98 99 9I 9F 99 I+ I, I7 I8 I9 II F, F7 #nalog J #nalog Kn.c.L Kn.c.L "% ,pulsante utente. T+$" Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L DT$/ A4 DT$/ A% DT$/ A5 DT$/ AJ G)$ I+TL+D ,]] L+D . G)$ ;I>;// 6I% 6I4

GSM:9 GSM0:

;CC ;CC ;CC ;CC ;CC re4 G?D G?D G?D G?D G?D 12S Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L

;CC ;CC ;CC ;CC ;CC re4 G?D G?D G?D G?D G?D 12S Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L Kn.c.L G)$'5 G)$4' G)$44 G)$'% G)$' G)$'J G)$'G G)$'7 G)$'!

GSM0, GSM:0 GSM:: GSM0+ GSM08 GSM07 GSM0F GSM09 GSM0I

822 #D2 #GID GID $62S $62@ )"<S )"<@ 8:T2

5% di 5!

TiGiDino, il Factotum

lle)ato , H Mappa di memoria


22P10M seriale * Mappa di memoria
Gruppo 8ariabile ;; !IL P12 P%D 1ISP TS@ TTPJK Tipo boolean boolean )tring )tring boolean )tring bUte^_ #dr 6ni dec (eP dec Len P totale #dr /in dec (eP 8alore "redefinito true false @57 4%5J true )Ustem startup 5 Descrizione 6nvio )$) allTavvio /iltra c(iamate entranti "refisso internazionale "ass0ord 6nvia )$) di risposta Testo messaggio #ccensione Trattamento numeri telefonici primari Karea liberaL true #llarme ingressi $inuti inibizione ingresso 4 $inuti inibizione ingresso % Livello allarme ingresso 4 ,#, =, 8. Livello allarme ingresso % ,#, =, 8. )econdi osservazione ingresso 4 )econdi osservazione ingresso % Testo allarme #lto ingresso 4 Testo allarme =asso ingresso 4 Testo allarme #lto ingresso % Testo allarme =asso ingresso % #zzera tempo inibizione ingresso 4 #zzera tempo inibizione ingresso % Karea liberaL false % 4 # % %4 #llarme temperatura massima #llarme caldaia #llarme temperatura minima 5 #llarmi temperatura attivi Temperatura allarme massima Temperatura allarme minima /unzionamento ,#, $, T. 6steresi ,decimi di grado. Temperatura normale Testo allarme temperatura massima Testo allarme caldaia Testo allarme temperatura minima Karea liberaL )econdi attivazione uscita 4

Generale

0 0 4 > 04

0000 '''0 '''4 '''> '''C

1 1 5 5 1 30 1

1 1 1 1 1 1 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 & & 0 3' = 4'& 0 0 0 0 0 0 0 3' 3' 3' 3' 0 0 04> 0 0 0 0 0 0 3' 3' 3' 0<' 0

' 0 < 00 04

'''' '''0 '''< '''8 '''C

03 ''') ?3 ''48

?4 ''4+ &' ''34 4&& ''GG 4&< '0'' 4&> '0'0 4&= '0'4 4&; '0'3 4<' '0'? 4<0 '0'& 4<4 '0'< 4;4 '04? 344 '0?4 3&4 '0<' 3=4 '0>E 3=3 '0>G 3=? '0=' &00 '0GG &04 '4'' &03 '4'0 &0? '4'4 &0& '4'3 &0< '4'? &0> '4'& &?> '443 &>> '4?0 <'> '4&G ><> '4GG ><= '3''

LI I?I: I?I+ LI;: LI;+ 0SS:

boolean bUte bUte )tring )tring bUte bUte )tring )tring )tring )tring boolean boolean

&0 ''33 "05 "5% 0100 1 4&> '0'0 4&= '0'4 4&; '0'3 4<' '0'? 4<0 '0'& 4<4 '0'< 4<3 '0'> 4;3 '04& 343 '0?3 3&3 '0<0 3=3 '0>G 3=? '0=' 51" 0"00 &03 '4'0 &0? '4'4 &0& '4'3 &0< '4'? &0> '4'& &0= '4'< &?= '44? &>= '4?4 1 1 1 1 1 1 30 30 30 30 1 1 1 1 1 1 1 1 30 30 30

# # 4 4 6ngresso alto 6ngresso basso 6ngresso alto 6ngresso basso false false 4 4 % %

In)ressi

0SS+ TI?: TI?:A TI?+ TI?+A TIL: TIL+

3=& '0=0 1"7


LL LLM & LLMI? boolean c(ar c(ar )tring bUte c(ar c(ar c(ar c(ar

Temperatura

!@? IST ?01 TCI TI? TL0

@sc ite

0@T:

bUte

<'= '4<' 1%0 7%8 0300 1

55 di 5!

TiGiDino, il Factotum
)econdi attivazione uscita % :ipristino :elD dopo blacNout )econdi attivazione apricancello )econdi inversione momentanea uscita 4 )econdi inversione momentanea uscita % )tato relD 4 )tato relD % Karea liberaL Knon utilizzataL Iumeri telefonici Karea liberaL

0@T+ 1IP T C TIM: TIM+ 1elaM;alJK 1elaM;alJK

bUte boolean bUte bUte bUte boolean boolean

><; '3'0 >>' '3'4 >>0 '3'3 >>4 '3'? >>3 '3'&

1 1 1 1 1

1 1 1 1 1 1 1 1 19" "5%

0 0 0 0 0 0 0 4?= 3'>4 ?';<

><; '3'0 >>' '3'4 >>0 '3'3 >>4 '3'? >>3 '3'& >>? '3'< >>& '3'> 0'43 '3GG ?';& 'GGG =0;0 0GGG

5 true

5 5 false false

>>? '3'< 1 >>& '3'> 1 >>< '3'= "48 10"4 0400 1% 1%

1ubrica Gap

c(ar

409% 1000 =0;4 4'''

1% 153% 4?&>< 34><> >GGG

5J di 5!

TiGiDino, il Factotum

lle)ato 7 H Comandi
TiDiGino * Comandi
Gruppo /unzione 6nvio )$) o squilli allTavvio /iltro c(iamate entranti ,accetta solo numeri autorizzati. "refisso internazionale ,maP caratteri. 2ambio "ass0ord ,numero di cifre. :eset ,ricarica impostazioni personalizzate. 6nvia )$) di risposta )alva impostazioni personalizzate 8isualizza stato 6ngressi e Cscite 2omandi DT$/ con pass0ord Testo startup ,maP 5' caratteri. 8isualizza tempi di inibizione ingressi 8isualizza allarme ingressi #llarme ingressi Tempo inibizione ingresso 4>% ,'X 7 minuti per evitare dopo allarme altri )$) o squilli. 8isualizza livelli allarme Livello allarme ingresso #lto>=asso>8ariazione ,presenza tensione in ingresso. 8isualizza tempi osservazione ingressi ,tempo di preallarme. Tempo di osservazione 6ngresso 4>% ,'X 7 secondi S tempo di preallarme. Testo allarme alto ingresso ` ,maP 5' caratteri. Testo allarme basso ingresso ` ,maP 5' caratteri. #zzera tempo di inibizione ingresso P a fine allarme 8isualizza le temperature di allarme #llarmi temperatura Temperatura allarme massima ,S4' X @G V2. Temperatura allarme minima ,S4' X @G V2. 8isualizza tipo funzionamento Tipo di funzionamento ,#W#utomatico, $W$anuale, TWTermostato. 6steresi ,decimi di grado. Temperatura normale ,S4' X @G V2. :ic(iedere la temperatura Testo allarme temperatura massima ,maP 5' caratteri. Testo allarme caldaia ,maP 5' caratteri. )intassi 8ariabile 2ollegata #88 /6L ":+ "?D 8alore "redefinito true false @57 4%5J

A!!:+'(/'**, *-.:+'(/'**, /0E:+12e3i , /45:+1s6,;+7e61s6, 0E$;+1s6, 0-$/:+'(/'**, $A!;+1s6, $TA8 $-):+'(/'**, T$9:+:es:o, -(-8 A.-8 A.-:+'(/'**, -(-+1/",:+0;59, .-!8 .-!+1/",:+A/</!, '$$8 '$$+1/",:+0;59, T-(+1/",A:+:es:o, T-(+1/",<:+:es:o, T-=+1/",:+'(/'**, A..8 A..:+'(/'**, A..&A>:+?,+0;99, A..&-(:+?,+0;99, *9(8 *9(:+A/&/T, -$T:+0;"0, ('0:+?,+0;99, TE&/8 T@-:+:es:o, T-(:+:es:o,

Generale

:6)"

true

T)C 6I64, 6I6% #L6 #L6 6I64, 6I6%

false )Ustem startup

false

In)ressi 0ptoisolati

L684, L68% ;))4, ;))% ;))4, ;))% T6I4#, T6I%# T6I4=, T6I%= T6a4, T6a% I;:, #LL$#Z, #LL$6I #LL #LL$#Z #LL$6I /CI /CI 6)T I;: Temp8al, Temp$aP, Temp$in TB6 T6I

4 6ngresso 4 alto 6ngresso 4 basso false

Temperatura

false % 4!

%4

#llarme Temperatura $assima #llarme 2aldaia

5 di 5!

TiGiDino, il Factotum
#llarme Temperatura $inima S , 4%

Testo allarme temperatura minima ,maP 5' caratteri. #zzera temperature minima e massima #ttiva>Disattiva :elD P Tempo di attivazione :elD P ,'W=istabile. 8isualizza stato :ipristino :ipristino :elD dopo blacNout Tempo di attivazione apricancello ,'W=istabile. Tempo di inversione momentanea stato :elD P ,4X7 secondi. 2ancellazione totale lista apricancello ,tranne i primi G numeri. 2ancella numero da lista apricancello 8isualizza numeri apricancello ,pagina gruppi di G. $emorizza numero lista apricancello ,maP 4& caratteri. 8isualizza numeri preferenziali ,prime G posizioni. 2ancella numero preferenziale in posizione K4XGL $emorizza numero preferenziale in posizione K4XGL ,maP 4& caratteri. Iumeri preferenziali a cui verranno inviati gli )$) Iumeri preferenziali a cui verr fatto uno squillo 8isualizza ingressi analogici 8isualizza ingressi digitali 8isualizza uscite digitali 6mposta uscita digitale 8isualizza uscite "?$ 6mposta uscita "?$ 8isualizza contenuto memoria ++":;$ seriale )crive valore nella memoria ++":;$ seriale

T.':+:es:o, T0E$ '9T+1/",:+'(/'**, '9T+1/",:+0;59, 0-/8 0-/:+'(/'**, TA):+0;59, T-&+1/",:+1;9, 5A);+1s6, 5A):+7Am,;+1s6, &A)8:+";3",;+1s6, &A):+7Am,;+1s6, (9&8;+1s6, (9&+1;8,;+1s6, (9&+1;8,:+7Am,;+1s6, $&$+1"3...8,:+'(/'**,;+1s6, !')+1"3...8,:+'(/'**,;+1s6, A-(8 5-(8 5'9T8 5'9T+4;13,:+0/1, /4&8 /4&+4;13,:+0;"55, /EEB+ad2,;+siCe, /'BE+ad2,;+siCe,:+Dal,

TL; Temp$aP, Temp$in :elaU8al^_ ;CT4, ;CT%

false '

@scite a 1elN

:6" T#2 T6$4, T6$%

true 5 5

1ubrica

TT"^_ TT"^_ #na6n8al^_ Dig6n8al^_ Dig;ut8al^_ Dig;ut8al^_ "?$8al^_ "?$8al^_

5 5

))iuntivi

' '

0ote8 9 : possibile usare indifferentemente il maiuscolo o il minuscolo; 9 i caratteri di separazione <8< e <;< possono essere sostituiti da un semplice spazio .unica eccezione sono i comandi PEE= e P#=E/> ma attenzione a non inserirne pi? di uno@ 9 il comando FI"#$O%&OFF'> pur essendo presente e funzionante> non iene gestito .non riesco a comprenderne lAutilitB/; 9 il comando SI(#$O%&OFF' non iene gestito poichC i comandi DTMF sono tutti condizionati dallAinserimento della pass%ord .una tantum/;

5& di 5!

TiGiDino, il Factotum

lle)ato 8 H Comandi DTM!


TiDiGino * Comandi DTM!
Tipo Tasto /unzione Iormale 2ambia stato rel* 4 ,modalit bistabile. 2ambia stato rel* % ,modalit bistabile. 2ambia stato rel* 4 ,modalit monostabile. 2ambia stato rel* % ,modalit monostabile. )tato del rel* 4 )tato del rel* % )tato dellTingresso 4 )tato dellTingresso % 4 beep presenza di tensione % beep assenza di tensione :isposta /unzione "rogrammazione Tempo monostabile rel* 4 ,tra 4 e 7. Tempo monostabile rel* % ,tra 4 e 7. :isposta 4 beep comando accettato % beep comando non accettato

: +
Cscite

, 7 8 9

4 beep rel* ;I % beep rel* ;//

6ngressi

I F 9 0 O P

Generale

Termina telefonata +ntra nella modalit di programmazione +sci dalla modalit di programmazione

"rogramma

0ote8 durante la fase di connessione e riconoscimento> il sistema in iando tre beep consecuti i comunica che per procedere : richiesta la pass%ord; una olta che la pass%ord inserita : stata riconosciuta> il sistema emette un beep> che indica che la pass%ord : stata accettataD

5! di 5!