Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni48 pagine

EOS Book4F

elettronica 4f

Caricato da

robb robb
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni48 pagine

EOS Book4F

elettronica 4f

Caricato da

robb robb
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

All'alba di un nuovo giorno

ED IT ORIA LE
Grandi cambiamenti in Elettronica Open Source, un nuovo progetto e tanto entusiasmo!
Tutto cambia e tutto si trasforma, è la legge della natura ed al tempo stesso condizione
necessaria per innovare e rinnovarsi. Dopo anni di esperienza, mesi di sperimentazione
e giornate intere di costruzione e ri-costruzione, siamo pronti a passare ad un livello suc-
cessivo.
Abbiamo rinnovato la rivista Firmware, realizzando un nuovo progetto denominato Firmwa-
re 2.0. Una rivista di Elettronica Embedded e Semiconduttori che include anche una parte
dedicata ai Maker, la maker zone appunto.
In questi ultimi mesi abbiamo ascoltato i vostri suggerimenti ed anche le vostre critiche,
ed è proprio da un ascolto attento di tutte le richieste che abbiamo progettato questa nuova rivista!
Sul sito trovate il piano editoriale per il 2020. E potrete notare come gli argomenti dei vari numeri, tra
Firmware e Maker Zone, siano molto simili ed in alcuni mesi addirittura uguali.
I numeri saranno più verticali possibili, su topic specifici, ma visti da due angolazioni diverse:
professionale e maker.
Infatti Ingegneri elettronici e Maker sono sempre più due facce della stessa medaglia, più passa
il tempo e più gli uni hanno bisogno degli altri. Fino a qualche anno fa un approccio "learning by
doing" era visto di traverso dai professionisti, oggi invece dopo l'era Arduino (e la parola dopo non
è scritta a caso) è tutto cambiato. Gli ingegneri hanno capito che le demoboard da 5$ e le librerie
già fatte (seppur non ottimizzate) sono necessarie in fase di prototipazione, anzi fondamentali per il
time-to-market. Ed allo stesso tempo avere demoboard a basso costo o addirittura sistemi completi
come il Raspberry Pi a costi relativamente irrisori, hanno dato una spinta alla diffusione dell'elettro-
nica. Basta avere voglia di "smanettare" e saper leggere gli articoli su internet (di qualità ovviamen-
te) e si possono realizzare progetti veramente interessanti, unendo il mondo dell'elettronica a quello
della fantasia e dell'innovazione presente in moltissime persone, e questo a prescindere dalla loro
preparazione in elettronica.
Ma non è tutto, ci sono anche altre novità! A parte il sottoscritto che torna a scrivere un editoriale
dopo tanti anni, e non senza emozioni!
E' con me un team decisamente rinnovato ed ampliato, nuovi investimenti ed un entusiasmo stra-
ordinario, sia mio che del nuovo team, che mi riporta alle prime esperienze imprenditoriali, quando
avevo solo 25 anni, dimezzando di colpo la mia età attuale!!
Inoltre Stefano e Giordana, due preziosi collaboratori che garantiranno sempre una qualità degli
articoli ai massimi livelli ed un gruppo di autori, tecnici e volutamente meno tecnici, focalizzati verso
un unico obiettivo: migliorare qualcosa di ottimo, che avevamo già migliorato in passato e portarlo
ad un livello successivo.

E' nata quindi Firmware 2.0

Questo è l'ultimo numero singolo di EOS-Book, dal prossimo sarà inglobato nella nuova rivista
Firmware 2.0

Elettronica Open Source siete voi, Elettronica Open Source siamo noi, tutti insieme per un mondo
dell'elettronica sempre più grande e ricco di informazioni da condividere.

Con emozione gridiamo forte ancora: SHARE FOR LIFE!

Emanuele Bonanni

1
Founder&Editor EDITORIALE SCI&TECH
Emanuele Bonanni All'alba di un nuovo Lo Spazio 37
1
giorno a casa nostra
CFO
Lidia Balica EMBEDDED Esiste un limite alle 42
Realizziamo un nostre capacità visive?
4
Editorial Assistant orologio per gli scacchi
Maria Pisani con ESPertino

Marketing Programmiamo
21
Sara Ercolani ESPertino con
MicroPython
Advertising
Lidia Balica MCU
lidia@[Link] Il Robot R2D2 con
12
Arduino e OpenScad
Graphic Designer
Marilde Mirra Datemi una PWM e tre
29
sensori e vi controllerò
un motore
Circulation
Users - 131.080
Social Network - 111.908

© Copyright
Tutti i diritti di riproduzione o di traduzione
degli articoli pubblicati sono riservati.
Manoscritti e disegni sono di proprietà di
EMCelettronica Srl.
E’ vietata la riproduzione anche
parziale degli articoli salvo espressa
autorizzazione scritta dell’editore. I
contenuti pubblicitari sono riportati senza
responsabilità, a puro titolo informativo.
Autorizzazione alla pubblicazione del
Tribunale MI n. 20 del 16/01/2006
Realizziamo un orologio
EMBEDDED
per gli scacchi con
ESPertino
di Giovanni Di Maria

Le partite ufficiali al gioco degli Scacchi necessitano dell'uso di speciali orologi (meccanici o elettroni-
ci) per misurare e assicurare equamente il tempo impiegato dai due giocatori per effettuare le proprie
mosse. Anche se il mercato mette a disposizione modelli molto belli ed eleganti a prezzi competitivi,
nulla toglie il piacere di poterlo realizzare in casa con la nostra scheda ESPertino.

DI COSA SI TRATTA? nel passato e quelli elettronici, molto precisi e program-


mabili. La figura 1 mostra entrambi i modelli.

È
un orologio speciale che ha lo scopo di tenere la
traccia del tempo utilizzato da ciascun giocato- IL NOSTRO MODELLO
re durante una partita ufficiale di scacchi. Il suo Con la tecnologia di oggi la realizzazione di tale tipolo-
funzionamento è molto semplice: l'orologio del Bianco gia di dispositivo è realmente semplice. Una MCU pro-
inizia a girare, mentre quello del Nero è fermo. Quando grammabile e un opportuno display e il gioco è fatto.
il Bianco effettua la sua mossa, preme il pulsante, fer- Si potrebbe realizzare anche con i soli componenti
mando il proprio orologio e avviando quello dell'avver- discreti (transistor, contatori, decoders, ecc) ma ciò
sario. In questo modo la misura del tempo è realmente comporterebbe tanta fatica, sia in termini economici che
equa e corretta. Senza orologio un giocatore pensereb- concettuali. Sarebbe, però, una bella e fruttuosa sfida
be le proprie mosse molto più dell'altro avversario. per tutti i progettisti elettronici. Gli "ingredienti" utilizzati
Ne esistono di diverse tipologie. Quelli meccanici, usati per il nostro modello sono sostanzialmente tre:

Figura 1: un modello di orologio di tipo meccanico (sopra) e uno di tipo elettronico (sotto)
4
EMBEDDED

Figura 2: il modulo di visualizzazione composto da otto display a Led a sette segmenti

• La scheda ESPertino; IL DISPLAY LED A SETTE SEGMENTI


• Un display a Led a sette segmenti composto Si tratta di un modulo di visualizzazione (vedi figura 2)
da otto cifre; estremamente economico. Il modello da noi utilizzato è
• Due pulsanti normalmente aperti. composto da ben otto display a sette segmenti, gestiti
dal circuito integrato MAX7219. Per il suo funzionamen-
Questa da noi realizzata costituisce un modello base, to esso usa il protocollo SPI. I primi quattro digits sono
con una cadenza di tempo preimpostata, precisamente riservati al giocatore Bianco, gli altri quattro al giocatore
di 15'00". Una eventuale aggiunta potrebbe consistere Nero. Il tempo visualizzato è nella forma mm:ss.
nell'adozione di un quarto pulsante per la selezione del-
le diverse temporizzazioni e metodi di gioco. LO SCHEMA ELETTRICO
TEORIA DI FUNZIONAMENTO Il cablaggio dell'orologio, visibile in figura 3, è abbastan-
L'algoritmo di funzionamento del nostro orologio potreb- za semplice e comprende l'unità d'input (i pulsanti) e di
be essere il seguente: output (i display).
1. All'accensione i due quadranti mostrano il Nel dettaglio, i collegamenti dell'unità di visualizzazione
tempo iniziale a disposizione per ciascun sono così costituiti:
giocatore, ossia quindici minuti, per l'esem- • Il pulsante PAUSE è collegato al pin IO33 di
pio corrente; ESPertino;
2. Il Nero preme il proprio pulsante avviando il • Il pulsante GIOCAT1 è collegato al pin IO35
conteggio a ritroso del Bianco; di ESPertino;
3. Il Bianco preme il proprio pulsante avviando • Il pulsante GIOCAT2 è collegato al pin IO34
il conteggio a ritroso del Nero; di ESPertino;
4. Se il tempo di uno dei due orologi scade • Il Pin Vcc del display con il pin 5V di ESPer-
(00:00) inizia a lampeggiare decretando, tino. E' possibile alimentare con la tensione
in tal modo, la sconfitta; di 3.3V il modulo a diodi Led ma la sua illu-
5. Ritorna al punto 2. minazione risulterebbe più limitata;
• Il Pin Gnd del display con il pin Gnd di
Come si vede, si tratta di semplici passi. Il programma- ESPertino;
tore, soprattutto, deve focalizzare la propria attenzione • Il Pin Din del display con il pin IO23 di
sui seguenti aspetti: ESPertino;
• Precisione del conteggio; • Il Pin CS del display con il pin IO5 di ESPer-
• Rilevazione della pressione dei tasti; tino;
• Visualizzazione del tempo sui display; • Il Pin CLK del display con il pin IO18 di
• Controllo del tempo scaduto. ESPertino.

5
EMBEDDED

1 #include <SPI.h>
2 //------Dichiarazioni di variabili-------------
3 int slaveSelect = 5; // pin usato per abilitare lo slave
4 char singola_cifra;
5 int secondi_bianco = 900; // Secondi di gioco rimanenti al Bianco
6 int secondi_nero = 900; // Secondi di gioco rimanenti al Nero
7 int minuti, secondi;
8 String tocca_al = "";
9 //-------------SETUP----------------
10 void setup() {
11 [Link](); //initialize SPI
12 pinMode(slaveSelect, OUTPUT);
13 digitalWrite(slaveSelect, LOW); // Seleziona lo Slave
14 // Prepara il MAX7219 per la visualizzazione dei dati
15 sendCommand (12, 1); // Modo normale
16 sendCommand (15, 0); // Display test off
17 sendCommand (10, 7); // Media intensita' (tra 0-15)
18 sendCommand (11, 7); // Mostra 8 digits
19 sendCommand (9, 255); // Decodifica: usa standard 7-segment digits (no bit patterns)
20 digitalWrite(slaveSelect, HIGH); // Deseleziona lo Slave
21 pinMode(35, INPUT); // Pulsante per il BIANCO
22 pinMode(34, INPUT); // Pulsante per il NERO
23 pinMode(33, INPUT); // Pulsante per la PAUSA
24 }
25 //-------------LOOP----------------
26 void loop() {
27 //-----------Visualizza orologio del BIANCO (digits 8-7-6-5)
28 minuti = secondi_bianco / 60; // Calcola minuti da secondi
29 secondi = secondi_bianco % 60; // Calcola i secondi
30 sendCommand(8, minuti / 10); // Decine minuti
31 sendCommand(7, minuti % 10); // Unita' minuti
32 sendCommand(6, secondi / 10); // Decine secondi
33 sendCommand(5, secondi % 10); // Unita' secondi
34 //-----------Visualizza orologio del NERO (digits 4-3-2-1)
35 minuti = secondi_nero / 60; // Calcola minuti da secondi
36 secondi = secondi_nero % 60; // Calcola i secondi
37 sendCommand(4, minuti / 10); // Decine minuti
38 sendCommand(3, minuti % 10); // Unita' minuti
39 sendCommand(2, secondi / 10); // Decine secondi
40 sendCommand(1, secondi % 10); // Unita' secondi
41 //-------Se il tempo è scaduto l'orologio LAMPEGGIA
42 if (secondi_bianco == 0 || secondi_nero == 0) {
43 while (1) {
44 sendCommand (10, 15); // Intensita' alta
45 delay(250);
46 sendCommand (10, 0); // Intensita' bassa
47 delay(250);
48 }
49 }
50 //-------Gestisce i tasti durante il secondo di attesa
51 for (int t = 0; t < 1000; t++) {
52 if (digitalRead(35) == HIGH) {
53 tocca_al = "Nero";
54 sendCommand (10, 7); // Media intensita' (tra 0-15)
55 }
56 if (digitalRead(34) == HIGH) {
6
EMBEDDED

57 tocca_al = "Bianco";
58 sendCommand (10, 7); // Media intensita' (tra 0-15)
59 }
60 if (digitalRead(33) == HIGH) {
61 tocca_al = ""; // Mette in pausa
62 sendCommand (10, 0); // Bassa intensita' (tra 0-15)
63 }
64 delay(1);
65 }
66 //-----Se tocca al BIANCO decrementa il tempo di 1 secondo
67 if (tocca_al == "Bianco")
68 secondi_bianco--;
69 //-----Se tocca al NERO decrementa il tempo di 1 secondo
70 if (tocca_al == "Nero")
71 secondi_nero--;
72 }
73 //-------------SENDCOMMAND----------------
74 void sendCommand(int command, int value) {
75 digitalWrite(slaveSelect, LOW);
76 [Link](command);
77 [Link](value);
78 digitalWrite(slaveSelect, HIGH);
79 }

Lo sketch è abbastanza documentato. Contiene i numeri di riga progressivi per una semplice spiegazione e riferimento alle varie
parti del codice e vanno eliminati in fase di codifica. Diamo uno sguardo al listato e poi lo commentiamo assieme, spiegando le
parti più salienti

Per quanto riguarda i pulsanti, le tre porte d'ingresso, in tero display inizia a lampeggiare all'infinito. Per riattivare
stato di riposo, ossia in caso di non pressione degli at- l'orologio occorre resettare la scheda ESPertino.
tuatori, sono collegati a massa attraverso le relative
resistenze di pull-down da 10Kohm, che assicurano LO SKETCH
uno stato logico basso. In caso di loro pressione vengo- Il fattore fondamentale della riuscita di qualsiasi proget-
no collegate direttamente alla linea di alimentazione a to non è la programmazione ma l'analisi del problema.
3.3V, commutando la porta a livello logico alto. Essa deve risultare semplice, perfetta e ben definita
già dall'inizio. Se l'analisi è portata avanti con qualche
L'ALGORITMO problema o con dei difetti, inevitabilmente il programma
In figura 4 è illustrato il diagramma di flusso del sistema. finale non può risultare funzionante. Prestate, quindi, la
Esso è imperniato sulla rilevazione dello stato logico massima importanza a questa fase di sviluppo.
dei tre pulsanti. A seconda di quale porta logica viene Lo sketch, proposto di seguito, è abbastanza docu-
attivata, il programma decide di selezionare uno stato di mentato. Contiene i numeri di riga progressivi per una
funzionamento tra: semplice spiegazione e riferimento alle varie parti del
• "Tocca al Bianco": l'orologio del Bianco è codice e vanno eliminati in fase di codifica. Diamo uno
decrementato di un secondo; sguardo al listato e poi lo commentiamo assieme, spie-
• "Tocca al Nero": l'orologio del Nero è decre- gando le parti più salienti.
mentato di un secondo; • Linea 1: per utilizzare il display occorre includere
• "Pausa": non tocca a nessuno e gli orologi il file SPI.h, che contiene i prototipi di funzione
restano fermi, con l'abbassamento di lumi- per la sua gestione;
nosità del display. • Linee 2÷8: dichiarazione delle variabili. Si notino,
in questa sede, che le due variabili numeriche
Al termine del conteggio, quando l'orologio di uno dei secondi_bianco e secondi_nero contengono i
contendenti arriva a 00:00, il decremento si blocca e l'in- secondi rimasti a disposizione ai due giocatori

7
EMBEDDED

(inizialmente 900). E' sufficiente modificarle per standard. Inoltre configura le tre porte 33, 34 e
cambiare la cadenza di gioco. Nel proseguo 35 quale ingressi, per i pulsanti;
del codice esse vengono trasformate in minuti e • Linee 28÷29, 35÷36: con questi due statement
secondi, nel formato mm:ss. Di vitale importan- vengono ricavati i secondi e i minuti dal tempo
za è anche la variabile "tocca_al", che contiene rimasto a ciascun giocatore, espresso in secon-
lo stato attuale del funzionamento dell'orologio. I di. Ad esempio 100 secondi sono convertiti in 1
tre possibili valori che essa può assumere sono minuto e 40 secondi. Lo scopo si consegue con
i seguenti: una divisione e con il calcolo del resto (modu-
• "Nero": in questo caso la luminosità del di- lo). Il metodo è il seguente, sempre con l'esem-
splay viene impostata a livello medio e il pio di 100 secondi:
tempo rimanente del Nero è decrementato • minuti=(int)100/60
di una unità al secondo; • minuti=1
• "Bianco": in questo caso la luminosità del • secondi=100%60
display viene impostata a livello medio e il • secondi=100 MOD 60
tempo rimanente del Bianco è decrementa- • secondi=40
to di una unità al secondo; • Linee 30÷33, 37÷40: queste funzioni visualiz-
• "" (stringa nulla): in questo caso il turno non zano, praticamente, gli orologi del Bianco e del
è di nessuno, l'orologio si ferma ed è posto Nero sul display;
in stato di pausa. Il livello d'illuminazione • Linee 41÷49: questa frazione di codice ha l'im-
del display è al minimo e il conteggio può portante compito di controllare se il tempo di
essere ripreso solo premendo uno dei due uno dei due contendenti è giunto alla scadenza
tasti dei giocatori; (00:00). Nel qual caso il display inizia a lampeg-
• Linee 9÷24: la funzione setup() configura le giare all'infinito, fino a successivo reset della
impostazioni iniziali dell'ambiente operativo. In scheda ESPertino;
particolare, inizializza il protocollo SPI (linea 11), • Linee 50÷65: inizia con queste righe la parte re-
configura in uscita la linea dello slave del display lativa alla rilevazione della pressione dei tasti.
(linea 12), lo prepara a funzionare in modo nor- Essi vengono processati ogni millisecondo per
male, senza test, a media intensità e a otto cifre mille volte, per dar modo che anche le pressio-

Figura 3: schema elettrico e cablaggio dell'orologio per scacchi


8
EMBEDDED

Figura 4: diagramma di flusso dell'orologio per scacchi

9
EMBEDDED

Figura 5: una possibile soluzione per il contenitore dell'orologio

Figura 6: il prototipo sperimentale dell'orologio, durante le prove di funzionamento. Si noti il display a Led e la pulsantiera

10
EMBEDDED

ni più veloci e repentine siano prese in consi- co" e "secondi_nero", alle linee 5 e 6 dello sketch. Si
derazione. Diciamo che si tratta di un routine di sistemino i pezzi sulla scacchiera, sincerandosi che la
polling estremamente frequente. Il loop ha una casella di colore bianco si trovi alla destra di cia-
durata, dunque, di un secondo; scun giocatore. Quindi si posizioni l'orologio alla
• Linee 52÷55: se si preme il tasto collegato alla destra del giocatore Nero.
porta IO35 la variabile "tocca_al" assume il valo- Questa è una regola universale per il gioco degli scac-
re di "Nero" e il display si illumina normalmente; chi. Si accenda il circuito, dovrebbe apparire l'orario
• Linee 56÷59: se si preme il tasto collegato alla 15:00 in entrambi i quadranti.
porta IO34 la variabile "tocca_al" assume il va- Muove per primo il Bianco, quindi si avvii il conteggio
lore di "Bianco" e il display si illumina normal- premendo il pulsante dal lato del Nero. I secondi del
mente; giocatore con i pezzi bianchi cominceranno a decre-
• Linee 60÷63: se si preme il tasto collegato alla mentarsi.
porta IO33 la variabile "tocca_al" assume il va- Non appena egli effettua la mossa, può premere il suo
lore di "" (stringa nulla) e il display si illumina al pulsante. Il suo conteggio si arresta e inizia a decre-
minimo della sua forza. L'orologio si pone in sta- mentare l'orologio del Nero.
to di pausa; Si prosegua il gioco in questo modo. Se si ha l'esigenza
• Linee 66÷68: se la variabile "tocca_al" contiene di mettere la partita in pausa, per qualsiasi motivo, si
il valore "Bianco", i secondi di tale giocatore si prema il terzo pulsante. Il decremento si arresta e la
decrementano di una unità ogni secondo; luminosità delle cifre si abbassa drasticamente. Per ri-
• Linee 69÷71: se la variabile "tocca_al" contiene prendere il conteggio è sufficiente premere nuovamente
il valore "Nero", i secondi di tale giocatore si de- uno degli altri due pulsanti.
crementano di una unità ogni secondo; Man mano che la partita prosegue, il tempo si avvierà
• Linee 73÷79: infine la funzione sendCommand() inesorabilmente ad azzerarsi. Questo avviene quando
serve per inviare dati e comandi al display. Per uno dei due orologi segna "00:00". In questo caso il di-
maggiori informazioni sulla sua codifica si può splay si mette a lampeggiare e il giocatore a cui è sca-
consultare il relativo datasheet. duto il tempo a disposizione perde la partita.

>>>Leggi anche: Festeggiamo il capodanno con CONCLUSIONE


ESPertino Oggi un orologio per scacchi costa veramente poco.
Basta eseguire una rapida ricerca su Internet per sco-
UNA POSSIBILE CUSTODIA prire quanti prodotti, estremamente economici e belli, è
Per l'inscatolamento del dispositivo è possibile seguire possibile portare a casa.
la propria fantasia, cercando tra mille soluzioni diverse. Personalmente anch'io ho acquistato qualche orologio
Per una realizzazione semplice ed economica si può a un prezzo veramente basso. Ma il piacere di realizza-
adottare un normale contenitore di plastica, utilizzato re da soli un simile dispositivo (vedi relative prove di fun-
in elettronica. Da esso devono fuoriuscire solamente i zionamento in figura 6), sia dal punto di vista hardware
tre pulsanti e il display. Si può, ovviamente, predisporre che software non ha prezzo.
anche un interruttore per l'accensione e lo spegnimento Si ricordi di usare dei pulsanti molto robusti, in quanto
di ESPertino. la foga dei giocatori è altissima, specialmente quando il
La figura 5 propone una semplice soluzione, ben sa- tempo comincia a scarseggiare, e la forza con cui essi
pendo che gli amanti del lavoro con il legno potrebbero premono gli attuatori è davvero sovra umana, in attesa
proporre una realizzazione più elaborata ed elegante. che il gioco finisca per esaurimento dei secondi o per il
fatidico scacco matto.
E ADESSO, GIOCHIAMO A SCACCHI CON
L'OROLOGIO
Bene, verificato che il prototipo funzioni senza proble-
L’autore è a disposizione nei commenti per eventuali
mi, possiamo iniziare a giocare a scacchi con un nostro approfondimenti sul tema dell’Articolo. Di seguito il link per
amico, considerando che il tempo impostato corrispon- accedere direttamente all’articolo sul Blog e partecipare alla
de a quindici minuti a giocatore. discussione:
[Link]
Per modificare tale cadenza di gioco è necessario anda-
scacchi-con-espertino
re a cambiare il contenuto delle variabili "secondi_bian-

11
Il Robot R2D2 con
MC U
Arduino e OpenScad
di Raul Rosa

Non è la prima volta che si parla di OpenScad. Ormai sull'argomento è stato scritto abbastanza da
sapere che senza troppe difficoltà è possibile realizzare modelli 3D semplici e facilmente modificabili.
Tuttavia oggi si farà un passo in avanti, verso un progetto sicuramente più ambizioso. La stampa 3D
possiede tutte le caratteristiche per adattarsi perfettamente ai prototipi di svariati progetti. In questo
articolo verrà descritto passo passo come utilizzare OpenSCAD insieme ad Arduino per realizzare uno
dei più famosi robot nella storia del cinema: R2D2. Se ne analizzerà il design, il codice e i collegamenti
tra scheda e componenti. Il tutto per ottenere (a prezzi contenuti) un risultato finale notevole. I file da
stampare e i codici completi si trovano su Youmagine, sito nel quale sono disponibili molti altri progetti.

L'IDEA possono semplicemente ordinare dei motori passo pas-

I
l progetto prende forma a partire dal kit base della so e le ruote per stamparne la piattaforma, d'altronde
Pololu per robot, il quale consiste in una piattaforma “chi fa da sé fa per tre”.
con due motori passo passo collegati a due ruote La base mostrata in figura 2 si incastra sulla piattafor-
per far da base ai robot. Il rapporto qualità prezzo di ma dei motori perfettamente, il parallelepipedo è stato
questo pezzo è assolutamente competitivo (Figura 1). aggiunto per fissare da un lato la breadboard e dall'al-
In caso si preferisca utilizzare un'altra piattaforma sarà tro Arduino (verrà utilizzato Arduino Uno). I fori invece
sufficiente modificare il primo pezzo del nostro progetto fungono da collegamento tra i motori e il driver, nel caso
mantenendo tutti gli altri, magari si desidera avere un specifico si utilizza il ponte H L293D, ossia un integrato
R2D2 più veloce o con più aderenza sui terreni, non davvero economico e capace di controllare facilmente i
sarà un problema in quanto le possibili modifiche sono motori passo passo.
innumerevoli e tutte facilmente inseribili, tuttavia la scel- Le varie componenti, come si può notare in figura 3,
ta più comoda potrebbe essere quella di usare la piatta- sono state divise prima di essere stampate, questo per
forma della Pololu sostituendo in caso i motori o le ruo- poter spezzare le stampe e agevolare i collegamenti
te. Su internet è possibile trovare numerose alternative elettronici. Ogni singolo pezzo è generato a partire
e se non se ne dovesse trovare una soddisfacente si da pure forme geometriche semplici, tutti i partico-

Figura 1: A sinistra il progetto compilato su openSCAD di R2D2, a destra il robot completo di elettronica
12
MCU

senza fori per i sensori, il tutto per rende-


re più flessibile la realizzazione del vo-
stro robot. Può essere per esempio utile
stampare i pezzi senza fori per rendere
R2D2 più alto.
La testa del robot (Figura 5), oltre ai vari
dettagli, possiede uno spazio per un led,
è consigliabile impiegare un led RGB
ma è possibile utilizzarne uno più sem-
plice in caso risparmiare dei pin digitali
risulti necessario. La base della testa è
a croce per poter aggiungere un servo
motore e controllare il movimento della
testa. Una volta stampati tutti i pezzi con
la propria stampante oppure ordinati su
Figura 2: Il primo pezzo si incastra alla piattaforma Pololu e permette di fissa- 3DHubs basterà incollarli tra di loro con
re sia Arduino che la breadboard dell'attack, durante la fase di test è bene
limitarsi a del semplice adesivo, errare è
lari e le rifiniture si aggiungono a fine stampa per umano.
non rendere troppo complesso e pesante il design.
Il secondo pezzo è dotato di un foro che servirà per l’in- L’ELETTRONICA
terruttore on/off del nostro robot. Un'analisi dei vari componenti necessari, a partire
In figura 4 si può vedere un modulo che è dotato sia di dall'alimentazione: Nella ricerca dell'alimentazione si
un foro per il sensore ad ultrasuoni (per evitare spia- può andare piuttosto sul sicuro optando per una Power
cevoli impatti), sia di due fori per incastrare le braccia. bank, garantiscono una buona corrente in uscita e una
In questo progetto si utilizzerà un numero di sensori tali tensione costante, inoltre sono facilmente reperibili a
da poter sfruttare tutti i pin digitali di un Arduino Uno. prezzi contenuti. Nel progetto si impiega la stessa Po-
Non vi è alcun vincolo per il quale sia necessario utiliz- wer bank per Arduino e i vari componenti, tuttavia Ardu-
zare tutti i sensori, ma per ottenere il maggior spazio di ino soffre molto i picchi di corrente e rischia di reset-
manovra è di gran lunga più saggio attenersi a questa tarsi. Per ovviare al problema separare le alimentazioni
linea di lavoro. Su Youmagine si trovano le stesse parti è (almeno con questo assetto) una buona idea; in ogni
caso si consiglia di impiegare una Power bank
da 2A specie se si utilizza un'unica sorgente di
alimentazione (Figura 6). Per controllare il ro-
bot si utilizza un modulo bluetooth (Figura 7),
assai comodo e semplice da manovrare sia da
smartphone, grazie alle numerose app presenti
sullo store, che da pc tramite un’antenna blue-
tooth.

Nota bene: in fase di upload del codice è impor-


tante rimuoverlo perché può causare frequente-
mente errori, ciò è dovuto al fatto che il modulo
si sovrappone alla comunicazione seriale da
PC.

Per donare la parola al robot si utilizza uno


speaker (figura 8), controllato tramite PWM per-
mette a R2D2 di emettere suoni polifonici. Per
Figura 3: Il foro del pezzo mostrato in figura servirà per aggiungere un
quanto riguarda i suoni utilizzati nel progetto
interruttore per rendere più semplice accensione e spegnimento sono stati ricavati tutti da internet, ma non

13
MCU

ostacoli oppure impedire l'impatto con oggetti arrivati


improvvisamente di fronte (Figura 10).
Il led RGB nel progetto serve solo in quanto RB, infatti il
pin per il colore verde è mantenuto floating, alternando
il colore del led da rosso a blu a seconda della direzione
del robot (Figura 11).
Grazie al servo infine si è in grado di gestire la testa
controllando non solo la direzione ma anche l’angolo
di rotazione, è tuttavia necessario aggiungere un
contrappeso al servomotore, senza il servo ruota al
posto della testa, nel progetto è stata usata la stessa
Power bank come contrappeso (Figura 12).

IL CODICE
Il programma completo si trova su Youmagine in diverse
versioni, qui di sotto l'analisi della versione più comple-
Figura 4: Il modulo in figura consentirà di aggiungere il senso- ta.
re ad ultrasuoni e di incastrare le braccia
int cont=0; //variabile di utilità che analizzeremo in
possiedono la qualità di quelli del film. Per raggiun- seguito
gere un livello simile è necessario un modulo più com-
plesso, tuttavia per il momento è preferibile mantenere //variabili e dichiarazione pin per il sensore ad ultra-
il progetto il più semplice possibile. Sul lato tecnico, per suoni
const int trigPin = 2;
far riprodurre suoni mp3 si può utilizzare la Shield MP3
const int echoPin = 4;
per Arduino, esiste una versione più economica e com- int forward;
patta, il modulo WT020, tuttavia l'affidabilità e la sem- long duration;
plicità del funzionamento di quest'ultimo spesso sono long cm=100;
tutt’altro che buone, parla l’esperienza.
Il ponte H è assai comodo, permette di controllare i
int speakerPin = 3; // speaker collegato al pin digitale
singoli motori, la direzione e la velocità. Per regolare
3
quest’ultima infatti è sufficiente controllare tramite PWM const int motor1Pin = 7; // Collegamento al ponte H
il pin di accensione del motore sul ponte H (Figura 9). Il motore 1 (pin 2 del ponte H)
ponte H è dotato di 16 pin, il pin 16 corrisponde all’ali- const int motor2Pin = 8; // Collegamento al ponte H
mentazione mentre il pin 8 ha corrispondenza con l’a- motore 1(pin 7 del ponte H)
limentazione dei motori, quindi in caso si volesse dare const int enablePin = 5; // Pin di accensione del
primo motore
più di 5 V ai motori qualora questi possano tollerarlo,
const int enablePin2 = 6; // Pin di accensione del
non sarà impossibile essere più veloci, i pin 4,5,12 e 13 secondo motore
invece sono collegati a massa. I pin 3,6,4 e 11 invece const int motor21Pin = 9; // Collegamento al ponte H
servono per collegare i terminali dei motori, è importante motore 2 (pin 15 del ponte H)
fare attenzione perché collegarli in modo simmetrico è const int motor22Pin = 10; // Collegamento al ponte
l'unico modo per evitare rotazioni al posto dei movimenti H motore 2 (pin 10 del ponte H)
frontali. I pin 2,7,15 e 10 si impiegano per regolare la
int led=12;//led rosso rgb
direzione dei motori, settando il pin 2 al valore HIGH e il int led2=13;//led blu rgb
pin 7 al valore LOW ruota in un senso, invertendo i valo- int incomingByte; // una variabile per contenere il
ri invece ruota nell’altro, se per caso si desse lo stesso dato in arrivo da seriale
valore ad entrambi i pin il motore non si muoverebbe.
Gli ultimi pin rimasti sono i pin 1 e 9 che servono per #include <Servo.h>
accendere o spegnere i singoli motori.
Servo myservo; // dichiaro il mio servo motore
Come già detto in precedenza il sensore ad ultrasuoni
permette di sapere a che distanza si trova un oggetto di int pos = 1500; // posizione iniziale del servo motore
fronte al robot, controllando periodicamente per evitare

14
MCU

//movimento frontale
if (incomingByte == '1') { //1 sarà inviato dal nostro smartphone e interpretato come movimento frontale
forward++; //conto quante volte è stato dato il comando per muovermi in avanti
if(forward%40==0){ //ogni 40 volte che vado davanti, circa 5 cm controllo la distanza dell'ostacolo
pinMode(trigPin, OUTPUT); //emetto un impulso sonoro con il sensore
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//attendo il ritorno dell'impulso
pinMode(echoPin, INPUT);
//conto il tempo di andata e ritorno del suono
duration = pulseIn(echoPin, HIGH);
// converto il tempo in distanza percorsa in andata
cm = microsecondsToCentimeters(duration);}
if(cm>15){ // se l'ostacolo si trova a distanza maggiore di 15 cm
digitalWrite(led, LOW);//cambia colore del rgb
digitalWrite(led2, HIGH);
analogWrite(enablePin, 200); // accendi il motore 1
// imposta il movimento frontale del motore 1
digitalWrite(motor1Pin, LOW);
digitalWrite(motor2Pin, HIGH);
analogWrite(enablePin2, 200); //accendi il motore 2
//imposta il movimento frontale del motore 2
digitalWrite(motor21Pin, LOW);
digitalWrite(motor22Pin, HIGH);
delay(10); // lasciamo muovere di qualche mm il nostro robot
digitalWrite(enablePin, LOW); // spegniamo il motore 1
digitalWrite(enablePin2, LOW); // spegniamo il motore 2
}else // se l'ostacolo è a meno di 15 cm
{ pinMode(trigPin, OUTPUT); //controlla continuamente la distanza, potrebbe essere un ostacolo temporaneo
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm = microsecondsToCentimeters(duration);}
cont=0; //se l'ultimo comando era il movimento frontale azzero la variabile cont
}//retromarcia
else if (incomingByte == '2') {
digitalWrite(led, LOW); //cambio colore al led
digitalWrite(led2, HIGH);
analogWrite(enablePin, 200); // accenedo il motore 1
digitalWrite(motor1Pin, HIGH); //imposto il movimento all'indietro
digitalWrite(motor2Pin, LOW);
analogWrite(enablePin2, 200); //accendo il secondo motore
digitalWrite(motor21Pin, HIGH); // imposto il movimento all'indietro
digitalWrite(motor22Pin, LOW);

15
MCU

delay(10); //lascio andare indietro alcuni mm


digitalWrite(enablePin, LOW); // spengo il motore 1
digitalWrite(enablePin2, LOW); // spengo il motore 2
cont=0;
} //sinistra
else if (incomingByte == '3') {
digitalWrite(led2, LOW); //cambio colore al led
digitalWrite(led, HIGH);
digitalWrite(enablePin2, HIGH); // accendo solo il motore 2
digitalWrite(motor21Pin, LOW); // movimento frontale del motore 2
digitalWrite(motor22Pin, HIGH);
delay(10);
digitalWrite(enablePin2, LOW); //spengo il motore 2
cont=0;}
//destra
else if (incomingByte == '4') {
digitalWrite(led2, LOW);
digitalWrite(led, HIGH);
digitalWrite(enablePin, HIGH); // accendo il motore 1
digitalWrite(motor1Pin, LOW); //movimento frontale motore 1
digitalWrite(motor2Pin, HIGH);
delay(10);
digitalWrite(enablePin, LOW); //spengo il motore 1
cont=0;}
//triangolo (nell'app utilizzata 'Android BT Joystick' abbiamo i comandi classici della play station)
else if ((incomingByte == '9')&&(cont==0)) { //eseguo il comando del suono solo se cont==0 ovvero se prima non
ho emesso alcun suono
cont++; //incremento la variabile cont in modo che un eventuale ripetizione del comando
ohhh();//funzione per il suono
delay(500);}
//x
else if ((incomingByte == '7')&&(cont==0)) { //eseguo il suono solo se prima ho efettuato un movimento
cont++;
catcall();
delay(500);}
else if (incomingByte == '8') {//movimento della testa
pos=pos+35; //incremento l'angolo
if(pos<2000){[Link](pos);}
else{pos=2000;}
delay(10);
cont=0;}
else if (incomingByte == 'A') {
cont=0;
pos=pos-35; //decremento l'angolo della testa
if(pos>1000){[Link](pos);}
else{pos=1000;}
delay(10);
}}}

16
MCU

Figura 5: Vista dall'alto e dal basso del modulo per la testa

Il codice inizialmente presenta una serie di dichiarazio-


ni, sia per quanto riguarda la frequenza delle diverse void setup() {
note musicali da far suonare allo speaker, sia per quan- [Link](9600); // Aprire il collegamento seriale
to riguarda i pin digitali. Questi infatti si utilizzano tutti, il [Link](11); //dichiaro il collegamento del
pin 0 e 1 sono i pin RX e TX per comunicare serialmen- mio servo al pin 11
te col modulo Bluetooth, il pin 2 e 4 invece sono i pin pinMode(speakerPin, OUTPUT); // il pin dello spea-
TRIGGER ed ECHO per attivare l’impulso ad ultrasuoni ker sarà un pin di output
// tutti i pin che sto usando per il motore e i led sa-
con il sensore HC-SR04, si collega al pin 3 invece uno
ranno di output
dei connettori dello speaker, l’importante è che sia
pinMode(motor1Pin, OUTPUT);
collegato ad un pin in grado di utilizzare il PWM.
pinMode(motor2Pin, OUTPUT);
Il pin 5 lo si utilizza per il pin 1,2EN del ponte H, questo pinMode(enablePin, OUTPUT);
pin serve ad accendere o spegnere il motore a cui fa pinMode(motor21Pin, OUTPUT);
riferimento, ovvero quello collegato ai pin 1Y e 2Y del pinMode(motor22Pin, OUTPUT);
ponte H. pinMode(enablePin2, OUTPUT);
I pin 7 e 8 sono collegati ai pin logici del ponte H (1A e pinMode(led, OUTPUT);
2A), questi regolano la direzione del motore fintanto che pinMode(led2, OUTPUT);
hanno valore logico opposto, (High-Low o Low-High), // inizialmente il motore sarà spento
analogamente il pin 6 è collegato al pin 3,4EN del digitalWrite(enablePin, LOW);
ponte H per accendere o spegnere il secondo motore, digitalWrite(enablePin2, LOW);
la cui direzione è regolata dai pin 9 e 10 di Arduino.
r2D2(); //suono di accensione
Al pin 11 è collegato il servomotore con la funzione
delay(500);
[Link](11), mentre i pin 12 e 13 sono rispet-
}
tivamente i due pin del led RGB che regolano l’inten-
sità del colore rosso e blu, nel progetto è utilizzato un
led RGB a catodo comune, è possibile alternativamente Nel void setup() si specifica la direzionalità dei pin di-
utilizzare un led ad anodo comune collegando il nodo gitali, praticamente sono tutti pin di scrittura (output),
comune a VCC, senza dimenticarsi le resistenze di al- la funzione r2d2() viene dichiarata in fondo al codice e
meno un centinaio di ohm. serve per far emettere un suono allo speaker all’accen-

17
MCU

Figura 6: Schema dell'elettronica del nostro progetto

sione del droide; si analizza ora il void loop().

void loop() { if ([Link]() > 0) { // legge l'ulti-


mo bit in arrivo dal modulo bluetooth incomingByte =
[Link]();
//continua sotto...

Figura 8: Lo speaker verrà controllato dal PWM di arduino,


permettendoci di generare suoni polifonici

Il core del programma è un ciclo continuo che controlla


se il collegamento seriale è attivo, a seconda dei vari
valori ricevuti (1,2,3,4,9,7,8,A nel progetto) si controlla-
no la direzione del robot, i movimenti della testa ed i
Figura 7: Modulo bluetooth HC05, ci consentirà la trasmissio-
suoni emessi dallo speaker.
ne seriale con il nostro smartphone Il controllo della distanza dagli ostacoli posti di fronte

18
MCU

Figura 9: il ponte H ci permetterà di controllare singolarmente ogni motore

Figura 10: Sensore di prossimità ad ultrasuoni, ci consentirà


di evitare gli impatti frontali
Figura 12: Il servo motore ci consente un controllo completo
della rotazione della testa

di movimento frontale. Se si controllasse la distanza


ad ogni comando ricevuto, il movimento del robot
rallenterebbe soprattutto nel caso in cui la distanza
dell'ostacolo di fronte risultasse di circa due metri,
questo perchè il tempo impiegato dal suono per per-
correre lo spazio inizia a diventare confrontabile con il
tempo di ogni istruzione da eseguire. La variabile cm
contiene questa distanza in centimetri, quando questa
variabile è inferiore a 15 i motori si fermano in caso di
Figura 11: Il led RGB ci permetterà di generare le tipiche luci movimento frontale, ma il controllo della distanza vie-
rosse e blu di R2D2 ne eseguito ad ogni comando di movimento frontale,
questo perché trattando distanze così brevi il flusso
è possibile grazie alla variabile forward, è impiegata del programma non si rallenta. Muoversi a sinistra o
esclusivamente per contare quante volte è stato rice- destra corrisponde semplicemente ad accendere o
vuto da seriale il valore 1, corrispondente al movimento spegnere uno dei motori, mentre il movimento frontale
frontale, la distanza viene controllata ogni 40 volte che o in retromarcia equivale a un'inversione dei pin logici
si riceve questo valore, corrispondente a circa 10 cm del ponte H. La variabile cont che compare nei diversi

19
MCU

long microsecondsToCentimeters(long microsecon-


ds)
{
// il suono percorre un centimetro in 29 microsecondi
// la distanza percorsa per cui sono i microsecondi
diviso 29, dividiamo per due perchè il tempo è sia
andata che ritorno
return microseconds / 29 / 2;
}

ALIMENTAZIONE
Si osservino infine i collegamenti o quantomeno quelli
meno scontati, per esempio come si collega una po-
wer bank alla breadboard? La risposta è più semplice
Figura 13: Cavo USB tagliato
di quanto si pensi, è sufficiente infatti tagliare il connet-
tore USB della ricarica (Figura 13). Si utilizzano soltan-
"if" serve per evitare che una pressione prolungata di un to due dei quattro cavi mostrati in figura, quello rosso
comando relativo ad un suono blocchi completamente il è l’alimentazione positiva, quello nero corrisponde alla
flusso di comunicazione, per cui viene emesso un solo massa, invece di collegarli direttamente alla breadbo-
suono e subito dopo lo speaker verrà “disattivato” fino ard si aggiunge un interruttore in modo da regola-
a quando non si selezionerà uno qualunque degli altri re l’accensione del robot esternamente senza di
comandi. Il servomotore è controllato tramite myser- volta in volta rimuovere la testa. Il circuito interno
[Link](pos), la variabile pos risulta alla Power bank garantisce una tensione costante,
proporzionale all’angolo in cui si desidera posizionare sufficiente al funzionamento di tutta l’elettronica e una
il servo, i valori della variabile pos vanno da 1000 durata notevole, sicuramente superiore alle batterie da
a 2000, per alcuni servo tuttavia è possibile applicare 9V ricaricabili.
valori da 700 a 2300. Le funzioni relative ai suoni come
r2D2() sono frutto di una ricerca su internet ma possono CONSIDERAZIONI E MIGLIORAMENTI
essere create se si conoscono note e durata. Il robot si comporta egregiamente sulle superfici li-
sce, fa molta più fatica su superfici ruvide, quindi l’uso
void r2D2(){
che si vuole fare ne determina le specifiche. Esistono
beep(speakerPin, note_A7,100); //A
beep(speakerPin, note_G7,100); //G svariati kit con rapporti diversi per i motori. Il servo mo-
beep(speakerPin, note_E7,100); //E tore che controlla la testa si può sostituire con un
beep(speakerPin, note_C7,100); //C motore passo passo permettendo una rotazione com-
beep(speakerPin, note_D7,100); //D pleta, questo imporrebbe maggiori cure e attenzione ai
beep(speakerPin, note_B7,100); //B collegamenti dei led i cui cavi rischierebbero di attorci-
beep(speakerPin, note_F7,100); //F gliarsi. Anche la posizione dello speaker non è di poco
beep(speakerPin, note_C8,100); //C conto, deve essere il più vicino possibile al telaio altri-
beep(speakerPin, note_A7,100); //A menti il suono risulterebbe troppo basso. In ogni caso
beep(speakerPin, note_G7,100); //G questa resta una guida, solo l’esperienza permette di
beep(speakerPin, note_E7,100); //E ottimizzare sia il codice che l’elettronica, a questo
beep(speakerPin, note_C7,100); //C
punto non rimane che stampare, aspettando in un futuro
beep(speakerPin, note_D7,100); //D
non così lontano un progetto su OpenSCAD del nuovo
beep(speakerPin, note_B7,100); //B
BB8, per i più curiosi sempre qui potete trovare il video
beep(speakerPin, note_F7,100); //F
beep(speakerPin, note_C8,100); //C del robot in funzione.
}
L’autore è a disposizione nei commenti per eventuali
approfondimenti sul tema dell’Articolo. Di seguito il link per
La funzione MicrosecondsToCentimeters è una sem-
accedere direttamente all’articolo sul Blog e partecipare alla
plice funzione matematica che attraverso la velocità del discussione:
suono e il tempo impiegato da esso a ritornare sul robot, [Link]
calcola lo spazio percorso.

20
Programmiamo
EMBEDDED ESPertino con
MicroPython
di Stefano Lovati

Proseguiamo la nostra panoramica sui diversi ambienti di sviluppo per ESPertino occupandoci in que-
sto articolo di MicroPython, l’implementazione della versione 3.x del noto linguaggio di scripting rivolta
ai microcontrollori e ai sistemi embedded. Anche questa volta ESPertino non finirà di stupirci, offrendo
un modo alternativo ma molto efficiente e istruttivo per creare nuove interessanti applicazioni.

INTRODUZIONE con precisione selezionabile a piacere, comprensione

M
icroPython è un’implementazione lineare ed di lista, funzioni generatore, gestione delle eccezioni,
efficiente della versione 3.x del noto linguag- e altro ancora. Inoltre, MicroPython è estremamente
gio di scripting Python. Il sistema include un compatto: per eseguire il suo codice sono infatti suf-
sottoinsieme delle librerie standard del linguaggio, ed ficienti 256 Kb di memoria flash e 16 Kb di memoria
è ottimizzato per essere eseguito su microcontrolli, o RAM. L’obiettivo dichiarato di MicroPython è quello di
in generale su sistemi embedded in cui, come noto, le raggiungere il più elevato grado di compatibilità con la
risorse a disposizione sono limitate e devono pertanto versione standard di Python, in modo tale che sia pos-
essere utilizzate in modo ottimale. Sebbene si tratti di sibile trasferire sul microcontrollore oppure sul sistema
un sistema di sviluppo essenziale, MicroPython inclu- embedded lo stesso codice sviluppato in ambiente de-
de diverse funzionalità avanzate del linguaggio, qua- sktop. L'interfaccia utente di MicroPython è rappresen-
li: prompt interattivo (shell dei comandi), numeri interi tata da un prompt interattivo denominato REPL (acro-

Figura 1: il prompt (REPL) di Micropython in esecuzione su ESPertino

21
EMBEDDED

Figura 9: il ponte H ci permetterà di controllare singolarmente ogni motore

nimo di Read-Eval-Print Loop). In Figura 1 possiamo con frequenza giornaliera viene reso disponibile per il
osservare una screenshot del prompt di MicroPython, download all’indirizzo [4]. Di seguito riportiamo i passi
nella versione per i sistemi equipaggiati con modulo necessari per procedere con l’installazione di MicroPy-
Wroom-ESP-32, e quindi anche ESPertino. Si tratta in thon su ESPertino.
sostanza di una shell interattiva molto semplice, in gra-
do di ricevere gli input dell’utente, processarli, e resti- Step 1
tuire il risultato dell’operazione. REPL permette sia di
eseguire i comandi (o script) immediatamente, sia di Scaricate la versione più recente (latest) di firmware Mi-
importare ed eseguire script dal filesystem. La shell è croPython per ESP32 cliccando sul link [4]. Il file avrà un
inoltre provvista di funzionalità avanzate quali history, nome del tipo: esp32-20170729-v1.9.1-391-g06168c92.
completamento automatico con il tasto tab, autoinden- Si noti la presenza della data all’interno del nome (in
tazione, e copia-incolla. questo caso si tratta del file binario generato il 29 luglio
Oltre ad implementare una selezione delle librerie di 2017). Il nome di questo file cambierà ogni giorno, o in
base del linguaggio, MicroPython include dei moduli corrispondenza di ogni nuova versione prodotta. Indi-
specifici per consentire l’accesso alle risorse hardware chiamo brevemente con NomeFile il nome di questo file
di basso livello, come ad esempio il modulo "machine", binario da programmare sulla scheda ESPertino.
di cui ci occuperemo tra poco, presentando qualche
esempio applicativo del linguaggio. Step 2

MICROPYTHON PER ESPERTINO Per la programmazione utilizzeremo lo strumento esp-


La board ESPertino integra il modulo ESP32 prodotto [Link], incluso all'interno dell’estensione dell’IDE Ar-
da Espressif Systems, una delle tante piattaforme har- duino per la scheda ESPertino (diamo per scontato che
dware supportate dal progetto MicroPython. Il progetto, l'abbiate già installato sulla vostra macchina). In partico-
interamente open source, è disponibile su GitHub all’in- lare, potete trovare il file seguendo il percorso di instal-
dirizzo [2]. Questo repository non è altro che un clone lazione di Arduino:
del repository ufficiale, al quale è stato aggiunto un nuo-
vo branch per gestire il microcontrollore ESP32, il tutto
..\Arduino\hardware\espressif\esp32\tools\esptool.
sotto licenza MIT. In questo articolo non eseguiremo la
exe
compilazione e generazione dell'eseguibile MicroPy-
thon, ma sceglieremo un’altra strada, più semplice e
immediata. Scaricheremo infatti direttamente il file bina- Questo file non è altro che il prodotto della compilazio-
rio di MicroPython per la scheda ESP32/ESPertino, che ne, in ambiente Windows, dello script Python esptool.

22
EMBEDDED

Figura 7: Modulo bluetooth HC05, ci consentirà la trasmissione seriale con il nostro smartphone

py, incluso nella stessa cartella dell’eseguibile. Copia- terminata la cancellazione, procediamo con la program-
mo ora il binario scaricato (NomeFile) nella stessa car- mazione, eseguita tramite il seguente comando:
tella in cui è presente [Link].
[Link] --chip esp32 --port "COMxx --baud
Step 3 921600 --before "default_reset" --after "hard_reset"
write_flash -z --flash_mode "dio" --flash_freq "40m"
Apriamo una shell comandi, e tramite il comando “cd” --flash_size detect 0x0 NomeFile
accediamo alla cartella indicata nello step precedente.
La programmazione si suddivide in due fasi: cancella- La programmazione è così completata. Possiamo a
zione totale della flash programma, e scaricamento del questo punto collegarci ad ESPertino tramite un pro-
binario MicroPython. Il comando da impartire nella shell gramma come teraterm o putty. L’output che potrete os-
per eseguire la cancellazione della flash è il seguente servare è visibile in Figura 2.
(sostituite COMxx con il nome della vostra porta seriale IL TOOL AMPY
utilizzata, ad esempio COM14): Un tool che può essere molto utile nella fase di sviluppo
è sicuramente ampy [5], uno strumento che consente
[Link] --chip esp32 --port "COMxx" --baud
di interagire con MicroPython tramite la normale linea
921600 --before "default_reset" --after "hard_reset"
seriale. E' possibile elencare, trasferire da/verso la bo-
erase_flash
ard, ed eseguire script impartendo dei semplici comandi
da una comune finestra comandi del PC. L'installazio-
> ne è molto semplice: basta avere già installato sul PC

23
EMBEDDED

Python, e seguire le istruzioni indicate in [6]. Durante


lo sviluppo, possiamo creare gli script in una cartella a Pin e GPIO
piacimento sul PC, e poi trasferirli sulla scheda ESPer-
tino tramite il comando seguente (sostituire COMxx con La gestione dei segnali di ingresso e uscita (insieme ad
il nome della porta seriale utilizzata): altre funzionalità che vedremo poi) è affidata al modu-
lo machine. Lo script seguente configura il pin GPIO5
ampy -p COMxx put [Link] (led rosso di ESPertino) come segnale di uscita, e il pin
GPIO0 come segnale di ingresso. Vengono mostrate
diverse modalità di definizione dei pin, e le funzioni uti-
Per elencare gli script presenti sulla board si utilizza il lizzabili per leggerne o modificarne il valore.
comando:

from machine import Pin


ampy -p COMxx ls

# configura il pin GPIO5 (led rosso di ESPertino)


Il comando per eseguire direttamente uno script (anche come segnale di uscita
senza averlo trasferito sulla board) è il seguente: p5 = Pin(5, [Link])

# imposta p5 al livello alto (il led dovrebbe essere


ampy -p COMxx run [Link]
spento)
[Link](1)
Ricordiamo che per eseguire uno script MicroPython su
ESPertino (in precedenza trasferito tramite il comando # imposta p5 al livello basso (il led dovrebbe essere
"put"), è sufficiente digitare dalla shell REPL: acceso)
[Link](0)

import [Link]
# modalità alternativa di definizione del pin, asse-
gnando direttamente
Il comando per elencare gli script presenti su ESPerti- # il valore iniziale in fase di creazione dell'oggetto
no (senza utilizzare ampy, ma agendo direttamente sul p5 = Pin(5, [Link], value=1) # imposta il valore del
prompt della board) è il seguente: pin in fase di creazione

# configura il pin GPIO0 come segnale di ingresso


import os
p0 = Pin(5, [Link])
[Link]()

# questo comando è equivalente al precedente (il


ESEMPI PRATICI default nella creazione
Vediamo ora qualche esempio pratico di applicazione di # di un pin è INPUT), ma è meno leggibile del prece-
MicroPython, focalizzandoci in particolare sulle funzio- dente
nalità più legate all'hardware di ESPertino. Consigliamo p0 = Pin(5)
inoltre di consultare la documentazione di MicroPython
(i link sono alla fine dell'articolo), in particolare le funzio- # possiamo anche specificare se abilitare la resisten-
ni esportate dai vari moduli. Una caratteristica notevole za interna,
dell'editor di REPL è l'autocompletamento, attivabile # scegliendo tra PULL_UP, PULL_DOWN, oppure
tramite pressione del tasto TAB (se ad esempio volete OPEN_DRAIN
scoprire tutte le funzioni esportate dal modulo machine, p0 = Pin(0, [Link], Pin.PULL_UP) # resistenza di
vi basterà premere TAB dopo aver digitato 'machine.'. pull-up interna abilitata
Se avete bisogno di un rapido aiuto, potete visualizza-
re l'help integrato in MicroPython, richiamabile tramite il # visualizza il valore corrente del pin GPIO0
comando (mi raccomando le parantesi, fondamentali in print([Link]())
Python): help().

24
EMBEDDED

PWM ADC, I2C, e SPI

Il PWM, che può essere configurato sui diversi pin di La conversione analogico-digitale (ADC) è disponibile
GPIO, è definito dalla frequenza (uguale per tutti i ca- sui soli pin di ESPertino che la supportano, come ad
nali e selezionabile tra 0 e 78125 Hz) e dal duty cycle esempio il pin GPIO36. Fate sempre riferimento alla do-
(compreso tra 0 e 1023, corrispondente a un duty cycle cumentazione tecnica della scheda e al datasheet del
del 100%). Ecco un esempio di utilizzo del PWM (anche modulo ESP32, per accertarvi che il pin richiesto sia di-
questo incluso nel modulo machine): sponibile sul connettore della board.

from machine import Pin, PWM Nel listato di esempio che segue viene abilitato l'ADC
proprio sul pin GPIO36 (canale 0 del primo ADC dispo-
#creo un istanza dell'oggetto PWM sul GPIO5 nibile sul modulo ESP32), e viene eseguita una lettura
pwm5 = PWM(Pin(5)) dal convertitore. I pin dell'ADC, a livello elettrico, non
sopportano tensioni superiori a 1V, quindi prestate la
#leggo il valore corrente di frequenza
print('valore attuale della frequenza: ', [Link]()) massima attenzione e consultate il datasheet prima di
applicare dei segnali elettrici in ingresso a questi pin. Il
#imposto la frequenza al valore di 1 kHz valore letto dall'ADC è compreso tra 0 e 1024.
[Link](1000)
Altrettanto semplice ed immediata è la configurazione
#leggo il valore corrente di duty cycle
del bus I2C: basta infatti selezionare i due pin di I/O
[Link](200)
necessari per gestire i segnali SCL e SDA, e la velocità
#leggo il valore corrente di duty cycle (frequenza) con cui si intende operare sul bus.
print('valore attuale di duty cycle: ', [Link]())
[Link]() Altrettanto semplici sono le operazioni di lettura e scrit-
tura da/verso un dispositivo I2C collegato al bus, come
#imposto la ora la frequenza a diversi valori compresi
riportato nel listato di esempio seguente.
tra 2 e 15 Hz
[Link](2)
[Link](5) Per quanto riguarda l'interfaccia SPI, il porting di Mi-
[Link](10) croPython per ESP32/ESPertino mette a disposizione
[Link](15) dello sviluppatore due diversi driver:

#disattivo il PWM sul pin GPIO5


• un driver SPI implementato via hardwa-
[Link]()
re nel modulo ESP32, con due cana-
#modo alternativo di configurazione del PWM li distinti: SPI1 e SPI2. SPI1 utilizza, ri-
pwm0 = PWM(Pin(0), freq=500, duty=512) spettivamente, i pin 6, 8, e 7 per i segnali
SCK, MOSI, e MISO. SPI2 invece utilizza,
Lo script seguente, invece, definisce una funzione per gli stessi segnali, i pin 14, 13, e 12.
(pulse) che permette di regolare l'accensione di un led Il chip select (CS) deve invece essere as-
agendo sul duty cycle del segnale pwm. Si ottiene in segnato dall'utilizzatore a un qualunque pin
questo modo un effetto pulsante. non utilizzato. Si tenga presente che ESPer-
tino utilizza i pin 12 e 14 per comandare i
import machine, time, math due relè integrati sulla scheda: ne consegue
che quest'ultima funzionalità sarà mutua-
led_rosso = [Link]([Link](5),
mente esclusiva con quella dell'SPI2;
freq=1000)

def pulse(l, t): • un driver SPI realizzato interamente via


for i in range(20): software (tramite la tecnica del bit-ban-
[Link](int([Link](i / 10 * [Link]) * 500 + 500))
time.sleep_ms(t) ging), che utilizza i pin specificati dall'utente
nella fase di creazione dell 'interfaccia (si
for i in range(10): veda il listato seguente).
pulse(led_rosso, 200)

25
EMBEDDED

OneWire e DHT
from machine import Pin, ADC, I2C, SPI
Il driver OneWire è anch'esso implementato a livello
############
software, e può essere configurato su un qualunque
# Test ADC #
############ pin. Il listato seguente, ad esempio, crea un istanza del
bus OneWire sul pin 0, esegue una scansione del bus
# abilito l'ADC sul pin 36 e alcune operazioni di lettura e scrittura. Il driver DHT
adc_36 = ADC(Pin(36)) può essere considerato un caso particolare del driver
# eseguo una lettura dall'ADC e stampo il valore
OneWire, sviluppato espressamente per la gestione dei
print('valore ADC=', adc_36.read())
sensori di temperatura e umidità DHT11/22. Anche in
############ questo caso l'operatività del modulo è molto semplice:
# Test I2C # una volta creata l'istanza del sensore, è sufficiente atti-
############ vare il processo di misura (tramite una chiamata al me-
todo measure), e successivamente eseguire la lettura
# creo un istanza del bus I2C sui pin 7 (SCL) e 8
di temperatura e umidità, come indicato nel seguente
(SDA), velocità=100000 kbps
listato.
i2c = I2C(scl=Pin(7), sda=Pin(8), freq=100000)
# leggo 4 byte dal dispositivo slave con indirizzo 3Ah
[Link](0x3a, 4) from machine import Pin
# scrivo il pattern '12' sul dispositivo slave con indiriz- import onewire
zo 3Ah import dht
[Link](0x3a, '12')
# creo un array di 10 byte (questo è Python puro!) ################
buf = bytearray(10) # TEST ONEWIRE #
# scrivo l'array sul dispositivo con indirizzo 3Ah ################
[Link](0x3a, buf)
# creo un'interfaccia OneWire sul pin 2
############ ow = [Link](Pin(2))
# Test SPI # # eseguo la scansione del bus
############ [Link]()
# eseguo un reset del bus
# NOTE GENERALI: [Link]()
# per "polarità" si intende lo stato idle del segnale # leggo un byte
SCK [Link]()
# phase=0 significa campionare sul primo fronte di # scrivo un byte sul bus
[Link](0x12)
SCK
# phase=1 significa campionare sul secondo fronte
############
di SCK
# TEST DHT #
############
# esempio di utilizzo dell'interfaccia hardware SPI 1
hard_spi = SPI(1, baudrate=80000000, polarity=0, # creo un'istanza del sensore DHT11 sul pin 2
phase=0) d = dht.DHT11(Pin(2))
# attivo il processo di misura
# esempio di utilizzo di un'interfaccia SPI software [Link]()
sui pin 0, 2, e 4 # lettura della temperatura (°C)
soft_spi = SPI(-1, baudrate=100000, polarity=1, pha- print('temperatura (gradi Celsius)=', [Link]())
se=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4)) # lettura dell'umidità (%RH)
# imposto la velocità print('umidita\' (%RH)=', [Link]())
soft_spi.init(baudrate=200000)
# leggo 10 byte dal segnale MISO # creo un'istanza del sensore DHT22 sul pin 4
soft_spi.read(10) d = dht.DHT22(Pin(4))
# leggo 10 byte e contemporaneamente scrivo 0xFF # attivo il processo di misura
sul segnale MOSI [Link]()
soft_spi.read(10, 0xff) # lettura della temperatura (°C)
# scrivo 5 byte sul segnale MOSI (si noti il formato print('temperatura (gradi Celsius)=', [Link]())
binario) # lettura dell'umidità (% RH)
soft_spi.write(b'12345') print('umidita\' (%RH)=', [Link]())

26
EMBEDDED

Network e WiFi HTTP Server

Il collegamento a una rete WiFi è reso disponibile dal Una volta connessi a una rete WiFi, è relativamente
modulo network. Questo modulo esporta vari metodi, semplice mettere in piedi un semplice server HTTP scri-
tra cui: WLAN(), per creare un'interfaccia di rete in mo- vendo una manciata di righe di codice. Un esempio è
dalità Station, oppure Access Point, scan() per ese- fornito dallo script seguente: la connessione alla rete
guire una scansione degli access point, e connect() per WiFi viene eseguita esattamente come nel caso pre-
collegarsi alla rete WiFi prescelta. Una volta instaurata cedente, e viene visualizzato su linea seriale l'indirizzo
la connessione WiFi, è possibile creare e utilizzare dei IP ottenuto dal server DHCP della rete stessa. Colle-
comuni socket TCP/UDP utilizzando i metodi esportati gandosi con un browser a tale indirizzo (digitando, ad
dal modulo socket. Nell'esempio seguente sono indi- esempio, [Link] nella barra degli indirizzi), ver-
cate entrambe le modalità di creazione di un'interfaccia rà visualizzata una pagina web contenente lo stato di
di rete. buona parte dei pin di I/O di ESPertino (Figura 3).

import network
import network, ubinascii # ubinascii è un modulo
Python per la conversione tra vari formati ###############################
# COLLEGAMENTO ALLA RETE WIFI #
# creo un'interfaccia di rete in modalita' STATION
###############################
wlan = [Link](network.STA_IF)
# attivo l'interfaccia
# creo un'interfaccia di rete in modalita' STATION
[Link](True)
wlan = [Link](network.STA_IF)
# eseguo una scansione alla ricerca degli access
point # attivo l'interfaccia
[Link]() [Link](True)
# verifico se la stazione e' connessa a un access # eseguo la connessione a un access point, fornendo
point le credenziali
[Link]() # (sostituite SSID e password con quelli della vostra
# eseguo la connessione a un access point, fornendo rete WiFi)
le credenziali [Link]('SSID', 'password')
# (sostituite SSID e password con quelli della vostra # lettura di IP/netmask/gateway/DNS dell'interfaccia
rete WiFi) [Link]()
[Link]('SSID', 'password')
# verifico nuovamente se la stazione e' connessa a
##########################################
un access point
#######
[Link]()
# CREAZIONE PAGINA DI "LANDING" DEL SER-
# lettura MAC Address dell'interfaccia e conversione
in esadecimale VER HTTP #
[Link]([Link]('mac')) ##########################################
# lettura di IP/netmask/gateway/DNS dell'interfaccia #######
[Link]()
import machine
# creo un'interfaccia di rete in modalita' ACCESS pins = [[Link](i, [Link]) for i in (0, 2, 4,
POINT 5, 12, 13, 14, 15, 16, 17, 18, 19, 23, 27)]
ap = [Link](network.AP_IF) html = """<!DOCTYPE html>
# attivo l'interfaccia <html>
# attenzione: state attivando un access point privo di
<head> <title>Stato dei pin di ESPertino</title> </
protezione sugli accessi!
head>
[Link](True)
<body> <h1>Stato dei pin di ESPertino</h1>
# imposto l'SSID dell'access point
[Link](essid='ESPertino-AP') <table border="1"> <tr><th>Pin</th><th>Valore</
# provate ora a fare una scansione delle reti WiFi th></tr> %s </table>
con un PC o uno smartphone! </body>
</html>

27
EMBEDDED

"""
##########################
#####################
# TEST INTERRUPT ESTERNI #
# CODICE DEL SERVER # ##########################
#####################
from machine import Pin
import socket
addr = [Link]('[Link]', 80)[0][-1] # definiamo anzitutto la funzione "callback" (la ISR)
s = [Link]() def callback(p):
[Link](addr) print('lo stato del pin e\' cambiato', p)
[Link](1)
print('listening on', addr) # definiamo ora i pin 0 e 2 come ingressi
p0 = Pin(0, [Link])
while True:
p2 = Pin(2, [Link])
cl, addr = [Link]()
print('client connected from', addr)
# associamo la "callback" a ogni pin, specificando su
cl_file = [Link]('rwb', 0)
quale fronte deve essere attivata
while True: [Link](trigger=Pin.IRQ_FALLING, handler=callback)
line = cl_file.readline() [Link](trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING,
if not line or line == b'\r\n': handler=callback)
break
rows = ['<tr><td>%s</td><td>%d</td></tr>' %
(str(p), [Link]()) for p in pins]
response = html % '\n'.join(rows) CONCLUSIONI
[Link](response) ESPertino dimostra ancora una volta di essere una
[Link]() scheda per la prototipazione rapida a tutto campo, con
possibilità di eseguire script MicroPython in modo sem-
plice e accessibile a tutti. Il mio consiglio ai lettori è quel-
Interrupt esterni e ... altro ancora! lo di approfondire l'argomento leggendo l'ampia docu-
mentazione presente online, e provando a eseguire (per
Una caratteristica offerta da MicroPython, particolar- poi modificare o riscrivere) gli script proposti.
mente utile nei sistemi embedded, è sicuramente la ge-
stione degli interrupt esterni. E' infatti possibile confi- RIFERIMENTI E LINK SUL WEB
gurare un pin di I/O in modo tale che generi un interrupt [1] [Link]
ad ogni variazione del suo stato. La routine di risposta
all'interrupt (ISR) viene definita tramite una callback as- [2] [Link]
sociata alla variazione di stato del pin, con un solo para-
metro indicante il numero di pin utilizzato. Un esempio [3] [Link]
è indicato nel listato seguente, in cui vengono gestiti gli
interrupt associati ai pin di I/O 0 e 2 (sul fronte di discesa [4] [Link]
per il primo, e su entrambi i fronti per il secondo).
[5] [Link]
Concludiamo qui la panoramica delle funzionalità di
MicroPython, anche se ve ne sono molte altre qui non [6] [Link]
incluse per esigenze di spazio: gestione del modo deep- files-and-run-code/install-ampy
sleep, timer, gestione di UART, DAC, Touchpad, e altro
ancora. Per maggiori approfondimenti si può fare riferi-
L’autore è a disposizione nei commenti per eventuali
mento alla documentazione disponibile online. approfondimenti sul tema dell’Articolo. Di seguito il link per
accedere direttamente all’articolo sul Blog e partecipare alla
>>> Leggi anche: Colleghiamo un display OLED ad discussione:
[Link]
ESPertino
micropython

28
Datemi una PWM e tre
MC U sensori e vi controllerò
un motore
di Cristiano Scavongelli

Se c’è una cosa che ti lascia in eredità il corso di elettromagnetismo è che i campi magnetici sono an-
tipatici. Quelli elettrici sono facili: basta tirare un po’ di freccette e grosso modo si capisce che forma
avrà il campo totale o da che parte si muoveranno le cariche. I campi magnetici tirano dentro i rotori e
la regola della mano destra; devi iniziare a ragionare in termini di vettori entranti o uscenti dalla pagina
e via di questo passo. Ma la presenza dei rotori nelle equazioni di campo magnetico, oltre a introdurre
complessità, introduce anche possibilità. Costruire campi magnetici che ruotano è facile: basta saper
giocare con le correnti. E con i campi magnetici che ruotano ci si possono fare tante cose, dalla riso-
nanza magnetica ai motori elettrici. Come questo sia possibile lo scoprirete in quest’articolo.

LE MAGIE DEI CAMPI MAGNETICI limatura di ferro e di poggiarci sotto (mi raccomando,

T
utti quanti, ad un certo punto della vita, ci siamo bambini, non sopra, sennò fate un macello!) una ca-
trovati a giocare con le calamite. Ci sono i giochi- lamita. Magicamente dovrebbero formarsi le linee di
ni semplici, quelli che fai avvicinando due calami- campo magnetico. Anche se l’esperimento non dovesse
te per capire qual è la distanza minima dopo la quale ini- funzionare, rimane intatto lo stupore davanti alle piccole
ziano ad attrarsi, o tenendo una calamita sospesa sopra particelle di ferro che si muovono da sole, attratte dalla
ad un qualche oggetto metallico e facendola scendere calamita (per non parlare delle scintille che sprizzavano
pian piano, fino a che, ad un certo punto, se l’oggetto dalla mola che avete usato per farla, quella limatura!).
è abbastanza leggero… Magia! L’oggetto salta su e si Anni dopo, di solito dalle parti del liceo, ti presentano un
va ad attaccare alla calamita! Oppure prendi calamite concetto simile, che è quello di elettromagnete. Prende-
di poli opposti e ne usi una per respingere l’altra: le av- te del filo percorso da corrente e avvolgetelo attorno ad
vicini, forzandole a stare una contro l’altra, anche se le un bullone (Figura 1): il tutto si comporterà come una
senti chiaramente tremarti in mano e tentare di sfuggirti calamita! E se scambiate il verso della corrente (basta
dalle dita. I più arditi tentano esperimenti più sofistica- scambiare i morsetti della batteria), la calamita cambia
ti, tipo quelli che prevedono di cospargere un foglio di polarità! Sarà solo all’università che ti spiegheranno i
solenoidi, la regola della mano destra e il fatto che se
non ci metti il bullone per aumentare la µ il campo è
troppo basso per servire a qualcosa, ed è solo lì che
capirai come funziona un elettromagnete. Ma non ci
vuole una comprensione così profonda per iniziare a
pensare un po’. Muovete una calamita accanto all’ago
di una bussola e quello seguirà fedelmente la calamita.
Spostate bruscamente la calamita da un capo all’altro
della bussola e l’ago ruoterà vorticosamente per rialli-
nearsi alla calamita. Ma se attaccassi un’asse all’ago
della calamita, quello inizierebbe a ruotare, tipo motore?
In effetti sì. E in effetti, spostare la calamita da un lato
all’altro della bussola equivale a invertire la polarità del
campo magnetico esterno in cui è immerso l’ago. Quin-
di, se posso generare un campo magnetico pom-
Figura 1: L'elettromagnete. pando corrente in un solenoide, e se per invertirlo

29
MCU

Figura 2 - Un semplice motore elettrico.

Figura 3: Tre solenoidi e un campo magnetico che ruota.

mi basta scambiare il verso della corrente, e quindi


all’atto pratico semplicemente come sono collegati
due fili, non è che riesco a far ruotare un’asse sem-
plicemente giocando con i versi delle correnti?

I MOTORI IN CORRENTE CONTINUA


Supponiamo di mettere una calamita tra due elettroma-
gneti (Figura 2). La calamita la imbulloniamo per bene
ad una superficie, magari facendo passare una vite per
il suo centro, abbastanza lasca da farla ruotare. La cala-
mita tenderà a ruotare in senso orario, così da allineare
il suo polo nord al solenoide sud e il suo polo sud al
solenoide nord. Se nel momento in cui la calamita si al-
linea ai solenoidi (o, meglio ancora, leggermente prima)
cambiassimo la loro polarità, la calamita si troverebbe
con il polo nord sul solenoide nord e con il polo sud con
il solenoide sud, e tenderebbe a continuare a girare in
senso orario. Se, una volta allineata di nuovo nord con
sud e sud con nord, cambiassimo di nuovo la polarità
dei solenoidi, la rotazione continuerebbe. Se attaccas-
Figura 4: Campo magnetico interno e rotazione del motore. simo una ruota alla calamita, avremmo un motore elet-

30
MCU

Figura 5: Circuito di pilotaggio.

controllare, ma, come sempre accade quando si hanno


parti meccaniche a contatto, molto sensibili a usura e
rumore elettrico (pensate a quanto rumore introducono
due contatti che strisciano). Se considerate che i con-
tatti potrebbero tranquillamente generare, al momento
della commutazione, delle scintille, è facile capire poi
come non sia nemmeno il caso di usarli in ambienti un
po’ “problematici”.
Come sempre accade in ingegneria, si può fare qualco-
sa di meglio complicando un po’ le cose. Un’altra cosa
su cui battono molto al corso di elettromagnetismo è la
composizione di vettori. Dopo un po’, quando ti dicono:
“Se io ho una carica qui e una là, quant’è il campo quag-
giù?” riesci a vedere a occhio le eventuali simmetrie del
sistema e ad azzardare una risposta. È sempre bello
quando la simmetria è totale e ti viene fuori che il campo
è nullo (lo zero è bello, lo zero è facile!), o che qualche
componente si annulla e salta fuori che il campo è diret-
to tutto da una parte.
Figura 6: Campo magnetico e letture dei sensori di Hall.
Torniamo quindi alla Figura 2 e rovesciamo il proble-
ma. Fissiamo il campo esterno e cerchiamo di cam-
trico! biare quello interno. Con una calamita non possiamo,
Questo, sostanzialmente, è il principio di funziona- ma con un solenoide? Nemmeno, perché ad un sole-
mento dei cosiddetti motori in corrente continua. noide al massimo possiamo invertire la polarità, ossia
Questi motori utilizzano un commutatore a spazzole possiamo passare da sinistra-destra a destra sinistra, e
per cambiare la polarità dei solenoidi. Una spazzola non è granché. Con più solenoidi la situazione però
è semplicemente un contatto strisciante, tipo tergicri- cambia, perché qui il campo totale è la somma dei
stalli, che passa da un contatto all’altro ogni tot tempo. vari contributi, e ci possiamo aspettare, pilotandoli
Si tratta di motori molto semplici, poco costosi e facili da opportunamente, di orientare il campo in qualsiasi

31
MCU

il campo sarà diretto verso il basso. Sostanzialmente,


cambiando il verso della corrente commutiamo il campo
da nord-sud a sud-nord (Figura 3).
Togliamo adesso la massa comune dal centro. In que-
sto caso, quello che entra in un solenoide deve uscire
da un altro. Togliamo dunque corrente al solenoide A e
pompiamola adesso nel solenoide C. Il campo sarà ora
inclinato di 120 gradi in senso orario rispetto all’asse
orizzontale. Se cambiamo il verso della corrente, il cam-
po risulterà inclinato di 60 gradi rispetto all’orizzontale,
in senso antiorario. Se diamo corrente sia al solenoide
A che al solenoide C, con una corrente entrante in A
e uscente in C, il campo sarà diretto da qualche parte
tra 60 e 120 gradi in senso orario rispetto all’orizzonta-
le, a seconda dell’intensità delle due correnti. È chiaro
come, pilotando opportunamente le correnti, pos-
siamo far ruotare a piacimento il campo magnetico.
Che cosa ce ne facciamo di un campo magnetico che
ruota? Mettiamo i nostri solenoidi all’interno di una
Figura 7: Sensori ad effetto Hall. struttura magnetica ad anello come quella mostrata
nella Figura 4. Per forza di cose, i tre solenoidi devo-
no essere tenuti fissi (statore) e l’anello lasciato libero
direzione vogliamo. di ruotare (rotore): se così non fosse, i fili collegati ai
Consideriamo dunque tre solenoidi, con una massa solenoidi attraverso cui pilotiamo le correnti finirebbe-
comune al centro. Al corso di elettromagnetismo inse- ro per attorcigliarsi. Supponiamo che inizialmente l’as-
gnano che il campo magnetico in un solenoide è all’in- se del solenoide A sia diretto dritto verso il magnete
circa diretto lungo il suo asse e ha lo stesso verso della N(nord). Drenando corrente da A, otterremo un campo
corrente che lo percorre. Se non c’è corrente, non c’è magnetico diretto esattamente verso N. La forza ma-
campo. Supponiamo quindi di drenare una corrente dal gnetica risultante forzerà il rotore a ruotare (!) fino a che
solenoide A, e nessuna dagli altri due. Il campo sarà il solenoide A non sia allineato al magnete S(sud) che
diretto verso l’alto. Se invertiamo il verso della corrente, si trova lì accanto. Allineato al magnete S, non accadrà

Figura 8: Pilotaggio del motore.

32
MCU

più nulla, a meno che non pompiamo corrente in C e la no solo certi con certe caratteristiche. Questo non è un
assorbiamo da B, cosa che porterà alla generazione di problema da poco, perché dall’intensità della corrente
un campo diretto esattamente verso il magnete N sulla dipende anche l’intensità del campo magnetico gene-
destra. Il gruppo di solenoidi tenderà a ruotare fino a rato all’interno del motore, e da quest’intensità dipende
riallinearsi al successivo magnete Sud, e via di questo la velocità con cui il rotore si riallinea allo statore: più è
passo. Pilotando opportunamente le correnti nei sole- alto il campo, più sarà veloce il riallineamento, e quindi
noidi, possiamo far girare all’infinito il nostro motore. Un la velocità di rotazione dell’asse che presumibilmente
motore di questo tipo viene detto “motore in continua abbiamo fatto passare per il centro dei solenoidi. Pos-
senza spazzole (brushless)”, o BLDC, e ha il chiaro van- siamo certo variare la corrente generata cambiando la
taggio di non avere parti meccaniche in moto e a con- tensione di gate, ma abbiamo supposto che i MOSFET
tatto. L’altrettanto chiaro svantaggio è che il pilotaggio si lavorino come interruttori digitali, e quindi pilotati da zero
fa più complicato. o uno logici. In pratica, stiamo supponendo di pilotare i
Pompare e drenare corrente dai solenoidi, dal punto transistor o con zero volt, o con tot volt fissi.
di vista circuitale, alla fine è il minore dei mali: basta Quindi, non abbiamo (diciamo) un controllo sulle dimen-
usare qualche transistor (Figura 5). Consideriamo i sioni dei transistor (e se anche l’avessimo comunque
MOSFET collegati al solenoide A, e supponiamo di pi- non potremmo cambiarle in corsa, qualora volessimo
lotarli con segnali complementari. Se vediamo un MO- variare la velocità del motore durante il suo funziona-
SFET come un interruttore controllato in tensione, que- mento), e abbiamo pochissimo controllo sulla tensione
sto significa che dovremo avere uno zero sul MOSFET di gate. Questo che significa, non possiamo fare un mo-
2 quando sul MOSFET 1 c’è un uno, e viceversa. Ora, tore a velocità regolabile? In realtà sì: basta utilizzare
supponiamo che l’uno sia sul MOSFET 1. Il MOSFET 2 per il pilotaggio, invece di un segnale digitale fisso,
è spento e il MOSFET 1 pompa corrente dall’alimenta- un segnale PWM. Un segnale PWM è un treno di im-
zione verso il solenoide. Quando l’uno è sul MOSFET pulsi a cui possiamo variare i duty cycle, ossia la
2, il MOSFET 1 è staccato e il 2 drena corrente dal so- parte di periodo durante il quale l’impulso è alto. Si
lenoide verso massa. Se entrambi i MOSFET hanno il può dimostrare (ma ve lo risparmiamo) che un com-
gate a zero, il solenoide è in circuito aperto e su di lui ponente al quale viene applicato un PWM “vede”,
non scorre corrente. anziché un treno di impulsi, una tensione costante
Il funzionamento sembrerebbe proprio quello deside- pari a:
rato, ma ci sono un paio di problemi. Il primo è quan-
ta corrente assorbono o pompano i MOSFET. Questo Vout = Duty_Cycle × Vin
dipende dalle dimensioni e dalle caratteristiche fisiche
del transistor, e questa potrebbe essere una cosa sul- Quindi, la tensione applicata al componente dipende dal
la quale non abbiamo nessun controllo. Magari perché duty cycle del segnale PWM. Cambiando il duty cycle,
“questo c’è”, magari perché in commercio se ne trova- possiamo cambiare anche la tensione efficace applicata

Tabella 1: Tabella delle commutazioni.

33
MCU

Figura 9: Controllo in catena chiusa.

Figura 10: Schema a blocchi del controllo Motore

al gate dei transistor, pur continuando a lavorare con se- do opportunamente il campo magnetico, possiamo far
gnali digitali. Quindi, possiamo anche cambiare la velo- ruotare il rotore (sì, questo gioco di parole ci piace tan-
cità di rotazione del motore. Generare un segnale PWM to!). Ma come facciamo a sapere, di volta in volta, che
e variargli il duty cycle è piuttosto semplice se si utilizza orientazione scegliere? In realtà anche questo è sempli-
un microcontrollore moderno, visto che ormai tutti i mi- ce: visto che abbiamo tre solenoidi disposti in modo da
cro contengono moduli dedicati per il PWM, e permetto- dividere in tre parti uguali l’angolo giro, se supponiamo
no di variare il duty cycle semplicemente cambiando il di alimentarli tutti con le stesse correnti, e se consideria-
valore contenuto in un registro. E’ molto più difficile con mo che la corrente immessa in un solenoide deve uscire
della circuiteria dedicata, per cui raccomandiamo quella da un altro, avremo in tutto sei orientazioni per il campo
strada solo agli amanti del VHDL e delle sfide! magnetico (Figura 6), una per ogni possibile combina-
C’è un secondo problema. Abbiamo detto che, orientan- zione vettoriale dei campi generati dai singoli solenoidi.

34
MCU

tale emetterà un uno se rileva un polo nord, o


uno zero in caso contrario.
Dunque, piazziamo tre sensori ad effetto Hall
sotto i solenoidi. Per semplificare, come rotore
consideriamo, invece della struttura a otto poli
della Figura 4, una più semplice a due poli. Si
tratta comunque di un’approssimazione sensata,
visto che anche un magnete a otto poli avrà una
sua polarità netta nord-sud. Supponiamo dunque
che il campo magnetico del rotore arrivi, ad un
certo punto, nello spicchio in basso, quello che
nella Figura 6 abbiamo etichettato con “011”. Se
il campo è in questo spicchio, tanto in sensore
Hb quanto quello Hc vedranno un polo nord, e
quindi emetteranno un uno. Il sensore Ha invece
Figura 11: Segnali PWM vedrà solo un polo sud, e quindi emetterà uno
zero. Sappiamo quindi dove ci troviamo e pre-
Dunque, per ogni possibile orientazione, per far avan- sumibilmente dove vogliamo andare (ossia in avanti o
zare il motore, basta passare al settore successivo. Nel all’indietro): è tutto quello che ci serve per sapere qua-
caso di movimento in senso orario, ad esempio, la se- li fasi attivare per far continuare la rotazione. Quando,
quenza sarà sempre la stessa: continuando nella rotazione, il rotore giungerà nello
spicchio in basso a sinistra, il sensore Hc vedrà un polo
AC -> BC -> BA -> CA -> CB -> AB -> AC nord e gli altri due un polo sud, e quindi la lettura sarà
“001”. Visto che la sequenza di commutazione è nota,
dove con “AC” intendiamo che la corrente entra nel so- possiamo riassumerla in una tabella, con le letture dei
lenoide A ed esce dal solenoide C. Quindi, il proble- sensori ad effetto Hall e le fasi da attivare al giro succes-
ma è quando scegliere la nuova combinazione: ci sivo (Tabella 1 e figura 8),
occorre un qualche modo per sapere che il campo Nella tabella, “NC” significa che la fase relativa non vie-
generato dai magneti permanenti del rotore è alline- ne pilotata, “+” che la corrente vi entra e “-“ che la cor-
ato a quello dello statore e che è tempo di passare rente vi esce. Utilizzando questa tabella, controllare il
al campo successivo nella sequenza. motore è semplicissimo. Se la lettura dei sensori fosse
La soluzione viene dai sensori ad effetto Hall. Un’altra 011 e ci volessimo muovere in senso orario, dovremmo
magia dei campi magnetici è la loro capacità di curvare usare la sequenza BC; se ci volessimo muovere in sen-
le traiettorie della particelle cariche che li attraversano. so antiorario, la sequenza AC.
Si chiama forza di Lorentz e rappresenta il principio di
funzionamento, tra le altre cose, delle aurore polari, de- CHIUDIAMO L'ANELLO
gli acceleratori di particelle e degli spettrometri di mas- Di massima, tanto basta. In pratica, però, probabilmen-
sa, oltre che, ovviamente, dei sensori ad effetto Hall. te vorrete fare qualcosa di più accurato. Ad esempio,
Questi sensori sono semplicemente delle piastrine di abbiamo detto che per variare la velocità basta variare
materiale conduttivo percorse da corrente. Quando im- il duty cycle del PWM di controllo. Questo è vero, ma
merse in un campo magnetico, gli elettroni tendono a chi ci dice che duty cycle utilizzare per avere una certa
piegare verso uno dei due lati della piastrina (Figura 7). velocità? In effetti nessuno, tutto quello che possiamo
Quale dei due lati dipende dalla direzione del campo fare è misurare la velocità del motore, con un altro sen-
magnetico (entrante o uscente dalla piastrina), ma in sore o semplicemente misurando quanto rapidamente
entrambi i casi il sensore sarà in grado di rilevare una cambiano le letture dei sensori ad effetto Hall (il numero
tensione tra i due lati della piastrina. Se considerate che di volte che la sequenza si ripete in, diciamo, un secon-
il flusso del campo magnetico è diretto da nord a sud, do è direttamente la velocità di rotazione del motore),
il flusso sarà entrante se al sensore avviciniamo il polo e regolare in catena chiusa il duty cycle (Figura 9). In
nord e uscente se gli avviciniamo il polo sud. Dunque, pratica, una volta impostata la velocità desiderata e mi-
il sensore può dirci se nei suoi paraggi c’è un polo surata la velocità effettiva del motore, diamo la differen-
sud o un polo nord. Un sensore ad effetto Hall digi- za tra le due in pasto ad un qualche genere di sistema

35
MCU

di controllo in catena chiusa, proporzionale, integrativo Qui dentro, andremo a leggere il valore corrente di un
o derivativo a seconda delle prestazioni che volete, che qualche (altro) timer. Noto il tempo trascorso dall’ultimo
regolerà il duty cycle. Un controllo in catena chiusa di fronte (che avremo salvato da qualche parte durante
questo tipo è opportuno in ogni caso, ad esempio per l’interrupt precedente), possiamo calcolare la pulsazio-
stabilizzare la velocità del motore. Immaginate di voler ne semplicemente come:
usare due motori per muovere un’automobilina o un pic-
colo robot. Le velocità di rotazione dei due motori non ω = 2π/T
saranno mai esattamente identiche, il che significa che
una ruota potrebbe andare più veloce dell’altra, il che Se al rotore abbiamo collegato una ruota con un certo
a sua volta significa che l’automobilina o il robot avreb- raggio R, la velocità angolare sarà:
bero difficoltà a muoversi in linea retta. Un controllo in
catena chiusa può ridurre la velocità di una ruota se va v = ωR
più veloce dell’altra valutando di volta in volta la diffe-
renza tra le due. e questo è il valore che verrà poi regolato dal PID.
La Figura 10 mostra uno schema generale del sistema, La cosa è ancora più semplice se il timer del vostro mi-
mentre in figura 11 vengono visualizzate le forme d’on- cro ha anche la funzionalità di input capture, come
da in ingresso e in uscita dal microcontrollore. Possia- ce l’hanno l’HCS08 o molti PIC. Un timer configurato per
mo collegare le uscite dei sensori ad effetto Hall a tre lavorare in modalità input capture in automatico salva il
pin general purpose del micro, configurati per lanciare valore del contatore al suo interno quando si verifica un
un interrupt in corrispondenza di una commutazione (in evento su un certo pin (ad esempio un fronte di salita),
salita o in discesa) della forma d’onda corrispondente. e in automatico lancia anche un interrupt. Dunque, se
Utilizzando un semplice micro Freescale HCS08, ad preferite, potete eseguire il calcolo della velocità diretta-
esempio, vi basta utilizzare il modulo KBI (Keyboard In- mente qui. A titolo di esempio, supponiamo inizialmente
terrupt). Nella routine di gestione dell’interrupt andrete di trovarci nella fase AB e di ricevere un interrupt sul
a leggere i tre pin e, seguendo la Tabella 1, a decide- fronte di discesa dal sensore Ha. Eseguiamo la lettu-
re quali fasi pilotare. Ora, i sei gate dei sei transistor ra: i sensori ci restituiranno 010. Quindi, dalla Tabella 1,
andrebbero collegati ad altrettante PWM. La maggior sappiamo di dover attivare la fase AC. Il PWM sulla fase
parte dei microcontrollori ha al suo interno timer abba- A già c’è, quindi quello che dobbiamo fare è staccare la
stanza potenti da generare tutti i segnali che vi servono. fase B e attivare la C. Lasciamo i segnali di controllo in
L’Arduino ne ha esattamente sei; gli HCS08 dipende dal questo modo fino al successivo interrupt dai sensori ad
modello: ad esempio, la GB60 ha un timer a 5 canali e effetto Hall: nel caso in questione, sarà la volta di Hc. La
uno a 3. Se però vi trovaste a lavorare con un certo mi- lettura ci restituisce 011, e la Tabella 1 ci dice che dob-
cro perché “questo c’è”, assicuratevi di avere almeno tre biamo attivare la fase BC. Togliamo il PWM dalla fase A,
PWM. Ricordate che i due MOSFET di ciascun totem- applichiamolo alla B, e lasciamo la C così com’è. E via
pole sono pilotati da segnali complementari, quindi uno di questo passo.
dei due può essere ottenuto o con un sottrattore analo-
gico con uno dei due ingressi pilotato da una tensione CONCLUSIONI
costante, o con una banale porta XOR anch’essa con A questo punto presumiamo abbiate capito il giochet-
uno dei due ingressi pilotato da una tensione costante: to. Controllare un motore DC non è così fantascientifico
a seconda se siete più analogici o digitali! come si potrebbe pensare, ma alla fin fine basta saper
Per misurare la velocità invece basta controllare l’usci- usare il modulo PWM di un moderno microcontrollore
ta di solo uno dei sensori ad effetto Hall. Se osservate (e poco più) e avere voglia di ripescare gli appunti del
le forme d’onda nella Figura 10, infatti, noterete come corso di Controlli Automatici. Il grosso del lavoro lo fa,
l’uscita di ciascun sensore sia semplicemente un’onda alla fin fine, la magia dei campi magnetici.
quadra con un duty cycle del 50 %. Osservate in par-
ticolare l’uscita del sensore posto sotto il solenoide B:
L’autore è a disposizione nei commenti per eventuali
quest’onda ha un fronte di salita all’inizio di ciascun giro. approfondimenti sul tema dell’Articolo. Di seguito il link per
Dunque, per la lettura della velocità basta monitora- accedere direttamente all’articolo sul Blog e partecipare alla
re i fronti di salita sul sensore Hb, e questo possia- discussione:
[Link]
mo farlo, ad esempio, nella stessa routine di gestione
controllero-un-motore
dell’interrupt in cui aggiorniamo le letture dai sensori.

36
Lo Spazio
SCI&TECH a casa nostra
di Maila Agostini

Andare nello spazio influisce sulle nostre vite più di quanto ci aspettiamo; al di là della crescita econo-
mica e del ritorno industriale, ed ovviamente scientifico, molte delle idee sviluppate per andare nello
spazio hanno avuto ripercussioni nella vita di tutti i giorni. Solo la NASA ha centinaia di spin-off, cioè
tecnologie realizzate per lo spazio che hanno trovato applicazione nella vita di tutti i giorni; moltissime
sono in ambito medico, ma alcune sono ormai talmente comuni che è incredibile pensare che fossero
state realizzate per lo spazio! In questo articolo vedremo alcune delle più inaspettate invenzioni che
usiamo quotidianamente.

INTRODUZIONE sviluppo, o concessioni di brevetti, oppure tramite

S
entiamo spesso dire che la ricerca di base è inu- l'uso, le strutture o l'assistenza della NASA. Vedia-
tile, ed ancora più inutile e costosa è la ricerca mone alcune.
condotta nello spazio: cosa ce ne facciamo di
piante coltivate a gravità zero, o di sapere se il caffè STRUMENTI A BATTERIA
prodotto nella stazione spaziale è buono o meno? In Pensate mai a come potrebbe essere difficile lavorare,
realtà non è proprio così; ovviamente, già soltanto il attraverso un'ingombrante tuta spaziale e magari in
meccanismo della ricerca nello spazio produce posti di assenza di gravità, con uno strumento collegato con
lavoro e guadagni per moltissime industrie. Inoltre, c'è un filo alla vostra navetta spaziale? Sicuramente non
sempre un ritorno a livello scientifico e si hanno pro- è una situazione familiare! Ma proprio per evitare
gressi nella ricerca di base. Ma che vantaggi ne trae problemi derivanti da situazioni come queste, nel
chi non lavora in questi due particolari settori? Sembre- 1963, la Nasa commissiona alla Black & Decker, che
rebbe che non ci sia alcun guadagno, ma in realtà non aveva già realizzato due attrezzi di questo tipo, un
è così; centinaia di tecnologie sviluppate per andare elettroutensile cordless da poter utilizzare in assenza di
nello spazio sono ormai di uso comune. In particolare, gravità e condizioni ostili; non avrebbe dovuto sfruttare
la NASA ha reso pubblici migliaia di brevetti sviluppati l'energia del lander lunare (già abbastanza scarsa)
per le missioni spaziali, detti spinoff; gli spinoff NASA e sarebbe servita per mansioni pesanti. Nel 1971, gli
sono servizi e prodotti commerciali sviluppati con astronauti della missione Apollo 15 utilizzarono
l'aiuto della NASA attraverso contratti di ricerca e proprio un trapano cordless della Black & Decker

Figura 1: Un tagliasiepi cordless Figura 2: Un sensore CCD

37
SCI&TECH

mondiale (figura 1). In seguito, l'applicazione è stata


sviluppata per ambienti chirurgici e si è infine diffusa in
tutte le case.

SENSORI CMOS E CCD


Ormai abbiamo tutti uno smartphone con macchina
fotografica incorporata; i sensori montati sui nostri
cellulare e sulle comuni macchine fotografiche digitali
sono appunto sensori CMOS (figura 2). Il progetto per
sensori economici che scattassero foto di buona qualità
ad "alta velocità" è stato allo studio fin dagli anni '60. Ma
è solo negli anni '90 che si riuscì ad inventare il CMOS,
un sensore compatto che colpito dalla luce è in grado
di convertirla in segnali elettrici, memorizzabili come
Figura 3: Occhiali da sole
immagini in un computer. Anche in questo caso l'idea è
stata applicata anche in ambito medico, soprattutto per
le immagini a raggi x. Lo spinoff è stato realizzato nel
1995 dal JPL (Jet Propulsion Laboratory). I CMOS
sono stati sviluppati dal CCD, che vediamo in figura 2,
grazie ai moderni sistemi di miniaturizzazione. Anche
i CCD, sono stati creati per la NASA; si tratta sempre
di un progetto legato alla corsa allo spazio, sviluppato
negli anni '70 per le telecomunicazioni.

LENTI FOTOCROMATICHE E RIVESTIMEN-


TO ANTIGRAFFIO
Ogni estate i telegiornali ci raccomandano di prestare
attenzione ai raggi UV; il problema è molto più
Figura 4: Pneumatici senza aria importante nello spazio però! Sulla Terra siamo protetti
dall'atmosfera, ma nello spazio non c'è protezione
da queste radiazioni particolarmente energetiche; il
rischio è di avere danni irreversibili in caso colpiscano
direttamente la retina. Per questo motivo, negli anni
'60, la NASA commissionò lo sviluppo delle lenti
fotocromatiche. Inizialmente era possibile applicare il
rivestimento di cloruro e alogenuro d'argento solo per
lenti di vetro, ma già negli anni '80, dopo il rilascio dello
spinoff, fu messa in commercio la lente in Photolite, la
prima lente fotocromatica infrangibile. Il rivestimento
infrangibile, invece, è stato inventato inizialmente
per gli aerei da combattimento; in questa maniera
potevano avere una finestra otticamente trasparente
ma resistente agli urti. Tuttavia la loro popolarità sale
solo nel 1970, dopo l'utilizzo da parte della NASA per i
caschi degli astronauti e per il "parabrezza" dello Space
Shuttle. Curiosità: ciò che permette al policarbonato
di resistere agli urti è la sua flessibilità. Essere
Figura 5: Impronta lasciata dagli astronauti dell'Apollo 11 sulla Luna flessibile permette all'oggetto di assorbire energia
senza rompersi. Ma poiché si tratta di un materiale
per raccogliere campioni lunari; solo grazie a questo morbido, ha bisogno di un rivestimento anti-graffio per i
successo, gli utensili cordless hanno avuto diffusione graffi superficiali. A questo punto entra di nuovo in gioco

38
SCI&TECH

rover lunare usato dagli astronauti dell'Apollo 14. Il


primo pneumatico a molle senza aria è infatti stato
realizzato dalla Goodyear nel 1971 e sarebbe servito
per il trasporter Moon Buggy. Questa collaborazione
tra NASA e Goodyear è andata avanti negli anni; nel
2010 è stato realizzato un nuovo modello, interamente
metallico, costituito da cuscinetti portanti a molle. In
questo modo non richiede di essere gonfiato (figura 4).
Qual è il problema? Un normale pneumatico di gomma
non sarebbe utile per l'esplorazione spaziale; a causa
della mancanza di atmosfera gli sbalzi di temperatura
sono molto elevati e le basse temperature, unite al
degrado dovuto alle radiazioni solari, provocherebbero
un prematuro degrado. Inoltre, i rover sono veicoli
Figura 6: Una coperta termica
compatti, con sistemi di guida simili a quelli dei carri
armati; questi sistemi provocano grandi sollecitazioni
sulle ruote. Senza contare che i terreni sui quali si
muovono sono accidentati: gli pneumatici devono quindi
provocare una certa trazione, per evitare di scivolare in
discesa e salire agevolmente i pendii. Senza considerare
il rischio foratura!

MOON BOOT E SCARPE DA GINNASTICA


Se siete nati negli anni '80 non potete non conoscere
i Moon Boot! Il nome rimanda già alle missioni Apollo;
durante le loro "passeggiate spaziali", di cui vediamo
un'impronta nella figura 5, gli astronauti dovevano
Figura 7: Space Shuttle
essere protetti da sbalzi termici, raggi solari e
micrometeoriti. Nonostante l'idea sia solo "ispirata" agli
stivali indossati dagli astronauti, il progetto va molto
vicino al primo originale indossato da Armstrong; il
modello era imbottito da un sistema di cuscinetti che
migliorava la stabilità e l'isolamento, diminuendo gli
shock. Grazie ai materiali sviluppati per questi stivali,
sono nate anche le moderne scarpe da ginnastica; le
solette tecniche in materiali termici ed antibatterici che
redistribuiscono le compressioni e riducono gli sforzi
che derivano da materiali realizzati dal Centro Ricerche
per le applicazioni aerospaziali della NASA.

COPERTA TERMICA
Come abbiamo già visto qui, il problema del
Figura 8: Cuscino in Memory Foam
riscaldamento nello spazio non è banale; le temperature,
la NASA, che prima di utilizzare questa applicazione nell'ambiente spaziale, variano tra -260°C e 480°C. Per
per le sue necessità, inventa il rivestimento antigraffio! ovviare agli sbalzi di temperatura, la NASA sviluppò
Grazie a tutti questi spinoff abbiamo i moderni occhiali questo progetto nel 1964 per il modulo lunare Apollo.
da sole, come in figura 3. Si tratta di una sottile foglio di plastica, spesso PET,
rivestito da un agente metallico che riflette fino al 97%
PNEUMATICI del calore irraggiato, come vediamo nella figura 6;
Sembra incredibile, ma i moderni pneumatici per questo materiale, inoltre, è adatto per il vuoto grazie alla
auto, che vediamo in foto, sono nati per un primitivo bassa emissione di gas, ed è resistente alle radiazioni

39
SCI&TECH

a freddo come frigoriferi e congelatori, furgoni, autobus,


camper e case. Inoltre sono utilizzati per isolare cavi e
sistemi di irrigazione, poiché prevengono le infestazioni
di roditori e parassiti.

MATERIALI A MEMORIA DI FORMA


Di nuovo, un'invenzione realizzata per la corsa allo
spazio, il memory foam. Resa pubblica nel 1988, ma
sviluppata 20 anni prima, si tratta di una schiuma di
poliuretano con additivi che permettono di variarne la
viscosità e la densità, adattandosi al corpo e distribuendo
il peso, come possiamo vedere nella figura 8. Questo
Figura 9: Funghi liofilizzati è molto importante in fase di partenza ed atterraggio
di una navetta spaziale, in quanto gli astronauti sono
sottoposti ad accelerazioni che vanno da 5g a 10 g. Non
proprio un'accelerazione gradevole! Inizialmente ci fu
un problema; i materiali in memory erano infiammabili!
Col tempo si è riusciti ad eliminare e sostituire tutti gli
additivi infiammabili, limitando il rischio di incendio. Il
fuoco è una cosa difficile da controllare su una navetta
spaziale! In ultimo, anche questa applicazione è
stata sfruttata in campo medico: nel caso di pazienti
costretti a letto per lungo tempo, si è potuto limitare
il rischio di piaghe da decubito o cancrena dovute
Figura 10: Distesa di pannelli fotovoltaici all'aumento della pressione sanguigna in una certa
area del corpo.
UV. Adesso queste coperte sono incluse in molti kit di
emergenza, perché impermeabili ed antivento; sono CIBO LIOFILIZZATO
inoltre leggere e poco ingombranti. Nel primo soccorso Le missioni spaziali impongono rifornimenti di cibo che
sono utilizzate per prevenire l'ipotermia, in quanto possono dover durare per mesi, in condizioni ostili.
riducono anche la convezione. Per lo stesso motivo Ma in assenza di acqua i batteri non sopravvivono.
sono utilizzate anche in gare atletiche e maratone, per Per questo motivo la NASA sviluppò sistemi per la
proteggere gli atleti dal freddo prima o alla fine delle liofilizzazione del cibo, di cui vediamo un esempio in
gare. figura 9. In questa maniera, oltre ad un minore peso ed
una migliore conservazione, si limitava anche il rischio
VERNICE ISOLANTE di malattie per gli astronauti. Inoltre, poiché questo
Per lo stesso motivo sono state inventate le vernici genere di alimenti non necessitano di refrigerazione,
isolanti; utilizzate per la coibentazione delle navette non c'è un consumo di energia per la conservazione
spaziali, sono state testate per la prima volta negli anni da parte della navetta. Il metodo di liofilizzazione è
'90 sullo Space Shuttle, che vediamo in figura 7. Grazie stato uno dei primissimi spinoff della NASA; è stato
all'enorme successo avuto nella prima missione sono reso pubblico già nel 1970. Ed è un processo che non
state applicate a tutti i voli successivi. Queste speciali necessita di additivi chimici: il cibo viene congelato e,
vernici permettono di ridurre la trasmissione del calore successivamente, posizionato in contenitori nel vuoto
per irraggiamento anche del 90%. Realizzate con spinto. Grazie a questo sistema, l'acqua contenuta
nanotecnologie, vengono prodotte aggiungendo ad una nel cibo sublima invece di congelare ed è aspirata
normale vernice una polvere contenente microsfere di dal contenitore. Nonostante il sistema relativamente
vetro cave, particelle di sughero e resina. In pratica si semplice, gli astronauti delle missioni Mercury, intorno
sfruttano le proprietà dei composti ceramici di riflettere al 1960, avevano difficoltà a reidratare i cibi. Adesso,
il calore. In genere sono utilizzate per rivestimenti di grazie alla Stazione Spaziale Internazionale, si stanno
tubi, costruzioni metalliche (in quanto questo sistema realizzando addirittura colture spaziali; questi studi
previene il formarsi della ruggine), impianti di stoccaggio aiuteranno gli agronomi ed i ricercatori a realizzare

40
SCI&TECH

coltivazioni in ambienti ostili e desertici, migliorando la


qualità della vita delle popolazioni locali. Oltre a quella
degli astronauti, ovviamente: il primo pranzo nello
spazio, per Yuri Gagarin, è stato di due tubetti tipo
"dentifricio" di carne ed uno di salsa al cioccolato!

IMPIANTI FOTOVOLTAICI
Abbiamo già visto che uno dei problemi dell'esplorazione
spaziale è avere potenza per alimentare i vari strumenti.
Nel 1960 la NASA scoprì che alcuni materiali avevano
proprietà fotovoltaiche: colpiti dalla luce, emettevano
fotoni e liberavano piccole quantità di energia elettrica.
In realtà l'effetto fotoelettrico è noto fin dal 1839.
Ma solo con la crisi energetica degli anni '70 si
iniziò a condurre esperimenti per la produzione
industriale di energia fotovoltaica. Per questo
progetto, la NASA collaborò con la Disney, alimentando
i loro uffici nell'Ontario! È passato molto tempo dai
primi prototipi; oggi i dispositivi più diffusi sono sistemi
composti, come in figura 10, e utilizzano più celle per
generare tensione ed avere una più alta efficienza di
conversione. Nonostante le ricerche siamo ben lontani
dall'indipendenza energetica dai combustibili fossili; la
massima efficienza raggiunta fino ad ora è del 35%.

CONCLUSIONI
Questi sono solo alcuni esempi di come la nostra vita
possa cambiare grazie alla ricerca ed all'esplorazione
spaziale. Molto spesso i contributi della scienza alla
nostra vita sono sottovalutati; capita di chiedersi "a
cosa serve?" o "come può essere utile?". Ma anche nel
caso della scoperta dell'energia nucleare, la bomba
nucleare non è stata l'unica applicazione. Ci sono
moltissime applicazioni "pacifiche": terapie tumorali e
radiofarmaci per la PET, controlli doganali, verifica della
sofisticazione di sostanze e molto altro. A volte non
riusciamo a vedere oltre la portata della scoperta; ma
la scienza porta al progresso dell'uomo... sempre!

RIFERIMENTI:
[Link]
[Link]
[Link]
[Link]

L’autore è a disposizione nei commenti per eventuali


approfondimenti sul tema dell’Articolo. Di seguito il link per
accedere direttamente all’articolo sul Blog e partecipare alla
discussione:
[Link]

41
Esiste un limite alle
SCI&TECH
nostre capacità visive?
di Pietro Boccadoro

Non molto tempo fa abbiamo iniziato a ragionare della nostra capacità visiva. Partendo, infatti, dalla
domanda "esiste un limite oltre il quale il nostro occhio non riesce ad essere abbastanza veloce?" ab-
biamo discusso molti aspetti della tecnica rappresentativa delle immagini nei sistemi digitali, passando
attraverso la fotografia e l'animazione digitale, anche tridimensionale. Oggi proviamo ad aggiungere
degli altri spunti di riflessione: parliamo di rappresentazione video ma anche di renderizzazione e vi-
deogiochi, e proveremo a tirare le conclusioni in merito per scoprire se i nostri occhi abbiano effettiva-
mente dei limiti oppure no. Siete pronti?

I VIDEOGIOCHI E LE POTENZIALITÀ VIDEO sempre maggior livello o altre opzioni di rendering avan-

T
utti gli appassionati di videogiochi sanno, ad zato.
esempio, che il numero di frame al secondo Tutto quello che i videogiocatori sono abituati a vedere,
è un parametro fondamentale. E questo vale in realtà, però tiene conto della grandissima esperien-
sia che stiate giocando on-line sia che state giocando za maturata in campo cinematografico e soprattutto del
in single player. Molto spesso, però, in questo campo, livello di approfondimento degli studi in campo fisiolo-
la qualità del videogioco non ha impatto soltanto sulla gico del nostro sistema visivo. Tanto per iniziare, non
scena e sul fatto che sia realistica ma più che altro sulla si tratta soltanto di fluidità dell'immagine ma anche
fluidità con cui viene rappresentata la stessa. Un basso di capacità di visualizzazione da parte dei monitor
frame rete, infatti, impatta gravemente sull'esperienza di per i nostri computer: se sono di piccola dimensione,
gioco perché la rende meno realistica dal momento che per esempio, tipicamente costano di più di un CRT (che
viene visualizzata "a scatti". I videogiocatori sanno bene comunque oggi non sono più in commercio per ovvie
che molto spesso questo può dipendere dalle basse ragioni relative alla sicurezza e all'avanzamento tec-
performance della propria macchina e che un motore nologico, oltre che per una questione di smaltimento
grafico estremamente ottimizzato e ricco di opzioni tutt'altro che banale).
può risultare scalabile in maniera tale da rendere la In realtà esistono delle ragioni tecnologiche molto pro-
scena fluida rinunciando ad effetti di ombreggiatura par- fonde alla base dell'avanzamento che ha subito la tec-
ticolare piuttosto che ai singoli dettagli. nica sulla quale si basano i monitor dal momento che
Qui si abbraccia anche il campo della tecnica di imple- i fosfori non hanno il livello di definizione che possono
mentazione della gestione degli effetti nell'ambito delle avere i pixel: maggiore è il numero di pixel, maggiore
schede video, per esempio. Con filtri Anti-Aliasing di sarà la risoluzione che il monitor è in grado di produrre.
Altre ragioni tecnologiche sono relative, per esempio,
alla frequenza di aggiornamento, naturalmente supe-
riore ai vecchi monitor. Questo si traduce nel fatto che
l'immagine viene riprodotta in maniera estremamente
più veloce.
La possibilità di trasmissione più veloce suggerisce, è
chiaro, che sia effettivamente possibile rappresentare
più frame per unità di tempo, a costo naturalmente di
avere un hardware più performante (in termini di veloci-
tà di elaborazione ed eccitazione degli elementi). Anco-
ra una volta il campo dei videogiochi si propone come
un terreno di frontiera e tutta l'ingegnerizzazione delle
schede video si basa proprio sulla qualità e sulla veloci-
Figura 1: La scheda video NVIDIA GeForce GTX 950 tà con la quale si è in grado di rappresentare una scena.

42
SCI&TECH

"Avete mai guardato nello specifico i dettagli di


una scheda video? Proviamo a farlo adesso.

Consideriamo ad esempio una NVIDIA GeForce GTX


950 (mostrata in Figura 1).
Nata per il gaming, è in grado di riprodurre giochi, vec-
chi e più nuovi, in 1080p a 60 FPS.
Tra le specifiche tecniche più di rilievo vi sono:
• Clock di base della GPU: 1024 MHz
• Clock boost della GPU: 1188 MHz
• Fill Rate texture: 49.2 GigaTexels/s
• Massima risoluzione digitale: 5120x3200
• Massima risoluzione VGA: 2048x1536 Figura 3: Dettaglio dell'occhio e sue parti fondamentali

In merito alla memoria RAM: bassi, il VSync è disabilitato per minimizzare il "saltel-
• Velocità della memoria: 6600 MHz lamento".
• Quantità di memoria: 2 GB Il motion blur di cui abbiamo parlato prima è un effetto
• Interfaccia di memoria: 128-bit GDDR5 che effettivamente viene implementato all'interno dei
• Max banda passante: 105.5 GB/s videogiochi ma potrebbe anche non servire. L'occhio
umano può ricevere informazioni in maniera continuati-
A proposito del sincronismo verticale, questo modello va ed in effetti non guarda al mondo come una sequen-
dispone della funzionalità di "Adaptive VSync". Spesso za di immagini, ovvero come uno stream di informazio-
capita che alcuni difetti grafici annullino la sensazione di ni. Ed in effetti, l'unico caso di perdita di informazione da
immersione degli utenti. La tecnologia Adaptive VSync parte del nostro sistema visivo è il fatto che l'occhio sia
è un modo intelligente per renderizzare i frame: in caso effettivamente chiuso.
di un elevato numero di frame, VSync è abilitato per eli- Ciò nondimeno all'interno dei videogiochi non im-
minare il cosiddetto tearing. Quando i frame rate sono plementare il motion blur sarebbe sbagliato. Con-
sideriamo uno sparatutto, in particolare
uno che ho apprezzato particolarmente,
ovvero Unreal Tournament (ma in realtà
analoghe considerazioni possono essere
fatte con Counter Strike, Quake 3 Arena e
molti altri). L'esatta posizione di un ogget-
to è difficile da calcolare senza che ci sia
un "raccordo" tra un frame ed il successi-
vo, così come sarebbe difficile identificare
dove si trovi un altro giocatore. Uno spara-
tutto in prima persona diventa un genere
particolarmente difficili condizioni. Il Mo-
tion Blur, quindi, rappresenta un elemen-
to di raccordo tra il posizionamento nello
spazio OXYZ in cui personaggi vengono
generati e l'effettiva messa in scena di cia-
scun pixel e di ciascun oggetto.
Sebbene queste tecniche siano di base
per garantire un'immagine che possa es-
sere correttamente interpretata, quando
le schede video sono diventate più poten-
Figura 2: Percorso dei raggi luminosi attraverso l'occhio ti ed i processori in grado di gestire una

43
SCI&TECH

Figura 4: Lo spettro del visibile

Figura 5: Gravity Sim Free, un'app per comprendere meglio un fenomeno omnipresente

grande mole di dati in sempre meno tempo, e quando sentazione di cui abbiamo parlato, viene da chiedersi se
la capacità di memoria RAM ha superato un certo limi- questo sia necessario. Sebbene, tecnicamente non sia
te (1 GB), è stato possibile implementare un maggior strettamente indispensabile, l'esperienza di gioco e la
numero di frame per secondo all'interno di una stessa fruizione della scena risultano incredibilmente migliori.
scena. Così, la rappresentazione è diventata ancora più
realistica e fluida. Non è un caso se, quando si effettua- LE REALI CAPACITÀ DELL'OCCHIO
no benchmark di videogames, ci si riferisce molto facil- Gli umani riescono a vedere la luce quando viene mes-
mente ad un valore pari a 60 frame al secondo, senza sa a fuoco sulla retina tramite l'utilizzo di un sistema di
contare che i più esigenti potrebbero spingersi fino a lenti (mostrato in Figura 2 ed in dettaglio in Figura 3).
120 (salvo che il motore grafico non lo permetta). La retina ha il compito di interpretare la luce sfrut-
Effettivamente, date le premesse e la storia della rappre- tando due tipi di cellule che recepiscono informazioni

44
SCI&TECH

differenti: i coni e i bastoncelli, infatti, sono respon- ra del tutto noti, soprattutto quando associati al ricordo
sabili di tutti gli aspetti della ricezione della luce ma piuttosto che all'elaborazione di un eventuale pericolo
svolgono compiti diversificati percependo l'informazione basato su quello che stiamo vedendo oppure ancora il
sul colore e sull'intensità luminosa. La posizione, la di- meccanismo attraverso cui un'immagine suscita un'e-
stanza, il movimento e tutte le altre informazioni sono, mozione. Tuttavia viene largamente considerato che la
però, il risultato di un'elaborazione ben più complessa corteccia visiva funzioni come una sorta di filtro e che
che dalla semplice informazione acquisita tramite il si- queste associazioni mentali nonchè questi stimoli così
stema visivo viene passata, tramite i nostri nervi ottici variegati e complessi siano elaborati in funzione delle
(Figura 3), al cervello. interconnessioni neuronali che sostengono l'intera rete
Dei due tipi di cellule che abbiamo nominato, i baston- cerebrale, nonché la nostra capacità di trattare le in-
celli sembrano effettivamente esseri più semplici, dal formazioni non come stimoli a sè stanti ma in qualche
momento che lavorano sull'informazione relativa all'in- modo interconnessi tra loro.
tensità luminosa e sono anche i più veloci nel risponde- Poniamoci adesso nel caso del pilota di un aereo op-
re. La risposta, in particolare, è la "quantità" luminosa pure dell'autista di un autobus. Mentre siamo in quota
che stimola la cellula in quello specifico momento. Se oppure in velocità, è facile notare alberi piuttosto che
pensate alla pupilla ed alla sua funzionalità, l'occhio ri- case o anche altri oggetti che si muovono come autotre-
sponde dinamicamente alla quantità di luce disponibile, ni piuttosto che automobili.
allargandosi e restringendosi in maniera tale da poter Ciascuno di questi ha una sua posizione nello spazio ed
vedere modulando la quantità di luce che entra nell'oc- essa evolve in qualche modo nel tempo, non soltanto
chio, consentendo di vedere in qualsiasi (o quasi) situa- relativamente al nostro movimento ma anche a quello
zione. che gli è proprio. Il tempo di risposta (reazione) per evi-
Alcuni studi scientifici e pubblicazioni che hanno esa- tare incidenti o condizioni critiche è fondamentale che
minato microscopicamente la retina dimostrando che sia il più breve possibile.
esiste una grande concentrazione di bastoncelli. Ma esattamente di quanto stiamo parlando? Se
I coni, invece, sono un tipo di cellula specializzata estre- stressiamo questi esempi al caso dell'aviazione militare
mamente più complessa dal momento che sono in gra- siamo ben al di sotto del mezzo secondo. Già per quella
do di distinguere le componenti di colore (RGB) in ma- civile, infatti, alcuni test sono condotti con stimoli com-
niera non dissimile da quanto viene poi effettivamente parabili ad un'immagine ogni 220simo di secondo.
implementato all'interno degli schermi. Questo suggerisce che, in effetti, il nostro cervello sia
Le tre componenti base sono relative, com'è noto, a in grado di lavorare con un numero di stimoli incredibil-
differenti frequenze, o equivalente mente lunghezza mente maggiore dei soli 60 frame al secondo.
d'onda; in dettaglio, queste informazioni sono riportate
in Figura 4. TORNIAMO AL MOTION BLUR
Data la loro natura, con particolare riferimento alla L'importanza del motion blur, dunque, ormai è chiaro,
quantità di informazioni che elaborano, queste cellule ha a che fare con la resa realistica, con il mantenimento
rispondono in meno tempo rispetto ai bastoncelli. del numero di frame al secondo e la qualità complessiva
Il nostro nervo ottico rappresenta il canale di intercon- dell'immagine.
nessione tra il sistema analogico di acquisizione dei Nel campo del digitale di solito è possibile ottenere
dati, ovvero l'occhio con tutto il suo complesso di lenti un'immagine estremamente nitida oppure un effetto blur
ed elementi sensibili, ed il nostro cervello, con partico- di alto livello. Quando si passa dal film alla televisione
lare riferimento la corteccia visiva. Gli impulsi viaggiano oppure al DVD vengono di solito aggiunti quattro frame
attraverso le fibre nervose nell'arco di pochi picosecon- per secondo tramite una tecnica che prende il nome di
di. Mediamente i nervi ottici non sono più lunghi di 3 frame mixing ma ciò dipende anche dal tipo di stan-
cm. Concetti come il settling time possono tranquil- dard di riferimento. Nel caso americano, in cui lo stan-
lamente essere applicati anche in questo campo dard in un solo è l’NTSC così come nel caso europeo,
caratterizzando la funzionalità nervosa e, di conse- in cui invece viene utilizzato PAL, si lavora, come ave-
guenza, le qualità visive dei singoli soggetti. vamo già specificato in precedenza, con diversi refresh
Le neuroscienze studiano da tempo i meccanismi di rate ma anche diverse risoluzioni: 640 × 480 nel primo
funzionamento del cervello ma essendo di gran lunga caso e 800 × 600 nel secondo. Con l'avvento della tele-
l'organo più complesso del quale siamo dotati, i mec- visione ad alta definizione, però tutto è digitalizzato ed il
canismi di elaborazione delle immagini non sono anco- funzionamento parte dal presupposto che ci si muova a

45
SCI&TECH

66 frame al secondo. o 60 e tanto meno siamo in grado di capire se si tratta


Quando si mette in pausa un film durante una cena con di 66 frame al secondo oppure 120. Ciò nondimeno, ri-
oggetti in movimento, avete mai notato che cosa succe- usciamo comunque a vedere la scena.
de? Interrompere un'animazione in un film per bambini, L'occhio umano sembra sia in grado di percepire anche
per esempio, rende l'immagine comunque nitida ovvero 220 frame al secondo e su questo risultato gli svilup-
non si vede il movimento. patori di videogiochi, i produttori di schede video e tutti
Questo dipende dal fatto che non vengono registrate quelli che creano e progettano monitor piuttosto che te-
immagini nitide di ciascun frame ma ciascuna è in mo- levisioni sembrano concordi nel dire che il limite della
vimento ed il fatto che ci sia una sequenza di immagini stimolazione dell'occhio è ben lontano dall'essere an-
che rappresentano il movimento rende tutta la scena cora stato raggiunto. Questo è tanto più vero quanto la
in movimento. Se non ci sono oggetti che si stanno cifra del refresh rate potrebbe anche crescere intorno
muovendo sulla scena, invece, riuscirete a distingue- ai 400 Hz.
re un'immagine nitida che rimane sempre uguale a se
stessa. PROVIAMO A VEDERE SE ESISTE
Se guardate una scena alla televisione o su un qua-
FACCIAMO UN ESEMPIO PER CAPIRE PER- lunque dispositivo in grado di mostrare immagini, e poi
CHÉ IL MOTION BLUR FUNZIONA COSÌ spostare la vostra attenzione e mettete a fuoco il dispo-
BENE. sitivo vi rendete conto che nell'arco di pochissimo tem-
Il fatto che ci siano una certa sovrapposizione e un certo po il dispositivo è un'immagine più nitida dell'immagine
grado di movimentazione all'interno di un'immagine pro- stessa che stavate guardando prima.
posta è un modo per simulare la fluidità del passaggio Se aveste avuto una rappresentazione della stessa
da un'immagine alla successiva. Allo stesso modo pos- transizione con un maggior numero di frame al secon-
siamo dire che un oggetto che ruota simula la gravità: do, sarebbe stata ancora più rapida. Questo lo avete
Questa immagine, disponibile nel Play Store di Google visto in moltissimi film, con i cambi di scena oppure con
come parte del set di immagini che accompagnano l'app i cambi di punto messo a fuoco all'interno della stessa
Gravity Sim Free (mostrata in anteprima tramite una scena. Succede spesso quando si vuole identificare
sua schermata in Figura 5), restituisce esattamente l'i- un cambio di soggetto. Questo suggerisce che il reale
dea del messaggio che stiamo provando a comunicarvi. limite sia il dispositivo che mette "in scena" l'immagi-
La rotazione su un piano non ha niente a che fare con la ne e nongià l'occhio. In particolare, pensate al cinema.
gravità dal momento che il fenomeno è tridimensionale Ciascuna immagine è sicuramente più grande di quanto
e coinvolge anche una certa evoluzione temporale, e la vedreste se fosse la rappresentazione di un oggetto
quindi in realtà le dimensioni sono addirittura quattro. reale e ciascun'immagine viene rappresentata in ma-
Ciò nondimeno, è possibile rendere intuibile il concetto niera istantanea dal proiettore (utilizzando le tecniche
della gravità attraverso l'utilizzo di un movimento ele- codificate proprio dagli standard di cui abbiamo parlato),
mentare. In questo modo l'occhio ed il cervello asso- ovvero rappresentando prima tutte le righe dispari e poi
ciano concetti più complessi con un grado di astrazione le pari con una certa frequenza di refresh.
intermedio che non ha niente a che vedere con la fisio- Esistono videocamere ad alta velocità che sono in
logia del sistema visivo. Provare per credere... grado di lavorare con 44.000 frame al secondo e
anche di più. Questo dovrebbe dare un'idea di quanto
IL LIMITE C’È O NO? effettivamente la rappresentazione possa essere mi-
Se il nostro occhio e tutto il resto del nostro appara- gliorata. In ultima analisi, possiamo concludere che
to visivo sono in grado di fare cose così egregie, vien non è l'occhio umano ad imporre dei limiti ma il di-
da chiedersi se ci sia un limite alle potenzialità e alle spositivo che rappresenta l'immagine.
capacità di cui sembriamo essere dotati. Al momento,
stando al progresso scientifico, le nozioni in nostro
possesso, sembrerebbe di no!
L’autore è a disposizione nei commenti per eventuali
L'occhio sembra in grado di reagire in maniera estre- approfondimenti sul tema dell’Articolo. Di seguito il link per
mamente rapida a stimoli anche piuttosto variegati tra accedere direttamente all’articolo sul Blog e partecipare alla
loro ed il nostro cervello è abbastanza intelligente da discussione:
[Link]
non essere in grado di distinguere se una scena viene
capacita-visive
rappresentata con 24 frame al secondo piuttosto che 30

46

Potrebbero piacerti anche