Ett av de enklaste och billigaste sätten att lägga till temperaturmätning i ditt Arduino-projekt är att använda DS18B20 1-Wire Temperature Sensor. Dessa sensorer är ganska exakta och behöver inga externa komponenter för att fungera. Så med bara några få anslutningar och lite Arduino-kod kan du känna av temperaturen på nolltid!

DS18B20 1-Wire Temperature Sensor

DS18B20 är en 1-Wire interface Temperature sensor tillverkad av Dallas Semiconductor Corp. Det unika 1-Wire®-gränssnittet kräver endast en digital stift för tvåvägskommunikation med en mikrokontroller.

Sensorn finns vanligtvis i två formfaktorer. Den ena som kommer i TO-92-förpackning ser exakt ut som en vanlig transistor. Den andra i en vattentät sondform som kan vara mer användbar när du behöver mäta något långt borta, under vattnet eller under marken.

Typer av DS18B20 temperatursensor

DS18B20 temperatursensor är ganska exakt och behöver inga externa komponenter för att fungera. Den kan mäta temperaturer från -55°C till +125°C med ±0,5°C noggrannhet.

Temperatursensorns upplösning är användarkonfigurerbar till 9, 10, 11 eller 12 bitar. Standardupplösningen vid start är dock 12 bitar (dvs. 0,0625°C precision).

Sensorn kan strömförsörjas med en 3V till 5,5V strömförsörjning och förbrukar endast 1mA under aktiva temperaturkonverteringar.

Här är de fullständiga specifikationerna:

Strömförsörjning 3V till 5.5V
Strömförbrukning 1mA
Temperaturområde -55 till 125°C
Noggrannhet ±0.5°C
Upplösning 9 till 12 bitar (valbar)
Konverteringstid < 750ms

Multipla DS18B20 på en buss

En av de största fördelarna med DS18B20 är att flera DS18B20 kan samexistera på samma buss.Wire-buss. Eftersom varje DS18B20 har en unik 64-bitars seriekod inbränd på fabriken är det lättare att skilja dem från varandra.

Denna funktion kan vara en stor fördel när du vill styra många DS18B20 fördelade över ett stort område.

Om du vill veta hur man läser av temperaturen från flera DS18B20-temperatursensorer kan du kolla in den här handledningen.

Koppling av flera digitala DS18B20-temperatursensorer med Arduino

En av de största fördelarna med DS18B20 är att flera DS18B20 kan samexistera på samma 1-wire-buss. Eftersom varje DS18B20 har en unik 64-bitars…

DS18B20 Sensor Pinout

GND är en jordstift.

DQ är en 1-Wire databuss som ska anslutas till en digital stift på mikrokontrollern.

VDD-stiftet levererar ström till sensorn som kan vara mellan 3,3 och 5V.

Koppling av DS18B20-temperaturgivare till Arduino

Tillräckligt med teori, låt oss gå till praktiken! Låt oss koppla DS18B20 till Arduino.

Anlutningarna är ganska enkla. Börja med att ansluta VDD till 5V out-pinnen på Arduino och GND till jord.

Nästan ansluts den återstående digitala signalpinnen DQ till digital pin 2 på arduino. Du måste också lägga till ett 4,7k pull-up-motstånd mellan signal- och power-pinnen för att hålla dataöverföringen stabil. (Interna pull-ups på arduino fungerar inte)

Var försiktig så att du får DS18B20 på rätt sätt. Om du sätter den åt fel håll blir den varm och går sedan sönder.

Koppling av DS18B20 temperatursensor till Arduino

Om du använder den vattentäta versionen av DS18B20, anslut den röda remsan till 5V, den svarta ansluts till jord och den gula remsan är data som går till digital stift 2 på arduino. Du måste fortfarande ansluta ett 4,7K pullupmotstånd från data till 5V.

Koppling av vattentät DS18B20 temperatursensor till Arduino

Installation av bibliotek för DS18B20

Dallas 1-Wire-protokoll från Dallas är något komplext och kräver en massa kod för att analysera kommunikationen. För att dölja denna onödiga komplexitet kommer vi att installera biblioteket DallasTemperature.h så att vi kan utfärda enkla kommandon för att få temperaturmätningar från sensorn.

För att installera biblioteket navigerar du till Sketch > Include Library > Manage Libraries….Vänta på att Library Manager hämtar biblioteksindex och uppdaterar listan över installerade bibliotek.

Filtrera din sökning genom att skriva ”ds18b20”. Det bör finnas ett par poster. Leta efter DallasTemperature av Miles Burton. Klicka på den posten och välj sedan Installera.

Detta Dallas Temperature-bibliotek är ett maskinvaruspecifikt bibliotek som hanterar funktioner på lägre nivå. Det måste paras ihop med One Wire Library för att kommunicera med alla entrådiga enheter, inte bara DS18B20. Installera även detta bibliotek.

Arduinokod

Följande skiss kommer att ge dig fullständig förståelse för hur man läser av temperaturavläsningar från DS18B20 temperatursensor och kan tjäna som grund för fler praktiska experiment och projekt.

#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);}

Här är hur utmatningen ser ut i den seriella monitorn.

Kodeförklaring:

Skissen börjar med att inkludera biblioteken OneWire.h och DallasTemperature.h och deklarera Arduino-pinnen som sensorns signalpinne är ansluten till.

#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2

Nästan skapar vi ett OneWire-objekt genom att överlämna sensorns signalpinne till dess konstruktör. Med detta one-wire-objekt kan vi kommunicera med vilken one-wire-enhet som helst, inte bara med DS18B20. För att kommunicera med DS18B20-sensorn måste vi skapa ett objekt i DallasTemperature-biblioteket och överlämna referensen till one-wire-objektet som en parameter.

OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);

När ett DallasTemperature-objekt har skapats kan vi utfärda nedanstående enkla kommandon för att interagera med sensorn.

  • begin() funktionen söker efter anslutna sensorer på bussen och ställer in bitupplösningen (12 bitar) för var och en.
  • requestTemperatures() funktionen skickar ett kommando till alla sensorer på bussen för att utföra en temperaturkonvertering.
  • getTempCByIndex(deviceIndex) funktionen läser och returnerar temperaturavläsning från sensorn. deviceIndex är inget annat än sensorns plats på bussen. Om du bara använder en DS18B20 på bussen ställer du in den på 0.

Andra användbara funktioner i biblioteket DallasTemperature.h

Det finns några användbara funktioner som du kan använda med DallasTemperature-objektet. Några av dem listas nedan:

  • setResolution() funktionen ställer in upplösningen för den interna analog-till-digital-omvandlaren i DS18B20 till 9, 10, 11 eller 12 bitar, vilket motsvarar steg på 0,5°C, 0,25°C, 0,125°C respektive 0,0625°C.
  • bool getWaitForConversion() funktionen returnerar värdet på flaggan waitForConversion. Det kan vara användbart när du vill kontrollera om en temperaturkonvertering är klar.
  • setHighAlarmTemp() & setLowAlarmTemp() funktionen ställer in de interna höga & låga temperaturlarmen för en enhet i grader Celsius. Giltigt intervall är -55 till 125°C
  • bool hasAlarm() funktionen returnerar sant om enheten har ett larmtillstånd när temperaturen överskrider inställningen för hög & låg larmtemperatur.

admin

Lämna ett svar

Din e-postadress kommer inte publiceras.

lg