You are on page 1of 83

Per i Makers, l’hardware

ED IT ORIA LE diventa sempre più semplice


I più giovani probabilmente non lo sanno, ma anni fa, per realizzare un progetto funzionante
di un antifurto, ad esempio, occorreva assemblare uno schema estremamente sofisticato.
Porte logiche, flip flop, contatori, transistor, circuiti RC per le temporizzazioni e quant’altro
contribuivano attivamente al funzionamento del dispositivo. La sua concezione risultava
una vera e propria arte e la percentuale di riuscita era spesso alquanto bassa. Spesso, per
realizzare semplici circuiti occorreva approntare enormi schede e circuiti stampati, stracol-
mi di componenti elettronici, collegati tra loro ad arte. Un eventuale guasto era difficile da
trovare, occorreva ripercorrere manualmente le strade dei vari segnali.
Oggi non è più così, la realizzazione di un circuito elettronico, seppur estremamente sofisticato, è
cosa agevole e semplice per tutti. Una scheda di sviluppo leggera e compatta come, ad esempio,
il nostro ESPertino, mette a disposizione tutto ciò di cui un progettista ha bisogno, in pochissimo
spazio. La logica di funzionamento è basata non più sull’interazione complessa tra i vari componenti
elettronici ma su un firmware appositamente creato. E’ anche possibile realizzare un differente

“ La tecnologia aiuta sicuramente gli hobbisti, alleggerendoli molto dallo


sviluppo dell’hardware

progetto dalle finalità diametralmente opposte senza toccare un solo componente elettronico ma
semplicemente riprogrammando il tutto.
Eh si, oggi i giovani progettisti hanno la vita estremamente comoda e i prototipi che essi creano
sono dei veri e propri capolavori. Ma la realizzazione di un progetto elettrico a componenti discreti,
senza l’ausilio di processori o MCU, inculca maggiormente il concetto di elettronica. E consente di
comprendere a fondo il ruolo dei diversi stadi di un circuito, di capire la migliore soluzione di ottimiz-
zazione da adottare e di creare da sé un dispositivo complesso ma funzionante in tutte le sue parti.
E’ meglio ieri oppure oggi? Penso entrambi i periodi. Il progettista deve conoscere l’arte di costruire
circuiti alla vecchia maniera, pur sapendo programmare i microcontrollori. Il bagaglio culturale deve
essere completo. Non basta saper a menadito tutte le istruzioni dell’Esp32 se poi non si sa realiz-
zare un lampeggiatore a transistor.
Sarebbe opportuno che i ragazzi e gli studenti di oggi approfondiscano molto questo settore dell’e-
lettronica ma sarebbe anche utile che gli appassionati più “datati”, spesso titubanti e contrari ai
nuovi metodi, entrino in contatto con questa meravigliosa tecnologia elettronica, fatta di software e
di programmazione.
Lancio una sfida a chi si voglia mettersi in gioco. Si provi a realizzare, anche solo come idea di
progetto e schema, un sistema che inneschi un allarme quando due porte vengano aperte contem-
poraneamente. Lo stesso si concepisca in due versioni differenti: la prima usando solo ESPertino,
la seconda disegnando lo schematico a componenti discreti. Sarebbe interessante leggere le vostre
riflessioni. A presto.

Giovanni Di Maria

1
EDITORIALE MAKER ROBOT
Per i Makers, l’hardware Termocamera Corso sugli Aeromobili
diventa sempre più
1 3 6
VOLTCRAFT PT-32 a Pilotaggio Remoto
semplice partendo da zero:
Founder & Publisher Avvisatore di opportunità e problematiche
18
Emanuele Bonanni allagamento con
ESPertino IoT
Editor-in-Chief
Near Infra-Red:
Maurizio Di Paolo Emilio Mini registratore 13
33 una originale
allo stato solido con applicazione di IoT
Technical Editor
Giovanni Di Maria ESPertino
BOARD
Marketing Il Kit di ESPertino:
39 Starter Kit TRL 25
Sara Ercolani temperatura e umidità
Funksysteme
sotto controllo con il DHT11
Advertising
Michela Lemma SCI & TECH
WallPi: quando LEGO
michela@emcelettronica.com 46 Bitcoin: la moneta
incontra Raspberry Pi 28
decentralizzata
Circulation
Il Kit di ESPertino:
Users - 129.701 PCB
Social Network - 124.144 misuriamo le distanze 61
con il modulo a Il mercato Italiano dei
78
© Copyright ultrasuoni HY-SRF05 PCB
Tutti i diritti di riproduzione o di traduzione
degli articoli pubblicati sono riservati.
Manoscritti e disegni sono di proprietà di Controllo gestuale e
EMCelettronica Srl. 68
E’ vietata la riproduzione anche ausilio per non vedenti
parziale degli articoli salvo espressa con la scheda Arduino
autorizzazione scritta dell’editore. I
contenuti pubblicitari sono riportati senza [Progetti completi open
responsabilità, a puro titolo informativo. source]
Autorizzazione alla pubblicazione del
Tribunale MI n. 20 del 16/01/2006
Termocamera
MAKER
VOLTCRAFT PT-32
di Maurizio Di Paolo Emilio

La termocamera permette di ottenere una distribuzione senza contatto della temperatura su superfici,
indicando punto-punto il valore come misurazione diretta. La telecamera Voltcraft può essere impiega-
ta per svariati materiali e superfici in diverse applicazioni.

INTRODUZIONE cazioni. Tramite una scheda SD rimovibile, posso-

U
na fotocamera termografica (chiamata anche no essere salvate le immagini termiche con i dati di
fotocamera a infrarossi o fotocamera termica o temperatura e timestamp. In questo modo è possibile
termocamera) è un dispositivo che forma un’im- una valutazione in un momento successivo dei dati di
magine utilizzando radiazioni a raggi infrarossi, simile misura (figura 1).
a una fotocamera comune che forma un’immagine con Le principali caratteristiche possono essere riassunte
luce visibile. Invece dell’intervallo di 400-700 nanometri nei seguenti punti:
della telecamera a luce visibile, le telecamere a infraros- • Display: 2,2” (5,6 cm), 320 x 240 Pixel.
si funzionano con lunghezze d’onda fino a 14.000 nm • Memorizzazione su schede MicroSDHC.
(14 μm). In linea generale, la radiazione più infrarossa • Valori emissioni regolabili.
viene emessa come radiazione corpo-nero. Una tele- • Unità temperatura ºC / ºF.
camera speciale può rilevare questa radiazione in un • Valori max./min.
modo simile in cui una telecamera normale rileva la luce • Scala cromatica, luminosità LED e temperatura
visibile. Il livello di luce ambientale non influenza la misu- retro regolabili.
ra, ottenendo anche una buona stima della temperatura • Galleria immagini.
in condizioni di oscurità totale. Ciò lo rende utile per le
operazioni di soccorso in edifici
di fumo e sotterranei. Una gran-
de differenza con le telecamere
ottiche sono le lenti di messa a
fuoco che non possono essere
fatte di vetro, devono essere uti-
lizzati materiali speciali come i
cristalli di germanio o zaffiro.
Le lenti al germanio sono anche
piuttosto fragili, quindi spesso
hanno un rivestimento duro per
proteggerle contro il contatto ac-
cidentale.

CARATTERISTICHE
La telecamera termica Voltcraft
consente di visualizzare la distri-
buzione della temperatura sulle
superfici, modificando a piaci-
mento le tavolozze dei colori al
fine di rendere più facile l’analisi.
Con le sue 6 combinazioni di co-
lori selezionabili, la PT-32 offre
una soluzione per tutte le appli- Figura 1: Termocamera Voltcraft

3
MAKER

Ottica 38° x 38°

Lunghezza - Profondità 125 mm

Livello di emissioni (min.) 0.10

Risoluzione del display 320 x 240 Pixel

Tipo PT-32

Messa a fuoco Fuoco fisso

Frequenza immagine 9 Hz

Peso 494 g

Campo di misurazione temperatura (max.) +300 °C

Campo di misurazione temperatura (min.) -20 °C

Min. distanza di focalizzazione 50 cm

Memorie 24000

Tensione di alimentazione Batteria Li-Ion, 100 - 240 V/AC

Matrice bolometrica 32 x 31 Pixel

Display TFT a colori

Categoria Termocamera

Interfacce microSD

Precisione di base ± °C 2 °C

Livello di emissioni (max.) 1.00

Sensibilità termica 150 mK

Larghezza 58 mm

Combinazioni di colori 6

Altezza 205 mm

Precisione ± 2%

Tabella 1: caratteristiche tecniche della termocamera voltcraft

4
MAKER

si moltiplicano molto velocemente,


il flusso di sangue e il metabolismo
sono più elevati in una zona tumo-
rale. Inoltre, mentre il flusso di san-
gue e il metabolismo aumentano, la
temperatura della pelle aumenta.
La American Cancer Society non
raccomanda la termografia in so-
stituzione della mammografia. La
termografia può essere utilizzata
per integrare informazioni da un
mammografo e aiutare a identifica-
re i tumori che sono vicini alla pelle.

CONCLUSIONI
Una termocamera a infrarossi rileva
l’energia emessa da un oggetto, e
converte il tutto in un segnale elet-
tronico visivo affinchè si possa ave-
re una rappresentazione schemati-
Figura 2: display della termocamera con le varie indicazioni
ca della distribuzione di calore. Una
termocamera può essere impiegata
Incluso nella scatola abbiamo una custodia, la batteria per monitorare l’andamento termico di un oggetto ma
Li-Ion 3.7V, 1400mA, l’alimentatore USB con cavo, un anche per valutare problemi legati all’emissione di calo-
treppiede per meglio controllare la postazione fissa, una re. Una telecamera termica è in grado di eseguire algo-
SD da 4GB con adattatore SD e il manuale. In tabella 1 ritmi per interpretare i dati e costruire un’immagine.
riportiamo le principali caratteristiche tecniche: il campo Anche se l’immagine mostra sul display una appros-
di misura si estende da +300 °C fino a -20 °C con una simazione della temperatura, la fotocamera utilizza in
precisione di 2°C e una interfaccia display TFT. realtà più fonti di dati in base alle aree che circondano
L’immagine termica può essere di 0-100% in fasi del l’oggetto per determinare tale valore anziché rilevare la
25%, ottenendo un miglior orientamento e una visua- temperatura effettiva
lizzazione dei dettagli nei mini particolari. La compen-
sazione delle riflessioni sono rilevati da un sistema di
controllo riducendo così gli errori di misura. Le aree dei LA TELECAMERA VOLTCRAT PT-32 E’ DISPONIBILE
picchi di freddo e caldo appaiono nell’immagine come A CATALOGO CONRAD CON SPEDIZIONI 24H
marcatore diretto. In questo modo è più veloce avere
una panoramica della distribuzione del calore (figura 2).

TERMOGRAFIA
La quantità di radiazione emessa da un oggetto aumen-
ta con la temperatura; quindi, la termografia permette di
vedere variazioni di temperatura. Gli oggetti caldi si di-
stinguono bene dagli ambienti più freddi; gli esseri uma-
ni e gli altri animali a sangue caldo diventano facilmente
visibili di giorno e notte. Di conseguenza, la termografia
è particolarmente utile per i militari e gli altri utenti delle
telecamere di sorveglianza. La termografia utilizza una L’autore è a disposizione nei commenti per eventuali
approfondimenti sul tema dell’Articolo. Di seguito il link per
telecamera speciale per misurare la temperatura della
accedere direttamente all’articolo sul Blog e partecipare alla
pelle sulla superficie del seno. È un test non invasivo discussione:
che non comporta alcuna radiazione. La termografia si https://it.emcelettronica.com/termocamera-voltcraft-pt-32
basa su due idee: poiché le cellule tumorali crescono e

5
Corso sugli Aeromobili a
R O BO T Pilotaggio Remoto partendo
da zero: opportunità e
problematiche
di Giuseppe Silano

Inizia con questo articolo una lunga serie di puntate dedicate agli Aeromobili a Pilotaggio Remoto
(APR). Si tratta, a tutti gli effetti, di un corso completo, pensato e dedicato, soprattutto, ai principianti
ed ai neofiti. Semplici lezioni, esempi e tanto altro chiariranno perfettamente le idee ed illustreranno,
in maniera estremamente semplice e chiara, i fondamenti della tecnologia, i principi di funzionamento,
lo stato dell’arte e la storia di questi magnifici velivoli. Si consiglia vivamente di seguire cronologica-
mente le lezioni che seguiranno, senza fretta ed impazienza nel terminare subito il corso, ma con la
consapevolezza di maturare i concetti presentati gradatamente nel tempo.

INTRODUZIONE dustriale, rendendo possibile la raccolta di misurazioni

N
egli ultimi decenni è molto cresciuto l’interesse passive dell’ambiente circostante. La visione artificiale
nei confronti della progettazione e dello svi- consente così di creare un ciclo del tipo “guarda e poi
luppo di piccoli velivoli sprovvisti di pilota UAV muovi”, un ciclo di comando dei movimenti del velivolo
(Unmanned Aerial Vehicle), più noti come droni, che in con retroazione visiva. In altri termini, utilizzando un ci-
maniera autonoma possano effettuare missioni sia mi- clo chiuso di posizionamento, la camera fornisce tutte
litari che civili, quali inseguimento (appunto) di obietti- le informazioni necessarie all’aeromobile (vedi nota 1
vi mobili e non, monitoraggio ambientale, del traffico e a fine paragrafo) per l’attuazione della legge di control-
della sicurezza nelle città. Gli UAV sono sistemi inte- lo, formando un sistema che prende il nome di visual
grati relativamente complessi, in grado di spostarsi in servoing (asservimento visivo). Ciò consente di sfrut-
modo indipendente all’interno di un ambiente specifico, tare, nell’ambito più vario, noti nati per scopi commer-
equipaggiati con una strumentazione di bordo per la ciali, riducendo notevolmente i costi, rendendo così la
navigazione e trasmissione dei dati e che, per questo, tecnologia facilmente accessibile: tanti sono i modelli a
hanno suscitato interesse anche nell’ambito della ricer- disposizione, differenti per prestazioni e dimensioni. Tali
ca scientifica, come abbiamo visto in un precedente ar- caratteristiche li rendono estremamente personalizzabi-
ticolo. li, quindi facilmente adattabili in funzione della specifica
applicazione di interesse.
STATO DELL’ARTE Dal primo sistema di asservimento visivo, sviluppato nei
La maggior parte delle applicazioni commerciali (alcu- primi anni ‘80, i progressi nel controllo visuale dei robot
ne già citate in un precedente articolo) vedono gli UAV - si parla di robot, e non di UAV, perché quanto si sta
impiegati come dispositivi per lo streaming di dati e vi- affermando abbraccia una più ampia schiera di dispo-
deo ad una stazione centrale, comandi in remoto da un sitivi - sono stati abbastanza lenti, ma negli ultimi anni
supervisore (una persona) che sceglie di volta in volta grazie all’aumento della potenza computazionale della
il prossimo compito da eseguire sulla base delle imma- scala di integrazione, è stato possibile installare schede
gini che vengono raccolte dalla camera presente sul per l’elaborazione dati in real-time. Sistemi in grado di
corpo del drone. La presenza della camera consente di garantire che un elaborazione (o task) termini entro un
estendere le scarse capacità sensoriali di quest velivoli, dato vincolo temporale o scadenza (detta in gergo de-
utilizzando concetti già noti nel campo della robotica in- adline). Il tempo per l’elaborazione deve essere minore

6
ROBOT

Esempio-di-un-modello-visual-servoing

di quello con cui giungono i campioni, dunque il siste- • eye in hand: la camera è fissata al corpo del
ma deve permanere in uno stato di hidle (attesa) per un robot, tramite il suo movimento si cerca di man-
tempo non nulla tra un campione ed il successivo. tenere il bersaglio nell’area di visione.
Tanto sono i lavori presenti in letteratura che impiegano
l’asservimento visivo per gli scopi più vari, ad esempio Una variazione a questi modelli include il posizionamen-
per il controllo di robot manipolatori, per la pianificazio- to di telecamera multiple, installate negli angoli di una
ne di percorsi, etc. Caratteristica comune a tutte le stanza dunque per applicazioni indoor, in grado di for-
pubblicazioni è l’utilizzo di paradigmi, quattro i più nire una visione stereoscopica dell’ambiente. Tali appli-
diffusi: cazioni, oltre ad avare un costo più elevato, presentano
• dynamic look and move: la visione fornisce i anche problemi di gestione ed elaborazione di doppie
punti nel quale il robot si deve portare, mentre immagini. Nel corso di questi articoli ci si focalizzerà sul
il controllore aziona gli attuatori in modo da as- modello rappresentato (Figura 1) image based utilizzan-
sumere la configurazione necessaria per il rag- do la camera nella configurazione eye in hand.
giungimento di tali punti; In sintesi, la vetrina di ricerca sull’inseguimento visivo
• direct visual servo: il controllore è completa- di oggetti per UAV è molto varia, soprattutto in contesti
mente eliminato poiché il sistema visivo control- suburbani. La progettazione di un sistema di naviga-
la direttamente gli attuatori; zione per un robot volante, rispetto ad un equivalente
• position-based: le informazioni estratte dall’im- a terra, è un obiettivo non da poco perché richiede un
magine (features, saranno approfondite nel cor- elevato numero di feedback per la stabilizzazione , e
so dei successivi articoli) vengono utilizzate per coinvolge sistemi fortemente non lineari.
ricostruire la posa (posizione/orientamento) 3D La capacità di identificare ed inseguire autonomamente
corrente dell’oggetto rispetto alla telecamera. Si un oggetto arbitrario, oltre ad essere interessante già di
genera un segnale di errore “cartesiano” dato per se, trova facile applicazione negli ambienti civili in
dalla differenza tra la posa 3D desiderata e quel- particolare per tutto quello che è il contesto esplorativo.
la attuale. Ad esempio, nell’ispezione di edifici con pericoli di crollo
• image-based: l’errore viene calcolato in 2D nel o centrali nucleari dismesse, in contesti ambientali, e
piano immagine, senza stimare la posizione de- così via. La grande forza di questo sistema è la sua at-
gli oggetti esaminati. Il robot si muove in modo tuabilità anche in spazi non noti.
da portare le features 2D osservate verso i valori
desiderati. Nota 1: da non confondere con l’aeromodello, che a
differenza del primo è impiegato per scopi hobbistici o
Per quanto concerne, invece, la telecamera si parla di sportivi: il volo avviene sotto il controllo visivo diretto e
sistemi: costante dell’aeromodellista).
• eye to hand: la camera è in grado di muoversi in
completa autonomia rispetto alla posizione del CONFIGURAZIONI PIÙ COMUNI
robot, variando i suoi tre gradi di libertà (yaw, Si definisce rotorcraft, dall’unione di rotatory-wing ai-
pitch e roll); rcraft, o aerogiro, un aeromobile ad ala rotante più pe-

7
ROBOT

Figura 2: Distribuzione tipica delle eliche di un multi-rotore.

sante dell’aria che per volare utilizza la portanza gene- zione a V, nel quale gli otto rotori sono equamente divisi
rata da superfici alari dette pale in rotazione attorno ad in due braccia divergenti.
un albero. Diverse pale montate su di un unico albero, La differenza principale tra le diverse configurazioni
in aeronautica, sono definite come un rotore (parte di è il carico di lavoro che esse sono in grado di so-
questi concetti sono stati affrontati in un altro articolo). stenere: maggiore è il numero dei rotori, maggiore è
Il modello tipico che rappresenta questa classe di ve- anche il carico di lavoro. Inoltre, un alto numero di rotori
livoli è certamente l’elicottero che però, a causa delle assicura una maggiore affidabilità: la rottura di un roto-
sue caratteristiche, è utilizzato soltanto nella sua veste re, o un suo malfunzionamento, non condiziona il prose-
manned (vedi nota 2 a fine paragrafo). guo della missione. Nel caso, poi, dei velivolo dotati di
Un multi-rotore (o multicopter) è un dispositivo in grado un doppio rotore coassiale, la diminuzione del rapporto
di volare, composto di una parte centrale, che contiene peso/potenza consente, a parità di carico di lavoro, di
la maggior parte dell’elettronica, e più eliche a passo avere una maggiore manovrabilità.
fisso: a differenza dell’elica a passo variabile, non è
possibile agire sull’orientamento delle pale, ruotandole, Nota 2: Lo svantaggio dell’elicottero tradizionale è rap-
perché ancorate al mozzo. Per ragioni prestazionali, le presentato dalla complessità della sua meccanica dif-
eliche sono tipicamente posizionate più lontano possibi- ficilmente riproducibile in piccola scala con sufficiente
le dal corpo del velivolo, come si può vedere in Figura 2, precisione; i vincoli di peso e costo presenti nella rea-
mentre la maggior parte del peso è posizionato nel cor- lizzazione di un mini-UAV impongono, infatti, l’utilizzo di
po (parte centrale). Inoltre, le eliche sono tutte orientate materiale plastico, meno resistente delle leghe metalli-
parallelamente alla forza di gravità in modo che l’aerea che e molto più sensibile alla presenza di giochi mec-
spazzata dalle pale sia perpendicolare, rispetto alla ter- canici.
ra che funge da riferimento, alla forza di gravità.
In funzione del numero di rotori si parla di tricotteri, PRINCIPI DI FUNZIONAMENTO
quadricotteri, esacotteri ed ottocotteri, che utilizzano ri- In questa sezione viene presentato in modo intuitivo il
spettivamente un totale di tre, quattro, sei ed otto rotori. funzionamento basilare che regola il volo di un si-
Le versioni più utilizzate prevedono un minimo di quat- stema multi-rotore (sia esso un tri-, quadri-, esa- o
tro rotori disposti in configurazione simmetrica a + o x otto-rotore); questi concetti elementari non richiedono
come mostrato in Figura 3. un’approfondita conoscenza dell’hardware o del mo-
Altre configurazioni, ma non sono poi così comuni, si dello fisico, ma danno un’appropriata comprensione su
prestano al sollevamento di carichi da lavoro pesanti, e come funziona il velivolo.
per le principali missioni con esigenti standard di sicu- Si prenda in considerazione lo schema del quadricotte-
rezza. In Figura 2 è riportato un ottocottero a configura- ro in Figura 4, in rosso è rappresentata l’elica principale

8
ROBOT

Figura 3: UAV a 4, 6, e 8 rotori in configurazioni + e x.

mentre i simboli z, φ, θ, ψ, si riferiscono rispettivamente scelta dell’orientamento è ininfluente per la dinamica.


alla quota, agli angoli di pitch (beccheggio), roll (rollio) e Per ultimo, i movimenti rotazionali, anche detti di yaw,
yaw (imbardata). possono essere ottenuti rallentando la velocità di rota-
I quattro motori a bordo del velivolo sono comandati se- zione delle due eliche opposte, ed aumentando dello
paratamente; ogni motore produce una coppia che fa gi- stesso valore quella delle restanti in modo che il vetto-
rare i rotori producendo così una spinta verticale. Come re spinta non venga influenzato. In questo modo l’UAV
in un elicottero, la coppia generata dai motori spinge il ruoterà nella stessa direzione delle eliche più lente,
corpo del quadri-rotore nella direzione opposta a quel- producendo una rotazione del corpo nella direzione op-
la dei rotori: per evitare questo fenomeno i due rotori posta in accordo a quanto afferma la terza legge della
presenti sullo stesso braccio ruotano in senso orario, dinamica.
mentre gli altri due ruotano in senso antiorario. Il dro-
ne, dunque, riesce ad elevarsi da terra quando tutti SCHEDE DI VOLO
i rotori esercitano la stessa spinta: in questo caso il Il componente principale di un multi-rotore è la
vettore spinta è perpendicolare alla terra, ed il suo mo- scheda di volo, come la ArduPilot Mega (APM). Si trat-
dulo eguaglia quello della forza di gravità che agisce ta di un sistema di controllo open source (Commercial
sull’UAV. L’aeromobile è in grado così di librarsi ad una Off-the-Shelf Component - COTS) progettato da una
specifica altezza. comunità di hobbisti per piccoli aeromobili a pilotaggio
I movimenti laterali sono ottenuti, al contrario, dimi- remoto. E’ correlato da una scheda sensori (Figura 5)
nuendo il numero di giri dei motori presenti su di un che ingloba al suo interno un accelerometro micro elet-
lato ed incrementando, dello stesso valore, quelli po- tromeccanico (MEMS), che effettua misure sui tre assi,
sizionati sul lato opposto. In questo scenario il quadri- un giroscopio ed un pressostato. A corredare la senso-
rotore sarà inclinato in avanti nel verso della propulsione ristica di bordo ci pensa un ricevitore GPS esterno, il
più debole, e continuerà a muoversi lateralmente finché quale consente il volo anche in applicazioni outdoor.
la spinta del velivolo non subirà variazioni. Questo mo- Il software dell’autopilota, invece, gira su di un cir-
vimento è indicato come pitch se il rotore che rallenta cuito separato (Figura 6) sul quale è installato un mi-
è quello anteriore o posteriore, o roll se il rotore che crocontrollore Atmel ATMega 2560, lo stesso che equi-
rallenta è quello posto sul fianco. Comunque, poiché il paggia Arduino. Questa board incorpora una funzione di
veicolo è simmetrico rispetto al suo centro di gravità, la sicurezza che provvede a bypassare il sistema di con-

9
ROBOT

automatiche in cui la gestio-


ne del motore è lasciata al
pilota, mentre i comandi sui
canali di orientamento sono
interpretati come set-point di
angoli di pitch e roll voluti;
• loiter: l’autopilota
interrompe la manovra in
esecuzione ed entra in una
traiettoria circolare (loiter)
centrata sulla posizione ge-
ografica attuale (ultimo dato
GPS ricevuto), di raggio e
quota predefiniti, con auto-
nomia decisionale sull’ango-
lo di rollio necessario;
• rtl (return to launch):
modalità failsafe in cui l’au-
topilota riporta il velivolo
Figura 4: Movimenti base di un quadri-rotore. Da destra verso sinistra e dall’alto verso il sulle coordinate geografiche
basso, sono rappresentati i movimenti verticali, di pitch, roll e yaw.
dove è stato acceso il siste-
ma, acquisito come “home
trollo automatico, spostandolo sul manuale (il comando location” al primo fix GPS valido, e lo mette in
passa ad una persona fisica grazie al radiocomando di attesa sopra di esso ad una quaota di sicurezza;
cui è dotato l’UAV), nel caso di malfunzionamenti. • auto: modalità completamente automatica, in
Il firmware a bordo della scheda di volo è scritto in C++, cui l’autopilota cerca di seguire dei waypoint
realizzato utilizzando le librerie standard di Arduino (caratterizzati da latitudine, longitudine e quota
(possibile perché entrambi montano lo stesso micro- GPS) pre-programmati in fase di pianificazione
controllore), e progettandone altre ad hoc per l’applica- di volo.
zione. L’intera documentazione, come anche i sorgen-
ti, sono disponibili alla consultazione e l’inserimento di
nuove funzionalità attraverso il portale del produttore
utilizzando il servizio GitHub.
Tante sono le modalità di funzionamento della sche-
da di volo, con gradi crescenti di autonomia, sia a livello
di stabilizzazione automatica del velivolo, sia a quello di
navigazione, secondo i seguenti flight mode predefiniti:
• manual: controlli completamente manuali trami-
te radiocomando (la scheda di volo copia diretta-
mente i segnali ricevuti in ingresso dalla riceven-
te alle uscite dei servocomandi);
• stabilize: il sistema porta automaticamente
l’UAV in volo livellato (roll e pitch nulli) quando gli
stick sul radiocomando sono portati in posizione
neutra (il comando del motore throttle rimane in- Figura 5: ArduPilot Mega IMU Shield.
vece impostato sul manuale);
• circle: il velivolo viene posto ad un angolo di La logica di controllo dell’autopilota nelle modalità di
rollio costante (selezionabile) e tenuto indefini- volo automatiche è basata su un doppio anello PID
tamente in virata, senza però mantenere la posi- (Figura 7), un intero di stabilizzazione ed uno esterno
zione GPS del centro della traiettoria; di navigazione (indicati nel gergo del codice ArduPilot
• fly by wire A e B: si tratta di due modalità semi- Mega rispettivamente come servo-loop e nav-loop).

10
ROBOT

di hardware a patto che rispettino le caratteristiche for-


nite dal produttore del sistema di controllo. Le aziende
propongono sistemi built-in, pronti per essere utilizzati
da cineamatori oppure inserite all’interno di scenari più
complessi. Alle volte queste schede sono accompagna-
te da apposite SDK (Software Development Kit), le qua-
li consentono l’integrazione con smartphone, tablet, e
l’aggiunta di nuove funzionalità al palinsesto già offerto.
Tali soluzioni, ovviamente, non mettono a disposizione
il codice, né la legge di controllo utilizzata, sono dunque
difficili da integrare all’interno della ricerca, soprattutto
quando l’obiettivo è sviluppare nuovi regolatori.
Figura 6: ArduPilot Mega Main Board. In sintesi, la scelta non è sempre facile. Si può optare
per schede di volo OSPs, come l’ArduPilot Mega quan-
Molti sono i gruppi o gli istituti di ricerca che han- do l’obiettivo è velocizzare il processo di produzione del
no costruito la propria scheda di volo, realizzata per software di applicazioni custom che debbono interfac-
specifici obiettivi. Il successo accademico riscontrato ha ciarsi con liberie il codice e metodi devono essere quan-
permesso poi la produzione su grande scale, come nel to più chiaro possibile. Al contrario, la scelta migliore è
caso della X4-flyer, la OS4, la STARMAC, e la Pixhawk, rivolgersi a soluzioni proprietarie, che presentano un
giusto per citarne alcune. grado di affidabilità maggiore, quando l’idea è quella di
Nella maggior parte dei casi le OSPs (Open Source realizzare applicativi ad un livello più alto.
Projects) utilizzano le community presenti in rete (ad
esempio Google Code e GitHub) per distribuire codice, PROTOCOLLO DI COMUNICAZIONE
schematici, mettendoli in rete sotto licenza open souce ArduPilot, come anche altre OSPs, utilizza MAVLink
(GPL). Ciò consente non solo di velocizzare il processo come protocollo di comunicazione per lo scambio
di produzione del software inserendo sempre più fun- dati: sistema a due vie basato sullo standard W-CAN
zionalità, sviluppate dai tanti che vogliono attivamente e SAE AS-4. Sviluppato per il progetto Pixhawk, e poi
prendere parte al progetto, ma consente anche di te- divenuto lo standard per UAV di piccole dimensioni per
starle, liberando gli sviluppatori da questo onere esclu- la sua leggerezza ed efficienza.
sivo consentendo loro, così, di concentrarsi su altro. MAVLink è una semplice libreria di intestazione (he-
Inoltre, i feedback che giungono in tempo reale, di test ader file), che implementa diversi messaggi d’uso
condotti in diverse condizioni e configurazioni, permet- comune per l’aggiornamento delle impostazioni, la
tono di rendere il software più robusto in tempi relativa- lettura dei dati provenienti dai sensori, il cambio dei
mente brevi. modi di volo automatici (vedi paragrafo precedente)
Oltre alle OSPs, sul mercato sono disponibili tanti e l’invio dei comandi di controllo. Se necessario, è
esempi proprietari, come la DJI Wookong sviluppata possibile generare delle custom message utilizzando C
dall’omonima azienda, in grado di adattarsi a diversi tipi o Python, nel secondo caso il tool pymavlink ne facilita

Figura 7: Struttura PID in ArduPilot.

11
ROBOT

Figura 8: Struttura pacchetto MAVLink.

la creazione. • lo stato del sistema (modalità di volo automatica,


Un pacchetto di messaggi ha una lunghezza variabile, carica residua della batteria, etc.).
compresa tra gli 8 ed i 263 bytes, dove è il tipo di mes-
saggio a determinare la lunghezza del carico di lavoro. A conclusione dell’articolo, è utile segnalare
Il formato del pacchetto è mostrato in Figura 8. MavProxy: una stazione di controllo centrale open
Il primo byte (str) rappresenta il segno, a seguire (lgt) source multi piattaforma (Windows, Linux e Mac), scrit-
che indica il payload. Il terzo byte, invece, specifica ta in Python, che utilizza il protocollo MAVLink per lo
la sequenza del pacchetto: rappresenta il numero di scambio dati ed il controllo di MUAVs (Micro Unmanned
messaggi che sono stati generati durante la sessione Aerial Vehicle). La sua struttura minimale, portabile ed
corrente. Questo numero viene automaticamente incre- estendibile, ne giustificano l’impiego come strumento
mentato ad ogni nuovo messaggio. per l’interfacciamento da remoto con le schede di volo
Il quarto (sys) ed il quinto (msg) byte esprimono l’ID del che supportano il protocollo.
componente e quello del sistema: consentono l’invio
del multiplo dello stesso messaggio a più componenti o CONCLUSIONI
sistemi, naturalmente il suo contenuto può essere indi- L’interesse cresciuto nell’ultimo decennio nei confronti
rizzato anche ad uno soltanto (componente o sistema). della tecnologia, accompagnato dallo sviluppo di piat-
Il sesto byte (msg) fornisce l’ID del messaggio: determi- taforme hardware & software sempre più facili da utiliz-
na la funzione che sarà invocata, alla quale saranno poi zare e che si avvicinano alle diverse tipologie di utenze
passati i dati contenuti nel/i byte/s successivo/i. (ludiche e/o commerciali), rendono necessario un ap-
Gli ultimi due bytes (cks) si rendono necessari per il profondimento da qui la nascita del mini corso. Come
controllo dell’integrità del messaggio: confrontando i abbiamo visto in questo articolo il problema della per-
checksum si decide se accedere al contenuto, e con- cezione, che combina camere e sensori di bordo, si mi-
seguentemente passare i dati alla funzione indicata schia a quello del controllo, che varia di complessità a
dall’ID. Tutto ciò condiziona il numero di messaggi che seconda degli utilizzi e sopratutto dei costi. Dunque,
può essere inviato al secondo, determinato dalla veloci- per orientarsi in questo mercato sempre più frenetico e
tà della connessione seriale e dalla grandezza del pay- ricco di prodotti, è necessario capire quali sono le con-
load. Tipicamente si preferiscono basse velocità (57600 figurazioni più comuni e cose le differenzia, i principi di
bps), rispetto alla massime offerte dal canale (115200 funzionamento, le schede di volo e loro peculiarità, e
bps), per garantire meno errori durante la comunicazio- non per ultimo il protocollo di comunicazione.
ne, scongiurando così un eventuale perdita di pacchetti. Questa è solo la prima delle quattro puntate che com-
I messaggi possono essere codificati dal Mission porranno il mini corso. Ogni puntata sarà contraddistinta
Planner, installato sulla stazione di controllo cen- da informazioni utili sulla strada su cui si muove la ricer-
trale, inviati via USB-UART oppure attraverso il ca oltre a concetti chiave per capire e sfruttare al meglio
sistema di telemetria (non possono essere utilizzati i velivoli a nostra disposizione.
contemporaneamente, nel caso di simultaneità nella Non mi resta che augurarvi: buona lettura!
trasmissione dei dati viene data priorità all’USB igno-
rando completamente il sistema di telemetria).
MAVLink definisce un numero fissato delle informazioni,
L’autore è a disposizione nei commenti per eventuali
conseguentemente dei pacchetti, che è possibile tra- approfondimenti sul tema dell’Articolo. Di seguito il link per
smettere: accedere direttamente all’articolo sul Blog e partecipare alla
• informazioni in merito all’assetto (ψ, θ, φ, x, y, z); discussione:
https://it.emcelettronica.com/corso-sugli-aeromobili-a-pilotaggio-
• informazioni dal GPS (latitudine, longitudine, al-
remoto-partendo-da-zero-opportunita-e-problematiche
titudine, percorso, velocità);

12
Near Infra-Red:
IoT una originale
applicazione di IoT
di Giorgio Giaccaglini

Quante volte di fronte a un alimento che stiamo per comprare al supermercato ci siamo domandati di
quali ingredienti sia la sua effettiva composizione oltre a quella indicata sull’etichetta del prodotto? O
quale contenuto di grassi, di zuccheri sia racchiuso nelle appariscenti e allettanti pietanze che stiamo
per mangiare? Un’azienda israeliana ha realizzato uno spettrometro di massa NIR (Near Infra-Red) per
scoprire la composizione molecolare delle sostanze.

L’ACCORDO re degli oggetti che circondano la nostra vita (figura 1).

C
onsumer Physics Inc. è una startup israeliana L’aspetto innovativo di questo prodotto non risiede in un
nata nel 2011 il cui obiettivo visionario ­– sono originale algoritmo elaborativo o in una tecnologia mai
loro parole – era quello di costruire uno spettro- utilizzata prima. Anzi, il principio di funzionamento dello
metro di massa che si potesse tenere nel palmo di una spettrometro di massa non è certo una novità. Le ingom-
mano. A giudicare dai lanci pubblicitari e dai riconosci- branti dimensioni degli apparati elettronici con cui viene
menti tecnologici raccolti in questi ultimi mesi, sembra realizzato ne confinavano però l’utilizzo in laboratori o in
proprio che la visione dei fondatori sia diventata realtà. grossi ambienti industriali (figura 2). La sfida dei tecnici
SCiO, questo è il nome del prodotto, è una scatoletta della Consumer Physics è stata quella di realizzare un
delle dimensioni di 54 x 36,4 x 15,4 mm (figura 1) e del dispositivo dalle misure ridotte sfruttando le tecnologie
peso di 35 grammi capace, secondo le affermazioni del- più avanzate e aggiornate nel campo dell’ottica e della
la startup, di riconoscere la composizione molecola- microelettronica.
Il fatto di portare a livello consumer, e
quindi a un mercato enorme di potenziali
consumatori, un oggetto dotato di un sen-
sore capace di riconoscere quale sia la
composizione molecolare delle sostanze
che mangiamo, tocchiamo e, in genere,
fanno parte delle nostre vite, ha destato
l’interesse dalla Analog Devices Inc.,
uno tra i maggiori produttori di com-
ponenti elettronici a livello mondiale.
Tra le due aziende, la multinazionale e la
start-up israeliana, è stato stipulato un ac-
cordo di collaborazione. In poche parole,
Analog Device andrà ad utilizzare, con op-
portuni improvement tecnologici, le solu-
zioni implementate su SCiO. È gioco forza
pensare che lo spettrometro di massa non
sarà implementato solo nella scatoletta
mostrata in figura 1, ma è desiderio del-
la Analog Devices inserirne l’applicazio-
Figura 1: SCiO, lo spettrometro di massa NIR portatile della Consumer ne nel promettente mondo dei sensori e
Physics. dell’Internet of Things.

13
IoT

Figura 2: spettrometro di massa da laboratorio

• da un altro punto di vista essa è trasportata da


FUNZIONAMENTO DELLO SPETTROSCO- particelle chiamati fotoni.
PIO NIR (NEAR INFRA-RED)
Ma qual è il principio di funzionamento di uno spettrome- Lo spettro elettromagnetico della luce visibile è compo-
tro di massa NIR (Near Infra-Red). L’esposizione eviterà sto da una serie di onde la cui frequenza f (o lunghezza
di proposito aspetti e dati accademici allo scopo di non d’onda λ= 1/f) varia a seconda del colore manifestato.
tediare il lettore su una trattazione che, approfondendo- Per esempio la luce blu ha una lunghezza d’onda più
la, necessiterebbe pagine e pagine di testi universitari. corta rispetto a quella della luce rossa. In figura 3, vie-
Prima di tutto andiamo ad affrontare un piccolo ripasso, ne rappresentato la variazione delle lunghezze d’onda
propedeutico per capire il funzionamento dello spettro- della luce visibile nelle diverse manifestazioni di colore.
metro di massa, sulle caratteristiche fisiche della luce. Sotto un altro punto di vista, tuttavia, la luce non si pro-
paga come un’onda, ma è trasportata da particelle chia-
LA DOPPIA PERSONALITÀ DELLA LUCE mate fotoni. Ma i due comportamenti della luce, quella
Partiamo subito con l’affermazione che la luce ha una di comportarsi come un’onda (con frequenza e lunghez-
doppia personalità: za d’onda) e quelle corpuscolare che gli permette di pro-
• da una parte essa si comporta come un’onda pagarsi tramite entità chiamate fotoni, non sono antiteti-
elettromagnetica; che fra loro. Anzi, sono legate da una relazione che lega

Figura 3: lunghezze d’onda nello spettro della luce visibile

14
IoT

l’energia trasportata dal fotone alla frequenza dell’on- zione unica) di una molecola.
da stessa. Per cui, se con λ indichiamo la lunghezza Nella fisica “classica” il termine di vibrazione di un siste-
d’onda, con f la frequenza e con E l’energia del fotone, ma è sinonimo di oscillazione armonica rispetto alla sua
possiamo ripescare dai nostri ricordi scolastici, la ben posizione di equilibrio e la forza applicata per indurre
nota relazione: E = h f = h c/ λ dove h è la costante di tale perturbazione è proporzionale alla perturbazione
Planck (la costante che prende il nome del fisico Max stessa (es. un corpo collegato a una molla allontanato
Planck che la scopri nel 1900). Per riassumere all’estre- dal suo punto di equilibrio).
mo i concetti espressi poco sopra, possiamo affermare: Nel caso delle molecole, le vibrazioni non vengono de-
quando una onda di luce si propaga con lunghezza scritte dalla classica oscillazione armonica, bensì tra-
d’onda λ, essa è trasportata da un certo numero di foto- mite una versione per così dire, “quantistica”. Se nella
ni ciascuno dei quali ha una energia pari a hc/ λ. oscillazione armonica classica la quantità di energia
varia in modo continuo, nel caso della oscillazione ar-
Ma i fotoni sono, per così dire, esseri bizzarri: prima di monica quantistica l’energia che entra in gioco varia
tutto non hanno massa e in secondo luogo sono capaci solo in quantità discrete e ben definite. In pratica, una
di apparire o scomparire nel nulla. Ovviamente nean- molecola può cambiare la sua energia (acquisirla o per-
che loro, per i fotoni, il principio di conservazione derla ed entrare in vibrazione) per quantitativi discreti.
dell’energia è una opinione, e se un fotone decide L’insieme di questi quantum di energia di cui è dotata
di scomparire, l’energia da lui posseduta deve essere una molecola, è una specie di patrimonio genetico della
ceduta a qualcuno disposto a prenderla. Se un fotone molecola stessa: sono unici e ben definiti. Questi quan-
compare dal nulla, questo avviene se e solo se qualcu- tum di energia sono le impronte digitali che andavamo
no è disposto a cedere energia. Ci stiamo avvicinando cercando.
al nocciolo del funzionamento del nostro spettrometro di E i fotoni cosa c’entrano? Precedentemente abbiamo
massa: il fotone che scompare. affermato che i fotoni hanno la bizzarra abitudine di
scomparire qualora decidessero di cedere la loro ener-
UN QUANTUM DI ENERGIA gia a un atomo con cui hanno, lasciatemi passare il
Ma perché il fotone scompare? termine, una certa simpatia. Questo avviene qualora il
La materia è composta da molecole e le molecole da quantitativo di energia posseduto da un fotone, coinci-
gruppi di atomi strettamente connessi tramite legami de esattamente con uno dei livelli “discreti” (quantum di
chimici. Gli atomi hanno una propria massa, diversa da energia) posseduti dall’atomo colpito dal fotone stesso.
atomo ad atomo, e opportunamente sollecitati possono A questo punto, dal momento che:
entrare in vibrazione. Il modo in cui una molecola può 1. Il fotone possiede una energia il cui valore è le-
entrare in vibrazione è unico in quanto legato dal tipo gato dalla propria lunghezza d’onda (E = h f =
e numero di atomi e dai legami chimici che li tengono h c/ λ),
stretti. Insomma, se riuscissimo a mettere in vibrazione 2. Il fotone può cedere il suo quantum di energia
una molecola e ad osservarne il modo in cui essa vi- ad un atomo che possiede esattamente quel
bra, avremmo una visione unica per ogni molecola: una quantum di energia,
specie di impronta digitale della molecola sotto esame.
Andando poi a ricercare questa impronta digitale in un riusciamo a dedurre il principio di funzionamento di
enorme database in cui sono memorizzate le vibrazioni uno spettrometro di massa.
molecolare di tutte le molecole note allo scibile umano, 1. viene illuminato il campione sotto esame con
sarà possibile ricavare informazioni dettagliate sul no- una sorgente di luce visibile a larga banda;
stro ricercato (avere appunto le generalità della mole- 2. la luce riflessa viene raccolta e analizzata nel
cola sotto esame). Dobbiamo quindi trovare il modo di suo spettro elettromagnetico;
mettere in vibrazione una molecola e catturare la sua 3. si confronta lo spettro della luce inviata con
impronta digitale. quello della luce riflessa e tramite una algorit-
mo comparativo (alcuni fotoni sono scomparsi in
DUE PAROLE DI MECCANICA QUANTISTICA quanto assorbiti dagli atomi) si decifra l’impron-
Tranquilli. Non ho intenzione di parlare di formulazione ta digitale della materia sotto esame.
Lagrangiana o Hamiltoniana della meccanica quantisti- 4. l’impronta digitale molecolare viene inviata a un
ca. Due parole solo per capire come il nostro fotone, database con la quale si va a rintracciare nome
possa aiutarci per ricavare l’impronta digitale (la vibra- e cognome della sostanza.

15
IoT

Figura 4: sensore presente in SCiO.

DISPOSITIVO SCIO le sostanze. Una parte delle informazioni sono messe


A questo punto torniamo a SCiO, il dispositivo realizza- a disposizione dalla Consumer Physics. Altri database
to dalla Consumer Physics. Il componente base che si possono essere costruiti dall’utente stesso (ad esempio
preoccupa di inviare il flusso luminoso e catturare quello per una sostanza di suo interesse e non presente nel
riflesso dalla sostanza sotto esame, è mostrato in figura database della Consumer Physics), attraverso un certo
4. numero di misure preventive al fine di raggiungere una
E’ questo il sensore che si preoccupa di:
• inviare fotoni con energie diverse dal momento
che tutto lo spettro del visibile viene inviato;
• di catturare la luce riflessa privata dei fotoni che
hanno ceduto energia alla materia.

Una parte di quella luce incidente verrà assorbita dalle


molecole che sono in “sintonia” con i quantum di ener-
gia incidente. Alcuni fotoni scompariranno (variazione di
energia) e non saranno più presenti nella luce riflessa
che ritorna al dispositivo SCiO. La differenza nell’ana-
lisi spettrale tra la luce riflessa e quella incidente
fornirà l’impronta digitale della sostanza indagata.
Inviando questa impronta digitale a un vasto database
di impronte digitali, ricaveremmo informazioni del ricer-
cato.
Nella figura 5 viene mostrato lo schema complessivo
di funzionamento dell’apparato. Possiamo vedere come
le informazioni decifrate da SCiO vengano trasmesse
a corto raggio a un dispositivo smartphone (bluetooth
è la tecnologia utilizzata), il quale a sua volta esegue
una connessione con il cloud fornito dalla Consumer
Physics. È qui, nei server della azienda israeliana, che
è situato l’enorme database con le impronte digitali del- Figura 5: schema architetturale di funzionamento di SCiO

16
IoT

sorta di affidabilità statistica. dello sporco, o climatizzatori che verificano la presenza


di batteri nei propri filtri. Insomma, un ulteriore shrink
IL PERCHÉ DI UN ACCORDO tecnologico del prodotto SCiO da parte dell’Analog De-
A questo punto è lecito domandarsi perché la Consumer vices, potrebbe dare alla Consumer Physics una visibi-
Physics ha accettato un accordo di collaborazione con lità e uno sviluppo imponente.
un colosso come Analog Devices nel momento stesso
in cui si presenta sul mercato? Quali sono le sinergie ALCUNE CRITICHE
racchiuse in tale collaborazione? Ovviamente, ogni medaglia ha una doppia faccia. Se
Per quanto riguarda l’Analog Devices, la risposta è ridurre le dimensioni del sensore significa fornire un
semplice. Una fetta imponente del portfolio di pro- impulso imponente alle possibilità commerciali del di-
dotti della casa di semiconduttori, è rappresentata spositivo, il prezzo da pagare per una miniaturizzazione
dal mercato dei sensori. L’Analog Devices ha pratica- tecnologica potrebbe essere quello di una minore ac-
mente di tutto: dispositivi MEMS (Micro Electro-Mecha- curatezza nel comprendere la natura molecolare della
nical System) per misurare accelerazione e riconoscere sostanza da analizzare. Alla base di questa osserva-
movimenti e vibrazioni, giroscopi per determinare il mo- zione sono le parole di Lawrence Ziegler, professore
vimento angolare di un oggetto, sensori ad effetto Hall alla Boston University impegnato nello studio della
per la misura di un campo magnetico, sensori ottici con spettroscopia NIR, le quali affermano che l’abilità di
frequenze di utilizzo che vanno dall’ultravioletto all’in- uno spettrometro di massa di selezionare le diverse
frarosso, sensori per il rilevamento della temperatura, caratteristiche di una sostanza dipende dalla sua di-
dell’umidità e… l’elenco sarebbe ancora lungo. Aggiun- mensione. In pratica, è molto difficile, secondo il pen-
gere al suo ventaglio di sensori, un spettrometro di mas- siero di Ziegler, andare ad operare con il meccanismo
sa NIR miniaturizzato era quasi un obbligo sta nel DNA di luce incidente e riflessa, e allo stesso tempo essere
dell’azienda selettivi, con dispositivi molto piccoli come quelli che po-
D’altra parte, parlando della Consumer Physics, non trebbero essere implementati su un smartphone o un
credo che la start-up israeliana potesse accontentarsi smartwatch. “Non vedo come si possa ottenere la se-
degli incassi provenienti da un dispositivo palmare, inte- lettività sufficiente per individuare con correttezza una
ressante certamente, ma che agli occhi dei non addetti sostanza”, sono le sue parole. Per correttezza di infor-
ai lavori sembra poco più di un giocattolo. Dopo anni di mazione, bisogna aggiungere che in questa agorà di
sviluppo e di investimenti, Consumer Physics doveva discussione tecnologica, altri professori, Shyamsunder
far fare un salto di qualità al proprio prodotto. E l’accor- Erramilli, professore di fisica e ingegneria biomedica al
do con Analog Devices va in quella direzione. Boston University’s Photonics Center, sono più speran-
zosi. Secondo il suo parere, la minore precisione nei
INCREMENTI TECNOLOGICI dati raccolti dal dispositivo, potrebbero essere in qual-
Vediamo come lo Spettrometro di massa della Consu- che modo compensata da un enorme database delle
mer Physics potrebbe fare un salto tecnologico tramite “impronte digitale” catturate. In sostanza, una indagine
l’accordo con l’Analog Device. Come affermato dal di- statistica andrebbe a suggerire, con una certa accura-
rettore degli “emerging business” Alain Guery, il disposi- tezza, quale, statisticamente parlando, sia la molecola
tivo della Consumer Physics potrebbe essere ridotto sotto esame. “Sebbene”, aggiunge lo stesso Erramili,
in un chip dalle dimensioni di 3 millimetri quadrati, “ho delle perplessità nel caso delle discriminazione per
area che lo renderebbe installabile in ogni smart de- contaminazioni batteriche”. Vedremo. Di sicuro, se un
vice. Potrebbe essere quindi inserito in ogni smartpho- colosso dei semiconduttori come Analog Devices si è
ne e smartwatch alla stregua di quello che oggi si fa con mosso, l’ha fatto perché vede delle notevoli potenzialità
un ricevitore GPS. Già qui si comprende quanto gran- al suo mercato. E la Consumer Physics fa bene ad es-
de sia la fetta di mercato potenziale per la tecnologia sere fiera del proprio prodotto.
di Consumer Physics. Ma uno spettrometro di massa
avrebbe senso anche installarlo, a differenza di una an-
L’autore è a disposizione nei commenti per eventuali
tenna GPS, in ogni elettrodomestico. Basti pensare a approfondimenti sul tema dell’Articolo. Di seguito il link per
un frigorifero capace di rilevare la crescita abnorme di accedere direttamente all’articolo sul Blog e partecipare alla
pericolosi batteri, o bottiglie intelligenti che segnalano la discussione:
https://it.emcelettronica.com/near-infra-red-una-originale-
presenza di liquidi non commestibili al loro interno, o la-
applicazione-di-iot
vatrici capaci di verificare la qualità dell’acqua o il livello

17
Avvisatore di allagamento
MAKER
con ESPertino di Giovanni Di Maria

Grazie alle sue possibilità intrinseche di collegarsi a Internet, ESPertino può rivelarsi un utile avvisato-
re di allagamento di un ambiente. Il progetto utilizza anche uno dei relè a bordo per innescare il potente
avviso di una sirena a 12 Volt. L’articolo è molto didattico poiché esplora tante possibilità offerte da
questa magnifica scheda.

INTRODUZIONE qua, tra i due contatti non vi è alcuna continuità elet-

I
l dispositivo presentato in questo articolo è interes- trica. La resistenza risultante è, dunque, quasi infinita.
sante e utile in molte occasioni. Può essere utilizza- In presenza d’acqua, invece, si instaura un lieve pas-
to per la sicurezza negli esercizi pubblici, ristoranti, saggio di elettroni tra le due parti. Il prezioso liquido,
alberghi, uffici ma può fornire tutta la sua utilità anche infatti, presenta una determinata resistenza elettrica
in ambito casalingo e domestico. Si tratta di un senso- che, seppur abbastanza alta e non matematicamen-
re di allagamento molto rudimentale quanto efficace te lineare alle diverse condizioni fisiche e chimiche, è
che, in caso d’importanti perdite d’acqua non previste, sufficiente a innescare il circuito di rilevazione. L’acqua
provvede subito ad avvertire i proprietari, mediante di- salata riesce a condurre ancora molta più corrente. Per
versi canali di comunicazione. Il tempestivo intervento l’utilizzo continuativo del circuito, non esiste il problema
dell’uomo, infatti, può scongiurare allagamenti ben più di una eventuale elettrolisi, in quanto il dispositivo opera
gravi, permettendo agli operatori di chiudere in tempo sempre in stato di riposo, ossia senza la presenza del
valvole e rubinetti interrompendo, di fatto, il pericoloso liquido tra i contatti. I momenti in cui l’acqua si trova a
flusso d’acqua. contatto con le sonde, dunque, sono molto limitati, anzi,
davvero rari (si spera) e corrispondenti esclusivamente
PRINCIPIO DELLA RILEVAZIONE DELL’ACQUA agli accadimenti degli allagamenti.
Il dispositivo descritto è fornito di due puntali o di due
piastre metalliche e conduttive (vedi figura 1) che sono PROTOTIPO DI PROVA
poste, praticamente sul pavimento. In mancanza d’ac- Prima di proseguire con la realizzazione dello schema

Figura 1: le piastre metalliche per la rilevazione della presenza dell’acqua

18
MAKER

Figura 2: schema di principio per il test della conducibilità dell’acqua

definitivo, è molto utile e didattico provare, con uno dell’acqua, invece, chiude il circuito, causando un de-
sketch minimale, la conduttività dell’acqua. Il circuito di bole passaggio di elettroni e la porta GPIO34 commuta
test non ha bisogno di amplificatori di segnali poiché nettamente e decisamente il suo stato a livello logico
lo stesso sfrutta l’alta impedenza degli ingressi digi- alto, grazie alla sua alta impedenza. Per aumentare
tali di ESPertino (HIGHZ). Lo schema di prova è mo- ancor di più la sensibilità della porta è sufficiente alzare
strato in figura 2. il valore della resistenza anche a 3-4 Mohm. Cos’è che
Come si nota, la porta d’ingresso GPIO34 è collegata fornisce la tensione positiva per alimentare il circuito di
a massa attraverso una resistenza di alto valore (com- rilevazione? Lo stesso ESPertino, tramite il suo pin di
presa tra 100kohm e 1 Megaohm). Questa componen- alimentazione etichettato con 3.3V. Senza la resistenza
te assicura un potenziale basso a riposo (resistenza di di pull-down le rilevazioni potrebbero risultare casuali e
pull-down) quando i due puntali non sono collegati tra impreviste, per cui la sua presenza è obbligatoria.
loro e non scorre alcuna corrente tra essi. La presenza Il seguente sketch di prova serve per effettuare il test. E’

void setup() {

pinMode(34,INPUT); // Ingresso digitale per il sensore (1/0)

pinMode(13,OUTPUT); // Uscita per il diodo Led

void loop() {

bool stato=digitalRead(34); // Legge l’ingresso digitale

digitalWrite(13,!stato); // Visualizza lo stato in negazione

delay(100); // Pausa di attesa

19
MAKER

sufficiente riempire un bicchiere d’acqua dal rubinetto. passare a descrivere il prototipo definitivo, assieme alle
Se i due terminali non sono immersi, il diodo Led onbo- sue funzionalità. In caso di rilevazione di perdita d’ac-
ard, collegato alla porta 13 di ESPertino, resta spento. qua da parte del sensore, il prototipo eseguirà i seguenti
Non appena i puntali sono sommersi dal liquido, si otter- compiti d’informazione, come mostrato in figura 3:
rà la netta e immediata illuminazione del semicondut- • Illumina il diodo Led presente sulla scheda
tore. Si ricorda altresì che in presenza di acqua salata ESPertino;
il passaggio degli elettroni è di gran lunga superiore. Il • Attiva il relè a bordo della scheda. Esso può pi-
diodo Led onboard ha un funzionamento “al contrario”. lotare piccoli carichi come sirene, avvisatori acu-
Per illuminarlo, infatti, occorre portare il suo catodo a stici e luminosi, elettrovalvole o elettroserrature
livello logico basso. oppure ulteriori relè per comandare utilizzatori
Il listato è semplicissimo. La porta 34 è posta in ingresso ancora più grossi;
mentre la porta 13 è configurata in uscita per il pilotaggio • Invia un messaggio SMS a uno o più numeri di
del diodo Led. La funzione loop() legge ciclicamente lo telefono programmati;
stato logico della porta 34. Il relativo stato è “riversato”
e assegnato alla porta 13 per la relativa illuminazione. Leggi anche: Realizziamo un sistema di monitorag-
Questa operazione è effettuata in forma negata poiché gio grafico delle temperature con ESPertino
il catodo del Led è collegato alla porta di uscita dell’E-
SP32 (vedi schema elettrico ufficiale di ESPertino). IL CABLAGGIO DEL SISTEMA
Esaminiamo, adesso, lo schema elettrico di cablaggio,
IL PROTOTIPO molto simile a quello di principio visto nel precedente
Bene, dopo che la teoria è stata esaminata e che il fun- paragrafo e mostrato in figura 4. In aggiunta è stato uti-
zionamento di principio è stato ben compreso, si può lizzato uno dei due relè presenti sulla scheda. Il fatto
che ESPertino disponga
di tali componenti mec-
canici costituisce indub-
biamente una estrema co-
modità. A essi può essere
connesso davvero di tutto,
purché non vengano su-
perate importanti coeffi-
cienti di potenze. Il colle-
gamento del carico (sirena
o avvisatore luminoso) fa
capo al contatto N.A. (nor-
malmente aperto) del relè,
ossia il contatto centrale e
quello superiore. In caso
di sua eccitazione, il cir-
cuito viene chiuso e l’uti-
lizzatore a esso collegato
è attivato. Se il progetto lo
richiede, è possibile usa-
re anche il contatto N.C.
(normalmente chiuso).
Per l’allestimento dei
due sensori del liquido è
possibile adottare diversi
metodi. Uno dei più
validi è quello proposto
precedentemente in
Figura 3: le attivazioni del sistema, in caso di allagamento [segue a pag. 32]

20
MAKER

//------------------------------------------

// Avvisatore di ALLAGAMENTO con ESPertino

// by Giovanni Di Maria

//------------------------------------------

#include <WiFi.h>

char* ssid = “NETGEAR-gio22”;

const char* password = “marcella”;

const char* host = “adminsms.aruba.it”;

int ACQUA = 34; // Pin del sensore

int RELE = 12; // Pin del rele’

int LED = 13; // Pin del diodo Led

long secondi_per_sms = 0;

bool stato;

void setup() {

Serial.begin(9600); // Comunicazione seriale a 9600 baud

pinMode(ACQUA,INPUT); // Pin 34 in ingresso

pinMode(RELE,OUTPUT); // Pin 12 in uscita

pinMode(LED,OUTPUT); // Pin 13 in uscita

//----------Aspetta 10 secondi per sincronizzare il WiFi----------

Serial.println();

Serial.println(“Attesa per il WiFi 10 secondi...”);

digitalWrite(LED,LOW); // Accende diodo Led

WiFi.begin(ssid, password);

delay(10000);

digitalWrite(LED,HIGH); // Spegne diodo Led

Serial.println(WiFi.localIP()); // Visualizza l’indirizzo IP di ESPertino

void loop() {

stato=digitalRead(ACQUA); // Legge il sensore d’acqua

//---------Se c’è allagamento-----------------

if(stato==1) { // Se E’ stata rilevata presenza di acqua

21
MAKER

digitalWrite(LED,LOW); // Accende diodo Led

digitalWrite(RELE,HIGH); // Attiva il rele’

secondi_per_sms++; // Incrementa di 1 i secondi trascorsi

if(secondi_per_sms == 900) { // Ogni 15 minuti invia SMS

WiFiClient client; // Crea oggetto client

client.connect(host, 80); // Si collega all’host

String url = “/Aruba/SENDSMS?login=sms99999&password=miapassword&message_type=LL&recipient=%2

b393289999999&message=Allagamento+in+corso”;

client.print(String(“GET “) + url + “ HTTP/1.1\r\n” + “Host: “ + host + “\r\n” + “Connection: close\r\n\r\n”); //

Invia stringa GET per protocollo HTTP

client.stop();

Serial.println(“SMS inviato “); // Messaggio su monitor seriale per verifica

secondi_per_sms=0; // Azzera i secondi conteggiati e riparte da capo

//-------Lampeggio del diodo Led per l’attesa per permettere al messaggio di partire----------

for(int i=1;i<=40;i++) {

digitalWrite(LED,LOW); // Accende diodo Led

delay(125);

digitalWrite(LED,HIGH); // Spegne diodo Led

delay(125);

//---------Se NON c’è allagamento-----------------

if(stato==0) { // Se non c’e’ acqua...

digitalWrite(LED,HIGH); // Spegne diodo Led

digitalWrite(RELE,LOW); // Disattiva il rele’

secondi_per_sms=0; // Non conteggia il tempo trascorso

delay(1000); // Pausa generale di un secondo. NON MODIFICARE

22
MAKER

Figura 4: il cablaggio completo del sistema

Figura 5: un altro metodo per realizzare il sensore d’acqua. I dadi sono avvitati a terra e le connessioni elettriche sono nascoste
sotto il pavimento

figura 1. In alternativa, per occultare alla perfezione Di metodi per inviare gli SMS ne esistono parecchi.
i collegamenti elettrici e i fili di cablaggio, è possibile Quello adottato nel presente progetto si avvale dei ser-
far fuoriuscire dal pavimento solamente due contatti vizi online preposti alla gestione di messaggi. Le solu-
metallici, ad esempio due viti, che fungono, così, da zioni sono molte e diversificate. Alcune di queste, deci-
puntali, come mostrato in figura 5. I due puntali di sa mente buone, prevedono l’acquisto di un pacchetto
pescaggio possono anche trovarsi parecchio distanti tra di SMS dal costo davvero irrisorio. Ad esempio Aruba o
loro, purché non ostacolino il normale transito di persone Skebby forniscono un ottimo servizio a prezzi molto
o di cose. Inoltre essi non costituiscono minimamente un bassi e contenuti. Anche l’affidabilità della spedizione
pericolo, in quanto risultano interessati a una tensione è importante e queste due aziende la garantiscono al
di solo 3.3V. cento per cento.
Per inviare con Aruba, via protocollo HTTP con metodo
COME ESPERTINO INVIA GLI SMS GET, un SMS a un determinato numero di telefono cel-

23
MAKER

si sta trattando di qualche grave evento, si stabilisce


https://adminsms.aruba.it/Aruba/SENDSMS?login=s una comunicazione con il server, preposto all’invio de-
gli SMS. Essa si attua tramite apposita richiesta di tipo
ms99999&password=miapassword&message_type=
HTTP e viene spedito immediatamente un SMS al nu-
LL&recipient=%2b393289999999&message=hello mero di telefono programmato (quest’ultimo è presente,
come si può notare, all’interno della stessa stringa “url”).
lulare, si può inoltrare la seguente URL: Il processo si ripete all’infinito. La rilevazione dello stato
del sensore è effettuata ogni secondo (non modificate
http://gateway.skebby.it/api/send/smseasy/ tale tempistica). In caso d’invio di un SMS è effettuata
anche una visualizzazione sul monitor seriale dell’IDE
advanced/http.php?method=send_sms_
di Arduino.
classic&username=nome_utente&password=mia_pa Lo sketch è stato realizzato per la spedizione di SMS
ssword&recipients[]=393389999999&text=messaggi con servizio acquistato da Aruba.it. Per adottare altre
soluzioni occorre modificare il contenuto del puntatore a
o+da+spedire
carattere “host” nonché quello della stringa “url”.

mentre per farlo con Skebby si usi il seguente indirizzo: UTILIZZO


In caso di mancato invio dei messaggi si ricordi sempre L’uso del dispositivo è estremamente semplice e non ha
di verificare il proprio credito. Si sarebbe potuto anche bisogno di manutenzione alcuna. E’ sufficiente disporre
utilizzare una shield GSM con una Sim in abbonamento i due terminali per terra, in una posizione non fastidiosa,
e restare, in questo modo, totalmente indipendenti da e accendere il circuito. La scheda resta in attesa finché
altri servizi. Ma per questo progetto abbiamo scelto tale un eventuale strato d’acqua inneschi il contatto tra i due
soluzione, anche per alleggerire, di tanto, l’hardware puntali. L’allagamento può essere davvero scongiurato
utilizzato. E’ semplice, eventualmente, implementare e con un tempistico intervento dell’uomo.
adottare quest’ultimo metodo.
CONCLUSIONI
LO SKETCH Il progetto presentato è di notevole importanza poiché
Il listato, proposto più sotto, è semplice e non particolar- utilizza il relè e il modulo WiFi, tutti a bordo di ESPer-
mente lungo. La parte iniziale è dedicata all’inclusione tino. Senza l’aggiunta di shields esterne è stato possi-
del file per il funzionamento del WiFi e alla dichiarazione bile realizzare un dispositivo particolare e utilizzabile in
delle variabili. Nella funzione setup() viene impostata diverse occasioni. Ad esempio, potrebbe essere usato
la velocità della comunicazione seriale (usata qui solo come avvisatore di vasca piena. Nel qual caso è possi-
come monitoraggio e debug del sistema). Inoltre viene bile eliminare la parte relativa all’invio degli SMS e del
determinata la funzionalità del pin ACQUA (porta 34) collegamento Wireless. Oppure potrebbe essere usato
come ingresso, RELE (porta 12) e LED (porta 13) come per controllare gli argini di un fiume. Si potrebbe modifi-
uscita. Quindi, si instaura la comunicazione con il WiFi, care anche la sua finalità allestendo, per esempio, un si-
rispettando la importante e consigliata pausa di attesa stema antincendio e cambiare le tempistiche di avviso.
di 10 secondi. La funzione loop() inizia subito con la Le idee possibili sono tante. Le potenzialità di ESPer-
determinazione dell’eventuale allagamento, leggendo lo tino, come si vede, aiutano molto il progettista e il fatto
stato logico del sensore di presenza d’acqua. La porta che esso abbia a già bordo diverse soluzioni semplifica
in questione, come visto prima, fornisce un segnale di notevolmente il lavoro da svolgere e dimezza gli spazi
“vero” logico (3.3V) in caso di presenza d’acqua e un occupati dal prototipo. Inoltre l’articolo è estremamente
segnale di “falso” logico (0V) nel caso contrario. didattico e contribuisce a prendere ancora di più confi-
Se c’è un allagamento si verificano diversi fatti, tutti de- denza con questa meravigliosa scheda di sviluppo.
dicati all’avvertimento dell’utente. Innanzitutto si eccita
il relè (per l’attivazione di una eventuale sirena o altro
L’autore è a disposizione nei commenti per eventuali
dispositivo) e il diodo Led presente sulla scheda si il- approfondimenti sul tema dell’Articolo. Di seguito il link per
lumina. Il programma, quindi, conta per quanti secondi accedere direttamente all’articolo sul Blog e partecipare alla
persiste la presenza di acqua nell’ambiente monitora- discussione:
https://it.emcelettronica.com/avvisatore-di-allagamento-con-
to. Se essi raggiungono i 900 secondi, equivalenti a 15
espertino
minuti (tale tempistica si può modificare), e che quindi

24
Starter Kit TRL
BO AR D Funksysteme
di Maurizio Di Paolo Emilio

Il kit IRIS Starter TRL Funksysteme è stato sviluppato per essere un’introduzione ai moduli radio e un
veloce sistema di prototipazione. Ci sono due unità IRIS Starter kit pre-programmate in una configura-
zione di test. Basta collegare i cavi di alimentazione e il sistema IRIS è pronto per un nuovo progetto.

INTRODUZIONE applicazioni. Ci sono due tipi di IRIS-Base:

U
n sistema IRIS è costituito da un gruppo di unità la versione standard utilizza un’alimenta-
disposte in una struttura ad albero collegate tra zione a 5 volt, mentre la versione a bassa
loro (figura 1). L’unità master determina la con- potenza utilizza 3 volt. Tutti i modelli IRIS
nessione all’utente finale tramite, ad esempio, un’inter- possono comunicare tra loro tramite coppie
faccia seriale, un modulo web o un modulo GSM. Le di moduli radio o in reti radio più complesse.
altre unità del sistema sono collegate a varie apparec- • Antenna.
chiature elettroniche o agiscono come ripetitori per con- • 2 cavi seriali.
sentire la comunicazione su lunghe distanze. Esistono • 2 adattatori AC/DC.
diversi tipi di unità IRIS con diverse funzioni. Gli ingressi • 1 CD.
digitali e analogici, le uscite digitali, l’interfaccia seriale,
i timer e i contatori sono esempi di alcune delle funzioni CARATTERISTICHE
disponibili. È possibile configurare le unità IRIS prima Il kit contiene due unità IRIS Starter kit. Un’unità Starter
di impostare il sistema in posizione o dopo l’utilizzo del Kit è composta da due parti: un modulo IRIS Base che
collegamento radio o dell’interfaccia seriale. gestisce tutte le funzionalità e una scheda di valutazio-
ne IRIS che gestisce la connessione all’utente.
Ci sono sei ingressi, quattro uscite, un modulo di co-
municazione radio e una porta di comunicazione seriale
disponibili su ciascuna unità IRIS Starter kit. Con queste
soluzioni e la possibilità di reagire con diverse azioni su
eventi diversi, IRIS rende il sistema da realizzare molto
flessibile. La prima cosa da fare, dopo aver collegato
le unità, è controllare la comunicazione, assicurandosi
che entrambe le unità siano collegate correttamente. Le
unità IRIS Starter sono pre-programmate con una
configurazione di test.
Le unità IRIS possono essere utilizzate per la supervi-
sione e il controllo di dispositivi esterni. È fondamentale
Figura 1: esempi di collegamento di varie unità IRIS, la prima che le unità siano configurate attentamente per una fun-
sulla sinistra è l’unità Master e poi a seguire le restanti Slave zione ottimale. Le unità IRIS comunicano tra loro tramite
reti radio e con altri dispositivi sfruttando gli ingressi, le
uscite e le interfacce seriali. L’unità IRIS Starter kit di-
Lo starter kit include (figura 2): spone di sei ingressi che possono essere analogici o di-
• 2 IRIS starter kit units: gitali a seconda della configurazione. Ogni ingresso ha
• Evaluation board. un pulsante per simulare i valori di input e una connes-
• IRIS base: fa parte della serie di prodotti sione per collegare dispositivi esterni come switch, sen-
IRIS ed è sviluppata per l’integrazione in altri sori e trasduttori. L’unità IRIS Starter kit dispone di
sistemi. La serie IRIS contiene diversi mo- quattro uscite digitali. Ogni uscita dispone di un diodo
delli che forniscono soluzioni per varie e una connessione per collegare l’unità IRIS ad altri di-

25
BOARD

Figura 4: esempio di applicazione di un IRIS base

Categoria Starter Kit

Tipo 60901

Frequenza radio 433 MHz

Tensione di esercizio 3.3 V/DC, 5 V/DC

Max. assorbimento di corrente 50 mA

Altezza 11 mm

Larghezza 51 mm

Raggio azione Max. 1000 m

Frequenza di trasmissione 433,050 - 434,775 MHz

Modello Componente sfuso

Tabella 1: caratteristiche del kit IRIS starter

spositivi. Le unità IRIS Starter kit gestiscono RS-232 e te, che lo rendono adatto ad interagire con la maggior
RS-485, sia half-duplex che full-duplex, a seconda della parte dei sistemi. Per collegare IRIS-Base ad altre ap-
configurazione. È possibile impostare le unità IRIS in parecchiature potrebbe essere necessario un certo nu-
modo che corrispondano all’interfaccia delle unità ester- mero di circuiti aggiuntivi a seconda dell’applicazione.
ne. Le unità IRIS Starter Kit comunicano tra loro tramite L’uso più comune di IRIS-Base è come un collega-
collegamenti radio sulla banda di 433Mhz e in alcuni mento radio tra sistemi che sono distanti o mobili.
paesi della banda di 439 MHz. È possibile modificare le I dati possono essere indirizzati a un PC tramite IRIS-
frequenze in modo che diversi sistemi IRIS nella stessa RS232 o IRIS-USB, in un database su Internet trami-
area non interferiscano tra loro (figura 3). te IRIS-CUW o può essere utilizzato per controllare le
IRIS-Base dispone di interfaccia seriale, ingressi e usci- uscite su un IRIS-IO. Con funzioni quali timer e conta-

26
BOARD

dei valori misurati, logi-


stica di magazzino. L’in-
tervallo di temperatura è
compreso tra -10 e +55
°C, offrendo sensibilità in
ingresso di -112 dBm (@
50 Ω) con una velocità di
trasmissione pari a 4800
bps (in aria).

LO STARTER KIT TRL


FUNKSYSTEME 60901
CON RAGGIO DI AZIO-
NE MAX. (CAMPO LIBE-
RO) DI 1000 M È DISPO-
NIBILE A CATALOGO
CONRAD CON SPEDI-
ZIONE 24H
Figura 2: il kit TRL Funksysteme

tori, è possibile configurarli al fine di adattarsi a molte


applicazioni diverse tra loro (figura 4).
In tabella 1 riportiamo alcune caratteristiche principali.

CONCLUSIONI
Il kit Starter IRIS permette un rapido design dei mo-
duli radio utilizzati anche come schede di valutazione. L’autore è a disposizione nei commenti per eventuali
approfondimenti sul tema dell’Articolo. Di seguito il link per
Esempi di applicazioni sono: lettura remota del conta- accedere direttamente all’articolo sul Blog e partecipare alla
tore, M2M (Machine to Machine), macchinette auto- discussione:
matiche e slot machine, sistemi di controllo remoto e https://it.emcelettronica.com/starter-kit-trl-funksysteme
di misurazione remota, registratore di dati, trasmissione

Figura 3: collegamento dell’unità

27
Bitcoin: la moneta
TECH
S C I&
decentralizzata di Stefano Lovati

Con il termine Bitcoin si intende un tipo di moneta utilizzata a livello globale, e che, come ogni altra
moneta, può essere convertita in un’altra valuta, ad esempio il dollaro statunitense. L’aspetto interes-
sante del Bitcoin è che con la sua nascita è stato introdotto un sistema monetario che opera in modo
decentralizzato, come vedremo meglio e più in dettaglio nell’articolo.

INTRODUZIONE quali devono controllare e memorizzare tutte le informa-

I
due aspetti fondamentali che rendono la moneta zioni relative a ogni transazione monetaria, per evitare
Bitcoin diversa da un qualunque altro tipo di sistema future controversie e perchè richiesto per legge.
monetario moderno, come il dollaro oppure l’euro, Una volta premesso cosa si intende per sistema mone-
sono i seguenti: tario centralizzato, possiamo a questo punto affermare
1. la decentralizzazione: in questo tipo di sistema che un sistema decentralizzato differisce da quest’ul-
monetario non esiste alcun organismo centra- timo soprattutto per la mancanza di un’autorità cen-
le che conia la moneta, e potremmo piuttosto trale. Nonostante ciò, un sistema decentralizzato è in
dire che la moneta viene coniata dal popolo (il grado di operare correttamente, proprio come se dietro
“crowd”). Il Bitcoin è pertanto un sistema mone- di esso vi fosse un’autorità centrale.
tario decentralizzato; Il concetto di “operare correttamente” è tuttavia abba-
2. l’anonimato: le persone che utilizzano la mone- stanza vago, e dipende strettamente dalle leggi e dalle
ta Bitcoin assumono che la propria identità non norme in ambito finanziario che ogni paese applica a
venga mai rilevata. Ciò si differenzia dal modo questo tipo di sistema. In generale, nella maggior parte
comune con cui eseguiamo acquisti su internet, dei paesi, un sistema monetario che operi correttamen-
utilizzando tipicamente una carta di credito, e te dovrebbe applicare qualche forma di tassazione, e
fornendo i nostri dati personali affinchè possano queste regole potrebbero differire tra un paese e l’al-
essere verificati dalla banca presso la quale ab- tro. Tuttavia, in tutti i paesi (o federazioni), deve neces-
biamo la disponibilità di denaro. sariamente essere attuata una procedura, efficace e
controllabile, per la stampa della moneta. Possiamo
Nel corso dell’articolo ci soffermeremo soltanto sul pri- affermare con certezza che il sistema Bitcoin soddisfa
mo dei due aspetti menzionati in precedenza, ovvero la quest’ultimo requisito, mentre per quanto riguarda altri
decentralizzazione del Bitcoin, lasciando aperto l’aspet- aspetti (come quelli legati alla tassazione e alla regola-
to relativo all’anonimato per eventuali commenti. mentazione) , il giudizio è soggetto alla libera interpre-
tazione.
LA DECENTRALIZZAZIONE Prima di illustrare come venga generato questo nuo-
Per assimilare a fondo il concetto di “sistema moneta- vo tipo di moneta (il bit-coin), è utile analizzare più in
rio decentralizzato”, dobbiamo anzitutto capire cosa si dettaglio il modo in cui la moneta è stata percepita dal-
intende per sistema monetario “centralizzato”. In ter- le popolazioni nel corso della storia. Se prendiamo in
mini semplificati, per sistema monetario centralizzato si considerazione i sistemi monetari utilizzati nel corso dei
intende un sistema in cui l’autorità centrale, tipicamente secoli passati, possiamo osservare come, con l’instau-
il governo, è responsabile di tutti gli aspetti legati alla rarsi delle prime attività commerciali, le popolazioni uti-
sfera economica, inclusa la stampa delle banconote e il lizzassero un sistema decentralizzato, per poi passare,
conio delle monete, la riscossione delle tasse sui profitti, successivamente, a un sistema di tipo centralizzato. Si
la regolamentazione delle banche e del credito in gene- arriva così ai nostri giorni, in cui la comunità crittogra-
rale, e così via. In questo tipo di sistema, quasi ogni fica sta compiendo enormi sforzi affinchè si ritorni
aspetto è regolato da leggi e politiche approvati dal a un sistema decentralizzato, anche se in una forma
governo. La maggiorparte delle transazioni di denaro più moderna ed attuale. Vediamo ora più in dettaglio i
passano attraverso terze parti, tipicamente le banche, le diversi approcci al sistema monetario che si sono sus-

28
TECH

seguiti nella storia. posto protetto dei lingotti d’oro per la propria clientela,
e apponendo la propria firma sulle corrispondenti note
L’ANTICHITÀ: IL SISTEMA DECENTRALIZZATO emesse. Il ruolo della banca era ovviamente cruciale: in
Il primo tipo di sistema monetario messo in atto era mol- questo tipo di sistema era necessario avere fiducia nelle
to semplice: un grammo d’oro valeva semplicemente banche, ed essere in grado di riconoscere se una nota
e soltanto un grammo d’oro. L’oro era infatti il metallo utilizzata da un cliente per un pagamento aveva appo-
prezioso utilizzato come strumento basilare di scambio, sta una firma valida oppure falsificata (figura 1).
anche se successivamente venne utilizzato l’argen-
to, oppure entrambi. Esisteva inoltre un vero e proprio L’ERA MODERNA: LA MONETA CENTRALIZ-
tasso di scambio tra un qualunque tipo di merce e l’o- ZATA
ro, e viceversa. In questo modo, le persone potevano Quello creato nell’era moderna è il sistema monetario
acquistare ciò di cui avevano particolarmente bisogno che tutti noi siamo abituati a conoscere e utilizzare nella
semplicemente scambiando la merce desiderata con la vita quotidiana. Anche questo tipo di sistema moneta-
corrispondente quantità di oro, oppure con un altro tipo rio, come quello menzionato nel precedente paragrafo,
di merce, a condizione però che avesse lo stesso valore si basa sull’utilizzo di appositi certificati e monete. La
equivalente in oro. Questo tipo di sistema era comune- differenza è che ora i certificati e la moneta non rappre-
mente accettato, in quanti tutti sapevano quanto l’oro sentano un bene materiale concreto e prezioso, come
fosse raro, e perciò prezioso. Non c’era alcun bisogno di l’oro o l’argento, ma piuttosto hanno valore solo in vir-
un’autorità centrale che stabilisse l’esatta equivalenza tù di un decreto governativo.
tra una certa quantità di oro e una determinata quantità Se, ad esempio, volessimo vendere degli hot-dog per le
di merce (ad esempio, di legno). Il valore dei prodotti strade di New York, dovremmo necessariamente accet-
era invece determinato dal loro valore fisico reale, e si tare i dollari statunitensi come merce di scambio per i
trattava pertanto di un sistema decentralizzato. panini venduti. I dollari statunitensi non verrebbero però
accettati in virtù del loro valore intrinseco (dopo tutto, si
LA PRIMA INTRODUZIONE DELLA MONETA tratta semplicemente di un pezzo di carta), ma perchè
Il primo passo verso l’introduzione del sistema moneta- sono le regole stabilite dal governo che ci obbligano a
rio che tutti oggi conosciamo, si verificò con la creazione farlo. Il governo ha fatto sì che i dollari diventassero oggi
di un sistema centralizzato merce-denaro. In questo tipo il bene più fungibile (persino più utile dei lingotti d’oro).
di sistema, l’acquirente non com-
prava la merce (ad esempio il cibo)
dando in cambio al venditore una
certa quantità di oro, ma piuttosto
consegnava una nota rilasciata e
firmata da una banca. Questa nota,
o certificato, attestava che la ban-
ca avrebbe riservato nelle proprie
casseforti una quantità di oro cor-
rispondente al valore del certificato
emesso. Chiunque fosse entrato
in possesso di questo certificato,
avrebbe potuto riscuoterlo in ogni
momento consegnandolo alla ban-
ca. Si trattava quindi di una vera e
propria moneta (o se si preferisce,
di una banco-nota), che poteva es-
sere trasferita di mano in mano e
utilizzata per acquistare cibo o altri
generi di merce. In questo tipo di
sistema, la banca rappresentava
il punto centralizzato, la cui fun-
zione era quella di conservare in un Figura 1: i lingotti d’oro custoditi dalle banche

29
TECH

Come già accennato, queste banconote, di per sè, non il termine corretto in questo ambito è quello di “query”).
hanno alcun valore, ma come conseguenza del regola- L’accesso a queste informazioni è inoltre riservato, oltre
mento messo in atto posseggono esattamente il valore che alla banca, ai soli titolari del conto, in modo tale da
stampato su di esse (questo numero viene anche indi- garantire la riservatezza dei dati.
cato dagli esperti di economia con il termine di “valore Supponiamo ora che il database utilizzato dalla banca
facciale”). Per identificare questo tipo di moneta si usa possa contenere un numero illimitato di record, e che
anche spesso il termine latino “Fiat”, che potremmo tra- quindi non vi sia un limite al numero di transazioni re-
durre in italiano con “sia fatta”, intendendo con questa gistrabili. Supponiamo inoltre che la banca inizi a popo-
accezione il significato di un ordine, o decreto, stabilito lare il database per un certo cliente scrivendo il record
da un governo. numero 1, e continui seguendo un numero crescente di
record. Possiamo a questo punto individuare due rego-
IL FUTURO: TRA DECENTRALIZZAZIONE E le fondamentali che la banca deve seguire scrupolo-
BLOCKCHAIN samente:
Blockchain, la tecnologia che sta dietro la moneta Bit- 1. irreversibilità – se in un dato momento la banca
coin, rappresenta un concetto molto più semplice di sta scrivendo la transazione associata al record
quanto si possa immaginare. numero X, non dovrà mai tornare indietro, mo-
Possiamo capire facilmente in cosa consiste la dificando ad esempio le transazioni con indice
blockchain e come essa funziona, facendo un’analogia inferiore a X;
con il conto corrente bancario. Chiunque abbia un conto 2. latenza – se in un certo istante la banca sta
corrente in una banca, sa come sia possibile conoscere scrivendo il record numero X, la corrispondente
il saldo del conto, e come ottenere la lista delle transa- transazione (in quel frangente) non può anco-
zioni inerenti quel conto riferita a un certo periodo (tran- ra essere ritenuta valida, e non si può fare affi-
sazioni sia in uscita che in entrata). La banca memo- damento su di essa quando il cliente chiede ad
rizza tutte queste informazioni in un proprio database esempio il saldo del proprio conto. Ciò avviene
privato e protetto, permettendo ai propri clienti di ese- anche con l’esperienza quotidiana che ognu-
guire delle interrogazioni su di esso (come sappiamo, no di noi può avere nel gestire il proprio conto

Figura 2: nell’era moderna internet abilita nuove forme di pagamento

30
TECH

corrente: non sempre le transazioni si riflettono verificando che sul suo conto vi siano fondi sufficienti
immediatamente sullo stato del conto corrente per onorare la transazione. Clair, per guadagnarsi la
(vengono cioè “contabilizzate”), può essere in commissione associata alla transazione, non devrà fare
generale richiesto un certo tempo prima che ciò altro che creare una nuova transazione (creare cioè un
avvenga, e che il saldo del conto assuma per- nuovo record nel database), e aggiungerla al database
tanto il valore effettivo. comune condiviso tra tutti gli impiegati. Ciò è necessa-
rio, in quanto Clair deve assicurarsi che ogni altro impie-
Queste due regole indicano che il record X è l’unico gato possa convenire sul fatto che la transazione è già
che può essere scritto, ma non può ancora essere letto, stata processata da Clair, e che pertanto soltanto a lei
mentre i record 1, 2, .., (X-1) possono tutti essere letti, spettino le commissioni relative all’operazione. Quan-
ma non sono più scrivibili (figura 2). do tutti gli impiegati sono d’accordo su questo punto,
Un’altra questione importante riguarda le spese asso- la transazione è dichiarata valida, e a Clair può essere
ciate alla transazione. Ogni volta in cui la banca registra accreditata la commissione.
una transazione che ha come origine Alice e come de- Come è facile comprendere, la necessità di aggiungere
stinatario Bob, addebiterà ad Alice una certa somma di una transazione al database comune, e far sì che tutti
denaro come commissione per il servizio svolto dalla gli impiegati approvino ogni operazione, non è un com-
banca. L’importo di questa commissione non è fisso, ma pito semplice. Supponiamo infatti che Dan, un altro im-
ogni banca opera in una sorta di mercato libero. piegato che come Clair abbia ricevuto le stesse informa-
zioni sulla transazione da processare, cerchi anche lui
DECENTRALIZZIAMO! di aggiungere un nuovo record con la transazione al da-
I concetti esposti nel paragrafo precedente indicano tabase condiviso. La transazione di Alice, ovviamente,
come si dovrebbe comportare un sistema centralizzato. non può essere processata due volte, poichè in tal caso
Vediamo ora, invece, come si dovrebbe comportare un Alice dovrebbe pagare due volte le commissioni sulla
sistema decentralizzato. stessa transazione. A chi allora spettano le commissioni
La decentralizzazione del sistema implica comunque la per la transazione di Alice? A Clair oppure a Dan? La
necessità di memorizzare in modo efficiente e affidabile risposta è molto semplice: le commissioni spetteranno
ogni transazione, ma senza richiedere per questa ope- a chi tra i due impiegati si dimostrerà più veloce nel pro-
razione il controllo di una banca centrale. Inoltre, è cessare la transazione.
importante notare come, nel caso non esistesse un’au- Nel mondo reale, processare una transazione tramite
torità centrale riconosciuta da tutti (come la banca, op- un computer è un’operazione molto semplice, e può
pure il governo stesso), occorrerebbe comunque met- richiedere soltanto alcuni millisecondi (o persino un
tere in atto un meccanismo in base al quale chiunque tempo inferiore). Ciò potrebbe instaurare un clima di
possa riconoscere il valore di un oggetto, sia che si tratti competizione tra Clair e Dan, ciascuno nel tentativo di
di una banconota o di una moneta. Nel nostro caso, tut- processare il più velocemente la transazione e accap-
tavia, estendiamo quest’ultimo aspetto, assegnando un pararsi le commissioni. Non solo, si potrebbe anche
valore anche a un certo tipo di informazione digitale. creare una situazione in cui (nel decidere a chi tra i due
Nel seguito dell’articolo parleremo di decentralizzazione debbano essere accreditate le commiissioni) parte degli
dell’archivio delle transazioni, e successivamente ve- impiegati sostiene Clair, mentre un’altra parte sostiene
dremo come questi “oggetti digitali” (ai quali è assegna- Dan. Esiste tuttavia un modo per far sì che tutti gli impie-
to un determinato valore) vengono creati nel sistema. gati concordino su chi abbia processato la transazione,
Supponiamo ora che, anzichè una banca, abbiamo a e a chi, di conseguenza, andranno accreditate le com-
disposizione un gruppo di impiegati in grado di proces- missioni. La soluzione consiste nell’utilizzare un puzzle:
sare le transazioni di Alice. Alice, però, non conosce per ogni transazione che può essere processata da ogni
tutti questi impiegati, ma soltanto alcuni. Quando Alice impiegato, e aggiunta al database comune e condiviso,
vuole inviare una somma di denaro a Bob, fornisce le viene generato in modo del tutto casuale un puzzle uni-
informazioni relative alla transazione ad ogni impiegato co, molto difficile da risolvere. Il fatto che ogni puzzle
che conosce. Queste informazioni contengono il nume- venga generato in modo casuale e sia diverso da tutti gli
ro di conto di Bob, la cifra da trasferire, e l’importo delle altri creati in precedenza è molto importante: con riferi-
commissioni che Alice è disposta a pagare in cambio mento al nostro esempio, ciò implica che la transazione
del servizio. Almeno uno di questi impiegati (supponia- che sta per essere processata da Clair contiene un puz-
mo che si chiami Clair) riceverà il messaggio di Alice, zle differente da quello della transazione di Dan, nono-

31
TECH

stante gli altri dati della trnasazione siano gli stessi (si traccia degli indirizzi IP dei minatori. I minatori associa-
tratta per entrambi dell’operazione richiesta da Alice). ti a questi indirizzi IP vengono notificati ogni volta che
Essendo i puzzle molto complessi, la loro risoluzione chiediamo al nostro portafoglio elettronico di trasferire
richiederà un certo tempo, ed è pertanto plausibile che a qualcuno del denaro, cioè ogni volta che creiamo una
uno degli impiegati arrivi alla soluzione prima degli altri, transazione da processare. Inoltre, l’applicazione inter-
avendo a disposizione un tempo sufficiente per convin- roga periodicamente i minatori per verificare se qualcu-
cerli di essere arrivato per primo. no ha ordinato un trasferimento di denaro verso di noi
A questo punto sappiamo come la moneta viene tra- (se cioè, abbiamo ricevuto una qualche forma di paga-
sferita, e come gli impiegati possano guadagnarsi dei mento).
soldi processando le transazioni in cambio delle relative Una volta che i minatori sono stati notificati circa la tran-
commissioni. Ma che cos’è realmente questa moneta, sazione che intendiamo eseguire, essi la processeran-
e come ha ottenuto Alice la quantità di denaro poi tra- no cercando una soluzione al puzzle ad essa associato.
sferita a Bob? Il minatore che troverà per primo la soluzione al puzzle
Possiamo senz’altro dire che questa moneta non è di- si guadagnerà la commissione, oltre a un ammontare
sponibile in una forma fisica, dal momento che non fisso di denaro (in Bitcoin, o frazioni di esso).
abbiamo dato mandato ad alcuna entità centrale affin- Vediamo ora di dare a tutti gli “oggetti” sopra menzionati
chè crei la moneta e la diffonda tra il popolo. Per rispon- i nomi corretti scelti dalla comunità Bitcoin. L’insieme di
dere alla domanda, possiamo prendere ancora come transazioni (processabili da ogni minatore) viene chia-
riferimento gli impiegati dell’esempio precedente, chia- mato “block”, e un insieme di transazioni viene perciò
mandoli ora “minatori”. Queste termine riflette il duro detto “blocco” di transazioni. Il database comune e con-
lavoro da essi compiuto, che consiste nel trovare una diviso viene chiamato “block-chain”, dal momento che
soluzione a un problema di complessità elevatissima, si tratta di una catena di blocchi ordinati, ciascuno dei
un compito analogo a quello svolto da un minatore re- quali contiene un insieme di transazioni già processate
ale, alla ricerca di minerali o pietre preziose nascosti e validate. Il puzzle di elevata complessità che i mina-
dietro spessi strati di roccia. tori devono cercare di risolvere è in sostanza rappre-
Resta da capire come venga generata la moneta. sentato dall’output prodotto da una funzione di hash
Come è facile intuire, i minatori sono proprio coloro crittografico.
che danno origine alla nuova moneta. Essi investono Inoltre, dal momento che ai minatori è richiesto di ese-
un’enorme quantità di tempo e lavoro, incentivati dal- guire un numero elevato di tentativi al fine di trovare una
la ricompensa offerta dal sistema. I minatori, infatti, soluzione al puzzle, si dice che essi stanno dimostran-
guadagnano sia attraverso le commissioni legate alle do (“provando”) di avere lavorato duramente; in inglese
transazioni processate, sia con ogni record creato lo- questo termine prende il nome di “proof of work”, o
calmente e assegnato a una transazione da processare semplicemente PoW.
(con riferimento all’esempio precedente, sia Clair che
Dan avrebbero creato un record simile). Occorre pre- LINK
stare attenzione a una proprietà molto importante L’articolo originale, “Bitcoin – Money Decentralization”
del Bitcoin: un minatore, anche lavorando duramente, apparso sul blog vpnMentor, ha come Autore Avishay
potrebbe non guadagnare nulla. Tutti i minatori concor- Yanay, appartenente al gruppo di ricerca crittografico
dano su questa regola fondamentale: a chi tra loro trovi presso il Bar-Ilan Cyber Center. Come l’Autore stesso
per primo la soluzione a un puzzle, verranno non solo precisa, l’articolo è stato scritto da un esperto di infor-
accreditate le commissioni relative alla transazione, ma matica e non da un esperto di economia, pertanto alcuni
anche un ammontare fisso di nuove monete digitali, cre- concetti inerenti il mondo economico e il sistema mone-
ate in quel momento appositamente per questo scopo. tario sono stati volutamente semplificati.

RIASSUMIAMO IL TUTTO
Alice, che vuole trasferire una certa somma di denaro
a Bob, potrebbe rappresentare una qualunque perso- L’autore è a disposizione nei commenti per eventuali
approfondimenti sul tema dell’Articolo. Di seguito il link per
na che utilizzi un’applicazione di portafoglio elettronico
accedere direttamente all’articolo sul Blog e partecipare alla
installata sul proprio smartphone o PC. Questa appli- discussione:
cazione non è altro che un programma in grado di me- https://it.emcelettronica.com/bitcoin-la-moneta-decentralizzata
morizzare i bitcoin sul dispositivo elettronico, tenendo

32
Mini registratore
MAK ER allo stato solido con
ESPertino
di Giovanni Di Maria

A grande richiesta pubblichiamo una semplice e didattica applicazione audio. Molti lettori ci hanno
chiesto, infatti, se era possibile registrare o riprodurre dei suoni audio con ESPertino. La risposta è
si. La durata del campionamento dipende, ovviamente, dalla memoria RAM disponibile nella MCU. Per
grosse quantità di dati è conveniente utilizzare le SD esterne. Il dispositivo presentato in questo artico-
lo usa la memoria interna dell’ESP32 e si avvale dell’ADC e del DAC.

INTRODUZIONE è digitale.

O
ggi si sente molto parlare di registratori allo
stato solido. Si tratta di dispositivi che usano la ADC E DAC
tecnologia a stato solido per registrare e con- Il concetto di ADC e DAC è chiaramente illustrato in fi-
servare le informazioni audio. Tale modalità permette di gura 1. Se parliamo attraverso un microfono, il segnale
acquisire e riprodurre i segnali audio sotto forma di dati prelevato alla sua uscita è caratterizzato da una forma
digitali, consentendo una successiva e semplice gestio- elettrica analogica. Le varie parole o musiche acquisi-
ne. Tale tecnologia, se ci pensiamo bene, è più alla por- te dal trasduttore sono convertite in equivalenti segna-
tata di mano di quella analogica. E’ sufficiente, infatti, li elettrici di diversa entità. La conversione analogico-
memorizzare il segnale audio in tante celle di memoria, digitale, l’ADC, consiste nel trasformare tale segnale
campione per campione, tramite acquisizione ADC, per analogico, continuo nel tempo e con infiniti valori, in
poi riprodurle dallo stesso supporto con una riproduzio- una sequenza di dati numerici, gestibili e memorizzabili
ne DAC, senza utilizzare supporti meccanici in movi- facilmente nella memoria di elaboratore. Purtroppo c’è
mento o in rotazione. L’insieme delle informazioni viene una piccola perdita d’informazione, in quanto la memo-
letto e riprodotto, cella per cella, come avviene per un ria non è infinita e la bontà del segnale deve essere ne-
nastro magnetico, ma in questo caso l’intero processo cessariamente ridotta. Il DAC si comporta esattamente

Figura 1: ADC e DAC

33
MAKER

Figura 2: il microfono a condensatore e suo funzionamento a riposo e a regime

al contrario. Converte, infatti, un segnale digitale in uno densatore, provvisto di due terminali. Il suo costo è dav-
analogico. La rete è stracolma di letteratura a riguardo vero irrisorio, si trova anche per meno di due euro. Lo
e una semplice ricerca su Internet consente di trovare schema di cablaggio prevede la connessione a una
migliaia di argomentazioni. E’ inutile, pertanto, ripetere fonte di alimentazione. I 3.3V di ESPertino vanno più
gli stessi concetti, in questa sede. che bene per lo scopo. Il microfono deve essere prece-
duto da una resistenza di polarizzazione in modo da
IL REGISTRATORE CON ESPERTINO limitare il flusso di corrente e porre a metà quadrante
Nel corso dei precedenti articoli basati sulla scheda di lavoro la sua tensione di uscita, a riposo. Nel nostro
ESPertino, molti lettori hanno espresso il desiderio di caso abbiamo utilizzato una resistenza da 10 kohm ma
vedere pubblicati consigli o istruzioni che dessero la è bene controllare effettivamente la tensione a riposo,
possibilità, quanto meno, d’iniziare a trattare questo im- da caso a caso. Essa può, infatti, risultare diversa a
portante argomento dell’elettronica. Il nostro registrato- seconda del tipo di microfono in possesso. La figura 2
re, come dice il titolo, è realmente minimale. Lo scopo mostra tale dispositivo, assieme al relativo schema di
della presente pubblicazione è, infatti, esclusivamente collegamento e ai due grafici della risposta, sia in re-
quello didattico. E, inoltre, costituisce una delle tante gime statico che dinamico. Si preferisce, solitamente,
idee che si possono seguire per lo scopo prefissato. Le collocare la tensione del segnale audio a riposo a metà
caratteristiche del recorder sono le seguenti: strada (ossia tra 0V e VCC) in modo che esso possa
• Uso di microfono a condensatore; oscillare liberamente senza eventuali clipping che po-
• Durata della registrazione: 1,35 secondi; trebbero produrre indesiderate distorsioni. Le misure
• Risoluzione della riproduzione: 8 bit (è la risolu- dei dati e dei relativi grafici sono stati prodotti con il Po-
zione del DAC dell’ESP32); Scope Mega1.
• Frequenza di campionamento: 22 Khz.
CABLAGGIO DI PRINCIPIO
IL MICROFONO Lo schema di collegamento dell’intero sistema risulta
Per il progetto si è utilizzato un piccolo microfono a con- estremamente semplice e, soprattutto, utilizza esclu-

34
MAKER

sivamente la scheda ESPertino, almeno nella sua ESPertino.


configurazione minimale. Esso è visibile in figura 3. Il IL DAC DELL’ESP32
progettista, in seguito, potrà scegliere, eventualmente, Il microcontrollore dispone di due canali DAC per con-
di aggiungere amplificatori, filtri, microfoni preamplificati vertire due segnali digitali in altrettanti analogici. La sua
e quant’altro che possa aumentare il livello qualitativo di struttura interna è composta da una stringa integrata di
registrazione e di riproduzione. Esaminiamo i collega- resistori e da un buffer. I due canali effettuano delle con-
menti salienti dello schema elettrico: versioni indipendenti tra loro. Purtroppo essi hanno una
• Il microfono, come detto prima, è collegato alla risoluzione di soli 8 bit ma la loro velocità operativa non
porta 35 di ESPertino, trattata come ingresso fa rimpiangere minimamente altre configurazioni più
analogico. A riposo si deve misurare la tensione elevate. Esse fanno capo alle porte GPIO25 e GPIO26
di VCC/2, ossia di circa 1.6V. Qualche percento dell’ESP32 (rispettivamente i pin 14 e 15). Per produr-
in più o in meno non è assolutamente critico; re un segnale analogico si deve utilizzare la seguente
• L’uscita audio fa capo al pin della scheda con- funzione:
trassegnato con x2. Si tratta della GPIO25, fa-
cente capo al pin 14 dell’ESP32 e relativa al esp_err_t dac_out_voltage(dac_channel_t channel,
canale 1 del DAC. Si consiglia di aggiungere un uint8_t dac_value);
condensatore elettrolitico di pochi microfarad,
per attuare un disaccoppiamento in continua. Tale funzione produce una tensione elettrica analogi-
Il terminale positivo va collegato verso la scheda ca sulla porta specificata, che risulta compresa tra oV

Figura 3: il cablaggio per il mini registratore vocale

35
MAKER

e VDD, a seconda del parametro passato “dac_value” inoltrandolo verso la porta DAC.
(0~255). Non è necessario configurare la porta in uscita In questa fase è importante gestire correttamente
poiché quando la funzione viene invocata, essa è auto- la temporizzazione tra un campione e il successivo.
maticamente settata con funzionalità di RTC DAC. Cambiandola, è possibile creare effetti di rallentamento
I parametri da passare, come si vede, sono due: o accelerazione della voce, ottenendo interessanti truc-
• channel: che costituisce il canale DAC scelto; chi audio. Ecco di seguito lo sketch, con le varie righe
• dac_value: che rappresenta il livello di tensione numerate progressivamente per poter spiegare e chia-
da generare, compreso tra 0 e 255 (0V~VDD). rire, in dettaglio, le funzioni più critiche e maggiormente
La funzione ritorna ESP_OK, se l’operazione è andata a importanti.
buon fine, oppure ESP_ERR_INVALID_ARG, quando si • Riga 1: è necessario includere questo file di he-
verifica un errore di parametro. ader per gestire le funzioni e le costanti per il
E’ necessario far seguire a essa una pausa di attesa del trattamento del DAC. Si invita il lettore anche a
corretto tempo calcolato, in quanto la sua esecuzione dargli una occhiata. E’ memorizzato all’interno
risulta estremamente veloce. della cartella ..\arduino-1.8.4\hardware\espres-
In alternativa si può anche usare la funzione: sif\esp32\tools\sdk\include\driver\driver;
• Riga 2: il programma può gestire fino a 30000
dacWrite(port, dac_value). campioni. Purtroppo la memoria RAM dell’E-
SP32 è abbastanza limitata e un incremento di
Leggi anche: Corso di programmazione Python tale numero lo potrebbe facilmente mandare in
su Flip&Click: ADC e DAC crash;
• Riga 3: tra un campione e il successivo viene
IL DISPOSITIVO DI RIPRODUZIONE AUDIO rispettata una pausa di attesa di 45 microsecon-
Per le prime prove e sperimentazioni si può tranquilla- di. Con tale configurazione la registrazione ha
mente utilizzare un piccolo altoparlante dal diametro di una durata di 30000*(45/1000000)=1.35 secon-
5 cm. oppure un riproduttore piezo. Il volume di riprodu- di e la riproduzione avviene alla frequenza di
zione sarà, ovviamente, estremamente basso ma co- 1000000/45=circa 22 Khz;
munque sufficiente per percepire chiaramente il parlato. • Riga 8: viene dichiarato l’array d’interi che ospi-
Anche una piccola cuffia va senz’altro bene. In seguito terà tutti i campioni sonori. La gestione di tale
sarà possibile aggiungere un piccolo amplificatore au- array avviene per suo scorrimento;
dio, magari realizzato con un transistor o con l’integra- • Righe 14~15: vengono predisposti i parametri
to LM386 o, addirittura, con un semplice operazionale operativi per l’ADC, ossia un fondo scala di 3.3V
(741 o TL081). e una risoluzione di acquisizione pari a 12 bit;
• Righe 18~26: si accende il diodo Led che avvi-
LO SKETCH sa della registrazione in corso ed ESPertino
Il listato proposto, ovviamente di principio, non è parti- inizia ad acquisire la voce dal microfono (vedi
colarmente complicato e dovrebbe risultare abbastanza figura 4). Si ricorda che i diodi Led a bordo della
comprensibile anche per i principianti e i programmatori scheda hanno l’anodo a VCC il catodo collegato
alle prime armi. L’importante è capire bene il suo con- verso le porte di I/O per cui, gioco forza, si devo-
cetto di funzionamento. La sua filosofia è la seguente: no pilotare tramite uno stato logico invertito;
• Deve acquisire un certo numero di campioni dal • Righe 27~30: adegua l’intero array dei campioni
microfono e li deve memorizzare, in forma digi- a 8 bit per il DAC, dividendo semplicemente i
tale, all’interno di un array in memoria RAM. Tale valori per 16;
acquisizione è effettuata a 12 bit; • Righe 31~38: riproduce la forma d’onda memo-
• Deve adeguare (trasformare) tutti i campioni a 8 rizzata all’interno dell’array, inviando ogni singo-
bit per poterli consegnare al DAC, che lavora a lo campione alla porta DAC. In questo modo, in
tale risoluzione. L’adeguamento viene effettua- uscita, sarà riprodotto l’esatto (quasi) segnale e,
to semplicemente dividendo i valori per sedi- quindi, inoltrato successivamente all’altoparlan-
ci. Oppure, in alternativa, si può effettuare uno te.
shift di bit di 4 posti a destra, per ottenere il
medesimo risultato; COME SI USA
• Deve riprodurre i campioni “scorrendo” l’array e Il dispositivo inizia subito a funzionare non appena si

36
MAKER

1 #include <driver/dac.h>
2 #define SAMPLES 30000
3 #define PAUSA 45
4 int LED1=13; // Led acceso durante la registrazione
5 int LED2=5; // Led acceso durante la riproduzione
6 int digitale; // Variabile che contiene un solo campione microfonico acquisito
7 int k;
8 int campioni[SAMPLES]; // Vettore contenente tutta la registrazione
9 void setup() {
10 pinMode(LED1,OUTPUT); // Porta in uscita
11 pinMode(LED2,OUTPUT); // Porta in uscita
12 digitalWrite(LED1,HIGH); // Spegne Led
13 digitalWrite(LED2,HIGH); // Spegne Led
14 analogSetAttenuation(ADC_11db); // Fondo scala ADC: 3.3V
15 analogReadResolution(12); // Risoluzione ADC a 12 bit
16 }
17 void loop() {
18 //-----Inizia la registrazione e memorizza in array-----------------
19 digitalWrite(LED1,LOW); // Accende Led
20 for(k=0;k<SAMPLES;k++) {
21 digitale=analogRead(35); // Legge il microfono
22 campioni[k]=digitale; // Memorizza segnale in array
23 delayMicroseconds(PAUSA); // Aspetta
24 }
25 digitalWrite(LED1,HIGH); // Spegne Led
26 delay(200);
27 //-----Divide i campioni per 16 per riportarli a 8 bit per il DAC-------
28 for(k=0;k<SAMPLES;k++) {
29 campioni[k]=campioni[k]/16; // Adeguamento per DAC
30 }
31 //-----------Riproduce la registrazione in altoparlante-------
32 digitalWrite(LED2,LOW); // Accende Led
33 for(k=0;k<SAMPLES;k++) {
34 dac_out_voltage(DAC_CHANNEL_1, campioni[k]); // Invia il segnale al DAC
35 delayMicroseconds(PAUSA);
36 }
37 digitalWrite(LED2,HIGH); // Spegne Led
38 delay(2000);
39 }

37
MAKER

Figura 4: il segnale proveniente dal microfono a condensatore, registrato con il PoScope Mega1

applica l’alimentazione elettrica a ESPertino. Esso non fono. A pensarci bene, la maggior parte del carico svolto
ha bisogno di alcuna taratura o regolazione, se non è determinato dal firmware creato. La soddisfazione nel
quella di controllare la tensione a riposo del microfono, realizzare tali tipologie di applicazioni è davvero tanta.
che deve risultare circa VCC/2. Le sue fasi operative, Con opportuni accorgimenti è possibile salvare le pro-
appena avviato, sono le seguenti: prie parole e creare, in tal modo, una sorta di piccola li-
1. Il Led 1 resta illuminato per i primi 1.35 secondi. breria composta da suoni e da messaggi, per poi essere
In questa frazione di tempo si deve iniziare subi- utilizzati all’occorrenza. Si ricordi, però, che la memoria
to a parlare, posizionandosi molto vicini al micro- RAM nativa dell’ESP32 è molto ridotta e non permette
fono. Dobbiamo ricordare, infatti, che quest’ulti- grosse memorizzazioni di dati e d’informazioni.
mo non è preamplificato e la voce prodotta deve Durante la riproduzione potrebbe udirsi un leggero fru-
risultare abbastanza robusta; scio (molto simile al rumore bianco) che si riduce di tan-
2. Quindi, trascorsi i primi 1.35 secondi, la registra- to alla presenza fisica della voce. Si può tentare di atte-
zione termina e il Led 1 si spegne. Si illumina, nuarlo con l’adozione di filtri in entrata e utilizzando dei
così, il Led 2 che testimonia l’inizio della ripro- dispositivi di registrazione migliori, magari coadiuvati da
duzione su altoparlante. Il tutto avviene con il cavetti schermati.
medesimo tempo; Nei nostri futuri articoli approfondiremo di più la gestio-
3. Dopo di ciò, la riproduzione ha termine e anche ne dei segnali audio, proponendo altre interessantissi-
il secondo Led si spegne. Dopo una pausa di 2 me applicazioni con la scheda ESPertino.
secondi l’intero processo si ripete da capo, all’in- Alle prossime.
finito.

CONCLUSIONI
L’autore è a disposizione nei commenti per eventuali
Quello presentato nell’articolo è solo un prototipo spe- approfondimenti sul tema dell’Articolo. Di seguito il link per
rimentale (ma d’importanza notevole) che illustra come accedere direttamente all’articolo sul Blog e partecipare alla
registrare e riprodurre un breve segnale audio. Si può discussione:
https://it.emcelettronica.com/mini-registratore-allo-stato-solido-
considerare, a tutti gli effetti, un fedele pappagallo elet-
con-espertino
tronico, che ripete ciò che viene pronunciato al micro-

38
Il Kit di ESPertino:
MAK ER temperatura e umidità
sotto controllo con il
DHT11 di Giovanni Di Maria

Il kit di ESPertino prevede, tra gli altri, il sensore di umidità e di pressione DHT11. Vediamo come uti-
lizzarlo al meglio con la nostra scheda, ricordando che i dati da esso misurati e restituiti sono di tipo
digitali e non è necessario alcun ingresso analogico. Utilizzando delle apposite librerie , la gestione del
modulo è ancora più semplice.

IL SENSORE

S
i tratta di un dispositivo per rilevare la
temperatura e l’umidità (vedi figura 1).
Può essere adottato in tanti ambiti di-
versi come, ad esempio, deumidificatori, con-
trolli automatici, stazioni meteo, domotica, ecc.
Le sue misure risultano molto ridotte e, non
considerando i piedini di connessione, sono di
12mm. x 5.5mm. x 15.5mm. E’ dotato di un sen-
sore di umidità e di un termistore di tipo NTC.
Come detto nell’introduzione, esso fornisce le
elaborazioni tramite un segnale digitale e non
analogico. E’ necessario, pertanto, predisporre
un adeguato algoritmo di acquisizione e deco-
difica. La lettura delle informazioni acquisite,
per la sua conformazione elettronica, può es-
sere effettuata, come affermato dal datasheet,
almeno ogni sei secondi. Letture consecutive
più ravvicinate potrebbero influire negativamen-
te sulla bontà delle misurazioni. Al di la di tale Figura 1: il sensore di temperatura e di umidità DHT11
aspetto esso può essere considerato un com-
ponente esente da interferenze, molto affidabile non deve essere collegato.
e preciso, anche a lungo termine. Il datasheet fornisce
preziose informazioni in merito. CARATTERISTICHE TECNICHE
Ogni esemplare del sensore è stato accuratamente Il DHT11 misura l’umidità all’interno dell’intervallo 20-
calibrato in laboratorio. I coefficienti della calibrazione 90%RH, con una precisione del +/-5%. La temperatura,
eseguita vengono memorizzati nella sua memoria e invece, è rilevata in un range compreso tra 0°C e 50°C,
utilizzati successivamente dal processo di misurazio- con una accuratezza di +/-2°C. Il dispositivo è, dunque,
ne delle due grandezze fisiche. Il componente riesce a adatto per la maggior parte delle applicazioni.
trasmettere i dati fino a una distanza di 20 metri, con il
cavo naturalmente. La sua piedinatura prevede il colle- LA COMUNICAZIONE DEI DATI
gamento con quattro piedini, anche se il pin numero tre Il DHT11 utilizza una semplificata comunicazione su un

39
MAKER

solo bus di dati. Essi transitano su una sequenza com- contrario si potrebbe verificare una instabilità di funzio-
pleta di 40 bit e precisamente: namento del sistema. E’ caldamente consigliato, altresì,
• 8 bit per la parte intera dell’umidità; l’adozione di un condensatore da 100nF collegato tra
• 8 bit per la parte decimale dell’umidità; l’alimentazione del sensore e la massa, con funzione
• 8 bit per la parte intera della temperatura; di filtro. Può essere montato vicino a esso. Inoltre se il
• 8 bit per la parte frazionaria della temperatura; sensore viene alimentato con una tensione di 3.5VDC, i
• 8 bit per il checksum. relativi cavi di collegamento non dovrebbero superare la
lunghezza di 20cm. In caso contrario, l’inevitabile cadu-
Qualche esempio chiarirà meglio il concetto. Si suppon- ta di tensione della linea abbasserà l’alimentazione del
ga che il sensore spedisca la seguente sequenza di 40 sensore causando, molto probabilmente, errori di misu-
bit: ra. Il sensore dovrebbe essere anche montato distante
da altri componenti elettronici “caldi” e non esposto a
00110101 00000000 00011000 00000000 01001101 luce ultravioletta, pena il degrado delle prestazioni.

Si può calcolare manualmente il checksum in maniera LA LIBRERIA PER LA GESTIONE DEL SEN-
estremamente semplice, sommando i primi 4 bytes e SORE DHT11
confrontando la somma con il quinto byte: Sebbene la programmazione “grezza” e a basso livello,
per la comunicazione di ESPertino con il sensore, possa
essere effettuata con un po’ di difficoltà, essa potrebbe
00110101+
costituire una sfida molto didattica e utile per il program-
00000000+ matore e lo sviluppatore. Ne verrebbe fuori, tuttavia, un
codice un po’ più lungo ma estremamente riutilizzabile.
00011000+
In ogni caso esistono tante librerie che gestiscono egre-
00000000= giamente il DHT11 e con un minimo sforzo e di tempo si
--------- possono scrivere programmi molto complessi, con po-
che righe di codice. Tutto il funzionamento del sensore
01001101
si basa sulla sua restituzione delle informazioni in un
pacchetto composto da 40 bit.
Il metodo proposto dall’articolo installa la libreria in ma-
La somma è equivalente al checksum dell’esempio, niera estremamente semplice e trasparente. Non occor-
pertanto il pacchetto è stato spedito correttamente. Se re installare nulla ma si deve solo accedere alla gestio-
la somma risultasse differente dal quinto byte il dato ne delle librerie sull’IDE di Arduino, come mostrato in
finale non sarebbe attendibile. Sempre relativamente figura 3, e scegliere la SimpleDHT.
all’esempio di cui sopra, possiamo leggere le seguenti Dopo la sua selezione essa sarà automaticamente
informazioni sulle due grandezze fisiche: installata nella cartella C:\Users\NomeUtente\Docu-
• l’umidità è pari a (00110101)2=(53%RH)10 ments\Arduino\libraries. Se ciò dovesse risultare un
• la temperatura è pari a (00011000)2=(24°C)10 problema logistico, si può tranquillamente “spostare” la
cartella SimpleDHT nel percorso più comodo ..\ardui-
SCHEMA DI PRINCIPIO no-1.8.5\libraries. In questo modo tutte le librerie saran-
Lo schema di principio di collegamento è visibile in figu- no allocate nel medesimo posto, ottenendo un ordine
ra 2. La sua semplicità, come si può notare, è estrema. maggiore delle directory. E’ consigliabile esplorare un
Le informazioni, circa le grandezze fisiche misurate, po’ tale cartella, come mostrato in figura 4. Essa contie-
viaggiano su una sola linea di dati, bit dopo bit. La resi- ne anche tanti utilissimi esempi, che possono costituire
stenza di pull-up da 5K sulla linea dei dati è consigliata un passo iniziale per iniziare a scrivere i propri progetti.
se il cavo risulta più corto di 20 metri. Per lunghezze Inoltre, in essa troviamo anche un utile file “readme”, il
maggiori occorrerà scegliere valori differenti. Il modu- file d’inclusione “SimpleDHT.h” e il sorgente della libre-
lo del sensore può essere alimentato con una tensio- ria “SimpleDHT.cpp”.
ne compresa tra 3.5V e 5.5V. Una raccomandazione
per i programmatori è la seguente: dopo aver fornito APPROCCIO INIZIALE CON IL MODULO
tensione al DHT11 occorre aspettare almeno un se- DHT11
condo, prima d’inoltrare qualsiasi comando. In caso Bene, dopo aver predisposto l’ambiente operativo, sia-

40
MAKER

Figura 2: schema di principio

Figura 3: la scelta della libreria SimpleDHT direttamente dall’IDE di Arduino

mo pronti per conoscere il sensore DHT11 e vederne il notare, essa è anche collegata a VCC tramite la resi-
suo funzionamento sul campo. Colleghiamolo, dunque, stenza di pull-up da 5Kohm. Ovviamente si può utiliz-
al nostro ESPertino con dei cavi abbastanza corti, se- zarne anche una dal valore commerciale di 4.7Kohm.
guendo il semplice cablaggio di cui alla figura 5. Il sensore è alimentato direttamente dalla VCC della
La porta 2 di ESPertino è collegata al pin 2 del sensore. scheda e la massa, ovviamente, deve essere in comu-
Tale linea costituisce il trasporto dei dati. Come si può ne ai due dispositivi. Il pin 3 del DHT11 non deve essere

41
MAKER

Figura 4: gli esempi contenuti nella cartella della libreria SimpleDHT

Figura 5: cablaggio del sistema e pinout del sensore DHT11

utilizzato, secondo le specifiche del suo datasheet. Il loro possiamo passare, finalmente, alla parte software
condensatore poliestere da 100nF è collegato tra VCC del progetto. Come esperimento per rompere il ghiac-
e GND per garantire un buon filtraggio da eventuali in- cio, proviamo semplicemente a far colloquiare ESPer-
terferenze esterne. tino e il sensore, realizzando un semplice sketch che
visualizzi, sul monitor seriale, la temperatura e l’umidità
LO SKETCH DI PROVA dell’ambiente in cui si effettua la misura. Il listato è molto
Dopo aver connesso fisicamente i due dispositivi tra di leggero ma serve per comprendere la filosofia di funzio-

42
MAKER

01 #include <SimpleDHT.h>

02 int pinDHT11 = 2; // Pin di collegamento

03 SimpleDHT11 dht11; // Oggetto dht11

04 void setup() {

05 Serial.begin(9600);

06 delay(1000); // Pausa iniziale di almeno un secondo

07 }

08 void loop() {

09 byte temperature = 0;

10 byte humidity = 0;

11 dht11.read(pinDHT11, &temperature, &humidity, NULL); // Legge il sensore

12 //---------Visualizza temperatura-------------

13 Serial.print(“Temperature: “);

14 Serial.print((int)temperature);

15 Serial.print(“ °C, “);

16 //---------Visualizza umidita’-------------

17 Serial.print(“Umidita’: “);

18 Serial.print((int)humidity);

19 Serial.println(“ H”);

20 delay(6000);

21 }

namento della libreria SimpleDHT. Esso e riportato sot- • Linea 3: il funzionamento del programma si basa
to. Lo commenteremo insieme tra poco. I numeri di linea sull’utilizzo della classe SimpleDHT11, sulla quale
progressivi non devono, naturalmente, essere digitati, creiamo l’istanza dell’oggetto “dht11” (o altro nome,
e servono solamente come riferimento per i commenti. secondo le proprie esigenze);
Descriviamo, adesso, in dettaglio le linee di programma • Linee 4÷7: la funzione setup() configura la comuni-
più significative, in modo da comprenderne a fondo il cazione seriale a 9600 baud (per la visualizzazione
principio di funzionamento. dei risultati al PC o altri dispositivi equivalenti) e,
• Linea 1: il file di header SimpleDHT.h deve essere soprattutto, imposta una pausa di attesa minima
incluso nel programma. Si consiglia, anche, di dare di un secondo, per dare modo al sensore di essere
un’occhiata a tale file, per studiare i metodi, i proto- operativo. Tale concetto è stato spiegato anche in
tipi di funzioni e le costanti in esso contenute; precedenza;
• Linea 2: la variabile pinDHT11 contiene il numero • Linee 9÷10: vengono definite, come tipo byte, le va-
del pin al quale fa capo la linea dei dati del sensore. riabili “temperature” e “humidity”. Esse conterranno
Ovviamente è possibile utilizzare qualunque altro le rispettive grandezze fisiche, dopo aver effettuato
nome di variabile e qualsiasi altra porta di ESPer- la lettura dal sensore;
tino; • Linea 11: questa è la riga più importante di tutto

43
MAKER

• il programma. Essa effettua fisicamente la lettura


delle informazioni dal sensore. Il programmatore IL FILE DI INTESTAZIONE SIMPLEDHT.H
non si accorge minimamente di quanto succede Andiamo, adesso, a dare un’occhiata al file d’intestazio-
“dietro le quinte”, in quanto la sequenza di opera- ne SimpleDHT.h. Esso è contenuto nella cartella Sim-
zioni svolte è davvero abbastanza complessa. Le pleDHT della libreria. Può essere aperto con un normale
funzioni della libreria sono scritte in linguaggio C++ editor di testo. Nella parte iniziale del contenuto sono
ed eseguono, a basso livello, l’intera gestione del definite alcune costanti, secondo la tabella 1.
modulo DHT11. Con questa funzione si prendono Nello stesso file viene definita la classe SimpleDHT
due piccioni con una fava. Essendo le variabili della con i seguenti metodi pubblici:
temperatura e dell’umidità passate per riferimento virtual int read(int pin, byte* ptemperature, byte*
(ossia per indirizzo) e non per valore, la loro resti- phumidity, byte pdata[40]);
tuzione avviene in un colpo solo. In pratica si tratta dove:
di una funzione che ritorna due valori, per dirla in • pin è la porta su cui transitano i dati del sensore;
maniera molto approssimata; • ptemperature è la temperatura, in Celsius. Si
• Linee 12÷19: con queste linee di codice avviene può ignorare, passando NULL;
semplicemente la visualizzazione dei valori di tem- • phumidity è l’umidità. Si può ignorare, passando
peratura e di umidità sul monitor seriale dell’IDE di NULL;
Arduino, come mostrato in figura 6; • pdata è l’insieme dei 40 bit letti dal sensore. Si
• Linea 20: il DHT11 è un sensore molto lento. Oc- può ignorare, passando NULL;
corre, dunque, prevedere un lungo lasso di tempo
tra una lettura e la successiva. Nell’esempio ogni Il parametro dell’umidità subisce qualche modifica a se-
loop attende sei secondi, prima di essere ripetuto. conda del tipo di sensore utilizzato. Se si usa il DHT11
In ogni caso, sia la temperatura che l’umidità sono l’umidità sarà restituita in H (esempio: 40H). Se si usa il
grandezze fisiche molto lente, dotate d’inerzia, per- DHT22, invece, l’umidità sarà restituita in RH% (esem-
tanto il lungo tempo di attesa non costituisce affatto pio: 37%RH). Sempre per quest’ultimo modello si può
un problema. utilizzare anche il metodo read2(), che consente di otte-

Figura 6: la misurazione della temperatura e dell’umidità con il monitor seriale dell’IDE di Arduino

44
MAKER

Costante Valore Significato

SimpleDHTErrSuccess 0 Success

SimpleDHTErrStartLow 100 Error to wait for start low signal

SimpleDHTErrStartHigh 101 Error to wait for start high signal

SimpleDHTErrDataLow 102 Error to wait for data start low signal

SimpleDHTErrDataRead 103 Error to wait for data read signal

SimpleDHTErrDataEOF 104 Error to wait for data EOF signal

SimpleDHTErrDataChecksum 105 Error to validate the checksum

Error when temperature and humidity are zero, it shouldn’t


SimpleDHTErrZeroSamples 106
happen

Tabella 1: costanti

nere dei dati più accurati, in quanto di tipo float: del segnale in figura 7). Almeno si saprebbe cosa c’è
virtual int read2(int pin, float* ptemperature, float* “dentro” il programma e in caso di problemi sarebbe
phumidity, byte pdata[40]); possibile intervenire immediatamente. Le informazioni
Per altri metodi si consiglia di studiare più approfondita- acquisite dal sensore, nell’esempio proposto, sono sta-
mente il file SimpleDHT.h. te visualizzate sul monitor seriale dell’IDE di Arduino.
Ovviamente il loro fine ultimo può essere qualsiasi altro
Leggi anche: Monitoraggio della temperatura con dispositivo grafico come, ad esempio, un display LCD,
ESPertino in WiFi con consultazione su Internet un visualizzatore a diodi Led o trasmessi, addirittura, su
Internet, con funzionamento di Web Server.
CONCLUSIONI
Con ESPertino e il sensore DHT11 il programmatore
ha la vita abbastanza facile nel realizzare i suoi proget-
L’autore è a disposizione nei commenti per eventuali
ti. Ovviamente le librerie agevolano di tanto il lavoro e approfondimenti sul tema dell’Articolo. Di seguito il link per
permettono di dedicarsi ad altri aspetti del sistema, ri- accedere direttamente all’articolo sul Blog e partecipare alla
sparmiando tanto tempo. L’ideale, ovviamente, sarebbe discussione:
https://it.emcelettronica.com/il-kit-di-espertino-temperatura-e-
quello di realizzare da sé le proprie librerie, in modo da
umidita-sotto-controllo-con-il-dht11
riutilizzarle secondo l’esigenze (vedi temporizzazione

Figura 7: sincronizzazione e comunicazione tra MCU e DHT11

45
WallPi: quando LEGO
MAK ER incontra Raspberry Pi
di Lorenzo Columbo

LEGO è sicuramente uno dei marchi più noti al mondo. Tra le numerose serie prodotte dalla casa da-
nese, una che suscita particolare interesse tra gli hobbisti è LEGO Technic, che consente di realizzare
piccoli veicoli in plastica. C’è poi un altro marchio che piace tanto a noi, ovvero Raspberry Pi. Ma cosa
succede quando si mettono insieme le enormi potenzialità di queste due realtà? Una delle infinite rispo-
ste possibili è WallPi, un veicolo cingolato dotato di webcam e controllabile over IP.

INTRODUZIONE za: mentre sono stati mantenuti, seppure con qualche

Q
uando si acquista un kit LEGO Technic, il gioco modifica, il vagone posteriore e la cabina di controllo,
consiste nell’assemblare un veicolo seguendo la struttura dei cingolati è stata semplificata ai minimi
un libretto di istruzioni che descrive l’esatta termini e resa rigida (nel senso che non è più possibile
sequenza di step partendo da una collezione di pezzi sterzare), molti dettagli puramente estetici, così come
elementari, dai semplici mattoncini alle meccaniche e tutta la parte di trasmissione, sono stati rimossi per ri-
agli snodi, tutto rigorosamente in plastica. Una volta che ciclarne i componenti o anche solo per alleggerire la
il veicolo è stato assemblato, il gioco prosegue appor- struttura. Nel modello finale di WallPi, i cingolati vengo-
tando modifiche al modello di base realizzato in maniera no movimentati a partire dalle ruote anteriori cui sono
del tutto libera, eliminando alcune parti del veicolo che direttamente applicati i due motorini DC, particolarmen-
ci interessano meno e assemblandone di nuove. I vei- te evidenti in Figure 2 e 3: la rotazione del veicolo su
coli sono poi spesso associati a kit di estensione che sé stesso viene quindi ottenuta movimentando in senso
includono specifici motorini, di vario tipo e formato, che opposto i due cingolati. Nella parte alta del veicolo, nella
consentono di movimentare la struttura meccanica as- stessa Figura, è poi riconoscibile una struttura realizzata
semblata. Per la realizzazione di WallPi è stato scelto con lo scopo di consentire una ampia movimentazione
il kit 42038, mostrato in Figura 1, sulla base di raf- verticale (tilt) della webcam: il servomotore è ben fissato
finatissime considerazioni di alta ingegneria: il case al veicolo e i suoi terminali di controllo sono anch’essi,
del Raspberry Pi si adattava perfettamente, per forma e come quelli dei motori DC, riportati su un circuito con-
dimensioni, al suo vagone posteriore! trollato da Raspberry Pi.
Il modello finale di WallPi, mostrato in copertina, è evi-
dentemente una semplificazione del veicolo di parten- ELENCO DEI COMPONENTI
A questo punto, facciamo un elenco dei
principali componenti, di qualunque natu-
ra, che sono stati necessari alla realizza-
zione di WallPi:
• LEGO 42038 – Arctic Truck;
• LEGO 88003 – Power Functions L-
Motor (2x);
• LEGO 88004 – Power Functions Ser-
vo Motor;
• LEGO 8886 – Power Functions Exten-
sion Wire (2x);
• Raspberry Pi 2 Starter Kit (comprensi-
vo di case e WiFi dongle, O.S. Raspbian
Jessie);
Figura 1: manuale del kit LEGO Techinc 42038. Il modello rappresentato, • Webcam Logitech C170;
detto “Arctic Truck”, è stato il punto di partenza per la realizzazione di WallPi. • USB Power Bank;

46
MAKER

controllo dei motorini.


Dei 40 pin di GPIO del Raspberry Pi 2, soltanto 6 sono
realmente utilizzati da WallPi. Oltre al riferimento di
massa e a quello a 3.3 V, due pin general-purpose
vengono impiegati per l’azionamento (diretto e in-
verso) di ciascuno dei due motorini DC; un pin do-
tato di circuiteria per la PWM è invece dedicato al
controllo del servo.
Il pilotaggio dei motorini DC avviene, in particolare, tra-
mite l’integrato a ponte H della ST, che richiede, su cia-
scuna delle sue porte di uscita, un ponte di diodi esterno
che fornisca un percorso di scarica a bassa impedenza
al carico induttivo costituito dal motorino stesso: i due
pin di uscita dedicati al pilotaggio del motorino vengo-
no allora collegati ai due pin più esterni del connettore
proprietario LEGO a quattro pin (si tratta, in particolare,
dei pin dedicati all’alimentazione, quindi a 0 V e 10 V). Il
pilotaggio del servomotore è invece ottenuto collegando
i due pin di alimentazione a 0 V e 10 V e i due pin cen-
trali di controllo ai due contatti dello switch SPDT della
Vishay, il cui polo è collegato appunto all’uscita PWM
Figura 2: modello finale di WallPi, vista frontale. I motorini,
del Raspberry Pi.
riconoscibili in basso, sono applicati direttamente alle ruote
La realizzazione su breadboard del circuito descrit-
anteriori del cingolato.
to pone ovviamente un problema di carattere pratico:
come colleghiamo il circuito ai connettori proprietari
• Portabatterie per 8 Stilo AA; LEGO? Poiché non sono disponibili in commercio con-
• Breadboard a 300 fori; nettori LEGO con montaggio a foro passante, ci tocca
• STMicroelectronics L298 - Dual Full Bridge Dri- armarci di saldatore e termorestringenti: una volta ta-
ver; gliato un cavo di estensione LEGO a metà, si tratta di
• Vishay Siliconix DG419 – Precision CMOS Ana- separare e spellare ciascuno dei quattro conduttori che
log Switches.

Come si può evincere facilmen-


te, anche soltanto guardando i
costi dei componenti LEGO,
WallPi non è propriamente un
campione di economia: con
cifre paragonabili o addirittura
più basse sono già disponibili
sul mercato piattaforme roboti-
che di funzionalità pari o supe-
riori. Come altri progetti open-
source disponibili online, anche
WallPi ha più senso come
esperienza ludica e formativa
che come prodotto finito.

CIRCUITO DI CONTROL-
LO DEI MOTORINI
In Figura 4 è riportato lo sche- Figura 3: modello finale di WallPi, vista laterale. Il servomotore, riconoscibile in alto, è
matico KiCad del circuito per il dedicato al tilt di una struttura meccanica solidale alla webcam.

47
MAKER

Figura 4: schematico KiCad del circuito per il controllo dei motorini di WallPi.

lo costituiscono, quindi saldare alla estremità di ciascu- L’applicazione sarà distribuita tra due terminali, un
no di essi un cavo unipolare. Il punto di saldatura sarà server costituito appunto dal veicolo, nonché dal
ricoperto con la guaina termorestringente. Il risultato fi- Raspberry Pi di cui è dotato, e un client che potrà ot-
nale, rappresentato in Figura 5, è un cavo LEGO final- tenere il controllo delle funzionalità del veicolo tra-
mente adatto alla connessione su breadboard. mite connessione ad uno specifico indirizzo IP e ad
una specifica porta. Naturalmente, tutto potrà avvenire
CONTROLLO TRAMITE PYTHON 3, WIRING all’interno di una WLAN o, previa opportuna configura-
PI E GSTREAMER zione del router cui il server è collegato, tra due nodi IP
A questo punto, l’hardware di WallPi è completo e si dislocati in qualunque parte del mondo.
tratta di individuare gli strumenti di sviluppo SW che La scelta per l’implementazione della parte di acquisi-
rendano semplice l’implementazione della funzionalità zione e trasmissione dello streaming audio/video è ri-
di controllo del veicolo over IP. caduta su una eccellente libreria C open-source appo-

48
MAKER

Figura 5: cavo LEGO modificato per un uso agevole con la breadboard. I quattro terminali sono prolungati tramite altrettanti sem-
plici cavetti unipolari, saldati ad essi e mantenuti in posizione tramite una guaina termorestringente.

sitamente pensata per semplificare la realizzazione di no tramite UDP/IP. Dopo la definizione iniziale di questi
applicazioni che trattano dati multimediali: GStreamer parametri e l’import di alcuni package standard, viene
definisce un’architettura a pipeline che consente di con- eseguito uno script che definisce una classe WallPiStre-
nettere in pochissimo tempo una serie di componenti amer: come vedremo in seguito, tale classe incapsula
software virtualmente per qualunque tipo di elaborazio- le funzionalità di GStreamer richieste dall’applicazione,
ne di dati multimediali. La libreria include già compo- fornendo un comodo layer intermedio per il loro utilizzo.
nenti ampiamente collaudati e utili per esempio all’ac- Le righe 50-59 verificano che il sistema operativo in uso
quisizione e alla riproduzione di streaming audio/video, sia basato su Linux ed eseguono il parsing degli argo-
alla realizzazione di vari tipi di filtraggio, all’encoding e menti specificati al lancio dello script: in particolare, l’ap-
decoding nei formati audio/video più diffusi. plicazione server può essere lanciata abilitando seletti-
Per quanto riguarda il controllo dei GPIO del Raspberry vamente gli streaming audio e video verso il client e lo
Pi in WallPi, l’utilizzo del modulo RPi.GPIO pone un pro- streaming audio proveniente da client. Una nota su que-
blema non trascurabile: la sua release più recente non sto aspetto: sul veicolo, come anticipato, lo streaming
fornisce ancora il supporto per l’hardware PWM, di cui audio e video viene catturato dalla webcam dedicata; la
WallPi ha bisogno per il controllo del servomotore. Per riproduzione audio, invece, dovrebbe avvenire tramite
questo motivo, è stato necessario impiegare un’altra li- l’uscita mini-jack resa disponibile dal Raspberry Pi 2.
breria open-source per il controllo dei GPIO di Raspber- L’istruzione a riga 66 estrae l’indirizzo IP del server ese-
ry Pi: la scelta è ricaduta su Wiring Pi, una libreria C in guendo un comando shell: tale indirizzo è necessario
grado di sfruttare l’hardware PWM sui pin del BCM2835 a realizzare il setup del server socket alle righe 77-81.
che prevedono la circuiteria dedicata a questo scopo e Successivamente, si procede al setup dei GPIO neces-
che offre anche un controllo da linea di comando. sari alla movimentazione del veicolo tramite comandi
shell che richiamano le funzioni della già citata libreria
L’APPLICAZIONE WALLPI: IL SORGENTE Wiring Pi. Quindi, alla riga 98, il server socket viene po-
COMPLETO sto in attesa di una singola connessione entrante: da
Analizziamo quindi il sorgente Python 3 che implementa questo momento in poi, l’applicazione WallPi sul nodo
le funzionalità descritte. di client che raggiunga la porta TCP/IP corretta potrà
Lato server, l’applicazione dovrà essenzialmente aprire guadagnare il controllo del veicolo. In corrispondenza
una porta TCP/IP in attesa di connessioni dall’esterno: delle righe 103-108, viene quindi abilitata la trasmis-
come si evince dalle definizioni di righe 32-35, oltre a sione/ricezione degli streaming audio/video tramite co-
questa porta sarà necessario definire altre tre porte struzione di appositi oggetti WallPiStreamer: al termine
per lo streaming dei dati audio e video che viaggeran- [segue a pag. 60]

49
MAKER

###############################################################################
## Project : WallPi
## Module : wallpi_server
## Language : Python3
##
## Filename : wallpi_server.py
##
## Created by : Lorenzo Columbo
## Created at : 03.07.16
## Revision : 1.0.0
##
## ++
## Description : WallPi Application - Server Side
## This script allows to prepare for and serve an incoming
## TCP/IP connection request from the WallPi client, in order
## to provide all available remote control features.
## By executing this script, the following information is sent
## over the network towards the WallPi client:
## 1) video streaming captured from the local webcam, in order
## to reproduce it remotely;
## 2) audio streaming captured from the local microphone, in
## order to reproduce it remotely.
## At the same time, the following information is received over
## the network from the WallPi client:
## 1) controls for the motors available on the WallPi machine;
## 2) audio streaming captured from the remote microphone, in
## order to reproduce it on the WallPi machine.
## ++
###############################################################################

# Specify TCP/IP connection parameters


WALLPI_CTRL_PORT = 10000
WALLPI_AUDIO_S2C_PORT = 10010
WALLPI_VIDEO_S2C_PORT = 10011
WALLPI_AUDIO_C2S_PORT = 10012

# Import needed packages and recall general utility modules


import os, sys, socket
import subprocess
import argparse

with open(“WallPiStreamer.py”) as fid:

50
MAKER

exec(fid.read())

# Specify some WallPi machine specific constants


PWM_VALUES = [ 0, 64, 128, 192, 256, 320, 384, 512, \
640, 704, 768, 832, 896, 960, 1024]

# Check current operating system (only Linux-based operating systems are allowed)
if(sys.platform != “linux”):
print(“Can’t start WallPi on “ + sys.platform + “ platform. Only linux-based platforms are allowed. Exiting.”)
sys.exit()

# Parse command-line arguments


parser = argparse.ArgumentParser(description=”WallPi application - server side: provide the control of the WallPi
machine.”)
parser.add_argument(‘--s2c_aud’, help=’enable sending audio streaming from server to client’, action=’store_
true’)
parser.add_argument(‘--s2c_vid’, help=’enable sending video streaming from server to client’, action=’store_true’)
parser.add_argument(‘--c2s_aud’, help=’enable receiving audio streaming from client to server’, action=’store_
true’)
args = parser.parse_args()

s2c_aud_en = args.s2c_aud
s2c_vid_en = args.s2c_vid
c2s_aud_en = args.c2s_aud

# Get local IP address


wallpi_server_addr = str(subprocess.check_output(“hostname -I”, shell=True))[2:-4]

# Print a welcome message, introducing the application interactive usage


print(“--------------------------------------------------------------------------------” + “\n” + \
“WallPi server will now open a server socket to accept incoming connections: “ + “\n” + \
“when this will be done, an audio streaming will be received and an audio/video “ + “\n” + \
“streaming will be sent; moreover, the client side user will be able to control “ + “\n” + \
“the movement of the WallPi machine using the numeric pad.” + “\n” + \
“--------------------------------------------------------------------------------” + “\n”)

# Setup a server socket waiting for a single incoming TCP/IP connection request
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind((wallpi_server_addr, WALLPI_CTRL_PORT))

# Setup the WallPi servo-motor control pin (BCM number) to PWM mark-space mode

51
MAKER

os.system(“gpio -g mode 13 pwm”)


os.system(“gpio -g pwm-ms”)
pwm_index = int(len(PWM_VALUES)/2)
os.system(“gpio -g pwm 13 “ + str(PWM_VALUES[pwm_index]))

# Setup the WallPi DC-motor control pins (BCM number)


os.system(“gpio -g mode 5 out”)
os.system(“gpio -g mode 6 out”)
os.system(“gpio -g mode 9 out”)
os.system(“gpio -g mode 11 out”)

# Open a client socket towards the IP address specified by the server socket and accept only
# an incoming connection from the specified client address; handle a single client connection
# at time; to break the infinite loop, use Ctrl-C key (raising Keyboard Interrupt)
address = (0, 0);
while (True):
serversocket.listen(1)
(clientsocket, address) = serversocket.accept()
wallpi_client_addr = address[0]

# Start to send the audio/video streaming


if (s2c_aud_en == True):
audio_sender = WallPiStreamer(“audio”, “send”, wallpi_client_addr, WALLPI_AUDIO_S2C_PORT)
if (s2c_vid_en == True):
video_sender = WallPiStreamer(“video”, “send”, wallpi_client_addr, WALLPI_VIDEO_S2C_PORT)
if (c2s_aud_en == True):
audio_recver = WallPiStreamer(“audio”, “recv”, wallpi_server_addr, WALLPI_AUDIO_C2S_PORT)

# Provide the motor control functionality to the client


ctrl_char = ‘\x00’
while (ctrl_char != ‘-’):
ctrl_char = clientsocket.recv(1).decode()
if (ctrl_char == ‘9’):
if pwm_index < len(PWM_VALUES)-1: pwm_index = pwm_index + 1 os.system(“gpio -g pwm 13 “ +
str(PWM_VALUES[pwm_index])) elif (ctrl_char == ‘3’): if pwm_index > 0:
pwm_index = pwm_index - 1
os.system(“gpio -g pwm 13 “ + str(PWM_VALUES[pwm_index]))
elif (ctrl_char == ‘8’):
os.system(“gpio -g write 5 0”)
os.system(“gpio -g write 6 1”)
os.system(“gpio -g write 9 0”)
os.system(“gpio -g write 11 1”)

52
MAKER

elif (ctrl_char == ‘2’):


os.system(“gpio -g write 5 1”)
os.system(“gpio -g write 6 0”)
os.system(“gpio -g write 9 1”)
os.system(“gpio -g write 11 0”)
elif (ctrl_char == ‘5’):
os.system(“gpio -g write 5 0”)
os.system(“gpio -g write 6 0”)
os.system(“gpio -g write 9 0”)
os.system(“gpio -g write 11 0”)
elif (ctrl_char == ‘6’):
os.system(“gpio -g write 5 1”)
os.system(“gpio -g write 6 0”)
os.system(“gpio -g write 9 0”)
os.system(“gpio -g write 11 1”)
elif (ctrl_char == ‘4’):
os.system(“gpio -g write 5 0”)
os.system(“gpio -g write 6 1”)
os.system(“gpio -g write 9 1”)
os.system(“gpio -g write 11 0”)
else :
pass

# End to send the audio/video streaming


if (s2c_aud_en == True):
del(audio_sender)
if (s2c_vid_en == True):
del(video_sender)
if (c2s_aud_en == True):
del(audio_recver)

# Close the client socket


clientsocket.shutdown(socket.SHUT_RDWR)
clientsocket.close()

# Close the server socket


serversocket.shutdown(socket.SHUT_RDWR)
serversocket.close()

53
MAKER

della connessione, l’eliminazione di tali oggetti consenti- Passiamo quindi al commento del sorgente relativo
rà di interrompere gli streaming e liberare quindi le porte all’applicazione client. In questo caso, dopo la necessa-
UDP che erano state ad essi associate. ria definizione delle porte IP (che dovranno ovviamente
Resta quindi da implementare unicamente il controllo matchare quelle specificate nell’applicazione server),
del movimento del veicolo sulla base dei caratteri che l’import dei package standard e il parsing degli argo-
il server riceve dal client tramite la connessione TCP/IP menti specificati da linea di comando, tra i quali compa-
precedentemente realizzata: il codice alle righe 111-148 re l’indirizzo IP del server che deve naturalmente essere
esegue un semplice ciclo while che, sulla base del ca- noto al momento del lancio della applicazione, si proce-
rattere ricevuto, pilota le GPIO dedicate al controllo del de all’apertura di un client socket verso il server. Se tale
servomotore e dei motorini DC (i caratteri usati a questo operazione va a buon fine, si costruiscono gli oggetti
scopo sono quelli del tastierino numerico). Alla ricezione WallPiStreamer che consentono di trasmettere e riceve-
del carattere speciale ‘-‘, il ciclo viene interrotto e l’ap- re gli streaming audio/video previsti dalla applicazione,
plicazione server procede alla chiusura degli streaming ammesso che l’utente abbia richiesto la loro abilitazione
audio/video, per portarsi nuovamente nella condizione al lancio della applicazione.
di attesa di un’eventuale connessione da parte di un al- Le righe 101-108 eseguono un ciclo while che consente
tro client. [segue a pag. 63]

###############################################################################
## Project : WallPi
## Module : wallpi_client
## Language : Python3
##
## Filename : wallpi_client.py
##
## Created by : Lorenzo Columbo
## Created at : 03.07.16
## Revision : 1.0.0
##
## ++
## Description : WallPi Application - Client Side
## This script allows to establish a TCP/IP connection with the
## WallPi server, in order to access to all of its remote
## control features.
## By executing this script, the following information is sent
## over the network towards the WallPi server:
## 1) controls for the motors available on the WallPi machine;
## 2) audio streaming captured from the local microphone, in
## order to reproduce it on the WallPi machine.
## At the same time, the following information is received over
## the network from the WallPi server:
## 1) video streaming captured from the remote webcam, in order
## to reproduce it locally;
## 2) audio streaming captured from the remote microphone, in
## order to reproduce it locally.
## ++
###############################################################################

# Specify IP connection ports

54
MAKER

WALLPI_CTRL_PORT = 10000
WALLPI_AUDIO_S2C_PORT = 10010
WALLPI_VIDEO_S2C_PORT = 10011
WALLPI_AUDIO_C2S_PORT = 10012

# Import needed packages and recall general utility modules


import sys, socket
import subprocess
import argparse
import threading
import gi
gi.require_version(‘Gtk’, ‘3.0’)
from gi.repository import Gtk

with open(“getch.py”) as fid:


exec(fid.read())
with open(“WallPiStreamer.py”) as fid:
exec(fid.read())

# Check current operating system (only Linux-based operating systems are allowed)
if(sys.platform != “linux”):
print(“Can’t start WallPi on “ + sys.platform + “ platform. Only linux-based platforms are allowed. Exiting.”)
sys.exit()

# Parse command-line arguments


parser = argparse.ArgumentParser(description=”WallPi application - client side: get the control of the WallPi
machine.”)
parser.add_argument(‘-H’, ‘--host’, required=False, default=’127.0.0.1’, help=’host address of the WallPi server’)
parser.add_argument(‘--s2c_aud’, help=’enable receiving audio streaming from server to client’, action=’store_
true’)
parser.add_argument(‘--s2c_vid’, help=’enable receiving video streaming from server to client’, action=’store_
true’)
parser.add_argument(‘--c2s_aud’, help=’enable sending audio streaming from client to server’, action=’store_
true’)
args = parser.parse_args()

wallpi_server_addr = args.host
s2c_aud_en = args.s2c_aud
s2c_vid_en = args.s2c_vid
c2s_aud_en = args.c2s_aud

# Get local IP address


wallpi_client_addr = str(subprocess.check_output(“hostname -I”, shell=True))[2:-4]

# Print a welcome message, introducing the application interactive usage


print(“--------------------------------------------------------------------------------” + “\n” + \
“WallPi client will now connect to the specified WallPi server address: when “ + “\n” + \
“this will be done, an audio/video streaming will be received and an audio “ + “\n” + \

55
MAKER

“streaming will be sent; moreover, the client side user will be able to control “ + “\n” + \
“the movement of the WallPi machine using the following numeric pad keys:” + “\n” + \
“8 => move forward” + “\n” + \
“2 => move backward” + “\n” + \
“6 => turn right” + “\n” + \
“4 => turn left” + “\n” + \
“5 => stop” + “\n” + \
“9 => raise camera vertical angle” + “\n” + \
“3 => lower camera vertical angle” + “\n” + \
“- => close connection” + “\n” + \
“--------------------------------------------------------------------------------” + “\n”)

# Open a client socket towards specified TCP/IP address:port


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((wallpi_server_addr, WALLPI_CTRL_PORT))

# Start the requested media streaming


if (s2c_aud_en == True):
audio_recver = WallPiStreamer(“audio”, “recv”, wallpi_client_addr, WALLPI_AUDIO_S2C_PORT)
if (s2c_vid_en == True):
video_recver = WallPiStreamer(“video”, “recv”, wallpi_client_addr, WALLPI_VIDEO_S2C_PORT)
if (c2s_aud_en == True):
audio_sender = WallPiStreamer(“audio”, “send”, wallpi_server_addr, WALLPI_AUDIO_C2S_PORT)

# Continuously get single control characters from the stdin and send it to sock
ctrl_char = ‘\x00’
while ctrl_char != ‘-’:
ctrl_char = getch()
sent = sock.send(ctrl_char.encode())
if sent == 0:
raise RunTimeError(“Socket connection broken!”)
else:
pass

# End the started media streaming


if (s2c_aud_en == True):
del(audio_recver)
if (s2c_vid_en == True):
del(video_recver)
if (c2s_aud_en == True):
del(audio_sender)

# Close the client socket


sock.shutdown(socket.SHUT_RDWR)
sock.close()

56
MAKER

all’utente di immettere un carattere alla volta, tramite Alla costruzione dell’oggetto WallPiStreamer, vengono
esecuzione della funzione getch: tale funzione è definita eseguite tutte le operazioni necessarie alla creazione
tramite lo script eseguito in precedenza, in righe 46-47, e inizializzazione della pipe per la ricezione o trasmis-
e se ne può recuperare il sorgente in rete. Alla pressio- sione (send/recv) di un certo tipo di streaming (audio/
ne del carattere speciale ‘-‘, il ciclo while viene interrotto video) da o verso un certo indirizzo e una certa por-
e l’applicazione client termina, dopo tutte le necessarie ta IP (ip_addr e ip_port). Dopo il necessario parsing
operazioni di chiusura e rilascio delle risorse allocate. dei suoi argomenti (righe 16-47), il costruttore crea
Infine, diamo uno sguardo al sorgente della classe la pipeline GStreamer e ne inizializza il bus per il
WallPiStreamer, la cui responsabilità è quella di forni- reporting dei messaggi provenienti dai componen-
re le funzionalità di audio/video streaming necessarie ti che saranno istanziati all’interno di essa. Quindi
all’applicazione WallPi in maniera del tutto trasparente (righe 55-89), sulla base del tipo di streaming richiesto,
ad essa: come già discusso, l’implementazione di tali viene creato il set di tutti i componenti necessari alla
funzionalità è stata ottenuta tramite utilizzo della libreria sua trasmissione e ricezione: di questi componenti,
GStreamer. [segue a pag. 66]

import gi
gi.require_version(‘Gst’, ‘1.0’)
gi.require_version(‘GstBase’, ‘1.0’)
gi.require_version(‘Gtk’, ‘3.0’)
from gi.repository import GObject, Gst, GstBase, Gtk, GObject

import re

class WallPiStreamer:

def __init__(self, audio_video, send_recv, ip_addr, ip_port):

Gst.init(None)

# Check input arguments correctness


if (isinstance(audio_video, str)):
if (re.match(“^(audio|video)$”, audio_video)):
self.audio_video = audio_video
else:
raise ValueError(“For argument audio_video, specify one value among {‘audio’, ‘video’}.”)
else:
raise TypeError(“For argument audio_video, specify a string value.”)

if (isinstance(send_recv, str)):
if (re.match(“^(send|recv)$”, send_recv)):
self.send_recv = send_recv
else:
raise ValueError(“For argument send_recv, specify one value among {‘send’, ‘recv’}.”)
else:
raise TypeError(“For argument send_recv, specify a string value.”)

if (isinstance(ip_addr, str)):
if (re.match(“^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-
5])$”, ip_addr)):

57
MAKER

self.ip_addr = ip_addr
else:
raise ValueError(“For argument ip_addr, specify one properly formatted IP address (e.g., ‘127.0.0.1’).”)
else:
raise TypeError(“For argument ip_addr, specify a string value.”)

if (isinstance(ip_port, int)):
if (ip_port >= 0 and ip_port <= 65535):
self.ip_port = ip_port
else:
raise ValueError(“For argument ip_port, specify one value in the range 0-65535.”)
else:
raise TypeError(“For argument ip_port, specify an integer value.”)

# Create the pipeline and add a watch to the message bus


self.pipeline = Gst.Pipeline()
bus = self.pipeline.get_bus()
bus.add_signal_watch()
bus.connect(“message”, lambda b,m : print(“ERROR from {}: {}”.format(m.src, m.parse_error())) if (m.type ==
Gst.MessageType.ERROR) else m)

# Create gst elements needed for all usage scenarios of this class
if (audio_video == “audio”):
mediasrc = Gst.ElementFactory.make(“alsasrc”, “gst4rtp_audiosrc” )
mediasrc.set_property(“device”, “hw:CARD=C170,DEV=0”)
mediasrccaps = Gst.ElementFactory.make(“capsfilter”, “gst4rtp_audiosrccaps”)
mediasrccaps.set_property(“caps”, Gst.Caps.from_string(“audio/x-raw, format=(string)S16LE, layout=(string)
interleaved”))
mediasink = Gst.ElementFactory.make(“autoaudiosink”, “gst4rtp_audiosink” )
mediaenc = Gst.ElementFactory.make(“mulawenc”, “gst4rtp_mulawenc” )
mediadec = Gst.ElementFactory.make(“mulawdec”, “gst4rtp_mulawdec” )
mediapay = Gst.ElementFactory.make(“rtppcmupay”, “gst4rtp_rtppcmupay” )
mediadepay = Gst.ElementFactory.make(“rtppcmudepay”, “gst4rtp_rtppcmudepay”)
udpsink = Gst.ElementFactory.make(“udpsink”, “gst4rtp_udpsink”)
udpsink.set_property(“host”, ip_addr)
udpsink.set_property(“port”, ip_port)
udpsrc = Gst.ElementFactory.make(“udpsrc”, “gst4rtp_udpsrc”)
udpsrc.set_property(“address”, ip_addr)
udpsrc.set_property(“port”, ip_port)
udpsrc.set_property(“caps”, Gst.Caps.from_string(“application/x-rtp”))
else:
mediasrc = Gst.ElementFactory.make(“v4l2src”, “gst4rtp_videosrc” )
mediasrc.set_property(“device”, “/dev/video0”)
mediasrccaps = Gst.ElementFactory.make(“capsfilter”, “gst4rtp_videosrccaps”)
mediasrccaps.set_property(“caps”, Gst.Caps.from_string(“video/x-raw, width=(int)640, height=(int)480, pixel-
aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)15/1”))
mediasink = Gst.ElementFactory.make(“autovideosink”, “gst4rtp_videosink” )

58
MAKER

mediaenc = Gst.ElementFactory.make(“jpegenc”, “gst4rtp_jpegenc” )


mediadec = Gst.ElementFactory.make(“jpegdec”, “gst4rtp_jpegdec” )
mediapay = Gst.ElementFactory.make(“rtpjpegpay”, “gst4rtp_rtpjpegpay” )
mediadepay = Gst.ElementFactory.make(“rtpjpegdepay”, “gst4rtp_rtpjpegdepay”)
udpsink = Gst.ElementFactory.make(“udpsink”, “gst4rtp_udpsink”)
udpsink.set_property(“host”, ip_addr)
udpsink.set_property(“port”, ip_port)
udpsrc = Gst.ElementFactory.make(“udpsrc”, “gst4rtp_udpsrc”)
udpsrc.set_property(“address”, ip_addr)
udpsrc.set_property(“port”, ip_port)
udpsrc.set_property(“caps”, Gst.Caps.from_string(“application/x-rtp, media=(string)video, clock-
rate=(int)90000, encoding-name=(string)JPEG, a-framerate=(string)15.000000, a-framesize=(string)640-480,
payload=(int)26, ssrc=(uint)3843998606, timestamp-offset=(uint)1259879843, seqnum-offset=(uint)970”))

# Add to the pipeline all elements needed by the specific chosen configuration and link them properly
if (send_recv == “send”):
self.pipeline.add(mediasrc)
self.pipeline.add(mediasrccaps)
self.pipeline.add(mediaenc)
self.pipeline.add(mediapay)
self.pipeline.add(udpsink)
mediasrc.link(mediasrccaps)
mediasrccaps.link(mediaenc)
mediaenc.link(mediapay)
mediapay.link(udpsink)
else:
self.pipeline.add(udpsrc)
self.pipeline.add(mediadepay)
self.pipeline.add(mediadec)
self.pipeline.add(mediasink)
udpsrc.link(mediadepay)
mediadepay.link(mediadec)
mediadec.link(mediasink)

# Start the media streaming


self.pipeline.set_state(Gst.State.PLAYING)

def __del__(self):
# Stop the media streaming
self.pipeline.set_state(Gst.State.NULL)

59
MAKER

Figura 6: Screenshot dell’applicazione WallPi in esecuzione (lato client).

naturalmente, soltanto una parte verrà realmente istan- destra; la pressione del pulsante 5 fermerà il veicolo;
ziata nella pipe, a seconda della direzione dello strea- infine, la pressione dei pulsanti 9 e 3 comporterà l’in-
ming specificata. La costruzione della pipe viene quindi clinazione della webcam rispettivamente verso l’alto e
ottenuta dalle righe 93-101 per la trasmissione e 103- verso il basso.
109 per la ricezione. Infine, il costruttore avvia lo strea-
ming ponendo la pipe nello stato di riproduzione. CONCLUSIONE
WallPi è niente più che un giocattolo, privo di qualunque
ESECUZIONE DELL’APPLICAZIONE WALLPI utilità che non sia il mero divertimento. D’altra parte, tra-
Una volta lanciata l’applicazione server sul Raspberry mite la sua realizzazione, si è potuto mettere in luce an-
Pi che controlla il veicolo, è possibile lanciare in maniera cora una volta la versatilità della piattaforma Raspberry
analoga l’applicazione client su una qualunque macchi- Pi e soprattutto cominciare a sperimentare le enormi po-
na sulla stessa rete IP, eseguendo il comando: tenzialità della libreria GStreamer, estremamente utile
A questo punto, lo streaming audio e video in ricezione in tutte quelle applicazioni che richiedono un qualunque
verrà riprodotto e si otterrà il controllo remoto del veico- tipo di manipolazione di dati multimediali.
lo, come mostrato nello screenshot di Figura 6.
Al lancio dell’applicazione client, un messaggio descri-
L’autore è a disposizione nei commenti per eventuali
ve in maniera chiara i comandi di movimento: la pres- approfondimenti sul tema dell’Articolo. Di seguito il link per
sione dei pulsanti 8 e 2 comporterà la movimentazione accedere direttamente all’articolo sul Blog e partecipare alla
del veicolo rispettivamente in avanti e indietro, mentre discussione:
https://it.emcelettronica.com/wallpi-quando-lego-incontra-
i pulsanti 4 e 6 determineranno la rotazione del veico-
raspberry-pi
lo su sé stesso rispettivamente verso sinistra e verso

60
Il Kit di ESPertino:
MAK ER
misuriamo le distanze
con il modulo a
ultrasuoni HY-SRF05
di Giovanni Di Maria

Il kit di ESPertino comprende anche un modulo a ultrasuoni per la rilevazione di distanze da oggetti.
Con esso, la nostra scheda può contare su un ulteriore sistema sensoriale, per la realizzazione di robot,
automatismi e circuiti di rilevazione intelligente.

INTRODUZIONE Il modulo HY-srf05 è un dispositivo per la rilevazione

E
SPertino è una scheda basata su ESP32, pro- di distanze da oggetti, dotato di cinque pin, che utiliz-
gettata e prodotta in Italia da Elettronica Open za gli ultrasuoni. E’ anche molto economico, tuttavia si
Source. Permette di realizzare facilmente qualsi- tratta di una evoluzione rispetto al precedente mo-
asi tipologia di applicazione e di sistema. Per agevolare dello HC-SR04, in quanto riesce a coprire una distanza
ancora di più i progettisti è a disposizione il Kit ESPerti- maggiore, fino a 4.5 metri. Inoltre, per il suo cablaggio
no, una fantastica raccolta di componenti elettronici tra con la MCU, si può anche unificare il pin del trigger e
i quali sono presenti sensori, componentistica attiva e dell’echo, consentendo un risparmio di porte di I/O per
passiva e altre grandi utilità per l’elettronica. le unità intelligenti.
La seguente tabella riporta le caratteristiche più impor-
IL SENSORE DI DISTANZE HY-SRF05 tanti:

Tensione di alimentazione compresa tra 4.5V e 5V

Consumo di corrente tra 10mA e 40mA

Angolo di copertura <15°

Intervallo di distanza misurabile compreso tra 2 cm. e 4.5 m.

Risoluzione circa 0.2 cm (2 mm.)

Frequenza degli ultrasuoni emessi 40 Khz

Pin Vcc, Trig (T), Echo (R), Out, GND

Segnale del trigger impulso digitale di 10uS

Output digitale, direttamente proporzionale con la misura

standard. Può essere innestato direttamente in una bre-


Passo dei pin
adboard

Temperatura di funzionamento -20°C ~ 60°C

Dimensioni 45mm. x 21mm.

61
MAKER

ziare a trasmettere un brevissimo treno d’impulsi


dalla frequenza di 40 kHz (per la precisione otto
impulsi);
3. Si inizi, quindi, a controllare lo stato logico del pin
“Echo”. Inizialmente esso risulterà basso;
4. Non appena lo stato logico del pin “Echo” commuta
a livello alto, occorre iniziare a misurare il tempo nel
quale perdura tale stato logico;
5. Finalmente, quando lo stato logico del pin “Echo”
ritorna basso, si calcoli il tempo totale e si ricavi la
distanza utilizzando la formula: cm=tempo_livello_
alto*(341/100)/2.

Il coefficiente 341, come visto prima, è la velocità di pro-


pagazione del suono nell’aria.
Lasciando il pin “out” inutilizzato si attiva la modalità
“standard” di funzionamento del sensore, detta anche
Figura 1: il sensore di distanza HY-srf05 con il relativo pinout dual-pin, compatibile con il SRF04. Essa implica l’uti-
lizzo dei due pin Trigger e Echo. Se, invece, si collega
La figura 1 mostra il modello del sensore, assieme alla il pin OUT a massa, il pin numero due non è utilizzato e
disposizione dei suoi terminali. viene attivata la modalità single-pin. In questo caso il
sensore utilizza un’unica linea, facente parte al pin tre,
COME SI EFFETTUARE LA MISURA DELLA facendo transitare sulla stessa linea sia il segnale di
DISTANZA eco che quello del trigger e riducendo, di fatto, il nume-
Il sensore srf05 è costituito da un emettitore di ultra- ro di linee necessarie alla comunicazione. Per questa
suoni (il trasmettitore) e da un ricevitore, sempre di ul- eventualità, una singola porta dovrà lavorare prima con
trasuoni. Essi sono orientati verso la stessa direzione. funzionalità di uscita, per poter generare il segnale ini-
Per eseguire la misura della distanza di un oggetto dal ziale di trigger da 10uS, e poi andrà a porsi in funzione
dispositivo, viene inviato un segnale sonoro dal Tx e ri- d’ingresso, per mettersi “in ascolto” e ricevere l’eco ge-
cevuto (di rimbalzo) dall’Rx, come schematizzato nella nerato dal sensore
figura 2. Calcolando opportunamente il tempo intercor-
so tra i due eventi si può stabilire con precisione la stra- COLLEGAMENTI ELETTRICI
da percorsa. E’ utile rammentare che il segnale sonoro Il cablaggio del sensore e di ESPertino risulta mol-
percorre una doppia distanza, in quanto dal trasmetti- to semplice e bastano pochissime connessioni, come
tore arriva all’oggetto interessato e da esso ritorna, di mostra lo schema di cui alla figura 4. L’alimentazione
rimbalzo) al ricevitore. Si ricordi anche che la velocità dell’HY-SRF05 è collegata direttamente a quella della
di propagazione del suono ammonta a circa 341 metri scheda, come pure la massa. Un aspetto a cui occor-
al secondo, nell’aria. E’ utile dare
uno sguardo alla tabella sotto-
stante, per apprezzare i diversi
suoi comportamenti a seconda
del mezzo di trasporto adottato.
In particolare, il proprio algoritmo
deve effettuare i seguenti passi,
come anche evidenziato in figura
3:
1. Si invii un impulso “alto” dalla
lunghezza temporale di al-
meno 10us. sul pin “Trigger”.
2. Tale invio di segnale indica
al sensore che esso può ini- Figura 2: come avviene la misurazione della distanza con gli ultrasuoni

62
MAKER

Velocità di propagazione
Sostanza
(metri/secondo) [m/s]

Gomma 50

Aria (15ºC) 341

Sughero 500

Idrogeno 1260

Acqua 1460

Mattoni 3650

Marmo 3800

Ferro 5000

Vetro 5200

re prestare molta attenzione è quello della tensione medesima tensione in uscita. Si potrebbero, per esem-
elettrica erogata dal piedino “Echo”, che equivale a 5V, pio, utilizzare anche due resistenze, rispettivamente dal
non compatibile con quella dell’Esp32. Per “traslare” il valore di 470 ohm e 1000 ohm. Per questa tipologia di
livello e abbassarlo ai fatidici 3.3V è sufficiente adotta- calcolo, con Vcc pari a 5V, una regola da seguire af-
re un partitore resistivo, formato dai valori di 1Kohm e ferma che la resistenza collegata a massa deve avere
2.2Kohm. Le informazione di tale pin, pertanto, sono in- un valore ohmico doppio a quello dell’altra resistenza.
viate alla porta 16 di ESPertino mentre la linea del “Trig- Valori commerciali corretti e ammessi potrebbero esse-
ger” fa capo alla porta 17 della stessa scheda. re, pertanto, i seguenti: 470 ohm e 1000 ohm, 560 ohm
Per calcolare i valori delle due resistenze del partitore e 1200 ohm, 1000 ohm e 2200 ohm, 2200 ohm e 4700
è stata utilizzata, ovviamente, la legge di Ohm. Esisto- ohm, e così via. Per effettuare il calcolo si proceda nel
no tantissime combinazioni di resistori per ottenere la seguente modo:

Figura 3: come utilizzare il sensore di distanza

63
MAKER

Figura 4: il cablagio di ESPertino con il sensore di distanza

1. Si stabilisca la corrente di transito nella linea te bassa, nell’ordine dei millesimi di Watt. Pos-
dell’Echo, in caso di uscita a livello logico alto, sono andare bene, dunque, anche le resistenze
per esempio si assuma un valore di 1.5mA (an- di 1/4 di Watt.
che altri bassi valori vanno bene);
2. Per calcolare la prima resistenza (quella in alto Leggi anche: Distanza: sensore ultrasuoni HC-
verso il pin “Echo”) si utilizzi la formula R=V/I, SR04 e Arduino
ossia R=(5-3.3)/0.0015, che restituisce il valore
1133, assimilabile al valore commerciale di 1K LA PROGRAMMAZIONE
oppure di 1.2K; Come detto in precedenza il sensore deve essere ali-
3. Per calcolare la seconda resistenza (quella in mentato con una tensione di 5V sull’omonimo pin Vcc
basso verso massa) si esegua la formula R=V/I, e la massa su GND. L’attivazione della emissione de-
ossia R=3.3/0.0015, che restituisce il valore gli ultrasuoni è effettuata inviando un impulso sul pin
2200 esatti. “Trigger” dell’HY-SRF05 della durata di almeno 10
4. La dissipazione di tali resistenze è estremamen- microsecondi. Sul fronte di discesa di tale segnale il

64
MAKER

sensore inizia a emettere un “treno” di 8 brevi impulsi zare, ancor di più, le potenzialità di alcune funzioni di
della frequenza di 40KHz. Subito dopo, lo stato logico libreria, che rendono il lavoro di programmazione più
del pin “Echo” si porta a livello alto. Occorre aspettare e snello e affidabile.
misurare la durata di tale impulso, fino a quando il suo
livello logico commuta in basso, segno della ricezione LA FUNZIONE PULSEIN()
del suono di ritorno. Se il sensore non capta tale suono Con l’utilizzo di tale funzione si riesce, in un unico sta-
di rimbalzo, dopo qualche istante si pone in stato di ti- tement, a controllare e a misurare l’impulso di eco, pro-
meout. Con queste specifiche e la potenza del linguag- veniente dal sensore di distanza. Cosa fa tale funzione?
gio di programmazione, legata anche alla gestione delle Essa legge un impulso digitale (alto o basso) da un pin
porte digitali, è molto semplice realizzare uno sketch su della MCU. Per esempio, se il contenuto del parametro
misura. “value” passatole è HIGH, la funzione attende che lo
L’esempio che segue utilizza le due linee di dati (echo stato logico del pin esaminato diventi ALTO, quindi ini-
e trigger) indipendenti tra loro, anche per una più sem- zia a misurarne il tempo e, quando lo stato logico della
plice programmazione. Come si evince dal flusso dei porta passa a BASSO, arresta il cronometraggio, resti-
dati in figura 5, il pin echo del sensore invia un segnale tuendolo al programma. Si potrebbe fare a meno della
digitale al pin 16 di ESPertino, quindi quest’ultima deve funzione pulseIn() e creare, ex novo, tutto il prototipo da
essere configurata come ingresso, mentre il pin trigger sé. La sua sintassi di utilizzo è la seguente:
del sensore riceverà l’impulso di start dalla MCU attra- dove:
verso la porta numero 17, pertanto essa deve essere • pin è il numero della porta sulla quale si intende
configurata come uscita. leggere l’impulso;
Lo sketch proposto sotto implementa una sorta di metro • value è il tipo d’impulso che si vuole leggere e
elettronico ed esegue le seguenti funzionalità: può essere HIGH o LOW;
• Configura le porte coinvolte nelle operazioni; • timeout, opzionale, è il numero di microsecondi
• Invia il segnale di trigger (di 10 microsecondi) di attesa per l’inizio dell’impulso.
per fare iniziare l’emissione degli impulsi ultra- Se il timeout non è specificato esso, per default, equi-
sonici; vale alla pausa di un secondo. La funzione restituisce la
• Misura la durata dell’impulso di eco ricevuto; durata dell’impulso misurato, espresso in microsecondi
• Calcola la corrispondente distanza, in centimetri; oppure il valore 0 se nessun impulso è iniziato entro il
• Effettua una piccola pausa di attesa pari a un timeout impostato.
quarto di secondo e reinizia l’intero processo.

La figura 6 mostra l’output del


monitor seriale dell’IDE di Ar-
duino, durante il collaudo del
sistema. Un oggetto posto di-
nanzi al sensore viene avvici-
nato e allontanato.

ALCUNI ELEMENTI DE-


GNI DI ATTENZIONE
DELLO SKETCH
Lo sketch, come si vede, è
di una semplicità disarman-
te e anche i principianti non
dovrebbero faticare per com-
prenderlo e per modificarlo,
secondo le proprie esigenze.
Tuttavia vi sono due punti
fondamentali che dovrebbe-
ro essere un tantino appro-
fonditi soprattutto per apprez- Figura 5: la direzione dei segnali di trigger e di eco

65
MAKER

#define PIN_ECHO 16 // Pin per gli impulsi dell’eco

#define PIN_TRIG 17 // Pin per l’invio del segnale di Trigger

void setup()

Serial.begin(9600);

pinMode(PIN_ECHO, INPUT); // Il pin di echo e’ in ingresso sulla MCU

pinMode(PIN_TRIG, OUTPUT); // Il pin di trigger e’ in uscita sulla MCU

void loop()

//--------- Invio del segnale iniziale di trigger della lunghezza di 10us (Low, High, Low)

digitalWrite(PIN_TRIG, LOW);

delayMicroseconds(2);

digitalWrite(PIN_TRIG, HIGH); // Inpulso effettivo di Trigger

delayMicroseconds(10);

digitalWrite(PIN_TRIG, LOW);

//--------- Calcolo della distanza

float distanza = pulseIn(PIN_ECHO, HIGH); // Misura la lunghezza dell’impulso di eco in microsecondi

distanza=distanza/58; // L’impulso ultrasonico viene inviato e rimbalza indietro. Calcolo di conversione da tempo

a distanza

Serial.print(distanza);

Serial.println(“ cm”);

delay(250);

CONVERSIONE DA TEMPO A DISTANZA Spazio = Velocità * Tempo


Probabilmente i neofiti e i principianti non avranno chia- dove:
ro lo statement che riporta la seguente codifica: • la velocità del suono, nell’aria, è espressa in me-
tri al secondo ed equivale a circa 341 m/s. La
distanza=distanza/58; temperatura influisce su di essa;
• il tempo impiegato dall’onda sonora per compie-
re il tragitto completo è espresso in secondi.

pulseIn(pin, value, [timeout]); Pertanto la formula generica dovrebbe essere la se-


guente:
Spazio = 341 * Tempo
Il sensore, come si è potuto comprendere in preceden-
Tale calcolo è frutto di una serie di semplificazioni e di za, lavora per rimbalzo del segnale audio sull’ostacolo.
equivalenze, a dir la verità neanche troppo complesse. Infatti esso emette una frequenza ultrasonica che rag-
Si deve partire l’analisi osservando l’equazione: giunge l’oggetto di destinazione e ritorna indietro. Il cal-

66
MAKER

Figura 6: il collaudo del sistema durante le prove di avvicinamento e di allontanamento di un oggetto posto dinanzi al sensore

colo effettivo della distanza percorsa restituirebbe, per- sempre molto interessante. La loro implementazione nei
tanto, un valore doppio. Quindi, si preferisce dividere propri sistemi consente di realizzare dispositivi in grado
per due il risultato di cui sopra: d’interagire con il mondo esterno. Un sistema sensoria-
Spazio = (341 * Tempo)/2 le che accresce le capacità del circuito, consentendogli
da cui: di rilevare gli oggetti nelle immediate vicinanze, è sem-
Spazio = 170.5 * Tempo pre il primo passo per realizzare progetti di robotica e di
Spesso è consigliabile trasformare le moltiplicazioni in automazione. In rete vi sono anche alcune librerie per
divisioni, adottando il calcolo del numero reciproco. la gestione ottimale del sensore di distanza. Personal-
L’equivalente formula di cui sopra diventa, quindi: mente, l’ultima fornitura richiesta da un cliente, dotata
Spazio = Tempo / (1/170.5) di sensore di distanza a ultrasuoni, comprendeva un
Spazio = Tempo / 0.0058 sistema idraulico per piegare i tubi di ferro. La corsa del-
Dal momento che il tempo misurato da ESPertino non è la piegatrice teneva conto, appunto, della distanza del
espresso in secondi ma in microsecondi, occorre cam- sensore da un ostacolo di riferimento e l’entità della pie-
biare la formula in: ga era programmata attraverso la scheda ESPertino. Le
Spazio = Tempo / 5800 applicazioni pratiche sono infinite. Si va dal sensore
Inoltre la formula deve restituire lo spazio espresso in di retromarcia per automobile al contametri elettronico,
metri e non in centimetri, per cui quella definitiva è: dal sistema robotizzato per evitare gli ostacoli alla guida
Spazio = Tempo / 58 automatica di un piccolo modellino di veicolo, e così via.
Se si riscontrano piccole differenze nei risultati si può
ritoccare leggermente il valore della costante, maga-
ri aggiungendo qualche cifra decimale. La velocità del
L’autore è a disposizione nei commenti per eventuali
suono, infatti, potrebbe cambiare in dipendenza della approfondimenti sul tema dell’Articolo. Di seguito il link per
temperatura. accedere direttamente all’articolo sul Blog e partecipare alla
discussione:
https://it.emcelettronica.com/il-kit-di-espertino-misuriamo-le-
CONCLUSIONI
distanze-con-il-modulo-a-ultrasuoni-hy-srf05
Sperimentare con i sensori di distanza a ultrasuoni è

67
Controllo gestuale e
MAK ER
ausilio per non vedenti
con la scheda Arduino
[Progetti completi
open source]
di Stefano Lovati

In questo articolo presentiamo due progetti innovativi open source, entrambi basati sulla piattaforma
di prototipazione rapida Arduino, le cui finalità non sono soltanto didattiche, ma anche pratiche, con la
possibilità di migliorare la qualità della vita di molte persone.

INTRODUZIONE 6. basetta general purpose;

I
l primo progetto permetterà infatti di controllare remo- 7. motore elettrico a 12v/9v;
tamente un piccolo robot o veicolo radiocomandato 8. alimentazione 12/9v;
tramite il movimento (gestualità) della mano. Il secon- 9. regolatore di tensione 7805;
do progetto consentirà invece di realizzare un vero e 10. telaio per robot (opzionale), eventualmente au-
proprio bastone elettronico per non vedenti, in grado di tocostruito. Al seguente link una panoramica di
segnalare la presenza di ostacoli lungo il cammino tra- articoli sui robot e le relative tecnologie.
mite vibrazione tattile e segnalazione acustica.
PRINCIPIO DI FUNZIONAMENTO
PRIMO PROGETTO: CONTROLLO GESTUA- Il principale sensore utilizzato in questo progetto è rappre-
LE PER ROBOT sentato da un accelerometro a tre assi di tipo ADXL335.
Aggiungere a un piccolo robot una funzionalità avanza- Accelerometri di questo tipo (si osservi la Figura 1) sono
ta come il controllo gestuale è più semplice di quan- ampiamente utilizzati sui dispositivi mobile (smartphone
to si possa immaginare. Il progetto si compone di due e tablet) per numerose applicazioni, tra cui le notifiche e i
parti: un trasmettitore e un ricevitore. Il trasmettitore giochi (ad esempio Temple Run).
andrà opportunamente modificato in modo tale da in- Il cervello del robot è rappresentato dalla board Arduino
viare i controli gestuali sotto forma di comandi. Come Uno (Atmega32) che, accompagnata da un opportuno
piattaforma di sviluppo verrà utilizzato Arduino, il quale software (sketch), è in grado di riconoscere il movimen-
riconoscerà i gesti e i movimenti della mano utilizzando to gestuale in base ai dati forniti dall’accelerometro. Lo
come sensore un comune accelerometro. schema a blocchi dell’applicazione è visibile in Figura 2.
L’accelerometro legge le cooordinate X Y Z associate
MATERIALE RICHIESTO ai movimenti della mano, e le invia ad Arduino. In que-
I componenti richiesti per la realizzazione del progetto sta applicazione non siamo interessati ai valori misurati
sono elencati di seguito: lungo l’asse Z, per cui utilizzeremo soltanto i valori re-
1. accelerometro ADXL335; lativi alle coordinate X e Y. Lo sketch Arduino controlla i
2. scheda Arduino; valori delle coordinate ricevuti, e invia un’informazione
2. modulo ricetrasmittente RF Module 434-MHz; composta da 4 bit (funzione dei valori di X e Y) all’en-
3. circuito integrato encoder HT12E; coder. L’encoder, a sua volta, inoltra i dati verso il tra-
4. circuito integrato decoder HT12D; smettitore RF. I dati trasmessi da quest’ultimo vengono
5. circuito integrato per il pilotaggio dei motori; ricevuti dal ricevitore RF, che invia i 4 bit dati al circuito

68
MAKER

il trasmettitore, e uno per il ricevitore. Il circuito del rice-


vitore richiede di essere alimentato con una tensione di
12 V (necessaria per muovere i motori a 12 V), mentre
il trasmettitore può essere alimentato con una normale
batteria a 9 V (Figura 3).

Figura 3: il circuito di alimentazione

E’ anche possibile aggiungere un led con una resisten-


za da 1 kΩ in modo tale da indicare lo stato attivo o
meno dell’alimentazione.
Figura 1: l’accelerometro ADXL335 I componenti utilizzati nel progetto sono i seguenti:
• integrato 7805 che regola la tensione esterna di
decoder. Questo esegue la decodifica dei dati e inoltra 12 V al valore di 5 V (se non è possibile disporre
la corrispondente informazione decodificata al circuito di una tensione esterna da 12 V, si può utilizzar-
del driver per motore. Infine, il driver per i motori decide ne una a 9 V);
in quale direzione devono essere azionati i motori. • condensatori da 1 µF e da 470 µF ;
Vediamo ora di analizzare i vari passi su cui si articola la • resistenza da 1 kΩ per il led di stato dell’alimen-
realizzazione del progetto. tazione.

STEP 1 – IL CIRCUITO DI ALIMENTAZIONE Si consiglia inoltre di utilizzare un radiatore per dissi-


Avremo bisogno di due circuiti di alimentazione, uno per pare il calore prodotto dall’integrato 7805 (stiamo infatti

Figura 2: schema a blocchi del progetto

69
MAKER

Figura 4: schema elettrico del trasmettitore

riducendo una tensione da 12 V a 5 V). senza di due led: uno si accende quando al ricevitore
viene fornita l’alimentazione, mentre l’altro quando l’ali-
STEP 2 – IL TRASMETTITORE mentazione viene fornita al trasmettitore.
Il trasmettitore comprende il sensore accelerometro, Il led vicino all’integrato HT12D si accende quando l’a-
la cui funzione è quella di rilevare i gesti della mano e limentazione viene fornita al trasmettitore, indicando di
inviare l’informazione ad Arduino. Succes-
sivamente, i dati verranno inoltrati all’enco-
der, per essere poi trasmessi verso il ricevi-
tore (Figura 4).
Una volta assemblato, il circuito dovrebbe
essere simile a quello visibile in Figura 5.

STEP 3 – UPLOAD DEL CODICE SU


ARDUINO
Questo step consiste nell’upload del codi-
ce su Arduino, tramite l’ambiente di svilup-
po integrato (IDE).

STEP 4 – IL RICEVITORE
Il circuito del ricevitore comprende due cir-
cuiti integrati (il decoder HT12D e il driver
per motori L293D), e il modulo ricevitore RF.
Il circuito deve essere assemblato come in-
dicato in Figura 6. Notiamo subito la pre- Figura 5: il circuito per il controllo gestuale assemblato

70
MAKER

Figura 6: schema elettrico del ricevitore

conseguenza la condizione di stato trasmissione valido. soluzione che rende permanente il progetto qui descrit-
Se ciò non avviene, c’è probabilmente qualcosa da con- to. Il layout del PCB associato alla versione standalone
trollare e sistemare nei cablaggi. del progetto è visibile in Figura 8.
Quali tipi di movimenti della mano possono essere
riconosciuti dal robot? Il robot è stato progettato per SECONDO PROGETTO: BASTONE ELET-
riconoscere cinque diverse tipologie di gesti: avanti, TRONICO PER NON VEDENTI
indietro, sinistra, destra, e stop (si osservi la Figura 7). L’obiettivo di questo progetto è stato quello di realizzare
uno strumento in grado di assistere i non vedenti, mi-
STEP 5 – APPRONTAMENTO DEL PCB (OP- gliorando possibilmente la qualità della loro vita e ren-
ZIONALE) dendoli più indipendenti negli spostamenti. Il risultato
La scheda Arduino Uno presenta degli ingombri non tra- è stato la realizzazione di un bastone elettronico, o
scurabili, a maggior ragione se la si vuole impugnare bastone “intelligente” se vogliamo chiamarlo così, ba-
per rilevare le gestualità manuali. Inoltre, se si in futuro sato sulla piattaforma di prototipazione rapida Arduino.
si vuole realizzare un altro progetto con la stessa sche- Questo progetto open source ha lo scopo di assistere i
da, occorre rimuoverla dal circuito proposto in questo non vedenti quando camminano da soli, in autonomia,
articolo ed eliminare tutti i collegamenti, perdendo di in ambienti per loro nuovi e inesplorati. Un sensore ad
fatto il lavoro compiuto in quell’occasione. Ciò non è ultrasuoni rileva infatti la presenza di ostacoli lungo il
sempre accettabile, ed è stata pertanto sviluppata una cammino, fornendo un feedback sia di tipo tattile (pro-

Figura 7: il sistema riconosce cinque diversi tipi di gesti

71
MAKER

del progetto è il seguente:


1. una board Arduino Uno;
2. un sensore ad ultrasuoni (HCSR04);
3. una scheda di prototipazione (bre-
adboard);
4. una batteria 9 V;
5. un connettore per batteria a 9 V;
6. un jack maschio per alimentazione
DC;
7. un cicalino (buzzer);
8. alcuni cavetti jumper per i collegamen-
ti elettrici;
9. un cellulare rotto, oppure obsoleto (dal
quale recuperare il motorino per la vibra-
zione);
10. un microswitch.

In Figura 9 possiamo osservare i princi-


pali componenti richiesti per il progetto.
Oltre ai componenti elettronici sopra
menzionati, è necessario procurarsi il se-
guente materiale:
Figura 8: layout del PCB per la versione standalone
1. tubo in PVC con diametro pari a 3/4 di
pollice (necessario per realizzare il basto-
dotto dalla vibrazione di un piccolo motore, analogo a ne da passeggio);
quelli utilizzati sui comuni cellulari), che di tipo acustico. 2. una curva a gomito in PVC da 3/4 di pollice;
Un giorno, l’Autore del progetto [4], mentre stava recan- 3. nastro isolante;
dosi a scuola a piedi, notò una persona non vedente 4. alcune piccole viti per il montaggio della board
che stava camminando sulla stessa strada, incontrando Arduino;
qualche difficoltà dovute soprattutto al numero elevato 5. un cacciavite;
di persone e veicoli che percorrevano quel tratto. For- 6. un coltellino o seghetto;
tunatamente, in quell’occasione, l’Autore fu in grado di 7. colla adesiva instantanea;
assistere il non vedente. Quell’incontro fece balenare 8. una scatola o centenitore in cui collocare la
nella mente dell’Autore l’idea di realizzare un bastone scheda Arduino e il resto dell’elettronica.
per non vedenti “intelligen-
te”, mettendo la tecnologia
al servizio dell’uomo.
I principali requisiti del pro-
getto dovevano essere il
l’economicità (il prototipo
completo è costato solo 10
dollari), e la possibilità di
essere facilmente realiz-
zato (anche dai principian-
ti di elettronica) in poco
tempo, partendo da zero.

MATERIALE RICHIE-
STO
L’elenco dei componenti ri-
chiesti per la realizzazione Figura 9: componenti necessari per realizzare il progetto

72
MAKER

PRINCIPIO DI FUNZIONAMENTO gati ai suoi terminali (Figura 12).


Lo schema a blocchi relativo al progetto è evidenziato
dalla Figura 10. Come si può osservare, il principio di STEP 2 – INTERFACCIAMENTO CON ARDUINO
funzionamento è relativamente semplice. In Figura 13 sono indicate le connessioni che interes-
Si possono individuare tre blocchi principali: sano la board Arduino. Si può utilizzare una piccola bre-
1. blocco di input - è composto dal sensore ad adboard per collegare il sensore ultrasonico ad Arduino,
ultrasuoni, in grado di rilevare gli ostacoli posti di utilizzando dei normali cavetti jumper. Sia il buzzer che
fronte al bastone, con un raggio di azione fino a il motorino possono essere collegati direttamente alla
400 cm; board.
2. blocco controllore – è rappresentato dalla L’elenco completo dei collegamenti elettrici richiesti
scheda Arduino, il cui software è in grado di de- è il seguente:
terminare se l’ostacolo è troppo vicino al basto- • il pin VCC del sensore ultrasonico va collegato
ne e, nel caso, attivare le corrispondenti segna- al pin 5V di Arduino;
lazioni per l’utente; • il pin GND del sensore ultrasonico va collegato
3. blocco di output – è composto dal piccolo mo- al pin GND di Arduino;
tore che genera la vibrazione riconoscibile trami- • il pin TRIG del sensore ultrasonico va collegato
te il tatto, e da un buzzer piezoelettrico. al pin D12 di Arduino;
• il pin ECHO del sensore ultrasonico va collegato
STEP 1 – RECUPERO DEL MOTORE DA UN al pin D11 di Arduino;
CELLULARE DISMESSO • il filo rosso del buzzer va collegato al pin D8 di
Quest’operazione non è particolarmente complessa, Arduino;
ma richiede comunque una buona dose di attenzione e • il filo nero del buzzer va collegato al pin GND di
pazienza. Il piccolo motore a vibrazione andrà recu- Arduino;
perato da un vecchio e inutilizzato cellulare, spesse • il pin 1 del motorino a vibrazione va collegato al
volte abbandonato in qualche angolo della casa. Il van- pin D7 di Arduino;
taggio di questo dispositivo (oltre al costo zero) è quello • il pin 2 del motorino a vibrazione va collegato al
di avere delle dimensioni estremamente compatte, e di pin GND di Arduino;
richiedere una bassa tensione di alimentazione. • il filo rosso della batteria a 9 V va collegato al pin
Occorre anzitutto rimuovere dal cellulare le viti che del microswitch;
chiudono il suo guscio, rimuovendo tutte le parti interne • il filo nero della batteria a 9 V va collegato al polo
come visibile in Figura 11. Possiamo a questo punto negativo del jack dell’alimentazione;
individuare il motore a vibrazione, situato in prossimità • il pin 2 del microswitch va collegato al polo posi-
di un lato del contenitore del telefono. Rimuovete con tivo del jack dell’alimentazione.
attenzione il motorino.
Si noti inoltre come il motorino possa avere forma ed In Figura 14 possiamo osservare il risultato ottenuto al
aspetto differenti, a seconda del modello e del produt- termine dell’assemblaggio.
tore del dispositivo (un altro tipico modello è mostrato
nella Figura 12). STEP 3 – UPLOAD DELLO SKETCH SU AR-
Il motorino andrà poi saldato su una piccola striscia di DUINO
basetta millefori, con due spezzoni di filo elettrico colle- E’ giunto ora il momento di occuparsi della componen-

Figura 10: schema a blocchi del progetto

73
MAKER

Figura 11: estrazione del motorino dal cellulare

Figura 12: un altro tipo comune di motorino a vibrazione

Figura 13: i collegamenti elettrici con Arduino

74
MAKER

Figura 14: assemblaggio completo della parte elettrica

te software del progetto. Lo sketch, riportato qui sotto,


va caricato nell’IDE Arduino, compilato, e programmato
sulla board Arduino. digitalWrite(trigPin, LOW);

#define trigPin 13
#define echoPin 12
duration = pulseIn(echoPin, HIGH);
#define motor 7
distance = (duration/2) / 29.1;
#define buzzer 6

if (distance < 70) // Checking the distance, you


void setup()
can change the value
{
{
pinMode(trigPin, OUTPUT);
digitalWrite(motor,HIGH); // When the the
pinMode(echoPin, INPUT);
distance below 100cm
pinMode(motor, OUTPUT);
digitalWrite(buzzer,HIGH);
pinMode(buzzer,OUTPUT);
}
}
else
{
void loop()
digitalWrite(motor,LOW); // when greater
{
than 100cm
long duration, distance;
digitalWrite(buzzer,LOW);
}
digitalWrite(trigPin, LOW);
delay(500);
delayMicroseconds(2);
}
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

75
MAKER

Figura 15: assemblaggio del bastone

Figura 16: assemblaggio finale

STEP 4 – REALIZZAZIONE DEL BASTONE l’impugnatura del bastone.


Per costruire il bastone va benissimo un tubo di PVC Le operazioni da compiere per l’assemblaggio del ba-
con diametro pari a 3/4 di pollice. Servirà inoltre una stone sono le seguenti (si osservi la Figura 15):
curva a gomito, dello stesso diametro, per realizzare • prendete il tubo di PVC, e tagliatene un pezzo

76
MAKER

o contenitore in cui collocare tutte le


parti elettriche (Figura 16).
La board Arduino andrà fissata all’in-
terno del contenitore utilizzando del-
le apposite viti. Occorre poi praticare
due fori per il fissaggio del sensore
ad ultrasuoni, come indicato in Fi-
gura 16. Il buzzer è stato installato
all’esterno della scatola in modo tale
da non attenuare il suono prodotto.
Il microswitch è stato posizionato
su un lato della scatola, ed è sta-
to praticato un ulteriore piccolo
foro per collegare il motorino a
vibrazione alla board Arduino. La
batteria andrà posizionata anch’es-
sa all’interno del contenitore, e il suo
jack andrà inserito nell’apposita pre-
sa di alimentazione disponibile sulla
scheda Arduino. A questo punto, la
scatola può essere attaccata al ba-
stone da passeggio, utilizzando del-
le viti oppure del collante. Il motore
a vibrazione va infine fissato sotto il
bastone, utilizzando del nastro iso-
lante. Il risultato finale del bastone
da passeggio elettronico per non ve-
denti è visibile in Figura 17.

BIBLIOGRAFIA
1. From Mayoogh Girish, Con-
trol your robot using hand gestures
Figura 17: assemblaggio finale - Maker at DIY Hacking
2. From Suhail, Arduino smart
lungo circa un metro e mezzo; cane for the visually impaired: best Arduino
• prendete la curva a gomito, e attaccatela a una project - Maker at DIY Hacking
delle estremità del bastone;
• prendete un altro tratto di tubo di PVC, lungo
circa 10 cm, e attaccatelo all’altra estremità del
bastone;
• fissate tutti i pezzi con della colla o mastice ade-
sivo.

Se si desidera, si può poi dipingere il bastone con il co-


lore desiderato, oppure avvolgerlo con del nastro iso-
L’autore è a disposizione nei commenti per eventuali
lante. approfondimenti sul tema dell’Articolo. Di seguito il link per
accedere direttamente all’articolo sul Blog e partecipare alla
STEP 5 – METTIAMO TUTTO ASSIEME discussione:
https://it.emcelettronica.com/controllo-gestuale-e-ausilio-per-non-
Questa è sicuramente la parte più critica dell’intero pro-
vedenti-con-la-scheda-arduino-progetti-completi-open-source
getto. Occorre anzitutto procurarsi una piccola scatola

77
Il mercato Italiano
PCB
dei PCB
di Maurizio Di Paolo Emilio

La crescente complessità e la miniaturizzazione dei dispositivi elettronici sono il catalizzatore per l’e-
voluzione continua della progettazione e produzione di PCB. Ma come le aziende possono far fronte a
questa evoluzione? I produttori hanno necessità di campionare immediatamente fornendo un deciso
time-to-market per la realizzazione del prodotto e arrivare prima di tutti quanti sul mercato. In questo
contesto è indispensabile disporre di aziende dinamiche che offrono non solo innovazione tecnologica
ma anche un processo lavorativo flessibile e veloce.

G
INTRODUZIONE L’industria PCB europea serve principalmente i mercati
li analisti di mercato hanno stimato una crescita europei, ma esporta anche prodotti di fascia alta in Asia e
del mercato PCB con un CAGR di circa il 3% entro Nord America. I mercati principali serviti sono quelli indu-
il 2020. Dal momento che questo mercato è una striali, strumentazione e controllo, medicale, militare, aero-
parte integrante della produzione di smartphone e altri spaziale e automotive. Le prospettive per l’industria PCB
dispositivi intelligenti, il recente aumento della domanda europea dipendono dalla salute degli OEM che compon-
porterà ad una decisa crescita. Inoltre, l’avvento delle gono i mercati chiave, e tutto ciò che è valore aggiunto in
tecnologie avanzate, come IoT, IIoT e Wearable, con- grado di compensare la concorrenza off-shore. Di seguito
tribuiranno a favorire la domanda di PCB durante i pros- riportiamo un elenco di principali aziende che operano nel
simi anni (figura 1). settore PCB.

Figura 1: il mercato PCB in funzione delle applicazioni (a) e del settore geografico (b)

78
PCB

KEY ELECTRONIC SYSTEM di Frediano Carlevato Via


Pascoli, 16 - 10072 Mappano di Caselle (TO)
http://www.keymicro.net

Aiutiamo le aziende e le persone a creare prodotti elettronici in modo più semplice per insediare prima il mercato ed
aumentare i loro profitti. Servizi offerti: sviluppo prodotto, montaggio schede, gestione prodotto. Valore aggiunto: pro-
dotti funzionanti, prodotti funzionanti nel tempo, consegne immediate, massima collaborazione. “Se hai intenzione di
lanciare il tuo prodotto innovativo nel mercato, possiamo lavorare insieme per farlo al meglio”.

PCB Project Srl Via dei Gheghi n° 65 Segromigno in


Monte - 55018 Lucca - http://www.pcbproject.it/

La produzione è principalmente indirizzata ai prototipi intesi più nel senso di piccolissime produzioni, anche ricorrenti
che "materiale da test". PCB Project srl produce circuiti stampati Singola Faccia, Doppia Faccia, Multistrato princi-
palmente in FR4 e circuiti stampati Metal Core (IMS) su base alluminio; con tecnologia tradizionale a foro passante,
SMD o mista. Alcune delle principali lavorazioni sono: Foratura CNC, Solder mask fotografico, Finitura H.A.L. o
Argento Chimico, Test elettrico.

Safe-PCB Via Bartolomeo Bosco 57/2 16121 GENOVA


http://www.safe-pcb.com/

Safe-PCB è un produttore internazionale di circuiti stampati specializzato in prototipi e medie serie per consegna ra-
pida. I punti di forza sono: fabbrica ultra-moderna nel cuore di Shenzhen, la più grande area al mondo di produzione
di PCB; sito intuitivo per configurare, preventivare, ordinare e controllare la produzione e la spedizione dei tuoi PCB;
prezzi chiari che includono attrezzatura, test elettrico, oneri doganali e spedizione per corriere; supporto tecnico e
commerciale in Italia per rispondere a tutte le vostre domande. Safe-PCB produce come standard PCB rigidi con le
seguenti caratteristiche: FR4, IMS, CEM3, Poliimmide (PI) (SUBSTRATO FR4 MARCHIO VENTEC); da 2 a 12 facce
e risoluzione 0,1 mm; spessore totale da 0,2 a 3,2 millimetri; finitura HAL, NiAu, Argento, OSP, Carbonio; spessore
rame da 17 a 140 micron; solder resist verde, bianco, nero, blu, rosso.

CUSTOM SOLUTION S.R.L. Via Artigianato 3 43022


Montechiarugolo (PARMA) - http://www.customsolution.it

CUSTOM SOLUTION S.R.L. ha come attività principale l'assemblaggio delle schede elettroniche per conto terzi e
la progettazione hardware e firmware di schede dedicate alle esigenze del cliente. La storia professionale dei soci,
è tale da assicurare alla CUSTOM SOLUTION una elevata esperienza in molti ambiti progettuali, con particolare
propensione alla progettazione dei prodotti con comunicazione a radiofrequenza. CUSTOM SOLUTION si propone
come partner a qualsiasi livello del progetto: assemblaggio schede elettroniche per conto terzi in conto pieno o conto
lavoro per produzione da pochi pezzi e decina di migliaia di pezzi, collaudati ed inscatolati; progettazione completa
di hardware e firmware.

79
PCB

BIANCHI MASTER S.a.s. Via C.Belgioioso 70/28 20157


MILANO - http://www.bianchimaster.it

Bianchi Master offre un servizio a “360 gradi” partendo dalla masterizzazione del circuito fino ad arrivare alla sua
costruzione. Avvalendoci della nostra trentennale esperienza nel campo siamo in grado di eseguire masterizzazioni
di qualsiasi tipologia (dai “monofaccia” ai “multistrati” ,alimentatori , schede ad impedenza controllata , ecc.). Grazie a
selezionati partner siamo in grado di fornire PCB di varie tipologie , dal monofaccia ai multilayer , circuiti in alluminio,
finiture in oro chimico e coperture per pannelli in vetroresina. Al cliente finale proponiamo anche l’assemblaggio delle
schede , con kit componenti di nostra fornitura oppure con fornitura parziale o totale da parte del cliente stesso. L’as-
semblaggio viene eseguito da noi direttamente per quanto riguarda le campionature e le piccole produzioni, mentre
per le grosse produzioni ci affidiamo a nostri partner consolidati da anni e di grande esperienza nel settore. Assicuria-
mo al cliente tempi brevi in base al lavoro da eseguire , la nostra priorità e di soddisfare le richieste del cliente parten-
do dalla precisione del lavoro, passando per tutti i controlli sulla masterizzazione , assicurando materiali certificati e
verificati con test di controllo automatizzati in fase di realizzazione del PCB e consegnando il tutto nei tempi richiesti.

Esseti Circuiti Stampati Srl Via del Lavoro, 90, 40050 Zona
Artigianale Argelato BO - http://www.circuiti-stampati.com

Nel 1979 a Bologna, grazie alla passione per l’elettronica e l’innovazione, due amici posarono le basi di quella che
sarebbe diventata una grande azienda: Esseti Srl, che da oltre 35 anni produce e trasforma circuiti stampati ed è in
grado di assicurare qualità, disponibilità, competitività, flessibilità produttiva e supporto tecnico. Esseti Srl produce
ed importa circuiti stampati (PCB) per applicazioni nei settori dell’elettronica di consumo, industriale e di potenza,
broadcasting, lighting, elettromedicale e automotive.

DROMO ELETTRONICA SRL VIA ANDREA CANGITANO 15A 00043


CIAMPINO (ROMA) - www.dromoelettronica.com

Azienda Flessibile e Dinamica, formata da periti elettronici con esperienza pluriennale nei seguenti settori: Montag-
gio SMD e PTH di schede elettroniche tramite macchine industriali pick&place e saldatrici ( sia ad onda che selettive
); assemblaggio, cablaggio di apparecchiature elettroniche generiche; taratura e collaudo di apparecchiature elet-
troniche e schede stand alone; specializzazione nell'assemblaggio della micro elettronica.

P.A.C. DI BEZZETTO SANDRO & C. S.N.C. Via del lavoro, 271 37050
- Angiari - Verona Italia - http://www.pacpcb.it

Dal 1973 P.A.C. è tra i leader nel mercato dei circuiti stampati (C.S.) o PCB (Printed Circuit Board). E' più di trent’anni
che si interessa alle varie richieste dei settori di elettronica, automazione, potenza, robotica, telecomunicazioni, illu-
minotecnica, ecc. per potersi arricchire di quell'esperienza che ha permesso di assistere e far parte dell’evoluzione
di questo mercato, sviluppando direttamente nuovi processi e sistemi produttivi finalizzati a realizzare piccole, medie
e grandi serie di circuiti stampati di altissima qualità.

80
PCB

Cistelaier S.p.A. Via Gandhi, 1 41122 Modena


http://www.cistelaier.it/

Cistelaier si propone di affiancare il Cliente già a inizio progetto contribuendo, quando richiesto, al miglioramento del
progetto stesso attraverso analisi del tipo "Design forManufacturing” (DFM), per ottimizzare affidabilità in uso e per
minimizzare i costi del dispositivo. Il servizio di prototipazione veloce (QTA) completa l’offerta di supporto al Cliente
in fase di progettazione. Cistelaier S.p.A. è in grado di offrire una vasta gamma di circuiti stampati, caratterizzati
dall’elevata tecnologia. L’attenzione prestata nei processi di produzione, dalla scelta delle materie prime utilizzate
alla consegna del prodotto finito, garantita dalle diverse certificazioni in nostro possesso, permette a Cistelaier S.p.A.
di garantire ai propri Clienti un’apprezzata rapidità nelle forniture abbinata a un’elevata qualità del prodotto.

Lorj s.r.l. Via Fr. Camazzole, 21 Carmignano di


Brenta 35010 - (PD) - http://www.lorj.it

L'azienda Lorj s.r.l. opera nel settore della produzione di circuiti stampati (PCB) da più di 40 anni ed è specializzata
nella produzione, civile e professionale, di mono e multistrati, flessibili e su base di alluminio, con consegne brevi e
veloci sia per piccole che per medie produzioni. Le continue ricerche e aggiornamenti della parte tecnica per man-
tenere sempre i più alti standard qualitativi, hanno contribuito ad ottenere altre certificazioni come l' ISO 9001, ISO
14001 - 2004. Oggi in ottemperanza alla normativa RoHS tutto il processo produttivo è stato rivisto e modificato
adeguandolo anche all'utilizzo delle leghe Lead Free.

Millennium Dataware Srl Sede legale / Sede operativa


Strada Prov. Castelnuovo Scrivia, snc 15057 Tortona (AL)
http://www.mdsrl.it/

MD collabora con le più grandi aziende fornitrici di processi chimici e di semilavorati per il settore dei circuiti stampati
(Atotech, Panasonic, Sun Chemicals, Union Tool, ...). Per garantire la qualità promessa, MD collauda ogni circuito
con una macchina per il test elettrico a sonde mobili di nuova generazione, e allega il referto al prodotto finito. Que-
ste, oltre a fornirle i loro prodotti di gamma superiore, controllano la qualità dei circuiti ottenuti intervenendo, quando
necessario, per apportare migliorie al processo produttivo. Il prodotto di punta è ovviamente il multistrato, ma una
delle ragioni del successo è la gamma estesa, che comprende circuiti stampati IMS (Insulated Metal Substrate),
mono e doppio strato tradizionali, lamine SMD in acciaio, circuiti per alte frequenze e, ultimo ma non meno importan-
te, l'Assemblaggio dei componenti!

Baselectron s.r.l. - Circuiti Stampati Sede operativa: Via M.


Angelini, 18 27028 San Martino Siccomario (PV)
http://www.baselectron.com

I punti di forza di Baselectron sono sempre stati la velocità di produzione, la flessibilità nell'andare incontro alle più
svariate richieste e la costante attenzione all'innovazione in un settore che non smette mai di proporre soluzioni
all'avanguardia. I PCB prodotti da Baselectron sono per questi motivi diretti a soddisfare le più svariate esigenze,
trattandosi di circuti stampati a singola faccia o a doppia faccia, multistrato (fino a ventiquattro strati) o speciali, flessi-
bili e rigid-flex, eccetera. La costante attenzione alle più moderne tecnologie permette a Baselectron di offrire anche
la campionatura in tempi ridottissimi (anche in sole 24/48 ore per le richieste più urgenti), spesso improponibili per le
altre imprese del settore; il tutto, offrendo sempre un prodotto dall'elevato standard qualitativo.

81

You might also like