LM35: analisi e elaborazione dei dati

In questo nuovo tutorial, utilizzo Arduino UNO per monitorare la temperatura esterna e, ad intervalli regolari a scelta, aggrego i valori su un file .csv strutturando i dati per una successiva analisi.

Inoltre, dispongo di un modulo bluetooth per l’invio in tempo reale dei dati (quali, tempo e temperatura) su un dispositivo bluetooth abilitato alla ricezione seriale, smartphone o PC che sia.

In particolare, vedremo:

  • Arduino UNO con MegunoLink Pro (software per elaborazioni dei dati)
  • real-time plotting con MegunoLink Pro
  • come strutturare i dati in modo intelligente (e successiva analisi)
  • scrittura su memoria MicroSD (tramite libreria “SD.h”)
  • invio dei dati tramite periferica bluetooth
  • utilizzo di un filtro a media mobile (Moving-Average Filter) con Excel 2013


LM35: monitoraggio ed elaborazione dei dati con un sensore di temperatura


IMG_20141112_150103

Passiamo in rassegna i componenti utilizzati per questo progetto:

  1. Arduino UNO
  2. Arduino Ethernet Shield (ci servirà solo per la scrittura su Micro-SD)
  3. Micro-SD (la capacità non è rilevante)
  4. Sensore di temperatura LM35 (o equivalente)
  5. Modulo Bluetooth HC-06 (o equivalente)
  6. 1x led rosso, 1x led verde
  7. Breadboard e cavi collegamento

SCHEMA DEL PROGETTO


DataloggerTEMP_bluetooth_v2_bb
Clicca l’immagine per ingrandire

Come osserviamo dallo schema realizzato con Fritzing, l’ethernet shield viene praticamente a sovrapporsi all’Arduino UNO collegando direttamente ogni pin. Sarà dunque l’eth. shield a interfacciarsi con la breadboard e tutti i suoi collegamenti.

In questo sketch si notano anche 2 led (1 rosso, 1 verde): il motivo di questa implementazione è puramente dimostrativa. La loro funzione è quella di fornire un feedback visivo delle operazioni interne al micro-controllore. In particolare, il led rosso lampeggerà ogni qualvolta viene scritto un dato sul file templog.csv; invece, il led verde lampeggia quando gli stessi dati vengono inviati al dispositivo bluetooth. Entrambe le operazioni vengono eseguite a frequenze differenti; per tale motivo è utile (ma non indispensabile) ricevere una notifica del loro corretto funzionamento.


Passo 1: conoscere MegunoLink Pro

Screenshot

Sono entusiasta di presentarvi MegunoLink Pro (MLP): si tratta di un utile software per l’analisi e manipolazione dei dati generati direttamente da Arduino. A primo impatto, la UI può sembrarvi davvero poco amichevole ma, fidatevi, presto vi abituerete e scoprirete le sue potenzialità.

Per utilizzare il programma è sufficiente collegare Arduino alla porta COM del nostro PC (come avviene normalmente durante il caricamento di uno sketch), avviare MegunoLink Pro e selezionare nella schermata “Connection Manager” i giusti parametri per poi avviare la connessione.

Img20141112-h12_001Per verificare il corretto funzionamento, possiamo navigare direttamente nella schermata “Monitor” (l’equivalente del monitor seriale dell’IDE di Arduino) e trovare l’output di uno sketch già caricato su Arduino. Se cosi non fosse, provate ad eseguire questi passi preliminari.

Giusto a titolo informativo, MegunoLink Pro ha tantissime funzionalità (Mapping, Interface Panel, Time plot, Log to file, ..) ma in questo tutorial vedremo solo come plottare dati sugli assi X e Y (X-Y PLOT) per cercare di contenere la lunghezza di questo articolo che, posso già immaginare, non sarà breve.Img20141102-h23_001

Come riesce MegunoLink Pro a interpretare autonomamente i dati forniti da Arduino e tracciare la funzione?

Semplice; MLP utilizza dati strutturati del tipo:

{XYPLOT:Temperatura|DATA|temp|20|31.25}

  • XYPLOT: definisce il tipo di analisi che vogliamo condurre sui dati; in questo caso “plotting sugli assi X-Y”
  • Temperatura: nome del canale (opzionale, ma utile se volessimo monitorare oltre alla temperatura anche l’umidità: creeremo allora 2 canali rispettivamente “Temperatura” e “Umidità”)
  • DATA: è il comando standard associato a XYPLOT; definisce il susseguirsi di una lista di coppie X-Y
  • temp: è il nome che abbiamo scelto per la sequenza di valori da rappresentare
  • 20|31.25: sono rispettivamente le coordinate degli assi X-Y

Nota: tutti i parametri devono essere divisi da un separatore identificato con il carattere “|”; le stringhe, invece, inizieranno e termineranno con le parentesi graffe.

Tali informazioni così strutturate possono essere inviate in output con 2 modalità differenti:

  • utilizzando la libreria “MegunoLink.h”

MyPlot.SendData(“temp“, 20, 31.25);

  • oppure, utilizzando un output grezzo, del tipo:

Serial.print(“{XYPLOT|DATA|Temperatura|”);
Serial.print(asseX);
Serial.print(“|”);
Serial.print(asseY);
Serial.println(“}”);

Nel mio sketch le utilizzerò entrambe per esigenze differenti che capirete.


Passo 2: sketch su Arduino

La scrittura di questo sketch non è particolarmente complicata pertanto inserirò i commenti nelle righe di codice per spiegare facilmente il funzionamento, ove necessario.

E’ d’obbligo fare una premessa affinchè siano chiare le scelte di alcune implementazioni nel codice sorgente: questo progetto è da intendersi “stand-alone“, ovvero ho cercato di rendere il più possibile indipendente il funzionamento di Arduino dal PC. Dunque, non utilizzeremo mai (se non per scopi di debugging) il monitor seriale USB per la ricezione dei dati, piuttosto comunicheremo via bluetooth.

[sourcecode language=”c” wraplines=”true” collapse=”false”]
/* #rogosprojects
#  Temp logging and plotting (ver.2)
#
#  Creato il 9/11/14
#  Autore: Gianmarco Rogo
#  https://plus.google.com/+GianmarcoRogo */
[/sourcecode]

Codice sorgente: http://pastebin.com/M1uXxFqk


Passo 3: analisi dei dati

Bene, una volta caricato lo sketch e lasciato in esecuzione per una ventina di minuti, possiamo fare le prime analisi.

A questo punto sappiamo che Arduino sta eseguendo in loop principalmente 3 importanti operazioni:

  1. lettura della temperatura esterna
  2. invio dei dati via bluetooth per una consultazione istantanea, casuale
  3. scrittura dei dati su MicroSD per analisi successive (logging)

Lettura dei dati via bluetooth


A questo proposito ho installato un semplice monitor seriale sul mio smartphone Android: Bluetooth Terminal (ce ne sono tantissimi, ne potete scegliere uno qualsiasi). I passi da eseguire sono quindi semplicissimi:

Screenshot_2014-11-12-13-53-20

Nota: in alternativa, è possibile collegare alla periferica bluetooth anche un PC che supporti tale connessione. Vi consiglio di utilizzare Tera Term come monitor per Windows.

Come potete osservare dall’ultima immagine, una volta stabilita la connessione, i valori di temperatura sono già formattati per MegunoLink Pro. Questa scelta è voluta: con MLP, infatti, è possibile anche plottare i valori scegliendo come sorgente la connessione bluetooth del vostro PC (e quindi, wireless)!


Scrittura dei dati su Micro-SD: il file “templog.csv”


Il file “templog.csv” contiene i campioni di temperatura raccolti con il sensore LM35 ad intervalli regolari; i primi 10 campioni si presenteranno quindi in questo modo:

START
1,22.95
2,20.51
3,20.02
4,20.51
5,20.51
6,21.00
7,21.00
8,20.02
9,20.51
10,20.02

Ho scelto di ordinare i campioni progressivamente secondo l’incremento lineare di un numero intero che simula il tempo (o meglio, la frequenza di campionamento). Dunque, all’istante di tempo T1 osservo 22,95 °C, a T2 osservo 20,51 °C e cosi via…

Inoltre, è importante indicare l’avvio della scrittura del file con un marcatore (in questo caso ho scelto la parola “START“) poichè, in caso di interruzione imprevista dell’alimentazione, la variabile che indica l’asse dei tempi ricomincerebbe il conteggio da capo, allegando i nuovi valori allo stesso file “templog.csv”. Questo causerebbe un’incongruenza di dati durante l’elaborazione dell’asse X! Con il marcatore, invece, posso manualmente aggiustare il conteggio al ripresentarsi della parola “START” aggiungendo un valore di offset.

Plottare questi dati sarà semplicissimo in quanto sono dei semplici valori separati da virgola (tempo, temperatura); qualunque foglio di calcolo è in grado di importarli indicando, per l’appunto, come carattere di separazione la “,”.


Passo 4: elaborazione dei dati con Excel 2013

Siamo giunti quindi all’ultima fase; a mio avviso la più interessante! Dopo ore (se non giorni) di registrazioni, siamo ora in grado di analizzare, e quindi elaborare, questa mole di dati su un foglio elettronico.

Come già detto, importare il file “templog.csv” in Excel è un’operazione banale; per comodità ho usato la suite Microsoft Office, ma potete eseguire la stessa operazione anche in Google Spreadsheet!

image (2)Qui vedrete una demo del foglio elettronico in Drive: #rogosprojects – Templog.csv

Dalla rappresentazione dei dati sugli assi cartesiani, si evince che in intervalli prossimi tra loro si verificano spesso dei “salti” (anche se piccoli) dovuti alla discreta precisione del sensore LM35.

Tali discontinuità possono essere “addolcite” tramite l’utilizzo di appositi filtri. Uno dei più interessanti che potrebbe fare al caso nostro è sicuramente il filtro a media mobile (Moving Average Filter).

Semplificando di molto la trattazione dei sistemi filtranti, cercherò di essere quanto più pratico possibile nella spiegazione che richiederebbe, invece, anche una buona trattazione a livello teorico.


Il filtro a media mobile


Trattasi di un particolare sistema filtrante che, dato in ingresso una sequenza di valori, riporta in uscita la media dei valori per un dato intervallo mobile.

Img20141112-h16_001

Cosi facendo, la funzione risultante risulterà notevolmente alleggerita..

Img20141112-h16_14

Compresa l’utilità del filtro a media mobile, vediamo come risulterebbe la sua applicazione sui campioni registrati nel nostro progetto:

Img20141112-h17_001
La mia registrazione è durata complessivamente 3 giorni e ho raccolto ben 4976 campioni.

Per approfondimenti vi allego il foglio elettronico su Drive: #rogosprojects – Templog5.csv

E’ evidente che la funzione risultante è notevolmente semplificata (in rosso) poichè deriva da un’approssimazione dei campioni realmente misurati (errore introdotto dal filtro).

Applicare il filtro MA è risultato semplice utilizzando Microsoft Excel 2013 (in alternativa, è possibile realizzare lo stesso filtro con MATLAB, Simulink .. o simili). E’ stato sufficiente, infatti:

  • importare i dati su una colonna
  • navigare in Dati > Analisi dei dati
  • selezionare Moving Average (o media mobile)
  • definire l’intervallo dei valori in ingresso, l’intervallo di campionamento e l’intervallo dei valori in uscita in una nuova colonna
  • opzionalmente, spuntare anche l’opzione per il grafico in output cosi da ottenere una rappresentazione dei campioni filtrati

Img20141112-h17_002


Il tutorial termina qui (finalmente direte)! Mi perdonerete per la sua lunghezza ma è resa necessaria per spiegare con chiarezza tutti i passi per realizzare questo progetto.  Spero – impegni permettendo – di potervi dimostrare il funzionamento in un semplice video!

Al prossimo tutorial 😉

Lascia un commento