In diesem Video möchten wir Ihnen den DS18B20 Temperatursensor vorstellen. Wir bieten den Sensor in drei Versionen an: als einzelner Sensor zum Einlöten, als Sensor auf einer Platine und als geschützter Sensor mit Kabel. Im Rahmen des Videos werden die technischen Spezifikationen beider Varianten vorgestellt. Zusätzlich zeigen wir mehrere Beispielschaltungen, um darzustellen, wie die Sensoren eingesetzt werden können und wie die Verkabelung funktioniert.
! Achtung: Wenn das Video bei Ihnen nicht angezeigt wird, sollten Sie Ihre Cookie Einstellungen überprüfen. Sie müssen alle Cookies akzeptieren, damit das Video sichtbar ist!
Hier finden Sie die vorgestellten Sensoren:
DS18B20 digitaler Temperatursensor
DS18B20 digitaler Edelstahl Temperatursensor mit 1M Kabel
DS18B20 digitaler Edelstahl Temperatursensor mit 3m Kabel
Verdrahtung DS18B20 unverlötet:
Code DS18B20 unverlötet:
/* ___ _____ ____ ___ / /__ / / __ \___ / (_) _____ _______ __ / /| | / / ______/ / / / _ \/ / / | / / _ \/ ___/ / / / / ___ |/ /_/_____/ /_/ / __/ / /| |/ / __/ / / /_/ / /_/ |_/____/ /_____/\___/_/_/ |___/\___/_/ \__, / /____/ Produkt, Datenblatt und Pinout unter: https://www.az-delivery.de/ Projekt: DS18B20 Schaltung Datum: 02/2022 */ #include <OneWire.h> #include <DallasTemperature.h> const int tempSensor=26; /* Falls beim Kompelieren ein Fehler 'void directModeInput(uint32_t)' kommt eine frühere Version von OneWire installieren */ OneWire oneWire(tempSensor); DallasTemperature sensors(&oneWire); //Display #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); display1.begin(SSD1306_SWITCHCAPVCC, 0x3C); delay(100); sensors.begin(); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); float tempF = sensors.getTempFByIndex(0); Serial.print(tempC); Serial.println("ºC"); Serial.print(tempF); Serial.println("ºF"); display1.clearDisplay(); display1.setTextSize(1); display1.setTextColor(WHITE); display1.setCursor(15, 10); display1.println("DS18B20 Sensor"); display1.setCursor(15, 25); display1.println("Temp: "+String(tempC)+" C"); display1.setCursor(15, 40); display1.println("Temp: "+String(tempF)+" F"); display1.drawRect(0,0,128,64,SSD1306_WHITE); display1.display(); delay(2000); }
Verdrahtung drei DS18B20 unverlötet:
Code drei DS18B20 unverlötet:
/* ___ _____ ____ ___ / /__ / / __ \___ / (_) _____ _______ __ / /| | / / ______/ / / / _ \/ / / | / / _ \/ ___/ / / / / ___ |/ /_/_____/ /_/ / __/ / /| |/ / __/ / / /_/ / /_/ |_/____/ /_____/\___/_/_/ |___/\___/_/ \__, / /____/ Produkt, Datenblatt und Pinout unter: https://www.az-delivery.de/ Projekt: 3x DS18B20 Schaltung Datum: 02/2022 */ #include <OneWire.h> #include <DallasTemperature.h> #define TEMPERATURE_PRECISION 12 const int tempSensor=26; /* Falls beim Kompelieren ein Fehler 'void directModeInput(uint32_t)' kommt eine frühere Version von OneWire installieren */ OneWire oneWire(tempSensor); DallasTemperature sensors(&oneWire); DeviceAddress one, two, three; float tempC1, tempC2, tempC3; //Display #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void getSensorResolution(){ sensors.setResolution(one, TEMPERATURE_PRECISION); sensors.setResolution(two, TEMPERATURE_PRECISION); sensors.setResolution(three, TEMPERATURE_PRECISION); Serial.println(""); Serial.print("Device 0 Resolution: "); Serial.print(sensors.getResolution(one), DEC); Serial.println(); Serial.print("Device 1 Resolution: "); Serial.print(sensors.getResolution(two), DEC); Serial.println(); Serial.print("Device 2 Resolution: "); Serial.print(sensors.getResolution(three), DEC); Serial.println(); } void getSensorAdresses(){ if(!sensors.getAddress(one, 0)) { Serial.println("Unable to find address for Device 0"); } if(!sensors.getAddress(two, 1)) { Serial.println("Unable to find address for Device 1"); } if(!sensors.getAddress(three, 2)) { Serial.println("Unable to find address for Device 2"); } Serial.print("Device 0 Address: "); printAddress(one); Serial.println(); Serial.print("Device 1 Address: "); printAddress(two); Serial.println(); Serial.print("Device 2 Address: "); printAddress(three); } void printAddress(DeviceAddress deviceAddress) { for(uint8_t i = 0; i < 8; i++) { if(deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } } void printResolution(DeviceAddress deviceAddress) { Serial.print("Resolution: "); Serial.println(sensors.getResolution(deviceAddress)); } float printData(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.print("Temp: "); Serial.print(tempC); Serial.print(" C"); Serial.print(" | Sensoradresse: "); printAddress(deviceAddress); Serial.println(); return tempC; } void setup() { Serial.begin(115200); display1.begin(SSD1306_SWITCHCAPVCC, 0x3C); delay(100); Serial.println("3xDS18B20 auf einem Pin auswerten."); sensors.begin(); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" gefunden."); Serial.print("Parasite power ist: "); if(sensors.isParasitePowerMode()) { Serial.println("ON"); } else { Serial.println("OFF"); } getSensorAdresses(); getSensorResolution(); } void loop() { Serial.print("Request..."); sensors.requestTemperatures(); Serial.println("fertig"); tempC1 = printData(one); tempC2 = printData(two); tempC3 = printData(three); delay(1000); display1.clearDisplay(); display1.setTextSize(1); display1.setTextColor(WHITE); display1.setCursor(15, 10); display1.println("Sensor1: "+String(tempC1)+" C"); display1.setCursor(15, 25); display1.println("Sensor2: "+String(tempC2)+" C"); display1.setCursor(15, 40); display1.println("Sensor3: "+String(tempC3)+" C"); display1.drawRect(0,0,128,64,SSD1306_WHITE); display1.display(); delay(2000); }