INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DS18s20 Temperatur Sensor
24.02.2018, 20:42
Beitrag #1
DS18s20 Temperatur Sensor
Hallo,
ich teste seid paar Tage den Dallas DS18s20 Temperatur Sensor.
Die Temperatur wird am TTF Display visualisiert. ABER- jedes Mal, wenn ich es anschalte wird erst kurz 106 Grad gezeigt, kurz danach (2,3 Sek.) kommt die Richtige Temperatur. Die Auslesen Methode habe ich aus Net.
Code:
int getTemp() {
  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
    Serial.print("Device is not recognized");
    return -1000;
  }

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

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


  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }

  ds.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  int TemperatureSum = (tempRead / 16) * 10;

  return TemperatureSum;
}


Weis jemand, wie ich es beheben kann (damit von Anfang an eine Richtiger Temperatur angezeigt wird) ?
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 22:14
Beitrag #2
RE: DS18s20 Temperatur Sensor
Hallo,
Dein SketchSchnipsel gibt nicht her...

Fakt ist, die Dallas benötigen einige Zeit um ausgelesen zu werden.
Das kann ich in Deinem Sketch nicht entdecken.
Schaue mal ins Datenblatt des Sensor, da steht es geschrieben.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 22:28
Beitrag #3
RE: DS18s20 Temperatur Sensor
Das hier hat bei mir gut funktioniert:

Code:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h> // LCD Display

LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

const int delayTimeM1 = 750; // Zeit zur Temperatur Auswertung
unsigned long AktuellMilles;
unsigned long VorherMillesM1 = 0;

const unsigned long Baud_Rate = 9600;
const unsigned char One_Wire_Bus = 2; // Sensoren auf Pin 2

OneWire oneWire(One_Wire_Bus);
DallasTemperature sensoren (&oneWire);

int Anzahl_Sensoren = 0;
int is = 0; // Zähler für die Sensoren
int ia = 0; // Zähler für die Adressstellen 0-7
int Sensor = 0;

DeviceAddress tempDeviceAddress; // Für die Adressausgabe
int numberOfDevices; // Für die Adressausgabe

//---------------------------------------------------------------------------
void setup()
{
  sensoren.begin();
  Serial.begin(Baud_Rate);
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();

  // Anzahl der Sesoren ermitteln
  Anzahl_Sensoren = sensoren.getDeviceCount();

  // Ermitteln der Sensor-Adressen
  for (is = 0; is < Anzahl_Sensoren; is++)
  {
    if (sensoren.getAddress(tempDeviceAddress, is))
    {
      Serial.println ();
       printAddress(tempDeviceAddress);
    }
  }
}
//---------------------------------------------------------------------------
// Ausgabe der Sensor-Adressen
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t ia = 0; ia < 8; ia++)
  {
    if (deviceAddress[ia] < 16)
    {
      Serial.print("0"); //ist die Hex Adresse kleiner 16 dann erste Stelle eine "0"
    }
    Serial.print(deviceAddress[ia], HEX);
  }
}
//---------------------------------------------------------------------------
void loop()
{ AktuellMilles = millis();       // Die aktuellen Millis übergeben

  if (AktuellMilles - VorherMillesM1 >= delayTimeM1)
  { VorherMillesM1 = AktuellMilles;

    //Temperaturen Aulesen
    sensoren.requestTemperatures();

    // Hier werden die Sensoren ausgelesen und aufs Display gebracht
    if (Sensor < Anzahl_Sensoren)
    { Sensor ++;
      float temperatur = sensoren.getTempCByIndex(Sensor - 1);
      lcd.setCursor (0, (Sensor - 1));
      lcd.print ("Temperatur");
      lcd.setCursor (11, (Sensor - 1));
      lcd.print (Sensor);
      lcd.setCursor (14, (Sensor - 1));
      lcd.print (temperatur);
      if (Sensor == Anzahl_Sensoren) Sensor = 0;
    }
  }
}

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 22:37
Beitrag #4
RE: DS18s20 Temperatur Sensor
Hallo Andreas,
danke für die Antwort; - ich habe zwar ne Lösung für den Falschen Anfangswert im Haupt Programm implementiert (einen Zeit-Buffer –> erst mall soll sich alles normalisieren … und erst! danach wird abgefragt … ) aber mich Interessiert es, warum ein Falsches Wert wird generiert? Aber manchmal muss man die Dinge so annehmen wie die sind. Sad
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 22:47
Beitrag #5
RE: DS18s20 Temperatur Sensor
(24.02.2018 22:37)georg01 schrieb:  aber mich Interessiert es, warum ein Falsches Wert wird generiert? Aber manchmal muss man die Dinge so annehmen wie die sind. Sad

Weiß ich nicht ob man das muss. In dem Beispiel von mir hier ist der erste Wert bereits der richtige.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 22:58 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2018 22:59 von georg01.)
Beitrag #6
RE: DS18s20 Temperatur Sensor
Hallo,
danke für den Tipp – ja Du benutzt die <DallasTemperature.h> Lib.
Ok werde mir die Lib anschauen.
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2018, 23:34
Beitrag #7
RE: DS18s20 Temperatur Sensor
OK, habe ich nicht gesehen dass du es ohne die Dallas Lib. machst.

Franz

https://www.youtube.com/watch?v=Fnzn85oWM_Q
Hier was zum Thema Deutsche Politik Angry
Und hier zum Thema richtige Politik Big Grin
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.02.2018, 11:41
Beitrag #8
RE: DS18s20 Temperatur Sensor
Hallo Georg,
der Sensor braucht SEINE Zeit!

Hier ohne Lib

Code:
byte i;
  byte present = 0;
  byte data[12];

  //  byte addr1[8]={
  //    40,115,19,82,5,0,0,7    };//Dezimale Adresse des 1. DS18B20 Ghs
  byte addr2[8]={
    40,9,205,81,5,0,0,36                          };//Dezimale Adresse des 2. DS18B20 DSB

  /*Sensor Ghs
   ds.reset();
   ds.select(addr1);
   ds.write(0x44,0);          // Start der Umwandlung ohne parasitäre Stromversorgung
   //  delay(1000);               // bei parasitäre 750ms
  
   // prüfen ob Sensor angeschlossen ist
   present = ds.reset();
   ds.select(addr1);  
   ds.write(0xBE);             // liest das Scratchpad
  
   for ( i = 0; i < 9; i++) {   // wir brauchen 9 Daten Bytes
   data[i] = ds.read();
   }
   // Temperatur Berechnung. data[1] High Byte, data[0] Low Byte.
   //  TempDSB =  ((data[1] << 8) + data[0] ) * 0.0625;  // 12Bit = 0,0625 C per Bit
   //Ti auslesen
   */
  ds.reset();

  ds.select(addr2);
  ds.write(0x44,0);          // Start der Umwandlung ohne parasitäre Stromversorgung
  delay(750);               // bei parasitäre 750ms
  // prüfen ob Sensor angeschlossen ist:
  present = ds.reset();
  ds.select(addr2);  
  ds.write(0xBE);             // liest das Scratchpad

  for ( i = 0; i < 9; i++) {   // wir brauchen 9 Daten Bytes
    data[i] = ds.read();
  }
  // Temperatur Berechnung. data[1] High Byte, data[0] Low Byte.
  WertDSB =  ((data[1] << 8) + data[0] ) * 0.0625;  // 12Bit = 0,0625 C per Bit

Hier ist es ein delay(750)- diese Zeit braucht der Sensor um alles zu berechnen
und auszugeben.
Das delay() sollte man aber zwingend- durch millis() ersetzen.
Das der Sketch fast ne' Sekunde steht, geht überhaupt nicht.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehlermeldung (wegen BME 280 Sensor?) Schneggl 3 211 26.10.2019 09:28
Letzter Beitrag: Tommy56
  Grove-GSR Sensor frala 22 2.292 09.10.2018 22:11
Letzter Beitrag: Bitklopfer
  MAX7219 6-Kanal Temperatur Bargraph Cruiser1 3 894 18.08.2018 11:25
Letzter Beitrag: ardu_arne
  Sensor mit 10 Hz auslesen Olafson Larson 7 1.510 05.07.2018 15:59
Letzter Beitrag: Tommy56
Exclamation Sound Sensor KY-038 Jack 6 1.745 16.05.2018 23:46
Letzter Beitrag: georg01
Question IR Sensor - Tastendruck oneill86 2 1.079 21.03.2018 18:22
Letzter Beitrag: oneill86
  Temperatur mit Taster um +1 erhöhen T100 7 2.264 09.02.2018 04:58
Letzter Beitrag: T100
  Lichtschrankensensor / Line Tracker Sensor Hitikatus 5 1.902 13.07.2017 15:21
Letzter Beitrag: RCudino
  Dosieren mit Durchfluss Sensor Dualpower 7 3.946 10.06.2017 15:32
Letzter Beitrag: Binatone
  Arduino Sensor zeigt falsche Werte an Sandro2504 4 1.858 04.06.2017 09:03
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste