Sensore di temperatura con Raspberry Pi utilizzando il DS18B20



In questo tutorial, illustrerò i passi da seguire per impostare il vostro sensore di temperatura  con il Raspberry Pi.

Come la maggior parte dei tutorial sui sensori, il processo di impostazione di questo sensore è piuttosto semplice e consiste di un circuito di base e di un codice.

Userò un sensore impermeabile ds18B20, e questa sonda può fornire temperature su un’interfaccia a un filo. Ancora meglio questo è impermeabile, il che lo rende perfetto se avete bisogno di utilizzare il sensore in un ambiente umido.

Ci sono molti altri sensori di temperatura che potete usare con il vostro Raspberry Pi ma per  questo tutorial ci concentreremo sul ds18b20.

Troverete il sensore di temperatura ds18b20 a portata di mano in molte situazioni, soprattutto quando si tratta di monitorare le temperature delle superfici e dei liquidi.

Costruire il circuito Raspberry Pi ds18b20

Il circuito che dovremo costruire è piuttosto semplice, in quanto abbiamo bisogno solo di una resistenza e del sensore di temperatura.

Il sensore che sto usando in questo tutorial è una versione impermeabile del sensore DS18B20. Sembra semplicemente un cavo molto lungo con una parte spessa su un’estremità. Se avete solo una versione semplice senza cablaggio e senza impermeabilizzazione, allora sembra esattamente come un transistor.

Questo sensore è abbastanza preciso essendo entro 0,05°C dalla temperatura reale. Può sopportare temperature fino a 125°C (260°F), ma si raccomanda di mantenerlo al di sotto dei 100°C (210°F). Questo dispositivo ha anche un convertitore analogico-digitale a bordo, così siamo in grado di collegarlo facilmente ad un pin GPIO digitale sul Pi.

Tenete presente che non tutti i sensori di temperatura sono uguali. Qualcosa come il TMP36 non sostituirà semplicemente il ds18b20 in questo tutorial.

Il TMP36 è un dispositivo analogico che rende leggermente più difficile l’integrazione con il Pi. Il TMP36 ha sostanzialmente lo stesso problema che abbiamo avuto con il sensore di luce, e questo perché il Pi non ha pin analogici.

Mettere insieme questo circuito è super semplice, esaminerò rapidamente alcune istruzioni di base qui sotto. Se avete problemi a seguirle, fate riferimento al video o al diagramma.

Se avete bisogno di ulteriori informazioni sui pin GPIO, allora assicuratevi di dare un’occhiata alla mia guida per iniziare a usare i pin GPIO del Raspberry Pi.

1. Per prima cosa, collegare il pin 3v3 del Pi alla guida positiva e un pin di terra alla guida di terra sulla breadboard.

2.  Ora posizionare il sensore DS18B20 sulla breadboard.

3. Posizionare una resistenza da 4,7k tra il cavo positivo e il cavo di uscita del sensore.

4. Posizionare un filo dal cavo positivo al binario positivo 3v3.

5. Collocare un filo dal cavo di uscita al pin n. 4 (pin n. 7 se si utilizza la numerazione fisica) del Raspberry Pi.

6. Posizionare un filo dal conduttore di terra alla guida di terra.

Una volta fatto, il circuito dovrebbe avere un aspetto simile allo schema seguente. Tenere presente che alcune versioni del sensore di temperatura possono avere più fili di tre soli. Fare riferimento alla scheda tecnica per maggiori informazioni su ciascuno dei fili.

Il codice del sensore di temperatura per Raspberry Pi

Il codice per l’impostazione del sensore di temperatura è un po’ più complicato del circuito stesso. Questa complessità è dovuta proprio al modo in cui dobbiamo gestire i dati che provengono dal sensore.

Dato che stiamo usando Python, varrà la pena di imparare alcune delle nozioni di base, quindi consiglio vivamente di dare un’occhiata alla nostra guida per principianti Python.

Prima di realizzare lo script Python, dobbiamo prima impostare il Pi in modo che possa leggere i dati dal sensore. Per fare questo, dobbiamo aggiungere il supporto OneWire.

1. Per aggiungere il supporto per OneWire, dobbiamo prima aprire il file di configurazione del boot, e questo può essere fatto eseguendo il seguente comando

sudo nano /boot/config.txt

2. In fondo a questo file inserire quanto segue.

dtoverlay=w1-gpio
3. Una volta fatto save & exit premendo ctrl x e poi y. Ora riavviare il Pi eseguendo il seguente comando.

sudo reboot

4. Potete saltare al download del codice sul Pi o seguire i passi successivi per verificare che il sensore sia effettivamente funzionante.

5.  Una volta che la Raspberry Pi si è riavviato, dobbiamo eseguire modprobe in modo da poter caricare i moduli corretti.

sudo modprobe w1-gpio
sudo modprobe w1-therm


6. Ora cambiate nella directory dei dispositivi e usate ls per vedere le cartelle e i file nella directory.

cd /sys/bus/w1/devices
ls

7. Ora eseguite il seguente comando, cambiate la numerazione dopo il cd con quella che è apparsa nella vostra directory usando il comando ls. (Se avete più sensori ci sarà più di una directory)

cd 28-00000007602ffa

8. Ora eseguire il seguente comando.

gatto w1_slave

9. Questo comando dovrebbe emettere dati, ma come noterete non è molto facile da usare.

La prima riga dovrebbe avere un SI o un NO alla fine. Se è SI, allora dovrebbe apparire una seconda riga con la temperatura. Questa linea sarà simile a qualcosa come t=12323, e sarà necessario fare un po’ di matematica per rendere questa una temperatura utilizzabile che possiamo capire facilmente. Per esempio, Celsius si divide semplicemente per 1000.

Ora è il momento di passare alla sceneggiatura di Python.

Vi spiegherò brevemente il codice qui sotto se volete saperne di più. Questo codice proviene dal tutorial di Adafruit. Se volete scaricarlo, potete semplicemente scaricarlo dalla pagina Pi My Life Up GIT o usando il seguente comando.

git clone https://github.com/pimylifeup/temperature_sensor.git

Per iniziare lo script Python, importiamo tre pacchetti, OS, Glob e tempo.

Successivamente, eseguiamo i comandi modprobe, e questi comandi sono gli stessi che abbiamo usato prima.

Dichiariamo tre diverse variabili che puntano alla posizione dei dati dei nostri sensori. Non dovrebbe essere necessario cambiare nessuna di queste.

import os
import glob
import time
 
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
 
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

Nella funzione read_temp_raw apriamo il file che contiene la nostra uscita di temperatura. Da questo leggiamo tutte le righe e poi lo restituiamo in modo che il codice che ha chiamato questa funzione possa utilizzarlo. In questo caso la funzione read_temp chiama questa funzione.

def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

Nella funzione read_temp elaboriamo i dati della funzione read_temp_raw. Prima di tutto ci assicuriamo che la prima riga contenga YES. Ciò significa che ci sarà una linea con una temperatura all’interno di essa.

Se c’è una temperatura troviamo poi la linea con t= utilizzando le linee[1].find(‘t=’). Linee[1] significa che stiamo guardando il secondo elemento dell’array, in questo caso la seconda linea.

Una volta che abbiamo la linea otteniamo semplicemente tutti i numeri che sono dopo la t= e questo viene fatto alle linee[1][uguale_pos+2:]. Equals_pos è la posizione iniziale della temperatura (t), e aggiungiamo 2 alla posizione, così otteniamo solo i numeri di temperatura effettivi.

Poi convertiamo il numero sia in una temperatura Celsius che in una temperatura Fahrenheit. Riportiamo entrambi nel codice che ha chiamato questa funzione. Questa funzione è la stampa che si trova nel while loop.

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f

Il while loop è sempre vero, quindi resterà in esecuzione per sempre fino a quando il programma non verrà interrotto da un errore o dall’utente che cancella lo script. Richiama semplicemente il read_temp all’interno della funzione di stampa. La funzione di stampa ci permette di vedere l’output sul nostro schermo. Lo script viene poi messo a riposo per 1 secondo ogni volta che ha letto il sensore.

while True:
	print(read_temp())	
	time.sleep(1)

Test del codice

Una volta che avete scaricato o finito di scrivere il codice e avete anche impostato correttamente il circuito, possiamo ora chiamare lo script Python. Per richiamare lo script python è sufficiente eseguire il seguente comando.

sudo python thermometer_sensor.py

Ora si dovrebbe avere un’uscita di temperature sia in Fahrenheit che in Celsius. È possibile modificarlo solo per visualizzare la scala di temperatura preferita.

Questo è tutto quello che dovete sapere per far funzionare il vostro sensore di temperatura Raspberry Pi ds18b20.

Se state cercando di fare un ulteriore passo avanti, date un’occhiata ai miei consigli qui sotto. Cercherò di incorporare questo sensore in progetti futuri, quindi rimanete sintonizzati.

Possibili altri progetti

Ci sono molte altre cose che si possono fare con questo sensore di temperatura Raspberry Pi. Citerò rapidamente un paio di idee, e alcune di esse potranno essere trattate in futuro.

Potete far collegare lo script Python a un database come MYSQL e memorizzare i dati in questo modo. Se si aggiunge un timestamp ai dati, in futuro sarà possibile guardare indietro i dati e confrontare eventuali modifiche.

Il prossimo suggerimento funzionerebbe benissimo con quello precedente. Potete usare i dati memorizzati nel database MYSQL per creare graziosi grafici da mostrare alla temperatura nel corso di un giorno, un mese o anche un anno. Si potrebbe anche tracciare un grafico in tempo reale.

In alternativa, l’utilizzo di influxDB insieme a Grafana è un ottimo modo per visualizzare visivamente le statistiche di temperatura.

Spero che siate stati in grado di costruire e far funzionare questo sensore di temperatura Raspberry Pi.

Se vi siete imbattuti in qualche problema, avete un feedback o qualsiasi altra cosa, allora sentitevi liberi di lasciare un commento qui sotto.


Per ulteriori informazioni visita il sito: immagi.net