Raspberry Pi – Temperatuur sensor DS18B20 uitlezen

Hardware

DS18B20Temperatuur sensor DS18B20 waterdicht

   BESTELLEN

De DS18B20 (of QT18B20) is een nauwkeurige digitale temperatuur sensor, het is een Dallas one-wire device en werkt op 3.3-5v, je kan meerdere sensoren aansluiten via dezelfde pinnen en deze uitlezen.

Afwijking: ±0,5°C bij −50°C en +85°C

Specificaties:

– 1-Wire interface vereist slechts 1 pin voor communicatie
– 9/10/11/12 bits resolutie (in te stellen)
– 64-bit serial code opgeslagen in een geïntegreerde ROM
– Kan worden gevoed vanuit datalijn.
– Voeding bereik is 3,0 V tot 5,5 V
– Meet temperaturen van -55 ° C tot +125 ° C
– ± 0,5 ° C nauwkeurigheid van -10 ° C tot +85 ° C

Pinout

DS18B20 pinout TO-92
Pin:Functie
1GND
2Digitale uitgang
3Vdd (+3.3v)

Wat heb je nodig?

1) Weerstand van 4,7 kΩ (als pull-up)
1) Python 2.x

Aansluiten op de Raspberry Pi

Sluit de DS18B20 sensor aan zoals aangegeven op onderstaand schema:

DS18B20-raspberry-pi-schema

Ps. de weerstand is nodig voor de pull-up!

DS18B20 pin:Raspberry Pi pin:
1 (GND)GND
2 (Digitale uitgang)GPIO4
3 (Vdd (+3.3v)+3.3v

Meerdere sensoren aansluiten

Normale Voeding

Als je de normale voeding gebruikt, dan is de onderstaande schakeling wat je nodig hebt om meerdere sensoren aan te sluiten.

ds18b20-normale-voeding

Parasiet Voeding

In deze methode sluiten we in principe pin 1 en 3 van de sensor kort en trekt de sensor stroom via de data pin.

ds18b20-parasiet-voeding

(bron v/d plaatjes)

Schema om meerdere sensoren aan te sluiten:

DS18B20 multi raspberry pi schema

Meetresolutie instellen

Het is mogelijk om de meetresolutie van de sensor te cconfigureren dat kan met het inladen van de dallas bibliotheek:

Voor 12-Bit: sensors.setResolution(temp1, 12);

Maar des te preciezer, hoe langer het duurt voordat data opgevraagd wordt:

Mode Resol Conversion time
9 bits 0.5°C 93.75 ms
10 bits 0.25°C 187.5 ms
11 bits 0.125°C 375 ms
12 bits 0.0625°C 750 ms

Zie voorbeeld code onder.

(bron)


1-Wire module laden

Normaal is de 1-wire module niet geladen, als je  ls /sys/bus/ (geeft inhoud van de folder weer) zou uitvoeren, staat w1 er niet bij:

Om de 1-Wire module te laden moeten we 2 commando’s uitvoeren, namelijk  sudo modprobe w1-gpio en  sudo modprobe w1_therm , om dit in 1 lijn uit te voeren op de raspberry pi, gebruik dan het volgende commando:

sudo modprobe w1-gpio && sudo modprobe w1_therm

Al je daarna nog een keer de inhoud bekijkt van /sys/bus/ , dan zie je nu w1 er wel bij staan.

1-Wire module automatisch laden

Om nu niet elke keer deze regel in te hoeven tikken om de 1-wire module te laden als je de raspberyr pi (her)start, kun je deze regels toevoegen aan het opstart script /etc/modules

1) Tik in op de raspberry pi: sudo nano /etc/modules
2) Plak deze regels onderaan het bestand:

Druk op CTRL+O en dan ENTER om op te slaan, CTRL+X om nano af te sluiten.

3) Herstart de raspberry pi met het commando: sudo reboot

Na het opstarten word de 1-wire module automatisch geladen.

GPIO en de nieuwe kernel

Er zijn problemen bekend dat de GPIO toewijzingen niet altijd goed werken, het onderstaande kan het probleem verhelpen door “/boot/config.txt” te bewerken.

1) Bewerk “/boot/config.txt” met het commando: sudo nano /boot/config.txt

2) Zet onderaan deze inhoud:

Druk op CTRL+O en dan ENTER om op te slaan, CTRL+X om nano af te sluiten.

3) Herstart de raspberry pi met het commando: sudo reboot

Foutmeldingen?

In het dmesg log komen deze regels voor:

w1_master_driver w1_bus_master1: Family 0 for 00.X00000000000.XX is not registered.

Dit is geen foutmelding maar een “standaard” melding op de 1-wire bus dat er niets is aangesloten!

Waar bevind zich de sensor en de data?

LET OP: de folder “w1_bus_master1” is bij een nieuwe kernel er bij gekomen:

RPi 1,2,3 met oude kernel:  /sys/bus/w1/devices/[sensorid]/w1_slave

RPi 2,3 met nieuwe kernel:  /sys/bus/w1/devices/w1_bus_master1/[sensorid]/w1_slave

Nadat je de 1-wire module hebt geladen, vind je alle temperatuur modules in:  /sys/bus/w1/devices/w1_bus_master1/

De data staat in de folder van de “gevonden sensoren”:  /sys/bus/w1/devices/w1_bus_master1/[ID van de sensor]/w1_slave

Om de data weer te geven, gebruik het commando:  cat /sys/bus/w1/devices/w1_bus_master1/[ID van de sensor]/w1_slave

Hieronder zie je een voorbeeld:

raspberry pi - DS18B20 uitlees voorbeeld

Zien hoeveel sensoren er zijn gevonden kan met het commmando:

cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slave_count

Temperatuur uitlezen via BASH

Snel en eenvoudig de temperatuur uitlezen van een sensor via de bash kan met deze regel (pas het ID aan aan je eigen situatie):

raspberry pi - DS18B20 uitlees voorbeeld bash

Makkelijk en snel een bash gebruiken

1) Creëer een bestand “temp1” in “/usr/bin“, met het commando: sudo nano /usr/bin/temp1

2) Zet daarin deze inhoud;

3) Druk op CTRL+O en dan ENTER om op te slaan, CTRL+X om nano af te sluiten.

4) Zet de rechten van het bestand zo dat het uitgevoerd mag worden met het commando:  sudo chmod +x /usr/bin/temp1

Temperatuur uitlezen via Python

Het is mogelijk om dus de waarde die je ziet dmv het “cat” commando:

in een string te zetten en zo “knippend” naar de temperatuur waarde te gaan:

Gegevens wegschrijven naar CSV bestand (1 sensor)

Je kan de gegevens ook opslaan in een CSV bestand, onderstaand script maakt ook gebruik van de commandolijn parameters en slaat gegevens op in een bestand (per maand) in “/usr/src/DS_DATA_[YYYY]_[MM].csv

De inhoud van het CSV bestand ziet er zo uit:

Gegevens wegschrijven naar CSV bestand (2 sensoren)

Je kan de gegevens ook opslaan in een CSV bestand, onderstaand script maakt ook gebruik van de commandolijn parameters en slaat gegevens op in een bestand (per maand) in “/usr/src/DS_DATA_[YYYY]_[MM].csv

De inhoud van het CSV bestand ziet er zo uit:


Script om Serienummer(s) bekijken


Bronnen: reuk.co.uk / projects.privateeyepi.comblog.vokiel.com / iada.nlraspberrypi.stackexchange.com