Een van de eenvoudigste en goedkoopste manieren om temperatuursensoren aan uw Arduino-project toe te voegen, is het gebruik van de DS18B20 1-draads temperatuursensor. Deze sensoren zijn vrij nauwkeurig en hebben geen externe componenten nodig om te werken. Dus, met slechts een paar aansluitingen en wat Arduino code zult u temperatuur voelen in een mum van tijd!
DS18B20 1-Wire Temperatuursensor
DS18B20 is 1-Wire interface Temperatuursensor vervaardigd door Dallas Semiconductor Corp. De unieke 1-Wire® Interface vereist slechts één digitale speld voor tweerichtingscommunicatie met een microcontroller.
De sensor komt gewoonlijk in twee vormfactoren. Een die wordt geleverd in TO-92 pakket ziet er precies uit als een gewone transistor. Andere in een waterdichte sondestijl die nuttiger kan zijn wanneer u iets ver weg, onder water of onder de grond moet meten.
DS18B20-temperatuursensor is vrij nauwkeurig en vergt geen externe componenten om te werken. Hij kan temperaturen meten van -55°C tot +125°C met een nauwkeurigheid van ±0,5°C.
De resolutie van de temperatuursensor kan door de gebruiker worden ingesteld op 9, 10, 11, of 12 bits. De standaard resolutie bij het opstarten is echter 12-bits (d.w.z. 0.0625°C nauwkeurigheid).
De sensor kan worden gevoed met een 3V tot 5.5V voeding en verbruikt slechts 1mA tijdens actieve temperatuur conversies.
Hierbij de volledige specificaties:
Voeding | 3V tot 5.5V |
Stroomverbruik | 1mA |
Temperatuurbereik | -55 tot 125°C |
Nauwkeurigheid | ±0.5°C |
Resolutie | 9 tot 12 bit (selecteerbaar) |
Conversietijd | < 750ms |
Meerdere DS18B20 op één bus
Eén van de grootste voordelen van DS18B20 is dat meerdere DS18B20’s naast elkaar kunnen bestaan op dezelfde 1-draadbus. Aangezien elke DS18B20 een unieke 64-bit seriële code heeft ingebrand in de fabriek, is het gemakkelijker om ze van elkaar te onderscheiden.
Deze eigenschap kan een reusachtig voordeel zijn wanneer u veel DS18B20s wilt controleren die over een groot gebied worden verdeeld.
Om te weten hoe u de temperatuur van meerdere DS18B20-temperatuursensoren kunt aflezen, kunt u deze tutorial bekijken.
DS18B20 Sensor Pinout
GND is een aardingspen.
DQ is 1-Wire Data Bus moet verbonden worden met een digitale pin op de microcontroller.
VDD pin levert stroom voor de sensor die tussen 3.3 en 5V kan liggen.
Bedrading DS18B20 Temperatuur Sensor aan Arduino
Genoeg theorie, laten we praktisch gaan! Laten we de DS18B20 aansluiten op de Arduino.
De aansluitingen zijn vrij eenvoudig. Begin door VDD met 5V uit speld op Arduino en GND met ground.
Volgende te verbinden sluit de resterende digitale signaalspeld DQ aan digitale speld 2 op arduino aan. U zult ook de 4.7k pull-up-weerstand tussen het signaal en de machtsspeld moeten toevoegen om de gegevensoverdracht stabiel te houden. (Interne pull-ups op de arduino werkt niet)
Wees voorzichtig om de DS18B20 de juiste kant op te krijgen. Als u hem verkeerd om legt, wordt hij heet en breekt hij af.
Als u de waterdichte versie van de DS18B20 gebruikt, sluit u de rode strook aan op 5V, de zwarte op massa en de gele strook is de data die naar digitale pen 2 op Arduino gaat. U moet nog steeds een 4.7K pullup-weerstand aansluiten van de data naar 5V.
Bibliotheek installeren voor DS18B20
Het Dallas 1-draadsprotocol is enigszins complex en vereist een hoop code om de communicatie te ontleden. Om deze onnodige complexiteit te verbergen, zullen we de DallasTemperature.h bibliotheek installeren, zodat we eenvoudige commando’s kunnen geven om temperatuurmetingen van de sensor te krijgen.
Om de bibliotheek te installeren, navigeer naar de Sketch > Include Library > Manage Libraries… Wacht tot Library Manager de bibliotheken index heeft gedownload en de lijst van geïnstalleerde bibliotheken heeft bijgewerkt.
Filter je zoekopdracht door ‘ds18b20’ in te typen. Er zouden een paar items moeten zijn. Zoek naar DallasTemperature van Miles Burton. Klik daarop en kies Install.
Deze Dallas Temperature-bibliotheek is een hardwarespecifieke bibliotheek die functies op lager niveau afhandelt. Deze moet worden gekoppeld aan de One Wire Library om te kunnen communiceren met alle eendraadstoestellen, niet alleen de DS18B20. Installeer ook deze bibliotheek.
Arduino Code
De volgende schets geeft u een volledig inzicht in hoe u temperatuurmetingen van de DS18B20 temperatuursensor kunt lezen en kan dienen als basis voor meer praktische experimenten en projecten.
#include <OneWire.h>#include <DallasTemperature.h>// Data wire is plugged into digital pin 2 on the Arduino#define ONE_WIRE_BUS 2// Setup a oneWire instance to communicate with any OneWire deviceOneWire oneWire(ONE_WIRE_BUS);// Pass oneWire reference to DallasTemperature libraryDallasTemperature sensors(&oneWire);void setup(void){ sensors.begin();// Start up the library Serial.begin(9600);}void loop(void){ // Send the command to get temperatures sensors.requestTemperatures(); //print the temperature in Celsius Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print((char)176);//shows degrees character Serial.print("C | "); //print the temperature in Fahrenheit Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0); Serial.print((char)176);//shows degrees character Serial.println("F"); delay(500);}
Hier ziet de output er uit in de seriële monitor.
Code Uitleg:
De sketch begint met het opnemen van OneWire.h en DallasTemperature.h bibliotheken en het declareren van de Arduino pin waarop de sensor’s signaal pin is aangesloten.
#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2
Daarna maken we een one-wire object door de sensor’s signaal pin door te geven aan zijn constructor. Met dit eendraad-object kunnen we communiceren met elk eendraad-apparaat, niet alleen met de DS18B20. Om met de DS18B20-sensor te communiceren, moeten we een object van de DallasTemperature-bibliotheek maken en de referentie van het eendraadsobject als parameter doorgeven.
OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);
Als een DallasTemperature-object is aangemaakt, kunnen we de volgende eenvoudige commando’s geven om met de sensor te communiceren.
-
begin()
functie zoekt naar aangesloten sensoren op de bus en stelt bit resolutie (12 bits) in voor elk. -
requestTemperatures()
functie stuurt commando voor alle sensoren op de bus om een temperatuur conversie uit te voeren. -
getTempCByIndex(deviceIndex)
functie leest en retourneert temperatuur uitlezing van de sensor.deviceIndex
is niets anders dan de locatie van de sensor op de bus. Als u slechts één DS18B20 op de bus gebruikt, stel deze dan in op 0.
Andere nuttige functies in de bibliotheek DallasTemperature.h
Er zijn een paar nuttige functies die u kunt gebruiken met het DallasTemperature object. Enkele van hen zijn hieronder opgesomd:
-
setResolution()
functie stelt de resolutie van de interne Analoog-Digitaal omzetter van de DS18B20 in op 9, 10, 11, of 12-bits, wat overeenkomt met stappen van respectievelijk 0,5°C, 0,25°C, 0,125°C, en 0,0625°C. -
bool getWaitForConversion()
functie retourneert de waarde van de waitForConversion vlag. Het kan nuttig zijn wanneer u wilt controleren of een temperatuur conversie is voltooid. -
setHighAlarmTemp()
&setLowAlarmTemp()
functie stelt de interne hoge & lage temperatuur alarmen voor een apparaat in graden Celsius. Geldig bereik is -55 tot 125°C -
bool hasAlarm()
functie geeft true terug als het apparaat een alarm conditie heeft wanneer de temperatuur de hoge & lage alarm temperatuur instelling overschrijdt.