28/11/2018

Temperatuursensor DS18?20 aansluiten, uitlezen

Filed under: — cybrarian @ 7:02 pm

Een temperatuurvoeler als deze bestaat in een driebenige behuizing, of in een ingebedde voeler met metalen kop en een draad van een meter of meer, eindigend in een 3-kleurige aansluiting (1-wire systeem).
ps: Een andere sensor had maar 2 draden, die is eerder geschikt voor gebruik met Arduino, en heeft een veranderende weerstand waaruit de temperatuur kan afgeleid worden.

Sensor
De sensor die ik zelf in handen kreeg is de DS18S20, bedoeld voor de C-Control hardware. Ik vermoed dat het een variant is op de DS18x20 reeks zoals DS18B20, WT18B20, ..

Deze sensor bevat zelf wat logica en een register. Hij heeft een soort serienummer, zodat meer sensoren parrallel kunnen aangesloten worden en toch apart uitgelezen kunnen worden.

Sommige versies hebben een grotere nauwkeurigheid, en dan moet je eventueel in je software een omzetting doen voor de interpretatie van de uitlezing.

Aansluiting

Hij heeft drie draden:
Groen: + 3 V (plus)
Bruin: massa (ground)
Wit: data (de zogenaamde 1 wire)

Je hebt een pin met + 3 V nodig, een pin voor ground en een pin om de gegevens uit te lezen: data aan GPIO4 (of Raspberry Pi pin 7). Er komt een weerstand van 4.7 kilo-Ohm tussen de +3 V en de data kabel.
Er zijn beschrijvingen en schema’s te vinden voor de bedrading, bv op: http://domoticx.com/raspberry-pi-temperatuur-sensor-ds18b20-uitlezen/

Config
Raspberry Pi instellen om de 1 wire bus op GPIO te gebruiken:
sudo nano /boot/config.txt
Voeg aan het einde toe:
dtoverlay=w1-gpio

Dan commando om 1-wire protocol uit te lezen:
sudo modprobe w1-gpio
sudo modprobe w1-therm

Vanaf dan kan je de waarde van het register vinden in je systeem:

cat /sys/bus/w1/devices/10-0008032a0831/w1_slave

Je krijgt iets als:

38 00 4b 46 ff ff 10 10 66 : crc=66 YES
38 00 4b 46 ff ff 10 10 66 t=27750

De uitlezing hier is in milligraden (27750 = 27,75°).

Multi

Zoals gezegd kan je meer sensoren samen aansluiten, op dezelfde pins op de Raspberry Pi; het verschil in identiteitsnummer laat toe die ook uit te lezen met een aangepast commando:

cat /sys/bus/w1/devices/10-0008032a0831/w1_slave
cat /sys/bus/w1/devices/10-0008032a0f9d/w1_slave

Het verschil is klein bij twee samen aangekochte sensoren.
Bij andere gelijkaardige sensoren of andere systemen/versies kan je misschien even moeten zoeken in de directorie(s)

/sys/bus/w1/devices/

De verwerking kan verder in software gebeuren, mbv scripts, cronjobs, … of ook met Gambas3

Powered by WordPress