El DS18B20-sensor heeft aan populariteit gewonnen dankzij de betrouwbaarheid en veelzijdigheid voor temperatuurmeting. Het wordt veel gebruikt in elektronicaprojecten met microcontrollers zoals Arduino, PIC of ESP8266 vanwege het gebruiksgemak en de mogelijkheid om meerdere sensoren op dezelfde bus aan te sluiten, waardoor het een ideale optie is voor zowel amateurs als professionals.
Een van de belangrijkste voordelen van deze sensor is dat hij slechts één kabel gebruikt voor datacommunicatie via het protocol 1-Wire, wat de integratie ervan in een breed scala aan projecten vergemakkelijkt. Bovendien kan de DS18B20 in maximaal twee verschillende vermogensmodi werken, waardoor hij nog flexibeler is. In dit artikel leggen we uitgebreid uit hoe het werkt, hoe je meerdere sensoren kunt aansluiten en hoe je je temperatuurmetingen kunt optimaliseren.
DS18B20-functies
De DS18B20 is vervaardigd door Maxim Integrated, onder andere en wordt gepresenteerd in verschillende inkapselingen, waarbij het formaat is TO-92 (vergelijkbaar met die van veel transistors) een van de meest voorkomende. Bovendien is hij ook verkrijgbaar in afgedichte en waterdichte versies, waardoor hij ideaal is voor het meten van temperaturen in ruwe of vochtige omgevingen.
Een van de meest opvallende kenmerken van de DS18B20 zijn:
- Het temperatuurbereik dat het kan meten, omvat -55°C tot 125°C, waardoor het geschikt is voor industriële en huishoudelijke toepassingen.
- Su programmeerbare resolutie kan variëren tussen 9 en 12 bits, waardoor nauwkeurige aanpassing mogelijk is op basis van de behoeften van elk project.
- Elke sensor heeft een uniek adres 64 beetjes, waardoor de identificatie van meerdere sensoren die op dezelfde bus zijn aangesloten, wordt vergemakkelijkt.
DS18B20 Vermogensmodi
De sensor kan in twee vermogensmodi werken, wat flexibiliteit biedt bij de integratie in verschillende projecten, elk met zijn eigen voordelen.
Stroom via datapin (Parasite Power)
Deze modus is ideaal wanneer de ruimte beperkt is of wanneer verbindingen over lange afstanden nodig zijn. De DS18B20 haalt stroom rechtstreeks van de datapin wanneer deze hoog is en slaat de stroom op in een kleine condensator voor wanneer de datalijn laag is. Dit type dieet wordt genoemd Parasitaire kracht.
Het is echter belangrijk op te merken dat het voor een correcte werking noodzakelijk is om de pinnen aan te sluiten GND y VDD aan wal. Bovendien is het raadzaam om een transistor op te nemen MOSFET wat helpt in situaties waarin temperatuurconversies meer stroom nodig hebben.
Stroom via een externe bron
De meest gebruikelijke en aanbevolen manier om de DS18B20 van stroom te voorzien is via een externe bron die op de pin is aangesloten VDD. Deze methode garandeert een stabiele spanning onafhankelijk van dataverkeer op de 1-Wire bus, wat voordelig is voor projecten die constante precisie vereisen.
Hoe de DS18B20 met Arduino te gebruiken
Om met deze sensor op het Arduino-platform te werken, is het noodzakelijk om twee fundamentele bibliotheken te gebruiken: OneWire y DallasTemperatuur. Deze bibliotheken vergemakkelijken de communicatie en zorgen ervoor dat metingen en configuraties eenvoudig kunnen worden uitgevoerd.
OneWire-bibliotheek: Maakt communicatie mogelijk via het 1-Wire-protocol. Het kan worden gedownload van de GitHub-opslagplaats.
Dallas BookstoreTemperatuur: Het bevat de functies die nodig zijn om de temperatuur af te lezen en de sensor te configureren. Download het van deze link.
Nadat u beide bibliotheken heeft geïnstalleerd, kunt u zonder complicaties met de sensor aan de slag. Hieronder leggen we enkele voorbeelden uit hoe je de temperatuur kunt uitlezen en hoe je met meerdere sensoren kunt werken.
Voorbeeld 1: Temperatuurmeting met één enkele sensor
Om een temperatuurmeting uit te voeren met een enkele DS18B20 aangesloten op een Arduino, omvat het basiscircuit eenvoudigweg het aansluiten van de datapin van de sensor op de digitale pin2 van de Arduino, samen met een weerstand Optrekken van 4.7kΩ.
Dit is de basiscode om de sensortemperatuur te lezen:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); Serial.print("Temperatura= "); Serial.print(tempC); Serial.println(" °C"); delay(1000); }
De code is vrij eenvoudig. Er zijn slechts een paar regels in de hoofdlus nodig om de temperatuur op te vragen en af te lezen, waardoor het zeer eenvoudig te implementeren en aan te passen is voor verschillende toepassingen.
Voorbeeld 2: Meerdere sensoren op verschillende pinnen gebruiken
Bij het werken met meer dan één DS18B20 zijn er twee manieren om de sensoren aan te sluiten. De eerste is door aan elke sensor een andere Arduino digitale pin toe te wijzen. In dit geval is voor elke sensor een pull-up-weerstand van 4.7 kΩ nodig.
Hier laten we u een voorbeeld zien van hoe u kunt werken met twee sensoren die op verschillende pinnen zijn aangesloten:
#include <OneWire.h> #include <DallasTemperature.h> OneWire ds1(2); OneWire ds2(3); DallasTemperature sensors1(&ds1); DallasTemperature sensors2(&ds2); void setup() { Serial.begin(9600); sensors1.begin(); sensors2.begin(); } void loop() { sensors1.requestTemperatures(); float temp1 = sensors1.getTempCByIndex(0); sensors2.requestTemperatures(); float temp2 = sensors2.getTempCByIndex(0); Serial.print("Temperatura 1 = "); Serial.print(temp1); Serial.print(" °C Temperatura 2 = "); Serial.println(temp2); delay(1000); }
Voorbeeld 3: Meerdere sensoren aangesloten op één pin
De andere mogelijkheid om meerdere DS18B20's in een project aan te sluiten, is om dit met één enkele pin en dezelfde 1-Wire-bus voor allemaal te doen. In dit geval moet elke sensor zijn eigen sensor hebben uniek identificatienummer, die in de fabriek is toegewezen. Hier leggen we uit hoe u deze adressen kunt verkrijgen met behulp van de volgende code:
#include <OneWire.h> OneWire ds(2); void setup(void) { Serial.begin(9600); } void loop(void) { byte address[8]; if (!ds.search(address)) { Serial.println("No more addresses."); ds.reset_search(); delay(250); return; } Serial.print("Address: "); for (int i = 0; i < 8; i++) { Serial.print(address[i], HEX); if (i < 7) Serial.print(", "); } Serial.println(); delay(250); }
Zodra u de adressen van alle sensoren heeft, kunt u de specifieke sensor uitlezen aan de hand van zijn unieke adres. De volgende code laat zien hoe u dit moet doen:
#include <DallasTemperature.h> OneWire ds(2); DallasTemperature sensors(&ds); DeviceAddress sensor1 = {0x28, 0xFF, 0xCA, 0x4A, 0x5, 0x16, 0x3, 0xBD}; DeviceAddress sensor2 = {0x28, 0xFF, 0x89, 0x3A, 0x1, 0x16, 0x4, 0xAF}; void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temp1 = sensors.getTempC(sensor1); float temp2 = sensors.getTempC(sensor2); Serial.print("Temp sensor 1: "); Serial.println(temp1); Serial.print("Temp sensor 2: "); Serial.println(temp2); delay(1000); }
De voordelen van deze methode zijn dat je pinnen bespaart op de Arduino en dat je veel sensoren parallel kunt aansluiten op dezelfde databus.
Met deze voorbeelden kunt u de veelzijdigheid en kracht van de DS18B20-sensor zien. Het is heel eenvoudig te implementeren en als u meerdere sensoren moet aansluiten, heeft u de volledige flexibiliteit om dit op verschillende manieren te doen. De DS18B20 is een van de meest betrouwbare sensoren voor het meten van temperatuur en dankzij het lage stroomverbruik en de eenvoudige programmering is hij perfect voor alle soorten projecten.
De DS18B20-sensor is niet alleen eenvoudig te gebruiken met Arduino, maar kan ook worden gebruikt in een breed scala aan industriële en residentiële toepassingen, zoals temperatuurbewaking in airconditioningsystemen, machines of zelfs kassen.