Temperatuur sensor Raspberry Pi

Het is op een makkelijke manier mogelijk om een temperatuur sensor aan te sluiten op de Raspberry Pi.
We gebruiken hiervoor de DS18B20, deze is voor een paar $ te koop op ebay.

We hebben ook nog een 4,7kΩ weerstand nodig.

DS18B20

We sluiten deze op bovenstaande manier aan op de Raspberry Pi.
Met de weerstand tussen de data pin en de power pin.

We moeten de kernelmodule voor de GPIO-pinnen en de thermometermodule inschakelen door middel van de volgende opdrachten:

sudo modprobe w1-gpio
sudo modprobe w1-therm

Maar door het op de bovenstaande manier te doen, dienen we het iedere keer na een reboot van de Raspberry Pi weer uit te voeren.
We kunnen dit ook aanpassen het bestand /etc/modules.
Met sudo nano /etc/modules kunnen we dit bestand aanpassen.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835

We voegen w1-gpio en w1-therm toe.

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
w1-gpio
w1-therm

Iedere sensor heeft een uniek id. Om er achter te komen welk id de sensor heeft gaan we naar de folder /sys/bus/w1/devices/, met ls -l kijken we wat er in de folder staat.

pi@rpi2 ~ $ cd /sys/bus/w1/devices/
pi@rpi2 /sys/bus/w1/devices $ ls -l
total 0
lrwxrwxrwx 1 root root 0 Oct  2 13:05 28-xxxxxxxxxxxx -> ../../../devices/w1_bus_master1/28-xxxxxxxxxxxx
lrwxrwxrwx 1 root root 0 Oct  2 13:07 w1_bus_master1 -> ../../../devices/w1_bus_master1

Het id van de sensor begint met 28-, zo weet je wat het id is.

Op onderstaande manier is de sensor handmatig uit te lezen.

pi@rpi2 ~ $ cat /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave
f6 01 4b 46 7f ff 0a 10 eb : crc=eb YES
f6 01 4b 46 7f ff 0a 10 eb t=31375

De waarde van t is de temperatuur. In bovenstaande voorbeeld is dit t=31375, de waarde 31375 dient eerst nog door 1000 gedeeld te worden. De temperatuur is dus 31,375 graden Celsius.

Met behulp van een python script, kunnen we meteen de temperatuur laten zien zonder overige informatie.

# Open the file that we viewed earlier so that python can see what is 
# in it. Replace the serial number as before.
tfile = open("/sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slave")
# Read all of the text in the file.
text = tfile.read()
# Close the file now that the text has been read.
tfile.close()
# Split the text with new lines (\n) and select the second line.
secondline = text.split("\n")[1]
# Split the line into words, referring to the spaces, and select the 
# 10th word (counting from 0).
temperaturedata = secondline.split(" ")[9]
# The first two characters are "t=", so get rid of those and convert 
# the temperature from a string to a number.
temperature = float(temperaturedata[2:])
# Put the decimal point in the right place and display it.
temperature = temperature / 1000
#print temperature
print "%.2f" % temperature

Op onderstaande manier kan je dan het python script uitvoeren.

pi@rpi2 ~ $ python DS18B20.py
24.44

Doordat de sensoren een uniek id hebben is het mogelijk om meerdere DS18B20 sensoren aan te sluiten op de Raspberry Pi.
Deze worden dan parallel aangesloten en er is maar één weerstand nodig.
onderstaande afbeelding laat zien hoe.

Meerdere DS18B20 sensoren

In de folder /sys/bus/w1/devices/ zullen dan meerdere id’s te vinden zijn.

Geef een reactie