7
INTRODUZIONE
IL MONDO DEI SISTEMI EMBEDDED
Uno dei settori piø sviluppati e importanti dell’ elettronica moderna è quello relativo ai
sistemi di controllo integrati chiamati anche sistemi embedded. Essi si svilupparono a partire
dalla metà degli anni ’80, quando il grado di integrazione raggiunto permise il montaggio di
altri componenti (memorie, clock, counter…) all’ interno dello stesso chip che conteneva il
microprocessore (unità di calcolo). Questo processo di evoluzione portò così alla nascita di
un nuovo integrato chiamato microcontrollore o MCU (MicroController Unit) che include
dentro di se molte delle componenti necessarie per la realizzazione di un sistema di
controllo. ¨ quindi immaginabile che rispetto ad un’ architettura organizzata con
microprocessori e periferiche , un’ architettura equivalente basata su microcontrollori
consente di ridurre notevolmente la complessità dello schema circuitale in quanto molti dei
servizi (memoria, I/O…) sono inclusi nelle funzionalità di base degli MCU.
Sebbene si dia per scontata la presenza dei microprocessori nella nostra vita (basti
pensare agli ormai diffusissimi personal computer), molti ignorano che l’impatto avuto dai
microcontrollori nelle abitudini quotidiane sia ancora piø grande: infatti, la maggior parte dei
dispositivi elettrici ed elettronici presenti sia in ambito civile (elettrodomestici come
lavatrici, videoregistratori, orologi, ecc) che in quello industriale (sistemi meccatronici come
robot o macchine a controllo numerico) sono basati su apparati “intelligenti” che permettono
di compiere funzioni in certi casi anche molto complesse.
Stiamo parlando delle cosiddette applicazioni embedded cioè sistemi che sono in grado di
assolvere ad una o piø funzioni specifiche (special purpose) in modalità automatica (stand-
alone), ovvero capaci di funzionare da sole, in maniera indipendente da altri oggetti o
software anche se potrebbero comunque interagire con questi ultimi.
Le caratteristiche fondamentali di un sistema embedded sono:
• Efficienza: essere in grado di compiere ripetutamente un’ azione in tempo reale ad un
costo contenuto.
• Costo di produzione ridotto: un microcontrollore embedded è molto vantaggioso
rispetto all’implementazione hardware formata da componenti discreti.
• Programmabilità: la stessa piattaforma hardware deve permette di implementare
differenti applicazioni.
8
• Flessibilità: le funzionalità di un sistema a microcontrollore possono essere
semplicemente ri-programmate all’ interno del firmware.
• Adattabilità: implementazione di sistemi intelligenti (“smart”) con la capacità di
adattarsi all’ambiente. Sarebbe utile un sistema dedicato che sia riadattabile, nel caso
ci fosse ad esempio la necessità di aggiornare il sistema ad una nuova funzione.
• Affidabilità: evitano di incorporare parti meccaniche in movimento come dischi
rigidi perchØ sono meno affidabili rispetto a componenti allo stato solido come le
memorie flash.
• Rinizializzazione: spesso è fisicamente difficile accedere ai sistemi embedded,
pertanto essi devono essere in grado di resettarsi automaticamente in caso di perdita o
corruzione dei dati (esempio del watchdog timer che resetta il microcontrollore ad
intervallo di tempo regolari).
La maggior parte di questi sistemi compiono operazioni fini a se stesse e non scambiano
informazioni con altri apparati. Inoltre spesso l’ interfaccia con cui si mostrano verso l’
utente finale non è sempre semplice ed intuitiva. Un passo in avanti in questa direzione è
stato fatto introducendo per un sistema embedded il supporto del protocollo TCP/IP che
permette di interfacciarlo ad una rete 10/100Mbps e di utilizzarlo come server web. Questo
significa che il nuovo dispositivo oltre a compiere le funzioni di ruotine per le quali è stato
progettato può anche interagire con l’ esterno accedendo ad internet. Inoltre sistemi che
integrano al loro interno dei server web permettono all’ operatore umano di controllarli e
monitorarli sfruttando delle interfacce grafiche (GUI, Graphical User Interface) disponibili
sotto forma di pagine web. Nelle applicazioni hardware standard per esempio si tende ad
assegnare piø funzionalità ad un unico pulsante in modo da economicizzare l’ interfaccia
utente e questo spesso può generare confusione durante l’ utilizzo. Invece tramite le GUI
che hanno un costo relativamente basso, è possibile progettare interfacce user-friendly, di
facile utilizzo, in modo da rendere la gestione dei sistemi piø semplice. Inoltre, se necessario,
un’ interfaccia basata su pagina web è molto piø facile da modificare, rispetto a quella
hardware che presupporrebbe un’ intervento meccanico sul dispositivo stesso.
La possibilità di avere sistemi embedded a microcontrollore con server web permette di
formare reti dinamiche di dispositivi, in modo tale che i loro componenti possano interagire
e scambiarsi funzioni e servizi, tutto questo sotto il controllo di una interfaccia flessibile,
accessibile da internet.
9
Figura 1: sistemi web server embedded.
OBIETTIVO DELLA TESI
In questa tesi ho cercato di realizzare un prototipo di scheda elettronica (PCB) basata su un
microcontrollore che abbia le caratteristiche e implementi le funzioni di un sistema di
controllo con server web integrato. Essa potrà essere interfacciata ad un generico apparato e
ne permetterà il controllo rendendolo capace di interagire con l’ ambiente esterno, tramite
sensori e attuatori opportunamente connessi alle porte di I/O digitali e analogiche. Potrà
essere collegata ad un Pc per la programmazione del microcontrollore in modo tale da
adattare il suo funzionamento ad ogni possibile applicazione a cui sarà destinato. Infatti il
punto di forza di questo apparato è proprio l’ adattabilità, cioè essere in grado grazie alla sua
grande versatilità di supportare “infinite” applicazioni differenti per modalità e scopo. Inoltre
sarà in grado di elaborare ed immagazzinare dati (immagini, pagine web, file di varia natura)
e di connettersi al web affinchØ si possa condividere tramite internet i dati estrapolati dai
processi di lettura /misura effettuati dalla scheda ed agire su di essa tramite un controllo a
distanza (esempio di interfaccia GUI).
La realizzazione di questo progetto si è svolta in tre fasi principali:
1. Creazione dello schematico e del layout del circuito elettrico utilizzando un software
CAD appropriato;
10
2. Costruzione e montaggio della scheda ad opera di un’ azienda esterna;
3. Messa in opera e collaudo dell’ hardware.
Nei prossimi capitoli descriverò tutte le varie fasi che hanno portato alla realizzazione di
questa scheda dando una panoramica generale sulle caratteristiche e le potenzialità che essa
può offrire. Il mio intento è proprio quello di porre le basi ad un progetto piø ampio come
appunto quello di un sistema di controllo “intelligente” il cui cuore digitale potrà essere
proprio questo prototipo.
11
CAPITOLO 1
Progettare da zero un sistema basato su un microcontrollore con server web integrato,
sarebbe andato ben oltre le mie capacità dovute alle nozioni ingegneristiche acquisite a
questo livello di studi universitari. Per questo motivo ho rivolto la mia attenzione al mondo
dell’ elettronica Open Source, che ha avuto negli ultimi anni un grande sviluppo, in
particolare ha tratto grande beneficio da internet perchØ ha permesso a piø persone anche
geograficamente lontane di coordinarsi e lavorare allo stesso progetto. Per elettronica open
source (termine inglese che significa “sorgente aperta”) si intende quell’ insieme di
applicazioni sia hardware che software i cui autori (i detentori dei diritti) ne permettono e ne
favoriscono il libero studio e l’ apporto di modifiche da parte di chiunque sia interessato.
Nell’ ottica della prototipazione dei sistemi di controllo a microcontrollore integrato, il web
fornisce una quantità inimmaginabile di risorse a riprova del fatto che questo è un ambito
seguitissimo a livello mondiale ed è in continua evoluzione. In questa direzione posso citare
progetti di sistemi hardware/software open source piø conosciuti come Wiring e Arduino. Il
successo e l’ enorme crescita del mercato di questi elementi sono dovuti a questi fattori:
• Basso costo, si parla di qualche decina di euro per Arduino, mentre per Wiring il
costo è maggiore perchØ dispone di microcontrollori piø potenti.
• Dotati di una vasta gamma di periferiche e moduli specializzati.
• Ridotto numero di componenti esterni, ovvero semplicità di realizzazione.
• Facilità di programmazione dovuta anche ai numerosi tools di sviluppo disponibili.
• Ampia e libera disponibilità di librerie, codici di esempio e documentazione.
• Possibilità e facilità di riprogrammazione (in-field e in-system).
• Grande flessibilità applicativa.
In definitiva, Arduino e Wiring sono progetti molto simili, ma siccome quest’ ultimo è piø
complesso dal punto di vista circuitale perchØ impiega microcontrollori piø avanzati ho
scelto di realizzare il mio prototipo sullo stampo di Arduino.
1.1 ARDUINO
Il progetto Arduino nasce nel 2005 come strumento di prototipazione elettronica all’
Interaction Design Institute di Ivrea. Prima di allora esistevano poche piattaforme che
rendevano facilmente accessibile l’ uso dei microcontrollori e quelle in commercio avevano
costi elevati o evidenti limiti dal punto di vista di risorse hardware (poca memoria) e
12
software (incompatibilità fra i vari sistemi operativi). Da queste esigenze nacque appunto
Arduino, una scheda elettronica di piccole dimensioni, completamente open source sia nel
software che nell’ hardware.
Arduino è noto come “ Embedded Computing Platform”, il che significa che è un sistema
interattivo, che tramite l’uso di hardware e software può interagire con l’ ambiente che lo
circonda. Per esempio un semplice utilizzo di Arduino potrebbe essere quello di accendere
una lampada e spegnerla dopo un certo periodo di tempo prestabilito. Si potrebbe usare
questo set-up per controllare la luce in un sotto scala come in tante altre applicazioni piø
complesse.
Arduino può essere usato per sviluppare sistemi interattivi stand-alone (capaci di funzionare
da soli, indipendentemente dalla presenza di altri oggetti con cui potrebbe interagire) oppure
può essere collegato ad un computer ed inviare e recuperare dati con la possibilità di agire su
di essi.
Arduino può essere interfacciato con una miriade di
componenti esterni piø o meno complessi: dal semplice
LED ad un display a LED, pulsanti, interruttori, motori,
sensori (di temperatura, pressione, distanza…), webcam,
stampanti, ricevitori GPS, moduli ethernet ecc.
Il core della scheda è un microprocessore AVR della Atmel, inoltre è presente un oscillatore
al quarzo che consente una corretta velocità di funzionamento e un regolatore di tensione
continua a 5V. A seconda delle varie versioni di Arduino si può avere anche un connettore
USB per collegare la scheda ad un PC in modo tale da recuperare e caricare dei nuovi dati.
Infine sono presenti dei morsetti per la connessione dei Pin di I/O di tipo analogico e
digitale.
Per programmare Arduino e fargli compiere le azioni desiderate, si utilizza l’ IDE
(Integrated Development Environment) dedicato ad Arduino ovvero un free-software che
permette di scrivere un programma in linguaggio C step by step che poi sarà caricato all’
interno del microprocessore. Allora Arduino inizierà ad interagire con il mondo esterno. In
gergo, tali programmi vengono chiamati “Sketches”.
L’ hardware e il software di Arduino sono entrambi Open Source, il che significa che gli
schematici, il codice, il design ecc sono disponibili per chiunque e tutti possono usufruirne
liberamente e farne ciò che vogliono. In sostanza prendere gli schematici e il PCB di
Arduino e farne delle riproduzioni anche da vendere sul mercato non comporta sanzioni
13
penali, è tutto perfettamente legale ed è su questo principio che si basano le applicazioni
open source. Negli anni, si è sviluppata così un’ ampia rete di prototipi e di rielaborazioni del
progetto Arduino ognuna delle quali presenta delle caratteristiche differenti mantenendo
comunque la piena compatibilità verso la struttura di base.
Arduino può essere ampliato tramite l’ uso dei cosiddetti “shields” ovvero circuiti esterni
indipendenti che svolgono le piø svariate funzioni (esempi comuni sono il ricevitore GPS,
display LCD, scheda ethernet, wireless…), ma che sono accomunati dal fatto che sono
compatibili con l’ interfaccia di Arduino. Infatti essi possono essere montati sulla faccia
superiore della scheda base, formando una struttura cosiddetta a castello, uno sopra l’ altro.
Esistono svariate versioni di Arduino, distinte per quantità di memoria, numero di ingressi
I/O ed altri parametri, ma la piø versatile e popolare è la “Duemilanove”. Essa utilizza un
chip standard da 28 pin inserito in uno zoccolo per IC (Integrated Circuit) e questo sotto certi
aspetti può essere un enorme vantaggio. Infatti per applicazioni semplici, piuttosto che usare
la scheda Arduino che potrebbe essere costosa rispetto ad un determinato utilizzo, la si usa
per sviluppare il dispositivo, poi si estrae il chip programmato e lo si installa in un circuito
dedicato a quella precisa applicazione che ovviamente sarà meno costosa. In questo modo si
riesce fare dei dispositivi personalizzati con chip incorporato (custom embedded device).
Si può poi sostituire il chip programmato con uno nuovo, infatti il costo di mercato si aggira
nell’ intorno di una manciata di euro. Ovviamente il nuovo chip deve essere pre-
programmato con il Bootloader di Arduino (è un firmware dedicato) per consentire di
lavorare con l’ IDE (ambiente di sviluppo integrato) che è un software che aiuta i
programmatori nello sviluppo del codice. Se quest’ ultimo non è presente all’ interno del
chip, è possibile caricarlo con l’ utilizzo di un apposito programmatore AVR fornito dalla
Atmel.
Oggi giorno il progetto Arduino ha avuto una espansione enorme in molti campi dell’
elettronica e non solo; una ricerca sul web rivela una elevata quantità di siti internet dedicati
al “mondo” di Arduino. Si possono trovare tante informazioni su progetti realizzati e in via
di sviluppo così da aiutare chiunque voglia realizzare la propria applicazione.
1.2 REALIZZAZIONE DEL PROGETTO @DUINO
La scheda base di Arduino è dotata di un microcontrollore integrato e la possibilità di
espanderlo in server web è data da uno shield, 100% compatibile, chiamato Ethernet che va
semplicemente montato a castello sopra Arduino. In sostanza, non ho fatto altro che prendere
queste due board ed effettuare il “merging”, cioè unirle fra loro in modo da avere in un unico
14
circuito stampato un microcontrollore programmabile con interfaccia ethernet inclusa: nasce
così @DUINO.
Figura 2: @DUINO è il "merging" fra Arduino Duemilanove e l' Ethernet shield.
Nel nome scelto, la desinenza DUINO sta ad indicare l’ origine del circuito e la sua
compatibilità con tutte le periferiche Arduino, mentre la radice @ sta a significare la
possibilità di interfacciarsi al web.
Di seguito ho raccolto le fasi principali che mi hanno permesso di realizzare @DUINO.
Il punto di partenza è stato quello di ricercare gli schematici originali delle due schede
(Arduino Duemilanove ed Ethernet Shield) all’ interno del sito ufficiale di Arduino:
http://www.arduino.cc .
Tale sito è ricco di risorse, oltre alla pagina introduttiva è possibile trovare tante sezioni qui
sotto elencate:
• Download: per scaricare il software IDE disponibile nelle varie versioni compatibili
ai diversi sistemi operativi (Windows, Mac OS X, Linux) per programmare il
microcontrollore.
• Getting Started: dà indicazioni sull’ uso dell’ IDE per iniziare a programmare
Arduino.
• Learning: sezione nella quale si trovano tanti esempi di progetti per fare pratica con
Arduino.
• Hardware: contiene tutte le informazioni sulle boards realizzate, in particolare
vengono descritte le specifiche tecniche ed esposti gli schematici e i layout.