Samstag, 31. Januar 2015

Raspberry Pi - Temperatursensor DS18B20

An dem Raspberry Pi kann man relativ simpel einen Temperatursensor ansteuern.
Ich habe dafür bei ebay einen Digitaler Temperatursensor DS18B20 Wasserdicht gekauft (Kosten ca. 2 €).

Der DS18B20 Sensor besitzt drei Kabel:
  • Rot (VCC / 3,0V bis 5,5V)
  • Weiß (DATA / 1-Wire)
  • Schwarz (GND)
Der Messbereich liegt bei -55°C und +125°C und  die Messgenauigkeit bei ca. ± 0,5°C.

Durch einen eindeutigen Code (ID) können mehrere Temperatursensoren parallel angeschlossen werden.

 
Der Sensor muss via GPIO angeschlossen werden (General Purpose Input/Output)).
  • Rot (VCC) an Pin 1 3,3V
  • Weiß (DATA) an den GPIO 4 (Pin 7)
  • Schwarz GND Pin 6
  • Zwischen VCC 3,3V und DATA GPIO 4 muss ein 4,7k Ohm Widerstand verwendet werden.

Um den Sensor ansprechen zu können, müssen folgende Module geladen werden
sudo modprobe w1-gpio
sudo modprobe w1-therm
Update (03.05.2015)
Raspbian Betriebssystems ab Kernel 3.18 erfordert jetzt die Aktivierung des Device Tree Overlay für 1-wire:
sudo vi /boot/config.txt 
Und folgendes hinzufügen
dtoverlay=w1-gpio,gpiopin=4,pullup=on 
Diese Module sollte am Besten auch direkt beim Start des Pi immer geladen werden
sudo vi /etc/modules
Und folgendes hinzufügen
w1-gpio
w1-therm
Nach dem erfolgreichen Anschließen und Laden der Module sollte der Sensor jetzt zur Verfügung stehen. Zu finden unter
/sys/bus/w1/devices/xx-xxxxxxxxxxxx/w1_slave

t=21437 / 1000 = 21,437 ° C

Bash-Script zum Auslesen der Temperatur (sudo apt-get install bc):

#!/bin/sh
# Temperatur von Sensor auslesen
# (c) Sebastian Hemel


temp=$(cat /sys/bus/w1/devices/28-00000511590a/w1_slave | sed -n "s/.*t=\(.*\)/\1/p")
temp=`echo "scale=3; $temp / 1000" | bc`
printf "Aktuelle Temperatur: %05.2f°C\n" $temp



Bash-Script zum Auslesen der Temperatur, Temperatur und Tagdesdatum + Uhrzeit in Datei schreiben und auf einen FTP-Server hochladen:

#!/bin/sh
# Temperatur von Sensor auslesen und per FTP hochladen
# (c) Sebastian Hemel


temp=$(cat /sys/bus/w1/devices/28-00000511590a/w1_slave | sed -n "s/.*t=\(.*\)/\1/p")
temp=`echo "scale=3; $temp / 1000" | bc`
#printf "Aktuelle Temperatur: %05.2f°C\n" $temp >> temp.txt

rm temp.txt
printf "" >> temp.txt
printf "%05.2f" $temp >> temp.txt
printf " Grad Celsius - " >> temp.txt
date +%d.%m.%Y' '%H:%M >> temp.txt
printf "" >> temp.txt

sleep 1
ncftpput -f /home/pi/ftp.cfg /temp /home/pi/temp.txt


Keine Kommentare:

Kommentar veröffentlichen