A DS18B20 1-Wire hőmérséklet-érzékelő használata az egyik legegyszerűbb és legolcsóbb módja annak, hogy hőmérséklet-érzékelést adjunk az Arduino projektünkhöz. Ezek az érzékelők meglehetősen pontosak, és nem igényel külső alkatrészeket a működéshez. Így néhány csatlakoztatással és néhány Arduino kóddal pillanatok alatt érzékelheti a hőmérsékletet!
DS18B20 1-Wire hőmérséklet érzékelő
Az DS18B20 1-Wire interfészes hőmérséklet érzékelő, amelyet a Dallas Semiconductor Corp. gyárt. Az egyedülálló 1-Wire® interfész csak egy digitális tűt igényel a mikrokontrollerrel való kétirányú kommunikációhoz.
Az érzékelő általában kétféle formában kapható. Az egyik, amely TO-92-es csomagolásban érkezik, pontosan úgy néz ki, mint egy közönséges tranzisztor. A másik egy vízálló szonda stílusban, amely hasznosabb lehet, ha valamit messze, víz alatt vagy a föld alatt kell mérni.
A DS18B20 hőmérsékletérzékelő meglehetősen pontos és nincs szüksége külső alkatrészekre a működéshez. A hőmérsékletet -55°C és +125°C között ±0,5°C pontossággal tudja mérni.
A hőmérsékletérzékelő felbontása a felhasználó által konfigurálható 9, 10, 11 vagy 12 bitre. Az alapértelmezett felbontás azonban bekapcsoláskor 12 bites (azaz 0,0625°C pontosságú).
Az érzékelő 3V és 5,5V közötti tápegységgel táplálható, és az aktív hőmérséklet-átalakítások során mindössze 1mA-t fogyaszt.
Itt vannak a teljes specifikációk:
Tápegység | 3V és 5.5V |
Áramfelvétel | 1mA |
Hőmérsékleti tartomány | -55 és 125°C között |
Pontosság | ±0.5°C |
felbontás | 9-12 bit (választható) |
átalakítási idő | < 750ms |
Multiple DS18B20 egyetlen buszon
A DS18B20 egyik legnagyobb előnye, hogy több DS18B20 egymás mellett létezhet ugyanazon az 1-Drótos buszon. Mivel minden DS18B20 egyedi 64 bites soros kódot égetett be gyárilag, így könnyebb megkülönböztetni őket egymástól.
Ez a funkció hatalmas előnyt jelenthet, ha sok DS18B20-at szeretne vezérelni nagy területen elosztva.
Hogy megtudja, hogyan olvassa le a hőmérsékletet több DS18B20 hőmérsékletérzékelőről, nézze meg ezt a bemutatót.
DS18B20 érzékelő pinout
GND egy földelt pin.
DQ az 1-Wire adatbusz, amelyet a mikrokontroller egy digitális pinjéhez kell csatlakoztatni.
VDD pin szolgáltatja a tápellátást az érzékelő számára, amely 3,3 és 5V között lehet.
Wiring DS18B20 Temperature Sensor to Arduino
Enough of the theory, Let’s Go Practical! Csatlakoztassuk a DS18B20-at az Arduinóhoz.
A csatlakozások meglehetősen egyszerűek. Kezdjük azzal, hogy a VDD-t az Arduino 5V-os kimeneti csapjához, a GND-t pedig a földhöz csatlakoztatjuk.
Következő lépésként csatlakoztassuk a fennmaradó digitális jelcsapot DQ az arduino 2. digitális csapjához. A 4,7k pull-up ellenállást is hozzá kell adnia a jel és a tápcsap között, hogy az adatátvitel stabil maradjon. (Az arduino belső pull-upjai nem működnek)
Vigyázzon, hogy a DS18B20 a megfelelő irányban legyen. Ha rosszul rakja be, akkor felforrósodik, majd eltörik.
Ha a DS18B20 vízálló változatát használja, a piros csíkot csatlakoztassa az 5V-hoz, a fekete a földhöz csatlakozik, a sárga csík pedig az adat, amely az arduino 2. digitális pinjére megy. Továbbra is csatlakoztatnia kell egy 4,7K pullup ellenállást az adatokról 5V-ra.
Installing Library For DS18B20
A Dallas 1-Wire protokoll kissé összetett, és egy csomó kódot igényel a kommunikáció elemzésére. Hogy elrejtsük ezt a felesleges bonyolultságot, telepíteni fogjuk a DallasTemperature.h könyvtárat, hogy egyszerű parancsokat adhassunk ki a hőmérséklet leolvasásához az érzékelőtől.
A könyvtár telepítéséhez navigáljunk a Sketch > Include Library > Manage Libraries…Várjuk meg, amíg a Library Manager letölti a könyvtárak indexét és frissíti a telepített könyvtárak listáját.
A keresést a ‘ds18b20’ beírásával szűrjük. Kell lennie néhány bejegyzésnek. Keresse meg a Miles Burton által készített DallasTemperature-t. Kattintson erre a bejegyzésre, majd válassza a Telepítés lehetőséget.
Ez a Dallas Temperature könyvtár egy hardver-specifikus könyvtár, amely alacsonyabb szintű funkciókat kezel. A One Wire Libraryvel kell párosítani ahhoz, hogy bármilyen egyvezetékes eszközzel kommunikálni tudjon, nem csak a DS18B20-zal. Telepítse ezt a könyvtárat is.
Arduino kód
Az alábbi vázlat segítségével teljes mértékben megértheti, hogyan olvassa le a DS18B20 hőmérséklet-érzékelőről a hőmérsékleti értékeket, és alapul szolgálhat további gyakorlati kísérletekhez és projektekhez.
#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);}
Íme, így néz ki a kimenet a soros monitoron.
Kódmagyarázat:
A szkeccs a OneWire.h és a DallasTemperature.h könyvtárak bevonásával és az Arduino pin deklarálásával kezdődik, amelyre az érzékelő jelzőtűje csatlakozik.
#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2
A következőkben létrehozunk egy OneWire objektumot az érzékelő jelzőtűjének átadásával annak konstruktorába. Ez az egyvezetékes objektum lehetővé teszi számunkra, hogy bármilyen egyvezetékes eszközzel kommunikáljunk, nem csak a DS18B20-zal. A DS18B20 érzékelővel való kommunikációhoz a DallasTemperature könyvtár objektumát kell létrehoznunk, és paraméterként át kell adnunk a one-wire objektum hivatkozását.
OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);
Mihelyt létrehoztuk a DallasTemperature objektumot, az alábbi egyszerű parancsokat adhatjuk ki az érzékelővel való interakcióhoz.
-
begin()
függvény megkeresi a csatlakoztatott érzékelőket a buszon, és mindegyikhez beállítja a bitfelbontást (12 bit). -
requestTemperatures()
függvény parancsot küld a buszon lévő összes érzékelőnek, hogy végezzen hőmérséklet-átalakítást. -
getTempCByIndex(deviceIndex)
függvény kiolvassa és visszaadja a hőmérséklet-értéket az érzékelőből. AdeviceIndex
nem más, mint az érzékelő helye a buszon. Ha csak egy DS18B20-at használ a buszon, állítsa 0-ra.
Más hasznos függvények a DallasTemperature.h könyvtárban
A DallasTemperature objektummal használható néhány hasznos függvény. Ezek közül néhányat az alábbiakban felsorolunk:
-
setResolution()
függvény a DS18B20 belső analóg-digitális átalakítójának felbontását 9, 10, 11 vagy 12 bitre állítja, ami 0,5°C, 0,25°C, 0,125°C és 0,0625°C lépésköznek felel meg. -
bool getWaitForConversion()
függvény visszaadja a waitForConversion flag értékét. Hasznos lehet, ha ellenőrizni szeretné, hogy egy hőmérséklet-átalakítás befejeződött-e. -
setHighAlarmTemp()
&setLowAlarmTemp()
függvény beállítja az eszköz belső magas & alacsony hőmérséklet riasztását Celsius fokban. Az érvényes tartomány -55 és 125°C között van -
bool hasAlarm()
A függvény igazat ad vissza, ha a készülék riasztási állapotba kerül, amikor a hőmérséklet meghaladja a magas & alacsony riasztási hőmérséklet beállítását.