Temperatur messen mit dem DS18B20

Temperatur messen mit dem DS18B20

Besteht mal der Bedarf an einer Temperatur Messung ist der DS18B20 ideal dafuer geeignet. 

DS18B20 Wasserdicht

Gemessen wird mit einem One Wire Bus. Durch diesen Bus ist es moeglich an einem Daten-Pin des Arduino mehrer Messfuehler anzuschliessen. Denn Pins einsparen ist immer von Vorteil.

Beschaltung des DS18B20

Und nun noch der entsprechende Sketch.

#include <OneWire.h>

// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// http://milesburton.com/Dallas_Temperature_Control_Library

OneWire  ds(2);  // on pin 10 (a 4.7K resistor is necessary)

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;
  
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  
  Serial.print("ROM =");
  for( i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return;
  }
  Serial.println();
 
  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      return;
  } 

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end
  
  delay(1000);   

  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // Read Scratchpad

  Serial.print("  Data = ");
  Serial.print(present, HEX);
  Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    Serial.print(data[i], HEX);
    Serial.print(" ");
  }
  Serial.print(" CRC=");
  Serial.print(OneWire::crc8(data, 8), HEX);
  Serial.println();

  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    // at lower res, the low bits are undefined, so let's zero them
    if (cfg == 0x00) raw = raw & ~7;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
    //// default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  fahrenheit = celsius * 1.8 + 32.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  Serial.print(fahrenheit);
  Serial.println(" Fahrenheit");
}

Servomotor ansteuern

Development Board

Einen Servo mit einem Arduino anzusteuern ist kein Hexenwerk. Mit nachfolgendem Sketch können zwei unterschiedliche Positionen angefahren werden.

// Servo Libary 
#include <Servo.h>
 
// Neues Objekt
Servo myservo;
int wert_auf;
int wert_zu;
 
void setup()
{
  // Servo an Pin 9 koppeln
  myservo.attach(9);
  Serial.begin(9600);
}
 
void loop()
{
  
   // Servo auf steuern
  wert_auf = 900;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_auf = map(wert_auf, 0, 1023, 0, 180);  
  myservo.write(wert_auf);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
  delay(1500);

  // Servo zu steuern
  wert_zu = 800;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_zu = map(wert_zu, 0, 1023, 0, 180);  
  myservo.write(wert_zu);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
   delay(1500);
 

}

Willkommen

Willkommen zur deutschen Version von WordPress. Dies ist der erste Beitrag. Du kannst ihn bearbeiten oder löschen. Und dann starte mit dem Schreiben!