beelogger

Temperatursensor (DS18B20)

Der DS18B20 ist ein digitaler Temperatursensor mit einer einstellbaren Auflösung von 9-12bit und eine Messgenauigkeit von ±0.5°C im Bereich von -10°C bis +85°C (außerhalb dieses Temperaturbereiches wird es ungenauer). Angesprochen wird der DS18B20 über den sogenannten ‘One-Wire-Bus’. Dadurch ist es möglich, an einem Datenpin vom Arduino, viele Sensoren gleichzeitig anzuschließen und nacheinander abzufragen. Der Begriff One-Wire kommt daher, weil man den Sensor mit nur einer Datenleitung (und GND) ohne zusätzliche Spannungsversorgung betreiben kann (parasitär). Grade bei mehreren Sensoren und bei längeren Leitungen, wird jedoch häufig von Problemen berichtet, weshalb diesem Sensor eine richtige Stromversorgung spendiert werden sollte.

Bezug

Den DS18B20 gibt es in verschiedenen Bauformen und auch fertig konfektioniert mit Kabel und wasserdichtem Gehäuse.

Der Sensor DS18B20 ist kompatibel mit allen beelogger Varianten!
Bild Bezugsquelle Preis ab Suchbegriffe* Bemerkungen
 beelogger DS18B20 eBay 1,00€ DS18B20 Bauform TO-92
 beelogger DS18b20 wasserdicht eBay 1,50€ DS18B20 mit Kabel und wasserdichtem Gehäuse

*Einkaufstipps

Beschaltung

Die fertig konfektionierten Sensoren im wasserdichten Gehäuse haben je nach Hersteller unterschiedlich farbige Leitungen.

beelogger DS18B20 Pinout

Die Beschaltung des DS18B20 ist sehr einfach. Versorgt wird der Sensor an ‘VDD’ mit einer Spannung von 3,0 bis 5,5V. ‘Data’ verbindet man mit Pin 3 des Arduinos. Fehlt noch ein Pull-Up Widerstand von 4,7K Ohm zwischen ‘VDD’ und ‘Data’ und die Verbindung von ‘GND’ mit Masse. Werden zwei Sensoren angeschlossen, beispielsweise für die Stocktemperatur und die Außentemperatur, ist die gleiche Verkabelung vorzunehmen. Ein weiterer Widerstand ist hierfür nicht notwendig. Werden weitere DS18B20 angeschlossen oder besonders lange Leitungen verwendet, kann es notwendig werden den Pull-Up Widerstand auf einen Wert bis zu 1,8 kOhm zu verringern.

beelogger DS18B20 Schaltung

Libraries

<OneWire.h> – https://github.com/PaulStoffregen/OneWire
<DallasTemperature.h> https://github.com/milesburton/Arduino-Temperature-Control-Library
Die Versionen für den beelogger sind im Library-Paket enthalten.

Test-Programmcode

beelogger DS18B20 TestDer Programmcode enthält neben einer Abfrage der angeschlossenen Sensoren eine zusätzliche Prüfung beim Auslesen den Sensoren auf mögliche Verbindungsfehler. Tritt ein Problem auf, beispielsweise durch ein loses Kabel, bekommt die entsprechende Variable für Temperatur einen vordefinierten Wert. Mit diesem Test-Programmcode wird zusätzlich eine Fehlermeldung über den seriellen Monitor ausgegeben.

Werden die Messwerte später an einen Webserver übertragen, erkennt das Server-Skript zum Speichern der Datensätze einen Fehler mit dem vordefinierten Wert und es wird für diesen Sensor kein Messwert gespeichert. Dadurch wird die grafische Darstellung, beispielsweise durch Arbeiten am Sensor, nicht beeinträchtigt.

 

 

/*
 * (C) 2018 Thorsten Gurzan - beelogger.de
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see "http://www.gnu.org/licenses/".
*/

// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de 


#define ONE_WIRE_BUS 3
#define Anzahl_Sensoren_DS18B20 2 // Anzahl der angeschlossenen Sensoren - Mögliche Werte: '0','1','2',... 

#include "OneWire.h"; 
#include "DallasTemperature.h"; 

#define DS18B20_Aufloesung 12
DeviceAddress DS18B20_Adressen;
 
OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature myDS18B20(oneWire); 
 

const float No_Val = 999.99;
float Temperatur[Anzahl_Sensoren_DS18B20];   

// Für beelogger-SMD: Aktivierung der Stromversorgung für Sensoren, Module und DS3231 
#define Power_Pin 4

 
void setup(void) {
  Serial.begin(9600);
  Serial.println("DS18B20 Test");
  Serial.println();
  digitalWrite(Power_Pin, HIGH);
  pinMode(Power_Pin, OUTPUT);
  delay(1000);
 
  Serial.print("Anzahl aktivierter Sensoren: ");
  Serial.println(Anzahl_Sensoren_DS18B20);
 
  if ((Anzahl_Sensoren_DS18B20 > 0)) {
    myDS18B20.begin();
    Serial.print("Anzahl angeschlossener Sensoren: ");
    Serial.println(myDS18B20.getDeviceCount(), DEC);
    Serial.println();
 
    for(byte i=0 ;i < myDS18B20.getDeviceCount(); i++) {
      if(myDS18B20.getAddress(DS18B20_Adressen, i)) {
        myDS18B20.setResolution(DS18B20_Adressen, DS18B20_Aufloesung);
      }
    }
  }
}


void loop(void) {
  if ((Anzahl_Sensoren_DS18B20 > 0)) {
    myDS18B20.requestTemperatures();

    for(byte i=0 ;i < Anzahl_Sensoren_DS18B20; i++) {
      if (i < myDS18B20.getDeviceCount()) {
      
        Serial.print("Sensor ");
        Serial.print(i+1);
        Serial.print(": "); 
        
        Temperatur[i] = myDS18B20.getTempCByIndex(i);
        if (Temperatur[i] == DEVICE_DISCONNECTED_C) {
      	  Temperatur[i] = No_Val;
          Serial.println("Fehler");
        }
        else {
          Serial.print(Temperatur[i]);
          Serial.println(" 'C");
        }
      }
    }
  }
  Serial.println();
  delay(1000);
}

Ausgabe des seriellen Monitors (9600 baud):

DS18B20 Test

Anzahl aktivierter Sensoren: 2
Anzahl angeschlossener Sensoren: 2

Sensor 1: 31.44
Sensor 2: 31.62
 
Sensor 1: 31.44
Sensor 2: 31.62
 
Sensor 1: 31.44
Sensor 2: 31.62

 

Die neue Version des DS18B20 Testsketches liest die Adressen der DS18B20 aus.
Damit kann bei Bedarf in den Multi-Sketchen ein Auslesen der DS18B20 über die Adressen mit der daraus vorgegebenen Reihenfolge durchgeführt werden.
Testprogrammcode herunterladen

 

Der Programmcode zum Messbetrieb für den Arduino Datenlogger mit Stockwaage für Imker ist für ATmega328 oder STM32Fxyz für unterschiedliche Konfigurationen mit bis zu vier Waagen pro System verfübgar.