E L A I R O T I D E
L a c r i p t o v a l u t a I O TA TA Ancora oggi, le macchine riescono a fare il loro lavoro senza l’intervento umano. Se, inoltre, si richiede una transazione autonoma di pagamento tra le macchine, è necessaria una valuta digitale. L’IoT è attualmente molto interessante per la logistica, poiché sempre più pacchi e contenitori devono essere inviati al nostro mercato globale. L’idea di base è semplice: i pacchetti sono identicati da un chip, che non solo memorizza le informazioni sul prodotto ma anche la destinazione. Come i ussi di dati su Internet, le trasmissioni si dirigono verso la destinazione stessa. Se una partita arriva a una macchina smistatrice, la informa della destinazione, verrà ordinata di conseguenza e inoltrata alla sua destinazione. Questi processi funzionano rapidamente e autonomamente senza un’autorità centrale. Il
pacchetto trova così la sua strada. In questo concetto di IoT entra in gioco il Bitcoin che consiste in un database, la blockchain, una sorta di diario in cui sono registrate tutte le transazioni. Il sistema di pagamento Bitcoin utilizza una rete peer-to-peer a cui tutti i computer partecipanti si connettono.
La blockchain è archiviata in modo ridondante e decentrata su tutti i nodi Bitcoin, gestita e costantemente aggiornata sulla rete, eliminando così la necessità di banche. IOTA ore un’elaborazione rapida e sicura delle transazioni, senza Blockchain come sarebbe consuetudine con Bitcoin. Lo IOTA si basa su un nuovo libro mastro distribuito, Tangle, che supera le inecienze dell’attuale design blockchain e introduce un nuovo metodo di consenso in un sistema peer-to-peer decentralizzato. Ciò consente alle persone di utilizzare lo IOTA, ad esempio, per trasferire denadenaro senza alcuna commissione. E in particolare i micro-trasferimenti come le tarie dei parcheggi, l’autolavaggio, l’acquisto di panini o il normale giornale possono essere eseguiti gratuitamente e velocemente. Per l’IoT, dove “le macchine pagano altre macchine” , abbiamo bisogno di un sistema di
pagamento in grado di elaborare minuscole transazioni in quantità enormi e in tempo reale. Deve essere economico, o anche meglio, gratuito, veloce e scalabile. E questo è esattamente quello che Bitcoin non può fare, secondo gli esperti, ma resta da vedere quali miglioramenti si avranno con la nuova rete IOTA. Non senza ragione, molte aziende come la Bosch sono molto interessate a queste tecnologie. Se lo IOTA può prevalere nel mercato, solo il futuro lo mostrerà, perché una “prova del concetto” deve essere fornita nelle applicazioni del mondo reale.
Maurizio Di Paolo Emilio
1
E L A I R O T I D E
L a c r i p t o v a l u t a I O TA TA Ancora oggi, le macchine riescono a fare il loro lavoro senza l’intervento umano. Se, inoltre, si richiede una transazione autonoma di pagamento tra le macchine, è necessaria una valuta digitale. L’IoT è attualmente molto interessante per la logistica, poiché sempre più pacchi e contenitori devono essere inviati al nostro mercato globale. L’idea di base è semplice: i pacchetti sono identicati da un chip, che non solo memorizza le informazioni sul prodotto ma anche la destinazione. Come i ussi di dati su Internet, le trasmissioni si dirigono verso la destinazione stessa. Se una partita arriva a una macchina smistatrice, la informa della destinazione, verrà ordinata di conseguenza e inoltrata alla sua destinazione. Questi processi funzionano rapidamente e autonomamente senza un’autorità centrale. Il
pacchetto trova così la sua strada. In questo concetto di IoT entra in gioco il Bitcoin che consiste in un database, la blockchain, una sorta di diario in cui sono registrate tutte le transazioni. Il sistema di pagamento Bitcoin utilizza una rete peer-to-peer a cui tutti i computer partecipanti si connettono.
La blockchain è archiviata in modo ridondante e decentrata su tutti i nodi Bitcoin, gestita e costantemente aggiornata sulla rete, eliminando così la necessità di banche. IOTA ore un’elaborazione rapida e sicura delle transazioni, senza Blockchain come sarebbe consuetudine con Bitcoin. Lo IOTA si basa su un nuovo libro mastro distribuito, Tangle, che supera le inecienze dell’attuale design blockchain e introduce un nuovo metodo di consenso in un sistema peer-to-peer decentralizzato. Ciò consente alle persone di utilizzare lo IOTA, ad esempio, per trasferire denadenaro senza alcuna commissione. E in particolare i micro-trasferimenti come le tarie dei parcheggi, l’autolavaggio, l’acquisto di panini o il normale giornale possono essere eseguiti gratuitamente e velocemente. Per l’IoT, dove “le macchine pagano altre macchine” , abbiamo bisogno di un sistema di
pagamento in grado di elaborare minuscole transazioni in quantità enormi e in tempo reale. Deve essere economico, o anche meglio, gratuito, veloce e scalabile. E questo è esattamente quello che Bitcoin non può fare, secondo gli esperti, ma resta da vedere quali miglioramenti si avranno con la nuova rete IOTA. Non senza ragione, molte aziende come la Bosch sono molto interessate a queste tecnologie. Se lo IOTA può prevalere nel mercato, solo il futuro lo mostrerà, perché una “prova del concetto” deve essere fornita nelle applicazioni del mondo reale.
Maurizio Di Paolo Emilio
1
MAKER
EDITORIALE
La criptovaluta IOTA
1
Founder & Publisher
Emanuele Bonanni Editor-in-Chief
Sistema di Accesso con QRcode per Raspberry Pi
ROBOT 3
Corso di Elettronica per 16 ragazzi 7-12: primo approccio
Maurizio Di Paolo Emilio Editorial Assistant
Maria Pisani Marketing
Sara Ercolani Advertising
Francesca Ceroni
[email protected] Gr aphic aphic Designer Designer
Marilde Mirra Circulation
Users - 129.701 Social Network - 124.144 © 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 Autorizzazione alla pubblicazione pubblicazione del Tribunale MI n. 20 del 16/01/2006
Realizziamo un semplice Vocal Commander con ESPertino
47
TECH
Sperimentiamo l’elettricità statica con ESPertino
10
Le transazioni nel sistema IOTA con il protocollo Tangle
31
BOARD
Una piattaforma multisensore con interfaccia Arduino La scheda di sviluppo Marvin LoRa per l’IoT
23
43
Corso sugli Aeromobili 35 a Pilotaggio Remoto partendo da zero: descrizione del modello matematico
R E K A M
Sistema Sistema di Accesso con QRcode per Raspberry Pi di Gabriele Guizzardi
Le capacità di elaborazione dati e le librerie a disposizione per Raspberry Pi sono molto ampie e per- mettono di prototipare un’ampia gamma di progetti. In questo articolo vedremo come impostare il Raspberry per poter leggere “al volo” i QRcode stampati su carta o visualizzati su smartphone per comandare o eseguire lavori. L’utilizzo del QRcode è ultimamente incrementato e permette di gestire anche grandi quantità di informazioni in formazioni in spazi ristretti come una immagine quadrata. Una camera CSI e un pugno di righe di Python ci apriranno nuovi orizzonti di interfacciamento.
INTRODUZIONE robabilmente sappiamo tutti che il nome QRcode
oggetti, monumenti, parti elettroniche e quant’altro dispongono di questo codice per la loro immediata identi-
signica Quick Response Code e che altro non è
cazione tramite Smartphone.
P
se un barcode a due dimensioni, forse però non tutti sanno che in un solo crittogramma possono essere contenuti 7.089 caratteri numerici o 4.296 alfanumerici. Nato poco più di una ventina di anni fa per identicare le
parti di ricambio nell’industria automobilistica ne esistono oggi di diverse forme e dimensioni (per es. esistono i micro qrcode) e ultimamente si trovano produttori che li personalizzano con loghi e colori. Oggi quasi tutti gli
Per poter leggere un QRcode lo si deve fotografare (o comunque si deve sottoporre ad uno streaming di dati che verranno trasformati in immagine), analizzarlo poi con un software che lo identica all’interno dell’immagine, ne legge le varie aree e ne produce il contenuto sotto forma di stringa. Questa stringa può essere formattata in vari modi, dal semplice testo, all’URL di un dominio, al formato Vcard di una rubrica ad un punto
Figura 1: programma di congurazione 3
MAKER
vete mai usata ne resterete aascinati.
IL PROGETTO Per questo piccolo ma utile progetto, oltre ad una scheda embedded Raspberry Pi 2 o 3 con installato il sistema operativo Raspbian aggiornato all’ultima versione (consiglio sempre e comunque la versione 3 della scheda se non avete già una RPi e dovete quindi procurarvela), sono necessari, come detto, una telecamera PiCamera CSI, un modulo relè
Figura 2: abilitazione Interfacce
geograco, ecc. Per Raspberry Pi vi sono diverse librerie e diverse soluzioni per poter leggere ed analizzare un QRco-
e la libreria ZBAR. Con la Raspberry Pi 3 avrete una maggior velocità operativa e meno tempi di attesa nel caricamento dei programmi. Inoltre, essa fornisce tante altre innovazioni, come potete osservare in altri articoli inerenti la RPi. Per prima cosa colleghiamo la camera al Raspberry Pi e attiviamola, se ancora tale operazione non dovesse essere stato fatta in precedenza. Per attivare la camera, quindi,
ra USB. E’ possibile creare programmi e script oppure
occorre lanciare il programma di congurazione raspiconfg oppure si può utilizzare il nuovo conguratore
eseguire le operazioni di scan da riga di comando. La
da menù, molto semplice da utilizzare. Le videate che
soluzione che ho studiato è quella che mi ha dato meno
seguono alle gure 1 e 2 sono relative al nuovo desktop
problematiche e a mio giudizio più semplice da implementare forse anche a discapito di metodi più potenti e performanti.
Pixel. Portarsi su Interfacce e abilitare Camera.
de, sia con la camera CSI sia utilizzando una came-
LA CAMERA La camera usata è una PiCamera PiCamera ver. ver. 2.1. Rilasciata nell’aprile 2016, la seconda versione della PiCamera è la nuova versione di questo accessorio, che è andato a
sostituire l’ormai vecchio modello PiCamera v1.3. Resta compatibile con tutti i modelli di Raspberry esistenti. Infatti, il cavo piatto è rimasto invariato, comunque atto ad
essere inserito nel connettore dedicato sul lato superiore di tutte le Raspberry. Questo nuovo modulo monta una fotocamera Sony IMX219 con fotocamera da 8 megapixel, in modo da sostituire il vecchio OmniVision OC5647 con 5 megapixel sul modello precedente. Le dimensioni sono veramente ridotte, 25 mm x 23 mm x 9 mm per un peso di 3 grammi circa. Ne esiste un modello anche all’infrarosso. Se non l’a-
Dopodiché apriamo la nestra di terminale, digitiamo il
comando sudo su per evitare di anteporre sudo ad ogni altro comando inoltrato successivamente e installiamo la libreria. In questo modo otterremo i diritti di root per qualsiasi altra operazione. Ovviamente, è importante
rammentare che tali super poteri potrebbero essere anche pericolosi, in quanto basterebbe l’invio erroneo di un solo comando, magari per una svista o una sbadataggine) per cancellare denitivamente, e senza possibilità di recupero, tutto il sistema operativo con annesso l’intero le system.
$ apt-get install python-zbar python-qrtools
Ora colleghiamo la scheda relay (vedi gura 3) alla Raspberry. Servono solamente tre li di connessione: la
massa, i 5V e il comando d’impulso (che trovate soli4
MAKER
tamente indicato come IN o SIG sui moduli relay), in questo progetto ho usato il pin 11 corrispondente alla GPIO17. Io ho usato un semplice modulo da due relay come quelli che si trovano nei kit per Arduino e Raspberry. Ovviamente ho utilizzato uno solo dei due relay.
# Bisogna impostare qui la password password = “1234567890” while 1:
# crea uno stream dati in memoria stream = io.BytesIO() # visualizzazione dello streaming della camera with picamera.PiCamera() as camera:
camera.exposure_mode = ‘auto’ camera.preview_fullscreen = False # ridimensiono il preview per poter interrompere in caso di problemi camera.preview_window = (300, 200, 640, 480)
camera.start_preview() sleep(1) # aumentare se si vuole inquadrare
Figura 3: modulo relay
Se volete usare il relay per comandare un carico come una lampada potrebbe aiutarvi lo schema di cui alla gura 4: E per nire il codice.
meglio camera.capture(stream, format=’jpeg’) # recupera tutto il usso per creare l’immagine
stream.seek(0) pil = Image.open(stream)
# Progetto di Accesso con QRcode
# inizializza lo scan dell’immagine
# scritto da Brain & Bytes
scanner = zbar.ImageScanner()
# per Elettronica Open Source - EOS-Book # congura il lettore
import io
scanner.parse_cong(‘enable’)
import picamera import hashlib
pil = pil.convert(‘L’)
import zbar
width, height = pil.size
import RPi.GPIO as GPIO
raw = pil.tostring()
from PIL import Image
# wrap dati della immagine
from time import sleep
image = zbar.Image(width, height, ‘Y800’, raw)
# inizializzo il pin della porta GPIO
# cerca un QRcode
GPIO.setmode(GPIO.BCM)
scanner.scan(image)
GPIO.setwarnings(False) GPIO.setup(17, GPIO.OUT)
# stampa il valore badge e comanda il relay
GPIO.output(17, 1)
# se la password corrisponde ed e’ esatta for symbol in image:
5
MAKER
if hashlib.sha256(password).hexdigest() == symbol.data:
Il cuore del programma è nel WITH dove la libreria che gestisce la camera la accende, la imposta come nestra sullo schermo ed inne ne cattura una immagine che
sarà poi elaborata.
GPIO.output(17, 0) print ‘SHA256 : ‘, hashlib.sha256(password).
hexdigest() print symbol.type, ‘: ‘, ‘%s’ % symbol.data
sleep(1) GPIO.output(17, 1)
else: print ‘QRCODE : non corrisponde alla pas-
ESECUZIONE Per poter utilizzare questo progetto si deve quindi realizzare un QRcode dalla crittograa di una stringa in SHA256. La scelta della crittograa è alquanto arbitraria anche se si cerca di evitare crittograe troppo semplici
o non più sicure. E’ meglio, infatti, prevedere un minimo di sicurezza aggiuntiva. Ho creato quindi anche un piccolo e utile servizio web che trovate a questo URL:
sword’
“
# pulisci e cancella
https://www.brainandbytes.com/ qrcode/
del(image)
Il funzionamento è molto semplice ed
elementare, digitate numeri e lettere che volete trasformare in QRcode nella casella Password e cliccate sul pulsante CREA QRCODE. Ovviamente la password dovrà corrispondere a quella inserita in precedenza nel codice Python. Per esempio, possiamo creare un QRcode della stringa numerica 1234567890, visualizzarlo e posizionarlo davanti alla telecamera. Possiamo anche stamparlo su carta o altro. Noterete durante i test che la sensibilità di lettura è molto accettabile anzi, Figura 4: schema relay
Le parti del codice da sottolineare e focalizzare sono il ciclo innito, nel quale il programma continua a fotografare l’ambiente inquadrato dalla telecamera e nell’immagine ricavata cerca un QRcode. Se c’è un QRcode e questo è uguale e corrispondente alla password indicata in codica SHA256, allora verrà eccitato il relay per
un eventuale accesso e presenterà a video la stringa
direi, più che buona, sia per quanto riguarda l’inclinazione del QRcode sia per quanto riguarda la luminosità dello schermo dello smartphone/tablet o dell’ambiente stesso. Alla gura 5 potete notare il servizio web in funzione. Ora possiamo avviare il programma, se tutto è corretto otterremo un risultato simile a quello riportato in gura 6. Nota: per chi se lo stesse chiedendo, si tratta di Ninja
IDE.
crittografata (SHA256) del QRcode stesso (per scopi
di debug ma voi ovviamente potete eliminare la visualizzazione o trasformarla in un Log su le, in caso di applicazione denitiva). In questo modo solo chi ha la password potrà entrare.
Bisogna ricordare che i QRcode troppo piccoli, nell’ordine di 1 o 2 cm per lato, potrebbero non essere letti dal sistema se non perfettamente stampati e ben deniti,
sia se riprodotti su carta che su schermo. Potrebbero 6
MAKER
sorgere problemi anche con codici QR colorati in modo disordinato e non omogeneo. Preferite, dunque, dei codici dalle dimensioni idonee e perfettamente stampati in modo molto nitido.
LATO WEB Per creare e realizzare il servizio web sono partito dal codice open source disponibile sul sito Sourgeforge, al seguente indirizzo:
“
http://phpqrcode.sourceforge.net/
Al quale ho modicato l’index.php in questo:
<meta name=”viewport”
content=”width=device-width,initialscale=1,maximum-scale=1,user-scalable=no”> Figura 5: QRcode da smartphone/tablet
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1”> <meta name=”HandheldFriendly”
content=”true”>
‘;
echo ‘
ACCESSO CON QRCODE
’;
//set it to writable location, a place for temp generated PNG les
$PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.’temp’.DIRECTORY_SEPARATOR;
//html PNG location prex $PNG_WEB_DIR = ‘temp/’; Figura 6: esecuzione programma (notare la nestra dell o streaming video)
7
include “qrlib.php”;
MAKER
//of course we need rights to create a temp dir
//cong form
if (!le_exists($PNG_TEMP_DIR))
echo ‘
’;
echo ‘’;
if (isset($_REQUEST[‘data’])) {
//it’s very important!
if (trim($_REQUEST[‘data’]) == ‘’)
die(‘la stringa non può essere vuota!
indietro’);
// user data
$lename = $PNG_TEMP_DIR.’test’.md5($_RE
QUEST[‘data’].’|’.$errorCorrectionLevel.’|’.$matrixPoi ntSize).’.png’;
QRcode::png(hash(‘sha256’,$_
REQUEST[‘data’]), $lename, $errorCorrectionLevel,
$matrixPointSize, 2);
}
//display generated le
echo ‘
Figura 7: videata su smartphone
basename($lename).’” />
’; Il codice genera un QRcode crittografato SHA256 della password digitata nella casella. Il risultato è quello che 8
MAKER
vedete in gura 7 sul tablet. A dierenza della versione
originale del programma ho anche aggiunto una serie di <meta> per rendere la pagina il più responsive possibile, ovviamente è solo un lavoro parziale ma ha un
Anche Google ha un servizio uguale. https://chart.googleapis.com/chart?chs=300x300&cht =qr&chl=https://www.brainandbytes.com&choe=UTF-8
risultato accettabile. La dierenza sta nel nome dei parametri, nell’indicare
ALTERNATIVA JAVASCRIPT Segnalo anche, in alternativa al PHP, una versatile e specica libreria per realizzare QRcode in Javascript.
la grandezza del QRcode in pixel e nella possibilità di indicare la codica, in questo caso UTF-8.
ULTIME INFORMAZIONI http://davidshimjs.github.io/qrcodejs/
Essa risulta molto semplice da usare e da inglobare nei propri progetti web. E’ possibile per esempio sfruttare e utilizzare alcune sue funzioni per adattarla al proprio lavoro. Ecco un esempio per creare il QRcode di un indirizzo web, dimensionarlo e cambiargli il colore.
<script type=”text/javascript”>
e di necessità: camera.brightness = 50 : usare un valore compreso tra
1 e 100 per regolare la luminosità camera.resolution = (2592, 1944) : risoluzione da 640x480 a 2592x1944 in 4:3 di ratio oppure 1920x1080 in 16:9 camera.annotate_text = “testo da visualizzare” : testo in
sovraimpressione all’immagine
var qrcode = new QRCode(document.
camera.annotate_size = 120 : grandezza del testo
getElementById(“qrcode”), {
Vi sono altri metodi che si possono impostare, trovate
text: “https://www.brainandbytes.com/”, width: 128, height: 128,
una documentazione completa al seguente indirizzo: http://picamera.readthedocs.io/en/release-1.10/
ALTRI UTILIZZI
colorDark : “#000000”,
Nell’uso pratico il QRcode può risultare perfetto per for-
colorLight : “#”,
nire informazioni ai propri clienti e per prolarli nelle loro scelte, per esempio un negozio che pone a anco dei
correctLevel : QRCode.CorrectLevel.H
});
ALTERNATIVA API Se volete lavorare ancora meno, eseguendo e scrivendo meno codice, eccovi un servizio alternativo online di API al quale passare dimensioni e testo (oppure URL, ecc.). Molto rapidamente avrete un QRcode a video di quanto richiesto. Se per esempio cliccate il seguente URL otterrete il QRcode del sito HTTP. h t t p : / / w w w. c o d e j u n g l e . o r g /a p i / q r _ i m g . php?s=8&d=https://www.brainandbytes.com Provate, adesso, a creare un QRcode modicando il va-
lore di s (size) che indica le dimensioni di un lato dell’immagine e cambiando il testo del parametro d. Inquadrate il QRcode prodotto dal browser, con una applicazione da smartphone e vedrete il testo o l’URL inserito. 9
Per concludere l’articolo vi lascio con alcune interessanti info sui comandi della PiCamera che possono esservi utili per regolare al meglio l’immagine in caso di bisogno
propri prodotti un QRcode da inquadrare per avere informazioni potrà anche capire quali sono i prodotti più selezionati e inquadrati anche se non necessariamente acquistati. Esso potrà inoltre fornire ulteriori informazioni come taglie, modelli, prodotti simili, basterà aprire al cliente una pagina web da consultare per cui si tratterebbe di un QRcode con un link URL, opzione molto usata da molti operatori commerciali. Nell’abito degli accessi, per rimanere in tema del presente articolo, potrà essere utile registrare chi entra o esce attribuendo diversi QRcode alle persone autorizzate e soprattutto tenere traccia degli orari. In questo caso consiglio di aggiungere la gestione dei QRcode tramite database.
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: https://it.emcelettronica.com/sistema-di-accesso-con-qrcode-
per-raspberry-pi
H C E T
Sperimentiamo l’elettricità statica con ESPertino di Giovanni Di Maria
E’ sempre davanti a noi, ci confrontiamo con essa in qualsiasi occasione eppure non la vediamo mai. Di cosa si tratta? Dell’elettricità statica, una importantissima e misteriosa forza che ci fa sempre compa- gnia. Utilizziamo ESPertino, e qualche altro componente, per studiarla un po’ più da vicino, in maniera semplice e divertente.
INTRODUZIONE
L
L’ELETTRICITÀ STATICA
e grandi scoperte nella sica sono state fatte due
o tre secoli fa, quando l’innovazione tecnologica era proprio agli inizi e non esistevano, ovviamente, gli strumenti di misura che la tecnologia di oggi mette a disposizione. L’articolo che andiamo a leggere è rivolto principalmente alla sperimentazione e si propone di far scoprire gli eetti dell’elettricità statica, rilevandola
con diversi dispositivi. Un’utile lettura per rivangare il passato e provare il nuovo.
Quante volte abbiamo preso una forte scossa scendendo dalla nostra automobile, toccando la portiera. E’ capitato sicuramente a molti. Oppure, sorando il nostro
amico ci siamo beccati una “bella” e fastidiosa scarica elettrica. Altre volte, pettinandoci i capelli o togliendoci il maglione abbiamo sentito dei “crepitii” e, al buio, visto addirittura delle minuscole scintille. Anche trascinando il carrello della spesa, al supermercato, è possibile ricevere, a volte, tale fastidioso colpo. L’elettricità statica
Figura 1: l’Hindenburg esplose per una scintilla causata dall’elettricità statica 10
TECH
è, spesso, dolorosa e pericolosa ma se utilizzata bene è fonte di tanti vantaggi. Mentre la corrente elettrica è un usso di elettroni, l’elettricità statica è uno squilibrio tra cariche negative e positive nei corpi. Queste
cariche possono accumularsi sulla supercie di un oggetto no a trovare un modo per essere rilasciate e scaricate in un solo istante. Uno dei modi per scaricarle è
attraverso l’attuazione di un corto circuito. Una delle maggiori cause di accumulo dell’elettricità statica è il contatto tra materiali solidi. Quando due oggetti vengono stronati tra loro, uno di essi “regala” gli
elettroni e diventa più carico positivamente mentre l’altro materiale raccoglie tali elettroni e diventa più carico negativamente. L’eetto è più osservabile quando l’aria è secca.
Quando i due oggetti sono particolarmente vicini, o entrano in contatto tra di loro, può scoccare una scintilla, che può essere anche caratterizzata da una dierenza
di potenziale di parecchie decine di migliaia di volt. Il suo eetto non è letale poiché, oltre a durare pochi millesimi di secondo, la scarica non ha praticamente corrente (vi sono pochissimi elettroni). Può, invece, innescare un’esplosione in stanze sature di gas o vapori di sostanze inammabili oppure, fatto molto consueto tra
i progettisti di elettronica, può distruggere i componenti elettronici, specialmente quelli di tipo MOS. Anche un liquido che percorre un tubo è, potenzialmente, generatore di elettricità statica. Quando si fa rifornimento di benzina con la pompa, occorre sempre prestare la massima attenzione e scaricare a terra le parti metalliche dell’auto. Molti incendi ed esplosioni, apparentemente senza motivo, sono stati causati proprio dall’elettricità statica. Anche il dirigibile Hindenburg (vedi gura 1) fu distrutto da una piccola scintilla che
Figura 2: un semplice elettroscopio realizzato in casa
possiamo costruire un semplicissimo elettroscopio. Anche i bambini potranno creare, con divertimento, tale dispositivo didattico. Tutto quello che serve è: • Un barattolo di vetro trasparente con coperchio
isolante; • • •
Un lo elettrico rigido;
Un foglio di alluminio estremamente sottile; Una sfera metallica (opzionale).
fece esplodere in un attimo tutto l’idrogeno, altamente inammabile in esso contenuto. Durante il volo, infatti,
aveva accumulato una quantità enorme di elettricità sta-
Tutto quello che occorre fare è assemblare i materiali sopra elencati, come visibile in gura 2, al ne di realiz-
di una piccola ma fatale scintilla. Il pallone, ricordiamolo,
zare un dispositivo sensibile alle cariche elettrostatiche.
era pieno d’idrogeno, altamente inammabile.
E’ suciente avvicinare un corpo fortemente elettriz-
Ovviamente l’elettricità statica non fa solo danno. Essa
zato alla sommità dell’elettroscopio per vedere le foglio-
è molto utilizzata anche nell’elettronica. Si pensi, ad
line di alluminio allontanarsi tra di loro. Molta documentazione a riguardo si può attingere dalla Rete.
tica ed è bastato veramente poco per attivare l’innesco
esempio, quando si carica un condensatore elettrolitico e si stacca, poi, l’alimentazione. Le armature restano polarizzate per molto tempo. Se si avvicinano, poi, i due contatti del componente sotto un certo limite di distanza, scoccherà un’importante scintilla.
ATTRAZIONE DI CARTA E POLISTIROLO
PER INIZIARE, REALIZZIAMO UN SEMPLICE ELETTROSCOPIO
Il seguente esperimento mostra facilmente come due corpi elettrizzati di carica opposta si attirino tra loro. Si preparino alcuni pezzettini piccolissimi di carta o di polistirolo. Si sfreghi, con molta energia, una penna di plastica (o un pettine) contro un panno di lana. La si
Per cominciare a sperimentare con l’elettricità statica
avvicini, dunque, ai pezzettini di carta: si vedrà che essi
11
TECH
Figura 3: schema elettrico dell’elettroscopio con ESPertino
vengono istantaneamente, e con forza decisa, attratti dal corpo in plastica altamente elettrizzato. Più l’aria circostante risulta secca e più il fenomeno è evidente.
ESPERTINO E L’OPAMP TL081 Finalmente, per il prossimo esperimento utilizziamo ESPertino, a cui colleghiamo anche un amplicatore operazionale ester no. Quest’ultimo è indispensabile per assicurare una impedenza altissima d’ingresso del circuito sensore. Nella fattispecie, la nostra scelta è caduta sul modello TL081,
un opamp a FET molto veloce e con una resistenza d’ingresso veramente alta, tipicamente 1000 Giga ohm (1012 ohm oppure 1 Tera ohm). Esistono sul mercato modelli con una resistenza ancora più elevata ma, per i nostri scopi, sarebbero del tutto inutilizzabili, in quanto essi risulterebbero sempre in condizione di saturazione.
SCHEMA ELETTRICO La gura 3 mostra lo schema elettrico del
circuito, composto dalle due unità prima citate. Il sensore è formato dal TL081, collegato in congurazione d’inseguitore di tensione (voltage follower a guadagno
unitario). Con questa soluzione si assicura una impedenza d’ingresso estremamente
Figura 4: il semplice cablaggio dell’elettroscopio con ESPertino 12
TECH
elevata (pari a quella intrinseca dell’operazionale), una impedenza di uscita alquanto bassa e un guadagno “disturbato” da alcun evento elettrico esterno (se non in minima parte dalla temperatura). Il piedino 2 del TL081 rappresenta l’ingresso invertente mentre il piedino 3 l’ingresso non invertente.
il programma sulla scheda ESPertino, si può richiamare e avviare immediatamente il plotter seriale, accedendo all’omonima voce sotto il menù “Strumenti” dell’IDE di Arduino, giunto alla versione 1.8.5 al momento della stesura del presente articolo. Si inizierà a vedere il livello di tensione a riposo dell’OPAMP. Le piccole uttuazioni di segnale sono del tutto normali in quanto il sistema
IL CABLAGGIO
acquisisce dierenti livelli di tensione cinque volte al secondo. Si stroni, adesso, una penna di plastica su
unitario. In pratica, il lavoro dell’amplicatore non viene
Il collegamento tra i due componenti è estremamen-
te semplice e si può realizzare con una semplice breadboard o con una piccola basetta millefori. La gura 4 mostra il cablaggio del sistema. Il TL081 è alimentato dallo stesso ESPertino. L’uscita di quest’ultimo è colle-
gata direttamente al suo ingresso invertente mentre la stessa uscita fa capo all’ADC dell’ESP32. L’ingresso del circuito merita una particolare attenzione. Il piedino 3 non è collegato a nulla e deve essere lasciato libero e piegato verso l’alto, a mo’ di piccola antenna, per essere in grado di captare le cariche elettrostatiche circostanti.
un panno di lana, molto velocemente, e la si avvicini, senza toccarla, all’estremità del piedino 3 del TL081. Si noteranno dei picchi signifcativi di tensione sul grafco, come mostrato in gura 5. La loro altezza dipende
da molteplici aspetti e parametri come, ad esempio, alla quantità di carica elettrica accumulata, alla distanza, al tasso di umidità presente nell’aria e al tipo di materiale isolante utilizzato. Se poi la bacchetta isolante dovesse toccare l’antenna ricevente, il graco registrerebbe una
grossa saturazione di segnale per circa 5-10 secondi. E’ realmente dicile che l’amplicatore operazionale venga distrutto, occorrerebbe davvero l’eetto di un forte
LO SKETCH Il corto e semplice programma che segue ha il compito di acquisire il segnale analogico proveniente dall’esterno, attraverso l’ingresso ADC di ESPertino, e d’inviarlo nuovamente verso la porta COM del computer, per poter essere visualizzato sul monitor seriale oppure osservato sicamente e gracamente sul plotter seriale.
Esso risulta davvero molto elementare e non necessitano ulteriori commenti in merito. Per migliorare la risposta si può, eventualmente, accorciare ancora di più la pausa di attesa durante la lettura dei campioni esterni di tensione.
void setup() {
potenziale statico. Al posto della penna di plastica si può provare a utilizzare un accendigas piezo o, meglio ancora, avvicinare il sensore a un vecchio televisore dotato di schermo CRT. Quando esso si accende, una gran quantità di elettricità statica viene generata attorno al tubo catodico e ciò si può evincere dalla forte capacità del monitor di attirare piccoli pezzetti di carta, i peli della mano e altri corpi leggeri, nonché dalla emissione di brevi ma decisi crepitii. Il dispositivo creato è molto sensibile e se lo si lascia attivo per qualche giorno, magari registrando il segnale con un data logger, è possibile osservare le variazioni di tensione dovute alla presenza del Sole.
analogSetAttenuation(ADC_6db); // Attenuazione ADC analogReadResolution(12); Serial.begin(9600);
// Risoluzione ADC a 12 bit
// Congura velocità della comunicazione seriale
ESPERTINO, TL081 E IL RILEVATORE DI PICCO STATICO
Utilizzando il medesimo circuito di cui sopra, e aggiunvoid loop() { gendo idealmente un diodo int digitale = analogRead(35); // Legge la tensione analogica Led alla porta 5 di ESPertino (già presente sulla scheSerial.println(digitale); // La invia sulla seriale da), possiamo creare una delay(200); // Breve pausa (si può abbassare) sorta di rilevatore di picco } massimo che ha lo scopo d’illuminare, per un breve lasso di tempo, il diodo Led onboard quando il circuito registra un forte potenziale COLLAUDO E PROVE PRATICHE Dopo aver correttamente digitato, compilato e caricato statico. E’ davvero molto suggestivo avvicinare la penna }
13
TECH
Figura 5: le prove con l’elettroscopio elettronico
void setup() { analogSetAttenuation(ADC_6db); // Congura attenuazione ADC
analogReadResolution(12); Serial.begin(9600);
// Risoluzione ADC a 12 bit
// Setta la velocità della comunicazione seriale
pinMode(5,OUTPUT);
// Porta 5 in uscita (per il diodo Led)
digitalWrite(5,HIGH);
// Spegne il Led (è al contrario)
} void loop() { int digitale = analogRead(35); if(digitale>3000) {
// Se la tensione supera un certo livello......
digitalWrite(5,LOW);
delay(1000);
// Legge la tensione analogica
// Accende il Led (è al contrario)
// Tempo durante il quale il diodo Led resta acceso
digitalWrite(5,HIGH); // Spegne il Led (è al contrario)
} Serial.println(digitale); // Invia i dati sulla seriale delay(200);
// Piccola pausa (si può abbassare)
}
14
TECH
nale deve risultare scollegato dal circuito e rivolto in su. In pratica esso deve essere lasciato libero. Se, tuttavia, la tensione a riposo in uscita dovesse risultare troppo bassa, anche se le prove del suo funzionamento vanno a buon ne, si può tentare di adottare una piccola antenna saldata direttamente sullo stesso terminale. Si saldi, allo scopo, uno spezzone di lo di rame rigido di
circa 5 cm. sullo stesso piedino (vedi gura 6) e si misuri la tensione d’uscita
a riposo. Con un piccolo tronchesino si tagli, dunque, un pezzetto di antenna alla volta no a quando si leggerà, in
uscita, una tensione pari a VCC/2, ossia di circa 2,5V (o un valore digitale di 2048, che dir si voglia). I piedini dell’integrato TL081 sono molto fragili e non si possono sottoporre a tante piegature poiché si spezzerebbero subito. La gura 6 mostra un’antenna presaldata, ma si può adottare tranquillamente un unico spezzone di lo di rame rigido e
pulito.
CONCLUSIONI La natura ci circonda di tanti fenomeni che non aspettano altro di essere scoFigura 6: l’antenna, da accorciare opportunamente con tanta attenzione, auperti, osservati e studiati. L’elettricità menta la sensibilità del dispositivo statica fornisce tante occasioni per intraprendere esperimenti didattici per elettrizzata al sensore e notare l’accensione del diodo nulla pericolosi. Come si può notare, anche ESPertino Led, per la durata di un secondo. Al posto del semiconpotrebbe diventare un utile strumento didattico con cui duttore luminoso si potrebbe utilizzare un piccolo buzzer intraprendere tanti esperimenti nelle scuole. E’ molto o un altro idoneo avvisatore acustico. In teoria sarebbe interessante e formativo, infatti, sapere che tutto possibile anche sostituire l’OPAMP Tl081 con l’altro mociò che è intorno a noi appartiene all’Universo. Gli dello più famoso 741, ma occorre considerare che la antichi avevano molta paura dei fenomeni elettrici proprio perché la loro ignoranza in materia li portasua intrinseca impedenza d’ingresso è molto più bassa (nella pratica essa oscilla attorno ai 6 Mohm), per cui va a considerarli come azioni diaboliche, misteriose e anche la sua sensibilità risulterebbe alquanto comprooscure. Per fortuna noi viviamo in un tempo in cui tutto messa e, in ogni caso, non suciente per i nostri scopi.
è scienticamente provabile e dimostrabile, anche con
A seconda della tensione a riposo fornita all’uscita dell’operazionale, occorre ritoccare leggermente il valore della condizione di confronto, contenuta nella clausola “if” dello sketch.
una strumentazione estremamente economica e alla portata di tutti.
Leggi anche: Tesla e l’energia “libera” che ci circonda
ALLUNGAMENTO DELL’ANTENNA Si ricorda che il piedino 3 dell’amplicatore operazio15
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: https://it.emcelettronica.com/sperimentiamo-lelettricita-statica-
con-espertino
R E K A M
Corso di Elettronica per ragazzi 7-12: primo approccio di Giovanni Di Maria
Parte da questo mese un corso di elettronica base, indirizzato esclusivamente ai bambini con età com- presa tra i sette e i dodici anni. Il corso sarà costituito da quattro puntate e fornirà i primi rudimenti sull’elettricità e sull’elettronica, in maniera molto semplice, divertente e visuale. Cerchiamo di creare un terreno fertile per la futura generazione che sarà, poi, quella che guiderà il mondo di domani, basato sicuramente sulla tecnologia.
INTRODUZIONE
I
bambini di oggi, probabilmente, fanno meno fatica a comprendere l’elettronica rispetto a quelli d’ieri. La tecnologia, allo stato attuale, li immerge comple-
•
•
tamente in quelle che costituiscono, a tutti gli eetti, i
dispositivi elettronici di normale utilizzo. TV, computer, cellulari, tablet, automatismi, robot, sono tutti congegni di uso comune e questo, i bambini, lo sanno. Anche l’utilizzo dei termini tecnici è diventato corrente e alla por tata di tutti. Oggi è normale sentire pronunziare, anche dai bimbi in tenera età, parole come WiFi, Led, connes-
sione, Internet, circuiti e altri. Il corso sarà anche pratico e spesso vi saranno dei semplici circuiti da realizzare, per nulla pericolosi ma divertenti. Invitiamo, dunque, i giovani tecnici a seguire con interesse e tanta curiosità le semplici nozioni che forniremo in queste quattro puntate, magari coadiuvati dai loro papà, che li assisteranno nei loro progressi.
• • • •
Una piccola breadboard, con cui eettuare facilmente le connessioni tra i componenti senza il saldatore; Alcuni componenti elettronici di base come, ad esempio, resistenze, diodi Led, lampadine, condensatori, ecc; Cavetti rigidi unipolari per eettuare le connessioni; Alcune pile da 4.5V e 9V; Un tester; Si consiglia, anche, di utilizzare il software didattico Circuit construction kit virtual lab, con cui si potranno approntare i primi circuiti elettrici al PC, senza il bisogno di realizzarli praticamente.
PROCURIAMO GLI INGREDIENTI Prima ancora d’iniziare la lezione è opportuno procurarsi gli ingredienti, proprio come una vera e propria ricetta di cucina. Lo spirito principale è quello
del divertimento ma focalizzando la didattica, grazie anche alla grande curiosità intrinseca dei bambini. Gli esperimenti che eseguiremo saranno per niente pericolosi ed eettuati senza l’ausilio del saldatore. Pertanto è opportuno, n da
subito, procurarsi i seguenti materiali, mostrati anche in gura 1:
Figura 1: gli occorrenti per il corso di elettronica 16
MAKER
Figura 2: la similitudine tra la corrente elettrica e l’acqua
GLI ARGOMENTI NECESSARI Anché i bambini, ma anche i grandi, comprendano a fondo la losoa dell’elettricità e dell’elettronica, è in-
Osserviamo i due schemi e, benché il primo trasporti corrente elettrica e il secondo acqua pura, possiamo riscontrare che il funzionamento logico è lo stesso. Nel
dispensabile capire alcuni tasselli fondamentali che la governano. Pertanto il corso non può esimersi dal trattare, seppur in maniera ludica e divertente, le seguenti
circuito elettrico possiamo notare la presenza dei se-
tematiche: L’anello chiuso di un circuito, per far capire •
re gli elettroni all’interno del circuito (simile alla pompa dell’acqua che mette in circolo il liquido); una resistenza che ha la funzione di limitare il passaggio della corrente (simile al restringimento del tubo); un utilizzatore di corrente, che può essere una lampada, un motore o qualsiasi altra cosa che funzioni con l’elettricità (simile alla ruota dentata
che la corrente elettrica ha bisogno di circolare senza sosta attraverso un circuito conduttore, dal polo positivo al polo negativo del generatore; • I tre concetti base della tensione, della corrente e della resistenza, tra loro legati attraverso la legge di Ohm. L’argomento sarà arontato anche paragonando la corrente elettrica all’acqua, come abbiamo fatto in un nostro precedente articolo; • I materiali conduttori, isolanti e semiconduttori; Prove pratiche con lampadine, diodi Led, circu• iti in serie e in parallelo; • Alcune misurazioni elettriche. Ovviamente non si può pretendere di più ne’ da un numero così limitato di lezioni ne’ dagli stessi bambini che, seppur come un gioco, devono comprendere alcuni concetti a loro un po’ estranei e complicati.
IL CIRCUITO ELETTRICO: UNA GIOSTRA SENZA FINE
guenti componenti: • un generatore di tensione, che faccia muove-
•
•
che gira con il usso dell’acqua che la colpisce); •
passare la corrente elettrica (proprio come fanno i tubi per far passare l’acqua). Seguendo la direzione delle frecce blu, possiamo aer mare che in un circuito, per funzionare, il usso della
corrente deve essere continuato nel tempo. Se viene a mancare una delle componenti (generatore, resistenza, utilizzatore o conduttori) non c’è più il passaggio di elettroni (o di acqua, nell’altro caso) e tutto si ferma. Sempre sul circuito dell’acqua di cui sopra, facciamo alcune considerazioni: • se capovolgiamo la pompa dell’acqua, il tubo
non pescherà più dal livello sottostante ma cercherà il liquido dall’altro lato bloccando, di fatto,
Bene, iniziamo subito parlando del circuito elettrico. Per comprendere il concetto di corrente elettrica proviamo a paragonare un circuito elettrico a una piccola fontanella natalizia, tanto utilizzata nei presepi, come mostrato in gura 2. 17
dei cavi elettrici, che hanno il compito di far
il funzionamento. Questo signica che non si
possono invertire i poli della batteria (“+” e “-”) tra di loro; •
se togliamo la strettoia del tubo il usso
MAKER
Figura 3: il circuito con diodo Led
•
dell’acqua potrebbe risultare troppo forte per la ruota. Una resistenza, dunque, limita la corrente ai giusti valori di utilizzo; se eliminiamo la ruota il circuito idraulico non ha più lo scopo di esistere. Se togliamo, allo stesso modo, la lampada dal circuito elettrico, esso non avrà più alcuna nalità pratica.
Per riconoscere il senso del diodo Led, bisogna fare riferimento alla gura 4. Esso possiede due terminali:
l’anodo (A) deve essere orientato verso il polo positivo della pila, preceduto solo dalla resistenza, mentre il catodo (K), dal lato smussato, va collegato al polo negativo (massa). Se tale componente si monta con i terminali invertiti, esso non si illuminerà.
PRIMO ESPERIMENTO: ACCENDIAMO UN DIODO LED Siamo pronti, adesso, a eettuare il nostro primo espe-
rimento, anche con l’aiuto del papà. Procuriamo i seguenti componenti: • una pila da 9 Volt; • una resistenza da 470 ohm (con le bande di
• •
colore giallo, viola, marrone), una da 10 Kohm (con bande di colore marrone, nero, arancione) e una da 22 ohm (bande di colore rosso, rosso, nero); un diodo Led rosso (o altro colore); Alcuni fli elettrici, di colore rosso e nero.
Figura 4: il riconoscimento dei terminali di un diodo Led
La prova che andiamo a eettuare non è assolutamente
pericolosa e, anche in caso di errori, non può arrecare alcun danno a cose o a persone. Lavoriamo, dunque, con la massima tranquillità. Assembliamo i materiali come mostrato in gura 3. Se il montaggio è stato eseguito senza errori, si noterà
la normale accensione del Led, con grande gioia di tutti. Durante il lavoro occorre prestare attenzione all’orientamento della pila e del diodo Led. Se montati “al contrario”, infatti, il circuito non funzionerà. La resistenza, invece, è un componente “non polarizzato” e può essere
montato in entrambi i versi.
Dopo aver realizzato il circuito, e constatato che esso funziona a dovere, eseguiamo le seguenti importanti esperienze, che contribuiranno ecacemente ad aumentare la percezione e la padronanza dei circuiti elettrici: •
ESPERIMENTO: Si stacchi e attacchi ripetuta-
mente il lo da un qualsiasi polo dalla pila. Quale
sarà il risultato? •
RISULTATO: Se il lo sarà collegato, il diodo
Led si illuminerà, viceversa rimarrà spento. *** 18
MAKER
Figura 5: eetti ai vari valori di resistenza
•
ESPERIMENTO: Si inverta la polarità della pila,
•
connettendo il polo negativo al lo rosso e il polo positivo al lo nero. Quale sarà il risultato? RISULTATO: Il diodo Led non si illuminerà.
*** •
•
•
vigore. *** •
ESPERIMENTO: Si elimini la resistenza e al
cambiando tra loro il catodo con l’anodo. Quale sarà il risultato?
sarà il risultato? •
RISULTATO: Inizialmente il diodo Led si illumi-
nerà con tanta forza ma poi, visto che non c’è la
limitazione di corrente, il componente si bruce-
ESPERIMENTO: Si sostituisca la resistenza con
rà e la luce, pian piano, si aevolirà. Il diodo può
un’altra dal valore di 10 Kohm (bande di colore marrone, nero, arancione). Quale sarà il risultato? RISULTATO: Il diodo Led si illuminerà debolmente. ***
essere gettato nella pattumiera.
ESPERIMENTO: Si sostituisca la resistenza con
un’altra dal valore di 22 ohm (bande di colore 19
RISULTATO: Il diodo Led si illuminerà con molto
suo posto si colleghi uno spezzone di lo. Quale
***
•
•
ESPERIMENTO: Si inverta il verso del diodo Led,
RISULTATO: Il diodo Led non si illuminerà.
•
rosso, rosso, nero). Quale sarà il risultato?
“
Ricordate che la conoscenza sui circuiti elettrici si apprende facendo tante prove pratiche e dagli errori. Più si sbaglia e più si impara (almeno all’inizio). La sola lettura di un libro non è suciente.
MAKER
• se la resistenza elettrica o il tubo hanno una misura “giusto”, il usso dell’acqua risulta regolare e suciente per lo scopo pressato (gura 5/B); • se la resistenza elettrica ha un valo-
re troppo basso, oppure il tubo e troppo largo, il usso dell’acqua è estremamente potente e, spesso, distruttivo (gura 5/C).
E ADESSO EFFETTUIAMO QUAL- CHE MISURAZIONE La distinzione tra tensione, corrente e resistenza sarà approfondita nelle prossime puntate. Possiamo, tuttavia, eettuare
qualche misura di tensione sul circuito appena realizzato, utilizzando un comune tester e facendoci aiutare dal nostro papà. Figura 6: la misura della tensione sulla batteria
COME SCEGLIERE IL GIUSTO VALORE DEL- LA RESISTENZA?
MISURA DI TENSIONE SULLA BATTERIA
I componenti elettronici devono essere calcolati secondo precise formule matematiche che, nel nostro caso, appartengono alla famosa Legge di Ohm. In questa pri-
Collegando il voltmetro direttamente sulla batteria, come mostrato in gura 6, e rispettando la corretta po-
ma puntata non aronteremo i calcoli, ripromettendoci
leggerà la tensione del generatore. Staccando il diodo Led quest’ultima potrebbe innalzarsi di poco, in quanto
di farlo nel corso delle successive puntate. Il concetto è il seguente: se la resistenza elettrica ha un valore troppo • elevato, oppure il tubo è troppo stretto, il usso dell’acqua risulta limitato e insuciente per lo scopo pressato (gura 5/A);
larità (lo rosso sul positivo e lo nero sul negativo) si
la pila non è più “stressata” dal carico collegato. Non ci
si aspetti, ovviamente, di leggere una tensione “esatta” di 9.000V. Esistono tolleranze dei componenti che spostano leggermente i punti di lavoro per cui una lettura compresa tra 8.5V e 9.2V è del tutto normale. Se la tensione misurata, invece, è al di sotto di 6V vorrà dire che la pila è
da gettare perché scarica.
MISURA DI TENSIONE SUL DIODO LED
Figura 7: la misura della tensione sul diodo Led
Spostiamo adesso i terminali del tester sul diodo Led rispettando, sempre, il corretto orientamento dei puntali, come mostrato in gura 7. Quello rosso va collegato sull’anodo e quello nero sul catodo. A circuito alimentato lo strumento dovrebbe riportare una tensione prossima a 1.8V. Questo fatto ci indica che il Led avrà sempre ai suoi capi una d.d.p. (dierenza di potenziale) di tale entità e che dovrà essere considerata nei futuri calcoli dei componenti elettronici. 20
MAKER
Figura 8: il circuito con due diodi Led in serie
SECONDO ESPERIMENTO: DUE DIODI LED IN SERIE
Figura 11: la maschera di Iron Man con i due occhi luminosi
Come detto prima, il miglior modo per imparare è quello
• •
di sperimentare sempre. Pertanto approntiamo lo sche-
del secondo diodo Led (in alto); dei due diodi Led.
ma elettrico e il cablaggio di cui alla gura 8. In esso
notiamo che vi sono due diodi Led collegati in serie tra loro. In questo caso la stessa corrente attraverserà i due componenti, facendoli illuminare. Dal momento che la resistenza di limitazione è la medesima, la luce emessa dei due diodi sarà lievemente minore.
MISURA DI TENSIONE SULLA BATTERIA Collegando nuovamente il voltmetro direttamente sulla
Colleghiamo i tester come mostrato in gura 10 e mi-
suriamo le varie tensioni (si può usare tranquillamente un solo tester ed eettuare le misure in passi successivi). Come ci si aspetta, il valore letto sul display, ai capi dei due diodi Led, corrisponde a circa 1,8V, come visto anche in precedenza. La tensione ai capi dei due diodi Led, ovviamente, ammonta a 3,6V. E’ tutta una questione di semplice aritmetica, nulla di più.
batteria, come mostrato in gura 9, non si ot terrà alcuna
nuova sorpresa e si leggerà la tensione di 9V.
Leggi anche: 1000 misure con il PoScope Mega1
MISURA DI TENSIONE SUI DIODI LED
IRON MAN CON DIODI LED
Esaminiamo, adesso, la tensione ai capi: • del primo diodo Led (in basso);
Lo schema elettrico di cui sopra può essere utile per allestire la maschera di Iron Man con gli occhi luminosi, proprio grazie alla presenza dei due diodi Led, come mostrato in gura 11.
CONCLUSIONI Le esperienze qui proposte hanno avuto il compito di far “toccare con mano” alcuni componenti elettronici, assieme a qualche semplice circuito elettrico. Non temete se ancora qualche concetto non risulta chiaro. Col tempo e con la
Figura 9: la batteria fornisce sempre la tensione di 9V 21
pratica anche le regole più complicate saranno comprese perfettamente. Non temete di eseguire
MAKER
Figura 10: misura di tensioni ai capi dei diodi Led
le prove e gli esperimenti più vari e disparati, sempre con l’ausilio di una pila e mai con la corrente della presa elettrica di casa. Inoltre sarò sempre a vostra disposizione e non esitate a porre domande e questioni sulla sezione riservata ai commenti dell’articolo. Alla prossima puntata.
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: https://it.emcelettronica.com/corso-di-elettronica-per-ragazzi-7-
12-primo-approccio
22
D R A O B
Una piattaforma multisensore con interfaccia Arduino di Maurizio Di Paolo Emilio
SENSORSHLD1-EVK-101 è una piattaforma shield della ROHM Semiconductor che integra vari sensori (tra cui temperatura, accelerometro, di prossimità) su una singola scheda. La shield utilizza pin di inter- faccia standard Arduino, rendendo possibile la connessione a qualsiasi kit di valutazione.
INTRODUZIONE
S
ensor Shield (SENSORSHLD1-EVK-101) ore
un’alternativa a basso costo che include vari sensori e i pin di interfaccia standard Arduino per il collegamento a qualsiasi kit di sviluppo. Ciò consente la verica immediata del funzionamento del
sensore e facilita la progettazione di dispositivi di sensing, alleggerendo signicativamente il carico di sviluppo, promuovendo l’espansione del mercato dei sensori e nello stesso tempo ore un time-to-market per i
progettisti decisamente all’avanguardia. La shield Sensorshld1-EVK-101 (gura 1) integra i seguenti sensori: BDE0600G - Sensore di temperatura
analogico, BM1383AGLV - Sensore di pressione baro-
gico. H7 - Standard Digital Header. H10 - Intestazione ausiliaria per l’interfaccia del microfono. H6 - Standard Arduino Digital Header (gura 4 e 5).
Prima di collegare la shield con la scheda Arduino UNO è consigliabile eseguire alcune modiche visualizzate in gura 6. I pin I2C (A4,A5) sono in conitto con l’uscita
ADC del sensore UV già presente sulla scheda. Quindi, per reindirizzare questo sulla scheda shield, bisogna disconnettere le reti esistenti rimuovendo R27, R31. Successivamente ricollegare il sensore UV ADC collegando il pad superiore di R31 al pad inferiore di R27. La libreria I2C standard per Arduino è la Wire Library. Mentre questa libreria è suciente per la maggior par te delle situazioni quando si desidera comunicare con i
metrica digitale, BU52014HFV - Sensore interruttore Hall
(omnipolare con polarità discriminante), BM1422GMV - Sensore magnetico, KX122 - Accelerometro digitale, KMX62 - Magnetometro digitale e accelerometro, KXG03 - Giroscopio digitale e accelerometro, ML8511A - Sensore UV analogico, RPR-0521 - Sensore di luminosità ambientale e sensore di prossimità, BH1745 - Sensore di
colore digitale. Nel prossimo paragrafo analizzeremo alcuni di questi sensori. Dalla gura 2 è possibile osservare alcune intestazioni denominate H. In particolare H4 - Standard Power Header (gura 3) collegata solo ai pin 4, 7 e 8. H5 - Standard analo23
Figura 1: la shield della RHOM Semiconductor con l’indicazione dei vari sensori. Per esem pio U1 è il sensore di temperatura. U2 quello di pressione, U4 è quello Hall e cosi via.
BOARD
e algoritmi di applicazione intelligenti programmabili dall’utente. L’accelerometro viene fornito in un contenitore di plastica LGA di dimensioni 2 x 2 x 0,9 mm funzionante con un’alimentazione da 1,71 a 3,6 VCC. I regolatori di tensione integrati vengono utilizzati per fornire caratteristiche operative stabili nell’intervallo della tensione di alimentazione (gura 7).
Figura 2: un’altra visuale della shield SENSORSHLD1-EVK-101
Il sensore di prossimità e luce ambientale RPR-0521RS integra la prossimità ottica, un sensore di luminosità ambientale (ALS) e il LED a infrarossi (IrLED). La parte del sensore di prossimità rileva l’avvicinamento all’uomo o all’oggetto dal riesso della luce IrLED
dispositivi, ci sono situazioni in cui non è applicabile. E’
entro un intervallo di 1-100 mm. La parte ALS, invece, rileva l’ampia gamma di illumina-
consigliabile utilizzare la nuova libreria scaricabile
zione e riuta il rumore della luce a 50Hz / 60Hz. Questo
dal seguente link attraverso il quale la casa madre of-
sensore può regolare l’intensità dell’illuminante del display LCD e della tastiera. RPR-0521RS ore un minore consumo di corrente e/o una migliore visibilità sotto
fre esempi di programmazione per una facile implementazione con Arduino.
l’ambiente luminoso, ed è compatibile con l’interfaccia
SENSORI Il sensore di temperatura fa parte della serie BDExxx0G a bassa corrente di riposo (16μA), con regolatore di
tensione, convertitore D/A e comparatore totalmente integrati. Il sensore integra anche un termostato digitale per il rilevamento di una soglia di temperatura. KX1221037 è un accelerometro a tre assi ± 2 g, ± 4 g e ± 8 g con
bus I2C e l’interfaccia logica a 1.8V. Le applicazioni appartengono soprattutto al mercato consumer, impiegato in vari dispositivi quali smartphone, fotocamera digitale, videogioco portatile, display LCD ecc (Figura 8). BH1745NUC è un IC sensore di colore digitale con in-
buer integrato da 2048 byte
e protocollo di comunicazione I2C e SPI. L’elemento sensibile è fabbricato utilizzando la tecnologia di processo di microlavorazione al plasma di
Kionix. Il rilevamento dell’accelerazione si basa sul principio di una capacità dierenziale
derivante dal movimento indotto dall’accelerazione dell’elemento sensibile. Un dispositivo ASIC separato fornito con l’elemento di rilevamento fornisce il condizionamento del segnale
Figura 3: alimentazione della shield 24
BOARD
Figura 4: schema di collegamento delle interfacce H6 e H7
terfaccia I2C. Questo sensore rileva la luce rossa, verde e blu (RGB) e li converte in valori digitali. L’alta sensibilità, l’ampia gamma dinamica ed l’eccellente Ircut, rendono questo IC adatto per ottenere il livello di illuminazione e la temperatura del colore della luce ambientale al ne di regolare la retroilluminazione LCD di TV, smartphone e tablet PC (gura 9). ML8511 è un sensore adatto per l’acquisizione dell’in-
tensità UV (radiazione ultravioletta) in ambienti interni o esterni. ML8511 è dotato di un amplicatore interno
che converte la foto-corrente in tensione a seconda dell’intensità UV. Questa caratteristica ore un’interfaccia semplice per circuiti esterni quali convertitori ADC. Nella modalità di spegnimento, con una tipica corrente di standby di 0,1 μA, consente una maggiore durata della batteria (gura 10 e 11).
ARDUINO Il programma che andiamo a presentare qui di seguito legge i valori di tutti i sensori implementati sulla scheda della ROHM Semiconductor. Oltre a quelli descritti
nel paragrafo precedente abbiamo anche un sensore ad eetto Hall. Il programma richiede l’inclusione della libreria I2C: 25
Figura 5: schema di collegamento delle interfaccia H5
BOARD
Figura 6: modiche hardware per il collegamento della piattaforma shield ROHM Semiconductor alla scheda Arduino
Figura 7: schema a blocchi del KX122-1037 26
BOARD
Figura 8: schema a blocchi del sensore RPR-0521RS
Figura 9: schema a blocchi del sensore BH1745NUC
#include
E alcune denizioni come riportate di seguito: 27
// ----- Debugging Denitions ----#dene AnalogTemp //BDE0600G #dene AnalogUV
//ML8511
BOARD
temperatura, UV, accelerometro e quello per i colori riportiamo di seguito il codice. //Temp, UV #ifdef AnalogTemp int ADCpin_AnalogTemp = A2; #endif #ifdef AnalogUV int ADCpin_AnalogUV = A0; #endif
Figura 10: il sensore UV ML8511
int sensorValue = 0; oat sensorConvert = 0; //nell’esempio successivo le deniremo come variabili locali
#dene HallSen
//BU52014
#dene KMX62
//KMX62
#dene Pressure
//BM1383GLV
#dene ALSProx
//RPR-0521
#dene Color
//BH1745
#dene KX122
//KX122
#dene KXG03
//KXG03
//----- Start Initialization for KX122 Accel Sensor ----#ifdef KX122 //1. CNTL1 (0x18) loaded with 0x41 //2. ODCNTL (0x1B) loaded with 0x02 //3. CNTL3 (0x1A) loaded with 0xD8 //4. TILT_TIMER (0x22) loaded with 0x01 //5. CNTL1 (0x18) loaded with 0xC1 (Enable bit on) i2c_start(KX122_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read
// ----- Included Files -----
= 1, Write = 0)
//#include
i2c_write(0x18); i2c_write(0x41); i2c_stop();
//Default I2C Library
#dene SCL_PIN 5 //A5
//Note that if you are
using the Accel/Mag Sensor, you will need to download and #dene SCL_PORT PORTC
i2c_start(KX122_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read
//install the
“SoftI2CMaster” as “Wire” does not support repeated
start... #dene SDA_PIN 4 //A4
//References:
#dene SDA_PORT PORTC
// http://playground.
arduino.cc/Main/SoftwareI2CLibrary
= 1, Write = 0)
i2c_write(0x1B); i2c_write(0x02); i2c_stop(); i2c_start(KX122_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read
#dene I2C_TIMEOUT 1000 // Sets Clock Stretching
up to 1sec #dene I2C_FASTMODE 1
// Sets 400kHz opera-
= 1, Write = 0)
i2c_write(0x1A); i2c_write(0xD8); i2c_stop();
ting speed i2c_start(KX122_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read
La funzione setup consiste principalmente nell’inizializzazione dei vari sensori, in particolare per i sensori
= 1, Write = 0)
i2c_write(0x22); 28
BOARD
i2c_write(0x01); i2c_stop(); i2c_start(KX122_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read = 1, Write = 0)
i2c_write(0x18); i2c_write(0xC1); i2c_stop(); #endif //----- END Initialization for KX122 Accel Sensor -----
i2c_write(0x02); i2c_stop(); #endif //----- END Initialization for BH1745 Color Sensor
-----
//----- Start Initialization for BH1745 Color Sensor
----#ifdef Color //BH1745 Init Sequence
// 1. Persistence (0x61), write (0x03) // 2. Mode Control 1 (0x41), write (0x00) // 3. Mode Control 2 (0x42), write (0x92) // 4. Mode Control 3 (0x43), write (0x02) Figura 11: responsività relativa del sensore UV
i2c_start(BH1745_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit... Read = 1, Write = 0)
i2c_write(0x61); i2c_write(0x03); i2c_stop(); i2c_start(BH1745_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit...
Analizziamo due casi molto semplici relativamente alla lettura del sensore di temperatura e quello UV . Le due letture necessitano di calibrazione per far si che la scheda possa inviare il valore corretto. Il codice espresso in due semplici funzioni denominate read_temperatura() e read_UV() sono riportate nel codice seguente. void read_temperatura() {
Read = 1, Write = 0)
i2c_write(0x41); i2c_write(0x00); i2c_stop(); i2c_start(BH1745_DeviceAddress); //This needs
int sensorValue; oat sensorConvert;
sensorValue = analogRead(ADCpin_AnalogTemp);
the 8 bit address (7bit Device Address + RW bit... Read = 1, Write = 0)
/* //Uncomment this for Raw Values
i2c_write(0x42); i2c_write(0x92); i2c_stop();
Serial.write(“ADC Raw Value Return = “);
i2c_start(BH1745_DeviceAddress); //This needs the 8 bit address (7bit Device Address + RW bit...
Serial.print(sensorValue); Serial.write(0x0A); //Print Line Feed Serial.write(0x0D); //Print Carrage Return */
Read = 1, Write = 0)
i2c_write(0x43); 29
//Calculations for Analog Temp Sensor - BDE0600G
BOARD
// Temperature Sensitivity = -10.68mV/degC // Temperature Sensitivity = -0.01068V/degC // Temperature Sensitivity = -93.63degC/V
Convert to V
// Temp Known Point = 1.753V @ 30DegC
// ADC_Voltage = sensorValue * (3.3V/670) // ADC_Voltage = sensorValue * 0.004925
// Math: ADC_Voltage = (sensorValue / 670) * 3.3V //
// UV Intensity = (ADC_Voltage - 2.2)/(0.129) + 10 //
Convert to V
Conver to Temperature in DegC
// ADC_Voltage = sensorValue * (3.3V/670) // ADC_Voltage = sensorValue * 0.004925
sensorConvert = (oat)sensorValue * 0.004925;
// Temperature = (ADC_Voltage - 1.753)/(-0.01068)
sensorConvert = (sensorConvert - 2.2)/(0.129)+10;
+ 30
Serial.write(“ML8511 UV Sensor = “); Serial.print(sensorConvert);
sensorConvert = (oat)sensorValue * 0.004925;
Serial.write(“ mW/cm2”);
sensorConvert = (sensorConvert - 1.753)/
Serial.write(0x0A); //Print Line Feed
(-0.01068)+30;
Serial.write(0x0D); //Print Carrage Return
Serial.write(“BDE0600G Temp = “); Serial.print(sensorConvert);
}
Serial.write(“ degC”); Serial.write(0x0A); //Print Line Feed Serial.write(0x0D); //Print Carrage Return }
Il codice completo può essere scaricato dal link riportato alla ne dell’articolo.
CONCLUSIONI void read_UV() { int sensorValue; oat sensorConvert;
sensorValue = analogRead(ADCpin_AnalogUV); /* //Uncomment this for Raw Values Serial.write(“ADC Raw Value Return = “);
Il SENSORSHLD1-EVK-101 è un kit di sviluppo di se-
conda generazione con 10 sensori integrati insieme ad una interfaccia standard Arduino che consente la compatibilità con diverse piattaforme di prototipazione open source esistenti. La Shield fornisce un’alternativa a basso costo per il test di sensori, orendo nello stesso tempo la possibilità di progettare in maniera molto semplice diversi dispositivi in vari ambienti applicativi che coinvolgono il mercato IoT e quello industriale. La Shield della ROHM Semiconductor è disponibile a
catalogo Mouser Electronics - Distributore autorizzato.
Serial.print(sensorValue); Serial.write(0x0A); //Print Line Feed Serial.write(0x0D); //Print Carrage Return */ //Calculations for UV Sensor - ML8511 //Known Point = 2.2V @ 10mW/cm2
//Rate = 0.129 // Math: ADC_Voltage = (sensorValue / 670) * 3.3V //
DOWNLOAD • •
Codice Arduino Schemi elettrici e PCB
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: https://it.emcelettronica.com/una-piattaforma-multi-sensore-con-
interfaccia-arduino
30
H C E T
Le transazioni nel sistema IOTA con il protocollo Tangle di Maurizio Di Paolo Emilio
IOTA è una nuova criptovaluta open source che non utilizza una blockchain. Il suo innovativo proto- collo quantum-proof, noto come Tangle, dà origine a nuove caratteristiche uniche come tarie zero, scalabilità innita, transazioni veloci, trasferimento sicuro dei dati e molte altre.
INTRODUZIONE
I
OTA utilizza il Tangle: un protocollo software che die-
risce fondamentalmente da quello blockchain. Tangle
elabora le transazioni in parallelo e si dierenzia dalla blockchain in due modi principali: IOTA è in grado di ottenere un elevato throughput; man mano che il tan-
tente deve semplicemente confermare altre due transazioni su tangle (la rete). Per confermare queste due transazioni, un dispositivo esegue “prove di lavoro” a bassa dicoltà, che essenzialmente sono solo una serie di problemi matematici. L’utente e il validatore (miner, staker, ecc.) non sono più entità disaccoppiate in IOTA.
gle cresce con più transazioni, IOTA diventa più veloce e più sicuro. Il modo in cui il consenso viene raggiunto in una blockchain avviene attraverso un meccanismo rigoroso che richiede a più parti di “gareggiare” l’una contro l’altra nel tentativo di aggiungere il blocco successivo e guadagnare i corrispondenti premi. Poiché “minatori” e “utenti” sono entità disaccoppiate, i premi di blocco pagati ai minatori consistono in gran parte nelle commissioni di transazione degli utenti. Nel Tangle, “minatori” e “utenti” non sono più entità disaccoppiate. Anché una transazione possa essere confermata su una blockchain, è necessario un certo intervallo di tempo ar bitrario per la creazione del blocco. Il tangle consente
Poichè il Tangle elimina il requisito di minatori / stakers /
un regolamento asincrono, il che signica che non ci
Nell’articolo precedente abbiamo visto il signicato di
sono vincoli temporali arbitrari estranei alla nalizzazione della transazione; è programmato in logica ternaria che è una derivazione del codice binario tradizionale con alcuni signicativi miglioramenti nella funzionalità. Il
peso cumulativo. Nella moneta IOTA, la transazione è
sistema ternario (chiamato anche base-3) ha tre come base. Analogamente a un bit, una cifra ternaria è un trit (cifra trinaria). Un trit è equivalente ai bit di informazio-
ecc., non vi è necessità di estrarre dal sistema nuove commissioni di transazione per pagare le tasse di convalida. Il risultato è che IOTA ha zero commis-
sioni. IOTA è direttamente comparabile a Hashcash con un obiettivo: prevenire lo spam e gli attacchi di Sybil. La
prova di lavoro in IOTA può anche essere esternalizzata da piccoli dispositivi leggeri a qualcosa di più, in grado di gestire il carico computazionale. Sybil è un attacco
informatico dove viene violata l’identità di una persona.
QUANTO VELOCEMENTE CRESCE IL PESO CUMULATIVO? individuata mediante un peso o weight proporzionale alla quantità di lavoro che il nodo emittente ha investito su di esso. I tempi di transazione sono inversamente proporzionali al numero di transazioni. Più transazioni vi sono nel tangle, più rapidamente ogni transazione sarà confermata (gura 1).
ne log23 (circa 1.58496). Sebbene il termine ternario si riferisca più spesso a un sistema in cui le tre cifre sono tutti numeri non negativi, in particolare 0, 1 e 2, il termine presta anche il nome al sistema ternario bilanciato, comprendente le cifre -1, 0 e +1 , utilizzato nella logica di confronto e nei computer ternari.
Supponiamo che la rete sia in regime di basso carico. Ovvero, il numero tipico di tips (con tip una transazione
COMMISSIONI ZERO
articialmente modicando il numero di suggerimenti
Per inviare una transazione IOTA, il dispositivo dell’u-
(Figura 2).
31
non approvata) è piccolo e spesso diventa 1. Questo può accadere quando il numero di transazioni è così
piccolo tale da risultare poco probabile che diverse transazioni approvino lo stesso tip. Inoltre, dobbiamo supporre che non ci siano hackers che cercano di entrare
TECH
Figura 1: tempi di transazione
Dopo che una transazione viene approvata più volte, il suo peso cumulativo crescerà con la velocità perché tutte le nuove transazioni faranno riferimento indirettamente a questa transazione. Nel caso in cui la rete sia
in regime di carico elevato, ovvero quando il numero di transazioni è elevato e ritardi computazionali insieme alla latenza di rete rendono probabile che diverse transazioni approvino lo stesso tip, una vecchia transa-
Figura 2: situazione di basso carico (immagine in alto) e alto carico (immagine in basso) 32
TECH
zione con un grande peso cumulativo sperimenterà la crescita del peso con la velocità perché essenzialmente tutte le nuove transazioni faranno riferimento in maniera indiretta. Inoltre, quando la transazione viene aggiunta al grafo potrebbe aspettare un po’ di tempo prima di essere approvata. In questo intervallo di tempo, il peso
con K(t) espresso dalla seguente formula:
cumulativo della transazione si comporta in modo
con W la funzione di Lambert. A questo punto riprendendo l’espressione di H dierenziale possiamo estrapolare la funzione denita nel seguente modo:
casuale. Per caratterizzare la velocità con cui il peso
cumulativo cresce dopo che la transazione riceve diverse approvazioni, deniamo H(t) come il peso cumulativo
previsto al tempo t (per semplicità, iniziamo a contare il tempo nel momento in cui la nostra transazione è stata rivelata alla rete) e K (t) come il numero previsto di suggerimenti che approvano la transazione al tempo t. Una transazione che entra nella rete al momento t in genere sceglie due tip da approvare in base allo stato del sistema al momento (t - h), perché il nodo deve fare alcuni calcoli e veriche prima di emettere eettivamente la transazione. Per H(t) possiamo denire la seguente equazione dierenziale:
Dopo che una transazione è stata approvata più volte
nel regime di basso carico, il peso cumulativo cresce con la velocità λw (λ, numero medio di eventi), dove w è
il peso medio di una transazione generica. Nel regime di carico elevato, ci sono due distinte fasi di crescita: una dove il peso cumulativo H (t) cresce con l’aumentare
della velocità durante il periodo di adattamento (adaptation period). Successivamente al completamento del
Figura 3: peso cumulativo in funzione del tempo per il regime ad alto carico 33
TECH
periodo di adattamento, il peso cresce con la velocità w (Figura 3). Si può pensare al periodo di adattamento di una transazione come il tempo durante il quale la maggior parte dei tips approvano indirettamente quella transazione. La lunghezza tipica del periodo di adattamento è data da:
lizzati nella pratica - RSA, DSA e ECDSA - si basano su concetti legati a problemi teorici numerici, ovvero la fattorizzazione di interi e il calcolo dei logaritmi discreti. Nel 1994, Peter Shor mostrò che questi problemi teorici sarebbero diventati fragili in presenza dell’informatica quantistica. I computer quantistici potrebbero risolverli in poco tempo, compromettendo la sicurezza degli schemi di rma digitale utilizzati oggi. Mentre i computer
quantistici non sono ancora disponibili, il loro sviluppo sta avvenendo a un ritmo rapido e costituisce quindi una “vera minaccia” per i prossimi decenni. Fortunatamente, la crittograa post-quantistica fornisce una varietà di al-
SCENARIO DI ATTACCO
ternative resistenti agli schemi di rma digitale classici.
Analizziamo un possibile scenario dove un malintenzionato tenta di accedere alla rete. Un aggressore invia un pagamento a un commerciante e riceve la merce dopo che il commerciante decide che la transazione ha un peso cumulativo abbastanza elevato. Successivamente l’autore dell’attacco emette una transazione a doppia spesa (double-spending). L’aggressore utilizza la pro-
Le frme hash-based o le frme di Merkle come sono
pria potenza di calcolo per emettere molte piccole
su hash si basano sulle cosiddette “one time signature” (OTS). Come suggerisce il termine, una singola coppia di chiavi deve essere utilizzata una sola volta. In caso contrario, un utente malintenzionato può rivelare più
transazioni che approvano la transazione a doppia
spesa, ma non quella originale che ha inviato al commerciante direttamente o indirettamente. Un metodo alternativo potrebbe essere che l’aggressore rilasci una transazione a doppia spesa utilizzando tutta la sua potenza di calcolo. Questa transazione con un peso proprio molto grande potrebbe approvare le transazioni precedenti a quella utilizzata per pagare il com-
anche conosciute, sono una delle più promettenti di queste alternative. IOTA utilizza rme hash-based
invece di crittograa a curva ellittica (ECC). Non solo le rme basate su hash sono molto più veloci di ECC, ma semplicano notevolmente il processo di rma e riducono la complessità del protocollo Tangle. Le rme basate
parti della chiave privata e falsicare le rme.
CONCLUSIONI La rapida crescita dell’Internet of Things è una risposta alla costante domanda di connettività e nuove
merciante. E’ importante notare come il usso in input
applicazioni: semplicazione dei processi quotidiani e
di transazioni “oneste” dovrebbe essere grande rispetto alla potenza computazionale dell’aggressore. Questo indica la necessità di ulteriori misure di sicurezza. Quando si sceglie una strategia per decidere quale del-
creazione di nuovi servizi. Tutti i settori di attività sono ora inuenzati, sia che si tratti di salute, trasporti o automazione domestica. Tuttavia, tale progresso porta
le due transazioni in conitto sia valido, bisogna stare
gli attacchi denial-of-service si moltiplicano, il mondo si trova a dover riconsiderare la sicurezza dell’IoT e delle reti utilizzate per combattere questi problemi. Questa osservazione ha portato IOTA - una comunità di innovazione open source - a mobilitare il considerevole knowhow dei suoi contributori per fornire soluzioni per queste nuove esigenze di sicurezza.
attenti quando si usa il peso cumulativo come parametro di decisione. Ciò è dovuto al fatto che il peso cumulativo può essere soggetto ad un attacco, vale a dire,
l’aggressore può preparare una transazione doublespending con largo anticipo, e quindi trasmettere quel sub-tangle dopo che il commerciante ha accettato la transazione legittima. Un metodo migliore per decidere tra due transazioni in
con sé livelli di controllo e verica più rigorosi: poiché
conitto potrebbe essere quello di eseguire l’algoritmo
di selezione dei tips e vedere quale delle due transazioni sono approvate indirettamente dal tip selezionato.
QUANTUM PROOF Le rme digitali sono massicciamente utilizzate online,
in particolare per l’autenticazione e il controllo dell’integrità. Gli algoritmi di rma digitale più comunemente uti-
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: https://it.emcelettronica.com/le-transazioni-nel-sistema-iota-con-
il-protocollo-tangle
34
T O B O R
Corso sugli Aeromobili a Pilotaggio Remoto partendo da zero: descrizione del modello matematico di Giuseppe Silano
Continua il corso dedicato agli Aeromobili a Pilotaggio Remoto (APR). Nell’articolo precedente abbia- mo analizzato cos’è un sistema di riconoscimento e la loro importanza nei droni, introducendo l’idea di visione articiale ed object detection, focalizzando l’attenzione sui simulatori di scenari ed i sistemi di riferimento. Nella puntata di oggi descriveremo il modello matematico di un multi-rotore, in parti- colare quello di un esacottero, utilizzando due dierenti approcci: Eulero-Lagrange e Newton-Eulero. Ricavate le equazioni del moto ne esprimeremo l’equivalente rappresentazione nella forma dello spazio di stato, fondamentale per la simulazione del velivolo nello scenario virtuale (e non solo) nonché per la progettazione del controllo di volo (argomento del prossimo articolo). Il tutto verrà arontato senza
scendere in tediosi dettagli tecnici matematici, fornendo al contempo le basi necessarie per successivi approfondimenti.
NOZIONI PRELIMINARI
P
dell’articolo).
er descrivere il modello matematico di un multi-
Il momento di imbardata, la cui origine è da individua-
rotore è necessario riprendere quanto introdotto,
re nella dierente velocità dei sei propulsori, può essere cancellato modicando il verso di rotazione delle eliche:
nella seconda puntata di questo mini-corso, in merito ai sistemi di riferimento. Difatti, è possibile utilizzare il sistema di riferimento verticale-locale e quello assi corpo [In letteratura è indicato con il pedice ABC,
tre si muoveranno in senso orario e tre in senso antiorario. Le eliche si dividono, quindi, in due gruppi diametralmente opposti, facilmente individuabili grazie allo stes-
acronimo di Aircraft Body Center ] per la modellazione del sistema: il primo denisce la posizione lineare assoluta ( x, y e z ), il secondo l’orientamento (ψ, φ e θ) del
so verso di rotazione. Al contrario, gli eetti giroscopici
velivolo. In Figura 1 è evidenziata la relazione tra i due
Vehicle), di cui l’esempio più noto è l’AR.Drone. Si tratta
sistemi di riferimento.
di eetti dicilmente eliminabili ma di facile compensa-
L’altitudine e la posizione dell’aeromobile possono
zione attraverso l’utilizzo di tecniche ben note in letteratura. Volendo essere quanto più precisi possibili, incrementando o decrementando la velocità di rotazione delle eliche si determina il cambiamento dell’altitudine in posizione e velocità, mentre variando la velocità delle due eliche (Ω1 e Ω6 o Ω3 e Ω4) si causa una rotazione del velivolo intorno all’asse y il quale descrive un angolo
essere controllate, portandole al valore desiderato, variando la velocità dei sei motori di cui è equipaggiato il drone. Le forze ed i momenti che si gera-
no modicano così le prestazioni dell’APR: la spinta è
una diretta conseguenza dell’aumento di velocità delle pale, il momento di beccheggio e quello di rollio, invece, sono ottenuti da un cambiamento della spinta fornita dai sei motori, dalla gravità, dagli eetti giroscopici e dal
momento di imbardata (argomenti chiariti nel seguito 35
costituiscono una caratteristica dei droni commerciali di piccole dimensioni, noti anche come MAV (Micro Aerial
di beccheggio indicato con θ. In modo del tutto simile variando la velocità di rotazione delle tre eliche (Ω1, Ω 2
ROBOT
Figura 1: Drone nel sistema di riferimento assi corpo (ABC, destra) e in quello inerziale (FI, sinistra).
e Ω3 o Ω4, Ω5 e Ω6) causeremo una rotazione dell’aero-
il sistema nel suo complesso è formato da sei variabili
mobile intorno all’asse x descrivendo un angolo di rollio
in ingresso e sei in uscita e, come vedremo più avanti quando giungeremo alle equazioni del moto, si tratta di un sistema fortemente non lineare.
indicato con φ. Inne, il vettore somma dei momenti di reazione ottenuto dalla rotazione di Ω1, Ω3 e Ω5 ed i momenti di reazione prodotti dalla rotazione di Ω2, Ω4 e Ω6
causeranno una rotazione dell’esacottero intorno all’asse z descrivendo un angolo di imbardata indicato con ψ (per maggiori dettagli si veda quanto esposto nella
prima puntata, in merito al funzionamento di un velivolo multi-rotore). Per quanto concerne lo spazio del moto, quello di un
In denitiva, un multi-rotore è un sistema meccanico complesso, una raccolta di eetti sici di diverso dominio. Al ne di sintetizzare il modello matematico si è assunto che: • la struttura dell’aeromobile sia rigida e simme•
APR è diviso in due parti: i movimenti del baricentro e
quelli intorno al baricentro. Sei DOFs (Degree of Freedom) sono richiesti per descrivere il suo andamento nel tempo. Tre esprimono i movimenti del baricentro e tre quelli angolari, ovvero, i tre moti traslazionali ( x, y e z ) e tre rotazionali (ψ, φ e θ). Come sopraccitato, il controllo dei sei DOFs è ottenuto
variando le velocità di rotazione dei sei motori. Quindi,
• •
trica; il centro di gravità e l’origine del corpo coincidono; le eliche sono indeformabili; la spinta è proporzionale al quadrato della velocità dei rotori.
MODELLAZIONE CON EULERO-LAGRANGE In questa sezione sono modellate le dinamiche di rotazione utilizzando il formalismo di Eulero-Lagrange. Tale 36
ROBOT
metodologia (già descritta ed utilizzata in un precedente articolo) di analisi utilizza il baricentro energetico per ottenere l’insieme di equazioni che descrivono il comportamento del sistema.
(6)
dove la derivata di qi è Γi indicano rispettivamente le coordinate del sistema e le forze generalizzate. Da qui,
CINEMATICA Per un punto P ( x p, y p e z p) dello spazio, espresso nel sistema di riferimento verticale-locale, si può scrivere:
è possibile scrivere:
(7)
(1)
Le relative velocità, ottenute derivando l’equazioni precedenti, consentono così di calcolare la radice quadrata
Dall’altra parte, le coppie non conservative agiscono sul multi-rotore in primo luogo con l’azione di una spinta dif-
dell’ampiezza delle velocità per un dato punto P:
ferente per ogni coppia (Figura 2):
(2) (8)
ENERGIA Partendo dalla (eq. 2), assumendo che la matrice d’inerzia I sia diagonale, è possibile estrarre l’equazione
Oltre agli eetti giroscopici che pongono in rotazione le eliche, e che possono essere tenuti in conto come:
cinematica dell’energia (eq. 4). (3)
(4)
Utilizzando la nota formula che descrive l’energia po(9)
tenziale V, è possibile esprimere la (eq. 4) nel sistema di riferimento verticale-locale come: (5)
IL MODELLO MATEMATICO DERI- Noti i legami dell’energia cinetica (eq. 4) e di quella potenziale (eq. 5) è possibile, nalmente, descrivere l’equazioni del moto (paragrafo successivo).
VATO
EQUAZIONI DEL MOTO
no conto degli eetti giroscopici risultanti dalla rotazione
Utilizzando la Lagrangina L è possibile derivare le formule che descrivono il moto del velivolo (eq. 7)
del corpo rigido (τ x , τ y e τ z ) e di quelli derivanti dai due gruppi di eliche (τ x ’ e τ u’ ), ed inne dell’azione degli at-
partendo dall’espressione generale:
tuatori:
37
Il modello matematico del multi-rotore derivato, in sintesi, descrive le rotazioni dell’angolo di rollio (φ), imbardata (ψ) e beccheggio (θ), contiene tre termini che tengo-
ROBOT
(10)
Da qui, è possibile linearizzare l’equazione (eq. 13) intorno ad un generico punto di lavoro, la derivata di ω0, e scriverla nella forma:
con (14)
MODELLAZIONE CON IL FORMALISMO DI NEWTON-EULERO Il modello ottenuto attraverso il formalismo di NewtonEulero è sviluppato per passi successivi. La versione
descritta in questo articolo include le forze che agiscoFigura 2: Distanza dai rotori e centro di gravità dell’esacottero, con beta = 60° ed alpha = 30°.
no sui mozzi H, i momenti di rollio Rm ed i coecienti variabili aerodinamici J. Quest’ultimi rendono il modello
più realistico particolareggiandolo per il volo in ambienti outdoor . Il fne ultimo è quello di introdurre il model-
LA DINAMICA DEI ROTORI
lo impiegato per lo sviluppo del sistema di controllo
I rotori che equipaggiano il velivolo sono costituiti dai sensori AC, di cui bene note sono le equazioni che ne
progettato (argomento del prossimo appuntamento)
descrivono la dinamica:
nazione tra la classica PID (lineare) e quella Backstep ping (non lineare). La dinamica del corpo rigido, sottoposta all’azione delle sopraccitate forze esterne applicate al centro di massa ed espresse nel sistema di riferimento assi-corpo con il formalismo di Newton-Eulero, è descritta dalle equazio-
(11)
utilizzando la tecnica Integral Backstepping , combi-
ni di seguito:
Per chi non ne conoscesse la struttura, ricordo di leggere le precedenti lezioni del corso e quanto presente in un precedente articolo. I motori presentano un piccolo valore di induttanza, per tale ragione la dinamica del secondo ordine può essere
(15)
A questo punto, introducendo i modelli delle eliche e della scatola di trasmissione, l’equazione (eq. 12) può
Si ricorda l’utilizzo del sistema di riferimento verticalelocale e di quello assi-corpo, come mostrato in Figura 1, per descrivere il moto dell’aeromobile. Dunque, utilizzando la parametrizzazione degli angoli di Eulero, l’orientamento del velivolo nello spazio è dato dalla rotazione tra un sistema di riferimento e l’altro come descritto nel secondo episodio di questo mini-corso.
essere riformulata come:
Quanto formulato altro non è che una generalizzazione
approssimata come: (12)
del modello matematico che descrive il comportamento di un quadri-rotore, particolare tipologia di multi-rotore. (13)
FORZE E MOMENTI AERODINAMICI Le forze ed i momenti aerodinamici sono derivati uti38
ROBOT
lizzando una combinazione teorica sulla quantità di moto delle pale del velivolo. Per una veloce lettura delle
esempio utilizzando tecniche adattive (approfondimenti sono presenti nei riferimenti presenti a fondo pagina).
equazioni di seguito sono riportati i signicati dei simboli utilizzati:
Si ricorda che l’obiettivo, però, è ottenere un modello
in grado di catturare le principali variazioni della velocità indotta dall’aria. Su tale considerazione si è seguito quando descritto da Cheeman: la velocità indotta al centro del rotore è data dalla sua immagine
Da qui è possibile scrivere la forza di spinta come la
risultate delle forze verticali che agiscono sulle pale del multi-rotore, nel caso in esame dell’esacottero.
Da qui, si ottiene la relazione riportata nel seguito assumendo che v i e δv i siano costanti per tutto il disco consentendo di scrivere v i ,IGE = v i - δv i
La forza sui mozzi è la risultante delle forze orizzontali che agiscono, invece, sulle sue eliche. Un altro semplice modo per procedere è considerare che il rapporto del usso in ingresso negli eetti di terra
sia pari a
Si parla, al contrario, di momento di rollio di un’elica quando il velivolo si muove in avanti durante il volo, e più precisamente quando le pale producono più spinta di quella necessaria a mantenere il velivolo in stazionamento (hovering ). E’ l’integrazione completa dei rotori, i quali producono una spinta per ogni sezione del velivolo
dove la variazione della velocità indotta è uguale è
Dunque, è possibile riscrivere il coeciente di spinta IGE come:
che agisce su di un dato raggio. Il momento è da non
confondere assolutamente con il raggio delle eliche, con la matrice di rotazione Cb/r (incontrata quando abbiamo descritto i sistemi di riferimento) o con i momenti di rollio complessivi, i quali sono causati da una serie di altri eetti.
Quando gli aeromobili lavorano vicino alla terra (a metà del diametro del rotore) la crescita della spinta è dovuta alla migliore ecienza del motore. Tale propulsione è funzione della riduzione di velocità indotta dal usso d’aria. Quanto appena introdotto è nome come eetto
Figura 3: Eetti di terra. A destra la dimensione della spinta prodotta dai rotori (velivolo prossimo all’atterraggio); a sinistra, l’aumento della rotazione delle eliche (aeromobile lontano da terra).
di terra (Figura 3). In letteratura diversi sono approcci
EQUAZIONI DEL MOTO
utilizzati per trattare con questa topologia di eetti, ad
In quest’ultima sezione sono riportate le equazioni del
39
ROBOT
moto dell’aeromobile derivate dalla (eq. 15) e da tutte le forze ed i momenti che agiscono sul velivolo. Come ci si aspettava, il modello nale è esattamente lo stesso
di quello presentato nel paragrafo precedente (quello a conclusione del primo formalismo con cui si è sintetizzato il modello dell’esacottero):
La matrice di trasformazione tra il tasso di variazione degli angoli di orientamento (le derivate degli angoli di rollio, beccheggio ed imbardata) e le velocità angolari del corpo (p, q e r) possono essere considerate matrice unitarie se le perturbazioni del volo stazionario
MODELLO NELLO SPAZIO DI STATO
sono piccole. Dunque, è possibile eettuare la seguente approssimazione
L’insieme di equazioni dierenziali del secondo ordine
(presentate nel paragrafo precedente) descrivono la posizione e l’orientamento assunto dal velivolo nello spazio. Nella formulazione del modello sono trascurate le forze centrali ed i momenti di rollio, mentre sono stati tenuti in conto i coecienti di spinta e traslazione. Il sistema, a questo punto, può essere riscritto nella forma X=f(X, U) dove U indica il vettore degli ingressi ed X
ottenendo così le equazioni presentate in precedenza con:
quello degli stati scelto come segue:
dove gli ingressi (U1, U2, U3 e U4) sono mappati da: 40
ROBOT
to attuato poiché dipende sia dalle variabili di stato
In Figura 5 è riportato lo schema Simulink con il quale è stata simulata la dinamica del sistema, e successiva-
traslazionali che da quelle rotazionali. Vale la pena
mente realizzato il controllo in traiettoria.
notare, inoltre, che gli angoli e le loro derivate nel tempo non dipendono dai componenti traslati. Dall’altra parte, le traslazioni sono funzione degli angoli. In sintesi, si
Ai ni simulativi sono stati presi in considerazione i seguenti valori numerici:
E’ chiaro che il sistema fnale così composto è sot-
può idealmente immaginare che il sistema completo sia costituito da due sottosistemi: le rotazioni angolari e le traslazioni lineari (Figura 4).
RIFERIMENTI Il poco spazio a disposizione non ha consentito, in alcuni casi, di approfondire con il giusto grado di dettaglio le informazioni presentate nel corso di questo appuntamento. Per tale ragione si riportano di seguito i riferimenti che, ancora una volta, il lettore più curioso può utilizzare per approfondire quanto solo parzialmente presentato in questi paragra. • Figura 4: Connessione delle rotazioni e traslazioni dei sottosistemi.
Francesco Sabatino, Quadrator control: modeling, nonlinear control design and simulation. Master’s thesis, KTH Royal Institute of Techno-
Figura 5: Schema Simulink della dinamica del sistema. Per chi non avesse mai sentito parlarne, consigliamo di leggere il relativo articolo. 41
ROBOT
•
logy, 2015; D. Balmford, G. Done. Bramwell’s Helicopter Dynamics.
•
•
•
•
•
Oxford
Butterworth-Heinemann,
2001; S. Bouabdallah. Design and control of quadrators with application to autonomous ying . PhD thesis, EPFL, 2007; V. Artale, C. Milazzo e A. Ricciardello. Mathematical modeling of hexacopter . Appl. Math. Sci., 7(97):4805-4811,2013. Mostafa Moussid, Adil Sayouti and Hichman Me-
dromi. Dynamic modeling and control of a hexarotor using linear and nonlinear methods. S. Boubdallah, P. Murrieri and R. Siegward. Design and control of an indoor micro quadrotor . In Robotics and Automation, 2004. Proceedings, ICRA’04. 2004 IEEE International Conference on, volume 5, pages 4393-4398. S. Bouabdallah e R. Siegwart. Backstepping and sliding-mode techniques applied to an indoor micro quadrotor . In Robotics and Automation,
•
2005. Proceedings of the 2005 IEEE International Conference on, pagine 2247-2252. S. Bouabdallah e R. Riegward. Field and Service Robotics: reseults of the 5th international conference, capitolo Toward Intelligent Miniature
Flying Robots, pagina 429-440. Springer Berlin •
Heidelberg, 2006. J. G. Leishman et al. Principles of Helicopter Aerodynamics. Cambridge University Press, 2
edizione, 2006. •
N. Geunard, T. Hamel e L. Eck. Control laws for the tele operation of an unmanned aerial vehicle known as an x4-yer . In Intelligent Robots and
System, 2006, pagine 3249-3254. •
I. Cheeseman e W. Bennett. The eect of the ground on a helicopter rotor in forward ight .
Numero 3021. Aeronautical Research Council, 1957.
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: https://it.emcelettronica.com/corso-sugli-aeromobili-a-pilotaggio-
remoto-partendo-da-zero-descrizione-del-modello-matematico-3
42
D R A O B
La scheda di sviluppo Marvin LoRa per l’IoT di Maurizio Di Paolo Emilio
La scheda di sviluppo Marvin LoRa per l’Internet of Things rappresenta la scelta ideale per iniziare a progettare dispositivi sfruttando le potenzialità del protocollo LoRa. Il kit di sviluppo permette di acce- lerare il time-to-market di un progetto, realizzando una innità di soluzioni in diversi campi applicativi.
INTRODUZIONE
L
a scheda di sviluppo Marvin è stata progettata
come un tool molto semplice anche per chi non ha familiarità con la programmazione e la progettazione elettronica, con la possibilità di utilizzare i sensori Marvin Grove nel modo più semplice possibile con l’opzione di visualizzare i dati online tramite un applicativo Web. Con quest’ultimo è possibile impostare la scheda
per far eseguire varie logiche di programmazione, selezionando semplicemente il sensore e scaricando direttamente il codice già pronto (gura 1).
che si può attingere a un’enorme comunità di sviluppatori per accelerare il processo di sviluppo. Il protocollo di comunicazione è LoRa, acronimo di Long Range Radio. È la tecnologia wireless per eccellenza, destinata alle reti M2M e IoT. Questa tecnologia consentirà alle reti pubbliche di connettere più applicazioni in esecuzione nella stessa rete, soddisfando nello stesso tempo lo sviluppo di smart city con l’ausilio di sensori e prodotti automatizzati. Le principali speciche sono riassunte nei punti seguenti: • MCU – Atmel/Microchip ATmega32u AVR MCU
Marvin è una scheda di sviluppo plug and play per la prototipazione rapida di soluzioni IoT. Funziona con
la piattaforma IDE Arduino open source, il che signica
•
lo stesso di Arduino Leonardo). Connettività – LoRa via Microchip RN2483; 868 MHz e 433 MHz.
Figura 1: la scheda Marvin LoRa 43
BOARD
Figura 2: la scheda Marvin con i dettagli hardware
Categoria
Scheda di prototipazione
Serie
ATMega32
Adatto per
Rete LoRa
Interfacce
Grove, USB 2.0 spina A, USB 2.0 presa Micro-B
Voltaggio Max.
5V
Voltaggio operativo Min.
3.3 V
Tensione d’esercizio
3.3 - 5 V
Ingressi digitali
5
Numero di ingressi analogici
6
Numero di uscite digitali
4
Numero I/O
14
Numero di uscite analogiche
6
Numero di ingressi digitali
4
Lunghezza - Profondità
85 mm
Larghezza
30 mm
Altezza
2.4 mm
Colore
Nero
Assorbimento di corrente
Tipico 50 mAh, un massimo di 200 mAh, 40 mAh per I/O
Memoria Flash
32k
Materiale
Plastica
Potenza
1W
Tabella 1: dati tecnici della scheda Marvin LoRa 44
BOARD
Figura 3: schema a blocchi del modulo RN2483
• • • •
USB – 1x USB, 1x micro USB port per alimentazione e programmazione. Debugging – USB, e ISP header. Espansione – connettori 5x Grove. Power Supply – 5V via USB port.
no Leonardo e con sensori grove da implementare sulla scheda. La scheda è progettata come una porta USB
(pcb da 2,4 mm di spessore) in modo da poterla collegare sia al laptop che al powerbank per congurare /
alimentare l’applicazione (Figura 2). La scheda Marvin ore la possibilità di sviluppare pro-
CARATTERISTICHE TECNICHE
totipi IoT, funzionando, di fatto, come dispositivo stand-
Marvin è una scheda di sviluppo compatibile con Ardui-
alone. I sensori si possono collegare come plug and
Figura 4: sensori grove da collegare alla scheda Marvin 45
BOARD
Figura 5: gli step per creare il progetto IoT con la scheda Marvin
play, orendo un basso consumo energetico grazie al
protocollo di comunicazione LoRa e ad un ottimo design basato essenzialmente sul modulo RN2483 della Microchip. Ci sono molti sensori compatibili da implementare: da quello di temperatura passando per i sensori di pressione e accelerometri vari. La scheda è compatibile con Arduino in termini di software: è possibile utilizzare
l’IDE per la programmazione come Arduino Leonardo (ATmega32u), ma le shield Arduino non possono essere implementate direttamente sulla scheda (se non con modiche hardware per i più esperti). La principali caratteristiche sono riassunte in tabella 1. ATmega32u combina 32KB di memoria ash ISP con
capacità di lettura e scrittura, 1KB EEPROM, 1KB SRAM, 22 linee di I/O per uso generico, 32 registri, due timer/contatori essibili con modalità di confronto e PWM, USART, timer watchdog programmabile con oscillatore interno, porta seriale SPI, interfaccia WIRE
per debug e programmazione on-chip e cinque modalità di risparmio energetico selezionabili da software. Il cuore della scheda è il modulo LoRa Microchip RN2483. Il modulo fornisce una lunga portata di comunicazione con alta immunità all’interferenza. Utilizzando la tecnica di modulazione della tecnologia LoRa, RN2483 può raggiungere una sensibilità del ricevitore di -146 dBm.
di rete LoRaWAN compatibile, sia pubblica che privata. Il modulo è progettato specicamente per la facilità d’u-
so, riducendo così i tempi di sviluppo e accelerando il time-to-market (gura 4).
CONCLUSIONI E CONSIDERAZIONI Al giorno d’oggi sono disponibili vari protocolli di comunicazione wireless, e LoRa è un esempio che si aggiunge all’insieme di connettività presente nel mercato. Con Internet of Things e Marvin si possono realizzare una infnità di soluzioni a basso costo, nei più dispa-
rati campi che spaziano da quello industriale passando per il consumer. Ci sono cinque passaggi fondamentali per creare un progetto IoT (Figura 5); in primo luogo connettere la scheda Marvin al PC e aggiungere i sensori necessari, poi scrivere il codice ed eettuare l’upload sulla scheda, a conclusione, dopo aver vericato il
funzionamento, collegare Marvin all’alimentazione per testare il progetto.
LA SCHEDA DI SVILUPPO MARVIN LORA PER IOT
È DISPONIBILE A CATALOGO CONRAD CON SPEDIZIONE 24H
L’alta sensibilità combinata con l’integrato amplicatore da +14 dBm, ore un collegamento ottimale per le appli-
cazioni che richiedono una gamma estesa e buona robustezza. Il modulo RN2483 ore ottimi valori in termini
di rumore di fase, selettività, linearità del ricevitore e un minor consumo di energia (gura 3).
Il modulo lavora sulle frequenze ISM europee 433/868 MHz, ed è in grado di coprire ampie distanze dell’ordine di una decina di km in aree urbane. L’eciente sistema di power management ore un’alimentazione a batteria con autonomia di circa 10 anni. Il protocollo LoRa-
WAN di classe A del modulo RN2483 integrato consente
la connettività senza problemi a qualsiasi infrastruttura
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: https://it.emcelettronica.com/la-scheda-di-sviluppo-marvin-lora-
per-liot
46
R E K A M
Realizziamo un semplice Vocal Commander con ESPertino di Giovanni Di Maria
In questo articolo proponiamo un interessante dispositivo capace di abilitare due diversi carichi con il semplice comando della voce. La particolarità del circuito risiede nel fatto che non sono utilizzate shields supplementari o circuiti aggiuntivi, per raggiungere lo scopo. L’intero sistema usa, infatti, solo un semplice microfono a condensatore. Il prototipo costituisce un punto iniziale per sviluppare appli- cazioni più importanti e utili.
LA VOCE CHE COMANDA
É
spesso comodo poter attivare un circuito con la voce, magari se si hanno entrambe le mani occupate. Quello proposto di seguito è un didattico
circuito che attiva due diversi carichi con altrettanti comandi vocali. Per la precisione, il comando “TV” attiva il diodo Led collegato alla porta 16 di ESPertino, mentre il comando “SCALDABAGNO” attiva il Led collegato alla porta 17 della stessa scheda. Dal momento che si tratta solo di un circuito sperimentale è necessario premere il tasto “Reset” sulla scheda, ad ogni invio del comando. Tale comportamento può essere facilmente modicato.
ESPERTINO NON CONOSCE LE PAROLE Attenzione: il sistema proposto non è in grado di discriminare realmente le parole e identicare i fonemi che le
compongono. L'algoritmo, infatti, si limita ad analizzare
la forma d'onda prodotta dalla voce e la confronta con
dei modelli presenti in memoria. Il modello più simile dovrebbe corrispondere al comando vocale impartito tramite il microfono. La digitalizzazione di parole e frasi, infatti, crea dei segnali audio caratterizzati da una particolare forma d'onda. Uno dei metodi seguiti è quello di rappresentare tale insieme di dati in forma matematica per poi confrontarli con dei modelli standard. La gura 1
mostra le registrazioni delle parole "SCALDABAGNO" e "TV" eseguite da tanti individui appartenenti a entrambi i sessi e a varie fasce d'età. Si nota subito la somiglianza tra i segnali registrati, a parità di parole pronunciate. Il sistema sfrutta proprio tale aspetto. Nonostante i comandi vocali siano stati dettati da persone diverse, si può notare che il pattern di ogni parola rispetta un modello simile e costante. La gura 2, invece, focalizza la diversità dinamica tra
le due forme d'onda appartenenti, rispettivamente, alle parole "SCALDABAGNO" e "TV".
Figura 1: le forme d'onda delle parole create da soggetti diversi 47
MAKER
Figura 2: le dierenze dinamiche tra le due forme d'onda relative alle parole "Scaldabagno" e "TV"
COME CREARE UN MODELLO DI PAROLA/ COMANDO
successive elaborazioni, come si può osservare nella gura 4.
La prima fase da seguire è quella dell'addestramento
di ESPertino. E' una procedura, se vogliamo, lontanamente simile a ciò che fa l'uomo. Esso impara a riconoscere dei modelli di suoni, senza analizzarne campione per campione. Per la registrazione dei due modelli di comando, corrispondenti alle parole "SCALDABAGNO" e "TV", utilizziamo il programma Wavosaur , un bel software leggero e semplice per la gestione dei segnali audio. Esaminiamo, dunque, tutte le fasi, al ne di ricavare i modelli da memorizzare nella memoria RAM di ESPertino.
PRIMA FASE: REGISTRAZIONE DEL CO- MANDO
SECONDA FASE: SUDDIVISIONE IN 20 SEG- MENTI La RAM dell'ESP32 non è molto grande. Inoltre non è necessario gestire le migliaia di campioni che fan-
no parte dell'intera forma d'onda. Ne bastano molti di meno, diciamo venti, per descrivere in forma generale un determinato comando. Per questo scopo si deve esportare, sempre con il Wavosaur, il segnale registrato in formato TXT, accedendo al menù File, Export e, inne, Export as Text. Sarà creato un le testuale contenente tutti i campioni della forma d'onda registrata, compresi tra -1 e 1. La gura
mo un articolo descrittivo in merito). Si prema il tasto rosso e si può registrare subito il comando, ad esempio
5 mostra uno stralcio di tale documento. Tutti i campioni esportati si devono suddividere in venti gruppi e di ogni raggruppamento occorre prendere il valore massimo. Quest'ultimo costituisce il campione
"Scaldabagno", parlando vicino al microfono. La gura 3
modello da considerare nei raronti successivi. Non si
mostra la videata subito dopo questa operazione. Fate in modo da non tagliare le semionde, parlando troppo forte. Al limite ripetete la registrazione. Il segnale così acquisito non va bene, deve essere
può prendere il valore medio di essi in quanto il segnale contiene semionde positive e negative e il risultato sarebbe, praticamente, nullo. Abbiamo realizzato, a tutti gli
post-processato. In particolare occorre:
re, radiantisticamente parlando.
Si avvii il programma Wavosaur (a breve pubblichere-
• • •
Trasformare le due tracce in mono (menù Process); Eseguire un resample a 22050 Hz (menù Process); Tagliare il silenzio iniziale e quello nale (selezionare con il mouse e premere il tasto Canc).
Solo così si può ottenere una forma d'onda adatta alle
eetti, una sorta di rivelazione d'onda di tipo softwa-
Il nostro segnale dell'esempio contiene ben 24280 campioni. Ognuno dei venti gruppi, pertanto, dovrà contenere 1214 campioni (24280/20). La ricerca del massimo di ogni gruppo può avvenire tramite foglio elettronico oppure con l'ausilio di un piccolo script, scritto in qualunque linguaggio di programmazione. I venti valori massimi calcolati per l'esempio sono riportati nella seguente tabella: 48
MAKER
0
0.093282
1
0.0807
2
0.285447
3
1
4
0.609658
5
0.256361
6
0.931281
7
1
8
0.363859
9
0.260479
10
0.941954
11
0.946097
12
0.500263
13
0.43764
14
0.292481
15
0.31729
16
0.319028
17
0.220881
18
0.129024
19
0.070921
Essi generano un modello molto più semplice che ben rappresenta la forma sommaria dell'onda, come visualizzato in gura 6. Ribadiamo, ancora una volta, che le
parole di comando scelte devono essere molto diverse tra loro, sia a livello di fonetica che di dinamica temporale, al ne di creare il meno possibile occasioni di ambiguità tra i modelli. Si esegua tale procedura per tutte le parole di comando previste nel prototipo.
TERZA FASE: ADEGUAMENTO DEL MODEL- LO ALL'INTERVALLO 0~100 I venti campioni ottenuti con l'operazione precedente, di tipo oat e compresi tra 0.00 e 1.00, devono essere adeguati a un nuovo intervallo, per la loro migliore gestione. In particolare, essi saranno compresi tra 0 e 100 e di tipo intero, per le seguenti motivazioni: • In questo modo essi sono velocemente e più fa49
•
cilmente trattabili dall'ESP32; Il fatto di risultare di tipo "intero" migliora la loro elaborazione.
E' un'operazione semplice quella di "trasportare" e adeguare le informazioni al nuovo intervallo. E' suciente,
infatti, applicare una proporzione in modo che il valore minimo della serie corrisponda a 0 nel nuovo insieme e il valore massimo corrisponda a 100. Non basta, quindi, moltiplicare semplicemente i valori per 100. Questa operazione sarà egregiamente svolta dalla funzione map() dello sketch. Si viene, così, a creare, la seguente nuova tabella. Le nuove informazioni, visibili gracamente in gura 7,
disegnano la medesima onda di modello vista in precedenza, ma questa volta vengono ssati sicuramente
a 0 e a 100, rispettivamente, i relativi volumi minimi e
MAKER
n
Range 0~1 FLOAT
Range 0~100 FLOAT
Range 0~100 INT
0
0.093282
2.406792
2
1
0.0807
1.05254
1
2
0.285447
23.09017
23
3
1
100
100
4
0.609658
57.98613
58
5
0.256361
19.9595
20
6
0.931281
92.60353
93
7
1
100
100
8
0.363859
31.52993
32
9
0.260479
20.40278
20
10
0.941954
93.75230
94
11
0.946097
94.19823
94
12
0.500263
46.21156
46
13
0.43764
39.4712
39
14
0.292481
23.84727
24
15
0.31729
26.51755
27
16
0.319028
26.70461
27
17
0.220881
16.14071
16
18
0.129024
6.253828
6
19
0.070921
0
0
massimi. In altre parole, se la voce con cui si impartisce il comando è troppo bassa o troppo alta, non fa dieren-
di due euro. I relativi collegamenti prevedono la connessione a una fonte di alimentazione. L'uscita di 3.3V
za, l'onda è sempre riadattata ai limiti imposti e la sua forma è sempre la medesima.
di ESPertino è adatta allo scopo. E' necessario che il
L'array di esempio contenente il modello per la parola "SCALDABAGNO" è, dunque, il seguente:
microfono sia sempre preceduto da una resistenza di polarizzazione in modo da limitare il usso di corrente e porre a metà strada la sua tensione di uscita, a riposo. Nel nostro caso si è utilizzata una resistenza da 10 kohm ma è utile
int array_vocale[]={2,1,23,100,58,20,93,100,32,20,94,94,46,39,24,27,27,16,6,0}; // Scaldabagno
controllare sempre la reale tensione a riposo. La gura 8 mostra tale dispositivo, assieme al relativo schema di collegamento e ai due graci della
Leggi anche: Come costruire un microfono-etilome-
tro con Arduino
IL MICROFONO
risposta, sia in regime statico che dinamico. E' consigliabile posizionare la tensione del segnale audio statico a metà strada (ossia tra 0V e VCC) in modo che esso possa oscillare liberamente nei due quadranti senza essere tagliato (distorsione).
Per il Vocal Commander si è adoperato un semplice
microfono a condensatore provvisto di due terminali.
SCHEMA ELETTRICO E CABLAGGIO
Il suo costo è molto basso e si trova anche per meno
Il collegamento dell'intero sistema è molto semplice e 50
MAKER
Figura 3: la registrazione del comando "Scaldabagno" con Wavosaur
utilizza la scheda ESPertino più il microfono a condensatore e due diodi Led per controllare le due uscite rela-
deve essere, ovviamente, rimosso in fase di editing e compilazione sull'IDE di Arduino. Vediamo, in dettaglio,
tive ai comandi vocali impartiti. Esso è mostrato in gura
le varie porzioni di codice: • Riga 1: la denizione SAMPLE ssa il numero
9. Il microfono risulta collegato alla porta 35 di ESPertino, trattata come ingresso analogico. Su di essa, a riposo, si dovrebbe rilevare la tensione di VCC/2, ossia di circa 1.6V. Qualche decimo di volt in più o in meno non
di campioni registrabili. Non si deve superare il valore di 30000 pena il crash del sistema; •
dove sono collegati i diodi Led. Alla porta 13 risulta connesso il Led che informa della registrazione in corso, mentre alla 16 e alla 17 sono collegati i due Led dei carichi da pilotare;
è assolutamente critico. I due diodi Led sono, invece,
collegati, alle porte 16 e 17 di ESPertino. Sono semplici indicatori di stato logico ma potrebbero essere sostituiti da carichi più robusti precedendoli, ovviamente, da dispositivi di potenza come, ad esempio, transistor,
•
ESPertino.
Il listato sorgente è un po' lungo e merita di essere
compreso alla perfezione. E' composto da blocchi logici ognuno dei quali esegue una ben precisa funzionalità. Le righe di programma sono numerate progressivamente per essere facilmente commentate. Tale numero 51
Righe 7~8: l'array campioni1[10000] contiene
i reali campioni registrati attraverso il microfono. L'array campioni2[20] contiene, invece, i 20 campioni ricavati dalla registrazione;
mosfet o gli stessi due piccoli relè montati sulla scheda
LO SKETCH
Righe 2~4: si deniscono i numeri delle porte
•
Righe 9~10: gli array array_vocale1[] e array_
vocale2[] contengono i modelli delle due parole di comando. Costituiscono, dunque, la conoscenza di base del sistema e su essi vengono [ Continua a pag. 5 8 ]
MAKER
Figura 4: il segnale è stato ripulito e adattato con Wavosaur
Figura 5: esportazione dei campioni in formato TXT 52
MAKER
Figura 6: il comando vocale (in blu) e il relativo modello semplicato (in rosso)
Figura 7: i venti campioni riadeguati al nuovo intervallo 0~100 53
MAKER
Figura 8: il microfono a condensatore e suo funzionamento a riposo e a regime
Figura 9: il cablaggio del Vocal Commander 54
MAKER
Figura 10: la visualizzazione dei risultati su monitor seriale. E' stato pronunciato il comando "SCALDABAGNO"
1
#dene SAMPLES 10000
2
int LED_ESPERTINO=13;
3
int LED_CARICO1=16;
4
int LED_CARICO2=17;
5
int digitale;
6
int k;
7
int campioni1[SAMPLES]; //---Contiene la voce
8
int campioni2[20];
9
int array_vocale1[]={1,1,0,0,1,1,100,100,6,2,1,96,44,5,12,2,0,0,1,1};
10
int array_vocale2[]={4,3,3,39,40,0,32,59,18,7,59,100,4,64,43,24,4,5,16,21};
11 void setup() { 55
//---Contiene il modello semplicato
// TV // Scaldabagno
MAKER
12
pinMode(LED_ESPERTINO,OUTPUT);
13
pinMode(LED_CARICO1,OUTPUT);
14
pinMode(LED_CARICO2,OUTPUT);
15
digitalWrite(LED_ESPERTINO,HIGH); // Spegne Led (è al contrario)
16
digitalWrite(LED_CARICO1,LOW); // Spegne Led del carico
17
digitalWrite(LED_CARICO2,LOW); // Spegne Led del carico
18
analogSetAttenuation(ADC_11db);
19
analogReadResolution(12);
20
Serial.begin(9600);
21
}
22
void loop() {
// Risoluzione ADC a 12 bit
23
//-------------Inizia la registrazione e memorizza in array-----------------
24
digitalWrite(LED_ESPERTINO,LOW); // Accende Led (è al contrario)
25
for(k=0;k
26
digitale=analogRead(35);
27
campioni1[k]=digitale;
28
delayMicroseconds(100);
// Legge la voce dall'ADC // Memorizza la voce in array
29
}
30
digitalWrite(LED_ESPERTINO,HIGH); // Spegne Led
31
//--------Calcola i vari massimi e li memorizza in un vettore----------
32
//--- Non posso calcolare media per presenza di semionde positive e negative-----
33
int i=0;
34
int massimo=0;
35
for(k=0;k
36
if(campioni1[k]>massimo)
37
massimo=campioni1[k];
38
if((k+1)%500==0) {
39
campioni2[i]=massimo;
40
massimo=0;
41
i++;
42
// Trova il valore massimo // Divide il segnale in 20 gruppi
} 56
MAKER
43
}
44
//------Adegua il vettore ai limiti 0-100-----
45
int fromLow=22222;
46
int fromHigh=0;
47
for(k=0;k<20;k++) {
48
if(campioni2[k]>fromHigh)
49
fromHigh=campioni2[k];
50
if(campioni2[k]
51
fromLow=campioni2[k];
52
}
53
for(k=0;k<20;k++)
54
//---Trova il massimo del vettore2
//---Trova il minimo del vettore2
campioni2[k]=map(campioni2[k],fromLow,fromHigh,0,100); //-----Trasforma nel range 0..100
55
//------Determina il vettore (MODELLO) più simile alla registrazione----
56
oat dierenza_comando1=0;
57
oat dierenza_comando2=0;
58
for(k=0;k<20;k++) {
59
dierenza_comando1+=abs((oat)campioni2[k]-array_vocale1[k]);
60
dierenza_comando2+=abs((oat)campioni2[k]-array_vocale2[k]);
61
}
62
//--------Attiva il CARICO corrispondente-----------
63
if(dierenza_comando1
64
65
digitalWrite(LED_CARICO1,HIGH); // Accende Led
else
66
digitalWrite(LED_CARICO2,HIGH); // Accende Led
67
//----Visualizzazione per debug----
68
Serial.println(" ");
69
for(k=0;k<20;k++) {
70
57
// Valore assurdo iniziale
Serial.println(campioni2[k]);
71
}
72
Serial.println(" ");
73
Serial.println(" ");