E' possibile inviare dati ed elaborazioni da Arduino direttamente su un foglio elettronico di Excel? La risposta è si, a patto di utilizzare un Add-on per il programma della Microsoft. La completa gestione è estremamente semplice e anche i principianti potranno visualizzare risultati e grafici a video, provenienti da elaborazioni eseguite dalla nostra fedele scheda di sviluppo.
Introduzione
Le soluzioni per interfacciare tra loro la scheda Arduino e il programma Excel sono molteplici. In pratica, occorre reperire (o addirittura scrivere) un software aggiuntivo, un Add-on, che permetta la connessione di dati dei due protagonisti, come mostrato nello schema a blocchi di cui alla Figura 1.
L'Add-on PLX-DAQ
Tra le tante soluzioni proposte e possibili abbiamo scelto quello della Parallax. L'Add-on PLX-DAQ (Parallax Data Acquisition tool) è in grado di acquisire dati da molteplici canali seriali e di riportarli nelle celle di Excel, e viceversa. Il suo funzionamento è estremamente semplice. Ecco alcune sue caratteristiche principali:
- può visualizzare in tempo reale dati e grafici;
- si possono spedire fino a 26 colonne di informazioni;
- c'è la possibilità di inviare una colonna contenente il tempo trascorso dall'ultimo reset, nel formato hh:mm:ss;
- si può leggere o scrivere qualsiasi cella del foglio elettronico;
- la velocità massima della trasmissione dati può essere di 128k.
Riportiamo, di seguito, le istruzioni per il suo scaricamento e per la relativa installazione sul PC, accompagnando le note con molte illustrazioni, al fine di rendere più agevole l'intera operazione. Il primo passo da compiere è quello, ovviamente, di scaricare l'Add-on dal sito della Parallax. Si apra, dunque, il file zippato e si estragga, eseguendolo, il file "plx_daq_install.exe". L'installazione creerà sul desktop la cartella "PLX-DAQ", nella quale è presente la guida e un collegamento al file di Excel contenente le macro di funzionamento. Si consiglia vivamente di non lavorare sul file originale ma di farne una copia. Tale documento è memorizzato nella cartella C:\Program Files\Parallax Inc\PLX-DAQ\ e il suo nome è PLX-DAQ.xls.
Configurazione dell'Add-on
Eseguiamo, dunque, una copia del file di Excel fornito a corredo nella suddetta cartella e apriamolo con l'omonimo programma. Il sistema avvertirà subito che si tratta di un documento corredato da macro, pertanto occorre abilitarle, come mostrato in Figura 2.
Un messaggio di avvertimento ricorderà che l'attivazione macro e dei controlli ActiveX potrebbero non essere sicuri. Se si ritiene che la fonte è attendibile, si può premere con tranquillità il pulsante OK. La macro è, dunque, eseguita e una piccola finestra di dialogo appare sul foglio elettronico, come mostrato in Figura 3.
L'utente deve solo preoccuparsi, inizialmente, di configurare la corretta porta COM alla quale è collegato Arduino e la velocità di trasmissione. Essa deve essere la stessa di quella utilizzata dalla scheda, al momento della scrittura dello sketch. Il numero della porta seriale può essere rilevato dall'IDE di Arduino.
Primo approccio
Bene, siamo pronti per iniziare. Come prima prova eseguiremo una semplice verifica di comunicazione, nella quale la scheda Arduino invia a un foglio di Excel, ogni 5 secondi, lo stato logico di un pulsante normalmente aperto. Questo primo esperimento serve solo a familiarizzare con l'Add-on e a configurarlo correttamente. Si realizzi, allo scopo, lo schema elettrico di cui alla Figura 4.
Nel cablaggio dell'illustrazione è presente un pulsante normalmente aperto, collegato alla porta 8 di Arduino. In stato di riposo tale porta si trova a livello logico basso per opera della resistenza di pull-down da 10k. In caso, invece, di pressione, lo stato commuterà immediatamente ad alto per via del collegamento diretto a VCC che si viene a determinare.
Si apra, adesso, l'IDE di Arduino e si trascriva e si carichi il seguente semplice codice, che poi commenteremo in maniera approfondita.
void setup() { pinMode(8,INPUT); Serial.begin(9600); Serial.println("CLEARDATA"); Serial.println("LABEL,Time,Pulsante"); } void loop() { if(digitalRead(8)) Serial.print("DATA,TIME,1"); else Serial.print("DATA,TIME,0"); Serial.println(); delay(5000); }
Si avvii il foglio elettronico e si prema il pulsante "Connect" sulla finestrella dell'Add-on. Inizierà subito la comunicazione tra le due parti, come mostrato in Figura 5. Se si preme il pulsante sarà visualizzato sulle celle il valore "1", altrimenti sarà mostrato il valore "0". La rilevazione avviene ogni 5 secondi. Commentiamo, adesso, lo sketch focalizzando la nostra attenzione sulle righe di programma più importanti.
pinMode(8,INPUT);
Questa funzione configura la porta 8 di Arduino come ingresso. A essa, infatti, è collegato un pulsante.
Serial.println("CLEARDATA");
Tramite la linea seriale viene inviato un comando a Excel che cancella tutti i dati eventualmente presenti. In pratica pulisce la colonna interessata del foglio di calcolo.
Serial.println("LABEL,Time,Pulsante");
Questa linea è estremamente importante. Scrive l'intestazione su due colonne: "Time" e "Pulsante". L'uso di qualsiasi altra stringa è, ovviamente, permesso. Questa operazione è possibile grazie al comando "LABEL" presente all'inizio del comando. Deve essere eseguito solo una volta, per questo motivo si trova nella funzione setup(). L'effetto di esso è visibile in Figura 6.
if(digitalRead(8))
Serial.print("DATA,TIME,1");
Questa funzione di scrittura sulla seriale viene eseguita se si preme il pulsante collegato ad Arduino. Come si vede, la stringa di comando, in questo caso, prevede tre parametri:
- DATA: è una parola chiave che va rispettata e indica che stanno per essere trasmessi, appunto, dei dati;
- TIME: è una sorta di variabile che contiene l'ora corrente;
- 1: tale numero è inviato al foglio Excel, testimoniando la pressione del pulsante. Se quest'ultimo non è premuto, sarà spedito il numero "0".
Dopo l'invio delle informazioni, che saranno scritte su ogni riga, occorre inoltrare il comando Serial.println() per iniziare la visualizzazione sulla riga successiva. I dati, dunque, saranno accodati sul foglio. Come si vede si tratta di una semplicissima codifica.
Secondo esempio: monitoriamo le temperature
Capendo la filosofia generale di funzionamento, è possibile realizzare qualsiasi altro dispositivo, fermo restando che ancora molte funzionalità devono essere da noi esplorate. Costruiamo, adesso, un dispositivo che rilevi la temperatura ambientale e la invii a un foglio di Excel, scrivendo le informazioni su ogni riga, alla cadenza di un minuto. Si appronti, allo scopo, il cablaggio di cui alla Figura 7.
Quello che segue, invece, è lo sketch da scrivere e caricare su Arduino.
void setup() { Serial.begin(9600); Serial.println("CLEARDATA"); Serial.println("LABEL,Orario,Temperatura"); } void loop() { float digitale = 0; for(int k=1;k<=600;k++) { digitale = digitale + analogRead(A0); delay(100); } digitale = digitale / 600.0; float temperatura = digitale * 0.48875; Serial.print("DATA,TIME,"); Serial.print(temperatura); Serial.println(); }
Si noti, stavolta, come le informazioni della temperatura da inserire nelle varie celle siano organizzate in due diversi statement, con la funzione "Serial.print". Occorre, infatti, prevedere la separazione dei vari parametri di colonna con una virgola. La temperatura, inoltre, è acquisita tramite un sotto campionamento, al fine di aumentare, seppur virtualmente, la risoluzione dell'ADC. In pratica, ogni minuto, tale dato è acquisito e sommato a un accumulatore, ogni decimo di secondo, per 600 volte. Infine, la somma è divisa per 600. La Figura 8 mostra uno screenshot durante il funzionamento del prototipo.
E' importante sottolineare il fatto che, per il buon funzionamento del sistema, occorre impostare il punto (".") come separatore decimale. Inoltre, è sempre bene formattare adeguatamente le colonne secondo il rispettivo contenuto. Nell'esempio:
- la colonna "A" è stata formattata con il formato "Ora hh:mm:ss";
- la colonna "B" è stata formattata con il formato "Numero" a 2 cifre decimali.
Sfrutteremo massivamente la formattazione delle celle negli esempi più avanti. E' facile, a questo punto, visualizzare un bel grafico dell'andamento della temperatura, come quello visibile in Figura 9, per il quale si è effettuata una registrazione dalle ore 14:19:28 alle ore 16:36:31. Si noti la presenza supplementare (e voluta) di una linea di tendenza che testimonia come la temperatura registrata sia in calo.
Si consiglia di formattare opportunamente le colonne, per garantire una visualizzazione coerente dei risultati sul foglio di Excel.
Terzo esempio: un voltmetro con fondo scala di 5V
Si è visto, fino ad ora, che i dati acquisiti dall'Add-on sono piazzati uno sotto l'altro, accodandosi in verticale, nel foglio elettronico. Fortunatamente questa non è la sola funzionalità ma l'interfaccia possiede alcuni comandi specifici con cui i dati si possono "posizionare" in una qualsiasi cella desiderata, aumentando enormemente le possibilità operative. E' possibile raggiungere questo risultato utilizzando il seguente comando dell'Add-on:
CELL,SET,cellnum,cellvalue
Proprio per questo terzo esperimento scopriremo come sia possibile realizzare un semplice voltmetro visuale, con tanto di misurazione elettrica visualizzata sul foglio elettronico di Excel, in tempo reale. Si realizzi, allo scopo, il prototipo di Figura 10. Non si tratta di un vero e proprio schema elettrico, ma è sufficiente collegare un generatore di tensione sull'ingresso analogico A0. Si raccomanda di non superare mai la tensione di 5V.
Adesso, sull'IDE di Arduino, si digiti il seguente breve e semplice listato.
void setup() { Serial.begin(9600); Serial.println("CLEARDATA"); Serial.println("CELL,SET,C7,VOLTMETRO"); } void loop() { float volt = 5.0 * analogRead(A0) / 1023.0; Serial.print("CELL,SET,C8,"); Serial.println(volt); delay(1000); }
Nella funzione setup(), quindi ripetuto una volta sola, è presente lo statement:
Serial.println("CELL,SET,C7,VOLTMETRO");
che provvede a visualizzare la parola "VOLTMETRO" nella cella C7.
Nella funzione loop(), quindi ripetuti ogni secondo, vi sono i seguenti statements:
Serial.print("CELL,SET,C8,");
Serial.println(volt);
che visualizzano la tensione calcolata nella cella C8.
Una volta caricato il firmware, è possibile provarlo subito, azionando l'Add-on attraverso il pulsante "Connect". Collegando un generatore di tensione alla porta analogica A0 di Arduino si vedrà il relativo voltaggio sul foglio di Excel, come mostrato in Figura 11.
Per ottenere una simile visualizzazione occorre, ovviamente, formattare opportunamente il foglio di lavoro. Nella fattispecie: [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2779 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Gentile Di Maria, appena ho visto l’articolo, mi sono riempita di entusiasmo. Non immagini nemmeno quanta felicità. La cosa forte è che leggendo il titolo, non ho guardato chi fosse l’autore. Verso la fine mi sono detta: vuoi vedere che è Giovanni Di Maria? ormai di alcuni di voi conosco la stile e leggo i nomi solo per conferma. Grazie. Questo articolo avrà un bellissimo spazio nel mio piccolo bagaglio.
Grazie.
Troppo Buona 🙂
Provato ora su di un piccolo apparecchietto che legge e regola il controllo del livello di salamoia e delle fasi di un addolcitore: veramente semplice, per la minimale interfaccia, e versatile per l’uso dell’ormai conosciutissimo EXCEL. Mi ero adattato a far ‘digerire’ i dati ad programma di un vecchio datalogger (Un TrueGraph del 2001), caricandoli in TXT su una SD da Arduino per poi ‘plottarli’; ora si lavora on line memorizzando e visualizzando in realtime quel che succede!!! Esistono dei serial plotter per i microcontroller ma non così semplici come questo. Grazie