In un precedente articolo abbiamo visto come controllare la temperatura di uno o più ambienti con il controller Arduino Uno. Questa volta vi proponiamo un progetto hardware più semplice ma con delle implicazioni più interessanti sotto il punto di vista della gestione a distanza di uno o più dispositivi connessi in rete. Per realizzare queste potenzialità abbiamo bisogno della scheda Arduino YUN che dispone di una interfaccia Wi-Fi, una scheda di rete ethernet integrate e della possibilità di poter gestire una scheda di memoria micro SD. Inoltre Arduino YUN dispone di un sistema operativo Linux OpenWRT – Yun 1.5.3 installato o da aggiornare.
Indice
Arduino YUN il controller
Abbiamo parlato dell’architettura di Arduino in un precedente articolo sottolineandone la praticità d’uso e i costi contenuti. Disponibili sul mercato possiamo trovare varie versioni di questo microcontrollore programmabile e anche per questo progetto di cui parleremo sarà necessario scegliere la versione che più soddisfa le nostre esigenze.
- Rilevare la temperatura in un solo ambiente: sarà suffiuciente acquistare una sola scheda del microcontrollore e l’elettronica necessaria sostenendo un costo all’incirca di 40 euro.
- Monitorare la temperatura di uno o più ambienti posti a distanze che non pregiudicano il segnale emesso dal rilevatore analogico di temperatura TMP36 della Texas Instruments. In questo caso un singolo TMP36 ci costerà all’incirca 3 euro. Per progetti più complessi per la misurazione di più ambienti, dovremo aggiungere il numero di sensori e l’hardware necessario per far giungere i segnali analogici emessi da ogni singolo TMP36 alla scheda Arduino YUN e i costi per cablare i sensori nei diversi ambienti. Ovviamente il codice del software da caricare su Arduino sarà più complicato e non lo inseriremo in questo articolo.
- Con Arduino YUN è possibile monitorare ambienti posti a distanze considerevoli utilizzando singole stazioni connesse ad internet sfruttando la connessione wi-fi. Questo ultimo progetto presuppone la conoscenza della configurazione delle reti e la gestione centralizzata delle informazioni avrà la necessità di sviluppare un software ospitato su un Server per gestire i dati trasmessi dalle singole stazioni di rilevamento Arduino YUN.
I componenti per la singola unità di rilevazione
Vi proponiamo i componenti della singola unità di rilevazione della temperatura:
- Il vostro PC
- Arduino YUN
- Sensore di temperatura analogico TMP-36
- Breadboard
- Cavi di collegamento
Schema elettrico
Prima di procedere con il montaggio dei componenti è importante disporre delle seguenti informazioni:
- PIN di collegamento del sensore analogico TMP-36
- data sheet Arduino YUN
Di seguito lo schema elettrico delle connessioni da effettuare per realizzare la nostra semplice unità di rilevazione della temperatura.


Arduino YUN schema dei PIN e inizializzazione
Per qualsiasi progetto con Arduino YUN è bene far riferimento allo schema dei suoi PIN di ingresso e Uscita con la relativa tabella data sheet.

Tabella data sheet dei singoli PIN di Arduino YUN:


Il sensore digitale di temperatura TMP-36
TMP36 è un sensore di temperatura analogico progettato per fornire una lettura accurata della temperatura con un’uscita analogica lineare. L’integrazione nei circuiti elettronici è molto semplice ed è una soluzione ideale per la sua precisione, stabilità e facilità d’uso. Può essere utilizzato in molte applicazioni industriali ed educative, perché misura un ampio intervallo di temperature e ha una buona precisione.
Il sensore TMP36 fornisce un output analogico proporzionale alla temperatura rilevata ed è compatibile con una vasta gamma di microcontrollori come Arduino e Raspberry Pi. Il TMP36 è disponibile in un piccolo package che ne semplifica l’integrazione in circuiti elettronici o su breadboard per una rapida prototipazione. Misura una gamma di temperatura operativa che va da -40 °C a +125 °C, con una precisione di ±1 °C a 25 °C.

Il sensore funziona con una singola alimentazione di valori compresi tra 2,7 V a 5,5 V massimo. La corrente di alimentazione è minore di 50 μA. Quindi ha un basso auto-riscaldamento inferiore a 0,1 ° C. In molte applicazioni il segnale del sensore può risultare troppo debole per essere letto correttamente da un microcontrollore. A questo problema si può ovviare utilizzando un Amplificatore Non Invertente per amplificare il segnale senza distorcerlo. Ricordiamo che l’amplificatore non invertente prende la tensione in uscita dal sensore e la potenzia mantenendola positiva, lineare e senza disturbi.
Sketch Arduino YUN per il sensore di temperatura TMP-36
Il codice che segue mostra come acquisire i dati da un ingresso analogico tramite il server web integrato del dispositivo Arduino Yún utilizzando la libreria Bridge. Prima di procedere nella scrittura del codice è necessario eseguire i seguenti passi:
- Prepara la scheda SD o la chiavetta di memoria USB Flash con una cartella vuota nella radice denominata “arduino” e una sottocartella di quella denominata “www”. Ciò garantirà che il dispositivo Yún creerà un collegamento alla memoria al percorso “/mnt/sd”.
- In questa cartella di schizzo c’è una pagina web di base e una copia di zepto.js, una versione ridotta al minimo di jQuery. Quando carichi il tuo sketch, questi file verranno inseriti nella cartella /arduino/www/TemperatureWebPanel sulla memoria rimovibile.
È possibile rimuovere la scheda SD o USB Flash memory stick mentre il sistema operativo Linux e lo sketch sono in esecuzione, ma fate attenzione a non rimuovere mentre il sistema sta scrivendo sulle unità di memoria esterne.
/*
Interfaccia web per la rilevazione della temperatura
Il codice mostra come acquisire dati da un ingresso analogico
tramite il server web integrato di YunShield/Yún utilizzando la libreria Bridge.
Il circuito:
* Sensore di temperatura TMP36 sul pin analogico A1
* Scheda SD collegata allo slot per schede SD di YunShield/Yún
Questo sketch deve essere caricato tramite Wi-Fi.
L'API REST deve essere impostata su "aperta".
- Inserire una scheda Micro SD
- creare una cartella vuota nella directory principale denominata "arduino"
e una sottocartella denominata "www".
Questo garantirà che Yún crei un collegamento alla SD nel percorso "/mnt/sd".
In questa cartella dello sketch sono presenti
- una pagina web di base e una copia di zepto.js
- una versione minimizzata di jQuery.
Quando carichi il tuo sketch, questi file verranno posizionati
nella cartella /arduino/www/TemperatureWebPanel sulla tua scheda SD.
Puoi quindi andare su http://arduino.local/sd/TemperatureWebPanel
per visualizzare l'output di questo sketch.
*/
#include <Bridge.h>
#include <BridgeServer.h>
#include <BridgeClient.h>
// Acquisizione dati dalla porta di default 5555, il webserver di arduino Yún
// inoltrerà lì tutte le richieste HTTP.
BridgeServer server;
String startString;
long hits = 0;
void setup() {
SerialUSB.begin(9600);
// Avviamo il Bridge
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Bridge.begin();
digitalWrite(13, HIGH);
// utilizzare A0 e A2 come vcc e gnd per il sensore TMP36:
pinMode(A0, OUTPUT);
pinMode(A2, OUTPUT);
digitalWrite(A0, HIGH);
digitalWrite(A2, LOW);
// Acquisiamo le connessioni in ingresso solo da localhost
// (ovviamente non ci deve essere collegata nessun altra rete!)
server.listenOnLocalhost();
server.begin();
// Acquisiamo l'orario di avvio di questo sketck:
Process startTime;
startTime.runShellCommand("date");
while (startTime.available()) {
char c = startTime.read();
startString += c;
}
}
void loop() {
// Acquisiamo i client distribuiti dal Server
BridgeClient client = server.accept();
// Verifica se c'è un nuovo client
if (client) {
// legge il comando
String command = client.readString();
command.trim(); //kill whitespace
SerialUSB.println(command);
// "temperature" è il comando?
if (command == "temperature") {
// ottiene l'orario dal server:
Process time;
time.runShellCommand("date");
String timeString = "";
while (time.available()) {
char c = time.read();
timeString += c;
}
SerialUSB.println(timeString);
int sensorValue = analogRead(A1);
// converte la lettura in millivolts:
float voltage = sensorValue * (5000.0f / 1024.0f);
// converte i millivolt nella temperatura gradi celsius:
float temperature = (voltage - 500.0f) / 10.0f;
// stampa la temperatura:
client.print("Current time on the Yún: ");
client.println(timeString);
client.print("<br>Current temperature: ");
client.print(temperature);
client.print(" °C");
client.print("<br>Questo sketch è in funzione da: ");
client.print(startString);
client.print("<br>Hits fino a questo momento: ");
client.print(hits);
}
// Chiude la connessione e libera le risorse.
client.stop();
hits++;
}
delay(50); // Esegui il test ogni 50ms
}
Arduino YUN dispone anche di più di un ingresso analogico quindi anche il codice come accennato all’inizio di questo articolo può essere sviluppato per:
- Misurare la temperatura in due o più ambienti
- Registrare la temperatura massima e la temperatura minima registrata in uno o più ambienti
Come al solito è possibile sviluppare lo sketch che abbiamo proposto come base per delle misurazioni più complesse.
Conclusioni
Ci siamo occupati della realizzazione di un dispositivo che misura la temperatura in un ambiente utilizzando il microcontrollore Arduino YUN che rende disponibili i risultati delle misurazioni su una rete locale con la possibilità di leggerli a distanza connettendo questa rete ad internet. Abbiamo sfruttato le potenzialità di Arduino YUN che può essere programmato come un piccolo Server WEB. In un precedente articolo abbiamo fatto una breve presentazione di Arduino da noi definito Open Hardware. Questa definizione nasce dallo sviluppo di competenze di chi ha conoscenze solide di elettrotecnica ed elettronica. Con questi preerequisiti ognuno può raggiungere tali competenze senza dover ricorrere a sistemi proprietari e di conseguenza senza investire grosse cifre per la formazione. Questo modello di conoscenza da condividere è quello a cui ci ispiriamo e che anima questo portale dove tanto codice e tante soluzioni sono disponibili per tutti. Vista la rilevanza dell’argomento, abbiamo dedicato una sezione alla componentistica Hardware. Nel dettaglio troverete oltre a tante novità e presentazioni di computer e periferiche che periodicamente ci capita di testare e utilizzare, ci sono anche notizie di innovazione tecnologica, materiali innovativi, robotica e tanto altro.
