1-draads temperatuursensor (DS18B20)

Zo'n drie jaar geleden heb ik al eens aandacht geschonken aan de DS18B20 temperatuursensor. Niet alleen dat de betreffende informatie een beetje achterhaald is, gebleken is ook dat het wat slimmer kan. Deze zeer bekende digitale thermometer kan temperatuur meten van -55°C tot 125°C. De sensor heeft een one-wire-interface, wat betekent dat alle communicatie over slecht 1 datalijn loopt. Daarnaast is het mogelijk om aan deze datalijn heel eenvoudig meerdere sensoren te verbinden doordat de sensoren een uniek ID hebben. Samen met de w1thermsensor-bibliotheek zijn we in staat om met slechts enkele coderegels de gemeten temperatuur te tonen.

Daar gaan we…

Interface inschakelen
Om Raspberry Pi met de sensor te laten communiceren moet de ééndraads (1-Wire) interface ingeschakeld worden. Dit doen we door in de desktop op het Start pictogram te klikken en vervolgens naar Voorkeuren en naar Raspberry Pi Configuratie Programma te gaan. Hier gaan we naar het tabblab Interfaces en schakelen de 1-Wire interface in door op Aan en [OK] te klikken.

Om de installatie af te ronden moet de Pi een reboot doen. Daarna kan de interface gebruikt worden.

Bibliotheek installeren
Om straks een Python script te kunnen maken moet een specifieke bibliotheek geïnstalleerd worden, te weten de w1thermsensor-bibliotheek. Het kan ook een andere zijn, maar deze is de keus voor nu. Open de terminal en geef de volgende opdracht voor de installatie.

sudo pip3 install w1thermsensor

Sensor verbinden
Zoals aangegeven maakt de DS18B20 gebruik van een 1-draads seriële interface. De data pin hiervoor is de middelste pin van de TO-92 behuizing. Bij de waterdichte variant is dit de gele draad.

De sensor in de TO-92 behuizing en de waterdichte variant

Naast de sensor is een pull-up weerstand (4,7KΩ) nodig die tussen de 3,3V voeding en de datapin geplaatst wordt.

Op een breadbord kan dit er als volgt uitzien. De GND van de sensor wordt met de GND van de Pi verbonden, de 3.3V van de sensor wordt met de 3.3V voeding van de Pi verbonden en de datapin wordt met GPIO4 (pin 7) verbonden. De pull-up weerstand wordt zoals aangegeven tussen de datapin en de 3.3V geplaatst.

De GPIO en het breadboard met de DS18B20 sensor met de pull-up weerstand

Python-code
Het onderstaande script verzamelt elke seconde de temperatuur van de DS18B20-sensor en drukt deze op het scherm af. Open een editor zoals nano en geef het bestand een naam, bijvoorbeeld 18b20.py.

nano 18b20.py

Kopieer onderstaande script en plaats deze in de editor.

import time
from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor()

while True:
    temperature = sensor.get_temperature()
    print("The temperature is %s celsius" % temperature)
    time.sleep(1)

Om het script te laten draaien geef je de volgende opdracht.

python 18b20.py

Meerdere sensoren meten
Door de bibliotheek iets anders te benaderen is er de mogelijkheid om meerdere sensoren te scannen en de meetresultaten te tonen. Het enige dat je ervoor hoeft te doen is andere DS18B20 sensoren parallel over de werkende sensor te zetten en onderstaand script te gebruiken om ze uit te lezen.

De drie sensoren staan parallel met elkaar in het breadbord
from w1thermsensor import W1ThermSensor
import time

while True:
    for sensor in W1ThermSensor.get_available_sensors():
        print ("Sensor %s meet temperatuur %.2f" % (sensor.id, sensor.get_temperature()))

Have A Nice Day!

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*