progettazione e sviluppo prototipale di un sistema
Transcript
progettazione e sviluppo prototipale di un sistema
UNIVERSITÀ DEGLI STUDI DI ROMA “TOR VERGATA” FACOLTÀ DI INGEGNERIA CORSO DI LAUREA SPECIALISTICA IN INGEGNERIA MEDICA PROGETTAZIONE E SVILUPPO PROTOTIPALE DI UN SISTEMA DOMOTICO UNIVERSALE DI MONITORAGGIO E CONTROLLO PER UTENTI DISABILI Relatore Prof. Nicola Rosato Candidato Alessandro Rizzo Correlatori Ing. Paolo Abundo Ing. Stefano Gelli Matr. 0098920 ANNO ACCADEMICO 2007/2008 A mia nonna Antonietta e a Valentina. Indice RIASSUNTO INTRODUZIONE – UN NUOVO MODO DI INTENDERE L’AUSILIO I IV 1 I SEZIONE - IL PROGETTO Le specifiche progettuali 1. PROGRAMMABLE INTERFACE CONTROLLER 7 10 1.1. I Microcontroller 10 1.2. I PIC 12 1.3. PIC16F628 14 1.4. Organizzazione della memori 16 1.4.1. STATUS register 17 1.4.2. OPTION register 19 1.4.3. INTCON, PIE1, PIR1 registers 20 1.4.4. PROGRAM COUNTER e STACK register 23 1.5. Le porte di I/O 23 1.5.1. PORTA e TRISA 23 1.5.2. PORTB e TRISB 26 1.6. Il modulo USART 30 1.6.1. Il Baud Rate Generator 32 1.6.2. Configurazione e registri 34 1.7. Risorse di interrupt 2. LO STRATO FIRMWARE 39 41 2.1. Introduzione all’Integrated Development Environment 41 2.2. Il Firmware 45 2.3. Il Programmatore 54 3. I PROTOCOLLI DI COMUNICAZIONE 55 3.1. Le scelte progettuali 55 3.2. EIA RS-232 57 3.3. Il protocollo Wi-Fi 67 I 3.4. Il convertitore RS-232 Wi-Fi, l’EZL80c 4. IL CIRCUITO DI CONTROLLO 69 81 4.1. Perché un device RS-232 84 4.2. Il circuito di connessione RS-232 84 4.3. Lo stadio di pilotaggio del carico 94 4.4. Lo stadio di alimentazione 99 4.5. Il pin RB5 103 4.6. Passareal Wireless 104 5. L’INTERFACCIA UTENTE IN VISUAL BASIC 109 5.1. Obiettivi dell’interfaccia 110 5.2. VB6, programmazione basata sugli eventi 110 5.3. B-SERIAL, l’interfaccia utente 112 5.3.1. MSCOMM 115 5.3.2. WINSOCK 119 II SEZIONE – L’APPLICAZIONE Il lato attuatore 125 6. DOMOTICA, LO STATO DELL’ARTE 127 6.1. Demotica 127 6.1.1. Dispositivi d’uscita 140 6.1.2. Sistemi di controllo e gestione 141 6.1.3. Dispositivi di sistema 142 6.1.4. Interfacce e residential gateway 142 6.2. Il mercato 144 6.2.1. Il sistema KONNEX 145 6.2.2. Il sistema LONMARK 147 6.2.3. BTicino 149 7. UNA POSSIBILIE APPLICAZIONE 152 II 7.1. Caratterizzazioni 152 7.2. L’applicativo 154 7.3. Il circuito di feedback 159 8. FASE DI COLLAUDO 173 8.1. Assemblare il sistema 173 8.2. I componenti 174 8.2.1. L’interfaccia 174 8.2.2. Il circuito di controllo 179 8.2.3. Il modulo di conversione EZL 179 8.2.4. L’attuatore 180 8.2.5. Lo stadio feedback 181 8.3. L’assemblaggio 181 CONCLUSIONI 182 BIBLIOGRAFIA 189 RINGRAZIAMENTI III RIASSUNTO Il seguente lavoro è stato realizzato con la partecipazione della B-Able s.r.l., azienda nata con l’intento di sviluppare nuove soluzioni ad elevato contenuto tecnologico, nell’ambito dell’Assistive Technology per l’integrazione dei disabili. Proprio in quest’ottica, quello che si andrà a descrivere è un sistema domotico pensato in modo specifico per utenti diversamente abili che presenti caratteristiche di facile installabilità. L’obiettivo è la realizzazione di un sistema basato su una piattaforma universale, personalizzabile da un lato alle disabilità del soggetto e dall’altro ai diversi tipi di attuatori domotici controllati, che andranno a costituire il nostro sistema di ausilio. A questo scopo è stato improntato un circuito di controllo basato fondamentalmente su un microcontrollore della Microchip, il PIC16F628, che grazie ad un firmware, redatto appositamente e trasferito nella Program Memory, svolge le funzionalità richieste. In particolare, il microcontrollore gestisce una comunicazione bidirezionale su wireless LAN (Wi-Fi) con l’interfaccia utente realizzata, controlla l’attuatore e riceve un segnale destinato all’utente da uno stadio di feedback, appositamente realizzato, al fine di rendere cosciente lo stesso dello stato dell’attuatore controllato. Ed è proprio al fine di permettere all’utente di controllare il sistema e di riceverne opportuno ritorno, sfruttando le proprie abilità residue, che è stato realizzato un software di interfaccia in Visual Basic che, insieme al personal computer utilizzato, è in grado di costituire per l’utente una Stazione di Controllo a comando vocale (implementato tramite apposito software). Per testare le funzionalità e le prestazioni del sistema realizzato se ne è proposta un’applicazione specifica, dedicata al controllo cosciente dell’illuminazione ambientale, destinata a persone con estrema limitazione nei movimenti (allettate) o con disabilità visiva di vario grado. È stato quindi necessario realizzare uno stadio di feedback dedicato, basato su fotorilevatore capace di discriminare in modo efficiente il livello di luminosità presente, per poterlo poi comunicare allo stadio di controllo. Al termine del lavoro siamo dunque giunti alla realizzazione completa di un sistema, seppur in uno stadio ancora prototipale, che può permettere all’utente di ottenere il controllo domotico completo dell’abitazione (luci, azionamento di porte, finestre, serrande, etc.), ricevendo inoltre informazioni di ritorno dimensionate sulle sue abilità residue. IV INTRODUZIONE Un nuovo modo di intendere l’ausilio Dal momento in cui furono introdotte in Italia le “nuove tecnologie” come ausilio per l’handicap, sono passati ormai più di quindici anni. Anche per merito della disponibilità delle nuove soluzioni tecnologiche, da una cultura riabilitativa di taglio prevalentemente ortopedico-sanitario, si è passati oggi, ad una maggiore attenzione alle potenzialità e ai bisogni di autonomia del disabile nella comunicazione e nell’interazione con l’ambiente, nell’ambito di processi di apprendimento, di vita quotidiana, di lavoro e di integrazione sociale. Questa nuova impostazione segue le politiche sviluppate negli ultimi anni dalla stessa UE in tema di disabilità e di inclusione sociale, che vedono come fine ultimo proprio la realizzazione di una società inclusiva, basata sulla presa di coscienza che, l’integrazione delle persone disabili non riguarda più solo il loro empowerment, ma rappresenta una sfida per l’intera società in tutti i contesti di vita. Lo sviluppo dell’informatica e della microelettronica ha reso disponibili apparecchiature che facilitano lo svolgimento di funzioni complesse, semplificando anche drasticamente l’effettuazione dell’atto motorio. In molti casi gli ausili tecnologici possono essere proposti come mediatori funzionali anche in età molto 1 precoce: fin dalla scuola materna le tecnologie possono aiutare il bambino disabile a condurre esperienze dirette di gioco e di interazione con l’ambiente, compensando, almeno in parte, le difficoltà motorie. L’immagine del ”bambino disabile al computer” che è ormai familiare, in un osservatore inesperto può generare l’ingannevole impressione, che il potente ausilio sia la soluzione che compensa la disabilità, pareggiando in qualche modo la disparità esistente con gli altri bambini. Se in ambito educativo e riabilitativo non mancano certo i successi legati all’uso degli ausili tecnologici, l’esperienza condotta sul campo induce ad un realistico ridimensionamento, o meglio, ad un ricollocamento delle aspettative legate al potere “risolutivo” dell’ausilio. Nell’attuale situazione di evoluzione tecnologica, si registra un fortissimo incremento di interesse verso gli ausili tecnologici che vanno però visti sotto una nuova luce proveniente dalle esperienze maturate dai professionisti del campo. Per esempio, nel caso delle patologie motorie e sensoriali, l’esistenza di una estesissima gamma di menomazioni e disabilità funzionali ci obbliga a tenere presente che: a) non è quasi mai possibile rifarsi a processi comuni e ripetibili, a partire dalla conoscenza della sola diagnosi, per capire quali ausili proporre in una certa situazione di handicap. Solo in rari casi infatti è possibile stabilire a priori un legame preciso fra menomazione - disabilità – handicap : una stessa menomazione (es. una malformazione scheletrica dovuta a paralisi cerebrale infantile) può dare luogo a disabilità diverse in persone diverse, per non parlare della frequente presenza di più disabilità sovrapposte; la stessa disabilità può inoltre dare luogo a diverse situazioni di svantaggio esistenziale, a seconda dei diversi contesti di vita della persona. Persone con uguale menomazione possono svolgere lo stesso compito con strumenti del tutto diversi, così come il medesimo strumento (es. informatico) può servire per svolgere funzioni differenti. b) Non vale l’equazione: persona disabile + ausilio tecnologico = persona normale. Questa affermazione, apparentemente scontata, svela il non confessato desiderio di investire l’ausilio di un ruolo risolutore di situazioni complesse. In realtà questa semplificazione può portare a situazioni veramente problematiche, evidenti soprattutto in ambiente scolastico o lavorativo: fronte di una esigenza di produttività, l’ausilio può 2 essere investito del ruolo di "normalizzatore", senza coinvolgere cambiamenti od adattamenti delle condizioni di soggetto ed ambiente. Il processo di integrazione richiede viceversa un contributo attivo nell’adattamento reciproco persona-ambiente; proporzionalmente alla gravità del caso, le oggettive situazioni di difficoltà impongono profondità ed esaustività di analisi e non è pensabile un approccio che sposti l’onere dell’adattamento solo su uno dei due elementi, né tantomeno sull’ausilio mediatore. c) È rischioso parlare di “ausili per il conseguimento dell’autonomia ” tout-court: il superamento di un impaccio o di una invalidità motoria non significa necessariamente essere autonomi, nè è sempre vero il viceversa: l’autonomia non va confusa con l’indipendenza o l’auto-sufficienza. Si preferisce relativizzare l’obbiettivo di autonomia parlando di ”autonomia possibile”, concetto del tutto relativo alla specifica persona e alla particolare situazione. d) Non si può dire se un ausilio sia più o meno valido in assoluto. Nel campo delle nuove tecnologie la validità di un ausilio spesso viene confusa con il livello di sofisticazione tecnologica: ausili poveri, cioè non o poco tecnologici, possono invece risultare molto più funzionali e immediati di soluzioni tecnologicamente avveniristiche, o meglio si possono utilizzare ausili diversi a seconda delle situazioni. Sfruttando il supporto di un centro specializzato e con le giuste competenze, si possono escogitare soluzioni ottimali utilizzando quei “mattoni” tecnologici già presenti sul mercato, riadattandoli e ricombinandoli però allo scopo di ottenere soluzioni customizzate ed innovative, come ci si è riproposto di fare proprio nel presente lavoro. L’ausilio è, in realtà, un sistema formato da diversi apparati: è ben noto, ad esempio, che un PC è grossolanamente schematizzabile in una o più periferiche di input, una unità di elaborazione (hardware e software) e una o più periferiche di output. Facciamo nostra questa nota schematizzazione per applicarla all’ausilio tecnologico che, sia in caso di disabilità motoria che sensoriale, dovrà presentare particolare cura per quanto riguarda l’aspetto degli accessi alla macchina (cioè dei sistemi di input alternativi facilitati) e gli output. La persona disabile si rapporta con l'ambiente mediante una serie di azioni svolte con "modalità" non sempre comprensibili od efficaci: il compito dell'ausilio è aumentare l'efficacia di queste azioni, se necessario compiendo una 3 elaborazione o una vera e propria opera di "traduzione" di codici espressivi e funzionali. Per questo motivo durante la fase di progettazione, più che di ausilio puro e semplice, é opportuno pensare ad un “sistema ausilio”, come ad un insieme più o meno complesso di apparati hardware e/o software, che riceve segnali particolari dalla persona disabile e li ritrasmette in modo più comprensibile od efficace, sia all'ambiente circostante che al soggetto diversamente abile. Per quanto riguarda la ritrasmissione, bisognerà prestare particolare attenzione alle capacità e alle abilità residue del soggetto, che detteranno le modalità con le quali il dispositivo genererà un opportuno feedback, legato all’attività svolta dall’utente stesso o allo stato del sistema con il quale il soggetto vuole interagire. Proprio grazie a questo tipo di approccio, è sorta la necessità di realizzare un sistema ausilio che presentasse, nelle specifiche di progetto, la capacità di realizzare uno switching sensoriale per garantire all’utilizzatore piena conoscenza dell’attività svolta; parleremo di questo aspetto centrale più avanti nel corso del lavoro. Torniamo alla definizione di ausilio che, come l’esperienza comune ci insegna, viene spesso sbrigativamente identificato solo con l’elemento più “potente” dell’intero sistema (è tipico il caso dell’elemento computer, ritenuto il nucleo realmente importante del sistema ausilio al punto da sottovalutare gli altri elementi). Lo schema che segue può aiutare a fare chiarezza in relazione alla natura composita dell’ausilio; sistema composito, in cui i componenti hanno diversi ruoli, ma tutti di uguale importanza. L’accesso personalizzato (ad es. un particolare sensore) è tanto importante quanto l’ attuatore (costituito ad es. dalla componentistica dotata di intelligenza), e quest’ultimo non risolve alcun problema se non è corredato di opportuno software (elaborazione) e se non fornisce un output nelle modalità adeguate. Nel seguito si chiarirà meglio il significato dei diversi “blocchi” illustrati. 4 Figura 1- Il sistema Ausilio. Schema di principio Qualche esempio relativo a casi concreti può aiutare a capire meglio; il caso più semplice è quello in cui l'ausilio si può ridurre ad un solo accesso personalizzato: ad esempio l'accensione della luce può essere possibile se l'interruttore è personalizzato, l'uso del computer può diventare possibile grazie ad adattamenti della normale tastiera, etc. In casi di maggiori difficoltà motorie e sensoriali combinate, la particolare differente abilità rende necessaria una mediazione più importante dell'ausilio: ad esempio nel caso di un soggetto che è in grado di controllare una sola funzione elementare (ad esempio un solo movimento di un’unica parte del corpo) e desidera effettuare funzioni complesse (es. scrivere, controllare l’ambiente, ... ), l'ausilio deve essere uno strumento intelligente, con una interfaccia in grado di elaborare un codice elementare (ad esempio un azionamento di un sensore) in un segnale che possa governare l’ attuatore (computer) per produrre output quali la scrittura, il controllo dell’ambiente, etc. In più, un’altra fondamentale osservazione proviene da quanto accennato in precedenza: l'interazione illustrata evidenzia il ruolo dell’ausilio come mediatore nel percorso che va dalla persona disabile verso l'ambiente; inferiormente (tratteggiato) sono indicate le interazioni in senso opposto, cioè gli effetti che la presenza dell’ausilio produce verso la persona disabile. Come si potrebbe infatti, interagire con un qualsiasi oggetto, senza averne un qualche tipo di ritorno che ci possa fornire coscienza del nostro operato? Basta pensare ad una semplice attività di tutti i 5 giorni come quella di scrivere una mail. Saremmo forse in grado di effettuare tale operazione se non disponessimo dello schermo del PC che fornisce traccia del nostro scritto, o del feedback tattile fornito dalla tastiera con la quale scriviamo? Ecco perché il nostro ausilio dovrà (il device descritto e realizzato nel lavoro segue questa specifica) fornire, in ritorno, un’informazione recepibile dall’utente diversamente abile e che possa servire allo stesso per prendere coscienza dell’attività svolta. Proviamo a classificare queste interazioni di ritorno, che potranno essere: - l'informazione di ritorno fornita dall’ausilio stesso alla persona durante l’uso, definita, come già detto, “retroazione” o “feedback”: ne sono un esempio il contenuto dello schermo del computer che varia a seconda dei comandi impartiti, o nel caso di un sensore, il semplice “click” che segnala l’avvenuto azionamento; - l'azione dell'ambiente verso la persona, aspetto nel quale l'ausilio deve giocare un ruolo di mediatore, se l’utente non possiede le capacità necessarie a captare i cambiamenti provenienti dall’ambiente a seguito delle sue azioni. All’interno di questo panorama, composto da nuove concezioni e nuove possibilità tecnologiche, si inserisce il progetto che stiamo per vedere descritto. L’idea fondamentale comprende la progettazione e la realizzazione di un device, capace di sfruttare le abilità residue dell’utente, per interagire con attuatori di tipo domotico. Il dispositivo dovrà essere concepito in modo tale da poter inoltre fornire all’utente un valido ed effettivo feedback legato all’azione proveniente da lui steso. Per essere definita valida, la retroazione dovrà essere generata tenendo in considerazione le capacità dell’utente disabile, garantendo quello shifting sensoriale che gli permetterà di prendere coscienza delle azioni eseguite. Il passo successivo sarà quello di comporre una vera e propria power-station, che possa consentire il controllo effettivo degli applicativi domotici usati nella vita quotidiana. L’ausilio potrà in questo modo aumentare le possibilità dell’utente finale, amplificando la sua volontà e contribuendo ad incrementare la sua libertà. 6 I SEZIONE – IL PROGETTO Le specifiche progettuali In questa fase ci proponiamo di delineare e stabilire i requisiti e le specifiche relative al sistema di ausilio che abbiamo intenzione di progettare. Nella fattispecie, mediante l’analisi e l’elaborazione delle suddette specifiche, implementeremo il progetto delle diverse componenti del nostro sistema e produrremo quindi il prototipo associato. È opportuno preliminarmente, soffermarsi sulle specifiche di progetto, provenienti dall’analisi dei vincoli che nascono dallo studio della problematica che ci si propone di affrontare. L’idea di partenza, come abbiamo accennato nell’introduzione, è quella di realizzare un dispositivo di controllo domotico, che permetta ad un utente disabile di comandare applicativi di uso quotidiano (come il controllo della luminosità domestica, l’apertura di porte, serrande automatizzate, elettroserrature, ecc.) e di poter ricevere un effettivo segnale di ritorno misurato alle sue capacità sensoriali e motorie residue. L’obbiettivo dell’ausilio deve quindi essere quello di fornire al soggetto sia i mezzi per interagire con l’ambiente esterno, che di ricevere in maniera autonoma informazioni sul risultato prodotto dal sistema stesso. 7 In primis, è di interesse capire la componente di controllo più adatta da utilizzare: per far ciò è necessario analizzare i cosiddetti microcontrollori; è proprio il microcontrollore (come descriveremo dettagliatamente in seguito, noi abbiamo scelto il PIC16F628 prodotto dalla Microchip), programmato in modo specifico tramite un firmware apposito, che svolge l’attività di controllo sull’attuatore e di monitoraggio dell’attività svolta, realizzando quel collegamento bidirezionale tra macchina e utente disabile che costituisce senza dubbio una delle componenti innovative del progetto. Complessivamente, il sistema di ausilio deve quindi: - intercettare in qualche modo i comandi imposti dalla persona; - azionare un determinato applicativo; - verificare che l’azione abbia portato al risultato desiderato; - portarne infine traccia all’utente in un modo che sia da lui comprensibile, in base alle proprie capacità motorie/sensoriali residue. Per massimizzare il grado di adattabilità del nostro dispositivo, sia per quanto riguarda le condizioni di disabilità che possono variare da soggetto a soggetto, sia per quello che concerne l’evidente eterogeneità di attuatori da dover controllare, l’obiettivo è quello di mettere insieme uno stadio di controllo che si collochi in posizione intermedia tra l’utente finale e lo strato applicativo. Questo garantirebbe universalità al nostro sistema (da noi voluta), rendendone possibile la customerizzazione più opportuna a seconda delle necessità. Preso atto di tali esigenze, si è deciso di garantire tale “posizione intermedia”, tramite il collegamento del device di controllo con un normale personal computer, l’host del nostro sistema, che provvederà tramite impostazioni opportune e programmi di interfaccia ad hoc (a questo proposito consultare il capitolo dedicato presente in questa stessa sezione), pensati per fornire all’utente quell’interfaccia dedicata e customizzata sulle sue possibilità (il pc sarà fornito di touch screen per supplire ad un’eventuale deficienza motoria o di controllo vocale nel caso di disabilità visiva, ecc.). Il microprocessore e l’hardware appositamente realizzato, da parte sua, si occuperà perciò di recepire i segnali inviatigli dall’host, tradurli in comandi verso l’applicativo (svolgendo tipicamente un’attività di controllo a livello dell’alimentazione), e ricevere grazie a sensori (uno stadio a fotodiodo nel caso di controllo dell’illuminazione, contatti o fotocellule per azionamenti di porte e finestre, ecc.), un segnale che possa poi tornare 8 indietro fino all’host, che comunicherà all’utente che la sua azione è andata a buon fine, tramite mezzi comunicativi scelti in base alle capacità residue dello stesso. In questo modo si garantisce l’opportuna universalità, che contribuisce senza dubbio ad abbassare i costi. Quest’ultima osservazione deriva direttamente dalla esigenza di far essere a basso costo la realizzazione del progetto. Ciò è strettamente legato all’idea di realizzare un prodotto funzionante, che soddisfi le specifiche e che presenti in aggiunta un costo limitato. Per garantire quest’ultimo aspetto, si è concepito un device in grado di ridurre al minimo le difficoltà di installazione e di collegamento al possibile attuatore (plug and play) e composto da parti reperibili facilmente sul mercato a prezzi decisamente accessibili. Nei capitoli successivi verranno descritte le caratteristiche dell’hardware realizzato: per ora anticipiamo che il sistema di controllo viene collegato direttamente all’alimentazione del dispositivo che deve controllare, prevedendone in questo modo una modificazione minima. Riassumendo, col seguente lavoro, ci si propone di realizzare un sistema di ausilio che preveda al suo interno una parte di controllo fondamentale, basata sulla logica programmabile di un microcontrollore, che presenti forti caratteristiche low-cost e di semplicità e robustezza di installazione, e garantisca inoltre le suddette funzioni di controllo e monitoraggio per un utente diversamente abile. Vediamo a questo punto da vicino, quali sono i componenti principali e come si è proceduto alla progettazione e realizzazione prototipale delle singole parti del sistema, tenendo sempre conto delle specifiche imposte. Cominciamo col core dello stesso, ovvero il microcontrollore. 9 1. PROGRAMMABLE INTERFACE CONTROLLER 1.1 I Microcontroller Per la realizzazione della componente dotata di intelligenza, indispensabile per la realizzazione di un’interfaccia in grado di sfruttare e interpretare le abilità dell’utente e capace di fornire al contempo un adeguato feedback, è stato scelto un integrato prodotto dalla Microchip® appartenente alla classe dei PICmicro®. Il PIC rientra nella famiglia dei microcontroller, vediamo quindi, innanzi tutto, da cosa sono caratterizzati i componenti elettronici così definiti. Un microcontrollore o microcontroller, detto anche computer single chip è un sistema a microprocessore completo, integrato in un solo chip, progettato per ottenere la massima autosufficienza funzionale ed ottimizzare il rapporto prezzo-prestazioni per una specifica applicazione, a differenza, ad esempio, dei microprocessori impiegati nei personal computer, adatti per un uso più generale. 10 Fig.1.1 – I microcontrollori hanno dimensioni ridottissime I microcontroller sono la forma più diffusa e più ridotta di computer: essi sono costituiti da una CPU, da un certo quantitativo di memoria RAM e memoria ROM (che può essere PROM, EPROM, EEPROM o FlashROM) e da una serie di interfacce di I/O (input/output) standard, fra cui molto spesso bus (I²C,SPI,CAN,LIN). Le periferiche integrate sono la vera forza di questi dispositivi: si possono avere convertitori ADC e convertitori DAC multicanale, timer/counters, USART (come nel PIC utilizzato nel presente lavoro ), numerose porte esterne bidirezionali bufferizzate, comparatori, PWM. Tali dispositivi sono contenuti in numerosi apparecchi ed elettrodomestici, come ad esempio, videoregistratori e i televisori costruiti dopo il 1990, nelle macchine fotografiche e nelle videocamere, nei lettori CD e DVD, nei controlli automatici di macchine industriali, in molte lavatrici e frigoriferi di ultima generazione, nelle centraline di controllo delle motociclette e delle automobili (in una sola automobile possono essere presenti anche molte decine di microcontrollers), negli antifurto elettronici, nei registratori di cassa dei negozi, nelle centraline dei semafori, etc. La loro capacità di calcolo è molto limitata, a dispetto della velocità ragguardevole che possono raggiungere e di solito eseguono lo stesso programma ( firmware ) per tutta la durata del loro funzionamento. I microcontroller sono progettati e realizzati per fornire una risposta real-time agli eventi da essi controllati. A questo scopo, quando un determinato evento si presenta, un Interrupt di sistema può segnalare al controllore di sospendere il processamento delle istruzioni correnti e di iniziare una cosiddetta interrupt service routine (ISR, presente nello stesso firmware illustrato nella sezione seguente). L’ISR contiene le istruzioni che serviranno al microcontrollore per il processing dell’interrupt, prima che questo possa ritornare alla sequenza originale del codice costituente il firmware. L’interrupt può essere prodotto da diversi eventi device-dependent come un overflow di un timer 11 interno al chip, il cambiamento di un bit di I/O, la ricezione di un messaggio seriale (il nostro device utilizzerà proprio un interrupt di questo tipo per svolgere la sua funzione) e in generale il verificarsi di un certo evento proveniente dalle periferiche collegate al microprocessore stesso. Il programma o firmware di cui si è parlato in precedenza, deve rientrare nella program memory disponibile sul chip, molto spesso di dimensioni ridotte. Questo provoca, come è immediato dedurre, che il programma da caricare nel controllore debba essere molto compatto e composto da un numero limitato di righe, non potendo perciò raggiungere complessità troppo elevata. Per questo motivo il linguaggio di programmazione prediletto nello sviluppo di software simili è l’assembly, che come è noto fornisce codici compatti e di ridotte dimensioni, anche se la realizzazione di ambienti di sviluppo dedicati (IDE) ha permesso di sviluppare in modo adeguato codice in linguaggi di più alto livello. La program memory inoltre, a seconda del dispositivo, potrà essere del tipo a sola lettura, permanente o riprogrammabile come nel caso dei PIC di serie F utilizzati nel presente progetto. Dato che i suddetti microcontrollori sono nella maggior parte dei casi usati per controllare devices, devono essere necessariamente in grado di ricevere input dai dispositivi controllati e di interpretarli grazie anche alla presenza di convertitori A/D D/A che permettono al controllore di convertire i dati in ingresso in forma digitale riconoscibile e processabile. 1.2 I PIC Abbiamo adesso chiaro in mente cos’è un microcontrollore e possiamo senza dubbio annoverare tra di essi i PIC essendo questi ultimi dei circuiti integrati, prodotti dalla Microchip Technology Inc., ovvero dei componenti che racchiudono in un unico dispositivo tutti i componenti necessari a realizzare un completo sistema digitale programmabile. Come si vede in figura i PICmicro (in questo caso un PIC16F84A) si presentano esternamente come dei normali circuiti integrati TTL o CMOS, ma internamente dispongono di tutti dispositivi tipici di un sistema a microprocessore: • Una CPU (Central Processor Unit) ovvero una unita' centrale di elaborazione il cui scopo e' interpretare le istruzioni di programma. 12 • Una Program Memory, permanente o riprogrammabile a seconda del modello, in cui sono memorizzare le istruzioni del programma da eseguire. • Una memoria RAM (Random Access Memory) utilizzata per memorizzare le variabili utilizzate dal programma. • Una serie di LINEE DI I/O (Input/Output) ovvero linee di ingresso e uscita per pilotare dispositivi esterni o ricevere impulsi da sensori, pulsanti, ecc. • Una serie di dispositivi ausiliari al funzionamento quali generatori di clock, bus, contatori, etc. Per quanto riguarda lo spazio dati, i PIC hanno un set di registri che funzionano come una RAM general purpose. Nella memoria dati sono comunque mappati anche dei registri di controllo special purpose, indispensabili per implementare tutte le funzionalità del microcontrollore. L’estensione della memoria dipenderà dal modello scelto, ma tutte le serie di PIC possiedono un sistema di banchi per estendere la memoria. Tutte le serie di PIC sono realizzati secondo architettura Harvard, perciò lo spazio di memoria dedicato alle istruzioni è separato da quello dedicato ai dati. A seconda della famiglia e della classe di device scelto, la memoria dedicata al codice componente il firmware è implementato tramite EPROM, ROM o memoria FLASH. Proprio un PIC fornito di memoria di tipo FLASH (PIC della serie F) è stato scelto per la realizzazione del presente progetto fornendo la possibilità di riscrivere più volte il codice all’interno del microcontrollore, caratteristica fornita da memorie a sola lettura o di tipo EPROM che necessitano di ultravioletti per cancellare la code memory, complicando quindi un eventuale stadio di progettazione come nel nostro caso. Tutti i PIC sono in grado di gestire dati e indirizzi composti da 8 bit, per questo sono considerati microcontrollori a 8 bit[4]. Per quanto riguarda invece la il numero componente l’istruction set, esso varia da 35 a 70, per i PIC di ultima generazione. L’istruction set include istruzioni utilizzate per compiere operazioni direttamente sui registri, o indirettamente passando per il cosiddetto registro accumulatore (w) utilizzato molto spesso come registro d’appoggio per spostare i dati da un registro ad un altro. Alcune operazioni, come quelle che permettono di settare o resettare particolari bit, possono essere eseguite su ogni registro, mentre come detto le operazioni di tipo algebrico richiedono l’utilizzo del w-register. Il core del PIC è in grado di svolgere operazioni di skip che vengono utilizzate per implementare le istruzioni condizionali eventualmente presenti nel codice[5]. Ad 13 esempio l’istruzione “skip if bit set” (che nel linguaggio assembly equivale all’istruzione BTFSS) può essere utilizzata per compiere un salto condizionale all’interno del flusso del codice, così da emulare il comune ciclo “if” presente nei linguaggi di programmazione di più alto livello. Abbiamo già detto che questi particolari dispositivi sono divisi in molte famiglie che presenteranno funzionalità crescenti all’aumentare della complessità strutturale e dell’hardware che li costituisce. In particolare partendo dai modelli più semplici avremo: • i PIC12x, tutti chip molto piccoli con soli 8 pin e vengono utilizzati per applicazioni molto semplici. Sono considerati degli baseline devices. • I PIC16x, considerati come ottimi microcontrollori general purpose a 8 bit. Il PIC utilizzato in questo progetto e di cui si parlerà in maniera approfondita nella sezione successiva appartiene proprio a questa classe. Sono i Mid-Rang devices. • PIC18x, sono componenti decisamente più grandi e complessi, disponendo di un numero di pin che va da 28 a 40. Il linguaggio di programmazione prediletto per questi dispositivi non è più l’assembly ma il C, i registri sono a 12 bit e più numerosi • PIC24x e dsPIC, introdotti nel 2004, sono dei microcontrollori a 16 bit. I PIC24x sono general purpose, mentre i dsPIC includono funzioni di digital signal processing. • PIC32MX, sono microcontrollori a 32 bit molto più potenti delle prime famiglie prodotte dalla microchip. 1.3 PIC16F628 Passiamo ora ad una più accurata descrizione ed analisi del componente specifico che costituisce il vero core del device realizzato. Si tratta, come già anticipato, del PIC16F628[6]: tale dispositivo appartiene alla famiglia dei PIC16x, ed è quindi un microcontrollore ad 8 bit. La lettera F indica che il chip utilizza una memoria riprogrammabile di tipo flash, e non OTP (One Time Programmable). Abbiamo già accennato all’enorme vantaggio che una memoria riprogrammabile fornisce nella fase progettuale e di testing. 14 Fig.1.2 – Schema della piedinatura del PIC16F628 La figura ci mostra la piedinatura del pic, che possiede 18 pin; ognuno di essi verrà preso in esame tra poco. Se paragonato ad una CPU costituente il core di un moderno sistema di calcolo presente in commercio, il PIC risulta avere performance nettamente inferiori (ci troviamo davanti un microcontrollore a 8 bit contro 32/64 bit di una cpu montata all’interno di un comune Personal Computer!). In realtà la forza di un dispositivo di tale fattura è l’elevata specializzazione raggiungibile. Questo è reso possibile da una serie di caratteristiche comuni ai microprocessori definiti RISC (Reduced Instruction Set Computer), classe cui appartengono i PICMicro, tra le quali la possibilità di eseguire solamente poche istruzioni semplici (35 nel nostro caso) ma in tempi molto brevi. Per cominciare con una descrizione apprfondita, il PIC utilizza un’architettura di tipo Harvard nella quale gli accessi alla program memory e alla data memory avvengono con bus diversi, questo permette al microcontrollore di avere lunghezza di parola diversa per i dati e per le istruzioni: infatti il bus per i dati è a 8 bit mentre il bus per le istruzioni è a 14 bit. Per quanto riguarda la memoria presente, il microcontrollore ne ha di tre tipi: FLASH, RAM, EEPROM. La memoria Flash è composta da 2048 locazioni a 14 bit ed è utilizzata come Program Memory, cioè all’interno di queste locazioni vengono memorizzate le istruzioni che compongono il firmware. La RAM ha 224 locazioni a 8 bit e al suo interno vi sono i registri general purpos e special function utilizzati per salvare le variabili di programma e per interagire con l’hardware. L’ALU è un’unità aritmetica di tipo general purpose ed esegue operazioni booleane e aritmetiche tra dati presenti nel registro di lavoro (W) e gli altri file registers della data memory. Il working register W è un registro a 8 bit utilizzato dall’ ALU e viene utilizzato come appoggio per trasferire dati agli altri registri. In fig.1.3 è illustrato uno schema a blocchi semplificato della CPU. 15 All’interno del microcontrollore sono posizionati due tipi di data memory: una memoria non volatile di tipo EEPROM per la memorizzazione dei dati più a lungo termine come valori di calibrazione che non verranno persi allo spegnimento del device, e una RAM di cui abbiamo già parlato che verrà resettata al power-down. Fig. 1.3- Blocchi funzionali CPU del PIC. 1.4 Organizzazione della memoria Il PIC16F628 possiede un Program Counter a 14 bit capace di indirizzare 8K x 14 locazioni di program memory. Solo i primi 2K x 14 sono fisicamente implementati (2048 locazioni). Il RESET vector, ovvero la locazione di memoria nella quale è scritta la prima istruzione del programma che il microcontrollore esegue all’avvio, è indirizzata a 0000h; mentre l’Interrupt vector (la trattazione dell’interrupt verrà affrontata più avanti in questa sezione) sta alla locazione 0004h. La Data Memory è ripartita in 4 banchi di memoria, che contengono gli SFR’s (Special Function Registers) e i registri general purpose. Gli SFR’s sono localizzati in 16 corrispondenza delle prime 32 locazioni di memoria di ciascun banco. I registri Special Function sono usati dalla CPU per controllare le operazioni del device. Vengono classificati in due blocchi principali: registri di core e registri di periferica. A questo punto, studiamo nel dettaglio i registri Special Function principali, sui quali agirà il nostro firmware che andrà a modificare il valore dei singoli bit, rendendo così possibile lo svolgimento delle funzioni specifiche che caratterizzeranno il dispositivo realizzato nel presente lavoro di tesi. 1.4.1 STATUS register La figura ci mostra i singoli bit che fanno parte e che compongono il registro stesso. Fig.1.4 – Status Register Questo registro contiene i bit indicanti lo stato aritmetico dell’ALU, lo stato del RESET e i bit utilizzati per selezionare il banco di memoria della data memory sul quale si ha intenzione di lavorare. Come abbiamo già detto, questo è un registro di tipo Special Function, ossia i bit che lo compongono, controllano alcune particolari funzionalità e impostazioni del microcontrollore. Questo tipo di registro non viene di norma usato per la sola memorizzazione di dati, ma i suoi bit devono essere settati ad hoc per il corretto funzionamento del controllore. Vediamo da vicino la funzione di questi bit: 17 In particolare analizziamo i bit RP0 e RP1 che vengono utilizzati per selezionare il banco di memoria della Data Memory. Detta operazione è necessaria in un microcontrollore di questo tipo perché, com’è stato già detto, ogni banco contiene particolari registri a funzione speciale per modificare i quali è perciò necessario, di volta in volta, selezionare il corretto banco lungo la scrittura del firmware agendo sul valore dei suddetti bit. 18 1.4.2 OPTION register L’option regiter è un bit a scrittura/lettura che contiene bit che controllano le funzioni legate al Timer e al Watch Dog Timer, all’interrupt esterno sul pin RB0 e sulla funzione di pull-up attivabile in corrispondenza dei pin costituenti PORTB. Fig.1.5 – Option Register Vediamo di seguito il nome e la funzione dei singoli bit 19 1.4.3 INTCON, PIE1, PIR1 registers Questi tre registri, contengono i bit responsabili del controllo e dell’attivazione degli interrupt implementati all’interno del microcontrollore. I cosiddetti flag bit vengono settati automaticamente a 1 quando si presenta il corrispondente interrupt (che deve essere però abilitato tramite il settaggio del corrispondente enable bit); in questo modo è possibile associare al cambiamento del bit una particolare subroutine realizzata all’interno del firmware.Vediamo di seguito i registri con i corrispondenti bit. Fig.1.6 – Intcon Register 20 Fig.1.7 – PIE1 Register 21 Fig.1.8 – PIR1 Register Nel caso specifico, all’interno del firmware scritto per il nostro progetto si troveranno dei setting che riguardano proprio la gestione di particolari interrupt che sarranno essenziali per guidare le risposte del microcontrollore. Quelli più importanti sono il bit RCIE l’USART receive interrupt enable bit che abilita l’interrupt concomitante all’avvenuta ricezione di un messaggio su seriale, il bit PEIE Peripheral Interrupt 22 enable bit che abilita gli interrupt provenienti dalle periferiche del PIC. Per quanto riguarda i bit di tipo flag, come abbiamo detto servono a segnalare la presenza di un determinato interrupt, e anche nel nostro programma sfruttiamo in particolare il bit RCIF l’USART receive interrupt flag bit, che viene settato ad 1 automaticamente quando arriva un messaggio su seriale, potendo in questo modo discriminare l’istante in cui si ha un segnale in ingresso gestendolo in modo opportuno. 1.4.4 PROGRAM COUNTER e STACK register Com’è noto, il Program Counter (PC) è un registro la cui funzione è quella di conservare l’indirizzo di memoria corrispondente all’istruzione successiva. Nel caso del nostro PIC il Program Counter è un registro composto da 13 bit. I bit meno significativi (low bit) provengono da un registro chiamato PCL, mentre i più significativi compongono il registro PCLATH. Lo Stack register è invece un particolare registro nel quale viene salvato l’indirizzo di memoria corrispondente all’istruzione successiva ad una CALL alla quale il flusso del programma ritorna in corrispondenza del RETURN o quando si presenta una chiamata che segue ad un interrupt. 1.5 Le porte di I/O Il PIC16F628 possiede 2 porte di Input/Output: PORTA e PORTB. Ognuna di queste due porte è composta da pin, alcuni adempiono anche ad altre funzioni essendo interconnessi alle periferiche presenti nel microcontrollore. In generale quando una particolare periferica viene attivata, i pin corrispondenti non possono essere utilizzati come semplici pin di I/O general purpose ma vengono automaticamente destinati alla periferica stessa. 1.5.1 PORTA e TRISA Il registro PORTA è essenzialmente un latch a 8 bit. Come è stato detto, alcuni pin di questa porta sono destinati ad altre funzioni tramite multiplexing, per cui possono essere 23 utilizzati per interagire con le rispettive periferiche. Il pin RA4 per esempio, oltre a poter funzionare da general purpose I/O è utilizzato in caso di necessità come input di clock. Gli altri pin RA possono essere utilizzati sia da input che da output, la “direzionalità” dei pin viene settata agendo su un altro registro denominato TRISA. Ogni bit del registro TRISA ha una corrispondenza univoca con un pin di PORTA, in questo modo se un particolare bit del registro TRISA viene settato ad 1, il corrispondente pin della porta A potrà essere utilizzato esclusivamente come input per il PIC che ne leggerà perciò il contenuto; viceversa il microprocessore considererà un pin come output solo se il corrispondente bit del registro di TRIS è stato preventivamente azzerato. La gestione degli ingressi e delle uscite del PIC viene perciò effettuata via SW, permettendo al programmatore di inserire righe di codice tramite le quali si dovrà riempire in modo opportuno i registri TRIS così da garantire che i pin si comportino come richiesto dalle specifiche progettuali, ricordando sempre di non poter utilizzare in generale come semplici ingressi/uscite quei pin destinati alle particolari periferiche implementate all’interno del microcontrollore. Prendiamo ad esempio il pin RA0 e supponiamo di volerlo impostare come input, a seguito di quanto detto dovremo mettere a 1 il bit 0 del registro TRISA corrispondente tramite la seguente istruzione: bsf TRISA0 = 1 TRISA,0 (istruzione Assembly) (istruzione C) Per capire cosa succede a seguito della precedente istruzione riportiamo di seguito lo schema dello stadio d'uscita estratto dal data sheet della Microchip: Fig.1.9 – Schema dello stato di uscita del PIC16F628 24 Quello che succede è una commutazione ad 1 dello stato logico del flip-flop di tipo Dlatch indicato nel blocco con il nome TRIS latch. Per ogni linea di I/O esiste uno di questi flip-flop e lo stato logico in cui si trova dipende strettamente dallo stato logico del relativo bit nel registro TRIS (anzi per meglio dire ogni bit del registro TRIS e' fisicamente implementato con un TRIS latch). L'uscita Q del TRIS latch è collegata all'ingresso di una porta logica di tipo OR. Questo significa che, indipendentemente dal valore presente all'altro ingresso, l'uscita della porta OR varra' sempre 1 in quanto uno dei suoi ingressi vale 1 (si veda la tavola della verità). In questa condizione il transistor P non conduce e mantiene la linea RA0 scollegata dal positivo d'alimentazione. Allo stesso modo l'uscita negata del TRIS latch è collegata all'ingresso di una porta AND quindi l'uscita di questa varrà sempre 0 in quanto uno dei suoi ingressi vale 0 (vedi tavola). In questa condizione anche il transistor N non conduce mantenendo la linea RA0 scollegata anche dalla massa. Lo stato logico della linea RA0 dipenderà esclusivamente dalla circuiteria esterna cui la collegheremo. Applicando 0 o 5 volt al pin RA0, sarà possibile leggerne lo stato sfruttando la circuiteria d'ingresso del blocco rappresentata dal TTL input buffer e dal latch d'ingresso. Viceversa per utilizzare RA0 come uscita dobbiamo mettere a 0 il bit corrispondente nel registro di TRIS; vediamo qual è l’istruzione da utilizzare in questo caso: bcf TRISA0 = 0 TRISA,0 (istruzione Assembly) (istruzione C) Questo determina la commutazione a 0 dell'uscita Q del TRIS latch (ed a 1 dell'uscita Q negata). In questo stato il valore in uscita dalle porte OR e AND dipende esclusivamente dallo stato dell'uscita Q negata del Data Latch. Come per il TRIS latch, anche il Data Latch dipende dallo stato di un bit in un registro, in particolare del registro PORTA. La sua uscita negata viene inviata all'ingresso delle due porte logiche OR e AND e quindi direttamente sulla base dei transistor P ed N. Se mettiamo a 0 il bit 0 del registro PORTA otterremo la conduzione del transistor N con conseguente messa a 0 della linea RA0. Se invece mettiamo a 1 il bit 0 otterremo la 25 conduzione del transistor P con conseguenza messa a +5 volt della linea RA0. In questa condizione e' sempre possibile rileggere il valore inviato sulla linea tramite la circuiteria d'ingresso. Di seguito riportiamo una tabella contenete i singoli pin con le relative funzionalità associate: Fig.1.10 –Le funzionalità dei singoli pin del PIC16F628 Come si vede tutti i pin hanno altre funzioni associate oltre quelle di I/O general purpose. 1.5.2 PORTB e TRISB PORTB è una porta bidirezionale a 8 bit. Come nel caso precedente, la bidirezionalità viene gestita tramite il registro dedicato TRISB. Il setting per decidere la direzione dei dati attraverso il particolare pin è lo stesso: un bit messo a 1 in TRISB farà funzionare il 26 pin corrispondente da input, mentre un valore pari a 0 destinerà il pin a comportarsi da output. Anche in questo caso i pin di PORTB, sono connessi tramite multiplexing ad altre periferiche e in più possono essere utilizzati come risorsa di interrupt nel caso in cui questi ultimi siano stati abilitati tramite il settaggio degli appositi registri visti in precedenza. In aggiunta, tutti i pin di questa seconda porta possiedono un leggero PullUp che viene controllato dal bit RBPU dell’ Option Register, attivabile quando le linee sono programmate come ingressi. In ingresso infatti, come spiegato precedentemente, le linee vengono completamente scollegate dal PIC in quanto sia il transitor P che il transistor N sono aperti. Lo stato delle linee dipende quindi esclusivamente dalla circuiteria esterna. Se tale circuiteria è di tipo a collettore aperto o più semplicemente è costituita da un semplice pulsante che, quando premuto, collega a massa la linea di I/O, è necessario inserire una resistenza di pull-up verso il positivo per essere sicuri che quando il pulsante è rilasciato ci sia una condizione logica a 1 stabile sulla linea d'ingresso. La circuiteria di weak pull-up consente di evitare l'uso di resistenze di pull-up e può essere attivata o disattivata agendo sul bit RBPU del registro OPTION . Nella figura seguente viene riprodotto lo schema a blocchi dello stadio d'uscita della linea RB0 estratto dal data sheet Microchip: Fig. 1.11 - Schema a blocchi dello stadio d'uscita della linea RB0 27 La sola linea RB0 inoltre, presenta una caratteristica molto particolare. Essa, quando viene configurata come linea di ingresso, può generare, in corrispondenza di un cambio di stato logico, un interrupt, ovvero una interruzione immediata del programma in esecuzione ed una chiamata ad una subroutine speciale denominata interrupt service routine. Altre 4 linee di questa porta (RB7:RB4) possono fornire input per un interrupt in corrispondenza di un loro cambiamento di stato logico. Come per le linee della porta precedente forniamo una tabella nella quale vengono elencate e brevemente descritte le funzionalità aggiuntive di ogni linea. Fig.1.12 –Le funzionalità delle singole linee del PIC16F628 In particolare per la realizzazione del device preso in esame nel seguente lavoro, sono importanti due linee della PORTB: RB1 e RB2. Suddette linee infatti, una volta abilitato l’hardware relativo, forniscono i dati in ingresso e uscita dal modulo USART, di cui ci occuperemo tra poco, che rende possibile la comunicazione seriale del PIC. 28 Nel dettaglio la RB1/RX funziona in ricezione dei pacchetti dati su seriale, mentre la RB2/TX è il terminale di uscita del modulo di trasmissione seriale. Fig.1.13 – Schema a blocchi delle vie RB1 e RB2 In figura vediamo lo schema dei blocchi di uscita delle vie RB1 e RB2 utilizzate come detto per la comunicazione su seriale. 29 1.6 Il modulo USART L’Universal Synchronous/Asynchronous Receiver/Transmitter costituisce parte integrante delle periferiche hardwarizzate all’interno del nostro PIC, e rappresenta senza dubbio una delle caratteristiche che hanno condizionato in modo decisivo la scelta del microcontrollore. Il modulo USART è un dispositivo hardware di uso generale o dedicato, converte flussi di bit di dati da un formato parallelo a un formato seriale o viceversa. Praticamente ogni famiglia di microprocessori ha la sua UART/USART dedicata. Questo modulo è solitamente parte di un circuito integrato usato per la comunicazione seriale tra un computer ed una periferica e viceversa. Abbiamo detto che questo dispositivo permette la conversione dal formato parallelo a quello seriale che senza dubbio rimane il protocollo di comunicazione più vantaggioso avendo bisogno di un solo cavo per la trasmissione delle informazioni. Ogni modulo USART contiene uno shift register che costituisce il metodo fondamentale per la conversione operata da questo modulo. I segnali esterni possono presentarsi in diverse forme con diversi livelli di voltaggio caratteristici del protocollo di comunicazione utilizzato (un esempio è la trasmissione su via seriale RS-232 utilizzata nella nostra progettazione); la comunicazione può inoltre essere full duplex, quando entrambi i terminali collegati comunicano allo stesso tempo, o half duplex, se i due terminali trasmettono a tempi alternati. Per i dettagli in merito alla comunicazione seriale rimandiamo al capitolo dedicato nel quale si descrivono le specifiche del protocollo RS-232. Analizziamo in breve l’algoritmo che permette all’hardware dedicato di operare la conversione parallela/seriale. Durante la comunicazione, ogni bit che compone il pacchetto, corrispondente peraltro ad una pulsazione del livello di voltaggio, può trovarsi solamente in uno di due stati: low o high. Solitamente lo stato logico “1”, cioè la condizione high voltage corrisponde al mark state mentre lo stato logico “0” viene associato allo space state. Il bit di start è normalmente sempre uno 0, e segnala al terminale ricevente (DTE) che ci sono dei dati in arrivo. I seguenti cinque o otto bit (a seconda del protocollo utilizzato) rappresentano il contenuto informativo vero e proprio. L’ottavo o il nono bit possono implementare il controllo di parità necessario per una 30 verifica della correttezza durante la trasmissione. Per ultimo viene il cosiddetto stop bit che è di tipo space e che segnala al ricevitore la fine del pacchetto trasmesso. Tutte le operazioni effettuate dal modulo USART sono controllate da un segnale di clock interno che ha una frequenza multipla (x16) del data rate, perciò ogni bit ha una durata di 16 colpi di clock. Il ricevente “testa” lo stato del segnale in ingresso ricercando uno start bit che segnali l’inizio della transazione. Una volta riconosciuto un bit di start adeguato, segno dell’inizio della trasmissione, i bit riconosciuti successivamente vengono immagazzinati nello shift register dedicato, che una volta riempito, li rende disponibili (in fasci paralleli) al sistema ricevente del microprocessore. L’USART setterà a questo punto una flag, rappresentata dalla commutazione di un apposito bit (avviene proprio questo nel caso del nostro PIC), ad indicare che nuovi dati sono disponibili e potrà inoltre dare origine ad un Interrupt . Le operazioni che compongono la trasmissione sono più semplici perché controllate dal microprocessore. Una volta depositati i dati nello shift register, l’hardware del modulo di trasmissione genera lo start bit, shifta il numero richiesto di data bits fuori della linea, se necessario genera il bit di parità, appone il bit di stop. Per la realizzazione della comunicazione di tipo full duplex, nella quale la trasmissione e la ricezione possono avvenire contemporaneamente, il modulo USART utilizza due registri separati per la ricezione e per la trasmissione. Adesso ritorniamo al modulo contenuto all’interno del nostro PIC16F628; questo può essere configurato per garantire una comunicazione di tipo Asincrona full duplex (scelta per la comunicazione del nostro device), Sincrona-Maser e Sincrona-Slave tramite il setting di appositi bit. Per quanto riguarda invece i terminali di ingresso e di uscita, vengono utilizzati, come è stato precedentemente detto, le linee RB1 per la ricezione e RB2 per la trasmissione. Questi pin vengono dedicati alla periferica di comunicazione seriale quando viene messo a 1 il bit SPEN appartenente al registro RCSTA di cui ci occuperemo tra poco. 31 1.6.1 Il BAUD RATE GENERATOR Un aspetto molto importante che caratterizza la comunicazione seriale tra due dispositivi, è senza dubbio il Baud Rate. In generale con il termine Baud rate si intende il massimo numero di variazioni che un segnale può subire in un secondo. Il Baud viene spesso confuso con il bit al secondo, ma differisce da questo perché ad un Baud possono corrispondere più bit se si usano più di due valori di ampiezza e si modula anche in fase. Per generare l’opportuno valore di Baud rate desiderato c’è un generatore di clock dedicato denominato BRG (Baud Rate Generator) che può essere utilizzato sia in fase di ricezione che di trasmissione. Il periodo di clock è basato sul valore di un timer a 8 bit controllato dal registro SPBRG. In modalità asincrona Il Baud Rate Generator è controllato anche dal bit BRGH appartenente al registro TXSTA per la selezione della velocità, mentre in modalità sincrona questo bit viene ignorato. Quindi possiamo riassumere che per impostare il valore desiderato di baud rate, e per definire in questo modo la velocità di trasmissione, è necessario inserire un adeguato valore all’interno del registro SPBRG e di impostare ad 1 o a 0 il bit BRGH a seconda che la comunicazione avvenga ad alte o a basse velocità. Questi setting vengono operati all’interno del firmware scritto (vedere a questo proposito la sezione dedicata al software redatto); ma come è possibile calcolare il valore corretto da inserire nel registro SPBRG ? In questo caso ci viene in aiuto il datasheet del PIC all’interno del quale sono fornite delle tabelle, che ci restituiscono il valore cercato in base al valore della frequenza di clock collegato al microcontrollore (FOSC) e al valore di Baud rate desiderato, e ci indicano una formula per il calcolo esatto del valore da immettere nel registro interessato (a meno di un errore stimabile). Fig.1.14 – Il Baud Rate Come si può vedere la presenza di una divisore 16 anziché 64 permette alla modalità ad alta velocità di essere più accurata di quella a bassa velocità. Quindi, dove possibile, utilizzare la modalità ad alta velocità anche per Baudrate bassi può portare a dei 32 vantaggi in termine di precisione. Vediamo i valori specifici utilizzati nel nostro firmware per settare a 9600 il valore di Baud rate: • FOSC = 4 MHz (abbiamo scelto la frequenza dell’oscillatore interno del microcontrollore) • Desired Baud Rate = 9600 • BRGH = 1 (consideriamo la velocità di trasmissione abbastanza alta per minimizzare l’errore) • SYNC = 0 (la comunicazione abbiamo detto è in questo caso di tipo asincrono) Applicando la formula sopra riportata otteniamo un valore pari a 25 da immettere nel registro SPBRG per ottenere le desiderate impostazioni di velocità. 33 1.6.2 Configurazione e registri A questo punto analizziamo nel dettaglio i registri implicati in fase di ricezione e trasmissione e che costituiscono il core del modulo USART. I primi due registri, che contengono i bit utilizzati per settare tutte le impostazioni del flusso trasmissivo sono TXSTA (Transmit Status and Control Register) e RCSTA (Receive Status and Control Register) Fig.1.15 – Transmit status and control register 34 Fig.1.16 – Receive status and control register Riassumendo, il tipo di comunicazione scelta è di tipo asincrono, cioè i due terminali non comunicano servendosi di un clock esterno per la temporizzazione del flusso dei 35 dati (se ne parlerà in modo più approfondito nella sezione dedicata al protocollo di comunicazione). Per renderla tale basterà mettere a 0 il bit SYNC (TXSTA <4>). Una volta impostata la modalità scelta, il modulo utilizza un protocollo standard Non Return to Zero (NRZ) cioè ogni pacchetto sarà composto da un bit di start, uno di stop, otto o nove di dati e nessun bit per il controllo di parità. Il baud rate come visto è preso dai registri e dalle strutture dedicate. Per quanto riguarda la fase di trasmissione, il registro shifter fondamentale, di cui si è parlato nella parte precedente, è il Transmit Shift Register (TSR). È questo registro che riceve i dati in formato parallelo dal TXREG, che viene caricato in base ai dati che provengono dal programma in esecuzione nel microcontrollore. Lo schema a blocchi presentato di seguito illustra il funzionamento in trasmissione del modulo USART. Fig.1.17 – Schema a blocchi del funzionamento in trasmissione del modulo USART Il registro shifter non viene caricato finché il bit di stop del precedente pacchetto non viene inviato. Perciò appena il l’ultimo bit di un pacchetto (quello di stop appunto) viene caricato nel TXREG, i dati vengono spostati nel registro di shifter, svuotando il TXREG stesso e settando il flag bit TXIF (PIR1<4>). Il setting di questa flag avverrà solo se in precedenza è stata abilitata la risorsa di interrupt legata alla trasmissione dati (bisogna settare a 1 il bit TXIE nel registro PIE1). Il bit TXIF quindi segnala lo stato del registro TXREG (accoppiando allo svuotamento del registro un interrupt), mentre un altro bit, TRMT (TXSTA<1>), viene messo a 1 quando il registro di shift è vuoto, senza però associare a questo avvenimento una fonte di interrupt. Il programmatore dovrà perciò effettuare via software un polling continuo di questo bit per avere notizia dello stato del registro shifter. La trasmissione non avrà inizio perciò finché il registro 36 TXREG non sarà stato riempito (una volta riempito questo registro i dati vengono subito trasmessi al registro TSR e inviati automaticamente in trasmissione) e fino a quando il Baud rate generator non avrà generato uno clock per lo shifting dei dati, ma prima di tutto bisogna ablitare la trasmissione settando a 1 il bit TXEN (TXSTA<5>), responsabile proprio dell’attivazione della funzionalità trasmissiva del modulo USART. Il bit TX9D che compare nel blocco, viene invece chiamato in causa nel momento in cui si voglia effettuare la trasmissione di pacchetti composti da 9 bit dati (TX9 = 1 in questo caso). Riassumiamo brevemente gli step seguiti per effettuare una trasmissione asincrona: 1. Inizializzare il registro SPBRG con un valore intero corrispondente al baud rate desiderato; 2. abilitare la porta seriale asincrona mettendo a 0 SYNC e a 1 SPEN; 3. Se si desidera gestire interrupt relativi alla trasmissione dati, settare l’enable bit TXIE; 4. se la trasmissione è di tipo 9-bit, TX9 verrà messo a 1; 5. abilitare la trasmissione settando TXEN; 6. caricare i dati nel registro dedicato TXREG (inizia la trasmissione). La fase di ricezione è realizzata da un altro blocco di registri, schematizzati nella figura seguente che funzionano in modo simmetrico rispetto a quelli dedicati alla trasmissione. Fig.1.18 – Schema relativo alla fase di ricezione 37 I pacchetti vengono ricevuti dal pin RB1/RX e guidati al blocco di raccolta dati. Il blocco di recupero è anch’esso formato principalmente da uno shifter che opera a una frequenza 16 volte superiore a quella imposta dal Baud rate. Quando viene selezionata la modalità asincrona, la ricezione deve essere abilitata tramite il setting del bit CREN. Lo shift register in questo caso è chiamato RSR (Receive shift register). Anche in questo caso, dopo aver ricevuto il bit di stop, i dati ricevuti dal RSR vengono trasferiti nel registro RCREG, e una volta completato il trasferimento il flag bit RCIF viene messo a 1 automaticamente fornendo l’input per l’interrupt legato a questa funzione (previa abilitazione dello stesso tramite settino del bit RCIE). È proprio utilizzando questo meccanismo che il nostro bit si “accorge” di un avvenuta trasmissione seriale da parte dell’Host, gestendo la seguente risposta tramite una ISR (Inerrupt Service Routine) scritta appositamente nel firmware. Il registro RCREG è un double buffered, cioè è un registro a due livelli. Questo permette a due byte di dati alla volta di poter essere ricevuti e di essere accumulati nel registro di ricezione. Anche in questo caso, riassumiamo i passaggi da seguire per settare correttamente la fase di ricezione: 1. Come nel caso precedente è necessario operare l’inizializzazione di SPBRG e BRGH per quanto riguarda il Baud rate; 2. Abilitare la porta seriale in modalità async., azzerando SYNC e settando SPEN; 3. Per utilizzare le funzionalità di interrupt, attivarli tramite il bit RCIE; 4. Se si richiede una ricezione 9-bit, mettere a 1 RX9; 5. Attivare la ricezione, mettendo a 1 il bit CREN; 6. RCIF verrà impostato al valore 1 a ricezione avvenuta, generando automaticamente un interrupt, se abilitato; 7. leggere gli 8-bit ricevuti dal registro RCREG. 38 1.7 Risorse di Interrupt Abbiamo visto come il PIC sia dotato di registri dedicati alla gestione degli interrupt. Ritorniamo brevemente su questo concetto: in informatica, un interrupt è un tipo particolare di istruzione della CPU, che consente l'interruzione di un processo qualora si verifichino determinate condizioni, oppure laddove il processo in esecuzione debba effettuare una richiesta al sistema operativo. È un segnale, generalmente di natura asincrona, che arriva all'interno della CPU per avvisarla del verificarsi di un certo evento. In generale, gli interrupt vengono utilizzati quando: • un processo tenta di eseguire un'istruzione non valida, come una divisione per zero. In questi casi non è possibile proseguire con l'esecuzione del processo e l'interrupt consente di informare il sistema operativo di quanto avvenuto in modo da permettere la corretta gestione del problema. • un processo richiede un'operazione di I/O al sistema operativo. • un dispositivo di I/O informa la CPU che è disponibile a ricevere o fornire dati. In questo caso viene avviata un'opportuna procedura del sistema operativo preposta ad occuparsi della relativa periferica. In tutti questi casi e in molti altri, l’interrupt avverte alla CPU del presentarsi di un evento, prodotto dalle periferiche o dal software stesso in esecuzione, e viene gestito dal microprocessore tramite l’esecuzione di routine dedicate, salvando prima però nello stack register. Al termine, il microprocessore torna all’istruzione che stava eseguendo nel momento in cui si presentava l’interrupt, l’indirizzo corrispondente era stato infatti salvato nello stack. Proprio questo è quello che succede nel PIC nel momento in cui si verifica un interrupt che però dovrà essere stato abilitato precedentemente nel firmware scritto. Abbiamo già visto quali sono i registri che si occupano del setting e della gestione delle risorse di interrupt che sono 10 nel 16F628: • External Inerrupt RB0/INT • TMR0 Overflow Interrupt 39 • PORTB Change Interruptus (pins RB7:RB4) • Comparator Interrupt • USART Interrupt TX • USART Interrupt RX • CCP Interrupt • TMR1 Overflow Interrupt • TMR2 Match Interrupt • EEPROM Ovviamente solo alcune di queste risorse sono state utilizzate durante la progettazione e la realizzazione del firmware che costituisce il programma eseguito dal PIC. Tutte le richieste di interrupt sono comunque raccolte tramite i flag bit del registro dedicato INTCON che contiene anche bit per l’abilitazione degli interrupt in generale e di singole risorse. Il bit GIE di questo registro gestisce proprio l’abilitazione di tutti gli interrupt che vengono gestiti singolarmente tramite i bit enable corrispondenti. Quando la CPU risponde ad una richiesta di interrupt, il bit GIE viene azzerato, disabilitando ogni altro interrupt, l’indirizzo di ritorno (ovvero l’indirizzo al quale corrisponde l’istruzione da eseguire una volta usciti dalla routine di interrupt) era stato salvato, come detto, nello stack register. Per gli interrupt legati ad eventi esterni (cambiamento del pin INT o di PORTB) la latenza di interrupt corrisponde a tre o quattro cicli macchina. Per un’analisi più approfondita di tutte le singole risorse di interrupt rimandiamo all’esauriente datasheet del PIC. In questa sede ci interessa sapere che, a seguito di un interrupt, il PIC esegue una particolare routine detta appunto di Interrupt nella quale sono scritte le istruzioni che la CPU deve eseguire in questa fase. La trattazione del codice presente in questa routine verrà presa in considerazione nella sezione dedicata al firmware. La sezione appena trattata ci ha esplicitato dettagliatamente come il microcontrollore PIC16F628 costituisca la parte “intelligente” del nostro dispositivo: è proprio questo integrato infatti, che gestisce gli input provenienti dall’utente disabile e rende possibile quell’interazione a doppio senso che rappresenta il nocciolo innovativo dell’applicazione realizzata. 40 2. LO STRATO FIRMWARE 2.1 Introduzione all’ Integrated Development Environment Per lo sviluppo della componente software che andrà a costituire il firmware del PIC16F628, è stato utilizzato l’ambiente di sviluppo MPLAB, fornito in modalità opensource dalla Microchip, il quale consente in prima analisi di redigere il codice sorgente, e successivamente di svolgere accurate simulazioni emulando il comportamento del microcontrollore programmato tramite lo stesso codice. L’IDE ( Integrated Development Environment ) della Microchip permette di sviluppare codice scritto in diversi linguaggi, supportando tutti i modelli di PICMicro presenti in commercio. Figura 2.1. Microchip MPLAB IDE 41 MPLAB è una Windows like application di semplice utilizzo, che permette la realizzazione di un progetto che renderà possibile la programmazione del componente elettronico scelto e i successivi test. In particolare, per lo sviluppo del presente progetto è stato scelto come linguaggio di programmazione il C, preferito al più diffuso e utilizzato Assembly per via della maggiore semplicità e versatilità del linguaggio. La programmazione e la creazione del codice deve seguire diverse fasi interdipendenti tra loro che produrranno un file “.HEX” il quale verrà “bruciato” all’interno del PIC tramite un apposito programmatore di cui parleremo più avanti. Per svolgere quindi tutte le funzionalità, necessarie alla creazione di un firmware funzionante che soddisfi le specifiche funzionali di progetto riportate in precedenza, l’ide fornito dalla Microchip contiene, al suo interno, diversi tools: MPLAB Project Manager : consente di creare un progetto e lavorare con specifici files. Grazie ad esso è possibile passare dalla creazione testo al Debug del programma. MPLAB Editor : serve per creare il file sorgente o altri file di testo senza uscire da MPLAB. MPLAB SIM Software Simulator : col simulatore è possibile eseguire ogni singola riga di programma sorgente controllandone l’effettiva esecuzione. MPLAB Emulator : disponendo anche del supporto Hardware è possibile effettuare delle emulazioni In-Circuit, testando direttamente sul circuito il corretto funzionamento del programma. 42 Figura 2.2. Una delle fasi di sviluppo: la scelta del device Per prima cosa si creerà un nuovo progetto specificando il tipo di PIC utilizzato e il linguaggio di programmazione scelto. A questo punto, si procederà alla creazione del codice sorgente tramite l’editor fornito dall’ambiente di sviluppo stesso che permette semplicemente di eseguire il debugging del codice creato. MPLAB ci permette inoltre, tramite delle opzioni di view, di visualizzare in tempo reale il contenuto degli Special Function Register del PIC, potendo in questo modo verificare come il firmware interagisca col microcontrollore modificandone il contenuto dei registri. 43 Figura 2.3. Mplab permette di visualizzare il codice realizzato, l'output prodotto e il contenuto degli Special Function Registers (SFR) Una volta scritto e “debuggato” il codice sorgente, è opportuno testarlo grazie all’utilizzo del modulo di simulazione MPLAB SIM che rende possibile simulare l’interazione con gli input e gli output impostati per il PIC. Alcuni tools, utilizzati durante lo sviluppo del presente progetto, permettono effettivamente di impostare i pin di I/O su low/high-state, così da simulare l’azione di particolari input collegati al microcontrollore, come ad esempio la connessione di switch a pin di ingresso, che setteranno in stato basso i bit corrispondenti al momento della chiusura dello stesso interruttore. Questa tipologia di interazione è resa possibile dall’applicazione Stimulus, grazie alla quale è possibile creare inoltre dei veri e propri file di input contenenti i settaggi da imporre ai pin di ingresso programmati opportunamente. 44 2.2 Il Firmware Passiamo ora alla descrizione del codice che costituirà il Firmware del PIC e che contiene perciò, la sequenza di operazioni che il microcontrollore esegue all’avvio. Prima di addentrarsi nella spiegazione tecnica delle singole righe di codice, è opportuno descrivere brevemente la funzione primaria del codice stesso, che sarà ovviamente in accordo con lo scopo realizzativo primario del seguente lavoro. L’applicativo software scritto in linguaggio C si propone di programmare la componente hardware dotata di intelligenza, rappresentata dal PIC16F628, in modo che quest’ultima possa interfacciarsi col mondo esterno, tramite il collegamento seriale di input/output che la connette all’Host, per mezzo di un attuatore generico, costituiente essenziale per un ulteriore output del device, e tramite un input che svolgerà funzione di feedback riguardo all’azione dell’attuatore. Lo strato software provvede in prima istanza a settare i pin del PIC, che vengono in questo modo impostati come input o output, e a rendere possibile, tramite il setting di flags e parametri, la comunicazione seriale col Personal Computer lato utente (la Control Station). Passiamo adesso all’analisi del codice vero e proprio. Il listato, precedentemente descritto, è stato implementato in C, utilizzando le potenzialità del compilatore PICLite presente all’interno dell’Ide MPLAB, che permettono la creazione, lo sviluppo e il debugging di codice C. Come è stato accennato in precedenza, di norma la programmazione PIC viene affrontata seguendo preferibilmente la semantica dell’Assembly che dovrebbe permettere un maggior controllo delle funzionalità Hardware, ma che risulta per ovvie ragioni più macchinosa e meno intuitiva, motivi per i quali è stato scelto come linguaggio di sviluppo uno di più alto livello, come il C appunto. Iniziamo con la prima istruzione in codice che è rappresentata dalla direttiva “include”. #include "htc.h" Detta funzionalità comunica al compilatore di includere al posto della suddetta direttiva l’intero contenuto della libreria “htc.h”. Questo libreria, incluso in realtà nel pacchetto 45 contenente l’Ide, contiene al suo interno le dichiarazioni necessarie al compilatore per allocare e definire i registri e le variabili utilizzate nel listato in base alle peculiarità del particolare PIC utilizzato. Ecco perché, per esempio, nel listato non vengono definite le variabili indicanti i vari registri o i bit ( TRISA, TRISB, PORTB, etc etc.. ); le relative definizioni con le allocazioni di memoria associate sono presenti quindi nella libreria inclusa. //Routine di ritardo Software void waitdelay () { int i; for ( i = 0; i < 200; ) i++; } //Routine di ritardo Software void waitdelay_2 () { int i; for ( i = 0; i < 500; ) i++; } Queste righe di codice hanno come finalità l’implementazione del ritardo software tramite la scrittura di cicli for, che servirà più avanti nel listato, dove verranno richiamate queste stesse funzioni. In particolare viene inizializzato un contatore “ i ” che viene incrementato ad ogni ciclo, causando il ritardo detto “software” perché il calcolatore non svolge nessun’altra operazione nel frattempo. void main() { Analizziamo a questo punto, il corpo del programma contenuto all’interno della funzione principale main. 46 Per quanto riguarda la stessa funzione main, questa è dichiarata come void, ovvero essa non ritornerà nessun valore specifico. Seguono a questo punto i setting che serviranno ad impostare i pin di ingresso/uscita sia per il collegamento seriale, sia per quello verso l’attuatore e l’input di feedback. TRISB1 = 1; TRISB2 = 0; // Il pin RB1 di PORTB è configurato come input (RX) // Il pin RB2 di PORTB è configurato come output (TX) TXEN = 1; RBPU = 0; // Abilita la comunicazione attraverso l'USART // Setaggio del pull-up su PORTB TRISB5 = 1; (switch) TRISB0 = 0; // Il pin RB5 di PORTB è configurato come input RB0 = 0; RB2 = 1; // Il led viene settato su Spento // Setting di RB2 (TX) // Il pin RB0 di PORTB è configurato come output (led) In particolare il primo registro, sul quale si agisce tramite il codice è il TRISB che, come è stato ampiamente detto nelle sezioni precedenti, controlla e definisce la “natura” dei pin appartenenti alla porta B. Infatti un valore assegnato su 1, farà si che il pin corrispondente al particolare bit assumerà la funzione di INPUT, viceversa il valore 0 farà corrispondere il pin ad una porta di OUTPUT. Nel nostro caso al bit 1 del registro TRISB viene associato il valore alto, perciò il corrispondente pin RB1 verrà configurato come INPUT e servirà infatti da terminale di ricezione ( RX ) per la comunicazione seriale con l’Host. Analogo discorso vale per il pin RB2 che viene settato su low e servirà da OUTPUT ( per la trasmissione su seriale TX ). Il bit TXEN appartiene come visto al Transmit Status and Control Register e, se impostato su 1, rende possibile la comunicazione seriale tramite il modulo Usart implementato all’interno del PIC scelto appositamente. Il bit RBPU dell’Option Register verrà settato sul valore 0 per attivare i pull-up interni alla PORTB. In questo modo i pin impostati come Output sono inizializzati sul valore alto. B5 e B0 sono invece utilizzati rispettivamente come ingresso ( per lo switch/feedback ) e come uscita ( per il led/attuatore ) . Seguono le inizializzazioni di RB0 e di RB2. 47 Le righe successive implementeranno un aspetto molto importante del protocollo di comunicazione utilizzato, ovvero il Baudrate, cioè la velocità con la quale sono scambiati i dati tra trasmittente e ricevitore. In particolare il baudrate, misurato in bit per secondo ( bps ), viene settato nel nostro caso su 9600 bps tramite il settaggio di appositi registri che andiamo a individuare. Per primo c’è il Baud Rate Generator Register ( SPBRG ) che, in base al valore su cui viene impostato, determinerà la velocità di trasmissione. Per il calcolo di suddetto valore ci viene in aiuto il datashet del PICmicro, che fornisce una formula grzie alla quale è possibile settare correttamente il valore del SPBRG conoscendo la frequenza di clock utilizzato per il microcontrollore e il valore di baud rate desiderato. Baud Rate = FOSC/(16(X+1)) La X contrassegna proprio la nostra incognita, cioè il valore decimale da immettere via software nel nostro registro di controllo. FOSC indica la frequenza di oscillazione che nelle nostre specifiche progettuali vale come già illustrato precedentemente 4 MHz , mentre il valore desiderato del Baudrate è appunto 9600 bps. Invertendo banalmente la formula si ottiene il valore da caricare nel registro che nel caso considerato è 25. SYNC è invece il bit 4 del registro TXSTA e settato a 0 permette una comunicazione di tipo asincrono di cui si è già parlato in modo approfondito nella sezione riguardante il protocollo RS232. In fine BRGH, anch’esso bit del Transmit Register , viene posizionato a 1 per alti valori di baud rate, come nel caso di nostro interesse. Il datashet del PIC riporta delle tabelle con i valori corrispondenti da caricare nel registro generatore di baudrate al variare dei diversi valori di clock e di baud rate stesso. // Imposta il Baud Rate a 9600 bps SPBRG = 25; SYNC = 0; BRGH = 1; 48 Ricordiamo che per la progettazione del device si è scelto per motivi di semplificazione di utilizzare il clock interno del PIC a 4 MHz, ma sarebbe stato possibile connetterlo ad una fonte di clock esterno rappresentata da un quarzo o da un circuito oscillatore equivalente di tipo RC. Riportiamo in fine le righe descritte. RX9 = 0; RCIF = 0; seriale RCIE = 1; SPEN = 1; CREN = 1; // configura la ricezione a otto bit // setto a zero il bit flag di ricezione del messaggio // abilita l'interrupt per ricezione da seriale // abilita la porta seriale // abilita la ricezione continua in modalità Asincrona Continua il setting dei vari flag per impostare la comunicazione seriale sui parametri desiderati. Il bit RX9 del registro RCSTA impostato su 0, fissa la grandezza del pacchetto inviato a 8 bit. Il nono bit serve per il controllo di parità, (maggiori chiarimenti a riguardo si ottengono consultando la sezione sulla comunicazione seriale secondo il protocollo RS232). Per quanto riguarda RCIF, questo è un è un bit facente parte del registro PIR1 che contiene le flag degli interrupt. In particolare questo bit viene inizializzato a 0 ad indicare che il buffer di ricezione è vuoto. Nel momento in cui suddetto buffer viene riempito alla fine della trasmissione, il bit RCIF assume il valore 1 attivando l’interrupt corrispondente, che verrà utilizzato più avanti nel listato per indicare l’avvenuta ricezione del messaggio da parte del PICmicro. RCIE impostato su 1 abilita l’utilizzo dell’interrupt di ricezione del modulo USART, così da rendere possibile la discriminazione da parte del codice firmware dell’avvenuta trasmissione di dati da parte dell’host. SPEN e CREN fanno parte entrambi del registro RCSTA e servono rispettivamente ad abilitare la porta il collegamento con la porta seriale, e a rendere attiva la ricezione continua di bit tipica della modalità asincrona utilizzata in questo protocollo di comunicazione. 49 PEIE = 1; GIE = 1; // abilita interrupt provenienti dalle periferiche // abilita tutti gli interrupt Questi due bit sono inclusi entrambi nel registro INTCON, che contiene tutte le flag per l’attivazione delle risorse di interrupt di cui dispone il microcontrollore. PEIE rende attivi tutti gli interrupt provenienti dalle periferiche e GIE abilita in generale tutti i tipi di interrupt disponibili. L’interrupt nella specifica applicazione sviluppata permette al PIC di “rendersi conto” della trasmissione del messaggio da parte dell’host e di rispondere come da programma al presentarsi di questa evenienza. A questo punto vediamo come avviene la prima comunicazione tra PIC e host. Il codice permette al microcontrollore di inviare un primo messaggio di alive che nello specifico è banalmente “CIAO”. Vediamo di seguito le righe di codice corrispondente. // IL Pic invia un primo messaggio di alive TXREG = 67; // "C" waitdelay(); TXREG = 73; // "I" waitdelay(); TXREG = 65; // "A" waitdelay(); TXREG = 79; // "O" waitdelay(); Il codice quindi non fa niente di più che caricare nel buffer di trasmissione ( TXREG ) un carattere che viene di conseguenza inviato via seriale all’host e aspettare un determinato numero di cicli macchina dettato dalla routine waitdelay (), in modo da evitare che il carattere successivo venga sovrascritto prima che avvenga la trasmissione e che si incorra in questo modo in un errore da overrun del buffer di ricezione. Il medesimo procedimento viene seguito per tutti i caratteri componenti il messaggio di alive desiderato, che vengono inseriti nel codice utilizzando i corrispondenti valori esadecimali secondo la nota codifica ASCII. 50 A questo punto analizziamo la routine contenente il controllo dell’interrupt, torneremo sull’istruzione while subito dopo. // Routine di interrupt interrupt isr( void ) { if ( RCIF == 1) { // Ricezione seriale effettuata if (RB0 == 0){ RB0 = 1;} else RB0 = 0; TXREG = RCREG; //Trasmette in echo il messaggio ricevuto La funzione è dichiarata void, cioè non ritornerà nessun valore, e contiene le istruzioni che il microcontrollore dovrà eseguire una volta presentatosi l’interrupt legato all’avvenuta ricezione del messaggio proveniente dall’Host. Questo interrupt era stato abilitato quando avevamo settato ad 1 il bit RCIE e si presenta nel momento in cui il bit flag RCIF viene settato; ciò avviene proprio nel momento in cui la ricezione del messaggio è completata. Come è stato già precedentemente descritto nella sezione riguardante le modalità di ricezione e trasmissione seriale del PIC () perciò, una volta che la ricezione è completa, e che quindi il relativo registro di ricezione RCREG è pieno, RCIF viene settato a 1 generando l’interrupt relativo alla ricezione, a questo punto il flusso del programma seguirà proprio le istruzioni relative alla routine di interrupt. In particolare, come si evince semplicemente dal codice, nel momneto di avvenuta trasmissione del segnale da parte dell’host, il firmware procede alla commutazione del bit RB0, collegato come è noto al LED ( o attuatore generico a seconda dell’applicazione ) tramite un ciclo if e alla trasmissione in echo del messaggio ricevuto copiando il contenuto del registro RCREG nel TXREG deputato proprio alla trasmissione. Analizziamo adesso le istruzioni contenute all’interno del ciclo while. 51 while( 1 ) { if (RB5 == 1) {// A seguito del passaggio di RB5 nello stato low // A seguito del cambiamento di stato del bit RB5, viene inviato un //messaggio sulla seriale waitdelay_2 (); TXREG = 0x20; waitdelay_2 (); TXREG = 0x42; waitdelay_2 (); TXREG = 0x2D; waitdelay_2 (); TXREG = 0x61; waitdelay_2 (); TXREG = 0x62; waitdelay_2 (); TXREG = 0x6C; waitdelay_2 (); TXREG = 0x65; waitdelay_2 (); // " " // "B" // "-" // "a" // "b" // "l" // "e" Questa parte del codice implementa la capacità fondamentale del PIC di rispondere a fronte di un input, costituito nella semplificazione da un semplice switch, che rappresenta in realtà il feedback inviato dal sensore che intercetta e verifica l’attivazione del generico attuatore. Il microcontrollore aspetta il verificarsi della condizione RB5=1, corrispondente proprio alla pressione esercitata sullo switch, verificata la quale procede all’invio di un messaggio via seriale caricato dal software all’interno del registro TXREG ( nell’esempio il messaggio inviato all’host alla pressione del tasto è la stringa “B-able” ). Tale messaggio servirà proprio da feedback lato utente di avvenuta attivazione dell’attuatore, infatti verrà intercettato dal programma di interfaccia che lo userà per individuare l’evento comandato dal soggetto. Appena viene caricato col valore esadecimale corrispondente al carattere desiderato secondo codifica ASCII, il registro TXREG provvede alla trasmissione dello stesso sulla corrispondente linea seriale. Da notare come si renda necessario fornire il tempo opportuno all’effettiva trasmissione del carattere caricato nel registro software tramite l’interposizione di un ritardo ( implementato come visto da waitdelay ) così da evitare che possa essere caricato il 52 carattere successivo prima dell’avvenuta trasmissione del precedente mandando in overrun il registro di trasmissione. Proviamo quindi a riassumere le azioni che il microcontrollore esegue in base alla programmazione ricevuta tramite il precedente codice. Il PIC viene collegato serialmente ( seguendo il protocollo di comunicazione RS232 ) all’host, ad un output ( che lo connetterà all’attuatore ) e ad un input ( utile nel fornire il feedback di verifica all’utente ). A seguito di una trasmissione seriale da parte del PC il microcontrollore attiverà o disattiverà l’attuatore commutando il piedino RB0 e invierà in echo il messaggio seriale ricevuto all’host stesso, a verifica dell’avvenuta comunicazione. Il PIC è però capace di interfacciarsi anche col mondo esterno tramite il piedino RB5, configurato come input. In questo modo il cambiamento di stato del bit di input corrispondente provocherà la trasmissione di un messaggio all’host ( e quindi all’utente ). La seconda parte della transazione, quella che principia con il setting del bit di input, viene utilizzata nel presente lavoro come verifica dell’effettiva attivazione dell’attuatore con lo scopo di fornire all’utente un feedback relativo all’attivazione dell’attuatore stesso. 53 2.3 Il Programmatore A questo punto, una volta cioè scritto e verificato il firmware tramite gli appositi tool di simulazione forniti dall’IDE, bisogna caricarlo all’interno del microcontrollore. A questo scopo la Microchip fornisce degli appositi device ytilizzati a questo scopo chiamati Programmatori. In commercio ce ne sono molti modelli, quello utilizzato nel nostro progetto è il PICSTART Plus. La programmazione del PIC viene eseguita semplicemente, a patto di collegare il programmatore al connettore seriale del personal computer (in questo caso è stato utilizzato un convertitore USB-RS232 per ovviare alla mancanza di porte seriali sui moderni PC), tramite una funzione apposita di MPLAB. Basta impostare il programmatore utilizzato, inserire il PIC nello slot apposito e procedere con il caricamento del file .HEX, prodotto dalla compilazione del programma realizzato in MPLAB. Questo file contiene, infatti, la traduzione del codice in esadecimale, garantendo al codice stesso maggior comapattezza. L’operazione di burning è molto rapida e, una volta terminata, produce un PIC programmato immediatamente utilizzabile. Figura 2.4. Posiziono il PIC nel PICSTART Plus per caricare il firmware 54 3. I PROTOCOLLI DI COMUNICAZIONE 3.1 Le scelte progettuali Nella fase progettuale, notevole importanza ha ricoperto la scelta dei protocolli di comunicazione più adatti per implementare le caratteristiche del dispositivo che si voleva realizzare. Come abbiamo già detto nella parte introduttiva, l’ausilio nel suo insieme è un vero e proprio sistema composto di diverse parti che comunicano tra di loro, con l’ambiente e con l’utilizzatore finale. Nel nostro caso, è previsto senz’altro l’utilizzo di un personal computer (opportunamente concepito e scelto tra quelli che garantiscono la massimizzazione dell’accessibilità da parte di un utente disabile) che provvederà, sia a fare da tramite tra l’utente e il dispositivo che opera l’attivazione degli attuatori domotici, sia ad interpretare le informazioni di feedback provenienti dal device in modo tale che queste possano essere recepite opportunamente dal disabile. Perciò avremo l’utente che imposta i comandi sul PC (che verrà configurato per diventare una vera e propria stazione di controllo) collegato in qualche modo al dispositivo realizzato. Proprio questo tipo di collegamento deve essere scelto opportunamente, secondo criteri discussi in questa sezione. Nelle prime fasi di progetto si era pensato di realizzare un dispositivo che supportasse un collegamento di tipo USB[7] con l’Host. Andando avanti nello sviluppo ci si è resi 55 conto che in questo caso, per gestire una periferica così concepita, sarebbe stato necessario scrivere anche un driver apposito[8], compito assai difficile se non si posseggono le opportune conoscenze informatiche. La connessione USB presentava senza dubbio numerosi vantaggi tra i quali l’estrema diffusione di questa porta sui moderni personal computer, l’elevata portabilità e la facilità di plug in. Per evitare la redazione del driver, cioè di quel programma assembly che permette al sistema operativo dell’Host di gestire i dati provenienti dalla periferica e la connessione con essa, si era pensato in prima battuta di costruire un dispositivo USB appartenente alla classe HID (Human Interface Device)[9] della quale fanno parte mouce e tastiere. Questi dispositivi infatti vengono automaticamente riconosciuti al momento del plug-in e vengono gestiti da driver generici già presenti all’interno di librerie dedicate, incluse nel sistema operativo. Realizzare un dispositivo del genere avrebbe permesso di bypassare l’onerosa scrittura del programma driver massimizzando inoltre la portabilità sella periferica. Anche questa possibilità si è rilevata però inattuabile poiché realizzare una periferica HID-USB comporta la registrazione a pagamento di un proprio Vendor-ID e Product-ID che permettono il riconoscimento del dispositivo da parte dell’Host. A questo punto ci si è rivolti verso il protocollo di collegamento seriale RS232, più obsoleto, ma più semplice da utilizzare. L’uso del suddetto permette infatti di costituire una semplice linea di comunicazione a tre fili (ricezione, trasmissione e massa) tra l’host e il nostro device, sui quali vengono inviati e trasmessi i dati da e verso il microcontrollore. Prevedendo questo tipo di collegamento solo lo scambio di dati, non sarà necessario realizzare nessun tipo di driver per l’interpretazione dei dati. Gli svantaggi di questo tipo di connessione sono rappresentati soprattutto dall’ obsolescenza della porta seriale, praticamente scomparsa sui personal computer attuali e sui notebook. In realtà, sebbene la modalità di connessione sia quella descritta dall’RS232, una specifica del nostro dispositivo sarà senza dubbio quella di presentare caratteristiche wireless. Nell’ottica di realizzare infatti una work-station portatile collegata a diversi attuatori “intelligenti” capaci di azionare componenti domotici di vario tipo, disposti in punti diversi dell’abitazione, il circuito a base microcontrollore dovrà implementare un collegamento senza fili con l’host, costituente la stazione di comando vera e propria. Per rendere possibile tutto ciò, si è ricorsi ad un componente, l’EZL-90 della Sollae System, 56 reperibile facilmente in commercio, capace di convertire la RS232 in Wi-Fi Lan. Saranno quindi proprio questi due protocolli ad essere analizzati di seguito. In fase di test inoltre per collegare il dispositivo direttamente al calcolatore, si è ricorso ad un convertitore RS232-USB data l’assenza della porta seriale, soppiantata ormai dall’Universal Serial Bus. Siamo giunti quindi alla progettazione di un device sostanzialmente dotato di porta RS232 e pensato proprio per sostenere una connessione di questo tipo con l’host, ma che grazie all’aggiunta del modulo di conversione diventa a tutti gli effetti un modulo senza fili Wi-Fi. Di seguito si cercherà di analizzare i punti salienti di questi protocolli comunicativi. 3.2 RS-232 Il Recommended Standard 232 è costituito da una serie di protocolli meccanici, elettrici ed informatici che rendono possibile lo scambio di informazioni a bassa velocità tra dispositivi digitali di comunicazione per la connessione seriale cioè tra un terminale DTE (Data Terminal Equipment) e un DCE (Data Circuit-terminating Equipment) [10]. Questo protocollo nato nel 1969 definisce: • caratteristiche dei segnali elettrici utilizzati come i livelli di voltaggo, il timing e lo slew-rate, il massimo carico capacitivo; • le caratteristiche delle interfacce meccaniche, dei connettori e dei pin utilizzati; • la funzione di ogni circuito nelle interfacce di connessione. Lo standard non si occupa di definire invece elementi come: • la codifica dei caratteri trasmessi sulla linea (ASCII, EBCDIC); • il framing dei caratteri nello stream dei dati (bit per carattere, bit di start e di stop, parità ); • protocolli per l’individuazione degli errori o per la compressione dei dati; 57 • il bitrate per la trasmissione, anche se lo standard era pensato per bit rate inferiori a 20000 bits per secondo, moderni device arrivano a bit rate di 115.200 bit/s. I dettagli riguardanti la codifica utilizzata e il bit rate sono gestite dalla parte hardware della serial port, spesso è un singolo modulo integrato chiamato USART (Universal Synchronous Asynchronous Receiver & Trasmitter) che permette di trasformare il segnale parallelo proveniente dal processore in segnale seriale e viceversa in ricezione. Proprio la presenza di questo modulo nell’hardware del PIC ha rappresentato, come detto, un criterio importante di scelta del microcontrollore. In genere vengono gestite dall'hardware tutte le funzioni a basso livello necessarie (inserimento dei bit di start e di stop, generazione o riconoscimento del bit di parità, generazione di interrupt) e spesso è presente un buffer FIFO che permette di ricevere ed inviare dati anche quando la CPU è impegnata (per la descrizione del modulo usart resente nel PIC consultare la sezione relativa). Tra gli utilizzi della porta seriale, si possono citare: • connessione di terminali ad un calcolatore (tradizionalmente un mainframe, ma anche un PC); • connessione di periferiche: o la porta seriale è stata usata per collegare i mouse ai primi PC (sostituita prima dalla PS2, poi dall’USB); o stampante (soppiantato dalla porta parallela, e poi da USB e dalle stampanti di rete); o dispositivi specializzati, come ad esempio lettori di codici a barre e di tessere magnetiche (soppiantato da USB); • connessione a dispositivi embedded, ad esempio dispositivi di rete, per scopi di configurazione e monitoraggio. In questo utilizzo RS-232 è ancora ampiamente usato, anche se spesso è necessario dotarsi proprio di un adattatore seriale/USB per utilizzare come terminale un computer privo di porta seriale. Nel corso di questi 40 anni lo standard si è evoluto pur mantenendosi in larga parte invariato. L'evoluzione è riconoscibile dalla sigla, leggendo l'ultima lettera; l'ultima revisione è del 1997 ed è indicata come EIA RS-232f. Probabilmente la versione più 58 diffusa è la RS232c, del 1969, corrisponde alle specifiche europee CCITT. Pur essendo un protocollo piuttosto vecchio, attualmente la EIA RS-232 è ancora largamente utilizzata per la comunicazione a bassa velocità tra microcontrollori, dispositivi industriali ed altri circuiti relativamente semplici che non necessitano di particolare velocità; è invece praticamente scomparsa in ambito "desktop", ambito nel quale lo standard era nato per la comunicazione tra un computer ed un modem. Le caratteristiche di natura elettrica previste[11] dallo standard consentono di acquisire le poche informazioni necessarie a progettare dispositivi elettronici che comunicano con un PC attraverso questa porta. I segnali che vengono supportati dal dispositivo sono di tre tipi: • MARK: compresi tra -3 e -15 V; • SPACE: compresi tra +3 e +15 V; • INCERTEZZA: compresi tra -3 e +3 V; L'interfaccia EIA RS-232 ridotta (ovvero solo asincrona) utilizza un protocollo di trasmissione seriale di tipo asincrono. Seriale significa che i bit che costituiscono l’informazione sono trasmessi uno alla volta su di un solo "filo". Questo termine è in genere contrapposto a "parallelo": in questo caso i dati sono trasmessi contemporaneamente su più fili, per esempio 8, 16 o 32. Parlando astrattamente si potrebbe pensare che la trasmissione seriale sia intrinsecamente più lenta di quella parallela (su di un filo possono passare meno informazioni che su 16). In realtà, questo non è vero in assoluto, soprattutto a causa della difficoltà di controllare lo skew (disallineamento temporale tra i vari segnali) dei molti trasmettitori in un bus parallelo, e dipende dalle tecnologie adottate: per esempio in una fibra ottica, in un cavo ethernet, USB o FireWire (tutti standard seriali) le informazioni transitano ad una velocità paragonabile a quella di un bus PCI a 32 fili. Asincrono significa, in questo contesto, che i dati sono trasmessi, byte per byte, in modo anche non consecutivo e senza l'aggiunta di un segnale di clock, cioè di un segnale comune che permette di sincronizzare la trasmissione con la ricezione. Ovviamente, sia il trasmettitore che il ricevitore devono comunque essere dotati di un clock locale per poter interpretare i dati. La sincronizzazione dei due clock è necessaria, ed è fatta in corrispondenza della prima transizione sulla linea dei dati. 59 Le unità di misura della velocità di trasmissione sono essenzialmente due: il baud rate ed il bit per secondo (bps o, meno spesso, b/s), spesso trattate erroneamente come sinonimi. Il baud rate indica il numero di transizioni al secondo che avvengono sulla linea; il bps indica, come dice il nome, quanti bit al secondo sono trasmessi lungo la linea. Nel caso di trasmissione binaria (cioè è presente un livello alto ed uno basso) le due cose ovviamente coincidono numericamente, da cui la parziale equivalenza dei due termini. Nel caso di trasmissioni a più livelli, invece, è possibile trasmettere con una sola transizione più bit: se per esempio posso trasmettere otto diversi valori di tensione tra 0 ed 7 volt, con un solo valore di tensione invio tre bit (0 V = 000, 1 V = 001, 2 V = 010…) ed in questo caso una trasmissione a 1000 baud equivale ad una a 3000 bps. Nel caso dello standard EIA RS-232 i livelli utilizzati sono due quindi il baud rate coincide numericamente con il bps. Vediamo adesso da vicino come è fatto un segnale EIA ER-232. La cosa più semplice per descrivere un segnale EIA RS-232 è analizzare un esempio. Figura 3.1 Il segnale EIA RS232 Nell’immagine è visualizzato, in modo idealizzato, cosa appare collegando un oscilloscopio ad un filo su cui transita un segnale EIA RS-232 a 9600 bps del tipo 8n2 (più avanti verrà spiegata questa sigla) rappresentante il valore binario 01001011. 60 L’ampiezza del segnale è caratterizzata da un valore "alto" pari a circa +12 V ed un valore "basso" pari a –12 V. Da notare che, nello standard EIA RS-232 un segnale alto rappresenta lo zero logico ed uno basso l’uno, come indicato nel disegno, è quindi una codifica a logica negativa, ossia rovesciata rispetto al comune pensare. A volte un segnale alto (+12 V, cioè uno zero logico) è indicato come space ed uno basso (-12 V, uno logico) come mark. Tutte le transizioni appaiono in corrispondenza di multipli di 104us (pari ad 1/9600 cioè ciascun bit dura esattamente l'inverso del baud rate). La linea si trova inizialmente nello stato di riposo, alta (nessun dato in transito); la prima transizione da alto a basso indica l’inizio della trasmissione (inizia il "bit di start", lungo esattamente 104us). Segue il bit meno significativo (LSB), dopo altri 104 uS il secondo bit, e così via, per otto volte, fino al bit più significativo (MSB). Da notare che il byte è trasmesso "al contrario", cioè va letto da destra verso sinistra. Segue infine un periodo di riposo della linea di almeno 208us, cioè due bit di stop e quindi (eventualmente) inizia un nuovo pacchetto di bit. Le varianti possibili sono le seguenti: Se la trasmissione è più veloce o più lenta, la distanza tra i fronti varia di conseguenza (p.e. a 1200 bps le transizioni avvengono a multipli di 0,833 ms, pari a 1/1200). Invece di trasmettere 8 bit, ne posso trasmettere 5, 6, 7 o anche 9 (ma quest’ultima possibilità non è prevista dalle porte seriali dei normali PC). Alla fine è possibile aggiungere un bit di parità per l’error check. Alla fine la linea rimane nello stato di riposo per almeno 1, 1.5 o 2 bit; notare che, se non c’è più nulla da trasmettere, il "riposo" è molto più lungo, ovviamente. Molti sistemi non possono utilizzare 1.5 bit di stop che venivano usati dalle telescriventi a 110 baud di velocità perché permetteva il CR/LF (ritorno carrello/salto linea). In genere, nei personal computer, il formato del pacchetto ricetrasmesso è indicato da una sigla composta da numeri e cifre, per esempio 8n1 e 7e2: La prima cifra indica quanti bit di dati sono trasmessi (nei due esempi rispettivamente 8 e 7); la prima lettera , invece, si riferisce al tipo di parità (rispettivamente nessuna ed even-parity, cioè parita pari); la seconda cifra è il numero di bit di stop (rispettivamente 1 e 2). Tenendo conto che esiste sempre un solo bit di start, un singolo blocco di bit è 61 quindi, per i due esempi riportati, costituito rispettivamente da 10 (1+8+0+1) e 11 (1+7+1+2) bit. Da notare che di questi bit solo 8 e, rispettivamente, 7 sono effettivamente utili. Nel tipo di trasmissione utilizzato nel lavoro, ogni pacchetto inviato e ricevuto dall’host consta di 8 bit di dati (più uno di start all’inizio sempre presente), nessun bit di parità, e 1 bit di stop, cioè proprio una comunicazione 8n1. La velocità di trasmissione è invece fissata ad un baud rate di 9600, cioè ci saranno 9600 cambiamenti di fronte al secondo. Lo standard originale prevede una velocità da 75baud a 19200baud. Uno standard successivo (RS-562) ha portato il limite a 64Kbps lasciando gli altri parametri elettrici praticamente invariati e rendendo quindi i due standard compatibili a bassa velocità. Nei normali PC le cosiddette interfacce seriali RS-232 arrivano in genere almeno a 115Kbps o anche più: pur essendo formalmente al di fuori di ogni standard ufficiale non si hanno particolari problemi di interconnessione. Ovviamente sia trasmettitore che ricevitore devono accordarsi sul modo di trasmettere i dati prima di iniziare la trasmissione. È importante garantire il rigoroso rispetto della durata dei singoli bit: infatti non è presente alcun segnale di clock comune a trasmettitore e ricevitore e l'unico elemento di sincronizzazione è dato dal fronte di discesa del bit di start. Come linea guida occorre considerare che il campionamento in ricezione è effettuato di norma al centro di ciascun bit: l'errore massimo ammesso è quindi, teoricamente, pari alla durata di mezzo bit (circa il 5% della frequenza di clock, considerando che anche il decimo bit deve essere correttamente sincronizzato). Naturalmente questo limite non tiene conto della possibile difficoltà di riconoscere con precisione il fronte del bit di start (soprattutto su grandi distanze ed in ambiente rumoroso) e della presenza di interferenze intersimboliche tra bit adiacenti: per questo spesso si consiglia caldamente di usare un clock con una precisione migliore dell'1% imponendo di fatto l'uso di oscillatori a quarzo. Oltre ai bit dei dati (in numero variabile tra 5 e 9) viene a volte inserito un bit di parità (opzionale), per verificare la correttezza del dato ricevuto. Esistono cinque tipi di parità: None (come nel progetto): nessun tipo di parità, cioè nessun bit aggiunto; Pari (even): il numero di mark (incluso il bit di parità) è sempre pari; Dispari (odd): il numero di mark (incluso il bit di parità) è sempre dispari; Mark: il bit di parità vale sempre mark; Space: il bit di parità vale sempre space. 62 Il bit di parità può essere LRC o VRC , cioè la funzione di parità, un XOR di a bit della stringa dati incluso il bit di parità stesso, può essere eseguita sia lateralmente che verticalmente sui dati inviati, ottenendo una stringa dati di parità finale con il relativo bit di parità : il LRC di tale stringa dati di controllo deve combinarsi secondo le parità precedentemente eseguite verticalmente che sul blocco VRC-dati creato. Per quanto riguarda i parametri elettrici, la tensione di uscita ad un trasmettitore EIA RS-232 deve essere compresa in valore assoluto tra 5 V e 25 V (quest'ultimo valore ridotto a 13 V in alcune revisioni dello standard). A volte le tensioni in uscita sono intenzionalmente diminuite a +/- 6 V anziché 12 V per permettere minori emissioni EM, peraltro sempre critiche, e favorire maggiori velocità di trasmissione. Il ricevitore deve funzionare correttamente con tensioni di ingresso comprese, sempre in modulo, tra i 3 V ed i 25 V. Molti ricevitori commerciali considerano semplicemente una tensione di soglia al valore di +2 V (sopra viene riconosciuto un segnale alto, sotto uno basso) anche se ciò non è pienamente aderente alla norme. È però utile per effettuare una trasmissione RS232 con livelli TTL come quelli prodotti proprio dalla logica del nostro PIC. L’impedenza di uscita del trasmettitore deve in ogni situazione essere maggiore di 300 ohm; l’impedenza di ingresso deve essere compresa tra i 3 ed i 7 kOHM, anche a dispositivo spento. La corrente prelevabile in uscita mantenendo i corretti valori logici deve essere di almeno di 1.6 mA (potrebbe però essere maggiore, anche di un ordine di grandezza) e nel caso di corto circuito deve essere minore di 100 mA. Infine lo slow-rate (cioè la pendenza del grafico del segnale nel passare da 1 a 0 o viceversa) deve essere minore di 30 V/us per evitare eccessive emissioni elettromagnetiche. Un aspetto importante, di cui ci si è dovuti occupare durante la progettazione, è rappresentato dal collegamento di una porta TTL o CMOS alla EIA RS-232. In genere i segnali utilizzati dai sistemi digitali variano tra 0 e 5 V e non sono quindi direttamente compatibili con la standard EIA RS-232. In commercio esistono appositi traslatori di livello che hanno il compito di fornire sia in trasmissione che in ricezione, gli opportuni livelli pur non modificando la forma del segnale trasmesso. Nel nostro caso il traslatore di livello scelto è un integrato della 63 MAXIM, il MAX232 (figura) di cui ci occuperemo nelle sezioni seguenti, dedicate alla realizzazione circuitale. Figura 3.2 Il MAX232 Il MAX232 è un circuito integrato che permette il collegamento tra logica TTL o CMOS a 5 V e le tensioni EIA RS-232, partendo solo da un'alimentazione a 5 V. Analizzando infine i connettori, sul PC ne sono disponibili due tipi: DB9 (nove pin) e DB25 (25 pin, il connettore originale e presente solo sui PC più vecchi); ambedue i connettori sono maschi e praticamente identici dal punto di vista funzionale anche se non coincidente con quello proposto dallo standard ufficiale (Inversione dei connettori maschio / femmina che nello standard sono femmina). Figura 3.3 Connettore DB9 Male 64 Di seguito, la tabella con indicati i nomi dei segnali, il numero dei pin e la direzione del segnale (O = uscita dal PC). Sigla 25pin 9pin In/Out Nome TxD 2 3 O Dati trasmessi RxD 3 2 I Dati ricevuti RTS 4 7 O Request To Send CTS 5 8 I Clear To Send DTR 20 4 O Data Terminal Ready DSR 6 6 I Data Set Ready RI 9 I Ring Indicator 1 I Data Carrier Detect O Trasmitting Clock 22 DCD 8 TC 15 GND 7 5 1 Massa Schematura Ora, la prima domanda che sovviene è: perché tanti fili? L'interfaccia EIA RS-232 è nata con l'unico scopo di connettersi ad un Modem e quindi ha tutti i controlli per gestire questa apparecchiatura. Tuttavia l'interfaccia viene spesso usata per connettere direttamente fra di loro due PC e, in teoria per ricevere e trasmettere un segnale in modo asincrono bastano tre fili: ricezione, trasmissione e massa (sono questi i collegamenti di cui ci siamo preoccupati). Spesso, se si usa un programma di connessione che non controlla gli altri segnali d'interfaccia, lo è anche in pratica. Gli altri segnali (spesso opzionali, ma dipende dall’applicazione) servono per il cosiddetto handshake tra PC e periferica (o tra PC e PC) cioè per sincronizzare in hardware la comunicazione. Sono presenti due coppie di segnali: DTR/DSR: quando la porta RS232 è attivata per la prima volta dal programma, pone alto DTR. La periferica risponde ponendo alto DSR. RTS/CTS: quando il PC vuole iniziare la trasmissione pone RTS alto, la periferica risponde quando pronta ponendo CTS alto. Per interrompere la trasmissione la periferica pone CTS basso. 65 La corretta configurazione di un cavo incrociato null modem (che fa quindi la funzione dei due Modem che dovrebbero interporsi fra i due PC) è la seguente: Connettore A --------------- Connettore B TX -------------------------> RX RX <------------------------- TX SG <-----------------------> SG DTR--->DSR DTR---->DSR RTS-->CTS------------>DCD DCD<-----------CTS<---RTS Un uso alternativo dei pin RTS e DTR è l'utilizzo, come fonte di alimentazione, del dispositivo collegato alla porta seriale stessa. L'esempio classico è il mouse seriale, ma nulla impedisce di collegare un microcontrollore generico o qualche altro circuito. Unico ed importante limite è la corrente erogata, visto che questi pin non sono pensati per questo uso: è opportuno limitarsi ad una decina di mA . Attenzione che è una sorgente non regolata e non protetta. Altri segnali che citiamo a titolo “storico” perché attualmente sorpassati tecnologicamente: SQ Signal Quality, Qualità del segnale: proveniente dal DCE indica che il segnale in arrivo è buono o non buono. In questo secondo caso è un "invito" ad abbassare la velocità di trasmissione/ricezione. STD Secondary Trasmit Data, Dati Trasmessi sul canale secondario di servizio; era un 75 bit/sec a cui faceva capo una telescrivente o simile terminale con cui gli operatori comunicavano. SRD Secondary Recive Data, Dati Ricevuti sul canale di servizio. SRTS Secondary Request To Send, RTS del canale di servizio. SCTS Secondary Clear To Send, CTS del canale di servizio. Nel nostro caso non serve nessuno di questi pin. Come abbiamo detto, per realizzare una connessione funzionale bastano tre fili e quindi tre pin: RxD, TxD e GND. 66 In fase di test inoltre il collegamento tra il dispositivo a microcontrollore e il personal computer è stato gestito grazie al tool di Windows Hyperterminal, che gestisce proprio connessioni di questo tipo e collegamenti via modem. 3.3 Il protocollo Wi-Fi Una rete basata su cavi non è sempre la soluzione più pratica, spesso una connettività wireless risolve i problemi legati alla mobilità ed alla flessibilità che richiediamo al nostro accesso ad internet o alle risorse condivise da altri personal computer e server. Un altro fattore che gioca a favore di questo tipo di connessione è quello economico: dove non esistono cablaggi è decisamente meno dispendioso pensare ad una rete wireless piuttosto che ad una tradizionale. La tipologia di connessione di cui parleremo in queste righe è definita Wi-Fi, abbreviazione di Wireless Fidelity, un termine che indica dispositivi capaci di collegarsi a reti locali senza fili (WLAN) [12] basate sul protocollo IEEE 802.11. Questa famiglia di protocolli include tre protocolli dedicati alla trasmissione delle informazioni (a, b, g); la sicurezza è stata inclusa in uno standard a parte, 802.11i. Gli altri standard della famiglia (c, d, e, f, h, …) riguardano estensioni dei servizi base e miglioramenti di servizi già disponibili. Il primo protocollo largamente diffuso è stato il b; in seguito si sono diffusi il protocollo a e soprattutto il protocollo g. In particolare, quello utilizzato nel presente lavoro, è il protocollo Wi-Fi 802.11b, uno standard di trasmissione che funziona alle frequenze di 2,4Ghz ad una velocità di 11Mbps. In pratica, un networking wireless Wi-Fi non è nient’altro che una rete ethernet che trasporta i dati nell’etere, attraverso muri, soffitti ed anche strutture in cemento, dal concentratore ai p.c., utilizzando una trasmissione in radiofrequenza in luogo del tradizionale cavo. Inizialmente, nei primi anni '90 lo standard IEEE 802.11 indicava le specifiche fisiche per lo sviluppo di una rete LAN wireless, ovvero una rete informatica a onde radio. Tale standard consentiva velocità fino a 2 Mbps usufruendo della tecnologia basata ,come già detto, su onde radio a 2.4 GHz di frequenza o direttamente su raggi infrarossi. Proprio la limitata velocità e la scarsissima diffusione di apparecchi mobili (non era ancora in atto il boom della telefonia mobile) bloccarono 67 sul nascere lo sviluppo e la diffusione di questo stardard. Nel 1997 con l'evoluzione tecnologica venne sviluppato un nuovo standard denominato, come già accennato, IEEE 802.11b ( Wi-Fi ) compatibile e molto simile al precedente, ma con una trasmissione fino a 11 Mbit/s. Nel 1999 le principali aziende del settore fondarono il WECA (Wireless Ethernet Compatibility Alliance) al fine di ottenere una serie di standard comuni a tutti i dispositivi, permettendo cosi la massima interoperabilità dei sistemi wireless. Il protocollo IEEE 802.11b consente : • un efficace adattamento della velocità di trasmissione con un range da 5.5 a 11 mbps a seconda del canale utilizzato; • una velocità di trasferimento fino a 11 Mbps; • un automatismo nella assegnazione della banda da occupare e dell'access point di ingresso a seconda del traffico. La rete a onde radio viene gestita attraverso alcune dispositivi denominati Access Point (AP) e Wireless terminal. L'access point è in sostanza il gateway di connessione, ovvero il punto di accesso alla rete wireless (quello che nella vita di tutti i giorni chiamiamo router, in sostanza). Entro il suo raggio di azione gli utenti possono quindi collegarsi a tutti gli apparecchi collegati nella stessa rete in una sorta di p2p a onde radio, salvo limitazioni di accesso decise a livello software oppure collegarsi ad unità centrali come in una normale rete Ethernet. In un sistema wireless la trasmissione avviene,come abbiamo già detto, principalmente via radiofrequenza (RF), nella banda ISM (Industrial Scientific Medical) attorno ai 2,45 Ghz utilizzando tecniche spread spectrum per ottenere una maggior robustezza nei confronti dei segnali interferenti, o via infrarosso (IR). In questo tipo di trasmissione vengono infatti utilizzate varie tecniche tra cui le principali sono: infrarosso , laser, via radio .Nella trasmissione via radio due sono le tecniche principalmente impiegate: • trasmissione banda singola che utilizza tutta l'ampiezza di banda disponibile; • trasmissione a divisione di spettro, con trasmissione contemporanea di più segnali con lo spettro suddiviso in più canali (Spread Spectrum appunto) 68 3.4 Il convertitore RS232 Wi-Fi, l’EZL-80 Come abbiamo detto, il nostro dispositivo è fondamentalmente di tipo seriale; è stato dotato cioè di una comune porta DB9, tramite la quale viene messo in comunicazione con l’host. Per rendere possibile una trasmissione senza-fili di tipo Wi-Fi è stato aggiunto un modulo apposito che si occupa della conversione tra i due protocolli di comunicazione. Il componente in questione è l’EZL-80c[13] prodotto dalla Sollae System e commercializzato in Italia da Area SX. La scelta di non realizzare direttamente un oggetto Wi-Fi, ma seriale, adattato in un secondo momento alla comunicazione senza fili tramite l’aggiunta del modulo indicato, proviene da diverse osservazioni fatte al momento della progettazione: • in primo luogo, mentre il PIC dispone di tutto l’hardware necessario per la realizzazione di un collegamento seriale, rendendone agevole l’implementazione, non è assolutamente predisposto per la comunicazione senza fili; • la realizzazione di un comunicatore Wi-Fi si rivelerebbe senza dubbio molto complicata anche per la difficoltà nel reperire gli integrati appositi; • questi moduli presenti in commercio hanno costi molto accessibili (si attestano sui 30-40 euro), e una notevole semplicità di utilizzo incrementata dal software specifico per il setting fornito dalla casa produttrice; • l’obiettivo di questo studio non è quello di realizzare un dispositivo di conversione del genere. Per questi motivi ci si è preoccupati di costruire un adeguato sistema comunicativo di tipo seriale, assemblandolo in un secondo momento al dispositivo Sollae, così da trasformarlo in un oggetto wireless. Vediamo adesso da vicino questo convertitore. La serie ezTCP, che comprende il modulo utilizzato, è composta da dispositivi che attuano la conversione generale serial-to-TCP/IP. Questa conversione permette a qualsiasi dispositivo seriale di comunicare in rete, utilizzando un diverso protocollo di trasmissione a seconda del tipo di ezTCP. Di seguito riportiamo un semplice schema di funzionamento del dispositivo generico. 69 Figura 3.4 Convertitore EZL, uno schema di principio In particolare, come spiegheremo in modo più dettagliato più avanti in questa sezione, il tipo di connessione attuabile potrà essere di tipo network, utilizzando un AP (Access Point), o di tipo Ad-Hoc o peer-to-peer, nella quale non è presente l’access point tra il device e l’host. Per quanto riguarda il modulo EZL-80 utilizzato, è caratterizzato da dimensioni ridotte e permette la comunicazione TCP/IP attraverso il protocollo IEEE802.11b (Wi-Fi), processando i dati provenienti dal collegamento seriale e inviandoli poi sulla wireless LAN. Figura 3.5 Modulo EZL80c. Top side, Bottom Side 70 Come si vede chiaramente in figura, il convertitore così definito non presenta prese d’alimentazione e porte seriali, queste dovranno essere hardwarizzate essendo questo un modulo embedded a tutti gli effetti. Per facilitare la realizzazione prototipale e le fasi di collaudo perciò, il modulo è stato assemblato assieme al kit di sviluppo chiamato EZL90[14], completo di cablaggio per l’alimentazione e di porta seriale. Figura 3.6 Il modulo EZL 90 Quindi il nostro modulo completo sarà formato dall’EZL-80, che è costituito, come si vede da figura, dallo slot per CARD Wi-Fi, dall’insieme dei supporti hardware per l’alimentazione (a 5V) per la connessione RS-232, dai led luminosi per il controllo del corretto funzionamento del dispositivo come led luminosi e dal tasto di reset presente sul modulo EZL-90. Vediamo adesso da vicino quali sono le caratteristiche e le funzionalità dell’hardware preso in analisi. Per prima cosa, il modulo ha 16 pin, ognuno dei quali ha un nome e una funzione indicata nella tabella seguente. 71 Figura 3.7 EZL 90. Pedinatura Per quanto riguarda il controllo di flusso, utilizzato in caso di elevato flusso dati in trasmissione/ricezione, la porta seriale dell’ EZL implementa il protocollo RTR/CTS (ready to receive/clear to send). Il collegamento di questi pin tra ricevitore e trasmettitore permette di salvaguardare i dati in caso di overflow sulla linea trasmissiva. Sebbene ciò costituisca una funzionalità molto importante in alcuni casi, nello specifico questi sistemi non verranno presi in considerazione, data la possibilità di controllare il PIC tramite la trasmissione e la ricezione di un singolo carattere (a questo proposito consultare l’apposita sezione). Quindi, in caso di mancato utilizzo di controllo di flusso, per realizzare un collegamento efficace tra l’EZL e il microcontrollore, è sufficiente connettere i pin RXD TXD e GND, in aggiunta ovviamente ad un opportuno collegamento del pin 1 con l’alimentazione che dovrà fornire i 3.3V richiesti. Avevamo già accennato all’esistenza di due diverse modalità tramite le quali è possibile connettere in rete il convertitore, l’Infrastructure e la connessione Ad-Hoc. In modalità infrastruttura è permessa la comunicazione tra più device wireless e l’host, tramite un Access Point (tipicamente un router wireless), che smista la comunicazione stabilita tra calcolatore e applicativi senza fili. 72 Figura 3.8 Configurazione Infrastructure Proprio una connessione di questo tipo permetterà alla nostra powerstation di controllare gli applicativi domotici installati nell’abitazione dell’utente diversamente abile, tramite l’interfaccia accessibile del nostro sistema. Il secondo tipo di connessione, denominato Ad-Hoc o peer-to-peer, non necessita dell’interposizione tra l’host ed il device wireless di un router dedicato alla gestione della comunicazione. In questo caso infatti c’è una corrispondenza univoca a livello comunicativo tra il calcolatore ed il dispositivo senza fili. Le prime fasi realizzative hanno sfruttato proprio questo livello di connettività, permettendo lo scambio dati tra il dispositivo assemblato al modulo EZL e il calcolatore fornito di interfaccia apposita lato utente. 73 Figura 3.9 Configurazione con collegamento Ad hoc Lo schema sopra evidenzia come in questo tipo di configurazione non sia necessario utilizzare alcun Access Point, l’unica specifica richiesta è quella di utilizzare, lato utente, un personal computer fornito di connettività Wi-Fi, per realizzareil ponte radio necessario. Per effettuare setting di questo e altro in genere, assieme al convertitore viene fornito un pacchetto software dedicato di facile utilizzo che consta di due programmi di setup: ezSerialConfig e ezConfig, utilizzati rispettivamente per settare il dispositivo via seriale e via wireless LAN. La prima operazione necessaria, consiste nel collegare al personal computer il convertitore tramite un cavo seriale di tipo null-modem (questo cavo, presentando invertite le linee di trasmissione e di ricezione di un canale, permette la connessione tra due dispositivi DTE) e di utilizzare il sw ezSerialConfig avendo cura di rimuovere la card Wi-Fi dall’apposito socket. Questo programma permette di impostare quei parametri essenziali per posizionare il dispositivo in rete, l’indirizzo IP da assegnare al convertitore e i setting relativi alla porta seriale come il baud rate utilizzato dalla trasmissione la presenza di bit di parità e di stop e del controllo di flusso. 74 Figura 3.10 ezSerial Config. Setup e settings Vediamo più nel dettaglio quali sono le impostazioni da modificare in questa fase: • I parametri propri della connessione RS232 vengono impostati con questo software, bisognerà perciò associare un opportuno baudrate (9600 nello specifico), il numero di bit costituenti il singolo pacchetto, la presenza del bit di stop e di un eventuale controllo di flusso. • È possibile determinare a questo punto, se la connessione sarà di tipo infrastructure o ad-hoc. • Bisogna assegnare un identificativo di rete al dispositivo master (SSID) se si utilizza la connessione punto-punto, oppure l’identificativo va associato all’AP se la configurazione selezionata ne prevede la presenza. • Va selezionato il canale sul quale avverrà la comunicazione. • Se si desidera, si può includere una chiave per proteggere la connessione agendo nel campo WEP; Per quanto riguarda i parametri relativi al TCP/IP sono contenuti nella sezione MAC; sarà quindi necessario associare al convertitore un indirizzo IP e una Subnet Mask, necessaria per indicare che l’indirizzo del convertitore e dell’host appartengono alla stessa sottoclasse. 75 In particolare, si è mantenuto l’indirizzo IP di default di valore 10.1.0.1 mentre i byte componenti la subnet-mask avranno i seguenti valori 255.0.0.0. L’operazione di settaggio deve concludersi con il salvataggio della impostazioni all’interno del convertitore, che alla prossima connessione manterrà le caratteristiche selezionate, tale operazione è realizzata dal tasto Write. Il secondo software fornito dalla casa madre viene utilizzato soprattutto per testare le funzionalità dell’EZL. Figura 3.11 ezConfig, setting tramite WiFi 76 Figura 3.12 Funzione test Alimentando l’ezTCP, una volta inserita la CF card (che costituisce sostanzialmente l’antenna del convertitore), tramite l’ezConfig si entra nell’area test delle capacità trasmissive del nostro convertitore tramite il tasto TEST, che permette di accedere ad un’altra maschera con la quale è possibile inviare pacchetti dati e riceverne, così da valutare l’efficienza della comunicazione seriale. Per quanto riguarda le modalità di connessione, l’EZL ne supporta 4 diverse: • T2S, TCP to serial; • ATC, AT Command; • COD, Connect On Demand; • U2S, UDP to Serial. Nella T2S, l’ezTCP funziona da server, ovvero aspetta di ricevere una richiesta di connessione da remoto e la accetta quando questa proviene dalla local port predefinita (selezionata tramite i precedenti software di setup), stabilendo la comunicazione TCP. A questo punto viene attuato il processamento secondo TCP/IP sui dati provenienti dalla 77 porta seriale, trasmessi poi all’host remoto. Riportiamo lo schema di funzionamento di questo tipo di connessione: Figura 3.13 Connessione T2S Perciò, quando la richiesta di connessione viene accettata dal serial-device, che funziona in questo caso da server, inizia la comunicazione tra le due parti (metà inferiore dello schema). In modalità ATC, l’utente può controllare l’ezTCP tramite i comandi AT, come si fa nel caso di un comune modem. Sia il server che il client possono essere in questo caso configurati, tramite ad esempio l’assegnazione dell’address IP. 78 Figura 3.13 ATC, attiva e passiva Nel modo COD, l’ezTCP funziona da client: è lui quindi che, nel momento in cui arrivano i dati dal dispositivo seriale collegato, “richiede” la connessione all’host remoto che questa volta fa le veci del server. Se quest’ultimo accetta la connessione, viene stabilito a questo punto il protocollo TCP/IP Figura 3.14 Connessione COD 79 Per ultimo analizziamo il modo U2S, nel quale il protocollo di comunicazione utilizzato è l’UDP, che gestisce, come noto, la trasmissione di pacchetti di dati, a differenza del TCP non c’è però il controllo dell’ordine dei dati, essendo in questo caso privilegiata la velocità di trasmissione. Figura 3.15 Connsessione U2S Alla luce di questa breve descrizione, diciamo che la modalità utilizzata in questo studio è stata sostanzialmente la prima, cioè TCP to Serial, nella quale l’host (cioè l’utente) richiede la connessione all’EZL sulla local port (mantenuta a valore di default di 1470). Il comportamento finale della rete sarà perciò quella di una connessione punto-punto o peer-to-peer, scelta per gestire un singolo dispositivo seriale che si comporterà da server, attendendo la richiesta di comunicazione da parte dell’host. 80 4. IL CIRCUITO DI CONTROLLO 4.1 Perché un device RS-232 Figura 4.1 Il circuito di controllo In questo capitolo, dopo aver descritto e compreso come funzionano i componenti principali, ci occuperemo della vera e propria realizzazione hardware del prototipo e 81 vedremo quali sono state le direttive di progetto seguite, l’assemblaggio complessivo del prototipo e le relative fasi di collaudo. La fase di progettazione hardware e di realizzazione software, legata alla redazione del firmware descritto precedentemente, devono necessariamente procedere approssimativamente di pari passo: le performance richieste all’hardware, basato in questo caso soprattutto sulla logica programmabile, dipendono necessariamente dalle funzioni implementate dal microcontrollore che provengono a loro volta dal programma che il PIC porta dentro la program memory dedicata. Per questo motivo la progettazione del dispositivo fisico ha affiancato di pari passo lo sviluppo del firmware. Un approccio iniziale prevedeva la realizzazione di un dispositivo che potesse implementare un collegamento basato sull’Universal Serial Bus con l’host. Utilizzare un protocollo del genere presentava, in prima analisi, vantaggi derivanti dalla elevata portabilità dell’USB e dal grado di diffusione che questa tecnologia ha raggiunto negli ultimi anni. In aggiunta a questo, il microcontrollore, basato su logica TTL (basata cioè sull’utilizzo di transistori a giunzione bipolare sia per la realizzazione di porte logiche che dell’amplificazione), utilizza tensioni di 5V per l’alimentazione e per i segnali di input/output, gli stessi livelli di tensione utilizzati dall’Universal Serial Bus, facilitando in questo modo un’eventuale connessione. Mentre, quindi, un’eventuale realizzazione hardware caratterizzata da un dispositivo dotato di connessione di questo tipo con l’host, non prevederebbe difficoltà, non si può affermare lo stesso per quanto riguarda la redazione del firmware, concepito allo scopo di permette al microcontrollore la comunicazione bidirezionale con host e attuatore. In questo caso la complicazione nasce dal modo in cui la periferica USB e l’host vengono collegati dall’Universal Serial Bus. Ogni qual volta si collega un dispositivo al personal computer tramite porta USB, com’è noto, il sistema operativo ricerca un apposito programma associato al particolare dispositivo, un cosiddetto driver, che permetterà all’OS di interpretare correttamente i dati provenienti dal device USB e di stabilire con esso una comunicazione secondo gli standard dettati dal protocollo usato. La scrittura di un driver d’altro canto risulta non banale (e di scarso interesse nel presente lavoro) soprattutto per sistemi operativi come Windows, nei quali il programma deve essere in grado di gestire l’accesso dei singoli processi alla periferica. Per questo motivo si è deciso di tentare il bypass di questo problema tramite la realizzazione di un dispositivo appartenente alla sottoclasse degli HID (Human Interface Device). Un comune mouse moderno, piuttosto che una tastiera, 82 appartengono proprio a questa classe, e presentano la peculiarità di non richiedere la redazione di driver dedicato, o meglio, il driver generico utilizzato per colloquiare con questi device è contenuto all’interno dello stesso OS. Una volta collegati, vengono come noto riconosciuti automaticamente dall’host che stabilisce subito la comunicazione con questi dispositivi. Redigere quindi il firmware in modo tale da far “passare” il device progettato da HID device potrebbe aiutare in prima analisi ad aggirare il problema del driver. In realtà, dopo un’analisi approfondita della questione e della tecnologia e in modo particolare proprio della sottoclasse di Human Interface, (a questo riguardo è utile consultare il testo USB Designed by examples di John Hyde[8]), un approccio del genere si è rivelato al pari inapplicabile. Il motivo risiede nella necessita di registrare (a pagamento) presso la USB.org[7] un dispositivo di tipo HID, ricevendo in questo modo un VendorID e un ProductID. Sono questi due parametri che vengono utilizzati dall’OS per identificare il device al momento del collegamento della periferica e del suo eventuale riconoscimento come Human Interface Device (questi due parametri sono riscontrabili tramite la gestione dell’Hardware dal Pannello di Controllo di Windows). Per tutti questi motivi, la primitiva idea di affidarsi alla tecnologia USB per stabilire il collegamento tra host e device realizzato è stata abbandonata, in favore del protocollo RS-232 analizzato nelle precedenti sezioni. Perciò il primo pensiero è stato quello di approntare il PIC per un collegamento seriale di questo tipo. Mentre gli aspetti del software, o meglio, del firmware, sono stati già ampiamente analizzati, in questo capitolo prenderemo in esame, come detto, gli aspetti strettamente legati alla progettazione e realizzazione hardware. Il primo aspetto preso in considerazione sarà perciò il tipo di componenti utilizzati per rendere possibile la comunicazione seriale tra microcontrollore e personal computer. 83 4.2 Il circuito di connessione RS-232 Il primo problema che un tipo di connessione del genere porta con se, è rappresentato dai livelli di tensione utilizzati dal protocollo in esame per la comunicazione sulla linea. A questo proposito, per prima cosa è bene ricordare che non è possibile alimentare una periferica tramite la stessa connessione RS232, come a volte avviene con l’USB, bisognerà perciò prevedere, come è stato fatto per l’appunto nel progetto, uno stadio di alimentazione dedicato, descritto più avanti in questa stessa sezione. In seconda istanza, si è già parlato dei livelli di potenziale utilizzati per la trasmissione dei dati su una siffatta linea (si veda a questo proposito il capitolo sui protocolli di comunicazione) che sono caratterizzati, di solito, da livelli di voltaggio compresi in valore assoluto tra i 3V e i 25V a seconda poi della revisione dello standard presi in considerazione. Nasce perciò la questione di come collegare una porta CMOS o, come in questo caso, TTL alla EIA RS-232, dato che i segnali utilizzati da queste logiche hanno tensioni che variano tra 0 e 5V, e non sono perciò direttamente compatibili con lo standard. Per fornire i giusti livelli, sia in ricezione che in trasmissione, vengono utilizzati degli appositi integrati in grado di rendere compatibili i segnali, pur non modificandone la forma e quindi il contenuto informativo. Sul mercato è disponibile una vasta gamma di integrati del genere alcuni dei quali necessitano sia di alimentazione logica a 5V che di alimentazione duale a +/-12V (MC1489 della Motorola). Questo integrato, come praticamente tutti i circuiti di questo tipo, contiene un inverter per ciascun canale e quindi nel segnale in uscita o in ingresso uno zero logico appare come 0 volt. L’uso di questi integrati è semplice, ma non è sempre attuabile a causa della necessità di disporre di tre alimentazioni, condizione non disponibile per l’applicazione in studio. 84 Figura 4.2 Il MAX232 Per questo motivo la scelta dell’integrato è ricaduta su un componente capace di garantire maggiori performance, sotto questo punto di vista, ovvero il già citato MAX232 della Maxim[15] (figura 4.2). Il suddetto IC (Integrate Circuit) permette appunto il collegamento tra la logica TTL a 5V e le tensioni EIA RS-232, partendo da un’unica alimentazione anch’essa a 5V. Come vedremo questo garantirà non poche semplificazioni al momento della realizzazione dello stadio d’alimentazione. In pratica, per ottenere la tensione positiva e negativa, necessaria per il funzionamento dell’integrato è utilizzata una configurazione a “pompa di carica”, costituita da circuiti interni all’integrato e 5 condensatori esterni di circa 1uF. I valori effettivi delle capacità dipendono dal tipo di integrato e dalla relativa frequenza di commutazione. La stazione ricevente del MAX232 è costituita da due porte invertenti che accettano in ingresso una tensione di +/- 12 V (o altra tensione compatibile allo standard EIA RS-232) ed in uscita hanno un segnale TTL compatibile. La sezione trasmittente ha due driver invertenti con in ingresso TTL compatibile e capaci di erogare a vuoto una tensione di poco meno di +/- 10 V, compatibile con lo standard EIA RS-232. Per ricavare le tensioni positive e negative necessarie per garantire i livelli richiesti dalla RS232 è pratica comune utilizzare un duplicatore ed un invertitore di tensione a pompa di carica. 85 . Figura 4.3 Meccanismo di funzionamento basato su capacità Le figure A e B mostrano come viene ottenuto il raddoppio della tensione. Un’immagine che rende l'idea è quella di un contenitore (C2) che preleva acqua da una fonte e la riversa in un secondo contenitore (C1) posto a maggiore altezza. Più in dettaglio: • Inizialmente il condensatore C2 viene connesso tra massa e Vcc; quindi la corrente (in blu) carica C2 alla tensione di alimentazione (in giallo). Quindi Vc2 = Vcc; • C2 viene successivamente connesso tra Vcc ed un secondo condensatore C1; la tensione ai capi di C1 deve essere uguale alla somma di Vcc e Vc2 e quindi C2 si scarica verso C1, che aumenta la propria tensione rispetto a massa • Il processo è ripetuto fino a quando la tensione ai capi di C1 è uguale a 2Vcc: in questo caso infatti C2 non si può più scaricare. Da notare che, nel funzionamento normale, il processo non può mai interrompersi in quanto il carico collegato a C1, non disegnato, assorbe corrente e quindi tende a scaricare C2 stesso. Analogamente le figure C e D mostrano l’inversione di tensione: • Inizialmente C2 è caricata alla tensione di alimentazione (magari, come nel disegno da 2Vcc, ricavata con il circuito precedente) • Quindi C2 è connesso tra massa e C1 avendo cura di invertire le polarità. In questo modo C1 si carica a –2Vcc; 86 Il limite dei circuiti a pompa di carica è la limitata quantità di corrente disponibile: infatti se prelevo da C1 corrente, questo tende a scaricarsi, facendo scendere la tensione; la corrente generata da un circuito integrato tipo MAX232 è generalmente tutta utilizzata per il solo funzionamento del driver e quindi non è disponibile per altri circuiti. Ecco uno schema estrapolato dal datasheet del componente, nel quale sono riportati i collegamenti da realizzare per l’utilizzo desiderato. Figura 4.4 Pin e collegamenti del MAX232 Per riassumere quindi è necessario, nel caso in cui si desideri far comunicare un microcontrollore a logica TTL tramite uno standard RS232, interporre un integrato del tipo descritto per ottenere un adeguato adattamento dei livelli di tensione, per ulteriori specificazioni sull’integrato della Maxim rimandiamo comunque al datasheet della casa costruttrice. Di seguito, riportiamo lo schema dei collegamenti effettuati (il seguente, come tutti gli altri schemi elettronici presenti in questo lavoro sono stati redatti grazie al cad apposito Orcad), al fine di improntare il desiderato tipo di connessione del PIC. I condensatori collegati al MAX232 sono stati dimensionati in base alle specifiche riportate sul datasheet del componente e permettono proprio quelle performance di elevatore/invertitore di tensione proprie dell’IC preso in esame. 87 Figura 4 Schema ORCAD del circuito di controllo 88 CONNECTOR DB9 P1 1 6 2 7 3 8 4 9 5 10u C5 1n C4 1u C3 1u C2 8 7 6 5 4 3 2 1 R2IN T2OUT V- C2- C2+ C1- V+ C1+ MAX232 R2OUT T2IN T1IN R1OUT R1IN T1OUT GND VCC C1 1u U1 9 RESET 1 9 10 2 8 7 6 5 4 3 2 1 11 12 13 14 15 16 12K R1 RA0/AN0 RA1/AN1 PIC16F628A RB3/CCP1 RB7/T1OSI/PGD Vdd RA6/OSC2/CLKO RB4/PGM RB5 RB6/T1OSO/T1CKI/PGC RB2/TX/CK RB1/RX BR0/INT Vss RA5/MCLR/Vpp RA4/TOCKI/CMP2 RA7/OSC1/CLKI RA3/AN3/CMP1 RA2/AN2/Vref 10 11 12 13 14 15 16 17 18 1.7K R2 100n C6 OUTPUT CONTROLLO INPUT FD 5V Dallo stadio d'alimentazione Analizzando lo schema qui proposto, ritroviamo le funzioni dei pin illustrate sia nel capitolo riguardante il PIC che in quello legato alla stesura del firmware. In particolare, notiamo come i pin RB1 e RB2 (i numeri 7 e 8) vengono utilizzati per la ricezione (Rx) e la trasmissione (Tx) dei segnali provenienti e destinati all’host (verranno quindi collegati ai pin corrispondenti del MAX232 che fa da tramite). Per quanto riguarda il segnale di Output del microcontrollore, quel segnale cioè che permetterà al circuito di controllo di comandare l’applicativo, è stato scelto come terminale di uscita il pin RB0; la porta che fornirà invece traccia dell’attività proveniente dal mondo esterno è rappresentata dal pin RB5. È importante ricordare che questi collegamenti non fanno altro che tradurre a livello hardware le impostazioni settate nel firmware, è nella fase di programmazione infatti che i pin vengono destinati ad Input o ad Output. Le sezioni di circuiteria, collegate a loro volta a questi terminali, che ancora non compaiono nello schema, verranno prese in esame in dettagliato più avanti. A sua volta, l’integrato della Maxim è collegato al connettore DB9 tramite i pin 13 e 14 (T1OUT e R1IN che insieme compongono uno dei due canali dell’IC). Oltre alla connessione con la massa di riferimento, non sono necessari altri collegamenti per stabilire una comunicazione su protocollo EIA RS-232, non essendo richiesta l’implementazione di nessun sistema di controllo sui pacchetti trasmessi, che richiederebbe infatti fili aggiuntivi (per esempio il sistema RTS/CTS). Entrambi gli integrati ricevono un’alimentazione a 5V, in corrispondenza degli appositi piedini, che viene fornita da uno stadio separato realizzato a parte, anche questo analizzato tra poco. Per quanto riguarda la realizzazione fisica dei collegamenti, per questa parte del progetto, come per tutte le restanti componenti descritte in seguito, si è proceduto con una cosiddetta tiratura a mano dell’hardware su schede millefori standard, con componenti aventi case e piedinatura adeguati allo scopo. Da una prima fase di pianificazione dei collegamenti e degli schemi elettronici da realizzare, resa possibile dall’utilizzo di programmi di disegno automatico dedicati, si è passati ad una fase di test su scheda breadbord, tramite la quale è stato possibile mettere alla prova i componenti e le connessioni, per poi dedicarsi ad un’accurata tiratura a mano cercando di rendere il più possibile massimizzate le caratteristiche funzionali, di compattezza ed estetiche del prototipo. In figura 5, la cornice in rosso individua la porzione contenente i due integrati, sia sulla faccia superiore della scheda millefori, che 89 di quella retrostante dove risiedono la maggior parte dei collegamenti effettuati tramite saldature a stagno. Figura 4.5 Nel riquadro in rosso MAX232 e PIC16F628, lato superiore. Figura 4.6 Lato saldature. 90 Una volta improntato un primo circuito comprendente la connessioni funzionali tra il PIC16F628, il MAX232 e la porta DB9, verificate preliminarmente le stesse con l’aiuto di un multimetro in grado di individuare la presenza degli opportuni cortocircuiti e collegata infine opportunamente l’alimentazione, si è proceduto ad una prima fase di test. Un’importante osservazione, di carattere tecnico, è legata alla mancanza, oramai quasi costante, di connettori RS-232 su desktop e notebook. Abbiamo già detto che questa tecnologia è stata resa obsoleta dall’avvento del protocollo USB, che ne ha reso irreperibili le porte sulla stragrande maggioranza dei personal computer. A tutto questo si può ovviare abbastanza semplicemente ricorrendo a un convertitore commerciale USB-RS232, capace di fare da ponte tra i due protocolli. Si presenta in realtà come un semplice cavo che ha ad un’estremità un connettore USB, e all’altra un connettore DB9 “male” (Figura 7). In realtà questo particolare dispositivo si basa a sua volta su un integrato dedicato: l’ FT232, concepito appositamente per dispositivi di conversione di questo tipo. Questo ha permesso una quantomai semplice connessione del dispositivo appena realizzato con l’host che “vede” la porta USB collegata al convertitore come una vera e propria porta COM, tipica della connessione RS-232. fig Figura 4.7 Convertitore USB-RS232 A questo punto si è ricorsi ad un programma incluso nel OS Windows atto all’emulazione della comunicazione seriale, ovvero Hyperterminal. Tale software ha permesso di simulare la connessione desiderata e di effettuare sia la trasmissione che la ricezione di segnali seriali tra l’host e il device. In figura, riportiamo una schermata tratta proprio da questo applicativo. Innanzitutto Hyperterminal permette di settare tutti i parametri della comunicazione, come il numero di bit inviati, la presenza del bit di stop, il baudrate. Dal capitolo sui 91 protocolli di comunicazione sappiamo di dover utilizzare un baudrate pari a 9600, con una comunicazione di tipo 8n1, senza alcun controllo di flusso. Figura 4.8 Schermata di prova Hiperterminal. In rosso il messaggio di alive (CIAO), in verde caratteri in echo, in blu il messaggio legato all'input (B-able) A questo punto possiamo accertare il corretto funzionamento del nostro hardware: i caratteri mandati a schermo infatti, costituiscono la traccia echo voluta dei caratteri inviati al PIC, programmato proprio per ritrasmetterli a sua volta all’host al momento della ricezione. È visibile il messaggio di alive che il PIC trasmette all’host quando viene collegato e quando viene premuto il tasto di reset. 92 Figura 4.9 Collegamenti per collaudo con Hiperterminal (rosso). In blu la connessione tramite convertitore all'host, in giallo collegamento d'alimentazione. In questa prima fase di testing, il collegamento opportuno del tester, ci ha permesso di verificare che, nel momento in cui il microcontrollore riceve un carattere dall’host, il pin dedicato al controllo dell’output (RB0) viene messo nello stato logico 1 (il multimetro misurerà 5V sul pin). Per quanto concerne l’input del PIC, che dovrà provenire dal feedback dell’attuatore, a questo livello è stato simulato con un semplice interruttore che, se premuto, collega il pin predefinito RB5 ai 5V dell’alimentazione, emulando in questo modo un segnale proveniente dall’esterno. Come scritto sul firmware, in corrispondenza dell’input, il PIC invia all’host un messaggio tramite il collegamento seriale. In questo caso il messaggio è “B-able”, come si vede chiaramente dalla schermata di prova del terminale di Windows. Questo messaggio verrà intercettato dal programma di interfaccia e elaborato in modo tale da essere recepito dall’utente finale. 93 4.3 Lo stato di pilotaggio del carico A questo punto cominciamo a parlare del lato attuatore. Anticipiamo che ci occuperemo in una sezione dedicata della scelta dell’applicativo vero e proprio realizzato e della descrizione delle possibili soluzioni demotiche improntabili. A questo livello ci interessa descrivere il modo in cui un carico di qualche tipo, verosimilmente alimentato dalla normale rete domestica, possa essere pilotato dal circuito di controllo. La soluzione più immediata è quella di utilizzare la tensione messa sul pin dal microcontrollore per controllare l’alimentazione stessa del carico. Per ottenere questo risultato è opportuno utilizzare un semplice relais commerciale, avente le opportune caratteristiche. Queste ultime sono legate alla tensione e alla quantità di corrente erogata dal microcontrollore della Microchip. In particolare, grazie al datasheet, constatiamo che il microchip è capace di erogare 25mA al massimo, ad una tensione, come detto di 5V. Da queste osservazioni deriva che, la corrente prodotta dallo stadio di uscita del microcontrollore non sarebbe da sola sufficiente per eccitare la bobina di un comune relais commerciale (circa 80-100 mA per i relais più comuni). Anche se esistono relais in miniatura con correnti di 15mA è comunque sconsigliabile collegarli direttamente alle uscite del PIC, poiché le extratensioni di apertura possono superare le diverse migliaia di Volt, distruggendo gli stadi di uscita del chip (una bobina in cui scorre corrente genera un campo magnetico; togliendo l’alimentazione il campo magnetico induce una corrente che, se non si chiude su nessun carico, porta ad un incremento della differenza di potenziale ai capi della bobina). Per questo motivo, e per rendere possibile l’utilizzo di un relais commerciale con bobina da 5V, viene aggiunto allo stadio di uscita del PIC un transitor e giunzione bipolare. Il BJT viene utilizzato come un interruttore, in grado di moltiplicare la corrente che scorre sulla base, amplificandola sul contatto di collettore in relazione alle proprie caratteristiche e al dimensionamento dei componenti resistivi. In particolare, il transistor è stato scelto tra quelli capaci di erogare almeno quei 100mA di corrente necessari ad eccitare la bobina, mentre lo schema circuitale dei collegamenti è riportato nella seguente figura. 94 220V 1 3 12V 2 Alimentazione Attuatore A B Relay_ Finder 40 .51 R3 54 C R4 OUTPUT PIC Q1 B 4K Q2N1711 E Figura 4.10 Schema Orcad Stadio di pilotaggio del carico Una volta disegnato lo schema circuitale, si è passati alla scelta dei componenti e al dimensionamento delle resistenze. Per quanto riguarda il relais, ne è stato scelto uno della Finder, il 40.51[16]. Possiede una bobina da 5-6V con 80mA di assorbimento minimo, capace di pilotare carichi di 240V e 6A (idoneo quindi per controllare un qualsiasi carico domestico). 95 Figura 4.11 Il relais 40.51 della Finder. Foto e schema dei contatti. In figura oltre ad un’immagine del relais stesso, è riportato lo schema dei pin. A1 e A2 servono a fornire la differenza di potenziale necessaria all’attivazione della bobina, mentre i pin 11 12 e 14 sono utilizzati per il collegamento del carico, e in particolare dell’alimentazione sullo stesso, che viene collegata dal relais al momento dell’attivazione della bobina. Il transistor è un comune 2N1711[17], in pratica, i 5V provenienti dal microcontrollore fanno commutare il BJT dallo stato di interdizione a quello di saturazione, permettendo lo scorrimento della corrente desiderata dal terminale di collettore (e quindi dal relais) al terminale di Emettitore connesso a terra. In base allo schema illustrato precedentemente, per determinare le resistenze di Base (R4) e di Collettore (R3), si risolvono banalmente le due equazioni delle maglie considerando: • V BE e VCE , rispettivamente cadute di tensione tra Base ed Emettitore e tra Collettore ed Emettitore in saturazione, valgono ,in base al datasheet del componente, 0.95V e 0.5V; 96 • il guadagno in corrente hFE vale circa 130 (con corrente di 150mA di corrente di collettore); • La caduta di tensione ai capi del relais ( Vr ) vale 5V; • La corrente di collettore IC deve ammontare almeno a 90mA per garantire l’eccitazione della bobina. Considerando inoltre che, lo stadio di uscita del PIC al quale colleghiamo il terminale di Base del transistor produce 5V, e che il relais è collegato ad un generatore a 12V (l’alimentazione merita una trattazione separata), possiamo schematizzare i collegamenti come segue, per procedere alla risoluzione delle maglie. 12V Vr Relais IC RC C RB B 5V IB VBE E VCE Figura 4.12 Schematizzazione del circuito di pilotaggio per il dimensionamento dei componenti 12V − Vr − I c Rc − VCE = 0 5V − I B RB − V BE = 0 12V − 5V − I c Rc − 0,5V = 0 5V − I B RB − 0,95V = 0 I c Rc = 6,5V RC ≅ 70Ω IB > IC > 0,7 mA ⇒ I B = 2mA hFE RB ≅ 2 KΩ 97 Per quanto riguarda la realizzazione circuitale, in una prima fase il transistor e il relais per il controllo del carico appartenevano alla stessa basetta millefori. In un secondo momento si è invece deciso di includere il 2N1711 nella stessa millefori del circuito di controllo per separare i due stadi. Quest’accorgimento avrebbe permesso di considerare il carico completamente indipendente dallo stadio di controllo che, come richiedono le specifiche, deve mantenere un elevato grado di indipendenza e di universalità. Nella figura possiamo ritrovare nella sezione evidenziata i componenti legati allo stadio di controllo a transistor. 2 1 Figura 4.13 Nel riquadro rosso i componenti che realizzano lo stadio di pilotaggio. 98 1 2 Figura 4.14 Collegamenti lato saldature. La freccia individua il pin RB0 Oltre ai collegamenti e ai componenti, sono evidenziate due uscite a pin-jack. Il numero 1 serve a collegare l’output su RB0 (individuato dalla freccia rossa) con il lato attuatore, tramite l’interposizione dello stadio transistor. Con l’uscita numero 2, l’alimentazione a 12V viene portata al relais per realizzare la configurazione riportata nello schema di figura 4.10. Analizziamo a questo punto lo stadio di alimentazione. 4.4 Lo stadio di alimentazione Descriviamo adesso lo stadio di alimentazione e le scelte progettuali compiute per arrivare fino ad esso. Per prima cosa, diciamo che il progetto, costituito dal lato legato allo stadio di controllo e uno relativo all’attuatore, prevede la presenza di due alimentazioni separate. Onde garantire una facile istallazione infatti, è necessario ridurre al minimo indispensabile gli interventi da praticare sull’attuatore, che è un comune dispositivo domestico collegato all’alimentazione di rete, come un impianto per l’illuminazione o un comando motorizzato per l’apertura di porte o serrande. Per collegare lo stadio di controllo all’applicativo vero e proprio, basterà collegare il 99 conduttore di fase di quest’ultimo al relais che, controllato tramite i circuiti visti precedentemente dal microcontrollore, deciderà l’accensione e lo spegnimento dell’azionamento stesso. LATO CONTROLLO LATO ATTUATORE FEEDBACK P I C ATTUATORE 220V 12V 12V 5V Segnale di Feedback Figura 4.15 Schema dei collegamenti tra Lato Controllo e Lato Attuatore Nella figura precedente, è schematizzata proprio la separazione dei due stadi, ognuno dotato di propria alimentazione. Per quanto riguarda lo stadio di controllo, esso necessita fondamentalmente delle seguenti tensioni di alimentazione: • 5V per la tecnologia TTL del microcontrollore; • +/-10V per il protocollo seriale EIA RS-232; • 12V per la realizzazione del circuito relais + transistor dello stadio di controllo del carico; Per quanto riguarda i valori di tensione per la comunicazione seriale, abbiamo visto come essi sono forniti dal MAX232 a partire da soli 5V. Rimangono quindi i 12V e i 5V che vengono unificati tramite un apposito componente: l’LM7805[18]. 100 Riportiamo a questo proposito lo schema elettrico dello stadio di alimentazione. 330n VOUT 2 5V Alimentazione PIC C8 3 C7 VIN GND LM7805 1 12V 100n Figura 4.16 Schema Orcad stadio di alimentazione Figura 4.17 Componenti dello stadio di alimentzione. La freccia individua l'LM7805 Grazie a questo componente possiamo alimentare il circuito di controllo con 12V ottenuti tramite un comune alimentatore stabilizzato (cioè capace di fornire una tensione di alimentazione continua costante rispetto sia alle variazioni del carico che a quelle dell’alimentazione) che fornisce in output 12V e 1A max. Il 7805 riceve quindi in ingresso i 12V, e fornisce in uscita i 5V che potranno essere collegati al microcontrollore alimentandolo correttamente. I 12V provenienti dall’alimentatore verranno destinati inoltre a sezioni specifiche che necessitano di questi valori di voltaggio come il circuito di controllo del relais (che in realtà appartiene al circuito dell’attuatore) e il circuito che realizza il feedback (consultare la sezione dedicata alla realizzazione dell’attuatore). Le capacità presenti nello schema vengono collegate per evitare problemi relativi all’oscillazione delle tensioni di alimentazione e sono dimensionate in base ai valori presenti sul datasheet del componente utilizzato. 101 Vediamo di seguito come appare lo stadio di alimentazione realizzato sulla basetta millefori. 12V 12V 5V 5V Figura 4.18 Nel riquadro rosso i componenti dello stadio di alimentazione. Le frecce indicano il percorso delle alimentazioni 12 5 5 12 Figura 4.19 Vista Lato saldature 102 Per riassumere quindi, i 12V in ingesso vengono sia convertiti in 5V tramite il suddetto componente per alimentare la logica TTL, sia trasferiti allo stadio di controllo relais per comporre i collegamenti necessari per il controllo dell’eccitazione della bobina. 4.5 Il Pin RB5 A questo punto parliamo del pin RB5 utilizzato dal PIC16F628 per ricevere l’input dal circuito che fornisce il feedback al circuito di controllo. Come è stato riportato nel capitolo riguardante il firmware, quando un pin deve essere utilizzato da input, bisogna settare in modo opportuno il registro corrispondente (TRISB in questo caso), e deve essere attivato sullo stesso pin un pull-up interno. Il pull-up consiste nel collegare ai 5V dell’alimentazione il pin tramite una resistenza interna al microcontrollore. Questa configurazione serve a mantenere costante lo stato del pin (sull’1 logico in questo caso) che, configurato come input, dipende solo dallo stato della circuiteria esterna, e potrebbe essere influenzato da qualsiasi interferenza, non necessariamente collegata al segnale di input vero e proprio. Quindi con questo sistema il pin viene tenuto a 1 (5V), e il suo passaggio allo stato 0 (0V) costituisce il segnale di ingresso. Nel caso considerato però, la circuiteria esterna al microcontrollore è realizzata in modo da fornire una tensione di 5V come segnale (vedremo poi come), non intercettabile come input valido dal pin RB0 del microchip che si trova già sui 5V. Per ovviare a questa situazione, è stato aggiunto un ulteriore pull-down esterno al piedino RB0, che lo collega a massa tramite una resistenza dimensionata ad hoc. In questo modo il pin si trova nello stato logico 0 finché non riceve in ingresso un segnale consono, proveniente dalla circuiteria esterna. Come resistenza è stato utilizzato un trimmer per poterne modificare a caldo il valore, per garantire a RB0 un valore di tensione che corrisponda allo 0 logico. 103 RB INPUT INPUT RB0 PIC16F628 Figura 4.20 Schema di collegamento di RB5. Foto dei componenti reali In questo modo RB0 è mantenuto a 0 (in realtà la differenza di potenziale tra il pin e terra non è 0 perché c’è una resistenza interposta tra i due terminali, ma è abbastanza bassa da rientrare nello stato logico low) finché non riceve in ingresso il segnale, proveniente dalla circuiteria esterna, che consiste nel feedback dell’attuatore. 4.6 Passare al Wireless Le sezioni precedenti hanno permesso di descrivere la struttura e le diverse componenti del circuito di controllo. Riassumendo, siamo giunti alla realizzazione di un prototipo che è in grado di comunicare con l’host tramite protocollo RS232. Grazie a questa connessione, il device può ricevere segnali dal personal computer, e quindi dall’utente, e inviare a sua volta comandi alla parte applicativa. Le modificazioni sull’ambiente risultanti, vengono captate e comunicate indietro fino all’utente stesso. Si muovono quindi i primi passi verso la realizzazione di un vero e proprio sistema che permette alla persona disabile di interagire con l’ambiente domestico in modo bidirezionale. Prende forma l’idea di una vera Power-Station, rappresentata dall’PC munito di interfaccia consona alle possibilità residue dell’utente, collegata col circuito di controllo (uno per ogni attuatore domotico considerato) che funge da mediatore tra la volontà del soggetto 104 e le diverse applicazioni poste all’interno dell’abitazione. In altri termini prende forma la bozza di un vero e proprio sistema domotico. Per rendere effettivamente funzionale un sistema del genere, tuttavia, è necessario integrare un’altra funzionalità nel nostro circuito basato su microcontrollore. Oltre al basso costo, alla facilità di istallazione e all’universalità, è necessario implementare una comunicazione wireless con l’host. Per fare questo ci riferiamo al componente descritto nella sezione precedente, ovvero al modulo EZL-80 della Sollae System. Figura 4.21 Il modulo EZL-90 nel complesso con card WLAN inserita (riquadro in rosso) Come è stato ampiamente formalizzato, questo particolare convertitore permette ad un dispositivo RS232, di supportare il protocollo Wi-Fi, permettendone la comunicazione su radiofrequenza con l’host grazie all’apposita WLAN card a 16bit inserita nell’apposita slot. È stato già detto che il modulo EZL-80 vero e proprio, essendo un modulo embedded, non è fornito di collegamenti già pronti per quanto riguarda la porta seriale o l’alimentazione, richiederebbe quindi di cablaggi ad hoc che lo rendano collegabile con l’hardware che si desidera rendere wireless. Per questo motivo, esclusivamente per comodità legate alla fase di collaudo, il modulo convertitore è stato acquistato assieme ad una piattaforma di sviluppo che, pur ampliandone un poco le dimensioni (commisurate comunque a quelle di una basetta 100mm X 60mm), ne rende estremamente semplice ed immediato il collegamento sia allo stadio di alimentazione che a quello di trasmissione seriale. L’EZL-90 (così si chiama il convertitore della 105 Sollae munito di estensione) è fornito infatti di un comune ingresso a pin-jack per l’alimentazione e di un connettore DB9-male. Una curiosità interessante, emersa durante l’analisi del datasheet del modulo di conversione, è legata alla presenza, all’interno dello schema circuitale, dell’integrato MAX232, utilizzato anche in questo caso per rendere possibile il collegamento tra la logica TTL, presente nell’embedded della Sollae, e le tensioni proprie del protocollo EIA RS232. Verosimilmente, è un microcontrollore dedicato che provvederà alla conversione seriale-WiFi, grazie alla scheda WLAN card che esplica le funzioni necessarie di antenna in radiofrequenza. Ritornando al circuito di controllo, dotato di un connettore DB9 a sua volta, è stato facilmente collegato al convertitore dotato inoltre di led che riportano traccia delle attività di trasmissione/ricezione dati (figura). Figura 4.22 Il modulo EZL-90 viene connesso al cirduito di cotrollo tramite il connettore seriale ed il pin di alimentazione Nelle prime fasi di sviluppo l’alimentazione del convertitore, che necessita di 5V con un assorbimento di 250mA, veniva prodotta da un alimentatore dedicato, fornito dalla stessa casa produttrice un comune stabilizzato a 5V capace di erogare al massimo 1A). 106 Per minimizzare però il numero di alimentatori necessari al circuito di controllo, essendo l’alimentazione del convertitore equivalente a quella richiesta dal microcontrollore, si è modificato lo schema circuitale per utilizzare per entrambe le sezioni il medesimo stadio di alimentazione (figura). A questo scopo si è aggiunto alla basetta principale un pin complementare con l’ingresso del convertitore, così da permettere il passaggio dell’alimentazione e la connessione dei due stadi. Vediamo quindi cosa otteniamo da questo collegamento. La configurazione finale è caratterizzata dall’hardware di controllo, pensato come device RS232, connesso tramite connettore DB9 al modulo di conversione, che non fa altro che “tradurre” i segnali, provenienti dal device a lui collegato, in segnali radio (grazie alla scheda CF) e trasmetterli all’host. Viceversa il personal computer (la stazione di controllo a questo punto), tramite il proprio hardware dedicato per la trasmissione wireless, invia su Wi-Fi messaggi al convertitore della Sollae che li rende concordi al protocollo RS232 e li passa al circuito di controllo. Si realizza in questo modo una comunicazione bidirezionale su Wi-Fi tra l’host e il dispositivo seriale realizzato. Questo permetterà il decentramento del device di controllo, rispetto alla postazione di comando dalla quale partono i comandi provenienti dall’utente disabile. Una volta collegati quindi i due sistemi, ci si è dedicati alla fase di collaudo della comunicazione wireless. Come abbiamo visto precedentemente, un modulo di conversione del genere, necessita di alcuni setting per rendere conseguibile la comunicazione desiderata tra i terminali interessati. I programmi forniti a questo scopo dalla casa madre sono stati ampiamente descritti precedentemente (sezione relativa ai protocolli di comunicazione), ricordiamo brevemente che il primo passo è quello di collegare il convertitore tramite cavo incrociato all’host e, agendo tramite il software ezSERIALconfig, si procede a settare i parametri propri della comunicazione che verranno caricati in questo modo dal firmware presente nel modulo EZL al momento della connessione. Diciamo inoltre che, disponendo di un solo prototipo e convertitore associato, permetteremo all’EZL di realizzare una connessione punto-punto (ad hoc) con la stazione di controllo, non sarà quindi necessario disporre di un Access Point (realizzabile comunque tramite un normale router Wi-Fi reperibile facilmente in commercio). Per testare il nostro circuito in relazione alla configurazione senza fili, si è ricorsi all’applicazione di un semplice led alla porta di output, per verificare in modo immediato che la trasmissione del pacchetto spedito dall’host su radiofrequenza fosse 107 effettivamente ricevuto dal microcontrollore, producendo le risposte programmate nello stesso (figura). A questo scopo si è utilizzato in modo proficuo la sezione di test del software ezCONFIG che ha permesso di visualizzare proprio i caratteri in entrata e in uscita dal modulo EZL. La prima operazione da eseguire, al fine di stabilire una connessione funzionante è quella, ovviamente, di attivare la scheda Wi-Fi del personal computer che funge da host tramite gli appositi tool di configurazione del sistema operativo. Se il convertitore funziona correttamente, tra le reti senza fili disponibili, ne comparirà una di tipo computer-to-computer non protetta (non è stata impostata nessuna chiave WEP per l’EZL) con identificativo corrispondente al SSID, cioè quell’identificativo (Service Set Identifier) che serve ad individuare un dispositivo su una rete Wlan e che viene associato al convertitore in fase di configurazione (nel caso specifico il SSID è test). Ricordiamo che la configurazione del convertitore, descritta nel capitolo precedente, è avvenuta in una fase precedente, perciò sono state già impostate le caratteristiche della comunicazione seriale (bit per pacchetto, bit di stop, controllo di parità, etc.), la configurazione di tipo punto-punto e lo stesso SSID. Nella sezione relativa al test basta introdurre l’indirizzo IP corrispondente al convertitore, e il port number utilizzato per lo scambio dei pacchetti. È interessante constatare che proprio il tool di test, presente nel software di configurazione, presenta al suo le funzionalità fondamentali sulle quali è stato basato il programma di interfaccia in Visual Basic che costituirà l’interfaccia utente. Ci occuperemo di quest’ultimo argomento, proprio nel capitolo successivo. 108 5. L’INTERFACCIA UTENTE IN VISUAL BASIC 5.1 Obiettivi dell’interfaccia Nel seguente capitolo ci occuperemo di descrivere l’interfaccia, realizzata appositamente, che permetterà all’utente di interagire semplicemente con l’host, e quindi, con la Control Station del sistema ausilio realizzato. La funzione primaria del SW redatto sarà quella di potenziare l’accessibilità del personal computer, così da permettere ad un’utenza disabile di disporre del pieno controllo del sistema ausilio. Per la programmazione necessaria è stato scelto il linguaggio orientato agli eventi Microsoft Visual Basic 6, che introdurremo brevemente di seguito. L’obiettivo dell’interfaccia sarà inoltre quella di gestire il collegamento Wi-Fi che deve instaurarsi tra host e circuito di controllo, permettendo lo scambio di dati necessario al corretto funzionamento del sistema. 109 5.2 VB6, Programmazione basata sugli eventi Figura 5.1 Visual Basic 6 Esistono centinaia di linguaggi di programmazione, ciascuno dei quali è stato sviluppato per risolvere un particolare tipo di problema. La maggior parte dei linguaggi tradizionali, come BASIC, C, FORTRAN etc, sono considerati linguaggi procedurali. Ciò significa che il programma specifica l’esatta sequenza di tutte le operazioni. La logica del programma determina la successiva istruzione da eseguire, in risposta a condizioni e a richieste dell’utente. I linguaggi di programmazione più recenti come C++ e Visual Basic, utilizzano un approccio diverso: la programmazione orientata agli oggetti e la programmazione basata sugli eventi. Microsoft considera Visual Basic un linguaggio basato sugli eventi, che ha molti elementi di un linguaggio orientato agli oggetti come Java. Nel modello basato sugli eventi, i programmi non sono più di tipo procedurale, in quanto non seguono una sequenza logica[19]. Il programmatore non mantiene il controllo e non determina la sequenza di esecuzione. Invece, ogni azione dell'utente, come la pressione di un tasto o il clic del mouse su un pulsante, può provocare l'attivazione di un evento, che determina l'esecuzione di una routine o procedura Basic implementata dal programmatore. Ad esempio, se l'utente fa click su un pulsante di comando con l'etichetta calcola, ciò causa l'attivazione del relativo evento click, e il programma salta automaticamente a una routine che è stata 110 scritta per eseguire tale operazione di calcolo. In Visual Basic si lavora con oggetti, che hanno proprietà e metodi: si può pensare a un oggetto come a una cosa o un sostantivo. Esempi di oggetti sono form e controlli. I form sono le finestre dell'applicazione e le relative finestre di dialogo che si collocano sullo schermo; i controlli sono gli elementi che si inseriscono all'interno di un form, come le caselle di testo, i pulsanti di comando e le caselle di riepilogo. Le proprietà forniscono informazioni relativamente a un oggetto, come il suo nome, colore, dimensione, posizione o comportamento. Si può pensare alle proprietà come ad aggettivi che descrivono gli oggetti. Quando si fa riferimento a una proprietà prima di tutto si indica il nome dell'oggetto, quindi si aggiunge un punto, e poi il nome della proprietà. Ad esempio, si può fare riferimento alla proprietà Caption di un form chiamato Form1 digitando Form1.Caption. Le azioni associate agli oggetti sono chiamate metodi. I metodi sono i verbi della programmazione orientata agli oggetti. Alcuni metodi tipici sono Print, Move, Clear e Resize. La sintassi di riferimento per i metodi è del tipo Oggetto.Metodo: ad esempio, un metodo Print può essere applicato a diversi oggetti, Printer.Print invia l'output all'oggetto stampante, Form1.Print invia all'output il form chiamato Form1. La realizzazione di un progetto Visual Basic è suddivisa in tre fasi, che implicano la progettazione dell'interfaccia utente, la definizione delle proprietà e la creazione del codice. 1. Nella fase relativa alla progettazione dell’interfaccia utente, vengono creati i form e i controlli previsti durante la fase di pianificazione del progetto. Vengono quindi definiti in questo momento tutti gli oggetti utilizzati nel progetto. 2. L’impostazione delle proprietà degli oggetti consiste nell’assegnare loro un nome e definire attributi come il testo di un’etichetta, la dimensione del testo e le parole che appaiono su un pulsante di comando o nella barradel titolo di un form, 3. Per svolgere le azioni necessarie dal programma si utilizzeranno istruzioni Basic (chiamate codice Basic). Per creare un programma potente possono essere necessarie anche poche istruzioni. 111 Sono state queste le fasi seguite durante la realizzazione del programma di interfaccia che avrà un ruolo cruciale nel funzionamento del sistema ausilio. Sia per la sua funzione di mediare tra utente e host, amplificandone l’accessibilità, sia per l’aspetto funzionale che implementa la connessione efficace tra Control Station a applicativi domotici via Wi-Fi, fondamentale per il corretto funzionamento del sistema. 5.3 B-SERIAL, l’interfaccia utente La stesura del software di interfaccia è, al pari della realizzazione dell’hardware, un elemento cruciale per la creazione del sistema ausilio oggetto del seguente studio. L’interfaccia costituisce infatti l’unico contatto che l’utente disabile ha con l’ambiente composto dagli attuatori domotici. E proprio tramite questo mezzo dovrà essere in grado di interagire con essi in modo bidirezionale. Al software vengono quindi delegate le funzionalità di comando e di switching sensoriale che permettono l’integrazione delle abilità dell’utente stesso. Oltre a questo aspetto, ne rimane un altro, forse ancor più importante almeno dal punto di vista funzionale, che è quello relativo alla necessaria connessione che deve instaurarsi tra host e circuito di controllo (e quindi attuatore). Tale comunicazione dovrà essere senza dubbio stabile e conforme ai parametri presenti nel protocollo utilizzato. A questo scopo la redazione del software di controllo dovrà seguire anch’essa le opportune specifiche. Per questi motivi e per altri, legati essenzialmente alle caratteristiche intrinseche del linguaggio, è stato ritenuto come ottimale l’uso del linguaggio Visual Basic descritto molto brevemente nella sezione precedente. La programmazione VB prevede, infatti, la redazione di programmi dotati di un’interfaccia utente molto user friendly, basata essenzialmente sul sistema di finestre utilizzate da Microsoft Windows. Questo permette di progettare un’interfaccia utente modellata sia sulle abilità e le specifiche provenienti lato utente, sia sulle diverse funzioni che il programma stesso dovrà essere in grado di implementare. Per cominciare, diciamo che il programma di interfaccia, chiamato B-Serial, si compone di due Form e di quattro Moduli. In VB il form è la finestra principale dell’applicazione in cui possono essere inseriti elementi visuali come 112 pulsanti o caselle di testo, tramite i quali l’utente decide lo svolgersi del programma, concezione che deriva dalla definizione di linguaggio orientato agli eventi propria del VB. I moduli invece contengono di solito le definizioni di variabili, funzioni o classi che vengono richiamate durante il codice scritto nel form. Figura 5.2 Schermata principale dell'interfaccia utente Il form principale si compone fondamentalmente di quattro tasti principali. Nell’ipotesi progettuale più ampia, ogni tasto sarà associato facilmente al controllo di un diverso attuatore domotico, realizzando in questo modo, un centro di controllo polifunzionale. Anticipaimo che (nella seconda sezione si parlerà in modo più approfondito di questo aspetto) l’host potrà essere equipaggiato con un sistema a touch screen o a comando vocale per garantire una maggior accessibilità all’utente (già fornita per altro da un’interfaccia a quattro “tastoni” come quella siffatta). Per la programmazione si parte, come detto, dalla progettazione dell’interfaccia utente, per poi dedicarsi alla scrittura vera e propria del codice. Dietro ogni tasto e controllo di varia natura, c’è quindi il codice che realizza la funzionalità a cui il controllo stesso corrisponde. La pressione del tasto uno (“luce”) deve corrispondere ad una serie di azioni, dettate proprio dal relativo codice scritto dal programmatore. Il secondo Form, ancora in fase di sviluppo, costituisce essenzialmente un setup necessario per stabilire la 113 connessione desiderata con il dispositivo Wi-Fi che costituisce il terminale domotico da controllare. Questo form non è fondalmente destinato all’utente finale, che in una fase più avanzata non si troverà costretto a settare le impostazioni necessarie alla comunicazione che verranno caricate in automatico. In questa ancora iniziale fase di sviluppo si è preferito piuttosto, prendere padronanza con le istruzioni necessarie al corretto funzionamento della connessione, lasciando all’utente la libertà di cambiare le impostazioni, così da testare l’efficienza e della comunicazione instaurata. Figura 5.3 La schermata di configurazione Concentriamoci adesso sull’analisi più specifica del programma di interfaccia realizzato e sul codice che sostanzialmente lo compone. In prima analisi, osservando in modo superficiale i form proposti, si può facilmente notare come VB permetta di realizzare interfacce in puro stile Microsoft Windows, dotate di tutti i tool corrispondenti. Il vantaggio di utilizzare un linguaggio di programmazione del genere, è quello di poter disporre di Controlli già pronti, che permettono di implementare funzionalità anche complesse, solo impostandone alcune proprietà nel modo corretto, descritte per altro in modo esauriente in letteratura. Nello specifico, quello che si intendeva realizzare tramite il software in esame, era la possibilità di instaurare una connessione sia di tipo seriale (tramite porta COM) che di tipo Wireless LAN (Wi-Fi). Ricordiamo, infatti, che l’idea di base è quella di portare a 114 compimento la progettazione di un sistema di controllo domotico wireless, capace di salvaguardare le specifiche di portabilità e di semplicità di installazione. A questo copo sono stati utilizzati fondamentalmente due controlli esistenti e ampiamente funzionanti: • MSCOMM.OCX per la comunicazione seriale; • WinSock per la comunicazione LAN (e quindi anche WiFi). 5.3.1 MSCOMM Con Visual Basic viene fornito un componente per la gestione della seriale, l' MSCOMM.OCX. L'MSCOMM dispone di diverse proprietà, di un solo evento ( OnComm() ) e nessun metodo. Nell’applicazione trattata in particolare, MSCOMM è richiamato dal secondo form, quando si setta la comunicazione seriale. In particolare, come evidenziato nella figura seguente, al controllo Command3 nominato Set Serial corrisponde il richiamo del controllo MSComm. Figura 5.4 Particolare della schermata di configurazione della comunicazione seriale. In rosso I campi destinati ai setting e il tasto di connessione. 115 'Imposto la porta di comunicazione Me.MSComm1.CommPort = CInt(Right(Me.cmb_port.List(Me.cmb_port.ListIndex),1)) 'Creo la stringa di configurazione <speed>,n,8,1 cfgstr = Me.cmb_speed.List(Me.cmb_speed.ListIndex) If chk_parity.Value = vbChecked Then cfgstr = cfgstr & ",s" Else cfgstr = cfgstr & ",n" End If cfgstr = cfgstr & "," & cmb_data.List(cmb_data.ListIndex) If chk_stop.Value = vbChecked Then cfgstr = cfgstr & ",1" Else cfgstr = cfgstr & ",0" End If 'Imposto la stringa di configurazione Me.MSComm1.Settings = cfgstr 'Apro la porta Me.MSComm1.PortOpen = True Il codice si occupa prima di tutto di selezionare la porta Com sulla quale bisogna instaurare la comunicazione. A questo scopo definiamo la proprietà Commport dell’oggetto MSComm1 tramite il valore introdotto dall’utente nella combobox corrispondente presente nel form considerato. Figura 5.5 Box per la trasmissione di dati su seriale. 116 Dopo aver scelto la porta si settano le combobox relative al protocollo che si vuole utilizzare (8n1), questi valori vengono presi dal codice e assegnati alle proprietà corrispondenti dell’oggetto MSComm1. È possibile quindi aprire la porta COM corrispondente impostando come True la proprietà PortOpen di MSComm, in questo modo si richiede il permesso al sistema di utilizzare la porta scelta. Se la porta è disponibile, il sistema operativo la assegnerà a noi, diversamente, se la porta è già utilizzata da un altro processo, verrà generato un errore intercettabile con l'istruzione ON ERROR. Per chiudere la porta e rilasciarne il controllo, è sufficiente impostare PortOpen su False. Il programma di interfaccia a questo punto, se i settings immessi sono corretti, permette la visualizzazione di un box di dialogo apposito per l’invio e la ricezione dei dati su seriale. Private Sub Command1_Click() Dim chr As String On Error GoTo errhdl If InStr(1, Me.cmb_char.Text, "(") = 0 Then chr = Me.cmb_char.Text & vbCrLf Else chr = Mid(Me.cmb_char.List(Me.cmb_char.ListIndex), Len(Me.cmb_char.List(Me.cmb_char.ListIndex)) - 1, 1) End If Me.MSComm1.Output = chr S_TX_out (chr) message_out "Sent char on TX Line" If txt_status(1).BackColor <> vbYellow Then txt_status(1).BackColor = vbYellow Else txt_status(1).BackColor = vbGreen Exit Sub errhdl: message_out "Critical error while sending" End Sub 117 Il codice riportato viene richiamato in seguito alla pressione sul pulsante Send Char, che invia il carattere selezionato nell’apposita combobox secondo le impostazioni decise nello step precedente. Per quanto riguarda invece la ricezione di caratteri, è necessario dire che il controllo MSComm è asincrono, perciò è il controllo stesso che si occupa di informare il programma di ciò che accade tramite il richiamo dell’evento OnComm() e l’impostazione della proprietà CommEvent. Quando viene richiamato l’evento OnComm, nella proprietà CommEvents è riportato l’evento accaduto, secondo un codice che varia a seconda di quello che succede. Private Sub MSComm1_OnComm() Dim chr As String, connection As String If Me.MSComm1.CommEvent = comEvReceive Then chr = Me.MSComm1.Input Me.txt_rxchrs.Text = Me.txt_rxchrs.Text & chr connection = Switch(ConnectionType = 1, "Serial", ConnectionType = 2, "WiFi") frm_IO_panel.Text1.Text = "Received from " & connection & ": " & chr End If message_out "Received Char on Serial Port" S_RX_out chr If txt_status(2).BackColor <> vbYellow Then txt_status(2).BackColor = vbYellow Else txt_status(2).BackColor = vbGreen End Sub Nella subroutine relativa all’evento MSComm1_OnComm(), la proprietà CommEvent viene utilizzata per caratterizzare il numero di caratteri ricevuti, che vengono poi caricati nella variabile chr tramite la proprietà Input di MSComm. In realtà la funzionalità di comunicazione su RS-232 viene utilizzata solo come test, l’interfaccia infatti è visto soprattutto come software capace di improntare una comunicazione su LAN, in particolare su WiFi. 118 5.3.2 WINSOCK Questo controllo fornisce al programma realizzato tutte le funzionalità necessarie per implementare una comunicazione su LAN secondo il protocollo TCP o UDP. Il primo consente di creare e mantenere una connessione con un computer remoto. Utilizzando la connessione, entrambi i computer possono inviare e ricevere dati. Il protocollo TCP è un protocollo basato sulla connessione ed è analogo ad un telefono, in quanto l'utente deve stabilire una connessione prima di poter procedere. Per quanto riguarda l’UDP è un protocollo senza connessione. A differenza del TCP, non viene stabilita alcuna connessione tra i computer e la transazione tra due computer è analoga al passaggio di un messaggio che viene inviato da un computer all'altro, senza che venga stabilita una connessione esplicita tra i due computer. La dimensione massima dei dati che è possibile inviare in ciascuna trasmissione dipende della rete. Per creare applicazioni client o server non è necessario conoscere in maniera approfondita il TCP o richiamare API Winsock di basso livello (simili alle system call socket di Unix). Impostando le proprietà e attivando i metodi del controllo (object oriented e event driven), è possibile connettersi a un computer remoto e trasferire i dati in entrambe le direzioni. Il controllo Winsock dispone di proprietà, di metodi e di eventi. Nel nostro programma, questo controllo viene richiamato dalla sezione corrispondente alla comunicazione WiFi del Form. Figura 5.6 Comunicazione WiFi. Setting e box di comunicazione 119 Come nel caso precedente, vediamo che il form possiede una porzione composta da text box destinate all’inserimento dei parametri necessari per la connessione. Alla pressione nel tasto Connect verrà richiamato il controllo Winsock che, sfruttando i parametri inseriti in precedenza, effettuerà la connessione. wf_l_ip = Text1(0).Text wf_r_ip = Text1(1).Text wf_l_port = Text1(2).Text wf_r_port = Text1(3).Text 'Parlo in TCP/IP al destination Me.Winsock1.LocalPort = wf_l_port Me.Winsock1.RemotePort = wf_r_port Me.Winsock1.RemoteHost = wf_r_ip Me.Winsock1.Protocol = sckTCPProtocol Me.Winsock1.Connect Me.Winsock1.RemoteHost, Me.Winsock1.RemotePort message_out "Waiting for connection response..." La prima parte del codice imposta le variabili in corrispondenza delle caselle di testo, che dovranno essere utilizzate per immettere i settings della connessione desiderata. Nella seconda parte, i dati inseriti vengono assegnati alle proprietà corrispondenti del controllo Winsock. Sono i valori assegnati alle proprietà che vengono utilizzati per stabilire la connessione. In particolare le proprietà richieste sono: • LocalPort, che deve contenere il valore corrispondente alla porta messa a disposizione dall’host per la comunicazione. Nel nostro caso la porta è la numero 1470, valore di default del dispositivo EZL utilizzato per la conversione. • RemotePort, contiene il valore corrispondente della porta del remoto con il quale si stabilisce la connessione. È preferibile scegliere tale valore coincidente con quello della porta locale. • RemoteHost, contiene l’indirizzo IP della macchina remota, quella cioè con cui si vuole stabilire la connessione. Nel nostro caso l’indirizzo è quello dell’EZL e vale 10.1.0.1. • Protocol, sckTCPProtocol setta il controllo Winsock sul protocollo TCP. • 120 Winsock1.Connect Me.Winsock1.RemoteHost, Me.Winsock1.RemotePort Questa riga di codice comunica al conrollo Winsock di effettuare la connessione con il RemoteHost sulla RemotePort. La pressione sul pulsante Send Char richiama la funzione per l’invio del carattere selezionato nella corrispondente Combo box. Vediamo come. Private Sub Command6_Click() Dim buffer As String If InStr(1, Me.cmb_char_wifi.Text, "(", vbTextCompare) = 0 Then buffer = Me.cmb_char_wifi.Text Else buffer = Mid(Me.cmb_char_wifi.List(Me.cmb_char_wifi.ListIndex), Len(Me.cmb_char_wifi.List(Me.cmb_char_wifi.ListIndex)) - 1, 1) End If Me.Winsock1.SendData buffer If txt_status(5).BackColor <> vbYellow Then txt_status(5).BackColor = vbYellow Else txt_status(5).BackColor = vbGreen Exit Sub I dati da inviare vengono caricati nella variabile buffer e tramite il metodo SendData vengono inviati al ricevitore che in questo particolare caso è l’EZL, considerato come il Server, mentre l’Host è in realtà il Client. In una trasmissione Client/Server infatti uno dei due dispositivi richiede la connessione (il client/host appunto) mentre l’altro terminale rimane in ascolto, in attesa della richiesta (il server/EZL). L’interfaccia, provvedendo come detto ad una comunicazione bidirezionale con il dispositivo di controllo domotico, sarà in grado anche di ricevere dati via WiFi LAN. Anche questa funzionalità viene rimandata al controllo Winsock. 121 Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim buffer As String, connection As String Me.Winsock1.GetData buffer, vbString Me.txt_rxchars_wifi.Text = Me.txt_rxchars_wifi & buffer If txt_status(6).BackColor <> vbYellow Then txt_status(6).BackColor = vbYellow Else txt_status(6).BackColor = vbGreen connection = Switch(ConnectionType = 1, "Serial", ConnectionType = 2,"WiFi") If transition = False Then frm_IO_panel.Text1.Text = "Received from " & connection & ": " & buffer End If In questo caso utilizziamo il metodo GetData tramite il quale vengono recepiti i dati messi nella variabile buffer, il contenuto della quale è visibile nella casello di testo relativa ai dati in arrivo da remoto. Sia la funzione di trasmissione che di ricezione possono essere controllate dalla schermata a tasti implementata dal primo form. L’utente si troverà davanti questa schermata durante il controllo dei diversi dispositivi. A questo scopo la pressione del tasto uno richiama in realtà la stessa funzione implementata dal pulsante Send Char presente sul form di configurazione. L’utente viene in questo modo svincolato dalle procedure di setup che, in una fase futura, potrebbe essere resa automatica. Traccia dell’avvenuta ricezione viene invece riportata nella barra di testo, presente anch’essa nel form principale. 122 Figura 5.7 Particolare dell'interfaccia a tasti. Il tasto invia il segnale responsabile dell'azionamento. Nella casella di testo compare il segnale di ritorno. Quelle riportate in questo capitolo, rapresentano le sezioni di codice fondamentali che garantiscono le funzionalità richieste al nostro programma di interfaccia, riportato per intero in appendice. La struttura del programma, permette all’utente di interagire con i controlli posizionati nell’abitazione, tramite la pressione (o come si vedrà in seguito il comando vocale) dei quattro tasti realizzati nel form principale. È, infatti, questa la schermata proposta all’utente all’avvio del software, accompagnata da una comunicazione vocale che comunica all’utente che l’interfaccia è pronta. 'Inizializzo la voce Call SetVoice Saysentence "Pronto", 0 Con queste righe di codice il programma richiama la Sub SetVoice, presente in uno dei moduli inclusi nel progetto, con la quale viene caricata la funzionalità vocale che servirà a fornire il feedback interpretabile all’utente. La modalità vocale viene infatti utilizzata dal programma di interfaccia per comunicare al soggetto l’avvenuto azionamento dell’attuatore. Infatti, mentre da un lato il software invia messaggi al circuito di controllo comandandone l’attivazione, dall’altro riceve dallo stesso circuito messaggi 123 legati alle azioni svolte dall’applicativo. Il software è programmato in modo tale da inviare all’utente un messaggio vocale nel momento in cui riceve in ingresso comunicazione WiFi dal convertitore EZL. Riportiamo di seguito il codice che realizza questa funzione. Private Sub Text1_Change() If InStr(1, Me.Text1.Text, "-able", vbTextCompare) > 0 Then transition = True Saysentence "Luce accesa", 0 End If End Sub Il microcontrollore è programmato (vedi il capitolo relativo alla realizzazione del firmware) in modo tale da inviare il messaggio B-able nel momento in cui riceve il feedback adeguato dal circuito appositamente realizzato (il circuito di feedback appunto). In questo modo il circuito di controllo è in grado di fornire segnalazione dell’avvenuta attivazione dell’attuatore che controlla. Una parte del codice costituente il programma di interfaccia è stata creata proprio al fine di intercettare questo segnale e di tradurlo in un input vocale per l’utente, realizzando quello switching sensoriale che rappresenta uno dei tratti innovativi del seguente lavoro. Nel caso specifico, l’utente vuole comandare l’accensione di un gruppo di luci. Il sistema ausilio composto di interfaccia, circuito a microcontrollore e attuatore (descritto nella seconda sezione) gli permette di controllare facilmente l’illuminazione. In più, l’accensione delle luci provoca la nascita di un segnale di ritorno che, tramite il microcontrollore, sarà inviato all’host e intercettato dall’interfaccia. Quest’ultima provvederà quindi a comunicare (in questo caso vocalmente) all’utente l’avvenuta attivazione del sistema, garantendogli lo switching sensoriale che “aggirerà” le sue disabilità. 124 II SEZIONE – L’APPLICAZIONE Il lato attuatore La sezione precedente ha analizzato soprattutto quella parte hardware, basata principalmente sul microcontrollore della Microchip, che realizza il cosiddetto circuito di controllo. La problematica presa in considerazione, era quella di realizzare un sistema ausilio che permettesse ad un utente disabile di interagire agevolmente con dispositivi domotici generici, posizionati all’interno dell’abitazione, ricevendo dagli stessi gli opportuni segnali di feedback, commisurati alle proprie abilità residue, sia motorie che sensoriali. Analizzato il problema, si è passati alla determinazione degli opportuni vincoli, tradotti nelle specifiche ingegneristiche seguite durante la realizzazione del progetto. Il circuito di controllo implementato quindi, costituisce una centralina intelligente che permette il controllo remoto da parte dell’utente, che deve solamente impartire i comandi desiderati alla Power Station, rappresentata, come detto, dall’host del sistema, improntato tramite software realizzati ad hoc che ne massimizzano l’accessibilità. A questo punto, il lavoro procede occupandosi degli aspetti strettamente connessi al lato attuatore vero e proprio. Nella presente sezione, pertanto, partiremo descrivendo lo stato dell’arte della tecnologia demotica, cercando di individuare quali sono le soluzioni 125 dedicate propriamente all’utenza disabile. Una volta inquadrato il mercato pertinente, ci si occuperà di descrivere possibili soluzioni realizzabili tramite il sistema di ausilio realizzato, per poi descriverne e prototipizzarne una specifica, che sottolineerà tutte le funzioni implementate dal sistema. Figura 1- Il Sistema Ausilio. Schema di principio 126 6. DOMOTICA: LO STATO DELL’ARTE 6.1 La Domotica Alla domanda cos’è la domotica si inizia di solito riferendosi al neologismo derivato da domus- casa e informatique- informatica, vale a dire casa automatizzata o più propriamente Casa Intelligente. Ma cos’è in realtà? In realtà la domotica è la scienza interdisciplinare che si occupa dello studio delle tecnologie atte a migliorare la qualità della vita nella casa e più in generale negli ambienti antropizzati[20]. La domotica si pone l’obiettivo di integrare, cioè far dialogare, le tecnologie dell'impiantistica tradizionale già presenti negli edifici, con quelle innovative, al fine di ottenere nuove e moderne funzionalità. Questa nuova scienza trova il suo scopo nel migliorare la qualità dell'abitare e vivere nell'edificio. L'edificio si trasforma in un ambiente nel quale è possibile vivere o lavorare efficientemente, controllare i livelli di benessere e di salute, garantire praticità e sicurezza, risparmiare energia, rispettare la natura. Ad un livello superiore si parla di building automation o automazione degli edifici. L'integrazione rappresenta la condivisione dell'informazione riducendo o eliminando l'isolamento dei vari impianti installati in un edificio, riorganizzando la loro visione 127 attraverso un unico sistema impiantistico multifunzione in grado di controllare, coordinare e comandare le singole funzioni lasciando ad ognuno la propria competenza e responsabilità. L'edificio intelligente, con il supporto delle nuove tecnologie, permette la gestione coordinata, integrata e computerizzata degli impianti tecnologici (climatizzazione, distribuzione acqua, gas ed energia, impianti di sicurezza), delle reti informatiche e delle reti di comunicazione, allo scopo di migliorare la flessibilità di gestione, il comfort, la sicurezza, il risparmio energetico degli immobili e per migliorare la qualità dell'abitare e del lavorare all'interno degli edifici. La casa intelligente può essere controllata dall'utilizzatore tramite opportune interfacce utente (come pulsanti, telecomandi, touch screen, tastiere, riconoscimento vocale), che realizzano il contatto (invio di comandi e ricezione di informazioni) con il sistema intelligente di controllo, basato su un'unità computerizzata centrale (l’host), oppure su un sistema a intelligenza distribuita (o su una combinazione delle due scuole di pensiero). I diversi componenti del sistema sono connessi tra di loro e con il sistema di controllo tramite vari tipi di interconnessione (ad esempio rete locale, onde radio, BUS dedicato, ecc.). Vedremo di seguito come viene organizzato e come è composto al giorno d’oggi un sistema di tipo domotico. Il sistema di controllo centralizzato, oppure l'insieme delle periferiche in un sistema ad intelligenza distribuita, provvede a svolgere i comandi impartiti dall'utente (ad esempio accensione luce cucina, oppure apertura tapparella sala), a monitorare continuamente i parametri ambientali (come allagamento oppure presenza di gas), a gestire in maniera autonoma alcune regolazioni (ad esempio temperatura) e a generare eventuali segnalazioni all'utente o ai servizi di teleassistenza. Un sistema domotico si completa, di solito, attraverso uno o più sistemi di comunicazione con il mondo esterno (ad esempio messaggi telefonici preregistrati, SMS, generazione automatica di pagine web o e-mail) per permetterne il controllo e la visualizzazione dello stato anche da remoto. Sistemi comunicativi di questo tipo, chiamati gateway o residential gateway svolgono la funzione di avanzati router, permettono la connessione di tutta la rete domestica al mondo esterno, e quindi alle reti di pubblico dominio. Le informazioni vengono raccolte dal campo da dispositivi chiamati sensori. Rientrano in questa categoria quelli che riescono a raccogliere eventi, informazioni e realtà dal 128 campo e che, quasi sempre, presuppongono il successivo verificarsi di un'azione. Un pulsante che accende una luce è un sensore che raccoglie la volontà “voglio accendere la luce”.Una sonda di temperatura è un sensore che informa sulla temperatura rilevata in un determinato ambient,e che può far scaturire il mantenimento o la variazione del comportamento dell'impianto termotecnico attivo in quel momento; un rilevatore di presenza dell'antifurto, informa l'edificio che c'è una persona in un determinato ambiente che, come avviene normalmente ad impianto “non inserito”, può essere ignorato; in alternativa invece può attivare l’accensione di luci, impianti termotecnici o semplicemente far memorizzare l'evento per successive elaborazioni. Le “azioni” vengono effettuate invece dagli attuatori. A seguito di un evento registrato da un sensore, l'attuatore hai il compito di svolgere l'azione. Per esempio a seguito della pressione di un pulsante (evento) un dispositivo d'ingresso (sensore) raccoglie l'informazione, un dispositivo d'uscita (attuatore) accende la luce (azione). La separazione delle attuazioni dalle informazioni porta l'impiantistica ad una evoluzione. Non si parla più di circuito fisico, ma di circuito logico. Figura 1.1 Collegamento tradizionale e interposizione del circuito di controllo 129 In un impianto elettrico tradizionale, esiste un circuito fisico, la linea di potenza, che collega il pulsante (o interruttore, deviatore, invertitore) direttamente al carico (per esempio un corpo illuminante). Per poter agire su quel carico è necessario collegare a quel circuito fisico, tutti i suoi dispositivi di comando. È facile intuire che ogni variazione, modifica o estensione delle funzionalità legate a quel carico comportano una modifica del circuito fisico e del cablaggio. In un impianto integrato abbiamo invece un circuito logico. Tutti i dispositivi (sensori, attuatori) sono collegati tra di loro attraverso un mezzo trasmissivo, il cui scopo è quello di trasmettere informazioni da un dispositivo ad una altro, inoltre agli attuatori è collegata la linea di potenza, dovendo agire sui dei carichi; l'intelligenza può essere collocata all'interno dei dispositivi o in un'unità autonoma che li collega e gestisce entrambi. Il circuito logico, fa si che la relazione che deve esistere tra un evento e la sua azione corrispondente non sia più vincolata dal cablaggio fisico esistente tra di due dispositivi, ma dalle informazioni che i dispositivi stessi si scambiano. Nei dispositivi tradizionali le funzioni di comando e di attuazione generalmente coesistono nello stesso dispositivo in modo inscindibile, come nel caso dell'interruttore. I dispositivi di un sistema integrato, al contrario, tenendo separate le due funzioni si guadagna in funzionalità e modularità. I diversi moduli possono essere organizzati secondo diverse topologie, cioè secondo diverse configurazioni di collegamenti tra i nodi della rete. Esistono diverse topologie e la scelta di quella da adottare è legata al conseguimento di alcuni obiettivi fondamentali: • Massimizzare l'affidabilità della rete: questo significa trovare una strada alternativa tra due dispositivi quando la strada normalmente percorsa viene interrotta a causa di malfunzionamenti; inoltre significa buona qualità della trasmissione, ossia il più basso numero di errori possibile. • Massimizzare il rendimento complessivo della rete, ossia minimizzare i tempi di risposta. Il rendimento si può misurare in transizioni elaborate nell'unità di tempo. • Minimizzare i costi di rete, facendo in modo per esempio, che il numero complessivo delle linee sia minimo. Tenendo conto di questi obiettivi, le configurazioni possibili possono assumere le seguenti forme. 130 Topologia a stella La configurazione a stella partendo da un centro raggiunge ogni punto periferico con un collegamento diretto. Agendo quindi al centro è possibile modificare funzioni e collegamenti. Lo schema è il seguente: Figura 1.2 Configurazione a stella Nella topologia a stella, tutte le comunicazioni passano attraverso il punto centrale di connessione che può essere sia passivo che attivo. Questo tipo di topologia semplifica la rete perchè il punto centrale può controllare sia il traffico che i nodi, quindi l'individuazione dei problemi è semplificata. La topologia a stella inoltre può emulare la topologia a bus e mostra la sua flessibilità al crescere della rete, essendo comodo farla crescere o farla evolvere ad una struttura ad albero. I vantaggi di una topologia a stella sono: • alte prestazioni, • facilità di controllo, • il fuori uso di una stazione non influenza la rete. Gli svantaggi sono: • l'affidabilità è legata al nodo centrale. • Se il mezzo trasmissivo è il cavo, ciò implica la necessità di utilizzarne molto, ma soprattutto anche un maggior costo per la posa del cavo stesso. 131 Topologia ad albero Questo tipo di configurazione può essere rappresentata graficamente nel seguente modo: Figura 1.3 Configurazione ad albero Può essere considerata l'evoluzione della struttura a stella, ovvero a “stella di stelle”. Presenta degli indubbi vantaggi, quali la semplificazione del percorso (esiste un solo itinerario tra due nodi) e ne contiene quindi i costi di cablaggio. Topologia ad anello Nella topologia ad anello, tutte le stazioni sono collegate tra loro tramite linee punto a punto in una caratteristica configurazione circolare, chiusa su stessa. Figura 1.4 Configurazione ad anello La trasmissione avviene generalmente in unico senso, ad esempio quello antiorario. Tutte i nodi prendono parte alla trasmissione: quando una stazione invia sulla linea il proprio pacchetto, questo percorre l'intero anello: ciascuna stazione riceve il pacchetto, 132 lo memorizza, lo rigenera e lo ritrasmette sulla linea successiva. Grazie alla rigenerazione continua del segnale, operata dalle singole stazioni, l'anello può anche avere un'elevata estensione. Al contrario, i limiti di estensione riguardano la distanza massima tra nodo e nodo. Questa soluzione si rivela ottima se vengono usate le fibre ottiche. Il numero di stazioni può variare da poche decine fino a migliaia di unità. Gli svantaggi fondamentali di questa soluzione sono i seguenti: • la lunghezza complessiva del cavo non è minimizzata, • l'affidabilità dell'intero sistema è critica, • l'inserimento di un'eventuale nuova stazione rende necessario interrompere il funzionamento dell' intera struttura. I problemi principali sono proprio gli ultimi due, ossia l'affidabilità e l'inserimento di nuove stazioni. Topologia Lineare (BUS). Nella topologia a bus lineare, c'è un unico cavo che si estende su tutta l'area in cui sono situati i nodi: Figura 1.5 Configurazione lineare I dati viaggiano sul cavo e sono leggibili da parte di tutti. Quindi, la trasmissione di una stazione viene ricevuta da tutte le altre, nonostante possa essere in realtà diretta ad una stazione destinataria. I maggiori vantaggi consistono nella semplicità, nei bassi costi e nell'affidabilità di questa topologia. Non solo, ma è evidente che il guasto di una qualsiasi stazione non provoca la disattivazione dell'intera rete, dato che le stazioni sono passive quando non trasmettono, al contrario di quanto succede nella topologia ad anello, dove ogni stazione deve ricevere, rigenerare e ritrasmettere ogni pacchetto. Oltre ad aggiungere nuove stazioni, si può pensare di collegare varie dorsali, dette segmenti. I principali inconvenienti di una rete lineare sono: 133 • i potenziali problemi di prestazioni dovute all' utilizzo di un solo cavo per tutte le stazioni; • eventuale interruzione del cavo mette fuori uso la rete; • difficoltà nell' individuare i malfunzionamenti; • distanza massima tra le stazioni. Per quanto riguarda i tipi di architettura utilizzabile, si distinguono in base a come si vuole indicare la struttura logica, cioè il modo in cui sono raggruppati, collegati e, fondamentalmente controllati i vari dispositivi che compongono l'impianto. La classificazione avviene quindi in funzione della localizzazione della capacità decisionale del sistema. Si distinguono tre tipi di architetture: • Architettura centralizzata. • Architettura distribuita. • Architettura mista. Nell'architettura centralizzata esiste un'unica unità di decisione anche suddivisa in più unità intelligenti, con diversi livelli gerarchici ed eventualmente distribuite fisicamente. I dispositivi distribuiti in campo, pur potendo essere dotati di intelligenza locale non sono in grado di prendere le decisioni sul da farsi, rimandandole comunque sempre all'unità centrale. I messaggi provenienti dai sensori/comandi sono quindi sempre elaborati dall'unità intelligente centrale che, esaminate tutte le informazioni a sua disposizione, decide cosa, in quale modo e in quali tempi scatenare gli eventi corrispondenti, necessari e programmati. È quindi nell'unità centrale che risiede l'intelligenza per elaborare e gestire le informazioni che viaggiano sul mezzo trasmissivo. Generalmente quindi si semplifica la fase di programmazione dei dispositivi, perchè basta configurare l'elemento master per il funzionamento dell'intero sistema. Nell'architettura distribuita (utilizzata quindi nel sistema ausilio realizzato) tutti i dispositivi sono intelligenti, dispongono direttamente del programma che loro compete e possono quindi elaborare le informazioni che viaggiano sul mezzo trasmissivo: essi sono in grado di riconoscere se l'informazione è indirizzata a loro e decidere ed agire di conseguenza. L'intelligenza dell'elaborazione delle informazioni non è concentrata, o 134 meglio centralizzata in un dispositivo master, ma al contrario è distribuita nei dispositivi in campo. In un'architettura distribuita, i dispositivi vengono detti intelligenti. Perchè un componente diventi veramente intelligente, oltre all'hardware di cui è dotato, bisogna fornirgli i parametri o la programmazione opportuna. Per realizzarla occorre: • definire il nome univoco del dispositivo: ossia è necessario fornire al dispositivo un indirizzo (un nome e un cognome) unico in tutto il sistema. Questa operazione è molto importante perchè identifica univocamente il componente intelligente all'interno della rete. • definire quale funzione deve realizzare e secondo quali modalità. Per esempio prendendo un pulsante dell'impianto elettrico che deve accendere un corpo illuminante, se abbinato ad una pressione normale e breve ne realizza l'accensione o lo spegnimento; se invece si abbina ad una pressione lunga (5-10 secondi), può attivare qualunque altro evento da spegnimento generale, scenario notte-giorno, irrigazione giardino o quanto definito dalla fantasia o dalle necessità. Lo stesso componente è quindi in grado di realizzare più funzioni a seconda della programmazione che gli viene assegnata. Lo stesso componente può essere utilizzato indifferentemente come pulsante per il campanello, oppure come trimmer per variare l' intensità luminosa, oppure come comando passopasso per le tapparelle. Dal punto di vista del committente tutti gli interruttori sono uguali; dal punto di vista impiantistico invece un interruttore si differenzia da un invertitore o da un deviatore per i morsetti che si trovano sul retro del dispositivo, per i cavi che è necessario collegare e per le funzioni che si possono realizzare (accensione o spegnimento di un carico da uno, due o tre punti diversi). Se gli stessi prodotti vengono dotati di intelligenza, la differenza sulle modalità di funzionamento è definita logicamente e realizzata a livello software o direttamente a livello hardware e modificabile in ogni momento. Il dispositivo intelligente è sempre lo stesso dal punto di vista fisico, ma è tuttavia in grado di assolvere a svariate funzioni, purché sia parametrizzato o programmato opportunamente. • Definire con quale componente deve realizzare la funzione specifica (per esempio: il pulsante precedente deve sapere che per accendere una determinata luce deve comandare un determinato terminale di uscita mentre per realizzare la 135 seconda funzione deve dialogare con uno o più altri attuatori). Il sistema deve necessariamente dialogare con tutti i sensori e gli attuatori e conoscere tutte le informazioni. Quest'ultimo passaggio può essere visto come il cablaggio, a livello logico, del sistema che si va a realizzare. Nella soluzione mista invece, abbiamo un cablaggio principale a livello edificio con tipologia di architettura distribuita; si raggiunge una dimensione più piccola chiamata ambiente. L'interno dell'ambiente invece è realizzato con architettura centralizzata e collegamento a stella dei dispositivi di campo. Oggi questa scelta di architettura mista viene sempre più utilizzata. Non avendo raggiunto ancora una standardizzazione dei protocolli di comunicazione si tende a realizzare la dorsale di edificio con una tecnologia consortile (KNX o LON), standard TCP-IP (Cablaggio strutturato) o dorsale proprietaria per andare poi sul campo a stella con protocolli diversi a seconda degli impianti o delle tecnologie utilizzate. L'integrazione viene quindi realizzata attraverso le interfacce che permettono di mettere insieme dispositivi con protocolli di comunicazione diversi. Il protocollo di comunicazione è un elemento distintivo di ogni rete, incluse quelle domestiche, dal momento che rappresenta il linguaggio comune tra diversi dispositivi e sistemi di supervisione. È al tempo stesso discriminante nelle scelte progettuali e installative, sia per gli edifici sia per l'automazione domestica in genere, e la sua tipologia (proprietaria o aperta, standardizzata o meno) può determinare la caratterizzazione e il successo di un installazione. Molte reti in ambito domotico utilizzano un protocollo che rientra nel modello ISO/OSI (open system interconnession - interconnessione di sistemi aperti), valido per tutte le reti locali, ma utilizzabile anche per reti estese, utile per definire la connessione e l'accesso di ogni dispositivo alla rete, ovvero le precise modalità con cui l'informazione fornita dal singolo componente o ad esso inviata, viene codificata, trasformata e istradata sul supporto fisico che costituisce la rete. 136 Questo processo viene descritto secondo una struttura a 7 livelli: 1. Mezzo fisico 2. Collegamento del dato alla rete (Link) 3. Instradamento 4. Trasporto 5. Sessione 6. Presentazione 7. Applicazione Per i protocolli che si adeguano a questo schema è assicurata la possibilità di interconnessione, cioè lo scambio di informazioni fra livelli analoghi, grazie all'impiego di opportuni dispositivi detti ponti o gateway. Una scelta possibile per le reti dedicate è quella di tralasciare alcuni di questi livelli, generalmente dal 3 al 6, semplificando così sia le modalità di codifica dei messaggi, sia il relativo costo di implementazione. Ciò avviene anche per molte delle reti utilizzate in ambito domestico. I protocolli possono essere così distinti: • I protocolli consortili sono il frutto di regole comuni che consorzi di aziende produttrici di dispositivi ed erogatori di servizio si sono date, al fine di immettere sul mercato dispositivi e soluzioni che parlino una lingua comune. Li troviamo utilizzati in architetture di rete distribuita con i vari dispositivi che sono dotati di intelligenza, per la gestione di applicazioni di networking ed applicative. Ogni dispositivo, prima di essere messo sul mercato col marchio del consorzio, dovendo superare dei test di compatibilità, deve essere certificato (dal Consorzio stesso, da Ente esterno abilitato o dall'azienda stessa). Ciò fornisce la certezza che il dispositivo di un determinato produttore può convivere senza problemi con dispositivi certificati di altri produttori. I principali consorzi del settore presenti in Italia ed in Europa sono: Konnex (http://www.konnex.it) LonWork (http://www.lonmark.com). TCP-IP è il protocollo di internet ed è usato tipicamente in tutte le applicazioni della tecnologia delle comunicazioni (ICT Information & Communication Technology). Generalmente in ambito home e building automation, questo protocollo è utilizzato da apparati attivi cioè alimentati direttamente dalla tensione di rete. Gli apparati disponibili, oltre a tutti quelli direttamente legati al 137 mondo reti, dell'informatica e di internet, sono in rapida crescita e spaziano su una varietà di dispositivi come telecamere e telefoni. Come mezzo trasmissivo esso utilizza il cablaggio strutturato descritto in precedenza. • I protocolli proprietari sono quelli implementati direttamente da singoli produttori e fornitori per introdurre soluzioni anche estremamente performanti in termini prestazionali, funzionali o economiche. Va preso atto della loro considerevole diffusione e delle caratteristiche spesso considerevoli di novità, innovazione e prestazioni che molto spesso riescono ad offrire. Molti di questi protocolli, per diffusione sul mercato, hanno raggiunto livelli di standard de facto. I sistemi che li utilizzano poi possono inglobarne uno o più per poter offrire una flessibilità anche molto simile a quella dei protocolli descritti prima. Il vincolo all'acquisto da un unico produttore può essere estremamente variabile da soluzione a soluzione ed arrivare ad essere anche estremamente contenuto, ovvero l'utente ha realmente a disposizione una soluzione aperta che gli permettere di scegliere dispositivi messi sul mercato da diversi costruttori, secondo quella che ritiene essere la soluzione migliore per il suo specifico problema di home o building automation. In tutti i casi quindi, si deve prestare una certa attenzione alla scelta della soluzione tecnologica, considerandone attentamente sia i vantaggi sia gli svantaggi e cercando la salvaguardia delle esigenze del progetto dell'utente a cui è destinata. • Altri protocolli che possiamo citare sono: • il protocollo IRDA, protocollo per la connessione a Raggi Infrarossi, usatissimo dai telecomandi, il cui limite sostanziale è la distanza utile per la connessione e la necessità di visibilità ottica dei dispositivi che devono comunicare. • Il protocollo Bluetooth: è un protocollo per la connessione senza fili di dispositivi elettronici diversi, come stampanti, computers, telefoni cellulari, palmari. La trasmissione consente di raggiungere un massimo di 1 Mbps e la potenza in gioco pari a 1 milliwatt permette un raggio operativo stimato di 10 metri. 138 • Il protocollo UPnP (Universal Plug and Play) si basa su protocolli Web standard per permette a un’ampia gamma di dispositivi di riconoscersi e di comunicare direttamente tra di loro o attraverso apparecchiature intermedie. • Il protocollo Jini è proposto come uno standard industriale aperto che vuole permettere l’esistenza di un ampio numero di dispositivi consumer interoperabili. Jini propone un modello completamente nuovo di networking nel quale non si parla più di computer che eseguono programmi, ma di oggetti che forniscono dei servizi e questi oggetti possono essere periferiche intelligenti ed elettrodomestici. Oggi sul mercato esistono numerosi dispositivi che permettono la realizzazione di impianti domotici. Questi possono essere più o meno specializzati nello svolgere determinate funzioni. Per meglio descriverli è possibile fare un raggruppamento in base alla loro funzionalità, distinguiamo quindi: • dispositivi di comando e sensori • dispositivi d'uscita • dispositivi di controllo e gestione • dispositivi di sistema • le interfacce Dispositivi di comando e sensori I sensori, sono quei dispositivi che hanno il compito di rilevare o misurare delle grandezze fisiche dell'ambiente in cui si trovano. I dispositivi di comando sono particolari sensori in quanto raccolgono informazioni dal campo. Questi possono essere: • dispositivi di comando tradizionali • dispositivi di comando intelligenti Nel primo caso si comprendono tutti quei dispositivi commerciali che non stati appositamente progettati per i sistemi d'automazione, ma che possono essere utilizzati se interfacciati con opportuni dispositivi d'ingresso. Nel secondo caso invece, comprendono tutti quei dispositivi appositamente studiati e progettati per essere integrati in un sistema domotico. Per quanto riguarda invece i sensori veri e propri (quelli che rilevano misure fisiche dal campo) questi possono essere dedicati ad una particolare funzione e quindi avere un 139 determinato compito, come ad esempio misurare la temperatura o valutare la luminosità ambientale, oppure contenere più apparati sensoriali. Come per i dispositivi di comando anche in questo caso si può fare la distinzione tra sensori tradizionali, che hanno bisogno di un ingresso o dispositivo d'ingresso per diventare parte di un impianto domotico, oppure sensori intelligenti già dotati di interfaccie particolari e opportunamente studiati e progettati per poter colloquiare all'interno di una rete, quindi essere un nodo di un sistema integrato. I sensori rappresentano un elemento fondamentale in un sistema domotico, perchè raccolgono le informazioni dal campo e le trasformano in dati che verranno gestiti e a seguito dei quali, verranno svolte azioni da parte dei moduli d'uscita. Vediamo ora alcune tipologie di sensori: - cellula fotoelettrica - contatti magnetici - contatto a fune - rilevatore di presenza - sensore volumetrico - sensore rottura vetro - sensore temperatura - sensore acqua - sensore fumo - sensore gas - sensore crepuscolare - sensore di luce 6.1.1 Dispositivi d’uscita I dispositivi d'uscita sono dispositivi a cui sono collegati direttamente o indirettamente, i carichi elettrici. La differenza principale è data dalla modalità di collegamento al carico elettrico. Inoltre altre differenze sono costituita da: - numero e tipologia di carichi elettrici collegabili(induttivi, resistivi,…) - carico massimo collegabile - forma del dispositivo - funzionalità o parametrizzazione possibile. 140 Per quanto riguarda invece la modalità di collegamento possiamo distinguere: - uscire binarie: attiva o disattiva un carico attraverso un relais o circuito equivalente - uscita dimmer: secondo i modelli regola la tensione o corrente, per regolare il carico direttamente o attraverso un regolatore elettronico - uscita analogica: fornisce una corrente o tensione variabile, generalmente utilizzata per comandare apparecchiature non intelligenti 6.1.2 Sistemi di controllo e gestione Sono dispositivi di gestione del sistema quelli che, per esempio, intervengono sul sistema ad intervalli regolari o a scadenze precise per attivare o disattivare utenze, oppure consentono di effettuare particolari e complesse operazioni di comando/attuazione. Nella sezione controllo invece, possiamo includere quei dispositivi che monitorano ed eventualmente agiscono su utenze/carichi per esempio in caso di un sovraccarico. L'integrazione degli impianti, a seguito della gestione delle informazioni, sia in maniera centralizzata, distribuita o mista, permette la gestione e realizzazione di funzioni anche complesse. Queste vengono identificate spesso con il termine scenari. Gli scenari possono essere semplici, come per esempio lo spegnimento di tutte o parte delle luci, oppure più complessi come per esempio la chiusura di un edificio (chiusura luci, movimentazioni, inserimento sistema sicurezza,…). In generale definiamo scenario un qualsiasi insieme di più azioni, di impianti differenti per il raggiungimento di uno stato in cui si deve configurare l'edificio in determinate occasioni, situazioni oppure a comando. La realizzazione di scenari, generalmente è abbastanza semplificata. A volte esistono apparecchiature dedicate, altre volte invece è l'insieme della parametrizzazione dei dispositivi che ne permette la realizzazione. In un'architettura distribuita generalmente è possibile ottenere degli scenari semplici, attraverso la parametrizzazione dei dispositivi, mentre per scenari più complessi è necessario l'uso di dispositivi fisici che memorizzino i dati salienti (p.e. varie combinazioni e successione di eventi, intervalli temporali e condizioni che devono verificarsi) per realizzarli. In un'architettura centralizzata, invece generalmente la gestione degli scenari avviene tramite un opportuna programmazione della centrale di controllo, non sono quindi necessari dispositivi aggiuntivi per realizzarli. 141 6.1.3 Dispositivi di sistema Alimentatore: L'alimentatore è un dispositivo generalmente indispensabile e serve per fornire energia a tutti i dispositivi che necessitano di potenza elettrica. I vari sistemi presenti attualmente sul mercato alimentano i dispositivi con tensioni comprese tra 12V ed i 30V; tutte le tensioni in gioco sono comunque sempre in sicurezza (SELV-Safety Extra Low Voltage), ovvero nei circuiti è assicurata la protezione contro i contatti diretti in ambienti ordinari se la tensione non supera i 25Vac ed i 60Vcc. La sicurezza PELV garantisce la protezione dei circuiti contro i contatti diretti in ambienti ordinari per tensioni non superiori ai 6Vca ed ai 15Vcc. L'alimentatore viene posto all'interno del quadro generale. Il numero di alimentatori all'interno di un impianto domotico dipende dalle specifiche tecniche e dai limiti imposti dalle case costruttrici. Generalmente questi limiti dipendono dal numero di dispositivi presenti su una medesima linea e dalla distanza massima tollerabile del dispositivo dall'alimentatore. Dispositivi di accoppiamento: Servono per cambiare mezzo trasmissivo all'interno della stessa rete e si utilizzano dei dispositivi chiamati router. Oppure per integrare due linee dedicate a funzioni diverse, per esempio automazione con antiintrusione, si utilizzano dispositivi di interfacciamento per poter far dialogare i due sistemi. Un altro e tipico dispositivo appartenente a questa categoria è l'interfaccia del sistema domotico con il PC; questa può avvenire per esempio tramite una porta seriale ( RS232, RS485) oppure porta USB. 6.1.4 Interfacce e residential gateway L'interfaccia con gli utenti finali rappresenta uno degli aspetti fondamentali dei sistemi domotici, infatti è lo strumento attraverso il quale l'abitante o l'utente dell'edificio interagisce col sistema. I requisiti dell'interfaccia fra l'edificio ed il suo abitante- 142 utilizzatore sono dettati da ragioni di carattere tecnico, ma anche e soprattutto da esigenze di funzionalità e, soprattutto, di facilità d'uso. Quest'ultima caratteristica si può ritenere strategica e cruciale ai fini della diffusione su larga scala delle tecnologie domotiche in ambito residenziale. Si parte, infatti, da un pubblico potenziale abituato ad utilizzare quotidianamente dispositivi di comando estremamente semplici ed intuitivi: dall'interruttore, ai cursori o commutatori di posizione, fino al componente più complesso rappresentato dal telecomando a raggi infrarossi. Non si deve, quindi, sottovalutare l'impatto che può rappresentare l'impiego di visualizzatori e console di comando più complesse, del resto necessarie per sfruttare appieno i vantaggi dell'integrazione domotica. Le soluzioni più significative sembrano, in ordine di complessità crescente, quelle costituite da telecomandi ad infrarossi dedicati alle singole applicazioni (illuminazione, riscaldamento, serramenti) ovvero telecomandi multifunzione, dove è però richiesto un display, cioè la possibilità di interagire in maniera semplice con un video, possibilmente lo stesso televisore domestico. Su un livello di maggiore complessità, si situano invece le interfacce basate su pc che richiedono una maggiore consapevolezza e determinazione nell'uso da parte dell'utilizzatore. Quest'ultima soluzione, destinata comunque ad un pubblico selezionato, può essere resa di più facile impiego col ricorso a dispositivi portatili (quali sono ad esempio i moderni palmari di uso generale o dedicati eventualmente all'uso domestico ed eventualmente distribuiti nei diversi ambienti), o a dispositivi dedicati con speciali potenzialità grafiche e periferiche, quali touch-screen, in grado di presentare in maniera evidente una mappa della casa. Infine, le diverse possibilità di telecomando a distanza suggeriscono l'impiego della linea telefonica e quindi dei terminali telefonici fissi, cordless o portatili come strumento di interfaccia, con ausilio di display (testo o grafico) o con l'ausilio di guida e comandi vocali. In tutti i casi comunque devono essere verificate le modalità operative delle soluzioni proposte poiché, anche le soluzioni più interessanti, possono ottenere una scarsa accettazione per particolari apparentemente insignificanti o non particolarmente graditi. Come si è visto, le reti di comunicazione all'interno di un complesso che si avvale dell'automazione domestica possono essere diverse, e per ciascuna di esse si presenta la necessità di comunicare con una rete esterna, sia per implementare opzioni di 143 telecomando dei dispositivi e di sorveglianza, sia per accedere a flussi di informazioni (voce via telefono, dati per Internet, trasmissioni analogiche o digitali, per intrattenimento). È auspicabile che il punto di comunicazione con l'esterno sia unico ed opportunamente protetto e sicuro. Il punto di comunicazione della rete domotica verso l'esterno è costituito da un dispositivo in grado di far convergere i diversi flussi di dati, instradandoli nel rispetto dei vari protocolli verso l'esterno. A questo componente, che ha necessariamente una configurazione variabile con le esigenze specifiche, si da il nome di Residential Gateway, o interfaccia residenziale. Grazie ad esso la rete domestica, che si può classificare quando isolata come una rete locale (LAN, Local Area Network), diventa un elemento di una più vasta rete in area estesa (WAN, Wide Area Network). Le interfacce attualmente presenti sul mercato sono proposte generalmente da costruttori e installatori di linee telefoniche e linee dati, che sono i primi interessati commercialmente a diffondere le rispettive tecnologie in forma integrata. Esse nascono da esigenze dell'automazione d'ufficio e, in secondo luogo, si rivolgono al mondo dell'automazione dell'edificio. Ma è proprio grazie alla possibilità di un'estesa diffusione dell'automazione domestica, comprendente le comunicazioni a larga banda per voce e intrattenimento, che possono svolgere un ruolo chiave nel superamento della molteplicità dei protocolli. Tra i dispositivi di questa categoria rientrano per esempio i comunicatori GSM, le interfacce tra BUS e Internet, Interfacce telefoniche, etc. 6.2 Il Mercato Dopo aver fornito i principi fondamentali e i componenti alla base di un sistema domotico attuale, proseguiamo fornendo alcune informazioni riguardanti i produttori di tecnologie relative a questo campo presenti oggi sul mercato. Analizzando la documentazione prodotta delle aziende del settore, cresce continuamente il numero di dispositivi, sia da un punto di vista quantitativo, ma soprattutto qualitativo. L'offerta si sta specializzando, mettendo così a disposizione una vasta gamma di prodotti che possono soddisfare le sempre più complicate ed eterogenee esigenze del cliente finale. Abbiamo visto che esistono protocolli standard (riconosciuti o de facto), 144 protocolli proprietari, protocolli standard nel mondo del ICT, protocolli standard industriali. Lo scenario è abbastanza diversificato sotto questo aspetto, e nonostante il continuo crescere del processo di standardizzazione, sono presenti sul mercato molti protocolli di comunicazione diversi e conseguentemente tecnologie differenti. Nel mondo della domotica possiamo comunque fare una distinzione tra soluzioni consortili e soluzioni non consortili. I Consorzi nel settore della domotica sono caratterizzati da: - essere conforme alle Norme - avere le specifiche disponibili pubblicamente - poter accettare apparecchiature multi-costruttore - garantire l'interoperabilità tra le apparecchiature - deve assicurare l'espandibilità dell'impianto con apparecchi di diversi costruttori. Oltre alle soluzioni di tipo Consortile, si sono prese in considerazione anche altre soluzioni che trovano spazio nel mercato italiano e che rispondono alla domanda di prodotti e soluzioni sia nel settore dell'home automation che della building automation. Spesso queste soluzioni adottano protocolli di comunicazione detti Proprietari oppure sono modifiche di protocolli standardizzati. 6.2.1 Il sistema KONNEX KNX è un sistema di controllo degli edifici decentralizzato, pilotato da eventi con trasmissione dati seriale per le funzioni operative di controllo, monitoraggio e segnalazione. Tramite una linea di trasmissione comune, tutti gli apparecchi collegati possono scambiarsi informazioni. La trasmissione dati avviene in modo seriale secondo regole stabilite: il protocollo di trasmissione. Le informazioni da trasmettere sono organizzate nel cosiddetto telegramma ed inviate da un apparecchio (il mittente) ad uno o più apparecchi (il/i destinatario/i). Ogni destinatario conferma la ricezione del telegramma; se ciò non avviene, l'invio del telegramma viene ripetuto. Se la ricezione del telegramma non viene confermata, la procedura di invio viene interrotta e l'errore viene registrato nella memoria del trasmettitore. I telegrammi vengono modulati su tensione continua; uno zero logico viene trasmesso come impulso mentre l'assenza di impulsi viene interpretata come un 1 logico. I singoli dati dei telegrammi vengono trasmessi in modo asincrono. La 145 trasmissione viene comunque sincronizzata grazie ai bit di avvio e stop. L’accesso al bus come mezzo di comunicazione fisico comune per trasmissione asincrona deve essere comunque regolato in modo chiaro. Il sistema KNX impiega a questo scopo il protocollo CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance); si tratta di un metodo di accesso casuale al bus esente da collisioni senza peraltro diminuire la portata dei dati sul bus. Tutti gli apparecchi sono permanentemente in ascolto del bus; se un apparecchio bus vuole inviare un telegramma deve dapprima controllare che nessun altro apparecchio stia già trasmettendo (Carrier Sense). Se il bus è libero ogni apparecchio collegato può iniziare la procedura di invio (Multiple Access). Se due apparecchi iniziano a trasmettere contemporaneamente, prevale l’apparecchio che ha priorità più alta (Collision Avoidance), mentre l'altro apparecchio interrompe la procedura per riavviarla successivamente. Se entrambi gli apparecchi hanno la stessa priorità, prevale quello con indirizzo fisico inferiore. Esistono fondamentalmente tre tipi diversi di configurazioni realizzabili al momento dell’istallazione: S-Mode (System Mode) adatta ad integratori di sistema ed orientata all’implementazione di funzioni complesse. Tutti i componenti "System Mode", connessi alla rete, possono essere indirizzati tramite un unico tool software (ETS), comune a tutti i costruttori, che consente di programmare, configurare e stabilire le connessioni. Mediante ETS è possibile programmare ciascun componente in base alla funzione cui è destinato in un progetto. Consente un elevato livello di flessibilità sia dal punto di vista funzionale sia riguardo ai collegamenti. A-mode (Automatic mode): pensata per permettere all’utente finale la connessione automatica di nuove applicazioni, riguarda prodotti destinati al mercato consumer. I componenti "Automatic mode" si avvalgono di una modalità di configurazione automatica che adatta i loro link di comunicazione a quelli di altri componenti "Automatic mode" che si trovano nella rete. Ciascun componente contiene un numero fisso di parametri da impostare ed una libreria con le istruzioni su come far colloquiare i componenti. E-mode Configurazione semplice (Easy), realizzata senza l'uso di un PC, in genere si utilizzano dispositivi specifici chiamati configuratori oppure semplici dip-switches presenti nei dispositivi; i dispositivi E-Mode realizzano funzioni limitate, ma comunque adatte per applicazioni di Home Automation; per la loro configurazione è sufficiente 146 una formazione minima di base facilmente acquisibile da qualsiasi installatore. Quindi E-Mode è una tipologia di installazione per impianti di piccole e medie dimensioni, dove non si richiedono soluzioni complicate; le pecularietà dell’S-mode, invece, sono: l’essere liberamente programmabile; possedere un unico tool di progettazione ed avere alte prestazioni e funzioni; è adatto a professionisti con una buona formazione. Figura 1.6 Sistema KONNEX, schema di principio 6.2.2 Sistema LONMARK Sviluppata da Echelon, la tecnologia Lonmark è stata fatta propria dall'EIA (Electronic Industries Alliances) ed integrata nello standard americano EIA-709. Lo standard LonWorks è uno standard aperto ovvero accessibile a tutti ed il cui uso non prevede il pagamento di alcuna royalty. I dispositivi Lonworks comunicano attraverso il protocollo LonTalk, basato sull'implementazione di tutti i livelli dello schema ISO/OSI. I nodi della rete Lon hanno come componente principale il Neuron chip (ci ricorda il microcontrollore utilizzato nel nostro sistema ausilio), un circuito integrato che integra tre processori di cui due dedicati alla gestione del protocollo Lontalk. Ogni nodo è costituito da un Neuron Chip, un transceiver ed un circuito elettronico specifico per l'applicazione. Echelon ed i produttori dell'integrato controllano il firmware dei primi due processori, mentre il progettista può programmare il terzo attraverso, per poter svolgere le funzioni a cui il nodo è dedicato. Il protocollo LonTalk prevede l'uso di variabili SNVT ( Standard Network 147 Variables Types), cioè tipologie di variabili atte a rappresentare una grandezza. L'utilizzo e la gestione di queste variabili permette e facilita l'interoperabilità dei diversi dispositivi che devono utilizzare le stesso formato di variabili, con conseguente diminuzione della complessità dei messaggi. I principali elementi della tecnologia LonWorks sono rappresentanti dunque da: • il NeuronChip che è il cuore di ogni nodo LonWorks può gestire i dispositivi I/O ed eseguire un codice scritto dall'utilizzatore. • il protocollo LonTalk è un protocollo di comunicazione aperto basato sul modello di riferimento OSI. Definisce un modo standard per lo scambio di informazioni tra i nodi. Nel 1999 l'ANSI l'ha ratificato come standard ufficiale: ANSI/EIA 709.1 ± A ± 1999. • il transceiver: un dispositivo che realizza la connessione elettrica del Neuron Chip ai mezzi di comunicazione. • le interfacce di rete che sono usate per connettere un Computer alla rete LonWorks. • gli applicativi (Tools) sono necessari per sviluppare, mettere in opera e mantenere le reti. A tale categoria appartengono il LonBuilder Developer's Workbench, il NodeBuilder Tool, il Lon Maker per Windows etc. Figura 1.7 Sistema LONMARK, schema a blocchi 148 I sistemi Lonmark e KNX descritti brevemente nelle righe precedenti, rappresentano proprio dei sistemi, questo prevede che i componenti utilizzati possono provenire da diversi fornitori, a patto che vengano rispettate le specifiche dei protocolli. Per quanto riguarda le case produttrici di veri e propri dispositivi organizzabili in sistemi domotici, la principale sul mercato Italiano è senza dubbio la BTicino. 6.2.3 BTicino[21] Offre sostanzialmente il sistema componibile MYHOME realizzato tramite l'utilizzo della stessa tecnologia impiantistica, basata sul bus digitale, che consente di creare una sinergia tra i vari componenti del sistema in funzione delle scelte e delle esigenze del cliente. Il sistema MYHOME rende disponibile le seguenti funzionalità: - Automazione luci e scenari - Automazione tapparelle - Diffusione Sonora - Antifurto - Termoregolazione - Gestione energia - Citofonia e videocitofonia digitale - Telefonia Integrata - Cablaggio Multimediale - Dispositivi di controllo Figura 1.8 Sistema Myhome 149 Il supporto fisico è costituito da un cavo ad una coppia ritorta e non schermata, al quale sono connessi in parallelo tutti i dispositivi del sistema. In casi particolari è possibile estendere un impianto filare con opportune interfacce radio. In questo caso i dispositivi impiegano la stessa tecnologia utilizzando come supporto di comunicazione le onde radio anziché la connessione al bus. In realtà negli ultimi anni la proposta tecnologica sta subendo una crescita costante, garantendo un’ampia scelta all’utenza interessata. La domotica però, rimane ancora relegata ad un settore di mercato dedicato a soluzioni abitative di livello medio-alto, destinate a utenti generici. Le soluzioni sono molto spesso ancora molto costose (il sistema MyHome completo di tutte le sue parti e funzionalità raggiunge il costo di 20000 euro!), non permettendone un’adeguata distribuzione all’interno della maggioranza delle utenze. La progettazione/realizzazione del sistema ausilio presente e descritta a fondo nei capitoli precedenti in questo lavoro, si propone di prototipizzare una possibile soluzione che, sicuramente dopo un adeguato lavoro di sviluppo e perfezionamento, possa fornire una risorsa dedicata al riempimento di questa lacuna all’interno del mercato, arricchendolo di soluzioni customizzate per gli utenti diversamente abili. Nella prima parte del capitolo infatti, è stata riportata una descrizione dei principi, oramai abbastanza consolidati, che vengono seguiti dai diversi sistemi domotici presenti sul mercato. Da quanto detto, si percepisce come non ci sia ancora una formalizzazione concettuale dedicata all’utenza disabile, che permetterebbe di individuare le necessità di queste persone nei confronti di un impianto di tipo domotico. Parlando di interfaccia, le caratteristiche predominanti rimangono ancora quelle legate alla semplicità d’uso, senza considerare come fondamentale l’accessibilità, indispensabile nei casi considerati. Per questi motivi, il sistema realizzato, concepito proprio per utenti diversamente abili, segue le linee guida dell’accessibilità, della bidirezionalità comunicativa customizzata alle esigenze, dei costi contenuti e della semplicità istallativi, garantendo la preservazione massima degli attuatori presenti già nell’abitazione. Per concludere quindi, diciamo che un impianto domotico potrebbe essere concepito e realizzato, col fine di prediligere il miglioramento delle qualità di vita è legata ai seguenti aspetti: 150 • l'invecchiamento della popolazione rappresenta certamente il fenomeno demografico più rilevante degli ultimi anni a causa delle sue molteplici conseguenze di natura economica e sociale. Allo stesso tempo tale invecchiamento solleva problemi notevoli sul piano dell'assistenza sociosanitaria. I servizi di telesoccorso e di teleassistenza costituiscono in tale senso, un notevole mercato potenziale perché rappresentano un interessante segmento del mercato dell'Home Automation; • miglioramento nell'autonomia delle persone disabili attraverso l'automatizzazione, il controllo e la gestione dell'edificio tramite interfacce studiate per particolari inabilità quali, ad esempio, telecomandi a controllo vocale o interfacce telefoniche. • alleviamento delle condizioni di debilitazione di un malato, anziano, disabile, realizzato con strumenti che da un lato permettano di ridurre la fatica fisica e aumentare la mobilità, dall'altro facilitano l'accesso ai mezzi di comunicazione (ad esempio strumenti per la comunicazione a distanza audio e video con altre persone) o più semplicemente svolgano un'azione di intrattenimento 151 7. UNA POSSIBILE APPLICAZIONE 7.1 Caratterizzazioni Arrivati a questo punto, possediamo tutti gli elementi necessari a caratterizzare e realizzare un sistema ausilio domotico completo. Dalle considerazioni fatte nel capitolo precedente, possiamo affermare che il sistema che ci si propone di realizzare avrà le seguenti caratteristiche: 1. sarà un sistema a intelligenza distribuita; 2. avrà un’architettura a stella; 3. utilizzerà la trasmissione in radiofrequenza come mezzo trasmissivo; 4. sarà caratterizzato da un protocollo comunicativo di tipo seriale; Per chiarezza, riassumiamo brevemente quanto sviluppato fino a questo momento: abbiamo realizzato l’hardware che andrà a caratterizzare un circuito di controllo dotato dell’intelligenza sufficiente a comandare l’attuatore e a verificarne lo stato. Dal lato utente, disponiamo di un’host, rappresentato da un personal computer, potenziato nella sua accessibilità. Proprio questi due elementi costituiscono le parti principali del sistema ausilio. 152 Il PC costituisce il centro della struttura a stella descritta precedentemente, strutturata come da schema : Figura 2.1. Configurazione a stella. Il nodo centrale è rappresentato ovviamente dall’host che gestisce le unità periferiche collegate agli attuatori. Questa configurazione, come detto, permette una maggior robustezza, possibili danni alle unità periferiche non influenzano infatti la rete nel suo insieme, il controllo è semplificato dipendendo solo dall’unità centrale, garantendo inoltre alte prestazioni. Dalla natura stessa delle unità periferiche deriva il carattere distribuito delle capacità computazionali. Ogni circuito di controllo, realizzato su base microcontrollore Microchip, possiede una propria intelligenza che ne permette la comunicazione sia con il centro di controllo (l’host) che con l’applicativo collegato a valle. Ogni unità periferica, concepita per ricevere ed inviare segnali conformi al protocollo EIA RS-232 (a riguardo consultare la prima sezione), è fornita del noto convertitore EZL-80 che gli permette di implementare una trasmissione wireless che soddisfi le specifiche del protocollo Wi-Fi. Questo permette un decentramento ottimale delle unità periferiche che possono essere distribuite, senza la posa e il cablaggio di fili aggiuntivi, all’interno dell’abitazione, in corrispondenza dei dispositivi domotici e dei gruppi per l’illuminazione. L’utente invece potrà sempre controllare lo stato dei dispositivi dalla Power Station che, se realizzata tramite i recentissimi ultra mobile pc (Samsung Q1 153 Ultra, Asus EEE PC) sarà portatile e facilmente installabile su un eventuale carrozzina utilizzata dall’utente stesso. I componenti principali sono quindi tutti definiti, quello che manca nella trattazione è legato al lato attuatore e al feedback che deve essere captato in qualche modo dal circuito di controllo. Di seguito procederemo proprio all’elaborazione di una delle possibili applicazioni. In particolare, lo scenario immaginato prevede la presenza di utenza con disabilità visiva o motoria tale che, il soggetto in esame, non sia né in grado di accendere le luci in modo autonomo, né di ricevere un ritorno sensoriale appropriato per determinare se le stesse luci sono accese o meno. I costituenti necessari per realizzare questo tipo di applicativo sono fondamentalmente due: • Un gruppo luminoso di vario genere, alimentato comunemente con alimentazione di rete. • Un circuito progettato e realizzato ad hoc per produrre un segnale adeguato in corrispondenza dell’accensione delle luci. Di seguito quindi descriveremo in dettaglio questi due componenti, per poi descrivere il funzionamento del sistema ausilio nel suo complesso. 7.2 L’applicativo Come applicazione si è quindi scelto di controllare lo stato dell’illuminazione, in particolare, l’accensione e lo spegnimento di una generica lampada a piantana. La lampada è stata scelta tra le più comuni, proprio per testare il grado di adattabilità del circuito di controllo. Come già detto, è a livello dell’alimentazione che avviene la regolazione da parte del circuito, in questo modo, sarà facile poter implementare un controllo su un generico applicativo dotato di un’alimentazione esterna. Lo sviluppo di questa parte ha seguito in realtà una certa evoluzione. Nelle prime fasi, per semplicità è stato realizzato un circuito su basetta millefiori che comprendeva lo stadio di controllo a transistore bipolare, il relais e una semplice lampadina da 10W (foto), che potesse 154 essere alimentata efficacemente da 1A a 12V forniti da un comune alimentatore. In questo modo, le prime prove, prevedevano l’utilizzo della medesima alimentazione utilizzata per il circuito di controllo. L’immagine seguente illustra proprio questa soluzione prototipale, molto efficacie e funzionale per verificare semplicemente il funzionamento dello schema di principio utilizzato. Figura 2.2. Prime fasi di sviluppo: l'attuatore. Il circuito comprende lo stadio di controllo transistor, il relais e una lampada da 10W alimentata a 12V. Lo step successivo è stato quello di adattare i risultati ottenuti in fase di test, ad una soluzione che potesse avvicinarsi maggiormente ad un’idea definitiva di applicazione. A questo scopo è stata utilizzata una normale lampada da tavolo alimentata tramite la rete. Nelle figure seguenti, sono evidenziate le modifiche minime da improntare per rendere possibile il controllo. Ciò che è necessario è interporre il relais, controllato tramite stadio transistor (spostato in questa fase sul circuito di controllo) dal microcontrollore, tra la lampada e la rete, così da realizzare semplicemente il controllo desiderato del lato attuatore. Per fare ciò si connette il conduttore di fase al relais, come illustrato nello schema seguente, mentre il conduttore di terra viene mantenuto integro. In particolare, il circuito relais comprende gli ingressi necessari per realizzarne il collegamento allo stadio transistor (ingressi 2 e 3) e un’uscita tramite la quale vengono trasportati i 12V necessari all’alimentazione del circuito di feedback descritto tra poco. Questo tipo di 155 collegamento potrebbe sembrare estremamente artificioso, in realtà permette di minimizzare il numero di alimentatori utilizzati. Una soluzione più immediata, ma sicuramente più complessa e costosa, prevedrebbe di ottenere le alimentazioni necessarie, lato attuatore, a partire dalla rete. Questo presuppone la realizzazione di un trasformatore dedicato per ricavare dai 220V in alternata i 12V in continua. Tale approccio è stato tralasciato, la costruzione di un trasformatore non è infatti di interesse per lo sviluppo del progetto in esame. Per questo motivo si è preferito attingere, dove necessario, all’unica alimentazione a 12V utilizzata, ovvero quella presente sul circuito di controllo. Figura 2.3. Circuito Realais lato saldature installato sulla lampada controllata. In evidenza l'interposizione del relais all'alimentazione della lampada e gli ingressi/uscite che collegano l’attuatore agli altri componenti. 156 Figura 2.4. Un attuatore generico. Il circuito relais si interpone semplicemente tra la lampada e l'alimentazione. Il controllo da parte del circuito di controllo avviene a questo livello. Passando dalla fase di test a quella applicativa vera e propria, lo stadio di controllo a BJT viene spostato sul circuito di controllo, mentre il circuito relais rimarrà lato attuatore come da figura. Lo schema seguente, ottenuto col solito cad, evidenzia proprio la divisione di questi due stadi circuitali. Figura 2.5 diagramma del circuito relais. Il riquadro nero racchiude i componenti del circuito relais che viene connesso alla lampada, all'alimentazione di rete e riceve in ingresso, dal circuito di controllo, i 5V e i 12V. Nel riquadro rosso, lo stadio di controllo a transistor, che nelle fasi di sviluppo viene integrato nel circuito di controllo. 157 La spiegazione di questa separazione risiede nell’analisi delle diverse alimentazioni utilizzate. Mentre infatti lo stadio transistor necessita dei 12V e 5V, disponibili per altro sul circuito di controllo (consultare la sezione corrispondente nel capitolo riguardante il Circuito di controllo), il relais dovrà essere collegato alla tensione di rete, dovendo realizzare l’interruttore controllato in tensione che determina l’accensione o lo spegnimento della lampada utilizzata. In questo modo otterremo una separazione della circuiteria alimentata a tensione di rete, da quella di controllo, alimentata a basse tensioni. È utile sottolineare che, per avere un adeguato isolamento galvanico, proponiamo di aggiungere un optoisolatore (tipo ISO100) capace di realizzare una separazione efficace dei due stadi, a scopo di sicurezza da guasti provenienti dal contatto tra le tensioni di rete e le parti low voltage (essenzialmente il circuito di controllo in logica TTL). Ci siamo già occupati dello stadio a transistor e dello schema corrispondente; per quanto riguarda il relais, è stato montato su una basetta millefori improntata in modo da disporre di ingressi e di uscite. I connettori presenti sulla basetta permettono i seguenti collegamenti: • Il numero 1 e il numero 2 servono a fornire 12V e 5V al relais e consentono di realizzare il circuito per il controllo in tensione della bobina; • Il numero 3 fornisce 12V per l’alimentazione del circuito di feedback. Questo tipo di collegamento potrebbe sembrare estremamente artificioso, in realtà permette di minimizzare il numero di alimentatori utilizzati. Una soluzione più immediata, ma sicuramente più complessa e costosa, prevedrebbe di ottenere le alimentazioni necessarie, lato attuatore, a partire dalla rete. Questo presuppone la realizzazione di un trasformatore dedicato per ricavare dai 220V in alternata i 12V in continua. Tale approccio è stato trascurato, non essendo di interesse, per lo sviluppo del progetto in esame, la costruzione di un trasformatore. Pertanto si è preferito attingere, dove necessario, all’unica alimentazione a 12V utilizzata, ovvero quella presente sul circuito di controllo. Di seguito sono riportate alcune immagini riguardo le fasi di test del collegamento tra l’applicativo ed il circuito di controllo. 158 7.3 Il circuito di Feedback I componenti progettati e assemblati fino a questo momento realizzano un sistema di controllo per un generico impianto di illuminazione domestico. Ricordiamo che tale controllo dovrà essere messo a disposizione di un utente afflitto da grave disabilità visiva o, in aggiunta, da limitazioni dettate da handicap fisici tali da non garantire al soggetto la capacità di verificare se le stesse luci sono accese o spente. In tali condizioni, il sistema ausilio deve essere capace sia di controllare l’illuminazione, sia di fornire consono ritorno all’utente finale. A questo livello entra in gioco il circuito di feedback, concepito proprio per “comunicare” al PIC16F628 se l’evento desiderato (accensione della luce) si verifica a seguito della richiesta dell’utente oppure no. L’elemento fondamentale, che garantisce la realizzazione di un adeguato feedback per un’applicazione del genere, deve necessariamente essere in grado di rispondere a significative variazioni della luminosità ambientale. A questo scopo è stato realizzato hardware basato sul TSL250 della Texas Instruments[22]. Figura 2.6 TSL250. Schematizzazione dal datasheet. 159 Figura 2.7 Pin e dimensioni reali del TSL250 L’integrato possiede tre piedini, il numero 1 viene collegato a massa, il numero 2 all’alimentazione e il numero 3 fornisce la tensione di uscita proporzionale all’intensità di radiazione luminosa incidente sul fotodiodo. La tensione di alimentazione VDD deve essere compresa tra i 3V e i 10V, con valori tipici di 5V. Questo componente è fondamentalmente un sensore ottico light-to-voltage; al suo interno contiene un fotodiodo e un amplificatore a transimpedenza con resistore di feedback da 16MΩ. La tensione fornita in output è direttamente proporzionale all’intensità luminosa (irradianza) presente sul fotodiodo. Per chiarire questo concetto, riportiamo di seguito diagramma funzionale a blocchi estratto dal datasheet dell’integrato. Figura 2.8.Schema a blocchi del TSL250 160 L’incidenza di radiazione luminosa provoca la polarizzazione inversa del fotodiodo con conseguente passaggio di corrente I, come illustrato in figura. A questo punto, risolvendo la maglia avremo: • VI − ZI − VO = 0; Da questa relazione otteniamo semplicemente (VI = 0) che VO = ZI. Quindi la tensione di uscita è proporzionale alla corrente che scorre nel fotodiodo che è data dalla somma di due contributi: • La corrente del diodo espressa dalla relazione di Shokley; • iph = σP, corrente fotogenerata nella regione di svuotamento (è una corrente inversa e dipende dalla potenza ottica dell’illuminazione incidente); La relazione che permette di calcolare la corrente è quindi la seguente: ⎛ ηVV ⎞ T ⎜ I = i0 e − 1⎟ − i ph ⎜ ⎟ ⎝ ⎠ Dove: • VT è il valore equivalente in Volt della temperatura, che in caso di temperatura ambiente vale 25mV • I0 è la corrente inversa di saturazione (detta corrente di buio) • η è il fattore di idealità della giunzione e dipende dal materiale semiconduttore (η = 1 per Ge; η = 2 per Si) Da questa relazione è quindi evidente che la corrente (e quindi la tensione di uscita) dipenderà dalla radiazione incidente. Semplificando, questo componente si comporta come un resistore variabile: all’aumentare della luminosità incidente sul fotodiodo, la resistenza diminuisce e quindi diminuisce la caduta di tensione tra alimentazione e uscita. Al limite, quando ho irradianza massima, il TSL250 fornisce in uscita una tensione che tenderà al valore di VDD. I grafici seguenti, estratti dal datasheet del componente, descrivono alcune delle caratteristiche salienti dell’integrato considerato, ritenuto consono alla soluzione circuitale proposta. 161 Figura 2.9. In alto: relazione tra l’irradianza e la tensione d’uscita. In basso: relazione tra tensione di alimentazione e tensione d’uscita. Il primo evidenzia il legame di tipo logaritmico esistente tra la tensione di uscita e l’irradianza incidente sul fotodioido. Il secondo sottolinea come, la relazione esistente tra la tensione di alimentazione e quella di uscita, per un valore fissato di irradianza, sia di tipo lineare. 162 Questo particolare fotorilevatore garantisce inoltre una Responsività massima (rapporto tra la corrente prodotta e la potenza ottica incidente) in corrispondenza di radiazione avente lunghezza d’onda appartenente allo spettro del visibile. Figura 2.10. Responsività in funzione della lunghezza d’onda. Proprio questa caratteristica permette performance elevate in un’applicazione come quella descritta. Figura 2.11. Tensione d’uscita normalizzata in funzione dell’angolo di incidenza. 163 Il voltaggio prodotto in uscita dipende inoltre dall’angolo di incidenza della luce calcolato rispetto all’asse ottico del fotodiodo. In particolare la massimizzazione del valore della tensione è ottenuto in corrispondenza di un angolo di 0° rispetto all’asse. Questo risultato fornisce indicazioni sulla disposizione del circuito di feedback rispetto alla fonte luminosa proveniente dall’attuatore. A questo punto vediamo qual è il contesto circuitale nel quale viene inserito il TSL250, così da realizzare lo stadio di feedback. 164 Figura 2.12. Schema Orcad dello stadio di feedback a fotodiodo 165 12V R11 7k R10 10k T SL250 GND VDD Vout 1 2 3 3 2 - + U6 R6 200k LM311 R5 14k G OUT B/S 8 5 V+ B V4 1 7 6 R8 680 R7 1.5k FEEDBACK al PIC D1 R9 680 Figura 2.13. Il circuito di feedback a fotodiodo, vista lato componenti. Prima di descrivere i singoli componenti, anticipiamo brevemente che la tensione prodotta dal fotorilevatore, legata alla radiazione luminosa incidente, viene comparata ad un livello di riferimento, appositamente dimensionato. Se supera questo riferimento, il circuito produce una tensione in uscita (utilizzabile dal microcontrollore), se invece la tensione non supera il valore di soglia (illuminazione insufficiente), non viene prodotta alcuna tensione in uscita, ma si verifica l’accensione di un diodo led di segnalazione. Vediamo dall’analisi particolare dei componenti come sia possibile tutto ciò. Si è già parlato del TSL250 che realizza la conversione irradianza-tensione e che viene usato da fotorilevatore. L’altro integrato fondamentale per il funzionamento dell’hardware è il comparatore LM311[23]. Questo IC è, come detto, un comparatore integrato molto versatile che fornisce ottime prestazioni per quanto riguarda sia il tempo, sia la precisione della risposta. Esso può essere alimentato con alimentazione duale ±15V, oppure con alimentazione unipolare da 5V a 30V, ciò consente una notevole semplificazione dei circuiti di alimentazione. 166 Figura 2.14. Schematizzazioni tratte dal datasheet del LM311. Un altro aspetto molto interessante è costituito dal fatto che il 311 può pilotare direttamente circuiti digitali TTL, CMOS, MOS indipendentemente dai valori dell'alimentazione Questo componente è interpretabile come un operazionale seguito da un BJT con collettore ed emettitore aperti. Quando l'ingresso IN+ è più positivo dell'ingresso IN-, il transistore di uscita è in interdizione (OFF). Quando l'ingresso IN+ è più negativo dell'ingresso IN-, il transistore di uscita è in saturazione (ON). Il terminale del collettore deve essere collegato, tramite un'opportuna resistenza, ad una sorgente di alimentazione positiva (con un valore massimo di 40V rispetto al terminale VCC). Il terminale di emettitore viene connesso normalmente a massa. La struttura a collettore aperto consente anche di collegare più comparatori in configurazione Wired-OR, quando si vuole implementare più operazioni di confronto. Altra particolarità del 311 è la presenza dell'ingresso di strobe (terminale 6, indicato con B/S, per bilanciamento e strobe). Il piedino di strobe consente di abilitare o disabilitare il funzionamento del comparatore. Quando lo strobe è a livello alto, fluttuante o collegato a VCC, il comparatore funziona normalmente. Quando lo strobe è basso, collegato a massa attraverso una resistenza che limiti la corrente a 3 – 5 mA (in genere di 10 KΩ ), l'uscita rimane a livello alto, indipendentemente dai segnali presenti sugli ingressi. Tale caratteristica consente di effettuare comparazioni di segnali in sincronismo con determinati stati di un sistema o con temporizzazioni particolari. Il piedino 6, collegato al piedino 5 con un trimmer il cui cursore è collegato a +VCC, consente di regolare l'offset del comparatore. 167 Di seguito riportiamo, contenuta nel riquadro in rosso, la parte del circuito che realizza la comparazione dei livelli di tensione. Figura 2.159. Nel riquadro in rosso il comparatore LM311 e i relativi collegamenti. In pratica, la tensione di riferimento è quella misurata nel punto Vo ed è assegnata tramite un partitore di tensione resistivo, infatti dall’analisi dello schema è immediato rilevare che: • Vo = R6 12V R6 + R5 Il segnale in ingresso VIN, proviene direttamente dal TSL250 e sarà pertanto legato al livello di luminosità che incide sull’IC. Se la tensione di ingresso sul terminale V+ supera la soglia, dimensionata opportunamente, l’operazionale produce in uscita una tensione prossima alla +Vsat (che coincide con +VCC=5V nel nostro caso). Questo provocherà passaggio di corrente dal terminale alimentato a 12V verso l’uscita destinata al microcontrollore che riceverà quindi un segnale in ingresso quando la luminosità provoca il superamento della tensione soglia Vo. Al contrario, se la luminosità non è sufficiente a produrre una tensione tale che venga superato il valore di riferimento, l’OPAMP produce in uscita una tensione prossima al valore −Vsat (che tende al valore di alimentazione −VCC=0V ), determinando passaggio di corrente nel ramo del diodo led e 168 provocandone di conseguenza l’accensione. Questo evento viene preso come segnale di luminosità inferiore alla soglia di tensione fissata in modo opportuno. Proprio la “taratura” della tensione di riferimento è cruciale per ottenere un comportamento opportuno del feedback. Lo scopo dello stadio circuitale analizzato è, infatti, quello di produrre un segnale significativo solo nel momento in cui il gruppo luminoso, controllato dall’utente a mezzo del sistema ausilio, viene effettivamente acceso, non considerando l’eventuale aumento della luminosità ambientale come significativa (onde evitare messaggi di “luce accesa” in caso di incremento della sola luminosità ambientale). Figura 2.16. Un particolare del circuito di feedback. Per discriminare tra queste possibili configurazioni sono state effettuate misurazioni sul TSL250 per verificarne il range di tensione presentata in uscita, al variare delle condizioni di luminosità. Gli scenari considerati sono tre: • presenza di luce ambientale: dove con ambientale si intende la luce artificiale prodotta da un gruppo luminoso non puntato direttamente sul fotodiodo, in aggiunta alla luminosità proveniente dall’ambiente esterno (luce solare); • assenza di luce sia ambientale che artificiale; • luce diretta puntata sul fotodiodo: questa configurazione simula proprio la situazione nella quale il circuito deve produrre il feedback desiderato. 169 Le misure sono state compiute con un normale tester, tramite il quale è stato possibile misurare la tensione presente sul pin numero 3 dell’IC Texas; l’integrato è stato alimentato tramite un normale alimentatore stabilizzato a 5V (VDD), i risultati sono riportati nella seguente tabella. Luce Ambientale Luce Assente Luce Diretta VDD 5V 5V 5V VO 2,8V 0,14V 4.6V Figura 2.17. Tensione d’uscita al variare del livello luminoso Dai dati ottenuti è facile discernere che, allo scopo di garantire un funzionamento in situazioni che si avvicinino il più possibile a quella di un uso comune, la soglia di tensione che il comparatore utilizza da riferimento dovrà avere un valore compreso tra i 2,8V (presenza di luce ambientale) e i 4,6V (illuminazione diretta). Per ottenere il valore di tensione voluto, basta agire scegliere in modo opportuno le resistenze di partitore, R5 e R6. In particolare, fissato R5, calcoleremo R6 (un trimmer in realtà), variando il quale si potrà adattare il comportamento del circuito in base a cambiamenti delle condizioni di luminosità ambientale. Per quanto riguarda la scelta del riferimento, il valore di 4V è stato considerato opportuno onde evitare che scenari di luce ambiente particolarmente forte vengano confusi con un’illuminazione diretta proveniente dall’attuatore vero e proprio. Fissati: • Vo = 4V; • R5 = 14kΩ; Dato che: • Vo = R6 12V ; R6 + R5 Otteniamo per R6 il valore molto prossimo ai 6kΩ. Durante la fase di realizzazione è stato utile poter modificare il valore di questo trimmer a caldo per poter osservare il comportamento al variare della luminosità ambientale di partenza. A questo punto disponiamo di un sensore capace di rilevare la luminosità presente nell’ambiente in cui si trova e di produrre, in conseguenza a questo, due tipi di segnali: 170 1. in caso di luminosità insufficiente, dove per insufficiente si intende la mancanza di illuminazione diretta proveniente dall’attuatore, il sensore non invia nessun segnale al microcontrollore, ma accende un led rosso di segnalazione; 2. In caso di luce accesa (quella del gruppo di illuminazione), il sensore invia un segnale al pin dedicato del microcontrollore al quale è collegato. Un altro aspetto considerato è quello legato all’alimentazione del circuito di feedback. Dagli schemi precedenti è evidente che sono necessarie due tensioni: • 5V per il TSL250 e per il ramo contente il led; • 12V per i restanti componenti. Per ottenere in modo agevole quello che serve, senza ovviamente aggiungere l’onere di un alimentatore dedicato, abbiamo deciso di utilizzare la stessa alimentazione a 12V utilizzata dal blocco di controllo, avendo pensato di posizionare tutti questi blocchi funzionali vicini tra loro in una eventuale applicazione definitiva. Figura 2.18. Circuito feedback lato saldature. La schematizzazione evidenzia i collegamenti che realizzano l'alimentazione duale a 12V e 5V. Quindi, si è ricorsi ad un semplice partitore di tensione resistivo per prelevare i 5V dall’alimentazione principale, al fine di alimentare i componenti relativi, non essendoci da parte di questi un eccessivo assorbimento di corrente, che provocherebbe la caduta 171 drastica della tensione al collegamento col partitore (come invece accadrebbe a livello del circuito di controllo dove, per ottenere i 5V necessari, si è dovuti ricorrere al LM7805). Nelle figure sono evidenziati proprio i collegamenti dedicati all’alimentazione. Si è quindi realizzato uno stadio di feedback in grado di discriminare il livello di luminosità presente nell’ambiente e di comunicarne al microcontrollore le variazioni. L’intelligenza del circuito di controllo smisterà questi dati verso l’host, capace, grazie all’interfaccia customizzata di cui è dotato, di fornire all’utente un’informazione da lui interpretabile. 172 8. FASE DI COLLAUDO 8.1 Assemblare il sistema Nelle pagine che seguono, descriveremo le fasi di progetto riguardanti il collaudo funzionale del prototipo realizzato. Dopo aver esaurientemente trattato tutte le parti componenti, e le motivazioni delle scelte progettuali fatte, cercheremo di mettere assieme i risultati raggiunti, verificando in che misura il sistema realizzato soddisfi effettivamente le specifiche introdotte All’inizio del lavoro siamo partiti dall’analisi della problematica proposta: si voleva cioè realizzare un vero e proprio sistema domotico, concepito e realizzato principalmente per un’utenza diversamente abile. Proprio per questo motivo, come aspetto fondamentale è stato giudicato quello legato alla possibilità, da parte dell’utente, di comunicare in modo efficace con il sistema stesso. Si doveva garantire che il soggetto potesse interagire con il sistema di controllo, usufruendo appieno delle proprie abilità residue, utilizzate in egual modo per captare il feedback proveniente dalle azioni compiute dal sistema intelligente. Un sistema come quello di cui si è prodotto il prototipo, può rappresentare un aiuto per quei soggetti afflitti da gravi disabilità motorie o sensoriali, che non hanno la possibilità di interagire con l’ambiente domestico, perché non dispongono delle attitudini sensoriali o motorie, necessarie per interpretare gli input esterni. A questo scopo, l’intelligenza di 173 cui è dotato il sistema, insieme alla realizzazione personalizzata dell’interfaccia, esegue uno switching di sensi, così da permettere all’utente di usufruire in modo cospicuo delle proprie capacità. Proprio la vasta gamma di condizioni di disabilità possibili però, ha costretto a ragionare sulla customizzazione del sistema. Per garantire che il sistema fosse utilizzabile in un ampio numero di casi, se ne doveva amplificare l’universalità, così da poter essere adattato ai casi più svariati. Perciò, in questo capitolo, dopo aver descritto le fasi del montaggio che portano alla costituzione di una prima soluzione prototipale di test, analizzeremo i risultati ottenuti, compiendo un riesame del progetto, così da verificarne l’attinenza alle specifiche. 8.2 I Componenti Come abbiamo ampiamente descritto nel capitolo precedente, l’applicazione realizzata, che verrà composta di seguito, prevede l’utilizzo del sistema ausilio per il controllo dell’illuminazione domestica. L’utente non dispone delle abilità necessarie a comandare un azionamento standard e a ricevere quel feedback visivo che segnala proprio l’accensione della luce. Le condizioni che impediscono l’’autosufficienza del soggetto in un contesto come quello descritto, potrebbero essere legate ad una condizione di grave disabilità visiva, di impossibilità nella deambulazione (paraplegia) o di combinazione estremamente limitante delle due condizioni. Rivisitiamo brevemente quali sono le parti principali che costituiscono il nostro sistema. 8.2.1 L’interfaccia Il programma di interfaccia è stato ampiamente descritto nella prima sezione. Esso permette all’host di comunicare bidirezionalmente col circuito di controllo gestendo con esso uno scambio dati conforme al protocollo Wireless Lan (Wi-Fi). Ma l’interfaccia non è composta solo dal software, ma anche dall’hardware con il quale si interagisce fisicamente. Stiamo parlando dell’host che costituisce proprio la nostra Control Station, il punto di controllo del sistema domotico. Sebbene sia possibile utilizzare a questo scopo un generico personal computer con performance computazionali standard (a patto di essere fornito di scheda per la connettività Wi-Fi ovviamente), in seconda analisi si è 174 pensato di utilizzare una macchina fornita di touch screen e che massimizzasse la portabilità, così da semplificarne l’istallazione anche su un’ipotetica carrozzina per disabili. L’oggetto, presente sul mercato, che sembra soddisfare a pieno le specifiche richieste è l’ultra mobile PC Samsung Q1-Ultra. Figura 8.1 Samsung Q1 Ultra Questo Ultra mobile PC non possiede potenza di calcolo molto elevata, ma di gran lunga sufficiente (800 MHz) per costituire a pieno titolo l’host del sistema, essendo fornito di scheda per la connettività Wi-Fi. Il caratteristico touch pad lo rende sicuramente accessibile per quella parte di utenza dotata di sufficiente mobilità degli arti superiori. Ovviamente tutto questo non basta per renderlo compatibile con un’utenza caratterizzata da significativa disabilità visiva. Per rendere pienamente fruibile il nostro sistema ausilio ad utenti di questo tipo, si è deciso di aggiungere un’opportuna interfaccia vocale. Questa funzionalità è fornita semplicemente da un software reperibile in commercio: il Dragon Naturally Speaking della Scansoft. In realtà questo SW si occupa principalmente di dettatura su comuni programmi di scrittura (Microsoft Word, WordPad), ma può essere efficacemente utilizzato per impartire comandi vocali al calcolatore (apri finestra, chiudi finestra, esegui). 175 Figura 8.2 Particolare dell'interfaccia con barra per il riconoscimento vocale attiva. La pressione del tasto viene effettuata pronunciando LUCE Per rendere funzionale l’interfaccia vocale, bisogna collegare al computer un semplice microfono (integrato nel caso del Samsung Q1), e adempiere ad un semplice tutorial durante il quale si viene guidati alla lettura di un breve brano, che permette l’adattamanto del software ai propri parametri vocali salvati in un file apposito. Questo garantirà un riconoscimento vocale efficace del momento dell’utilizzo. Nel nostro caso, sarà sufficiente, una volta attivato il sw di interfaccia B-Serial, pronunciare il nome del tasto che si vuole premere (che corrisponderà ad un determinato applicativo) per ottenerne l’attivazione. In questo caso particolare l’utente dovrà pronunciare semplicemente LUCE per inviare il comando all’attuatore. Per garantire all’utente maggior consapevolezza, l’host viene equipaggiato con un software per la lettura dello schermo, come JAWS, distribuito dalla Freedom Scientific, che effettua una lettura della schermata, fornendo quindi informazione sul nome dei tasti presenti nel programma di interfaccia. 176 Nell’ottica di rendere customizzabile un sistema come quello realizzato, di essere cioè essere sagomato alle necessità particolari dell’utente, è utile considerare che, in commercio, è disponibile una vasta gamma di sensori, capaci di captare molte tipologie di input provenienti dal soggetto diversamente disabile. In questo modo è possibile caratterizzare il sistema ausilio in base alle abilità disponibili, sfruttando l’universalità che fortemente caratterizza il nostro sistema. I sitemi di input presenti in commercio permettono di sfruttare una vasta gamma di abilità residue, dalla capacità di premere pulsanti grandi e colorati, adatti a chi ha mantenuto solo movimenti grossolani, alla possibilità di controllare l’attuatore tramite movimenti del mento o tramite il soffio. Vediamone di seguito qualche esempio. Interruttore a sfioramento. Permette l’interazione tramite il soffio e il risucchio, utilizzato dagli utenti affetti da grave tetraplegia che mantengono le funzioni motorie del capo. Interruttore a sfioramento. Questo interruttore permette il controllo ad utenti che non sono in grado di imprimere la forza necessaria per attivare un sensore tipo tasto. Interruttori a tasto. Permette l’interazione agli utenti che non mantengono capacità motorie fini ,ma che riescono a muovere, seppur in modo grossolano un arto. Sono disponibili anche versioni a pedale. 177 Interruttori a pugno. Captano il segnale provocato dalla stretta del pugno intorno al sensore stesso. Ideali per soggetti che non dispongono di piena articolazione dei movimenti della mano. Per finire, il programma di interfaccia elabora i segnali provenienti dal circuito di controllo fornendo all’utente il giusto segnale di ritorno, sfruttando la sintesi vocale implementata al suo interno. 178 8.2.2 Il circuito di controllo Anche questo blocco è stato ampiamente descritto in precedenza; riassumendone le potenzialità diciamo che, grazie al microcontrollore della Microchip, rappresenta il collegamento intelligente tra l’utente e l’attuatore. Riceve segnali dall’host sotto forma di onde radio in base ai quali comanda l’attivazione del complesso di illuminazione scelto come terminale dell’applicazione. È concepito in modo da captare il segnale proveniente dallo stadio feedback e inviarlo alla Control Station che lo elabora e lo presenta opportunamente all’utente. Tutte le funzioni appartenenti al circuito di controllo provengono in prima analisi dallo strato firmware redatto ad hoc e caricato opportunamente all’interno del PIC16F628. Figura 8.3 Il circuito di controllo 8.2.3 Il modulo di conversione EZL Per rendere effettiva la comunicazione senza fili, è stato installato sul circuito di controllo un modulo dedicato presente in commercio che realizza la conversione tra lo standard EIA RS-232, il protocollo di comunicazione sul quale si basa il circuito di controllo, e lo standard IEEE 802.11b (Wireless LAN o Wi-Fi) che viene invece utilizzato per collegare l’host agli apllicativi domotici. L’uso dell’EZL-80c ha garantito, come appurato in fase di collaudo elevate prestazioni sull’efficienza della connessione, rivelatasi molto stabile ed efficiente all’aumentare 179 della distanza tra terminali di trasmissione e all’interposizione di barriere architettoniche (muri o solai). Figura8.4 Il modulo EZL-80c 8.2.4 L’attuatore A puro scopo dimostrativo, per realizzare l’attuatore domotico, è stata scelta una normale lampada da tavolo. Questo ha permesso di dimostrare l’adattabilità e l’universalità del circuito di controllo nei confronti di un oggetto comune nell’uso quotidiano. Le modifiche necessarie riguardano, come detto in precedenza, esclusivamente lo stadio di alimentazione della lampada. Figura8.5 L'attuatore è una comune lampada da tavola alimentata con la rete 180 8.2.5 Lo stadio feedback Il circuito di controllo deve disporre di segnali in ingresso legati all’attività della lampada/attuatore, per poterne fornire traccia, in ultima analisi, all’utente. Per garantire questo tipo di rapporto comunicativo, è stato improntato uno stadio circuitale, basato su fotorilevatore, capace di trasformare il livello di luminosità presente nell’ambiente in differenza di potenziale utilizzabile come Input dal microcontrollore. Il suddetto stadio deve inoltre essere capace di discriminare il superamento di un dato livello di riferimento, per garantire l’individuazione del momento in cui avviene l’accensione della lampada controllata. Figura8.6 Stadio Feedback a Fotorilevatore 8.3 L’assemblaggio A questo punto si tratta di mettere insieme assemblandoli i blocchi realizzati, componendo, in questo modo, il prototipo funzionale del sistema di ausilio domotico. Il primo collegamento da improntare correttamente è quello tra circuito di controllo e modulo di conversione. Nella sezione relativa, avevamo detto che il circuito a 181 microcontrollore era stato fornito di connettore DB9 complementare con quello presente sull’EZL e che lo stesso era stato fatto per il pin-jack dell’alimentazione, così da garantire la necessità di un singolo alimentatore a 12V per l’intero blocco ControlloConvertitore. Proprio queste due connessioni forniscono, oltre al necessario collegamento funzionale, il supporto meccanico sufficiente alla realizzazione di una soluzione prototipale. È necessario a questo proposito dire che, in una fase di sviluppo successiva, il modulo EZL-80c, privato del kit applicativo EZL-90, potrà essere integrato direttamente allo stadio del microcontrollore, garantendo una notevole riduzione delle dimensioni del blocco di controllo e l’annessione della connettività WiFi allo stesso. Figura8.7 Il connettore DB9 e il pin d'alimentazione collegano i due blocchi Una volta realizzata la connessione tra i due blocchi, avremo ottenuto una versione WiFi del circuito di controllo, potendo quindi procedere con una prima fase di testing della comunicazione wireless. A questo scopo, il blocco è stato alimentato ed è stata improntato il collegamento con l’host. Per prima cosa, avendo cura di attivare la scheda Wi-Fi del computer utilizzato da stazione di controllo, si procede all’individuazione della rete wireless relativa al circuito di controllo. 182 Figura 8.8 La connessione punto - punto col circuito di controllo viene individuata tra quelle disponibili Se dal menu Start di Windows accediamo alle Reti senza fili, il SO ricerca in modo automatico le reti wireless presenti e, se i collegamenti sono stati effettuati in modo corretto, apparirà la rete Test (il nome era stato associato alla connessione in fase di setting del convertitore Ezl, vedi capitolo dedicato) tramite la quale sarà possibile stabilire una connessione punto-punto (ad hoc) con il device di controllo. Figura 8.9 L'host connesso al blocco di controllo Wi-Fi In questo modo si accede alla rete Wi-Fi fornita dal convertitore della Sollae; rimane solo da stabilire una effettiva connessione tra il blocco ottenuto dall’assemblaggio e l’host. Per una semplice verifica di comunicazione, possiamo utilizzare il tool di test incluso nel software ezConfig con il quale riusciamo ad inviare e a ricevere pacchetti al 183 circuito di controllo, verificando in questo modo la genuinità della connessione stabilita via onde radio. Figura 8.10 La schermata di prova del sw ezlConfig Appurato che il blocco di controllo funzioni correttamente e che la comunicazione senza fili con la stazione di controllo sia stabile, si può procedere ad assemblare lo stadio feedback e la parte relativa all’attuatore. Le prime connessioni da realizzare sono sicuramente quelle legate all’alimentazione dei diversi blocchi. Come è stato detto in precedenza, le scelte progettuali e realizzative hanno portato verso un processo di unificazione delle alimentazioni. Questo approccio favorisce il contenimento dei costi, minimizzando il numero degli alimentatori necessari e riducendo al minimo il numero di accessi alla rete di alimentazione. Ricordando comunque che lo stadio di sviluppo è ancora a livello prototipale, vediamo nella figura seguente le connessioni che permettono collegare circuito di controllo, lo stadio di applicazione e lo stadio feedback. 184 Figura 8.11 I collegamenti tra gli stadi dell'applicazione Figura 8.12 L'attuatore assemblato Dopo aver collegato i diversi stadi, si può procedere al collaudo vero e proprio. Quindi tramite il programma di interfaccia si verifica il controllo sul dispositivo domotico, rappresentato, nel caso, specifico dalla lampada da tavolo. 185 Figura 8.13 L'interfaccia e l'attuatore sono collegati dal ponte radio Wi-Fi Figura 8.14 La soluzione col Samsug Q1 Il sistema assemblato ha dimostrato di funzionare perfettamente al variare della posizione della Control Station, pensata proprio per essere abbastanza portatile da poter essere installata su di una carrozzina. Il raggio d’azione del Wi-Fi (arriva fino a 100m) garantisce piena mobilità da parte dell’utente, senza che vengano pregiudicate le performance del sistema ausilio. L’aggiunta del comando vocale permette poi di rendere ottimali le caratteristiche di accessibilità dell’interfaccia. In aggiunta a questo, il ritorno vocale, prodotto dall’interfaccia nel momento in cui capta il segnale proveniente 186 dall’attuatore, fornisce un opportuno ritorno all’utente che, non disponendo dei sensi o delle capacità motorie necessarie ad acquisire consapevolezza delle proprie azioni, sfrutta in questo caso l’udito per apprendere che l’azionamento sia andato a buon fine (il messaggio della sintesi vocale dice proprio la luce è accesa ) 187 CONCLUSIONI Il nostro lavoro è stato intrapreso con lo scopo di realizzare un sistema innovativo che potesse rispondere alle esigenze particolari di un’utenza disabile. La collaborazione con la B-Able s.r.l., azienda nata proprio con l’intento di sviluppare nuove soluzioni ad elevato contenuto tecnologico nell’ambito dell’AssistiveTechnology, ha portato alla formalizzazione del seguente scenario. Era necessario improntare la realizzazione di un vero e proprio sistema ausilio, in grado di aumentare l’indipendenza di utenti diversamente abili nel controllo di applicativi domotici, presenti nell’ambiente domestico. A questo scopo, risultava di vitale importanza che il sistema concepito mantenesse come requisito principale, quello di costituire un mezzo, tramite il quale venissero sfruttate le abilità residue del soggetto, sia in fase di controllo che di monitoraggio degli applicativi comandati. Nell’introduzione, infatti, ci chiedevamo come sarebbe stato possibile controllare una qualsiasi applicazione senza la possibilità o meglio, l’abilità, di averne coscienza. Il sistema ausilio deve perciò necessariamente fornire uno switching sensoriale adeguato, così da garantire al soggetto informazioni sul controllo, in una forma da lui comprensibile: un segnale visivo per un non udente, sonoro o tattile per non vedenti o paraplegici etc. Il numero estremamente elevato di situazioni particolari ci ha portato ad un’importante riflessione: il sistema doveva presentare una piattaforma universale per 182 venire customizzato a seconda delle abilità utilizzabili dall’utente. L’universalità doveva essere garantita anche per il controllo, permettendo l’utilizzo del medesimo sistema per i diversi attuatori domotici presenti nell’ambiente domestico (azionamenti per porte, serrande, sistemi di controllo dell’illuminazione, etc.). Un altro aspetto importante era quello di pensare al dispositivo come facilmente installabile ed utilizzabile, e di conservare caratteristiche capaci di garantire al sistema un basso costo. Un sistema di questo tipo doveva per forza essere composto di diversi blocchi, interconnessi in modo funzionale tra loro, che potessero inoltre costituire un collegamento consono tra l’utente e l’ambiente circostante. Tra i suddetti blocchi ricordiamo: • Un’interfaccia utente, capace di permettere all’utente di controllare l’intero sistema in modo consono; • uno stadio di controllo in grado di captare segnali provenienti dall’interfaccia e quindi dall’utente, di controllare di conseguenza lo strato applicativo e di riceverne feedback destinati all’utente; • un sistema di comunicazione capace di collegare i due blocchi precedenti; • Il blocco applicativo, che è caratterizzato in base all’attuatore che si vuole controllare; • Lo stadio di feedback, appositamente realizzato, capace di segnalare allo stadio di controllo l’attivazione, o la mancata attivazione dell’applicativo controllato. Tutti questi blocchi, connessi tra loro e all’utente tramite l’interfaccia, costituiscono un sistema ausilio conforme alle specifiche. Lo stadio di controllo deve, prima di tutto, essere sicuramente dotato di uno strato logico adeguatamente programmato. A questo scopo, tutta la progettazione è stata basata su un microcontrollore, in particolare su un PIC della Microchip, caratterizzato da un’estrema reperibilità sul mercato (che gli garantisce bassissimo costo anche al dettaglio) e agevole programmazione. Tramite l’IDE MPLAB, fornito gratuitamente dalla stessa casa produttrice, è stato possibile realizzare un firmware dedicato, tramite il quale il microcontrollore è stato programmato ad eseguire le funzioni richieste. Nello specifico, il PIC16F628, scelto per la program memory di tipo flash riprogrammabile, per il basso costo e per l’hardware integrato al suo interno, è stato improntato per una 183 comunicazione seriale con l’host di interfaccia utente e con lo stadio di applicazione. Grazie al firmware redatto in C, il PIC è in grado di ricevere un messaggio seriale dal programma di interfaccia e di produrre, in corrispondenza di quest’evento, un output di controllo sull’applicativo. Il codice sorgente impone al PIC stesso, inoltre, di ricevere un input opportuno dallo stadio di feedback, e di inviare a sua volta un messaggio seriale all’host, così da fornire un contenuto informativo, interpretabile dall’utente grazie all’interfaccia customizzata, sullo stato dell’ambiente circostante dopo l’attivazione dell’applicazione. Il protocollo scelto per la comunicazione tra stadio di interfaccia e di controllo è l’EIARS232. Abbiamo visto come in un primo momento, l’attenzione era volta verso l’USB, sicuramente più portabile e reperibile sulle moderne macchine, ma non altrettanto versatile per quanto riguarda la realizzazione di un device ex novo. In questo caso, infatti, si sarebbe rivelato necessario redigere un driver dedicato (compito senza dubbio arduo e di scarso interesse per il lavoro proposto), affinché il SO potesse riconoscere il dispositivo collegato. Per ovviare a questa problematica si è perciò preferito rivolgere l’attenzione verso l’RS-232, che garantiva maggior semplicità di utilizzo in una circostanza del genere. Va aggiunto a questo che il PIC scelto, integra al suo interno un modulo USART dedicato ad una comunicazione seriale di questo tipo. Una volta redatto e debuggato il codice sorgente, abbiamo proceduto ad una fase di testing dello stesso (utilizzando i tool appositi dell’ide della Microchip), con la quale determinare il corretto funzionamento del software. La fase successiva è stata la vera e propria realizzazione hardware di un prototipo funzionante dello stadio di controllo in tutti gli aspetti necessari ad un corretto, seppur prototipale, funzionamento. I primi componenti assemblati sono stati quelli dedicati alla comunicazione seriale. Per questo motivo tra il microcontrollore e il connettore DB9 è stato interposto un integrato, il MAX232 della Maxim, che realizza il necessario adattamento tra i livelli di tensione propri della logica TTL lato PIC (3.5-5 V) e quelli utilizzati dal protocollo utilizzato (+/-12 V). L’aspetto successivo riguardava la possibilità di controllare un applicativo alimentato dalla rete tramite lo stadio di uscita del PIC. Per realizzare il controllo è stato scelto un BJT che funzionasse da interruttore, switchando tra lo stato di interdizione e quello di saturazione, al fine di controllare un relais collegato all’alimentazione dell’attuatore. 184 Tramite il corretto dimensionamento dei componenti resistivi, la corrente erogata dallo stadio di uscita del microcontrollore, veniva amplificata opportunamente, così da poter raggiungere un valore adeguato all’eccitazione della bobina del relais. Per quanto riguarda l’alimentazione, il problema principale è stato quello di minimizzarne il numero, così da realizzare, anche in fase di prototipo, un hardware non necessitante di troppi alimentatori per il suo funzionamento. In questo senso, usare l’LM7805 ha permesso di collegare lo stadio di controllo ad un comune alimentatore stabilizzato a 12V 1A max, ottenendo dal regolatore i 5V utilizzati negli stadi che richiedevano un tale voltaggio. Lo stadio di interfaccia ha richiesto la redazione, in Visual Basic 6, di software dedicato, capace di trasformare l’host, utilizzato dall’utente, in una vera e propria control station che interagisce con gli applicativi domotici. Proprio l’interfaccia deve subire le necessarie customizzazioni relative al tipo e al grado di disabilità presenti nell’utente. Nello specifico, l’applicazione alla quale ci siamo dedicati, riguardava la possibilità, da parte di soggetti non vedenti o gravemente limitati nei movimenti, di accendere un gruppo di luci tramite comando vocale o tattile, e di ricevere feedback sonoro (sotto forma di comunicazione verbale computerizzata) sullo stato dell’illuminazione stessa. A questo scopo, l’interfaccia doveva essere assai comprensibile ed immediata da utilizzare, giustificando la scelta di suddividere lo schermo del personal computer in quattro aree, destinate eventualmente al controllo di altrettanti attuatori. L’idea infatti è quella di controllare non uno, ma un gruppo di applicativi così da rendere effettivamente indipendente la persona diversamente abile nel compiere quei semplici gesti della vita quotidiana, resi più ardui se si presenta una condizione di disabilità. Per rendere effettiva la comunicazione tra host e stadio di controllo sono stati utilizzati degli appositi controlli di VB, in grado di implementare sia una comunicazione seriale che LAN tra i blocchi. In questo modo, il SW è pienamente capace di comandare lo stadio di controllo, e di ricevere da questo informazioni destinate all’utente. Rimanendo possibile aggiungere all’host tutta una serie di sensori, reperibili in commercio, capaci di sfruttare appieno le abilità residue dell’utente, nel caso specifico, per implementare il comando vocale è stato aggiunto un software commerciale. Il Dragon Naturally speaking è fondamentalmente un programma di dettatura, ma si è 185 rilevato molto funzionale anche per impartire comandi alla Control Station, dato il layout del programma di interfaccia. Mentre quindi lo stadio applicativo è rappresentato da una normale lampada domestica alimentata dalla rete (salvo alcune modifiche effettuate per il collegamento), lo stadio feedback ha richiesto una fase progettuale dedicata. Dovendo rilevare il livello di luminosità da comunicare all’utente, ci siamo basati su un fotorilevatore della Texas Instruments, il TSL250, hardwerizzato in una soluzione circuitale opportuna, che ci ha permesso di interpretare in modo soddisfacente la luminosità presente nell’ambiente, così da individuare efficacemente l’accensione del gruppo luminoso controllato, producendo un feedback destinato all’interfaccia e quindi all’utente. Restava da realizzare il sistema di comunicazione. Sebbene avessimo già scelto il protocollo RS-232 come mezzo di comunicazione tra host e controllo (PIC), in un secondo momento abbiamo ritenuto opportuno sciogliere il sistema dai vincoli provenienti da collegamenti wired. A questo scopo era necessario l’interfaccia e lo stadio di controllo fossero collegati da un protocollo wireless, senza che questo modificasse le funzioni del sistema. Per questo motivo si è ricorsi ad un convertitore RS-232/Wi-Fi prodotto dalla Sollae System: l’EZL-80c. L’utilizzo di questo convertitore (economico e di semplice installazione e configurazione) ha permesso di mantenere inalterati gli stadi realizzati precedentemente, salvaguardando le opportune richieste di minimizzazione dei costi in fase prototipale, restando la realizzazione di un dispositivo wireless ex novo non di interesse per il lavoro sviluppato. Al termine di questo lavoro siamo quindi arrivati alla realizzazione completa di un sistema, seppur in uno stadio ancora prototipale, che permette all’utente di ottenere il controllo domotico dell’abitazione (luci, azionamento di porte, finestre, serrande) e di ricevere un’informazione di ritorno dimensionata sulle sue abilità e particolarità legate alla sua situazione fisica. Il sistema ha mantenuto in questa fase dei costi estremamente contenuti. Tutti i componenti sono largamente presenti in commercio con prezzi pienamente accessibili (il PIC costa pochi euro mentre il convertitore EZL ne costa poche decine), mentre il passaggio al wireless ha permesso di rispettare la specifica relativa alla facile installabilità. In quest’ottica, anche il programma di interfaccia, sostanzialmente una Windows like application, permette di utilizzare un comune personal computer come host, rendendolo la stazione di controllo del sistema. 186 Sviluppi futuri La prima considerazione sullo sviluppo futuro del sistema ausilio, sarà sicuramente legato al normale processo evolutivo a cui ogni prototipo va incontro, prima di arrivare a costituire per lo meno una β-version. A questo scopo, in prima istanza, si dovrà sicuramente procedere all’integrazione del modulo di conversione EZL all’interno del circuito di controllo. Per fare ciò sarà senza dubbio necessario disfarsi del supporto di sviluppo EZL-90, assai più ingombrante del nucleo di conversione vero e proprio, e che fornisce solo funzionalità legate al cablaggio del connettore DB-9 e dell’alimentazione. Altro aspetto legato alla fase di sviluppo, sarà sicuramente la miniaturizzazione della componentistica hardware realizzata e lo sviluppo strutturale, così da costituire un dispositivo in grado di avvicinarsi in modo significativo al prodotto finale, se non altro al fine di pianificare le strategie legate all’installazione. L’ottimizzazione dell’alimentazione sarà sicuramente un aspetto importante nel garantire al sistema un minimale cablaggio di cavi. L’idea è infatti quella di aggiungere un trasformatore interno all’hardware, cercando di non inficiare sulla compattezza del pezzo, così da rendere possibile l’alimentazione dello stadio di controllo direttamente dalla rete. Una caratteristica del genere non costituirebbe comunque una modifica fondamentale del funzionamento del dispositivo. Diciamo quindi che, bisognerà investire il giusto tempo uomo per intraprendere una giusta fase di sviluppo post-prototipo. Per quanto riguarda l’applicazione del sistema, in futuro si procederà senza dubbio all’applicazione dei risultati ottenuti anche ad altri tipi di attuatori (con relativo stadio di feedback personalizzato), così da sfruttare le caratteristiche di network della rete, grazie all’utilizzo di un router Wi-Fi. Altro aspetto da sviluppare sarà inevitabilmente quello legato alla customizzazione dell’interfaccia, in base alle diverse condizioni in cui versa l’utente. A questo scopo sarà utile pensare a sensori capaci di tracciare il movimento del soggetto, così da permettere l’interazione anche con movimenti permessi minimi. Per ultimo, sarebbe interessante sviluppare uno stadio di feedback non a riconoscimento di soglie, come quello caratterizzato per l’applicazione descritta, ma a incremento differenziale. In questo modo, il sistema sarebbe capace di riconoscere come segnale utile non il superamento di una soglia, che nel caso della luminosità potrebbe verificarsi 187 anche in condizioni slegate dall’accensione del gruppo luminoso controllato, ma l’incremento della luminosità di un certo valore, indipendentemente dal valore di partenza. Questo permetterebbe un comportamento più simile a quello dell’apparato sensoriale umano, scindendo il riconoscimento dalle condizioni iniziali, supposte variabili. Con lo sviluppo quindi di interfacce sempre più caratterizzate e col controllo di attuatori diversi, reso peraltro agevole dalle ben note caratteristiche di universalità della piattaforma di controllo, sarà possibile realizzare un vero e proprio sistema casa integrato pensato appositamente per persone diversamente abili, capaci di sfruttare l’ausilio tecnologico al fine di incrementare la propria autonomia, verso una vita più inclusiva. 188 BIBLIOGRAFIA [1] Hoogerwerf J., Linsey A., Bitelli C. Progetto Europeo BRIDDGE: assistite technology against social exclusion. AIA Bologna 2002. [2] Andronico S., Bitelli C., Gamberoni F. Gli ausili tecnologici una meta possibile. La rete dei centri Italiani. Bologna 2004. [3] Bitelli C, Costa C. Le nuove tecnologie per disabili motori tratto da Cliccando cliccando: tecnologie multimediali per l’Handicap. Provveditorato agli studi di Bologna, sett 2000. [4] PiC Microchip. Disponibile presso www.microchip.com. Ultima consultazione Ottobre 2008 [5] Tanzilli S. PIC by example. Disponibile presso www.tanzilli.com. Ultima consultazione Ottobre 2008. [6] PIC16F628, PIC16F84 Microchip microcontrollers. Datasheet disponibile presso www.microchip.com. Ultima consultazione Ottobre 2008. [7] Specifiche USB, disponibile presso wwwUSB.org. Ultima consultazione Ottobre 2008. [8] Hyde J. USB designed by example. A practicle guide to building I/O device. 2002 [9] Axelson J., USB Complete. Giugno 2001. Disponibile su www.lvr.com. Ultima consultazione Ottobre 2008. [10] EIA RS-232 electrical parameters. Disponibile presso www.wikipedia.com. Ultima consultazione Ottobre 2008. [11] Fondamenti sugli standard di interfaccia EIA RS-232 e IEEE-488. GMEE (Gruppo di misure elettriche ed elettroniche) Università di Padova. Disponibile presso www.dei.unipd.it/ricerca/gmee. [12] Sciuto D., Buonanno G., Fornaciari W. Introduzione ai sistemi informatici. McGrawHill. 2000. [13] EZL 80c User’s Manual. Manuale disponibile presso www.sollae.com. Ultima consultazione Ottobre 2008. [14] EZL 90 User’s Manual. Manuale disponibile presso www.sollae.com. Ultima consultazione Ottobre 2008. [15] MAX232, MAX232I Dual EIA-232 DRIVERS/RECEIVERS. Datasheet disponibile presso www.maxim.com. Ultima consultazione Ottobre 2008. [16] Relays Finder 40 series. Miniature P.C.B. relays 8-10-16 A. Datasheet disponibile presso www.findernet.com. Ultima consultazione Ottobre 2008. [17] 2N1613-2N1711. Switches and universal amplifiers. Datasheet disponibile presso www.st.com. Ultima consultazione Ottobre 2008. [18] MC78XX, LM78XX, MC78XXA 3 terminal 1A Positive Voltage Regulator. Datasheet disponibile presso www.fairchildsemi.com. Ultima consultazione Ottobre 2008. [19] Bradley J., Millspaugh A. Visual Basic 6.0 guida alla programmazione. McGrawHill 2000. [20] LIBRO BIANCO DELLA DOMOTICA. Cap 1-2-4-7. A cura di domocenter, Centro servizi per l’innovazione, Provincia di Modena.2005. [21] Sistema Myhome. Disponibile presso www.bticino.it. Ultima consultazione Ottobre 2008. [22] TSL250, TSL251, TSL252 light-to-voltage optical sensors. Datasheet disponibile presso: www.ti.com. Ultima consultazione Ottobre 2008. [23] LM111, LM211, LM311, Voltage comparator. Datasheet disponibile presso www.national.com. Ultima consultazione Ottobre 2008. RINGRAZIAMENTI Giunto al termine di questo lavoro, desidero ringraziare ed esprimere la mia riconoscenza nei confronti di tutte le persone che, in diversi modi, mi sono state vicine e hanno permesso e incoraggiato sia i miei studi che la realizzazione e la stesura di questa tesi. I miei più sentiti ringraziamenti vanno a chi mi ha seguito durante la redazione di questo lavoro: Al Prof. Nicola Rosato, per i consigli tramite i quali mi ha aiutato ad intraprendere le scelte più appropriate. All’Ing. Paolo Abundo, per l’amicizia, per la disponibilità e per la prontezza dimostrata nell’offrire chiarimenti e suggerimenti, tramite i quali mi ha aiutato a terminare questo percorso formativo. All’Ing Stefano Gelli della B-Able s.r.l. e ai suoi soci, l’Ing Fausto Davoli e il Dr. Matteo Rugiano, va un ringraziamento speciale per aver contribuito in modo decisivo alla mia crescita in sia in campo umano che professionale. Per ultimi, ma di certo non per importanza, ringrazio la mia famiglia, gli amici e i colleghi di lavoro, che mi sono stati vicini in tutti questi anni da studente, e che, oltre ad avermi supportato, mi hanno più di tutto sopportato: Il primo pensiero va ai miei genitori, Giuseppe Rizzo e Angela Margherita Picone. Senza il loro aiuto non avrei mai raggiunto questa meta. Sono davvero grato per tutto il sostegno datomi, sperando che tutti i sacrifici spesi possano essere in questo modo, almeno in parte, ripagati. Ringrazio in modo speciale mia sorella, Angela Rizzo, e Stefano Vernarecci, per essersi sempre dimostrati fonte di esperienza e consigli, con i quali hanno saputo rendere più chiara la strada davanti a me. Un pensiero speciale a Giovanni e Maria, amici e zii, sempre presenti con parole amorevoli e sincere. Un bacio ai piccoli Elena e Matteo. Come non ringraziare tutti i miei amici, sempre vicini e pronti a sostenermi, nei momenti duri, con le loro parole e con i loro sorrisi, aiutandomi a credere in me stesso. In particolare ringrazio: Alessandro (Decky), Cristiano, Dario, Davide, Diego, Francesco, Gianluca, Mattia, Paolo e Valerio. A voi tutti, pace amore e gioia infinita. Desidero ringraziare tutte le persone con cui ho iniziato e trascorso questi anni di studio, con cui ho scambiato qualche pensiero o qualche idea. Un ringraziamento particolare a Pamela Rammauro, collega di studi e di fatiche infinite, alla fine comunque sempre superate. Un ringraziamento ai maestri Mimmo e Stefano, i miei padri nella boxe. Un pensiero e un ringraziamento sincero a tutti i colleghi di Ciampino e in particolare alla squadra del Ricevimento e degli Ordini. Per aver reso molto meno fredde tante mattine d’inverno. Grazie ragazzi, siete stati molto più che compagni di lavoro. L’ultimo pensiero e ringraziamento va alla persona senza la quale, semplicemente, niente sarebbe stato e sarà mai possibile. Ringrazio la mia Valentina per aver sempre creduto in me senza riserve, e per avermi appoggiato in ogni momento di questo lungo percorso. Grazie di cuore a tutti. Novembre 2008 Rizzo