KY-001 Temperatur Sensor Modul: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Codebeispiel Arduino)
(Codebeispiel Raspberry Pi)
Zeile 81: Zeile 81:
  
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==
 +
Damit der Raspberry Pi mit dem One-Wire Bus, mit der Sensor DS18B20 seine Messdaten digital sendet, kommunizieren kann, muss dieser vorerst aktiviert werden. Hierbei muss die Datei "/boot/config.txt" editiert und um folgende Zeile ergänzt werden:
 +
 +
<pre class="brush:bash">dtoverlay=w1-gpio,gpiopin=4
 +
</pre>
 +
 +
Die Datei können Sie editieren, indem Sie den Befehl...
 +
 +
<pre class="brush:bash">sudo nano /boot/config.txt
 +
</pre>
 +
 +
... in die Konsole eingeben. Mit der Tastenkombination [STRG+X] können Sie das Editieren beenden und mit [STRG+Y] abspeichern.
 +
 +
Nachdem Sie den Raspberry Pi mittels...
 +
 +
<pre class="brush:bash">sudo reboot
 +
</pre>
 +
 +
... neugestartet haben, können Sie das untenstehende Beispiel anwenden.
 +
 
Programmierbeispiel in der Programmiersprache Python
 
Programmierbeispiel in der Programmiersprache Python
  
<pre class="brush:py"># Benoetigte Module werden importiert und eingerichtet
+
<pre class="brush:py"># coding=utf-8
import RPi.GPIO as GPIO
+
# Benoetigte Module werden importiert und eingerichtet
 +
import glob
 
import time
 
import time
+
from time import sleep
 +
import RPi.GPIO as GPIO
 +
 
 +
# An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden
 +
sleeptime = 1
 +
 
 +
# Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setmode(GPIO.BCM)
+
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Hier wird der Eingangs-Pin deklariert, an dem der Sensor angeschlossen ist. Zusaetzlich wird auch der PullUP Widerstand am Eingang aktiviert
+
 
GPIO_PIN = 24
+
# Nach Aktivierung des Pull-UP Widerstandes wird gewartet,
GPIO.setup(GPIO_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
+
# bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist
+
print 'Warte auf Initialisierung...'
print "Sensor-Test [druecken Sie STRG+C, um den Test zu beenden]"
+
 
+
base_dir = '/sys/bus/w1/devices/'
# Diese AusgabeFunktion wird bei Signaldetektion ausgefuehrt
+
while True:
def ausgabeFunktion(null):
+
    try:
        print("Signal erkannt")
+
        device_folder = glob.glob(base_dir + '28*')[0]
+
        break
# Beim Detektieren eines Signals (fallende Signalflanke) wird die Ausgabefunktion ausgeloest
+
    except IndexError:
GPIO.add_event_detect(GPIO_PIN, GPIO.FALLING, callback=ausgabeFunktion, bouncetime=100)  
+
        sleep(0.5)
+
        continue
 +
device_file = device_folder + '/w1_slave'
 +
 
 +
 
 +
# Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann
 +
def TemperaturMessung():
 +
    f = open(device_file, 'r')
 +
    lines = f.readlines()
 +
    f.close()
 +
    return lines
 +
 
 +
# Zur Initialisierung, wird der Sensor einmal "blind" ausgelesen
 +
TemperaturMessung()
 +
 
 +
# Die Temperaturauswertung: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner
 +
# /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave
 +
# in dem Die Daten, die über dem One-Wire Bus gesendet wurden gespeichert.
 +
# In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben
 +
def TemperaturAuswertung():
 +
    lines = TemperaturMessung()
 +
    while lines[0].strip()[-3:] != 'YES':
 +
        time.sleep(0.2)
 +
        lines = TemperaturMessung()
 +
    equals_pos = lines[1].find('t=')
 +
    if equals_pos != -1:
 +
        temp_string = lines[1][equals_pos+2:]
 +
        temp_c = float(temp_string) / 1000.0
 +
        return temp_c
 +
 
 
# Hauptprogrammschleife
 
# Hauptprogrammschleife
 +
# Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen
 +
# ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann
 
try:
 
try:
        while True:
+
    while True:
                time.sleep(1)
+
        print '---------------------------------------'
+
        print "Temperatur:", TemperaturAuswertung(), "°C"
# Aufraeumarbeiten nachdem das Programm beendet wurde
+
         time.sleep(sleeptime)
except KeyboardInterrupt:
+
         GPIO.cleanup()
+
  
 +
except KeyboardInterrupt:
 +
    GPIO.cleanup()
 
</pre>
 
</pre>
 
'''Anschlussbelegung Raspberry Pi:'''
 
'''Anschlussbelegung Raspberry Pi:'''
Zeile 118: Zeile 174:
 
||Signal
 
||Signal
 
||=
 
||=
||GPIO24
+
||GPIO4
||[Pin 18]
+
||[Pin 7]
 
|-
 
|-
 
||+V
 
||+V
Zeile 134: Zeile 190:
 
'''Beispielprogramm Download'''
 
'''Beispielprogramm Download'''
  
[[Medium:SensorTest_RPi.zip|SensorTest_RPi.zip]]
+
[[Medium:KY-001_RPi_TemperaturSensor.zip|KY-001_RPi_TemperaturSensor.zip]]
  
 
Zu starten mit dem Befehl:
 
Zu starten mit dem Befehl:
  
<pre class="brush:bash">sudo python SensorTest_RPi.py
+
<pre class="brush:bash">sudo python KY-001_RPi_TemperaturSensor.py
 
</pre>
 
</pre>

Version vom 25. April 2016, 15:26 Uhr

Bild

KY-001.jpg

Technische Daten / Kurzbeschreibung

Chipsatz: DS18B20 | Kommunikationsprotokoll: 1-Wire

9- 12Bit genaue Temperaturmessung im Meßbereich von –55°C bis +125°C

Pin-Belegung

3 S V G.png


Codebeispiel Arduino

Für das folgende Codebeispiel werden zwei zusätzliche Libraries benötigt:

- [OneWire Library] von Paul Stoffregen | veröffentlicht unter der MIT License

- [Dallas Temperature Control Library] von Miles Burton | veröffentlicht unter LGPL

Beide Libraries sind im Paket enthalten und müssen vor dem Start der Arduino IDE in den "library"-Ordner kopiert werden.

Diesen finden Sie standardmäßig unter dem folgenden Pfad Ihrer Windows-Installation:

C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries

// Benötigte Libraries werden importiert
#include <DallasTemperature.h> 
#include <OneWire.h>            

// Hier wird der Eingangs-Pin deklariert, an dem das Sensor-Modul angeschlossen ist
#define KY001_Signal_PIN 4

// Libraries werden konfiguriert
OneWire oneWire(KY001_Signal_PIN);          
DallasTemperature sensors(&oneWire);   


void setup() {

	// Initialisierung Serielle Ausgabe
	Serial.begin(9600);
	Serial.println("KY-001 Temperaturmessung");
    
	// Sensor wird initialisiert
	sensors.begin();  
}

//Hauptprogrammschleife
void loop()
{
	// Temperaturmessung wird gestartet...
	sensors.requestTemperatures(); 
	// ... und gemessene Temperatur ausgeben
	Serial.print("Temperatur: ");
	Serial.print(sensors.getTempCByIndex(0));
	Serial.write(176); // UniCode-Angabe eines char-Symbols für das "°-Symbol"
	Serial.println("C");
		
	delay(1000);	// 5s Pause bis zur nächsten Messung
}

Anschlussbelegung Arduino:

Sensor Signal = [Pin 4]
Sensor +V = [Pin 5V]
Sensor - = [Pin GND]

Beispielprogramm Download

KY-001-TemperaturSensor.zip

Codebeispiel Raspberry Pi

Damit der Raspberry Pi mit dem One-Wire Bus, mit der Sensor DS18B20 seine Messdaten digital sendet, kommunizieren kann, muss dieser vorerst aktiviert werden. Hierbei muss die Datei "/boot/config.txt" editiert und um folgende Zeile ergänzt werden:

dtoverlay=w1-gpio,gpiopin=4

Die Datei können Sie editieren, indem Sie den Befehl...

sudo nano /boot/config.txt

... in die Konsole eingeben. Mit der Tastenkombination [STRG+X] können Sie das Editieren beenden und mit [STRG+Y] abspeichern.

Nachdem Sie den Raspberry Pi mittels...

sudo reboot

... neugestartet haben, können Sie das untenstehende Beispiel anwenden.

Programmierbeispiel in der Programmiersprache Python

# coding=utf-8
# Benoetigte Module werden importiert und eingerichtet
import glob
import time
from time import sleep
import RPi.GPIO as GPIO

# An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden
sleeptime = 1

# Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Nach Aktivierung des Pull-UP Widerstandes wird gewartet,
# bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist
print 'Warte auf Initialisierung...'

base_dir = '/sys/bus/w1/devices/'
while True:
    try:
        device_folder = glob.glob(base_dir + '28*')[0]
        break
    except IndexError:
        sleep(0.5)
        continue
device_file = device_folder + '/w1_slave'


# Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann
def TemperaturMessung():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

# Zur Initialisierung, wird der Sensor einmal "blind" ausgelesen
TemperaturMessung()

# Die Temperaturauswertung: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner
# /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave
# in dem Die Daten, die über dem One-Wire Bus gesendet wurden gespeichert.
# In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben
def TemperaturAuswertung():
    lines = TemperaturMessung()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = TemperaturMessung()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c

# Hauptprogrammschleife
# Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen
# ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann
try:
    while True:
        print '---------------------------------------'
        print "Temperatur:", TemperaturAuswertung(), "°C"
        time.sleep(sleeptime)

except KeyboardInterrupt:
    GPIO.cleanup()

Anschlussbelegung Raspberry Pi:

Signal = GPIO4 [Pin 7]
+V = 3,3V [Pin 1]
GND = Masse [Pin 6]

Beispielprogramm Download

KY-001_RPi_TemperaturSensor.zip

Zu starten mit dem Befehl:

sudo python KY-001_RPi_TemperaturSensor.py