Trusted Supplier
DS18B20 er den mest udbredte digitale temperaturføler til hobby- og automationsprojekter, og med god grund: den måler fra -55 °C til +125 °C, den skal ikke kalibreres, og den kræver kun én dataledning uanset hvor mange følere du sætter på. Hver chip har sit eget serienummer fra fabrikken, så ti følere kan dele samme ben på mikrocontrolleren.
Denne side samler det, vi oftest får spørgsmål om — hvilken variant du skal vælge, hvorfor den viser -127 °C, hvor langt kablet må være, og hvordan du kender en original fra en kopi.
| Skal den… | Vælg |
| sidde på et print eller i et breadboard | Den bare chip i TO-92-hus |
| måle i væske, jord eller udendørs | Vandtæt føler i rustfrit stålrør |
| ligge mod en overflade, et rør eller en køleflade | Flad overfladeføler med silikonekabel |
| sidde tæt på elektronikken | 2 meter |
| nå fra en beholder ind til styringen | 5 meter |
| nå ud i en brønd, en tank eller et fyrrum | 10 meter — husk 2,2 kΩ pull-up |
| loddes som overflademontage | SMD-udgaven |
| bruges i et Shelly-anlæg | Shelly-udgaven med stik |
Alle varianter bruger den samme chip og den samme kode. Forskellen er kapslingen og kablet.
Køber du flere, falder prisen. Mængderabatten står på hver vare, og da flere følere kan dele den samme dataledning, er det sjældent meget dyrere at måle fem steder end ét.
Trusted Supplier
Trusted Supplier
SHELLY
Trusted Supplier
Trusted Supplier
DFRobot
DFRobot
DFRobot
DFRobot
1-Wire-bussen har brug for en modstand mellem dataledningen og plus. Uden den kan mikrocontrolleren ikke trække linjen op igen efter en bit, og du får -127 °C. Det er langt den hyppigste årsag til, at en DS18B20 ikke virker.
Værdien afhænger af kablets længde, fordi ledningens kapacitet bremser signalet:
| Samlet kabellængde | Pull-up |
| under 5 m | 4,7 kΩ |
| 5 til 30 m | 2,2 kΩ |
| 30 til 100 m | 1,0 kΩ |
Bemærk at det er den samlede længde på bussen. Sidder tre følere à 5 meter på samme ben, er bussen 15 meter lang, og så skal du ned på 2,2 kΩ — også selvom hver enkelt føler er kort nok til 4,7 kΩ.
Det er her DS18B20 for alvor adskiller sig fra en almindelig analog føler. Hver chip har et unikt 64-bit serienummer brændt ind fra fabrikken, så mikrocontrolleren kan tale med dem én ad gangen over den samme ledning. Du bruger stadig kun én pull-up-modstand i alt.
Sådan finder du adresserne på de følere, der sidder på bussen:
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(2);
DallasTemperature foelere(&oneWire);
void setup() {
Serial.begin(9600);
foelere.begin();
int antal = foelere.getDeviceCount();
Serial.print("Fandt ");
Serial.print(antal);
Serial.println(" foeler(e)");
DeviceAddress adresse;
for (int i = 0; i < antal; i++) {
if (foelere.getAddress(adresse, i)) {
Serial.print("Foeler ");
Serial.print(i);
Serial.print(": ");
for (uint8_t b = 0; b < 8; b++) {
if (adresse[b] < 16) Serial.print("0");
Serial.print(adresse[b], HEX);
if (b < 7) Serial.print("-");
}
Serial.println();
}
}
}
void loop() {}
Skriv adresserne ned. Når du kender dem, kan du spørge en bestemt føler frem for at gætte på rækkefølgen — den ændrer sig nemlig, hvis du tilføjer eller fjerner en føler:
DeviceAddress fremloeb = { 0x28, 0xFF, 0x12, 0x34, 0x56, 0x00, 0x00, 0xAB };
float t = foelere.getTempC(fremloeb);
DS18B20 kan køre på to ledninger i stedet for tre. VDD forbindes da til GND, og chippen henter strøm fra dataledningen og gemmer den i en lille intern kondensator mellem målingerne.
Det lyder praktisk, og på korte forbindelser virker det. Men under selve målingen trækker chippen mere strøm, end en lang eller belastet bus kan levere gennem en almindelig pull-up-modstand, og så får du 85 °C eller ingenting. Flere følere på parasitisk forsyning gør det værre.
Vores anbefaling: brug tre ledninger, når du kan. Parasitisk forsyning er til de tilfælde, hvor kablet allerede ligger, og der kun er to ledere.
Databladet lover ±0,5 °C fra -10 °C til +85 °C. Uden for det område vokser usikkerheden, og ved -55 °C kan den være flere grader.
Opløsningen kan indstilles fra 9 til 12 bit. Ved 12 bit er trinnet 0,0625 °C og målingen tager op til 750 ms. Ved 9 bit er trinnet 0,5 °C og målingen tager under 100 ms. Skal du læse mange følere hurtigt, er 10 eller 11 bit ofte et fornuftigt kompromis.
Husk, at nøjagtigheden sjældent er det, der begrænser en måling i praksis. Hvor føleren sidder betyder mere: en føler, der rører et koldt rør eller sidder i direkte sol, giver en forkert temperatur, uanset hvor god chippen er.
DS18B20 blev udviklet af Dallas Semiconductor, siden Maxim, nu Analog Devices. Chippen er så udbredt, at der findes et stort antal kopier på markedet — og de fleste DS18B20-følere i hobbysegmentet, uanset hvor de købes, er ikke originale Maxim-chips.
Det er ikke nødvendigvis et problem. Mange kopier måler udmærket til et akvarium, et drivhus eller et varmeanlæg. Men de kan afvige mere end de lovede ±0,5 °C, de kan støje mere, og nogle fejler i parasitisk drift. Betyder den halve grad noget for dig, er det værd at kende sin chip.
En original Maxim-chip i TO-92 er laserskåret, ikke trykt, og har fire linjer — for eksempel:
DALLAS
18B20
1932C4
+786AB
På bagsiden sidder typisk et P i fordybningen, på nogle THAI og et bogstav. Fra 2020 findes der også originaler helt uden mærke på bagsiden.
Tegn på en kopi: topmærket er trykt i stedet for laseret, bagsiden er uden mærke, eller der står et andet firmanavn — GXCAS, UMW, XINBOLE, HXY, MSKSEMI og flere. Men bemærk: flere kopifamilier bærer et falsk DALLAS-mærke. Mærket alene beviser ingenting.
Begge bruger kun almindelige kommandoer og er derfor ufarlige:
Ingen af testene er nok alene — der findes kopifamilier, som klarer den ene og falder på den anden. Kører du dem begge, fanger du langt de fleste.
Chris Petrich har lavet det grundigste offentlige arbejde på området, med testkode og en oversigt over de kendte kopifamilier. Det ligger frit på GitHub.
En advarsel derfra er værd at gentage: brug ikke udokumenterede kommandoer til at teste en føler. Nogle af dem kan ødelægge chippen permanent.
De tre forveksles konstant, og de er ikke ens:
DallasTemperature-biblioteket håndterer forskellen automatisk, så koden er den samme. Men bestiller du en DS18B20 og får en DS18S20, bliver opløsningsindstillinger ignoreret.
| Du ser | Årsag |
| -127 °C | Føleren bliver ikke fundet. Tjek pull-up-modstanden først, derefter pin, polaritet og forbindelser. |
| 85 °C | Chippens opstartsværdi. Målingen blev ikke færdig — for svag forsyning, parasitisk drift, eller der blev læst for hurtigt. Står byte 6 i scratchpad på 0x0C, er det opstartsværdien og ikke en rigtig måling. |
| 0 °C konstant | Dataledningen hænger lavt. Ofte en kortslutning mod stel eller en vendt komponent. |
| Springende værdier | For høj pull-up på en lang bus, stjernekobling, eller støj fra stærkstrøm. |
| Virker med 2, fejler med 4 følere | Bussens samlede kapacitet er vokset. Sænk pull-up-modstanden, og læg bussen som kæde. |
| Chippen bliver varm | Sluk straks. Den sidder med stor sandsynlighed omvendt. |
Skal føleren ind i Home Assistant, er ESPHome på en ESP32 eller ESP8266 den nemmeste vej. Konfigurationen fylder få linjer:
dallas:
- pin: GPIO2
sensor:
- platform: dallas
address: 0x28FF123456000AB
name: "Fremloeb"
resolution: 12
ESPHome skriver adresserne på de fundne følere i loggen ved opstart, så du behøver ikke finde dem med Arduino-koden ovenfor.
På en Raspberry Pi kan føleren læses direkte gennem kernens 1-Wire-understøttelse uden mikrocontroller. Dataledningen sættes på GPIO4, og følerne dukker op som filer under /sys/bus/w1/devices/.
Du skal have en modstand på 4,7 kΩ til korte busser. Se også alle temperatursensorer, vejr-, fugt- og tryksensorer og termostater.
Står du med en konkret installation — en lang bus, en føler der skal i en tank, eller en måling der driver — så skriv til info@let-elektronik.dk. Vi er selv elektrikere, og vi svarer selv.