Realizziamo con Arduino un distanziometro: un dispositivo per misurare le distanze grazie agli ultrasuoni
Ritorniamo ad adoperare Arduino Nano per realizzare un piccolo progetto portatile e di facile realizzazione, con cui ottenere misurazioni valide e quanto meno precise. Per questo progetto abbiamo adoperato componenti che avevano già in casa e provenienti da kit differenti o da acquisti fatti precedentemente. Come sempre lasceremo una lista con tutte le componenti che potete acquistare per realizzare il vostro distanziometro.
Progetto
In realtà il progetto nasce dalla noia e dalla voglia di trascorrere un pomeriggio in casa, ispirato anche dalle ultime notizie riguardanti il periodo di quarantena che tutti stiamo vivendo. Per esorcizzare la necessità di mantenere le distanze, abbiamo giocato nel voler realizzare uno strumento utile per misurarle. Ovviamente lo scopo non è quello di mantenere distanti le persone, ma al contrario di calcolare la vicinanza. Possiamo, altresì, adoperare questo distanziometro per prendere le misure in casa.
Componenti
Per realizzare il nostro distanziometro ad ultrasuoni abbiamo adoperato in primis un Arduino Nano che sarà il cervello del nostro dispositivo portatile, poi per misurare queste distanze abbiamo usato un sensore ad ultrasuoni HC-SR04, che abbiamo imparato ad usare in questo articolo, mentre per visualizzare i risultati abbiamo adoperato un Display TFT da 1,8″ che avevamo già in casa, ma potremmo sostituirlo con più facilità con un Display OLED o LCD che richiedono meno collegamenti. Per dare corrente useremo una batteria da 9V, facilmente acquistabile, ed un interruttore per accendere e spegnere il dispositivo.
La scelta più personale invece ricade sul case del dispositivo; noi avevamo una piccola scatolina in plastica trasparente 5,5 x 8 x 3,5 cm che custodiva dei chiodini e che ci permetteva di inserire alla perfezione tutto quello che abbiamo elencato fin ora.
Lista componenti su Amazon:
- Arduino Nano: https://amzn.to/3eb5xPD
- HC-SR04: https://amzn.to/2xbmHvY
- Display TFT 1,8″: https://amzn.to/3c8TUHa
- Interruttore G65: https://amzn.to/3c89JO8
Lista componenti su Aliexpress:
- Arduino Nano: http://s.click.aliexpress.com/e/BqwF16Oc
- HC-SR04: https://s.click.aliexpress.com/e/_d8Xgw8i
- Display TFT 1,8″: https://s.click.aliexpress.com/e/_d7detcS
- Interruttore G65: https://s.click.aliexpress.com/e/_d7F9XwQ
Codice
Il codice non è particolarmente complesso, anzi è molto semplice e sfrutta tutte le conoscenze fin ora acquisite in materia di Display TFT e di sensore Ultrasuoni. Vi ricordiamo che il Display TFT sfrutta l’interfaccia SPI, quindi molto pin digitali saranno occupati da questo device, in particolare i pin 8, 9, 10, 11, 13, mentre per il sensore HC-SR04 adopereremo i pin digitali 3 e 4. Per alimentare Arduino Nano collegheremo il positivo della batteria al pin VIN ed il negato al GND, mentre per dare corrente al sensore ultrasuoni useremo il pin 5V e il pin 3,3V per dare corrente al display.
Tornando allo sketch, che potete scaricarlo QUI il codice, iniziamo come sempre con inserire le librerie per il display TFT ST7735 e Adafruit-GFX e poi dichiariamo in pin a cui collegare il display. Le restanti dichiarazione riguardano i colori, il nome dell’oggetto display e la variabile float per la distanza.
#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 10 #define TFT_RST 9 #define TFT_DC 8 #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define ECHO_PIN 3 #define TRIG_PIN 4 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); float distanceCm;
Nel VOID SETUP inizializziamo il monitor seriale, il display e indichiamo le direzioni dei pin usati per il sensore ultrasuoni
pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); tft.initR(INITR_BLACKTAB); tft.setRotation(1); tft.fillScreen(ST77XX_BLACK); Serial.begin(9600);
Nel VOID LOOP vediamo come rilevare la distanza in centimetri e in pollici ogni 100 millisecondi, prestando attenzione al IF/ELSE che abbiamo inserito, nel quale confermiamo di stampare i risultati solo se inferiori a 400 cm, poiché esso è il limite di misurazione del sensore HC-SR04. In caso contrario, verrà mostrato un messaggio di Errore e dopo un secondo si effettuerà una nuova misurazione.
if (distanceCm <400){ tft.setCursor(40,5); tft.setTextColor(CYAN); tft.setTextSize(1); tft.println("Centimetri"); tft.setCursor(10,30); tft.setTextColor(WHITE, BLACK); tft.setTextSize(4); tft.print(distanceCm); tft.print(" "); tft.setCursor(40,73); tft.setTextColor(YELLOW); tft.setTextSize(1); tft.println("Inch"); tft.setCursor(10,97); tft.setTextColor(WHITE, BLACK); tft.setTextSize(4); tft.print(distanceinch); tft.print(" "); } else { tft.fillScreen(ST77XX_BLACK); tft.setCursor(10,50); tft.setTextColor(RED); tft.setTextSize(5); tft.println("Error"); delay (1000); tft.fillScreen(ST77XX_BLACK); }
Conclusioni
Il progetto, come esplicato sopra, non è particolarmente complesso sia dal punto della programmazione che della realizzazione ed è possibile realizzarlo con una spesa abbastanza ridotta di circa 29€ acquistando i pezzi su Amazon, ma si riduce di molto se li acquistate su Aliexpress.
Non è un dispositivo estremamente preciso se tenuto in mano, ma si dimostra affidabile se posto su una superficie piana, inoltre, ricordandovi che si tratta di ultrasuoni, più la superficie riflettente è irregolare, meno precisa è la misurazione.