DS18B20 waterdichte temperatuur sensor aansluiten op Raspberry Pi

De DS18B20 is een zogenaamde 1-wire digitale temperatuur sensor die temperaturen kan meten tussen de -55°C en +125°C. In dit stappenplan gaan we gebruik maken van de waterdichte temperatuursensor. De DS18B20 is een Dallas one-wire device, dat wil zeggen dat input en output over dezelfde pin gaan zodat je tot 127 devices kan aansluiten op dezelfde pin.

De waterdichte versie kun je gebruiken voor het meten van vloeistoffen, handig om bijvoorbeeld de temperatuur van het aquarium te meten. De sensor aansluiten en uitlezen is vrij simpel, volg het onderstaande stappenplan.

Componenten voor dit project

• Waterdicht DS18B20 temperatuursensor (link)
• 4.7K Weerstand (link)
• Dupont verbindingkabels female/female (link)

Totale kosten van de componenten ~ € 1,50

Raspberry Pi Zero, Raspberry Pi 2, Raspberry Pi 3
Raspbian Jessie (2016-11-25 kernel 4.4)

Aansluitschema DS18B20 temperatuursensor

ds18b20 schema

DS18B20 RPI functie RPI pin
Rood VCC 3.3V 1
Zwart GND 6
Geel of Wit (DATA) GPIO #4 7

Plaats tussen DATA en VCC 3v3 een weerstand van ~4.7K-10K.

Activeer One Wire GPIO

Standaard is het W1 protocol niet geactiveerd op de Raspberry Pi, deze moeten we activeren met behulp van een dtoveray in het config.txt bestand van Raspbian.

sudo nano /boot/config.txt

Voeg onderaan het bestand de onderstaande regel toe:

dtoverlay=w1-gpio

Herstart hierna de Raspberry Pi:

sudo reboot -h 0

Werking DS18B20 testen

Activeer ‘one-wire’ op GPIO #4 met de onderstaande twee commando’s:

sudo modprobe w1-gpio
sudo modprobe w1-therm

Controleer de werking van de DS18B20 sensor, ga naar de map:

cd /sys/bus/w1/devices

Toon de inhoud van de map:

ls

Als de temperatuursensor is herkend zie je een map die begint met 28-xxxxxx, ga naar deze map:

cd 28-xxxxxx

Gebruik het onderstaande commando om de ruwe sensorwaarden uit te uitlezen, de waarde t= laat de gemeten temperatuur zien.

cat w1_slave

ds18b20 raspberry pi python

In het bovenstaande screenshot is de gemeten temperatuur: t=21125 (21.125ºC)

DS18B20 uitlezen met pythonscript

Natuurlijk willen we ook via Python de temperatuur kunnen uitlezen, hiervoor kun je onderstaande script gebruiken. Het script laat de huidige temperatuur zien inclusief drie cijfers achter de komma.

#!/usr/bin/env python
# DS18B20 waterdichte temperatuur sensor aansluiten op Raspberry Pi
# https://raspberrytips.nl/ds18b20-raspberry-pi/
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'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
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
return temp_c
while True:
print(read_temp())
time.sleep(1)
view raw ds18b20.py hosted with ❤ by GitHub

Het script kun je downloaden naar je Raspberry Pi met behulp van het commando.

wget https://raspberrytips.nl/ds18b20.py

Start het script met:

python ds18b20.py

Het resultaat zal zijn dat om de seconde een meeting plaats zal vinden en dat de gemeten temperatuur wordt weergegeven in het scherm.

DS18B20 raspberry pi python script

Wil je de temperatuur minder nauwkeurig weergeven bijvoorbeeld tot op een tiende (21.1) wijzig dan de volgende regel in het script:

temp_c = float(temp_string) / 1000.0

Door het toevoegen van round wordt het getal afgerond op x cijfers achter de comma, wil je twee cijfers achter de comma verander dan 1 in 2).

temp_c = round (float(temp_string) / 1000.0, 1)

5 gedachten over “DS18B20 waterdichte temperatuur sensor aansluiten op Raspberry Pi”

  1. Met 1 regel in bash gaat het ook:

    grep t= /sys/bus/w1/devices/28-*/w1_slave |awk -F= ‘{ print $2/1000 }’

    Als je > 1 meter hebt vul dan bij 28-* jouw thermometer in.

    Beantwoorden

Plaats een reactie