Temperatur Sensor Modul KY-001
Das Modul braucht sowohl die OneWire library als auch eine aufwändige Umrechnung der Werte in Temperatur. Beides braucht Ihr nur hinzufügen, aber nicht verändern!
Arduino
// KY-001 Temperatur Sensor Modul (DS 18B20)
// http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
#include <OneWire.h>
OneWire ds(10); // an PIN 10 angeschlossen
float celsius; // globale Variable, die sich die Temperatur in Celsius merkt
int ledPin = 13;
void setup(void) {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(void) {
temperaturFinden(); // funktion direkt unterhalb!
// Wenn die Temperatur unter einen bestimmten Wert fällt
// soll die LED angehen
if (celsius < 27){
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
Serial.print("Temperatur: ");
Serial.print(celsius);
Serial.println(" Celsius");
}
void temperaturFinden(){
// Code dazu von: https://tkkrlab.nl/wiki/Arduino_KY-001_Temperature_sensor_module
//For conversion of raw data to C
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
ds.reset_search();
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000); // maybe 750ms is enough, maybe not
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
//Conversion of raw data to C
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000; // test most sig bit
// negative
if (SignBit){
TReading = (TReading ^ 0xffff) + 1; // 2's comp
}
Tc_100 = (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25
// If its negative
if (SignBit){
celsius = - Tc_100/100.00;
} else {
celsius = Tc_100/100.00;
}
}