DS18B20 en Raspberry

We hebben in huis een behoorlijk aantal aan DS18B20 digitale temperatuursensoren in huis. Deze digitale sensoren kunnen redelijk nauwkeurig van -20 tot ongeveer +100 meten. Er wordt overigens gemeten tot 3 cijfers! achter de komma. Dat heeft dus aardig wat weg van schijnprecisie aangezien de sensoren soms tot 5% kunnen afwijken van de daadwerkelijke temperatuur.

Dat maakt overigens niet veel uit, ze zijn goedkoop via alibaba of ebay te vinden en als je ze in een glas water hangt ( de waterdichte variant uiteraard ) dan kan je de afwijkende er makkelijk tussenuit vissen.

Aansluiten

Het aansluiten van de sensoren is makkelijk op een Raspberry.

raspi

De DS18B20 sensoren hebben drie aansluitingen. Deze sluit je als volgt aan op je Raspberry PI.

sensor-connection1

In bovenstaande plaatje is “power” de rode draad, zwart de “ground” en de gele draad zit aangesloten op “GPIO 4”. Meerdere sensoren aansluiten is ook makkelijk, je koppelt alle zwarte draden met elkaar, alle gele draden en rode draden. Zo kan je dus met slechts 3 pins op je Raspberry PI een heleboel sensoren gebruiken.

Configuratie

Als je de Raspberry PI hebt voorzien van een operating system ( bijvoorbeeld Raspbian ) dan ben je er nog niet. Je moet de “modules” voor de DS18B20 sensoren nog laden. Dit kan je met de hand doen door:

sudo modprobe w1-gpio
sudo modprobe w1-therm

uit te voeren vanaf de prompt. Als je dit automatisch wil doen gebruik dan het programma “nano” en edit de file /etc/modules en voeg de volgende regels toe aan dit bestand:

w1-gpio
w1-therm

Uitlezen

Navigeer nu naar de map /sys/bus/w1/devices. Dit kan vanaf de console zelf als u een monitor hebt aangesloten op de PI maar ook via SSH via bijvoorbeeld PUTTY.

putty

Alle “mappen” die beginnen met 28- zijn de sensoren. Als ik naar een sensor toe navigeer en ik bekijk het bestand w1_slave. Dan is de uitkomst:

2d 01 4b 46 7f ff 03 10 39 : crc=39 YES
2d 01 4b 46 7f ff 03 10 39 t=18812

Deze sensor meet op dit moment 18.812 graden en de meting is correct geweest gezien de YES na de crc=39.

Software

Ik heb zelf in java, dat draait goed op een Raspberry, een programma geschreven die de sensoren uitleest. Ruwweg doet het programma elke keer dit:

  1. Controleer de map /sys/bus/w1/devices welke sensoren er beschikbaar zijn
  2. Doorloop voor elke sensor de volgende stappen
    1. Lees de sensor X keer uit waarbij de meting valide moet zijn
    2. Verwijder de laagste en hoogste meting en middel de overige metingen uit
    3. Verstuur deze waarde via HTTP naar een andere server
  3. Ga slapen voor Y seconden

En parallel daar aan controleert de software of hij vast is gelopen of niet. Is de software vastgelopen dan wordt deze opnieuw opgestart.

Download

De software zit nog met wat pleisters in elkaar en zit nog verweven in mijn eigen thermostaat applicatie. Ik moet deze twee nog eens loskoppelen. Zodra ik dit heb gedaan zal ik de software ter beschikking stellen hier op deze pagina.

 

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *