En af de nemmeste og billigste måder at tilføje temperaturmåling i dit Arduino-projekt er ved at bruge DS18B20 1-tråds temperatursensor. Disse sensorer er ret præcise og har ikke brug for eksterne komponenter for at fungere. Så med blot nogle få forbindelser og noget Arduino-kode kan du registrere temperaturen på ingen tid!

DS18B20 1-Wire Temperatursensor

DS18B20 er 1-Wire interface Temperatursensor fremstillet af Dallas Semiconductor Corp. Den unikke 1-Wire®-grænseflade kræver kun én digital pin til tovejskommunikation med en mikrocontroller.

Sensoren leveres normalt i to formfaktorer. Den ene, der leveres i TO-92-pakning, ligner nøjagtigt en almindelig transistor. Den anden i en vandtæt sondeform, som kan være mere nyttig, når du skal måle noget langt væk, under vandet eller under jorden.

Typer af DS18B20-temperatursensor

DS18B20-temperatursensor er ret præcis og har ikke brug for eksterne komponenter for at fungere. Den kan måle temperaturer fra -55 °C til +125 °C med en nøjagtighed på ±0,5 °C.

Temperatursensorens opløsning kan konfigureres af brugeren til 9, 10, 11 eller 12 bit. Standardopløsningen ved opstart er dog 12 bit (dvs. 0,0625°C præcision).

Sensoren kan forsynes med en strømforsyning på 3V til 5,5V og forbruger kun 1mA under aktive temperaturkonverteringer.

Her er de komplette specifikationer:

Spændingsforsyning 3V til 5.5V
Støjforbrug 1mA
Temperaturområde -55 til 125°C
Nøjagtighed ±0.5°C
Opløsning 9 til 12 bit (kan vælges)
Konverteringstid < 750ms

Multiple DS18B20 On Single Bus

En af de største fordele ved DS18B20 er, at flere DS18B20’er kan sameksistere på samme 1-Wire bus. Da hver DS18B20 har en unik 64-bit seriel kode brændt ind på fabrikken, er det lettere at skelne dem fra hinanden.

Denne funktion kan være en stor fordel, når du ønsker at styre mange DS18B20’ere fordelt over et stort område.

For at vide, hvordan du læser temperaturen fra flere DS18B20-temperatursensorer, skal du se denne vejledning.

Interfacing Multiple DS18B20 Digital Temperature Sensors with Arduino

En af de største fordele ved DS18B20 er, at flere DS18B20 kan eksistere side om side på den samme 1-Wire-bus. Da hver DS18B20 har en unik 64-bit…

DS18B20 Sensor Pinout

GND er en jordstift.

DQ er 1-Wire Data Bus skal forbindes til en digital pin på mikrocontroller.

VDD pin leverer strøm til sensoren, som kan være mellem 3,3 til 5V.

Kobling af DS18B20 temperatursensor til Arduino

Godt nok af teorien, lad os gå i praksis! Lad os tilslutte DS18B20 til Arduino.

Forbindelserne er ret enkle. Start med at tilslutte VDD til 5V out-pinden på Arduino og GND til jord.

Næst tilslutter du den resterende digitale signalpind DQ til digitalpin 2 på arduino. Du skal også tilføje en pull-up-modstand på 4,7k mellem signalet og power-pinden for at holde dataoverførslen stabil. (interne pull-ups på arduino virker ikke)

Vær forsigtig med at få DS18B20 den rigtige vej rundt. Hvis du sætter den forkert, bliver den varm og går derefter i stykker.

Kobling af DS18B20-temperatursensor til Arduino

Hvis du bruger den vandtætte version af DS18B20, skal du forbinde rød stribe til 5V, sort forbindes til jord og gul stribe er data, der går til digital pin 2 på arduino. Du skal stadig tilslutte en 4,7K pullup-modstand fra data til 5V.

Kobling af vandtæt DS18B20-temperatursensor til Arduino

Installation af bibliotek til DS18B20

Dallas 1-Wire-protokollen er noget kompleks, og kræver en masse kode for at analysere kommunikationen. For at skjule denne unødvendige kompleksitet vil vi installere DallasTemperature.h-biblioteket, så vi kan udstede enkle kommandoer for at få temperaturmålinger fra sensoren.

For at installere biblioteket skal du navigere til Sketch > Include Library > Manage Libraries…Vent på, at Library Manager downloader biblioteksindekset og opdaterer listen over installerede biblioteker.

Filtrer din søgning ved at skrive ‘ds18b20’. Der skulle være et par poster. Kig efter DallasTemperature af Miles Burton. Klik på denne post, og vælg derefter Install.

Dette Dallas Temperature-bibliotek er et hardwarespecifikt bibliotek, som håndterer funktioner på lavere niveau. Det skal parres med One Wire Library for at kunne kommunikere med enhver one-wire-enhed, ikke kun DS18B20. Installer også dette bibliotek.

Arduino kode

Den følgende skitse vil give dig fuld forståelse for, hvordan du kan aflæse temperaturmålinger fra DS18B20 temperatursensor og kan tjene som grundlag for flere praktiske eksperimenter og projekter.

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

Her er, hvordan output ser ud i den serielle skærm.

Kodeforklaring:

Skitsen starter med at inkludere bibliotekerne OneWire.h og DallasTemperature.h og deklarere den Arduino-pin, som sensorens signalpin er forbundet til.

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

Næst skaber vi et OneWire-objekt ved at overdrage sensorens signalpin til dets konstruktør. Dette one-wire-objekt giver os mulighed for at kommunikere med enhver one-wire-enhed, ikke kun DS18B20. For at kunne kommunikere med DS18B20-sensoren skal vi oprette et objekt fra DallasTemperature-biblioteket og videregive referencen til one-wire-objektet som en parameter.

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

Når et DallasTemperature-objekt er oprettet, kan vi udstede nedenstående enkle kommandoer for at interagere med sensoren.

  • begin() funktion søger efter tilsluttede sensorer på bussen og indstiller bitopløsning (12 bit) for hver enkelt.
  • requestTemperatures() funktion sender kommando til alle sensorer på bussen for at udføre en temperaturkonvertering.
  • getTempCByIndex(deviceIndex) funktion læser og returnerer temperaturaflæsning fra sensoren. deviceIndex er intet andet end placeringen af sensoren på bussen. Hvis du kun bruger én DS18B20 på bussen, skal du indstille den til 0.

Andre nyttige funktioner i DallasTemperature.h-biblioteket

Der er et par nyttige funktioner, du kan bruge med DallasTemperature-objektet. Nogle få af dem er anført nedenfor:

  • setResolution() funktionen indstiller opløsningen af den interne analog-til-digital-konverter i DS18B20 til 9, 10, 11 eller 12-bits, svarende til trin på henholdsvis 0,5 °C, 0,25 °C, 0,125 °C og 0,0625 °C.
  • bool getWaitForConversion() funktionen returnerer værdien af waitForConversion-flaget. Den kan være nyttig, når du vil kontrollere, om en temperaturkonvertering er afsluttet.
  • setHighAlarmTemp() setHighAlarmTemp() & setLowAlarmTemp() funktionen indstiller de interne høje & lave temperaturalarmer for en enhed i grader Celsius. Det gyldige område er -55 til 125°C
  • bool hasAlarm() funktionen returnerer sandt, hvis enheden har en alarmtilstand, når temperaturen overstiger indstillingen for høj & lav alarmtemperatur.

admin

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

lg