Startseite Skripte für das Wintersemester 2018/19 Projekt „Citizen Science“ Arduino Grundlagen Temperatur Sensor Modul KY-001


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;
  }
}