Visualizzare le variazioni X,Y e Z dell’ADXL345 su un Display TFT da 3.5″ e poi elaborarli su un foglio di calcolo, memorizzandoli su SD Card.

La scorsa settimana abbiamo visto l’accelerometro ADXL345 e come renderlo operativo su Arduino UNO. Oggi andiamo a vedere come inserirlo in un sistema sismografico con un Display TFT SPI da 3.5″ (anche questo visto in un articolo precedente) con integrato un lettore di SD Card che sfrutteremo per memorizzare i dati rilevati in formato CSV; useremo questo formato per poi trasportare i dati su un foglio di calcolo come Excel o Calc e poterli poi elaborare in un grafico.

Progetto

Questo è un progetto didattico con finalità scolastiche, in modo che si possa far apprendere sia l’analisi e sia l’elaborazione dei dati. Utilizzeremo l’accelerometro ADXL345 per simulare i movimenti tellurici e ricavarne informazioni che visualizzeremo in tempo reale su un Display TFT e che verranno costantemente memorizzate tramite il lettore SD Card integrato nel display su un file CSV, che poi elaboreremo in un grafico lineare su un foglio di calcolo. Il progetto vedrà utilizzato un Arduino Mega che ci consentirà di adoperare una potenza di calcolo maggiore di Arduino UNO e di usare liberamente più pin. Infine, sul display i dati non verranno rappresentati numericamente, ma come 3 linee  (una per asse) che scorreranno e varieranno con le sollecitazioni dell’accelerometro.

Componenti

Per il suddetto progetto andremo ad utilizzare un accelerometro ADXL345, un Display TFT 3.5 SPI con chip ILI9486, un Arduino Mega e una Micro-SD che alloggeremo nel lettore SD del display con un adattatore. Nel nostro progetto adopereremo una Micro-SD da 1GB, anche perchè il file CSV non sarà di eccessive dimensioni.

Ricordiamo però che è possibile adoperare una qualsiasi SD Card senza troppi problemi. Premettiamo anche che il Display TFT 3.5 SPI ILI9486 è stato scelto perché era già in nostro possesso e che è dotato di una buona risoluzione (480×320) per poter leggere i dati.

Lista componenti su Amazon:

Lista componenti su Aliexpress:



Collegamenti

Non sarà troppo difficile collegare tutte le nostre componenti in modo che funzionino. Come sappiamo l’accelerometro ADXL345 sfrutta l’intefaccia I2C (sarà collegato ai pin SDA e SCL di Arduino Mega), mentre il Display TFT che utilizziamo è una shield per Arduino Mega e verrà solamente posta sulla dev-board in modo che tutti i pin vengano correttamente inseriti, sfruttando invece l’interfaccia SPI.

Per quanto riguarda il lettore di SD Card, essendo integrata nel display non necessita di collegamenti particolari, sebbene sia importante ricordare che nativamente Arduino Mega gestisce la SD Card sul pin digitale 53.

Codice

Per far sì che Arduino Mega interagisca con l’accelerometro, con il Display e con il card reader dobbiamo necessariamente utilizzare le rispettive librerie. La ADXL345.h per l’accelerometro, mentre per il display shield dobbiamo usare la UTFT.h e la SD.h (questa è già disponibile nella IDE di Arduino). Per scaricarle, cliccate sul nome della libreria. Il codice che abbiamo sviluppato utilizzerà quanto visto negli articoli riguardanti l’accelerometro e il display TFT, con l’aggiunta di una buona parte di codice che utilizzeremo per avviare, leggere e scrivere informazioni su una SD Card. Analizzando lo sketch, vediamo che nella prima parte, oltre ad includere tutte le necessarie librerie, creiamo l’oggetto per programmare l’accelerometro, il display e la SD Card, oltre a fornire le informazioni per i collegamenti e gli indirizzi:


#include <UTFT.h> // Libreria UTFT Display TFT ILI9486
#include <Wire.h>
#include <ADXL345.h> // Libreria accelerometro ADXL345
#include <SD.h> // Libreria SD Card
#include <SPI.h>

ADXL345 accel(ADXL345_ALT); // Indirizzo Alternativo con SD0 in LOW

extern uint8_t SmallFont[];
UTFT myGLCD(CTE40,38,39,40,41); // Identifica il tipo di display TFT

const int CS_PIN = 53; // Pin CS di Arduino Mega
float x,y,z;

String dataString =""; // Variabile stringa per caricare i dati
File SDData;

Nel VOID SETUP avvieremo e eseguiremo dei controlli di routine per verificare l’accelerometro e, dopo aver inizializzato il display e pulito con la funzione clrScr, verifichiamo se la SD Card è collegata correttamente:


if (!SD.begin(CS_PIN)) {
Serial.println("SD CARD non presente");
while (1);
}
Serial.println("SD Card inizializzata");
}

Il VOID LOOP si limiterà a scrivere i nomi degli assi che andiamo a stampare e ad eseguire la funzione assi_xyz() che abbiamo creato per disegnare con la funzione DrawLine, usando le variabili X,Y e Z combinate con la variabile i dentro un unico ciclo FOR, in cui la variabile i verrà incrementata costantemente di una unità fino ad un massimo di 480 (limite massimo dei pixel del display). Ogni volta che i cambia, viene rilevato un valore dei 3 assi e stampato su display, disegnando 3 linee spezzate che formano un unico grafico che si aggiorna in tempo reale e che si cancella automaticamente appena raggiunto il bordo del display. All’interno della funzione assi_xyz() è poi presente una funzione che memorizza su un file CSV i valori di X, Y e Z. Per memorizzarli adopereremo una singola stringa che utilizzerà il punto e virgola (;) come separatore in modo che Excel, quando aprirà il file CSV, creerà una colonna per ogni asse.


void MemoryCard(){
dataString = String(x) + ";" + String(y) + ";" + String(z); // Crea una stringa contenente i valori X,Y e Z. Con ; crea nuove colonne nel file CSV
SDData = SD.open("dati.csv", FILE_WRITE); // Crea il file CSV
if (SDData){
SDData.println(dataString); // Scrive le stringhe nel file
SDData.close(); // Chiude il file
}
else{
Serial.println("Errore di scrittura sul file!");
}
}

Non ci resta che caricare lo sketch che potete scaricare QUI ed effettuare delle prove. Una volta terminato, spegnete il dispositivo e rimuovere il supporto di memoria.

Per leggere i dati sul foglio di calcolo, collegate la SD card al PC tramite un lettore di Card o un adattatore USB, poi aprite il file. Non temete se il file risulta creato il 01/01/2000 perché non adoperando un modulo RTC, Arduino di default imposta questa come data. Noterete che i dati sono sistemati in 3 colonne, una per asse. Tuttavia, i singoli valori sono stati memorizzati come stringhe e non come numeri. Ciò li rende inutilizzabili su un foglio di calcolo, anche perché i valori numerici qui collocati adoperano il punto come separatore decimale e non la virgola, come invece accade nel sistema italiano. La scelta migliore è modificare le impostazioni di Excel, cambiando i separatori di sistema. Andate su “File”, poi “Opzioni” e “Impostazioni Avanzate”, togliete la spunta dalla voce “Utilizza separatori di sistema”, date OK e chiudere e riaprite il file. I valori saranno identificati come numerici e adoperabili per essere inseriti in un grafico lineare.




Se invece utilizzate LibreOffice Calc, la conversione sarà semplificata all’apertura del file, infatti si aprirà la finestra di “Importazione testo” e basterà selezionare la voce Inglese US per ogni colonna nel campo “Tipo Colonna” e poi premere “OK” per confermare.

Conclusioni

Il progetto è abbastanza semplice e di facile riproduzione, spendendo per altro una cifra tra i 20€ e i 30€. Possiamo implementarne le funzionalità ed utilizzarlo come un vero e proprio sismografo, adoperando un modulo RTC che inserisca anche una data ed ora precisa per ogni rilevazione, oppure impostare una funzione Sleep Mode per effettuare misurazioni a determinati intervalli e risparmiare anche batteria o altre fonti di energia. A livello didattico è consigliato soprattutto per le classi della scuola secondaria di primo grado al fine di ottenere e maturare le conoscenze base su raccolta ed analisi dei dati.