Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

NodeRED: Visualizzare un valore di temperatura

Visualizzare un valore di temperatura adoperando NodeRED e gli opportuni i sensori.
Visualizzare un valore di temperatura adoperando NodeRED e gli opportuni i sensori.
Link copiato negli appunti

In questo esempio utilizzeremo un sensore di temperatura per monitorare le condizioni ambientali di una stanza o dell'ambiente esterno. In commercio esistono tantissimi sensori di temperatura, quelli di tipo più semplice (ed economico) forniscono un valore analogico ovvero restituiscono un valore di tensione direttamente proporzionale alla temperatura letta. Di questa categoria fa parte lo storico LM35DZ. Esistono poi una grande varietà di sensori che forniscono un valore digitale su bus I2C, One-Wire o secondo protocolli proprietari.

Sensore analogico MCP9701A

Piuttosto che utilizzare un sensore LM35DZ che per fornire valori di temperatura sotto lo zero richiede una serie di artifizi, in questo esempio utilizzeremo un sensore analogico prodotto dalla Microchip, lo MCP9701A che costa pochi centesimi, ha una lettura abbastanza stabile e fornisce valori di temperatura negativi senza particolari accorgimenti. Il sensore in questione può essere alimentato sia a 3.3V che a 5V fornendo in uscita sempre lo stesso coefficiente di 19.5mV per grado centigrado con un offset di 400mV a 0°C.
Il NodeMCU ha un ingresso analogico contraddistinto dalla sigla A0. Su questo ingresso è presente un partitore di tensione che consente di applicare un valore di tensione fino a 3.3V, mentre i moduli "semplici" (come l'ESP-01), non avendo un partitore integrato, non consentono di superare il limite di 1V dell'ESP8266. Possiamo quindi applicare all'ingresso A0 del NodeMCU l'uscita analogica dell'MCP9701A essendo consapevoli che, nella variante "High Temperature" (MCP9701A-H, in grado di leggere fino a 150°C) questo chip non fornisce in uscita più di 3.3V, mentre la variante con la sigla MCP9701A-E, più comune, legge fino a 125°C (2.8V max). La versione senza la lettera A nella sigla presenta un'accuratezza inferiore nella lettura della temperatura.
Andremo a realizzare il seguente semplice circuito:

Per convertire il valore analogico restituito dal sensore in temperatura andranno effettuati alcuni aggiustamenti. Tutti i calcoli eseguiti sono descritti nelle note del codice di esempio che potete scaricare qui.
Nel codice sorgente dovrete ricordare, come sempre, di cambiare tutta la parte iniziale per adattarla alla vostra rete come già descritto nella lezione precedente. Utilizzare un sensore analogico, oltre a vantaggi di tipo economico e di semplicità nella scrittura del codice, ha anche i suoi svantaggi: la lettura è meno stabile di un sensore digitale e risente molto di disturbi e sbalzi sulla tensione di alimentazione, per cui è buona norma mettere un condensatore di piccolo valore (100-220nF) in parallelo ai terminali di alimentazione del sensore, quanto più vicino possibile al sensore stesso. In aggiunta a ciò, la presenza di un partitore di tensione integrato sul NodeMCU, nonostante l'alta precisione delle resistenze utilizzate, può introdurre un ulteriore errore, potete infatti notare che non su tutti i NodeMCU, portando il terminale A0 a GND, si legge un valore 0, ma è piuttosto comune leggere un valore da 0 a 10, per cui potete anche pensare di sottrarre questo ulteriore offset dal valore analogico restituito (stando attenti a non ottenere un valore negativo) per avere una lettura ancora più precisa.
Nel codice non possiamo inviare il valore di temperatura convertito direttamente via MQTT dato che il valore è contenuto in una variabile di tipo Float mentre il metodo Publish del Client MQTT si aspetta un array di Char. Per tale motivo è necessario eseguire una conversione. Lo facciamo utilizzando la comoda funzione dtostrf fornita da Arduino IDE.
Fatto questo non resta che visualizzare il valore di temperatura sulla Dashboard di NodeRED. Possiamo farlo in due modi. In maniera testuale o in maniera grafica. In modo testuale sappiamo già farlo. Basta aggiungere un nodo MQTT input impostando il topic in "esempio/temperatura" (definito nel sorgente Arduino alla riga 34) collegandolo a un nodo Label al quale avremo dato il nome "Temperatura". In questo caso, per fare in modo di visualizzare anche il simbolo di gradi centigradi, possiamo modificare il campo value format aggiungendo il simbolo di grado centigrado dopo l'ultima parentesi graffa:

NodeRED Value format

Se, invece, vogliamo visualizzare un indicatore a lancetta, nell'elenco dei nodi a disposizione, scorriamo fino alla sezione dashboard e trasciniamo il nodo Gauge. Colleghiamo il nodo Gauge al nodo MQTT input e diamo doppio click per modificarne le proprietà.

NodeRED nodi temperatura
Nel campo Group assicuriamoci che sia sempre selezionato "[HTML.it] Esercizio", nel campo Label scriviamo "Temperatura" e nel campo Unit scriviamo: "°C". Impostiamo quindi anche la scala dello strumento. In Range min-max vanno impostati i valori minimo e massimo di temperatura che intendiamo leggere, per un utilizzo all'interno possiamo mettere un range di 10-40. Vediamo che sono presenti 3 colori in Colour gradient che permettono di impostare 3 diverse fasce di colore sullo strumento, definite numericamente dai valori immessi nel campo successivo Sectors. I due campi vuoti di sectors andranno a definire l'inizio e la fine dei valori di temperatura per i quali lo strumento assumerà la colorazione della fascia centrale. Possiamo impostare questi valori come nell'esempio a seguire. Premiamo Done e quindi Deploy. Nella Dashboard possiamo visualizzare la temperatura. Ecco subito sotto un ulteriore esempio. Sia con la label che con l'indicatore a lancetta. Chiaramente in un pannello che si rispetti andremo ad utilizzare solo una delle due visualizzazioni. Ricordiamo che, nel caso in cui lo strumento a lancetta o le label non vengano visualizzate nell'ordine che vogliamo, possiamo riarrangiarle come descritto nella lezione 6.

Lettura sensore digitale DS1820

Un sensore di temperatura digitale molto utilizzato è il Dallas DS1820. Ci sono varie sigle in commercio, il DS1820 ha una risoluzione di 9 bit, il DS18S20 ha una risoluzione a 12bit e il DS18B20 ha una risoluzione selezionabile. Tutti e tre i sensori sono adatti per questo esempio poiché funzionano allo stesso modo. Il dispositivo comunica in digitale sfruttando il protocollo definito dal bus 1-wire che permette, in aggiunta, di collegare più sensori sulla stessa linea di comunicazione nonché di utilizzare una modalità di lavoro definita "parassita" mediante la quale non è necessario fornire il positivo di alimentazione. Il DS1820 si trova in commercio anche in forma di "sonde" già cablate e adatte per l'immersione in liquidi o per l'utilizzo all'esterno. Andremo a realizzare questo circuito:

Come vedete i terminali di alimentazione si trovano in posizioni invertite rispetto al sensore  analogico che abbiamo visto in precedenza e il terminale di uscita dati richiede una resistenza di pull-up da 4.7kΩ perchè il terminale è di tipo open-drain, ovvero può "tirare" la linea verso GND ma non può fornire il livello alto.
Lato software andremo a utilizzare una libreria già presente di default in Arduino IDE ovvero la Dallas Temperature di Miles Burton che si appoggia alla libreria OneWire. Potete scaricare il codice di esempio da qui.
Dato che il codice sorgente dell'esempio con la sonda analogica è uguale a questo (differiscono unicamente nella lettura del diverso tipo di sensore), le operazioni da fare su NodeRED per leggere la temperatura sono identiche. Chiaramente se usate entrambe le sonde noterete delle inevitabili differenze. È presente una riga in più, la 40, dove indichiamo alla libreria quale pin stiamo utilizzando per leggere la sonda. In aggiunta, nella funzione che legge la temperatura, riga 113, vediamo che la funzione ha uno 0 tra parentesi: è per indicare che dobbiamo leggere la temperatura del primo sensore sulla linea di comunicazione (unico nel nostro esempio) dato che il bus 1-wire, come detto in precedenza, permette di collocare più sensori sulla stessa linea. È possibile scaricare qui il sorgente di esempio da importare in NodeRed.

Anticipazioni

Nella lezione successiva impareremo come scegliere un relè per accendere e spegnere lampade, chiudere elettrovalvole, aprire cancelli, ecc.

Ti consigliamo anche