Alcuni utenti mi hanno scritto chiedendomi esempi “reali” di utilizzo del display… in questo articolo vi mostrerò uno sketch per realizzare un termometro.
Il sensore
Per ottenere la temperatura ambiente, ho scelto di utilizzare il sensore DS18B20 di Maxim Integrated.
Il collegamento con Arduino è molto semplice: il sensore ha 3 pin (VDD, GND e DQ); ho scelto di collegare DQ al pin 2:
Il sensore DS18B20 supporta due modalità di alimentazione:
- tramite il pin VDD
- parassita, tramite il pin DQ (in questo caso il pin VDD va collegato a massa)
In entrambi i casi, il pin DQ richiede una resistenza di pull-up da 4.7Kohm.
La liberia
Miles Burton ha sviluppato una comoda libreria per dialogare con il sensore di Maxim… il suo utilizzo è molto semplice:
– includiamo nello sketch le due librerie OneWire e DallasTemperature:
#include <OneWire.h> #include <DallasTemperature.h> |
– inizializziamo la libreria indicando il pin a cui è collegato il sensore:
#define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); |
– leggiamo il valore (float) della temperatura (avendo un solo sensore collegato, questo avrà indice 0):
sensors.requestTemperatures(); float float_temp = sensors.getTempCByIndex(0); |
Il display
Per visualizzare ilvalore letto sul display, utilizziamo la funzione sprintf per creare il testo completo:
sprintf(display_string, "Temperature: %s", string_temp); |
Unico piccolo problema è che sprintf non supporta i tipi di dati float; dobbiamo quindi convertire prima tale valore in formato stringa.
Demo
Lo sketch è disponibile su Github, eccolo in azione:
How would I display scrolling text while the text itself is changing?
For example, let’s say I want a clock with seconds. How would the transition from, say, 8:39:59 to 8:40:00 work?
As for your thermometer example: I see the sign shows the temperature in hundredths of a degree — but by the time the sign scrolls around to show the numbers, won’t they already be wrong?
Hi
If I want to add the date to the code here?
Hi Luca,
I have problem, if the temperature is 20c, and i only want the led to light up when temperature reach 22c, how could I change it?