Sei sulla pagina 1di 41

UNIVERSITA TELEMATICA e-Campus

Facolt di Ingegneria Corso Di Laurea in Informatica

Progettazione e sviluppo in C++ di una centralina di controllo per serrature motorizzate con controllo accessi

Relatore: Luigi Sarti

Tesi di Laurea di: Aldo Fadalti Matricola numero 5500

Anno Accademico 2011/ 2012

Universit Telematica e-Campus

Facolt di Ingegneria

Indice
Introduzione .............................................................................................. 3 Requisiti..................................................................................................... 6 Concetti del corso di Algoritmi e Strutture Dati presenti nellambito della progettazione e sviluppo del software della centralina .................... 8 Scelta del microcontrollore ....................................................................... 9 Pre-verifica disponibilit RAM e uso della EEprom per i dati permanenti ................................................................................................................. 10 Scelta del Keypad e comunicazione con la centralina ............................ 12 Metodi di inizializzazione e startup in Arduino...................................... 15 Inizializzare le risorse hardware.............................................................. 16 Creazione di oggetti polimorfici sulla base di parametri iniziali costanti ................................................................................................................. 18 Gli Interrupt............................................................................................. 21 Creazione degli oggetti OOP ad allocazione dinamica tramite loperatore New()....................................................................................................... 23 Override del metodo di sistema per ricavare data e ora da un chip DS1307.................................................................................................... 24 Debugging, gestione errori e difficolt caratteristiche dello sviluppo con un microcontrollore ................................................................................. 25 Gestione password, parsing e logica di ricerca ....................................... 27 Realizzazione hardware della centralina................................................. 29 Motoriduttore .......................................................................................... 31 Esploso di montaggio.............................................................................. 33 Possibili utilizzi del prototipo ................................................................. 34 Analisi comparativa con i dispositivi commerciali esistenti ed elementi di novit................................................................................................... 37 Bibliografia.............................................................................................. 41

Pag. 2

Universit Telematica e-Campus

Facolt di Ingegneria

Introduzione
In un periodo di crisi economica che sta coinvolgendo i Paesi pi industrializzati, doveroso indirizzare gli sforzi creativi verso la ricerca di nuove tecnologie. LItalia e un paese non in grado di competere con i nuovi Paesi emergenti dal punto di vista della manodopera industriale. Di conseguenza, di fondamentale importanza maturare letica di creare novit tecnologiche in ogni contesto. Ecco da dove nasce lidea di progettare una serratura motorizzata. Ormai consuetudine nello stile di vita quotidiana usufruire di automatismi che rendono il vivere pi agevole. Sono svariate le comodit di cui ormai difficile fare a meno; si va dallaria condizionata ai finestrini elettrici di unautomobile, dai cancelli automatici alle tapparelle elettriche di una casa. La serratura rimane ancora uno dei pochissimi dispositivi profondamente legati allazione manuale della persona, si pensi che la prima chiave risale al 4000 a.C. nellantico Egitto. Pur essendosi evoluta nella tecnica di realizzazione costruttiva, la chiave rimasta concettualmente invariata nei secoli. Bisogna sempre ruotarla manualmente. La chiave anche un oggetto ingombrante da tenere sempre con s e, in caso di perdita, sussiste il serio pericolo di duplicazione. E stato riscontrato che le porte blindate, in assenza della chiusura con le mandate, sono facilmente apribili semplicemente forzando lo scrocco attraverso linserimento di una piccola lastra radiografica. E altres consuetidine, forse per pigrizia, non chiudere le mandate nelle ore diurne o per brevi permanenze nellambiente, con conseguente esposizione al rischio di ingressi forzati ad opera di indesiderati. Nel progetto della serratura motorizzata, la centralina impone la chiusura completa delle mandate ad ogni accostamento della porta. La presenza di un interruttore facilmente accessibile, chiamato Day&Night, inibisce in caso di attivazione la chiusura automatica che risulterebbe oppressiva negli ambienti lavorativi.

Pag. 3

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 1: Vista esterna del dispositivo installato

Se si considerano sufficienti i motivi finora esposti per dotarsi di una serratura motorizzata, si possono allora valutare anche altre funzionalit dovute alla presenza di una centralina elettronica. La pi importante sicuramente caratterizzata dal controllo accessi che, oltre a garantire lingresso autenticato, permette anche di limitare lentrata degli utenti solo in certe fasce orarie di determinati giorni settimanali. Oltre a ci, lutente con i privilegi di ammistratore pu in qualunque momento disporre dellelenco completo degli accessi, comprensivo di orario e di identificativo, salvato su una comune chiavetta USB. Linstallazione del dispositivo che abilita fisicamente lapertura automatica intuitivo e applicabile a qualunque sistema di chiusura gi pre esistente.

Pag. 4

Universit Telematica e-Campus

Facolt di Ingegneria

Ci reso possibile, a livello meccanico, dalla giunzione mediante coppia conica fra il perno del motoriduttore e il codolo del cilindro. Il numero ridotto di componenti di cui composto il prototipo costuisce un ulteriore vantaggio sia in termini di costi che di installazione.

Figura 2: Vista interna del prototipo montato

Pag. 5

Universit Telematica e-Campus

Facolt di Ingegneria

Requisiti
La centralina soddisfa le seguenti specifiche: Funzione day&night attivabile con semplice tasto selettore; in modalit day non chiude le mandate Programmabile facilmente dallutente da tastiera Impostazione di password personalizzate con accesso a fasce orarie ristrette, giornaliere o settimanali fino a 50 utenti Blocco tastiera esterna (pressione di 2,5 secondi del pulsante di apertura interno); sblocco automatico allapertura dallinterno Rolling code: permette di inserire pi numeri fino allinserimento della password corretta(per evitare la memorizzazione visiva di chi osserva mentre digiti il codice) La tastiera comunica con la centralina in modo criptato, anche collegando i fili tra di loro, il sistema non apre la porta. Dopo 30 digitazioni casuali, il sistema si blocca per 3 minuti. Funzione anticoercizione: inserendo il proprio codice +1 apre la porta e chiama e/o manda SMS fino a 5 numeri di telefono con funzione allarme Apertura e chiusura automatica di scrocco e mandate senza lausilio delle chiavi Apertura da remoto tramite un semplice squillo telefonico senza costo Gestione degli utenti abilitati allapertura da remoto tramite semplici SMS autorizzati da un codice amministrativo Memorizzazione degli ultimi 5500 accessi, con relativo orario. Lutente amministratore ha la possibilit di scaricare su una chiavetta USB i dati memorizzati in un file formato Excel

Pag. 6

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 3: Specifiche operazionali del software del microcontrollore

Pag. 7

Universit Telematica e-Campus

Facolt di Ingegneria

Concetti del corso di Algoritmi e Strutture Dati presenti nellambito della progettazione e sviluppo del software della centralina
1. Applicazione di Design Pattern per esigenze tipiche dei microcontrollori applicati al C++ 2. Concorrenza nel microcontrollore a CPU singola. Uso degli interrupt per la gestione di processi secondari a priorit Real Time. Variabili volatili 3. Uso di meccanismi di astrazione, tipici della programmazione OOP, come strumento per un ottimale riutilizzo di codice. 4. Il concetto di ricorsione applicato alla scansione di strutture dati in memoria EEprom. Complessit teorica dellalgoritmo. Vantaggi e svantaggi nelluso di una EEprom 5. Applicazione dei concetti fondamentali della programmazione orientata agli oggetti: incapsulazione, strutturazione gerarchica delle classi, ereditariet, polimorfismo e information hiding 6. Programmazione event driven in C++ in risposta a eventi fisici esterni trasmessi da sensori e keypad 7. Gestione delle eccezzioni nel microcontrollore. Debugging e monitoring della memoria su un dispositivo privo di output visivo, con uptime continuo al 100% (watchdog) 8. Trasmissione seriale tra microcontrollori. Ricezione dei caratteri dal keypad e corrispettivo invio di informazioni sul segnale acustico 9. Gestione password, parsing e logica di ricerca. 10.Tecniche avanzate della programmazione OOP nel microcontrollore, hacking dello stesso al fine di disporre di Templates e allocazione di oggetti (operatori new()e free())

Pag. 8

Universit Telematica e-Campus

Facolt di Ingegneria

Scelta del microcontrollore


Arduino un microcontrollore open source programmabile in C++.

Figura 4: Una foto del microcontrollore Arduino Mega

Il modello utilizzato per governare la centralina di questo progetto il Mega basato su processore ATmega1280 ad una frequenza di 16MHz. LArduino Mega ha 54 input/output digitali, 16 input analogici e 4 porte seriali. La memoria Flash di 128KB ed allo stesso tempo la massima dimensione possibile del compilato, la SRAM di 8KB ed la quantit di memoria disponibile a run-time per le variabili e per ogni altra struttura temporanea, disponibile anche una EEprom di 4KB utilizzata dal software di questo progetto per contenere le password degli utenti con le loro restrizioni di accesso.

Pag. 9

Universit Telematica e-Campus

Facolt di Ingegneria

Pre-verifica disponibilit RAM e uso della EEprom per i dati permanenti


Nei microcontrollori la quantit di RAM disponibile sempre molto limitata per mantenere basso il prezzo del prodotto e ridurre al massimo le dimensioni. In tali condizioni fondamentale progettare fino dallinizio il software in modo tale da non necessitare di grandi strutture dati nella memoria volatile che risulterebbe ben presto insufficiente. Nel software oggetto di questa tesi la pi grande struttura dati rappresentata dal numero di utenti programmabili con allinterno i dati caratteristici di accesso: struct StrutturaPwd { char pwd[MAX_PWD_LEN]; //5 bytes signed char deleted; //1 byte signed char dayOfWeek[DAYS]; //7bytes signed char fromHour[DAYS]; //7bytes signed char toHour[DAYS]; //7bytes signed char fromMinute[DAYS]; //7bytes signed char toMinute[DAYS]; //7bytes }; La quantit di spazio richiesta dalla struttura va moltiplicata per i 50 utenti disponibili da specifiche. Una tale dimensione in bytes risulterebbe essere di 50x(5+1+7+7+7+7+7), decisamente troppa per lesigua RAM disponibile alla quale va comunque garantita una minima quantit libera per ogni evenienza. Si cos deciso di far risiedere i dati degli utenti nella EEprom senza mai spostarli o copiarli nella RAM per le operazioni di ricerca/inserimento/cancellazione. La memoria EEprom, Electrically Erasable Programmable (Read-Only) Memory, per concezione piuttosto rapida nellaccesso in lettura ma molto lenta in scrittura dato che in tale operazione si devono ossidare i gates dei transitors Floating Gate MOSFET interni alla memoria Eeprom. Per meglio dare una sensazione pratica, vengono, per cos dire, riscaldati delle sorte di fusibili ripristinabili corrispondenti agli 1 e 0 della memoria stessa, e per tale motivo sussiste un limite massimo nel numero di riscritture di una cella EEprom pari circa a 1000/1500 e loperazione richiede quindi un certo tempo in pi rispetto alla lettura. Nel momento in cui un utente inserisce il proprio codice per essere autenticato dalla centralina, vengono scansionate le password direttamente nella EEprom senza trasferire nulla in RAM.

Pag. 10

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 5: Immagine del microcontrollore a bordo dell'Arduino Mega. La EEprom di 4 KB integrata.

Pag. 11

Universit Telematica e-Campus

Facolt di Ingegneria

Scelta del Keypad e comunicazione con la centralina

Figura 6: Il keypad scelto di classe IP67 con uscita a matrice

Il keypad lo strumento principale di input per lutente. Tramite il keypad possibile entrare nel men amministrativo e svolgere le principali impostazioni della centralina. Le pi importanti sono laggiunta/eliminazione di utenti, limpostazione di data e ora e il reset a fabbrica di tutto il sistema.

Figura 7: Fotografia reale del keypad

Pag. 12

Universit Telematica e-Campus

Facolt di Ingegneria

Il keypad di fabbrica predisposto con un uscita a matrice, il che significa dover impiegare ben nove ingressi digitali sul microcontrollore oltre ai collegamenti necessari per alimentare lilluminazione dei tasti alla loro prima pressione. Per ridurre il numero di connessioni tra keypad e centralina si scelto di cambiare la comunicazione da analogica a digitale. Invece di collegare direttamente luscita a matrice alla centralina la si collega ad un piccolo microprocessore PIC installato su una PCB posta dietro il keypad.

Figura 8: Il microcontrollore PIC legge la matrice del keypad e invia i dati in protocollo seriale alla centralina

Il PIC si prender cura di leggere le pressioni dei tasti dalluscita a matrice e di trasmetterli alla centralina in protocollo seriale alla velocit di 600 bit per secondo. Con tale digitalizzazione si riduce il numero di connessioni con la centralina a un solo filo per la trasmissione e altri due per lalimentazione. Inoltre la bassa velocit di trasmissione scelta rende molto pi ampia la possibilit di installare i cavi allinterno di canaline disturbate elettricamente dal passaggio di corrente in altri cavi vicini.

Pag. 13

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 9: Il circuito stampato ospitante due PIC per la conversione A/D di suoni e pressioni tasti

Pag. 14

Universit Telematica e-Campus

Facolt di Ingegneria

Metodi di inizializzazione e startup in Arduino


Per scrivere del codice sorgente in grado di far funzionare il microcontrollore Arduino sono necessari soltanto due metodi void setup() e void loop() Il primo una sorta di costruttore del microcontrollore stesso. Viene eseguito una sola volta allinizio e solitamente lo si utilizza per: inizializzare risorse hardware definire gli interrupt collegare metodi in risposta agli eventi di interrupt creare gli oggetti OOP ad allocazione dinamica tramite loperatore New() abilitazione interna di resistenze di Pull Down negli ingressi digitali inizializzare le porte seriali e settarne la velocit Override del metodo di sistema per ricavare data e ora da un DS1307 instanziare gli oggetti polimorfici sulla base di parametri costanti iniziali Il secondo altro non che il metodo che, come pu suggerire il nome stesso, viene continuamente richiamato fin tanto che viene fornita alimentazione alla centralina. Tra le operazioni fondamentali eseguite continuamente dal microcontrollore vi sono: controllo del buffer seriale per cogliere la presenza di dati relativi alla pressione di un tasto sul keypad controllo della pressione del pulsante di apertura interna per lapertura porta controllo della pressione del pulsante di apertura interna per la disabilitazione del keypad quando la pressione si prolunga oltre i due secondi controllo dello stato del deviatore che imposta la modalit Day & Night abilitando la chiusura automatica delle mandate controllo dello stato del sensore porta

Pag. 15

Universit Telematica e-Campus

Facolt di Ingegneria

Inizializzare le risorse hardware


Linizializzazione delle risorse hardware un compito che viene svolto allavvio del microcontrollore. Pi precisamente allaccensione si avvia un programma predefinito, il Bootloader, che richiama staticamente il metodo void setup() Tale metodo previsto per dare la possibilit di richiamare procedure che impostino fisicamente parti dellhardware del microcontrollore stesso al fine di predisporle alluso dedicato allo svolgimento dellapplicativo. Per lo sviluppo del progetto necessario avvalersi del metodo void setup() in modo tale da: impostare i canali digitali come ingresso o uscita attivare resitenze interne da 20KOhm di Pull Down impostare canali analogici come ingressi o uscite di tipo PWM (Pulse Width Modulation) impostare la velocit di trasmissione sulle porte seriali I canali digitali vengono predisposti come ingresso o come uscita tramite la chiamata void pinMode(canale, INPUT/OUTPUT) Se impostati come ingresso, possibile leggerne lo stato di contatto o apertura tramite la funzione int digitalRead(canale) ottenendo 1 nel primo caso o 0 nel secondo. Nel caso di canali digitali configurati come output, tramite la procedura void digitalWrite(canale, HIGH/LOW) possibile portare la tensione a massa nel caso di LOW o a 5V nel caso di HIGH. Il progettista deve sempre tenere presente che la massima quantit di corrente erogabile da un singolo canale del microcontrollore Arduino di 40mA. Tale quantit normalmente sufficiente ad illuminare i tradizionali led di uso comune in elettronica, ma nel caso in cui sia necessario alimentare carichi pi consistenti bisogner necessariamente utilizzare come amplificatore di corrente un transistor NPN. Il risultato finale con lutilizzo di un transistor, quello di alimentare il carico direttamente dalla sorgente di corrente principale che, nei casi pi comuni, lalimentatore stesso. In tal caso, avendo la massa in comune con il carico, va tenuta in considerazione la possibilit di avere disturbi di tensione sul microcontrollore (EMI Electro Magnetic Interference); ci

Pag. 16

Universit Telematica e-Campus

Facolt di Ingegneria

seriamente possibile alimentando motori a elevato assorbimento di corrente. Nel progetto in essere, i consumi di 1.6A del motore, a seguito di analisi effettuata con loscilloscopio, non generano disturbi tali da richiedere contromisure di schermatura elettromagnetica. Lattivazione delle resistenze interne di Pull Down si effettua semplicemente chiamando void digitalWrite(canale, HIGH) dopo aver impostato il canale come ingresso. La resistenza di Pull Down connette il polo positivo del canale a massa in modo tale da filtrare i disturbi nella lettura dando un preciso riferimento nullo nel caso in cui esternamente non si cortocircuitino i due poli del canale. Il metodo di inizializzazione void setup() viene infine usato per impostare la velocit di comunicazione delle porte seriali. Il protocollo seriale non prevede lauto-negoziazione della velocit tra i dispositivi, questa va preimposta al medesimo valore su entrambi tramite il metodo Serial.begin(9600); Nel progetto si utilizzano due porte seriali, relativamente per: la comunicazione tra il microcontrollore Arduino nella centralina e il PIC posizionato sul retro del keypad luscita dedicata alle stringhe di debug

Pag. 17

Universit Telematica e-Campus

Facolt di Ingegneria

Creazione di oggetti polimorfici sulla base di parametri iniziali costanti


E previsto il funzionamento della centralina in due configurazioni: collegata direttamente alla matrice di un keypad collegata in ricezione seriale a un keypad digitale E evidente che gran parte delle funzionalit logiche siano comuni alle due tipologie di tastiere; come ad esempio: lettura del tasto premuto disabilitazione fisica del dispositivo segnalazione acustica accensione retroilluminazione in configurazione notturna cancellazione del buffer a scadenza di un timeout Si pu quindi dire che entrambe le tastiere rispondano a specifiche comuni pur realizzandole internamente in modo diverso essendo di differente tipologia. In tale scenario la programmazione a oggetti ci permette di creare un keypad virtuale costituito esclusivamente dalle specifiche logiche comuni a tutte le tipologie di keypad reali, tralasciando le peculiarit fisiche non comuni. Succesivamente la centralina potr riferirsi unicamente al keypad virtuale senza sapere con quale tipo di keypad reale si sta interfacciando.

Pag. 18

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 10: Diagramma delle classi per il Keypad

Nella figura sopra riportata possibile vedere come quanto spiegato sia stato realizzato, agglomerando tutte le parti logiche comuni nella classe virtuale/astratta KeybVirtual. Le classi KeybSerial e KeybAnalog, derivate della classe astratta (figlie), contengono tutte le caratteristiche di funzionamento specifiche per la loro tipologia fisica di tastiera. Ad esempio il metodo void disable()

Pag. 19

Universit Telematica e-Campus

Facolt di Ingegneria

comune a tutte le tipologie, permette di disabilitare qualunque keypad da tentativi di utilizzo fisico esterno inibendo la ricezione della pressione dei tasti. Mentre il metodo void serial2Write() della classe KeybSerial permette di inviare in forma digitale, sottoforma di byte, il codice ASCII corrispondente al tasto premuto. Si faccia bene attenzione che dal punto di vista logico non KeybSerial che invia il byte direttamente alla centralina, ma la centralina stessa che legge il carattere, corrispondente alla pressione del tasto, dalla classe astratta KeybVirtual! Si sar anche notata in figura la presenza della classe Keypad evidenziata in arancione e riferita da KeybAnalog con una freccia differente. Ci sta a significare che Keypad una semplice variabile di KeybAnalog e pertanto ne potranno essere chiamati a piacere i metodi pubblici da parte del contenitore KeybAnalog. Infatti se si decide di collegare alla centralina direttamente una tastiera a matrice, sar compito della centralina stessa occuparsi del parsing della matrice rilevando le pressioni dei tasti. La classe Keypad fa parte delle librerie Arduino di sistema.

Figura 11: Principale vista gerarchica delle classi del SW

Si vuole ricordare che nella tecnologia Arduino, per ridurre luso di risorse, non prevista di serie la possibilit di implementare unarchitettura polimorfica. Il programmatore pu scegliere di disporne e di abilitarla attraverso la seguente chiamata allinizio del codice sorgente: extern "C" void __cxa_pure_virtual() { while(1); }

Pag. 20

Universit Telematica e-Campus

Facolt di Ingegneria

Gli Interrupt
LInterrupt un segnale asincrono che indica il 'bisogno di attenzione' da parte di una periferica finalizzata ad una particolare richiesta di servizio. Nel progetto in esame vengono utilizzati due interrupt per la lettura dei seguenti dispositivi: encoder motore sensore di chiusura porta Nel primo caso vi un encoder che, solidale alla rotazione del perno motore, genera tre impulsi elettrici per ogni rotazione completa attorno allasse. E evidente che il numero di impulsi provenienti dallencoder molto elevato; avendo scelto un motore da 80 rpm con riduzione 1:50 allora il numero di impulsi al minuto sar 80x50x3= 12.000 imp/min. Tale frequenza sarebbe troppo elevata per poter verificare la presenza di tensione, corrispondente ad un impulso, nel metodo void loop() Infatti, in modalit watchdog, non sufficiente affidarsi rigorosamente alla frequenza di clock della CPU, anche se elevata, per non perdere nemmeno unimpulso. Ma necessario garantire che anche il metodo contenente il controllo dellimpulso debba terminare almeno entro la met della durata impulso stesso. Con i dati di progetto il tempo massimo di durata del metodo principale void loop() , affinch non venga perso nemmeno un impulso, dovrebbe essere di (3.600/12.000)/2=0.15 sec. Un tempo decisamente troppo breve e comunque impossibile da garantire sotto certe condizioni logiche in cui operazioni considerate unitarie, come ad esempio lapertura dello scrocco, aumenterebbero la durata del metodo principale a qualche secondo. Ladozione degli interrupt in tale situazione permette di avere un metodo che, nel caso di un singolo impulso, viene automaticamente richiamato sospendendo ogni altro flusso in esecuzione. Gli unici vincoli da rispettare sono: la limitata disponibilit fisica di interrupt lobbligo di rendere il metodo richiamato il pi breve possibile Ecco che nel progetto in risposta diretta agli impulsi encoder ci si limita solamente a incrementare una variabile: void encoderListener(){ encoderCount++; } Questo metodo viene assegnato allinterrupt con la dichiarazione

Pag. 21

Universit Telematica e-Campus

Facolt di Ingegneria

attachInterrupt(<canale>, encoderListener, CHANGE); in cui viene passato come parametro un puntatore al metodo in gestione. Non ultimo, va ben tenuto presente che ogni variabile modificata da un metodo richiamato da un evento di tipo interrupt, deve essere dichiarata di tipo volatile Con tale dichiarazione, propria del linguaggio C++, ci si assicura che il valore della variabile verr sempre aggiornato ad ogni lettura della stessa evitando ogni meccanismo di caching. Alla fine di quanto detto lecito affermare che luso degli interrupt a tutti gli effetti una modalit di programmazione concorrente.

Pag. 22

Universit Telematica e-Campus

Facolt di Ingegneria

Creazione degli oggetti OOP ad allocazione dinamica tramite loperatore New()


Tra i vantaggi portati dalla programmazione a oggetti vi , in termini di performaces, la capacit di poter creare strutture dati, con metodi definiti allinterno, facendole esistere solo per il tempo necessario alla computazione. Tali strutture dati, nel momento in cui ne viene allocata fisicamente la memoria, altro non sono che gli oggetti da cui trae nome la Programmazione Orientata agli Oggetti. Tramite il metodo Object New(<Class Name>) viene allocata fisicamente la memoria ottenendo in ritorno un puntatore corrispondente alloggetto creato. Una volta soddisfatta la necessit di utilizzo delloggetto creato si deve necessariamente deallocare la memoria precedentemente riservata alloggetto prima che il puntatore riferito allo stesso oggetto risulti non essere pi accessibile poich divenuto esterno al campo di visibilit. Il metodo in questione Void free(<pointer>) Non si pu non accennare al fatto che, al giorno doggi, esistano linguaggi di programmazione che non necessitano di alcun tipo di deallocazione esplicita di oggetti nel codice sorgente. Stiamo parlando di linguaggi che, come ad esempio Java, si basano su una Virtual Machine che si prende cura di deallocare automaticamente le zone di memoria a cui fanno riferimento puntatori divenuti ormai inaccessibili. Tale operazione viene comunemente chiamata Garbage Collection. Nella tecnologia di Arduino non nativamente supportato luso dei meotdi sopra descritti per allocare e deallocare oggetti. Tale scelta motivata dai bassi costi e ridotti spazi del microcontrollore. E lasciata al programmatore la scelta di abilitare o meno il pieno supporto allallocazione dinamica di oggetti tramite la seguente dichiarazione: #include <stdlib.h> extern void * operator new(size_t size){return malloc(size);} void operator delete(void * ptr) {free(ptr);}

Pag. 23

Universit Telematica e-Campus

Facolt di Ingegneria

Override del metodo di sistema per ricavare data e ora da un chip DS1307

Figura 12: L'orologio in chip al quarzo modello 1307 della Dallas

I requisiti del progetto per la gestione delle fascie orarie a giorni settimali, impongono che il microcontrollore possa disporre dellora esatta anche in condizioni di riavvio a seguito di mancanza di corrente elettrica. Il chip DS1307 di fatto un orologio al quarzo che, quando viene alimentato costantemente con una tensione di 3V, in grado di fornire un valore numerico corrispondente allora esatta. Tale valore numerico viene trasmesso digitalmente tramite protocollo I2C. Il protocollo I2C ha la particolare caratteristica di permettere la comunicazione con un elevato numero di dispositivo sui medesimi cavi di trasmissione. Ci permesso in virt dellassegnamento di un indirizzo, corrispondente ad un byte univoco, ad ogni singola periferica. La comunicazione coordinata da un unico dispositivo master; nel caso di questo progetto lo stesso microcontrollore Arduino. Il valore numerico trasmesso dal chip consiste nel numero di secondi trascorsi a partire dal 1 Gennaio 1970 allistante corrente.

Pag. 24

Universit Telematica e-Campus

Facolt di Ingegneria

Debugging, gestione errori e difficolt caratteristiche dello sviluppo con un microcontrollore


Sviluppare codice sorgente per un microcontrollore presenta notoriamente svariate difficolt aggiuntive rispetto a quelle che si incontrano impiegando un comune personal computer. Prima fra tutte la mancanza di un monitor dove poter visualizzare comodamente informazioni di debug e stack di errori durante lo sviluppo. E evidente che non potendo fare a meno di una qualunque segnalazione, perlomeno a seguito di certi cambiamenti di stato critici, bisogna ricorre alloutput prodotto da periferiche non propriamente progettate per lo scopo. E il caso tipico dellutilizzo di led per la segnalazione luminosa e buzzer piezoceramici per la segnalazione acustica. Nei primi possibile variare la frequenza di lampeggio e nei secondi possibile variare la frequenza sonora, ottenendo toni alti o bassi.

Figura 13: Diodi led e un buzzer piezo elettrico

Oltre alle problematiche finora descritte, nello sviluppo di codice sorgente per un microcontrollore si aggiunge spesso anche la mancanza di poter effettuare il debug del codice riga per riga. E, di conseguenza, non possibile esaminare il valore delle variabili durante lesecuzione del software. Una delle sostanziali differenza fra un microcontrollore ed un personal computer, seppure ad uso industriale, sta nelle pretese molto pi rigide di continuo up-time del primo rispetto al secondo. Infatti mentre per un personal computer, solo per aggiornamenti indispensabili, sono previsti dei fermi anche di svariati giorni nellarco di un anno; da un microcontrollore, quale pu essere Arduino, si pretende che resti in funzione 24 ore su 24

Pag. 25

Universit Telematica e-Campus

Facolt di Ingegneria

senza soluzioni di continuit. In aggiunta nei microcontrollori, nemmeno a seguito di situazioni impreviste, si deve ferificare un errato accesso a zone di memoria non corrette; in quanto, essendo comunemente usati linguaggi di programmazione di basso livello, questo provocherebbe nel migliore dei casi il reset del sistema.

Pag. 26

Universit Telematica e-Campus

Facolt di Ingegneria

Gestione password, parsing e logica di ricerca


La centralina stata configurata in modo tale da essere in grado di gestire fino a 50 utenti. Tale dimensione deriva direttamente dalla capacit di memorizzazione, pari a 4 KB, della Eeprom interna al microcontrollore Arduino Mega. Per rendere pi difficile la memorizzazione della propria password di accesso da parte di persone nelle immediate vicinanze, lutente ha la possibilit di effettuare pressioni casuali di vari tasti prima di inserire la corretta sequenza di ingresso corrispondente alla propria password. Questa modalit, comunemente chiamata Rolling Code, molto diffusa nel settore delle casseforti elettroniche. Il riconoscimento della password viene effettuato su un buffer di caratteri contenente le ultime 5 pressioni inviate dal keypad. La prima di operazione di riconoscimento consiste nellindividuare lindice della struttura dati in memoria Eeprom contenente la password corrispondente, attraverso il seguente metodo: PwdData* Pwds::getPwdIndexByPwdNotDeletedd(String strPwd) { PwdData* result=NULL; for(int i=0; i<MAX_PWDS; i++) { Pwd p = getPwd(i); if(!p.isDeleted()) { PwdDataMatch pwdDataMatch = p.isPwd(strPwd); if(pwdDataMatch.isMatch()) { result = new PwdData(i, pwdDataMatch.getType()); break; } } } return result; } Come si pu notare direttamente dal codice sorgente, le strutture dati vengono scansionate dalla prima allultima, essendo memorizzate senza seguire alcun tipo di ordine. Naturalmente la ricerca si interrompe quando c uguale corrispondenza fra la password inserita dallutente e quella contenuta nella struttura dati in esame. Si noti che sono escluse le strutture dati che sono state precedentemente marcate come cancellate.

Pag. 27

Universit Telematica e-Campus

Facolt di Ingegneria

Una volta stabilita la validit della password inserita, viene verificata labilitazione allingresso nel giorno e nella fascia oraria corrente. Infatti lutente amministratore pu decidere di limitare gli orari e i giorni di accesso di tutti gli altri utenti.

Figura 14: Diagramma delle classi per la gestione accessi via password a fasce orarie

Pag. 28

Universit Telematica e-Campus

Facolt di Ingegneria

Realizzazione hardware della centralina


Il circuto stampato della centralina stato progettato al computer con un software CAD dedicato. E prassi comune, anche per prototipi amatoriali, delegare la realizzazione fisica dello stampato a una delle molte aziende specializzate in questo tipo di stampa. In tal caso si adoperato il software usato nella progettazione per generare dei files di tipo Gerber. Questi files vengono resi disponibili allazienda di stampaggio e sono compatibili industrialmente con le apparecchiature CAD/CAM del realizzatore.

Figura 15: Printed Circuit Board ospitante il microcontrollore Arduino Mega e lelettronica logica e di potenza

La scheda a circuito stampato stata disegnata per ospitare componenti comunemente reperibili in commercio con modalit di montaggio a foro passante. Di seguito si riportano le immagini reali della centralina assemblata. Si notino i seguenti elementi principali: lArduino Mega inserito capovolto la resistenza di potenza gialla che limita lassorbimento del motore la morsettiera di tipo a castello i tre relay rettangolari di colore nero che fungono da Ponte H per il motore e da Open Collector verso altri eventuali dispositivi esterni

Pag. 29

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 16: Vista lato componenti della centralina

Figura 17: Vista lato saldature della centralina

Pag. 30

Universit Telematica e-Campus

Facolt di Ingegneria

Motoriduttore
E stato scelto il seguente motoriduttore a spazzole considerando: la velocit media a coppia massima i consumi di corrente la bassa tensione continua, nel rispetto delle normative la presenza di un encoder a effetto Hall integrato lelevato tempo di vita dichiarato dal produttore

Figura 18: Esploso e dimensioni del motoriduttore

Figura 19: Dati tecnici del motoriduttore

Motoriduttore epicicloidale. Albero di uscita supportato da due cuscinetti a sfera. Soppressione disturbi con VDR sul collettore e condensatori. Direzione di rotazione secondo polarit. Pu essere montato in ogni posizione. Massimo carico radiale: 200N Massimo carico assiale: 100N

Pag. 31

Universit Telematica e-Campus

Facolt di Ingegneria

Temperatura di esercizio: -20C/60C Peso approssimativo: 385/485g

Pag. 32

Universit Telematica e-Campus

Facolt di Ingegneria

Esploso di montaggio
Grazie allutilizzo di Autocad Inventor stato realizzare con precisione il disegno tecnico del cover. In modo pi semplice stato riprodotto il motoriduttore al fine di creare un chiaro esploso di montaggio. Si desidera far notare la scelta dellutilizzo una coppia conica in acciaio Inox per trasferire il moto rotazionale del perno in uscita dal motoriduttore al codolo del cilindro della serratura.

Figura 20: Esploso di montagggio del motoriduttore sul codolo

Pag. 33

Universit Telematica e-Campus

Facolt di Ingegneria

Possibili utilizzi del prototipo


Di seguito si vuole dare una panoramica dei possibili utilizzi del prototipo in diversi scenari.

Pag. 34

Universit Telematica e-Campus

Facolt di Ingegneria

Pag. 35

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 21: Possibili utilizzi del prototipo

Pag. 36

Universit Telematica e-Campus

Facolt di Ingegneria

Analisi comparativa con i dispositivi commerciali esistenti ed elementi di novit


Tutti i grandi produttori di serrature di livello internazionale stanno aggiornando i loro cataloghi dei prodotti inserendo versioni motorizzate delle serrature. I dispositivi motorizzati prevedono lapertura e la chiusura automatica di scrocco e mandate senza lausilio delle chiavi. Generalmente i produttori considerano laccessorio pi comune per laccesso il lettore di impronta digitale, non valutando le molteplici difficolt che tale dispositivo pu comportare: necessaria presenza fisica dellutente a cui si vuole garantire laccesso combinazione difficoltosa di tasti per la memorizzazione dellimpronta problematica la modifica o la cancellazione di dati esistenti senza ricorrere al collegamento di un personal computer o dispositivo esterno di programmazione In altri casi viene considerato come strumento di apertura il transponder con le seguenti difficolt e svantaggi: necessaria presenza fisica dellutente per consegna del dispositivo stesse problematiche della normale chiave quali il furto, lo smarrimento, la duplicazione e lingombro necessaria riconsegna del dispositivo nel caso di revoca dellaccesso problematica la modifica o la cancellazione di dati esistenti senza ricorrere al collegamento di un personal computer o dispositivo esterno di programmazione La tastiera un ulteriore dispositivo per limmissione delle credenziali di accesso. Nei sistemi attualmente in commercio, le tastiere presentano i seguenti limiti: sono di dimensioni troppo ridotte per un comodo utilizzo in quanto sono favoriti lestetica e il design le parti del sistema installate esternamente allingresso, tra cui la tastiera, sono costituite di materiale plastico e quindi facilmente danneggiabili la fragile qualit del materiale di costruzione delle tastiere implica nel tempo unevidente usura dei tasti, andando ad evidenziare quelli premuti per linserimento della password linstallazione delle tastiere prevista solo sulla struttura della porta stessa e non sulle opere murarie adiacenti

Pag. 37

Universit Telematica e-Campus

Facolt di Ingegneria

Alcuni produttori hanno progettato le serrature motorizzate prevedendone linstallazione solo su porte dedicate ad ospitare il dispositivo. Invece la totalit dei produttori obbliga il cliente, gi in possesso di una porta blindata, alla sostituzione della serratura e del cilindro per renderli compatibili con il prodotto automatizzato. Dal punto di vista operativo si possono riscontrare altre problematiche riguardanti i prodotti attualmente in commercio. Le pi frequenti sono: la poca coppia in uscita al perno del motoriduttore che causa di chiusure incomplete su porte di vecchia costruzione con accostamenti imprecisi vari comportamenti errati del sistema nel caso di situazioni impreviste come ad esempio nel caso di lenti accostamenti della porta alla cassamatta. Tale situazione conseguenza di una chiusura errata delle mandate sui battenti a cui segue la mancata segnalazione sonora allutente o addirittura la riapertura automatica le effrazioni al sensore porta non sono considerate dalla logica del sistema. Spesso la manomissione del sensore viene rilevata dal sistema come una apertura manuale della porta tramite chiave a cui segue linopportuna apertura automatica della serratura Il prototipo oggetto della tesi dotato di una centralina elettronica attraverso la quale vi la possibilit di programmare le password di accesso tramite il solo utilizzo della tastiera e con lausilio di segnali sonori. Il progetto stato sviluppato in modo tale da poter impostare fino a 50 utenti personalizzabili con accesso a fasce orarie ristrette, giornaliere o settimanali. Nessuna funzionalit di programmazione richiede il collegamento della centralina con un personal computer esterno. La tastiera tra i componenti pi importanti dellintero prototipo e come tale presenta le seguenti caratteristiche di rilievo: manifattura in acciaio inox, tasti compresi certificazione antivandalo e grado di protezione IP67 comunicazione digitale e criptata con la centralina e, di conseguenza, anche operando direttamente sui fili il sistema non potr ricevere un comando di apertura possibilit di bloccare la tastiera attraverso un pulsante interno segnalatore acustico integrato Prendendo in considerazione i difetti dei dispositivi attualmente reperibili nel mercato, il prototipo di serratura motorizzata stato fin dallinizio progettato inserendo i seguenti elementi di novit e miglioramento: un potente motoriduttore da 2 Ncm in grado di aprire e chiudere le mandate anche nelle pi difficili situazioni

Pag. 38

Universit Telematica e-Campus

Facolt di Ingegneria

la serratura motorizzata stata predisposta in modo tale da poter essere installata ovunque, anche su cilindri gi esistenti con codolo modalit Day&Night attivabile con un interruttore che permette di inibire la chiusura automatica a seguito dellaccostamento della porta. E utile negli uffici e negli ambienti a elevata frequentazione funzionalit Rolling Code mediante la quale, a seguito di svariate pressioni di tasti, il sistema verifica sempre solo gli ultimi 5 numeri digitati. Ci rende pi difficoltosa la memorizzazione visiva da parte di persone nelle immediate vicinanze blocco della tastiera per 3 minuti a seguito di 30 digitazioni non corrette. La tastiera si riattiva prima del tempo nel caso di aperture manuali o pressioni del tasto di apertura dallinterno possibilit di memorizzare fino a 5500 accessi con le relative data e ora. Tutti questi dati sono scaricabili comodamente su una chiavetta USB Un altro elemento di novit nel prototipo rappresentato dalla presenza di un modulo GSM.

Pag. 39

Universit Telematica e-Campus

Facolt di Ingegneria

Figura 22: Il modulo GSM adottato nel prototipo

Tale modulo integrato permette di abilitare le seguenti funzionalit: apertura da remoto tramite squillo telefonico senza alcun costo in quanto il modulo disconnette subito la chiamata non appena identifica il chiamante tra gli autorizzati facile programmazione, anche da remoto, tramite semplici messaggi SMS contenti una password amministrativa anticoercizione utile in caso di richiesta forzata di apertura della porta da parte di estranei in situazioni di pericolo. Infatti, inserendo il proprio codice con lultimo numero incrementato di uno, la porta si apre normalmente e in contemporanea il modulo GSM manda dei messaggi preimpostati a degli utenti presenti in una lista di emergenza.

Pag. 40

Universit Telematica e-Campus

Facolt di Ingegneria

Bibliografia
Stan Gibilisco, Manuale pratico di elettrotecnica ed elettronica, Hoepli, 2008 Michael Margolis, Arduino. Progetti e soluzioni, Hops, 2011 Muhammad Rashid, Elettronica di potenza. Dispositivi e circuiti, Pearson, 2007 Cesare Rota, Programmare con C++, Hoepli, 2009 Salvatore Salpagno, Manuale di programmazione modulo GSM TELxxC versione 20, Salpagno, 2011 Maik Schmidt, Il manuale di Arduino, Apogeo, 2011 Curtis Waguespack, Sean Dotson, Bill Bogan e Andrew Faix, Mastering Autodesk Inventor 2009 and Autodesk Inventor LT 2009, Autodesk, 2010 Arduino Learning, tratto da http://arduino.cc/en/Tutorial/HomePage Arduino Reference, tratto da http://arduino.cc/en/Reference/HomePage Tutorial e specifiche del software Sprint Layout, tratto da http://www.abacom-online.de/uk/html/sprint-layout.html EAO Product Information S.series Lite, datasheet del keypad Datasheet del motoriduttore, tratto da http://www.micromotorssrl.com/motor_e192/e192_pg.html Datasheet di Arduino Mega, tratto da http://arduino.cc/en/Main/ArduinoBoardMega

Pag. 41