DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Existuje široká škála teplotních senzorů kompatibilních s Arduinem, ESP32, ESP8266 a dalšími vývojovými deskami. Může být tedy obtížné vybrat nejvhodnější senzor pro váš projekt. V tomto článku porovnáme 6 široce používaných snímačů teploty: DHT11, DHT22, LM35, DS18B20, BME280 a BMP180.

Snímače teploty DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180

Srovnáme snímače, pokud jde o komunikační protokol, rozsah teploty, přesnost, snadnost použití a mnoho dalšího.

Provádíme také jednoduchý experiment, při kterém jsme měřili teplotu ve stejném prostředí pomocí všech teplotních čidel v průběhu času. Pomocí tohoto experimentu jsme mohli zjistit, jak čidla reagují na změny teploty. Tento experiment jsme prováděli přibližně 36 hodin a jeho výsledky vám ukážeme později v tomto článku.

Doporučená četba: 9 teplotních čidel kompatibilních s Arduinem pro vaše projekty elektroniky

Srovnání teplotních čidel:

Poznámka: tabulka se posouvá vodorovně jak na stolním počítači, tak na tabletu a mobilu.

Pro rychlé porovnání čidel jsme sestavili následující tabulku, ve které jsou uvedeny nejdůležitější informace při výběru teplotního čidla, a to: komunikační protokol, napájecí napětí, teplotní rozsah a přesnost.

Senzor DHT11 DHT22 (AM2302) LM35 DS18B20 BME280 BMP180
Měření Temperatura
Vlhkost
Temperatura
Vlhkost
Temperatura Temperatura Teplota Temperatura
Vlhkost
Tlak
Temperatura
Tlak
Komunikační
protokol
Jedinečný-drátový Jednodrátový Analogový Jednodrátový I2C
SPI
I2C
Napájení
napětí
3 až 5.5 V DC 3 až 6 V DC 4 až 30 V DC 3 až 5,5 V DC 1,7 až 3,6 V (pro čip) 3,3 až 5 V pro desku 1,8 až 3,6 V (pro čip) 3.3 až 5V pro desku
Teplotní rozsah 0 až 50ºC -40 až 80ºC -55 až 150ºC -55 až 125 °C -40 až 85 °C 0 až 65 °C
Přesnost +/- 2 °C (při 0 až 50 °C) +/- 0.5ºC (při -40 až 80ºC) +/-0,5ºC (při 25ºC) +/-0,5ºC (při -10 až 85ºC) +/-0,5ºC (při 25ºC) +/-0.5ºC (při 25ºC)
Podpora
(Arduino IDE)
Knihovna Adafruit DHT
Knihovna 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)
modul dht (součástí firmwaru MicroPython) modul dht (součástí firmwaru MicroPython) from machine import ADC
ADC().read
modul ds18b20 (součástí firmwaru MicroPython) knihovna BME280 Adafruit modul BMP180
Kde koupit? Zkontrolujte ceny Zkontrolujte ceny Zkontrolujte ceny Zkontrolujte ceny
Zkontrolujte ceny (vodotěsné)
Zkontrolujte ceny Zkontrolujte ceny

DHT11 vs DHT22 (AM2302)

Snímač teploty a vlhkosti DHT11 vs DHT22

DHT11 a DHT22 (AM2302) jsou digitální snímače teploty, které měří teplotu a vlhkost. Vypadají velmi podobně a fungují stejně, ale mají odlišné specifikace.

Obě čidla mohou být napájena buď napětím 3,3 V, nebo 5 V. Snímač je možné napájet pouze z elektrické sítě. Můžete je tedy snadno použít ve svých projektech Arduino nebo ESP.

Senzor DHT22 má lepší rozlišení a širší rozsah měření teploty a vlhkosti. Je však o něco dražší a můžete si vyžádat měření pouze s intervalem 2 s.

Snímač DHT11 je o něco levnější, má menší rozsah a je méně přesný. Můžete však získávat údaje z čidel každou sekundu.

Přes jejich rozdíly pracují podobně a ke snímání teploty a vlhkosti můžete použít stejný kód. Jen musíte v kódu vybrat typ senzoru, který používáte.

Jestliže jste tedy ochotni utratit nějaký ten dolar navíc, doporučujeme DHT22 místo DHT11.

Máme několik návodů, jak používat snímače DHT11 a DHT22:

  • ESP32 (Arduino IDE) s čidlem teploty a vlhkosti DHT11/DHT22
  • ESP8266 (Arduino IDE) DHT11/DHT22 Teplotní a vlhkostní web Server
  • Arduino se senzorem vlhkosti a teploty DHT11/DHT22
  • ESP32/ESP8266 (MicroPython) s webovým serverem DHT11/DHT22

LM35, LM335 a LM34

LM35 LM335 a LM34 Analogový snímač teploty

LM35, LM335 a LM34 jsou lineární snímače teploty, jejichž výstupní napětí je úměrné hodnotě teploty. LM35 se dodává kalibrovaný ve stupních Celsia, LM335 v Kelvinech a LM34 ve Fahrenheitech. Takže v závislosti na jednotkách teploty, které budete ve svém projektu používat, může být jeden z těchto snímačů praktičtější než druhý.

Doporučujeme použít LM35 nebo LM34 místo LM335, protože odečítání velkého čísla od naměřených hodnot LM335 pro převod teploty z Kelvina může ohrozit přesnost výsledků.

Podle datasheetu potřebují snímače LM35 a LM34 k provozu velmi malý proud, přibližně 60uA. To má za následek velmi nízké vlastní zahřívání (asi 0,08 ºC v klidném vzduchu), což znamená, že měření teploty nebude ovlivněno samotným čidlem.

K odečtení teploty z těchto čidel stačí přečíst výstupní napětí čidla pomocí analogového vývodu. Pokud používáte Arduino, stačí použít funkci analogRead() a získáte údaje o teplotě se dvěma desetinnými místy.

Pokud tedy potřebujete levný a snadno použitelný senzor pro sledování teploty, může být LM35 dobrou volbou. Také proto, že spotřebovává velmi málo energie, je skvělý pro přenosné projekty, kde je vyžadována nízká spotřeba energie.

Přečtěte si, jak používat teplotní čidla LM35, LM335 a LM34 s Arduinem:

  • Průvodce pro teplotní čidla LM35, LM335 a LM34 s Arduinem

Teplotní čidlo DS18B20

Teplotní čidlo DS18B20

Teplotní čidlo DS18B20 je jednovodičové digitální teplotní čidlo. To znamená, že ke komunikaci s mikrokontroléry vyžaduje pouze jednu datovou linku (a GND).

Může být napájen externím zdrojem nebo může čerpat energii z datové linky (tzv. „parazitní režim“), čímž odpadá potřeba externího zdroje.

Každý teplotní senzor DS18B20 má jedinečný 64bitový sériový kód. To umožňuje připojit více snímačů ke stejnému datovému vodiči. Pomocí jediného GPIO tak můžete získat údaje o teplotě z více snímačů.

Rozlišení teplotního čidla lze navíc nastavit na 9, 10, 11 nebo 12 bitů, což odpovídá přírůstkům 0,5 °C, 0,25 °C, 0,125 °C a 0,0625 °C v tomto pořadí. Výchozí rozlišení při zapnutí je 12 bitů.

Snímač teploty DS18B20 je k dispozici také ve vodotěsném provedení, které je ideální pro venkovní projekty nebo pro měření teploty kapalin.

Vodotěsný teplotní senzor DS18B20

Podle našich návodů se můžete naučit používat teplotní senzor DS18B20 s ESP32, ESP8266 a Arduino pomocí prostředí Arduino IDE nebo MicroPython:

  • ESP32 (Arduino IDE) Senzor teploty DS18B20 (jednoduchý, vícenásobný, webový server)
  • ESP8266 (Arduino IDE) Senzor teploty DS18B20 (jednoduchý, vícenásobný, Web Server)
  • ESP32 a ESP8266 (MicroPython) s teplotním čidlem DS18B20
  • Arduino s teplotním čidlem DS18B20

BME280 vs BMP180

BME280 vs BMP180 Barometrický senzor: BME280 a BMP180 jsou barometrické senzory, což znamená, že snímají atmosférický tlak. Model BME280 je navíc vybaven čidlem teploty a vlhkosti a model BMP180 čidlem teploty. Protože se tlak mění s nadmořskou výškou, lze tyto snímače použít také k odhadu nadmořské výšky.

Pokud jde o rozsah měření teploty, má BME280 širší rozsah měření: -40 až 85 ºC, zatímco BMP180 měří pouze od 0 do 65 ºC. Měli byste mít na paměti, že modul BME280 se trochu zahřívá sám, takže naměřená teplota může být o 1 ou 2 stupně vyšší než skutečná hodnota teploty.

Modul BME280 může používat komunikační protokol I2C nebo SPI, zatímco modul BMP180 může používat pouze komunikaci I2C.

Snímač BME280 je dražší, ale má více funkcí. Můžete například vytvořit projekt meteorologické stanice pouze s tímto senzorem. Pokud vás ale nezajímá měření tlaku nebo vlhkosti, můžete si pořídit levnější teplotní senzor.

Propojení těchto senzorů se systémy Arduino, ESP8266 a ESP32 je díky knihovnám Adafruit velmi snadné.

K tomu, jak tyto senzory používat, můžete využít naše návody:

  • BMP180:
    • Arduino s barometrickým senzorem BMP180
    • ESP32 (Arduino IDE) s barometrickým senzorem BMP180
  • BME280:
    • ESP32 (Arduino IDE) se senzorem BME280 (tlak, teplota, vlhkost)
    • ESP8266 (Arduino IDE) s BME280 (tlak, teplota, vlhkost)
    • Arduino se senzorem BME280(tlak, teplota, vlhkost)

Máme také další projekty s BME280, které by se vám mohly líbit:

  • Meteorologická stanice s nízkou spotřebou dat pomocí ESP8266 a BME280 s MicroPythonem
  • ESP32 Web Server s BME280 – Mini meteorologická stanice
  • ESP32/ESP8266 Vkládání dat do databáze MySQL pomocí PHP a Arduino IDE

Testování všech teplotních čidel

Tento experiment zaznamenává hodnoty teploty z různých teplotních čidel v průběhu času za stejných podmínek.

Testování všech teplotních čidel DHT11 DHT22 LM35 DS18B20 BME280 BMP180 s Arduinem

K Arduinu Mega jsme připojili všechna následující teplotní čidla:

  • DHT11
  • DHT22
  • LM35
  • 2x DS18B20 ve stejné datové sběrnici
  • BME280
  • BMP180

Data jsme zaznamenávali na kartu microSD pomocí modulu karty microSD. Experiment probíhal přibližně 36 hodin a naměřené hodnoty teploty byly zaznamenávány každých 5 minut.

Připojili jsme datové piny teplotních čidel k následujícím pinům na Arduino Mega:

  • DHT11: Pin 11
  • DHT22: Pin 12
  • DS18B20: Pin 14
  • LM35: Pin A0
  • BME280: softwarové SPI na těchto pinech: Pin 4 (MISO), Pin 5 (CS), Pin 6 (SCK), Pin 7 (MOSI)
  • BMP180: (SDA) a Pin 21 (CSL)

Modul karty microSD byl připojen pomocí hardwarového SPI:

Toto je kód spuštěný v Arduino Mega.

/* * 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);}

Zobrazit surový kód

Poznámka: abyste mohli tento kód zkompilovat a spustit, musíte si do prostředí Arduino IDE nainstalovat všechny knihovny senzorů uvedené ve srovnávací tabulce na začátku tohoto článku.

Výsledky: Po přibližně 36 hodinách jsme vyndali kartu microSD a zkopírovali výsledky do tabulky. Všechny naměřené hodnoty jsme vynesli do grafu, abychom mohli lépe porovnat měření z různých teplotních čidel.

Výsledky ve stupních Celsia Teplotní čidla DHT11 DHT22 LM35 DS18B20 BME280 BMP180 s Arduinem
Teplota ve stupních Celsia (ºC)
Výsledky ve stupních Fahrenheita. Teplotní čidla DHT11 DHT22 LM35 DS18B20 BME280 BMP180 s Arduinem
Teplota ve stupních Fahrenheita (ºF)

Tento graf nemá kontrolní skupinu (nepoužili jsme kalibrované teplotní čidlo), ale máme představu o tom, jak se tyto snímače chovají.

Pokud se na grafy podíváte blíže, zjistíte, že BME280 naměřil o něco vyšší hodnoty než ostatní teplotní čidla. Toto chování je normální a je popsáno v datasheetu. Modul se trochu zahřívá sám a naměřená teplota může být o 1 ou 2 stupně vyšší než skutečná hodnota teploty.

Modul BME280 je však také teplotním čidlem, které poskytovalo stabilnější údaje o teplotě bez mnoha oscilací mezi měřeními. To souvisí s rozlišením čidla. Dokáže detekovat změny až do 0,01 ºC.

V případě teplotních čidel DS18B20 můžeme pozorovat určité oscilace mezi odečty a je také patrné, že rozlišení není tak dobré jako u BME280. Navíc teplotní čidlo DS18B20 bylo jediné, které v průběhu experimentu poskytovalo některé „nulové“ hodnoty. Měřili jsme dva teplotní snímače DS18B20 ve stejné datové lince a jeden ze snímačů během experimentu (během 36 hodin) šestkrát neodečetl teplotu.

DHT22 a BMP180 se chovají velmi podobně s malými oscilacemi. Čidlo DHT11 nedokázalo detekovat malé změny teploty, protože jeho rozlišení je 1ºC.

Nakonec čidlo teploty LM35 detekovalo změny teploty mezi 24ºC a 26ºC, ale s velkým kolísáním mezi měřeními.

Tento graf porovnávající různá čidla teploty jasně ukazuje, jak se jednotlivá čidla liší od ostatních. Snadněji tak pochopíte, jak fungují a zda budou vhodné pro projekty, které chcete vytvořit.

Zabalení

V tomto článku jsme porovnali několik teplotních senzorů, které můžete použít s ESP32, ESP8266, Arduino a dalšími vývojovými deskami. Všechny tyto snímače měří teplotu, ale při současném testování ve stejném prostředí se chovají různě.

Doufáme, že pro vás byl tento článek užitečný a že vám pomůže vybrat ten nejlepší teplotní senzor pro požadavky vašeho projektu.

Mohlo by vás také zajímat:

  • 9 Arduino kompatibilních teplotních senzorů pro vaše projekty elektroniky
  • ESP32/ESP8266 Vykreslujte hodnoty senzorů v grafech v reálném čase
  • Zapište se do našich kurzů elektroniky a elektronických knih

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.