Arduino – gezielt einen ds1820 Temperatur-Sensor auslesen

An einen Arduino können beliebig viele OneWire Temperatur-Sensoren wie der ds18s20 angeschlossen werden, wobei nur ein port belegt wird. In diesem Beitrag erfahren Sie, wie sie gezielt die Temperaturwerte eines bestimmten Temperatur-Sensors auslesen können. Zuvor muss für jeden Sensor die Geräteadresse angegeben werden. Über diese Adresse kann man anschließend gezielt auf einen bestimmten Sensor zugreifen und dessen Werte auslesen. Wie man die Geräteadressen aller angeschlossenen Temperatursensoren auslesen kann, können Sie in dem Beitrag „Adressen aller angeschlossenen ds1820 auslesen“ lesen.

 

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

16 Kommentare zu “Arduino – gezielt einen ds1820 Temperatur-Sensor auslesen

  1. Hallo, toller Code,
    aber bei mir schmeißt der einen Fehler!
    error: ‚DeviceAddress‘ does not name a type
    Irgendwie scheint der das nicht zu kennen?

    Danke Andre

    • Das liegt an einer fehlenden oder falschen library.
      In diesem Fall müsste es die DallasTemperature.h sein.
      Ich kann gerade nicht schauen.

  2. Jetzt gehts,
    ich hatte wohl keine oder eine veraltete Bibliothek;
    #include

    Danke und weiter so…… ;-)

  3. Danke! Code funktioniert hervorragend und hat mir sehr geholfen meine Sensoradressen zu bestimmen und T auszulesen!
    Jetzt werde ich mal probieren alles zu verstehen …

  4. Hallo,

    dieser Code geht echt sehr gut, nur leider wirft er bei mir einen zu hohen Wert raus.
    Nutze einen D18B20.

    Hoffe Sie können mir weiter Helfen?

    Gruß

  5. Eine Frage…
    Benutze DS18B20-er 6 stück
    habe die Adresse dem entsprechen geändert…
    Jetzt zeigt es mir bel allen Sensoren 40°C zuviel an, wo könnte der fehler liegen?
    Besten Dank für hilfe
    Übrigens gefällt mir sehr gut Deine Seite!!!

  6. Guten Tag,
    danke für das tolle Beispiel!
    Bei Raumtemperatur funktioniert dieser sehr genau und gut.
    Packe ich den Sensor jedoch in eine Gefriertruhe, sinkt die Temperatur ab 10°C nur noch sehr lange und brauch 4 Minuten bis er bei 0°C ankommt. Danach sinkt er nur noch bis -1°C und springt um diesen Wert herum

    Haben Sie vielleicht einen Tipp woran es liegen könnte?

    VG Peer Peters

  7. Hallo,
    der Code ist echt gut. Allerdings ist die ermittelte Temperatur 40°C zu hoch. Ich verwende DS18B20 Sensoren und setze einen 4k7 Pullup-Widerstand ein. Irgend eine Idee, woran das liegen kann? VG Pit

  8. Hab’s selber gelöst. Die Berechnung der Temperatur im Code gilt nur für den DS18S20. Der DS18B20 benötigt eine andere Berechnung.

    Hier meine Änderung die funktioniert.

    float getTemperature(byte* address)
    {
    int tr;
    byte data[12];

    writeTimeToScratchpad(address);

    readTimeFromScratchpad(address,data);

    //put in temp all the 8 bits of LSB (least significant byte)
    tr = data[0];

    if (address[0] == 0x10) // DS18S20
    {
    //check for negative temperature
    if (data[1] > 0x80)
    {
    tr = !tr + 1; //two’s complement adjustment
    tr = tr * -1; //flip value negative.
    }

    //drop bit 0
    tr = tr >> 1;

    //COUNT PER Celsius degree (10h)
    int cpc = data[7];
    //COUNT REMAIN (0Ch)
    int cr = data[6];

    return tr – (float)0.25 + (cpc – cr)/(float)cpc;
    }
    else // DS18B20
    {
    return ((data[1] << 8) + tr) * (float)0.0625;
    }
    }

  9. Hallo Pit

    ich habe den Code kopiert und ersetzt. Beim Testen bekomme ich die Fehlermeldung stray ‚\‘ in program. Ich finde den Fehler leider nicht selbst. Woran kann das liegen?

    • Diese Fehlermeldung ist mir noch nie untergekommen.
      Überprüf doch mal Deinen Code nach einem \ das da nicht hingehört.

  10. Erstmal Danke für den Code :-)
    Siegfried, schreibe einfach die Zeile mit den Fehler nochmal selber und lösche die andere hat bei mit so funktioniert.

  11. Das „minus“ in der Returnzeile am Ende verursacht den Fehler. Einfach zu fuss gegen ein echtes minus ersetzten

  12. also es wird bei mir alles fehlerfrei kompiliert und trotzdem erscheint im Monitor „keine Sensoren gefunden“. Pin2 heisst Digitalpin2? Wo finde ich für dieses Beispiel die Schaltung? Habe ich noch nicht gefunden.