Sebbene sia stato progettato come gadget omaggio per fiere ed eventi simili, questo righello riesce a misurare elettronicamente distanze fino a due metri, grazie all'adozione del sensore VL53L0X, utilizzato per la determinazione del tempo di "volo" della luce (sensori ToF). Un connubio perfetto tra l'elettronica e il divertimento.
Introduzione
Questo dispositivo, regalato ai visitatori presso lo stand di Elektor alla fiera dell'elettronica a Monaco, in Germania, e al WoTS di Utrecht, in Olanda, è dotato di diversi pads per la saldatura e c'è anche lo spazio per l'alloggiamento di due connettori. Questo perché sul righello possono essere collocati 22 diodi LED (in package SMT 0805) con resistori limitatori di corrente da 1 kohm, una presa di estensione per Raspberry Pi a 40 vie e un connettore I2C a 6 pin, come si può vedere in figura 1.
Il righello RPi potrebbe avere tante applicazioni pratiche ma, soprattutto, contribuisce ad approfondire le nozioni meccaniche ed elettriche sul Raspberry Pi. Inoltre, può essere trasformato in un vero e proprio gadget di alta tecnologia, se si montano tutte le parti, se si collega un sensore VL53L0X al connettore I2C e, naturalmente, se si collega il righello al proprio RPi.
Il sensore del tempo di volo (ToF) VL53L0X
Il sensore VL53L0X utilizzato in questo progetto è davvero sorprendente. Prodotto dalla ST, la sua documentazione tecnica afferma che il modulo è alloggiato in un contenitore estremamente piccolo. Fornisce misurazioni precise della distanza indipendentemente dal tipo di riflessione del target e può misurare distanze assolute fino a due metri. Il sensore non stima la distanza da un oggetto misurando la quantità di luce riflessa da esso (che dipende molto dal colore e dalla finitura dell'oggetto), ma invece misura con precisione il tempo impiegato dalla luce per raggiungere l'oggetto e tornare indietro (il tempo di volo, in altre parole).
Diodo a valanga a singolo fotone
La luce riflessa viene rilevata da un diodo a valanga a singolo fotone o da SPAD. Questo è un tipo di diodo, simile al fotodiodo a valanga "normale" (APD), tranne per il fatto che ha bisogno di un singolo fotone incidente per innescare l'effetto valanga (break down) e produrre una corrente di pochi milliampere. Quando l'effetto cessa, lo SPAD può recuperare e rilevare un secondo fotone. La principale differenza tra uno SPAD e un APD è che quest'ultimo è un amplificatore lineare per segnali ottici mentre il primo è un dispositivo d'innesco. Il VL53L0X può fare rilevare, al massimo, un segnale luminoso proveniente da due metri e, in pratica, la distanza massima dipende dalle condizioni di luce ambientale e dalla superficie riflettente a cui è puntato. Dentro casa, la distanza di un metro non comporta problemi. All'aperto potrebbe essere minore. Le informazioni trasmesse dal VL53L0X possono essere trattate con interfaccia I2C.
La scheda
Per il progetto è stato utilizzato una scheda proveniente dall'estero (probabilmente cinese) facilmente reperibile su Internet (vedi figura 2). Il produttore, oltre alla schedina e al software per il sensore, ha prodotto anche diversi driver open source e librerie per Arduino e Raspberry Pi.
Un righello elettronico RPi
In questo progetto useremo i LED accesi per permettere, al nostro righello RPi, di visualizzare la distanza. Dal momento che vi sono solo 22 LED, la lettura è limitata alla misura di 22 centimetri. Si potrebbe implementare una visualizzazione più elaborata, usando il multiplexing a LED, per aumentare la portata. Sono stati montati i diodi LED rossi per i valori 10 e 20, mentre i LED verdi per tutti gli altri valori. Si noti che la distanza, in millimetri, viene anche visualizzata su un display collegato alla porta HDMI del Raspberry Pi. Questo progetto potrebbe essere costruito anche senza il righello: basta collegare il VL53L0X alla porta I2C del Pi. Il software è stato scritto su un Raspberry Pi 3 modello B V1.2 ma dovrebbe anche funzionare su altri Raspberry con un connettore di 40 pin. Prima di accendere il dispositivo si deve collegare il righello sull'embedded.
Installazione del software sul RPi
Il driver per VL53L0X è stato scritto in C++, ecco perché il software per questo progetto è anch'esso in C++. Esistono anche le librerie per il sensore in Python quindi, se si preferisce, si può adottare anche tale linguaggio. I seguenti passi sono stati eseguiti sul Raspberry Pi, non su un computer con Windows o Linux o macOS:
- scaricare e installare wiringPi [1]. Questa libreria è utilizzata per accedere ai Pin di GPIO del Raspberry in C++ in modo che si possano controllare i diodi LED;
- scaricare e scompattare il driver STSW-IMG005 per il VL53L0X dal sito della ST, precisamente dalla sezione "Scarica software" all'indirizzo [2];
- scaricare e scompattare l'adattatore per Raspberry VL53L0X_rasp di Cassou (Mathieu Cassard) [3];
- scaricare il Makefile da [4] e copiarlo nella cartella VL53L0X_rasp (sovrascrivere il file esistente);
- scaricare il file rpi_ruler.c da [4] e posizionarlo nella cartella VL53L0X_rasp/Esempi.
Supponendo che si siano eseguiti tutti i passaggi sopra elencati e che si lavori nella propria "home directory", occorre impartire i seguenti comandi:
cd VL53L0X_rasp make API_DIR = ~/VL53L0X_1.0.2/ make examples API_DIR = ~/VL53L0X_1.0.2/
Le ultime due righe devono essere inserite come una linea. Non ci dovrebbero essere avvertimenti o errori. Per eseguire il programma digitare:
./bin/rpi_ruler
Visualizzazione dei risultati
Dopo aver collegato il display al Raspberry si dovrebbero vedere le misure in scorrimento. Posizionando la mano o un oggetto davanti al sensore si dovrebbe osservare la distanza, espressa in millimetri. Se, al contrario, non si posiziona alcun ostacolo si dovrebbe leggere il valore 8192 (ossia misura fuori intervallo). Se un oggetto si trova entro 22 cm dal sensore, la relativa distanza è mostrata dai diodi LED. Se la distanza si trova "in bilico" tra due valori si potrebbero accendersi due LED contemporaneamente. La loro luminosità è determinata dal valore decimale. Per esempio: se la distanza misurata è 12,4 cm, il LED 12 ha una luminosità del 60% e il LED 13 si accende al 40% (ovviamente sarebbe meglio adottare una scala logaritmica e non lineare). La luminosità è controllata dalla funzione softPwmWrite, disponibile in wiringPi.
Annotazioni
Per ottenere migliori risultati si seguano attentamente i seguenti consigli:
- utilizzare una presa da 16 mm (o più alta) per il connettore del Raspberry Pi perché il righello deve passare sul connettore USB di Pi (vedi figura 3). Questa annotazione non riguarda il Raspberry Pi Zero perché non dispone di connettori alti;
- il sensore VL53L0X può essere alimentato con una tensione compresa tra 2,6 V e 3,5 V. Tuttavia i moduli VL53L0X hanno un regolatore di tensione per consentire l'alimentazione a 5 V. Il connettore I2C sul righello fornisce solo 3,3 V. Se occorrono 5 volt, si possono prelevare dal connettore di estensione del RPi;
- il sensore VL53L0X potrebbe avere una pellicola protettiva (spesso di colore giallastro). Occorre rimuoverlo prima di usarlo.
Elenco componenti
- Resistenze
- R1-R22 = 1kohm, 0805
- Semiconduttori
- LED1-LED22 = Led verdi, 0805
- Varie
- zoccolo 40 pin (20x2), passo 0,1", 16 mm
- connettore 6 pin SIL, passo 0,1"
>>>Leggi anche: Distanza: sensore ultrasuoni HC-SR04 e Arduino
Web Links
[1] wiringPi: http://wiringpi.com/
[2] Official VL53L0X driver: www.st.com/en/embedded-software/stsw-img005.html
[3] RPi VL53L0X driver: https://github.com/cassou/VL53L0X_rasp
[4] Makefile and main program: www.elektormagazine.com/labs/rpi-ruler