LK-Temp2: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Codebeispiel Raspberry)
(Codebeispiel Arduino)
Zeile 6: Zeile 6:
  
 
==Codebeispiel Arduino==
 
==Codebeispiel Arduino==
<pre class="brush:cpp"># Include
+
<pre class="brush:cpp">
OneWire ds (10); / / on pin 10
+
// Benötigte Libraries werden importiert
void setup (void) {
+
#include <DallasTemperature.h>
    // Initialize inputs / outputs
+
#include <OneWire.h>
    // Start serial port
+
// Hier wird der Eingangs-Pin deklariert, an dem das Sensor-Modul angeschlossen ist
    Serial.begin (9600);
+
#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();
 
}
 
}
void loop (void) {
+
//Hauptprogrammschleife
    byte i;
+
void loop()
    byte present = 0;
+
{
    byte data [12];
+
// Temperaturmessung wird gestartet...
    byte addr [8];
+
sensors.requestTemperatures();
    int Temp;
+
// ... und gemessene Temperatur ausgeben
    if (! ds.search (addr)) {
+
Serial.print("Temperatur: ");
        // Serial.print ("No more addresses.");
+
Serial.print(sensors.getTempCByIndex(0));
        ds.reset_search ();
+
Serial.write(176); // UniCode-Angabe eines char-Symbols für das "°-Symbol"
        return;
+
Serial.println("C");
    }
+
delay(1000); // 1s Pause bis zur nächsten Messung
    Serial.print ("R ="); // R = 28 Not sure what this is
+
    for (i = 0; i <8; i    ) {
+
        Serial.print (addr [i], HEX);
+
        Serial.print ("");
+
    }
+
    if (OneWire :: crc8 (addr, 7)! = addr [7]) {
+
        Serial.print ("CRC is not valid!");
+
        return;
+
    }
+
    if (addr [0]! = 0x28) {
+
        Serial.print ("Device is not a DS18S20 family device.");
+
        return;
+
    }
+
    ds.reset ();
+
 
}
 
}
 
</pre>
 
</pre>

Version vom 22. Februar 2017, 14:46 Uhr

Bild

LK-Temp2.jpg

Technische Daten / Kurzbeschreibung

Chipsatz: DS18B20 | Kommunikationsprotokoll: 1-Wire

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

Codebeispiel Arduino

// 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); // 1s Pause bis zur nächsten Messung
}

Codebeispiel Raspberry

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:
	PIO.cleanup()