|
|
Zeile 1: |
Zeile 1: |
| ==Bild== | | ==Bild== |
− | [[Datei:KY-001.jpg|none|358x358px]] | + | [[Datei:lk_accel.png|none|250x187px]] |
| | | |
| ==Technische Daten / Kurzbeschreibung== | | ==Technische Daten / Kurzbeschreibung== |
− | Chipsatz: DS18B20 | Kommunikationsprotokoll: 1-Wire<br /><br />9- 12Bit genaue Temperaturmessung im Meßbereich von –55°C bis +125°C
| + | Linker Kit Platine mit Beschleunigungs-/Bewegungssensor |
− | | + | |
− | ==Pin-Belegung==
| + | |
− | [[Datei:3_S_V_G.png|none]]
| + | |
| | | |
| | | |
| | | |
| ==Codebeispiel Arduino== | | ==Codebeispiel Arduino== |
− | Für das folgende Codebeispiel werden zwei zusätzliche Libraries benötigt:
| + | <pre class="brush:cpp"> </pre> |
− | | + | |
− | - [OneWire Library] von [http://www.pjrc.com/teensy/td_libs_OneWire.html Paul Stoffregen] | veröffentlicht unter der MIT License
| + | |
− | | + | |
− | - [Dallas Temperature Control Library] von [http://milesburton.com/Main_Page?title=Dallas_Temperature_Control_Library 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.<br /><br />Diesen finden Sie standardmäßig unter dem folgenden Pfad Ihrer Windows-Installation:
| + | |
− | | + | |
− | C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries
| + | |
− | | + | |
− | <pre class="brush:cpp">// 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
| + | |
− | }
| + | |
− | | + | |
− | </pre>
| + | |
− | | + | |
− | '''Anschlussbelegung Arduino:'''
| + | |
− | | + | |
− | {| style="height: 58px; padding-left: 30px;" width="228"
| + | |
− | |-
| + | |
− | ||Sensor Signal
| + | |
− | ||=
| + | |
− | ||[Pin 4]
| + | |
− | |-
| + | |
− | ||Sensor +V
| + | |
− | ||=
| + | |
− | ||[Pin 5V]
| + | |
− | |-
| + | |
− | ||Sensor -
| + | |
− | ||=
| + | |
− | ||[Pin GND]
| + | |
− | |}
| + | |
− | | + | |
− | '''Beispielprogramm Download'''
| + | |
− | | + | |
− | [[Medium:KY-001-TemperaturSensor.zip|KY-001-TemperaturSensor.zip]]
| + | |
− | | + | |
− | ==One-Wire Konfiguration 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.
| + | |
| | | |
| ==Codebeispiel Raspberry Pi== | | ==Codebeispiel Raspberry Pi== |
− | Programmierbeispiel in der Programmiersprache Python
| + | <pre class="brush:py"> </pre> |
− | | + | |
− | <pre class="brush:py"># 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()
| + | |
− | </pre> | + | |
− | '''Anschlussbelegung Raspberry Pi:'''
| + | |
− | | + | |
− | {| style="height: 58px; padding-left: 30px;" width="228"
| + | |
− | |-
| + | |
− | ||Signal
| + | |
− | ||=
| + | |
− | ||GPIO4
| + | |
− | ||[Pin 7]
| + | |
− | |-
| + | |
− | ||+V
| + | |
− | ||=
| + | |
− | ||3,3V
| + | |
− | ||[Pin 1]
| + | |
− | |-
| + | |
− | ||GND
| + | |
− | ||=
| + | |
− | ||Masse
| + | |
− | ||[Pin 6]
| + | |
− | |}
| + | |
| | | |
| '''Beispielprogramm Download''' | | '''Beispielprogramm Download''' |
| | | |
| [[Medium:KY-001_RPi_TemperaturSensor.zip|KY-001_RPi_TemperaturSensor.zip]] | | [[Medium:KY-001_RPi_TemperaturSensor.zip|KY-001_RPi_TemperaturSensor.zip]] |
− |
| |
− | Zu starten mit dem Befehl:
| |
− |
| |
− | <pre class="brush:bash">sudo python KY-001_RPi_TemperaturSensor.py
| |
− | </pre>
| |