Come spedire dati da Arduino a Excel e viceversa

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.

Figura 1: schema a blocchi di principio dell'interfacciamento tra la scheda Arduino e il software Excel

Figura 1: schema a blocchi di principio dell'interfacciamento tra la scheda Arduino e il software Excel

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.

Figura 2: per utilizzare l'Add-on occorre abilitare le macro del foglio elettronico

Figura 2: per utilizzare l'Add-on occorre abilitare le macro del foglio elettronico

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.

Figura 3: la comparsa della finestra dell'acquisizione dati testimonia la corretta esecuzione dell'Add-on

Figura 3: la comparsa della finestra dell'acquisizione dati testimonia la corretta esecuzione dell'Add-on

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.

Figura 4: il cablaggio per il primo esperimento di comunicazione con Excel

Figura 4: il cablaggio per il primo esperimento di comunicazione con Excel

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.

Figura 5: la comunicazione in corso tra Arduino ed Excel

Figura 5: la comunicazione in corso tra Arduino ed Excel

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.

Figura 6: il comando LABEL consente di personalizzare le intestazioni delle colonne

Figura 6: il comando LABEL consente di personalizzare le intestazioni delle colonne

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.

Figura 7: il prototipo del secondo esempio prevede un termometro LM35 collegato all'ingresso analogico A0 di Arduino

Figura 7: il prototipo del secondo esempio prevede un termometro LM35 collegato all'ingresso analogico A0 di Arduino

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.

Figura 8: la registrazione delle temperature ogni minuto su Excel

Figura 8: la registrazione delle temperature ogni minuto su Excel

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.

Figura 9: il grafico delle temperature

Figura 9: il grafico delle temperature

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.

Figura 10: simulazione di un voltmetro. E' possibile collegare qualsiasi generatore di tensione purché non superi i 5Vdc

Figura 10: simulazione di un voltmetro. E' possibile collegare qualsiasi generatore di tensione purché non superi i 5VDC

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.

Figura 11: il voltmetro in funzione. L'aggiornamento della misura avviene ogni secondo

Figura 11: il voltmetro in funzione. L'aggiornamento della misura avviene ogni secondo

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 e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

3 Commenti

  1. Mariangela.Mone Mariangela.Mone 25 Settembre 2020
  2. Danilo Menghini 28 Settembre 2020

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend