DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Az Arduino, ESP32, ESP8266 és más fejlesztési kártyákkal kompatibilis hőmérséklet-érzékelők széles választéka létezik. Így nehéz lehet kiválasztani a legmegfelelőbb érzékelőt a projekthez. Ebben a cikkben 6 széles körben használt hőmérséklet-érzékelőt hasonlítunk össze: DHT11, DHT22, LM35, DS18B20, BME280 és BMP180.

DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180 hőmérséklet-érzékelők

Az érzékelőket a kommunikációs protokoll, a hőmérsékleti tartomány, a pontosság, a könnyű kezelhetőség és még sok más tekintetében hasonlítjuk össze.

Egy egyszerű kísérletet is lefuttatunk, amelyben az összes hőmérséklet-érzékelővel ugyanabban a környezetben mértük a hőmérsékletet az idő múlásával. Ezzel a kísérlettel láthattuk, hogyan reagálnak az érzékelők a hőmérsékletváltozásra. Ezt a kísérletet körülbelül 36 órán keresztül futtattuk, és a cikk későbbi részében megmutatjuk az eredményeket.

Elolvasásra ajánlott: 9 Arduino-kompatibilis hőmérséklet-érzékelő az elektronikai projektjeidhez

Hőmérsékletérzékelők összehasonlítása: DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Az érzékelők gyors összehasonlításához összeállítottuk az alábbi táblázatot, amely a hőmérséklet-érzékelő kiválasztásakor a legfontosabb információkat mutatja, nevezetesen: kommunikációs protokoll, tápfeszültség, hőmérsékleti tartomány és pontosság.

Figyelem: a táblázat vízszintesen gördül asztali számítógépen, táblagépen és mobilon egyaránt.

Sensor DHT11 DHT22 (AM2302) LM35 DS18B20 BME280 BMP180
Mérések Hőmérséklet
Páratartalom
Hőmérséklet
Páratartalom
Hőmérséklet Páratartalom Hőmérséklet Hőmérséklet
Páratartalom
Nyomás
Hőmérséklet
Nyomás
Kommunikációs
protokoll
Egyes…vezetékes Egyvezetékes Analog Egyvezetékes I2C
SPI
I2C
Supply
voltage
3 to 5.5V DC 3 – 6V DC 4 – 30 V DC 3 – 5,5V DC 1,7 – 3,6V (a chiphez) 3,3 – 5V a kártyához 1,8 – 3,6V (a chiphez) 3.3 és 5V között a lapka számára
Hőmérséklet
tartomány
0 és 50ºC között -40 és 80ºC között -55 és 150ºC között -55-125ºC -40-85ºC 0-65ºC
Pontosság +/- 2ºC (0-50ºC-on) +/- 0.5ºC (-40 és 80ºC között) +/-0,5ºC (25ºC között) +/-0,5ºC (-10 és 85ºC között) +/-0,5ºC (25ºC között) +/-0.5ºC (25ºC-on)
Támogatás
(Arduino IDE)
Adafruit DHT Library
Adafruit Unified Sensor Library
Adafruit DHT Library
Adafruit Unified Sensor Library
analogRead() DallasTemperature
OneWire
Adafruit BME280 library
Adafruit Unified Sensor Library
Adafruit BME085
Adafruit Unified Sensor Library
Support
(MicroPython)
dht modul (szerepel a MicroPython firmware-ben) dht modul (szerepel a MicroPython firmware-ben) from machine import ADC
ADC().read
ds18b20 modul (szerepel a MicroPython firmware-ben) BME280 Adafruit Library BMP180 modul
Hol lehet megvásárolni? Áruk ellenőrzése Áruk ellenőrzése Áruk ellenőrzése Áruk ellenőrzése Áruk ellenőrzése
Áruk ellenőrzése (vízálló)
Áruk ellenőrzése Áruk ellenőrzése

DHT11 vs DHT22 (AM2302)

DHT11 vs DHT22 hőmérséklet- és páratartalom érzékelő

A DHT11 és a DHT22 (AM2302) digitális hőmérséklet- és páratartalom érzékelők, amelyek a hőmérsékletet és a páratartalmat mérik. Nagyon hasonlóan néznek ki és ugyanúgy működnek, de eltérő specifikációkkal rendelkeznek.

Mindkét érzékelőt 3,3V vagy 5V-os tápfeszültséggel lehet táplálni. Így könnyen használhatja őket az Arduino vagy ESP projektjeiben.

A DHT22 érzékelő jobb felbontással és szélesebb hőmérséklet- és páratartalom mérési tartományban rendelkezik. Azonban egy kicsit drágább, és csak 2 másodperces időközönként kérhet leolvasást.

A DHT11 valamivel olcsóbb, kisebb a tartománya, és kevésbé pontos. Viszont másodpercenként kaphatsz szenzoros leolvasásokat.

A különbségek ellenére hasonlóan működnek, és ugyanazt a kódot használhatod a hőmérséklet és a páratartalom leolvasására. Csak ki kell választania a kódban, hogy milyen típusú érzékelőt használ.

Szóval, ha hajlandó egy dollárral többet költeni, akkor a DHT22-t ajánljuk a DHT11 helyett.

A DHT11 és a DHT22 érzékelők használatáról több útmutatót is közzéteszünk:

  • ESP32 (Arduino IDE) a DHT11/DHT22 hőmérséklet- és páratartalom-érzékelővel
  • ESP8266 (Arduino IDE) DHT11/DHT22 hőmérséklet- és páratartalom-érzékelővel
  • ESP8266 (Arduino IDE) DHT11/DHT22 hőmérséklet- és páratartalom web Server
  • Arduino a DHT11/DHT22 páratartalom és hőmérséklet érzékelővel
  • ESP32/ESP8266 (MicroPython) a DHT11/DHT22 Web Serverrel

LM35, LM335 és LM34

LM35 LM335 és LM34 analóg hőmérsékletérzékelő

Az LM35, LM335 és LM34 lineáris hőmérsékletérzékelők, amelyek a hőmérséklet értékével arányos feszültséget adnak ki. Az LM35 Celsius fokban, az LM335 Kelvinben, az LM34 pedig Fahrenheitben kalibrálva kerül forgalomba. Tehát attól függően, hogy milyen hőmérsékleti egységeket fog használni a projektjében, az egyik érzékelő praktikusabb lehet, mint a másik.

Az LM335 helyett az LM35 vagy LM34 használatát javasoljuk, mert ha az LM335 méréseiből nagy számot vonunk le a hőmérséklet Kelvinből történő átalakításához, az veszélyeztetheti az eredmények pontosságát.

Az adatlap szerint az LM35 és LM34 érzékelők működéséhez nagyon kevés áram szükséges, körülbelül 60uA. Ez nagyon alacsony önmelegedést eredményez (kb. 0,08ºC nyugodt levegőben), ami azt jelenti, hogy a hőmérsékletméréseket nem befolyásolja maga az érzékelő.

A hőmérséklet leolvasásához ezekről az érzékelőkről csak az érzékelő kimeneti feszültségét kell leolvasni egy analóg pin segítségével. Ha Arduino-t használ, csak az analógRead() függvényt kell használnia, és két tizedesvesszővel kapja meg a hőmérséklet leolvasását.

Szóval, ha olcsó és könnyen használható érzékelőre van szüksége a hőmérséklet megfigyeléséhez, az LM35 jó választás lehet. Továbbá, mivel nagyon kevés energiát fogyaszt, nagyszerű a hordozható projektekhez, ahol alacsony energiafogyasztásra van szükség.

Tanulja meg, hogyan használja az LM35, LM335 és LM34 hőmérsékletérzékelőket az Arduino-val:

  • Útmutató az LM35, LM335 és LM34 hőmérsékletérzékelőkhöz az Arduino-val

DS18B20 hőmérsékletérzékelő

DS18B20 hőmérsékletérzékelő

A DS18B20 hőmérsékletérzékelő egy egyvezetékes digitális hőmérsékletérzékelő. Ez azt jelenti, hogy csak egy adatvezetékre (és GND-re) van szüksége a mikrokontrollerekkel való kommunikációhoz.

Az áramellátás történhet külső tápegységről, vagy az adatvezetékből is nyerhet áramot (úgynevezett “parazita üzemmód”), így nincs szükség külső tápegységre.

Minden DS18B20 hőmérsékletérzékelő egyedi 64 bites soros kóddal rendelkezik. Ez lehetővé teszi, hogy több érzékelőt csatlakoztasson ugyanarra az adatvezetékre. Így egyetlen GPIO segítségével több érzékelőtől is lekérheti a hőmérsékletet.

Kiegészítésképpen a hőmérséklet-érzékelő felbontása 9, 10, 11 vagy 12 bitre állítható, ami 0,5°C, 0,25°C, 0,125°C és 0,0625°C lépéseknek felel meg. Az alapértelmezett felbontás bekapcsoláskor 12 bites.

A DS18B20 hőmérséklet-érzékelő vízálló változatban is kapható, amely ideális kültéri projektekhez vagy folyadékhőmérséklet méréséhez.

DS18B20 vízálló hőmérsékletérzékelő

A DS18B20 hőmérsékletérzékelő ESP32-vel, ESP8266-tal és Arduino-val való használatának megtanulásához az Arduino IDE vagy MicroPython segítségével követheti útmutatónkat:

  • ESP32 (Arduino IDE) DS18B20 hőmérsékletérzékelő (egy, több, webszerver)
  • ESP8266 (Arduino IDE) DS18B20 hőmérsékletérzékelő (egy, több, Web Server)
  • ESP32 és ESP8266 (MicroPython) DS18B20 hőmérsékletérzékelővel
  • Arduino DS18B20 hőmérsékletérzékelővel

BME280 vs BMP180

BME280 vs BMP180 Barometrikus érzékelő:

A BME280 és a BMP180 barometrikus érzékelők, ami azt jelenti, hogy a légköri nyomást olvassák. A BME280 hőmérséklet- és páratartalom-érzékelővel is rendelkezik, a BMP180 pedig hőmérsékletérzékelővel. Mivel a nyomás a magassággal változik, ezek az érzékelők a magasság becslésére is használhatók.

A hőmérséklet-tartomány tekintetében a BME280 szélesebb mérési tartományt kínál: -40 és 85ºC között, míg a BMP180 csak 0 és 65ºC között mér. Ne feledje, hogy a BME280 modul egy kicsit önmelegszik, így a hőmérsékletmérések 1 ou 2 fokkal a valós hőmérsékletérték felett lehetnek.

A BME280 I2C vagy SPI kommunikációs protokollt használhat, míg a BMP180 csak I2C kommunikációt.

A BME280 érzékelő drágább, de több funkcióval rendelkezik. Például csak ezzel az érzékelővel időjárás-állomás projektet építhet. De ha nem érdekel a nyomás vagy a páratartalom mérése, akkor egy olcsóbb hőmérséklet-érzékelőt is beszerezhetsz.

Az Adafruit könyvtáraknak köszönhetően nagyon egyszerű ezeket az érzékelőket az Arduino, ESP8266 és ESP32 rendszerekkel összekapcsolni.

Az útmutatók segítségével megtanulhatja, hogyan használja ezeket az érzékelőket:

  • BMP180:
    • Arduino a BMP180 barometrikus érzékelővel
    • ESP32 (Arduino IDE) a BMP180 barometrikus érzékelővel
  • BME280:
    • ESP32 (Arduino IDE) BME280 érzékelővel (nyomás, hőmérséklet, páratartalom)
    • ESP8266 (Arduino IDE) BME280 (nyomás, hőmérséklet, páratartalom)
    • Arduino BME280 érzékelővel(nyomás, hőmérséklet, páratartalom)

Más projektjeink is vannak a BME280-zal, amelyek tetszhetnek:

  • Low Power Weather Station Datalogger using ESP8266 and BME280 with MicroPython
  • ESP32 Web Server with BME280 – Mini Weather Station
  • ESP32/ESP8266 Insert Data into MySQL Database using PHP and Arduino IDE

Testing All Temperature Sensors

This experiment logged temperature readings from different temperature sensors over time in the same conditions.

Az összes hőmérsékletérzékelő tesztelése DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduino-val

A következő hőmérsékletérzékelőket kötöttük össze egy Arduino Mega-val:

  • DHT11
  • DHT22
  • LM35
  • 2x DS18B20 ugyanazon az adatbuszon
  • BME280
  • BMP180

Az adatokat microSD kártyára rögzítettük egy microSD kártyamodul segítségével. A kísérlet körülbelül 36 órán keresztül futott, és a hőmérsékletméréseket 5 percenként naplóztuk.

A hőmérséklet-érzékelők adattüskéit az Arduino Mega következő tűire kábeleztük:

  • DHT11: Pin 11
  • DHT22: Pin 12
  • DS18B20: Pin 14
  • LM35: Pin A0
  • BME280: szoftveres SPI ezeken a tűkön: Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180: (SDA) és Pin 21 (CSL)

A microSD kártyamodul hardveres SPI-n keresztül lett csatlakoztatva: Pin 51 (MOSI), Pin 50 (MISO), Pin 52 (SCK), Pin 53 (CS).

Ez a kód fut az Arduino Mega-ban.

/* * Rui Santos * Complete Project Details https://RandomNerdTutorials.com */#include "DHT.h"#include <OneWire.h>#include <DallasTemperature.h>#include <Wire.h>#include <SPI.h>#include <Adafruit_Sensor.h>#include <Adafruit_BME280.h>#include <Wire.h>#include <Adafruit_BMP085.h>#include <SD.h> // for the SD cardconst int DHT11sensorPin = 11; const int DHT22sensorPin = 12; DHT dht11(DHT11sensorPin, DHT11);DHT dht22(DHT22sensorPin, DHT22);float DHT11temperature;float DHT22temperature;const int DS18B20sensorPin = 14;OneWire oneWire(DS18B20sensorPin);DallasTemperature ds18b20(&oneWire);float DS18B20temperature1;float DS18B20temperature2;const int BME_SCK = 6;const int BME_MISO = 4;const int BME_MOSI = 7;const int BME_CS = 5;Adafruit_BME280 bme280(BME_CS, BME_MOSI, BME_MISO, BME_SCK);Adafruit_BMP085 bmp180; const int LM35sensorPin = A0; float LM35sensorValue;float LM35voltageOut;float LM35temperature;const int chipSelectSDCard = 53; File myFile;void setup() { Serial.begin(9600); dht11.begin(); delay(2000); dht22.begin(); ds18b20.begin(); bme280.begin(); bmp180.begin(); pinMode(LM35sensorPin, INPUT); if(!SD.begin(chipSelectSDCard)) { Serial.println("SD card initialization failed!"); return; } Serial.println("SD card initialization done."); myFile=SD.open("DATA.txt", FILE_WRITE); if (myFile) { Serial.println("File opened ok"); // print the headings for our data myFile.println("DHT11,DHT22,DS18B20-1,DS18B20-2,BME280,BMP180,LM35"); } myFile.close(); }void loop() { /*-------------------------------------------------------*/ //DHT11 DHT11temperature = dht11.readTemperature(); if (isnan(DHT11temperature)) { Serial.println("Failed to read from DHT11 sensor!"); return; } Serial.print("Temperature DHT11(ºC): "); Serial.println(DHT11temperature); /*-------------------------------------------------------*/ //DHT22 DHT22temperature = dht22.readTemperature(); if (isnan(DHT22temperature)) { Serial.println("Failed to read from DHT22 sensor!"); return; } Serial.print("Temperature DHT22(ºC): "); Serial.println(DHT22temperature);/*-------------------------------------------------*/ //DS18B20 ds18b20.requestTemperatures(); DS18B20temperature1 = ds18b20.getTempCByIndex(0); DS18B20temperature2 = ds18b20.getTempCByIndex(1); Serial.print("Temperature DS18B20-1(ºC): "); Serial.println(DS18B20temperature1); Serial.print("Temperature DS18B20-2(ºC): "); Serial.println(DS18B20temperature2);/*-------------------------------------------------*///BME280 Serial.print("Temperature BME280(ºC): "); Serial.println(bme280.readTemperature());/*-------------------------------------------------*///BMP180 Serial.print("Temperature BMP180(ºC): "); Serial.println(bmp180.readTemperature());/*-------------------------------------------------*/ //LM35 SENSOR LM35sensorValue = analogRead(LM35sensorPin); LM35voltageOut = (LM35sensorValue * 5000) / 1024; // calculate temperature for LM35 (LM35DZ) LM35temperature = LM35voltageOut / 10; Serial.print("Temperature LM35(ºC): "); Serial.println(LM35temperature); Serial.println(""); myFile = SD.open("DATA.txt", FILE_WRITE); if (myFile) { Serial.println("File open with success"); myFile.print(DHT11temperature); myFile.print(","); myFile.print(DHT22temperature); myFile.print(","); myFile.print(DS18B20temperature1); myFile.print(","); myFile.print(DS18B20temperature2); myFile.print(","); myFile.print(bme280.readTemperature()); myFile.print(","); myFile.print(bmp180.readTemperature()); myFile.print(","); myFile.print(LM35temperature); myFile.println(","); } myFile.close(); delay(6000);}

Nézd meg a nyers kódot

Figyelem: a kód lefordításához és futtatásához az Arduino IDE-ben telepíteni kell a cikk elején található összehasonlító táblázatban említett összes érzékelőkönyvtárat: Hőmérsékleti leolvasások összehasonlítása

Körülbelül 36 óra elteltével eltávolítottuk a microSD-kártyát, és az eredményeket egy táblázatba másoltuk. Az összes leolvasást ábrázoltuk, hogy jobban össze tudjuk hasonlítani a különböző hőmérséklet-érzékelők méréseit.

Eredmények Celsius fokban Hőmérsékletérzékelők DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduino-val
Hőmérséklet Celsius fokban (ºC)
Eredmények Fahrenheit fokban. Hőmérsékletérzékelők DHT11 DHT22 LM35 DS18B20 BME280 BMP180 Arduino-val
Hőmérséklet Fahrenheit fokban (ºF)

Ez a diagram nem tartalmaz kontrollcsoportot (nem kalibrált hőmérsékletérzékelőt használtunk), de van elképzelésünk arról, hogyan viselkednek ezek az érzékelők.

Ha jobban megnézzük a diagramokat, a BME280 valamivel magasabb értékeket mért, mint a többi hőmérsékletérzékelő. Ez a viselkedés normális, és ez le van írva az adatlapon. A modul egy kicsit önmelegszik, és a hőmérsékletmérések 1 ou 2 fokkal a valós hőmérsékleti érték felett lehetnek.

A BME280 azonban az a hőmérséklet-érzékelő is, amely stabilabb hőmérséklet-méréseket adott, sok ingadozás nélkül a mérések között. Ez az érzékelő felbontásával függ össze. Ez akár 0,01 ºC-os változásokat is képes érzékelni.

A DS18B20 hőmérséklet-érzékelők esetében a leolvasások között némi oszcillációt láthatunk, és az is észrevehető, hogy a felbontás nem olyan jó, mint a BME280 esetében. Ezenkívül a DS18B20 hőmérséklet-érzékelő volt az egyetlen, amely a kísérlet során néhány “nullás” leolvasást adott. Két DS18B20 hőmérsékletérzékelőt mértünk ugyanazon az adatsoron, és az egyik érzékelő a kísérlet során (36 óra alatt) 6 alkalommal nem olvasta le a hőmérsékletet.

A DHT22 és a BMP180 nagyon hasonlóan viselkedik, kevés oszcillációval. A DHT11 nem tudta érzékelni a kis hőmérsékletváltozásokat, mivel a felbontása 1ºC.

Végül az LM35 hőmérsékletérzékelő 24ºC és 26ºC közötti hőmérsékletváltozásokat érzékelt, de sok oszcillációval a mérések között.

A különböző hőmérsékletérzékelőket összehasonlító diagram jól mutatja, hogy az egyes érzékelők miben különböznek egymástól. Így könnyebb megérteni, hogyan működnek, és hogy alkalmasak lesznek-e a megépíteni kívánt projektekhez.

Befoglalva

Ebben a cikkben több hőmérséklet-érzékelőt hasonlítottunk össze, amelyeket az ESP32, ESP8266, Arduino és más fejlesztői kártyákkal használhatsz. Ezek az érzékelők mind hőmérsékletet mérnek, de másképp viselkednek, ha ugyanabban a környezetben, ugyanabban az időben teszteljük őket.

Reméljük, hogy hasznosnak találta ezt a cikket, és segít kiválasztani a legjobb hőmérséklet-érzékelőt a projekt követelményeihez.

Az olvasás is érdekelheti:

  • 9 Arduino-kompatibilis hőmérséklet-érzékelő az elektronikai projektjeihez
  • ESP32/ESP8266 Az érzékelő leolvasásainak ábrázolása valós idejű grafikonokban
  • Iratkozzon be elektronikai tanfolyamainkra és e-könyvünkre

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.