Сравнение датчиков температуры: DHT11, DHT22, LM35, DS18B20, BME280 и BMP180

Информация о статье

Тип статьи:
Перевод
Источник:

Содержание

Для быстрого сравнения датчиков мы составили следующую таблицу, в которой представлена наиболее важная информация для выбора датчика температуры, а именно: протокол связи, напряжение питания, диапазон температур и точность.

Примечание: таблица прокручивается по горизонтали как на настольном компьютере, так и на планшете и мобильном устройстве.

 ИзображениеИзображениеИзображениеИзображениеИзображениеИзображение
SensorDHT11DHT22 (AM2302)LM35DS18B20BME280BMP180
MeasuresTemperature
Humidity
Temperature
Humidity
TemperatureTemperatureTemperature
Humidity
Pressure
Temperature
Pressure
Communication
protocol
One-wireOne-wireAnalogOne-wireI2C
SPI
I2C
Supply
voltage
3 to 5.5V DC3 to 6V DC4 to 30 V DC3 to 5.5V DC1.7 to 3.6V (for the chip) 3.3 to 5V for the board1.8 to 3.6V (for the chip) 3.3 to 5V for the board
Temperature
range
0 to 50ºC-40 to 80ºC-55 to 150ºC-55 to 125ºC-40 to 85ºC0 to 65ºC
Accuracy± 2ºC (at 0 to 50ºC)± 0.5ºC (at -40 to 80ºC)±0.5ºC (at 25ºC)±0.5ºC (at -10 to 85ºC)±0.5ºC (at 25ºC)±0.5ºC (at 25ºC)
Support
(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 module (included in MicroPython firmware)dht module (included in MicroPython firmware)from machine import ADC
ADC().read
ds18b20 module (included in MicroPython firmware)BME280 Adafruit LibraryBMP180 module
Where to buy?Check pricesCheck prices Check prices Check prices
Check prices (waterproof)
Check prices Check prices

DHT11 vs DHT22 (AM2302)

Изображение

DHT11 и DHT22 (AM2302) — это цифровые датчики температуры, которые измеряют температуру и влажность. Они выглядят очень похоже и работают одинаково, но имеют разные технические характеристики.

Оба датчика могут питаться от 3,3 В или 5 В. Таким образом, вы можете легко использовать их в своих проектах на Arduino или ESP.

Датчик DHT22 имеет лучшее разрешение и более широкий диапазон измерения температуры и влажности. Однако он немного дороже, и вы можете запрашивать показания только с интервалом в 2 секунды.

DHT11 немного дешевле, имеет меньший диапазон и менее точен. Но вы можете получать показания датчика каждую секунду.

Несмотря на различия, они работают одинаково, и вы можете использовать один и тот же код для считывания температуры и влажности. Вам просто нужно выбрать в коде тип датчика, который вы используете.

Таким образом, если вы готовы потратить немного больше, мы рекомендуем DHT22 вместо DHT11.

LM35, LM335 and LM34

Изображение

LM35, LM335 и LM34 — это линейные датчики температуры, которые выдают напряжение, пропорциональное значению температуры. LM35 калиброван в градусах Цельсия, LM335 — в градусах Кельвина, а LM34 — в градусах Фаренгейта. Таким образом, в зависимости от единиц измерения температуры, которые вы будете использовать в своем проекте, один из этих датчиков может оказаться более практичным, чем другой.

Мы рекомендуем использовать LM35 или LM34 вместо LM335, поскольку вычитание большого числа из измерений LM335 для преобразования температуры из Кельвина может снизить точность результатов.

Согласно техническому описанию, датчики LM35 и LM34 требуют очень мало тока для работы, около 60 мкА. Это приводит к очень низкому самонагреву (около 0,08 °C в неподвижном воздухе), что означает, что на измерения температуры не будет влиять сам датчик.

Чтобы считывать температуру с этих датчиков, вам просто нужно считывать выходное напряжение датчика с помощью аналогового вывода. Если вы используете Arduino, вам нужно просто воспользоваться функцией analogRead(), и вы получите показания температуры с двумя десятичными знаками.

Таким образом, если вам нужен недорогой и простой в использовании датчик для контроля температуры, LM35 может быть хорошим выбором. Кроме того, поскольку он потребляет очень мало энергии, он отлично подходит для портативных проектов, где требуется низкое энергопотребление.

DS18B20 Temperature Sensor

Изображение

The DS18B20 temperature sensor is a one-wire digital temperature sensor. This means that it just requires one data line (and GND) to communicate with your microcontrollers.

It can be powered by an external power supply or it can derive power from the data line (called “parasite mode”), which eliminates the need for an external power supply.

Each DS18B20 temperature sensor has a unique 64-bit serial code. This allows you to wire multiple sensors to the same data wire. So, you can get temperature from multiple sensors using a single GPIO.

Additionally, the resolution of the temperature sensor can be set to 9, 10, 11, or 12 bits which corresponds to increments of 0.5°C, 0.25°C, 0.125°C, and 0.0625°C, respectively. The default resolution at power-up is 12-bit.

The DS18B20 temperature sensor is also available in waterproof version, ideal for outdoor projects or to measure liquid temperature.

Изображение

BME280 vs BMP180

BME280 и BMP180 — это барометрические датчики, то есть они измеряют атмосферное давление. BME280 также оснащен датчиком температуры и влажности, а BMP180 — датчиком температуры. Поскольку давление изменяется с высотой, эти датчики можно также использовать для оценки высоты.

Что касается диапазона температур, BME280 имеет более широкий диапазон измерения: от -40 до 85 °C, в то время как BMP180 измеряет только от 0 до 65 °C. Следует иметь в виду, что модуль BME280 немного нагревается, поэтому измерения температуры могут быть на 1 или 2 градуса выше реального значения температуры.

BME280 может использовать протокол связи I2C или SPI, в то время как BMP180 может использовать только связь I2C.

Датчик BME280 стоит дороже, но имеет больше функций. Например, с помощью только этого датчика можно создать метеостанцию. Но если вам не нужно измерять давление или влажность, можно приобрести более дешевый датчик температуры.

Подключение этих датчиков к Arduino, ESP8266 и ESP32 очень простое благодаря библиотекам Adafruit.

Проверка всех датчиков температуры

Изображение

Мы подключили все следующие датчики температуры к Arduino Mega:

    DHT11
    DHT22
    LM35
    2x DS18B20 в одной шине данных
    BME280
    BMP180

Данные записывались на карту microSD с помощью модуля microSD. Эксперимент длился примерно 36 часов, и показания температуры регистрировались каждые 5 минут.

Мы подключили контакты данных датчиков температуры к следующим контактам на Arduino Mega:

    DHT11: контакт 11
    DHT22: контакт 12
    DS18B20: контакт 14
    LM35: контакт A0
    BME280: программный SPI на следующих контактах: контакт 4 (MISO), контакт 5 (CS), контакт 6 (SCK), контакт 7 (MOSI)
    BMP180: контакт 20 (SDA) и контакт 21 (CSL) 

Модуль карты microSD был подключен через аппаратное SPI: вывод 51 (MOSI), вывод 50 (MISO), вывод 52 (SCK), вывод 53 (CS).

Это код, выполняемый в Arduino Mega:

  1. /*
  2.  * Rui Santos
  3.  * Complete Project Details https://RandomNerdTutorials.com
  4.  */
  5.  
  6. #include "DHT.h"
  7.  
  8. #include <OneWire.h>
  9. #include <DallasTemperature.h>
  10.  
  11. #include <Wire.h>
  12. #include <SPI.h>
  13. #include <Adafruit_Sensor.h>
  14. #include <Adafruit_BME280.h>
  15.  
  16. #include <Wire.h>
  17. #include <Adafruit_BMP085.h>
  18.  
  19. #include <SD.h> // for the SD card
  20.  
  21. const int DHT11sensorPin = 11;
  22. const int DHT22sensorPin = 12;
  23.  
  24. DHT dht11(DHT11sensorPin, DHT11);
  25. DHT dht22(DHT22sensorPin, DHT22);
  26.  
  27. float DHT11temperature;
  28. float DHT22temperature;
  29.  
  30. const int DS18B20sensorPin = 14;
  31.  
  32. OneWire oneWire(DS18B20sensorPin);
  33. DallasTemperature ds18b20(&oneWire);
  34.  
  35. float DS18B20temperature1;
  36. float DS18B20temperature2;
  37.  
  38. const int BME_SCK = 6;
  39. const int BME_MISO = 4;
  40. const int BME_MOSI = 7;
  41. const int BME_CS = 5;
  42.  
  43. Adafruit_BME280 bme280(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
  44.  
  45. Adafruit_BMP085 bmp180;
  46.  
  47. const int LM35sensorPin = A0;
  48. float LM35sensorValue;
  49. float LM35voltageOut;
  50. float LM35temperature;
  51.  
  52. const int chipSelectSDCard = 53;
  53. File myFile;
  54.  
  55. void setup() {
  56. Serial.begin(9600);
  57.  
  58. dht11.begin();
  59. delay(2000);
  60. dht22.begin();
  61.  
  62. ds18b20.begin();
  63.  
  64. bme280.begin();
  65.  
  66. bmp180.begin();
  67.  
  68. pinMode(LM35sensorPin, INPUT);
  69.  
  70. if(!SD.begin(chipSelectSDCard)) {
  71. Serial.println("SD card initialization failed!");
  72. return;
  73. }
  74. Serial.println("SD card initialization done.");
  75.  
  76. myFile=SD.open("DATA.txt", FILE_WRITE);
  77. if (myFile) {
  78. Serial.println("File opened ok");
  79. // print the headings for our data
  80. myFile.println("DHT11,DHT22,DS18B20-1,DS18B20-2,BME280,BMP180,LM35");
  81. }
  82. myFile.close();
  83. }
  84.  
  85. void loop() {
  86.  
  87. /*-------------------------------------------------------*/
  88. //DHT11
  89. DHT11temperature = dht11.readTemperature();
  90. if (isnan(DHT11temperature)) {
  91. Serial.println("Failed to read from DHT11 sensor!");
  92. return;
  93. }
  94. Serial.print("Temperature DHT11(&ordm;C): ");
  95. Serial.println(DHT11temperature);
  96.  
  97. /*-------------------------------------------------------*/
  98. //DHT22
  99. DHT22temperature = dht22.readTemperature();
  100. if (isnan(DHT22temperature)) {
  101. Serial.println("Failed to read from DHT22 sensor!");
  102. return;
  103. }
  104. Serial.print("Temperature DHT22(&ordm;C): ");
  105. Serial.println(DHT22temperature);
  106.  
  107. /*-------------------------------------------------*/
  108. //DS18B20
  109. ds18b20.requestTemperatures();
  110. DS18B20temperature1 = ds18b20.getTempCByIndex(0);
  111. DS18B20temperature2 = ds18b20.getTempCByIndex(1);
  112.  
  113. Serial.print("Temperature DS18B20-1(&ordm;C): ");
  114. Serial.println(DS18B20temperature1);
  115.  
  116. Serial.print("Temperature DS18B20-2(&ordm;C): ");
  117. Serial.println(DS18B20temperature2);
  118.  
  119. /*-------------------------------------------------*/
  120. //BME280
  121.  
  122. Serial.print("Temperature BME280(&ordm;C): ");
  123. Serial.println(bme280.readTemperature());
  124.  
  125. /*-------------------------------------------------*/
  126. //BMP180
  127. Serial.print("Temperature BMP180(&ordm;C): ");
  128. Serial.println(bmp180.readTemperature());
  129.  
  130. /*-------------------------------------------------*/
  131. //LM35 SENSOR
  132. LM35sensorValue = analogRead(LM35sensorPin);
  133. LM35voltageOut = (LM35sensorValue * 5000) / 1024;
  134.  
  135. // calculate temperature for LM35 (LM35DZ)
  136. LM35temperature = LM35voltageOut / 10;
  137.  
  138. Serial.print("Temperature LM35(&ordm;C): ");
  139. Serial.println(LM35temperature);
  140.  
  141. Serial.println("");
  142.  
  143. myFile = SD.open("DATA.txt", FILE_WRITE);
  144. if (myFile) {
  145. Serial.println("File open with success");
  146. myFile.print(DHT11temperature);
  147. myFile.print(",");
  148. myFile.print(DHT22temperature);
  149. myFile.print(",");
  150. myFile.print(DS18B20temperature1);
  151. myFile.print(",");
  152. myFile.print(DS18B20temperature2);
  153. myFile.print(",");
  154. myFile.print(bme280.readTemperature());
  155. myFile.print(",");
  156. myFile.print(bmp180.readTemperature());
  157. myFile.print(",");
  158. myFile.print(LM35temperature);
  159. myFile.println(",");
  160. }
  161. myFile.close();
  162.  
  163. delay(6000);
  164. }
  165.  

Результаты: сравнение показаний температуры

Примерно через 36 часов мы извлекли карту microSD и скопировали результаты в электронную таблицу. Мы построили график всех показаний, чтобы лучше сравнить измерения, полученные с помощью разных датчиков температуры.

Изображение

Изображение

В этом графике нет контрольной группы (мы не использовали откалиброванный датчик температуры), но мы имеем представление о том, как ведут себя эти датчики.

Если внимательно посмотреть на графики, то BME280 измерял немного более высокие значения, чем другие датчики температуры. Такое поведение является нормальным и описано в техническом паспорте. Модуль немного нагревается, и измерения температуры могут быть на 1 или 2 градуса выше реального значения температуры.

Однако BME280 также является датчиком температуры, который дает более стабильные показания температуры без больших колебаний между измерениями. Это связано с разрешением датчика. Он может обнаруживать изменения до 0,01 °C.

В случае датчиков температуры DS18B20 мы наблюдаем некоторые колебания между показаниями, а также заметно, что разрешение не так хорошее, как у BME280. Кроме того, датчик температуры DS18B20 был единственным, который давал некоторые «нулевые» показания на протяжении всего эксперимента. Мы измерили два датчика температуры DS18B20 в одной и той же линии данных, и один из датчиков не смог считывать температуру 6 раз в течение всего эксперимента (в течение 36 часов).

DHT22 и BMP180 ведут себя очень похоже, с небольшими колебаниями. DHT11 не смог обнаружить небольшие изменения температуры, поскольку его разрешение составляет 1ºC.

Наконец, датчик температуры LM35 обнаружил изменения температуры между 24ºC и 26ºC, но с большими колебаниями между измерениями.

Этот график, сравнивающий различные датчики температуры, ясно показывает, чем каждый датчик отличается от других. Так легче понять, как они работают и подходят ли они для проектов, которые вы хотите реализовать.

Подведение итогов

В этой статье мы сравнили несколько датчиков температуры, которые можно использовать с ESP32, ESP8266, Arduino и другими платами разработчика. Все эти датчики измеряют температуру, но ведут себя по-разному, когда их тестируют в одной и той же среде в одно и то же время.

Мы надеемся, что эта статья оказалась вам полезной и поможет выбрать лучший датчик температуры для вашего проекта.

Нет комментариев. Ваш будет первым!

Похожие статьи

Как прошить ESP-32 (S, WROOM, WROVER) при помощи USB UART TTL программатора

Инструкция по прошивке любых ESP32S, WROOM, WROVER  и других ESP тоже (но там будут нюансы).

Как прошить ESP-12F (ESP8266) с помощью USB UART TTL программатора

Инструкция подходит для ESP-12F, ESP-12E и ESP-12S. И для других ESP тоже, но там будут нюансы

Прямые ссылки на онлайн радиостанции России.Только потоки.

Ссылки на прямые радиопотоки для вставки в радиоплеер, в Web-радио и так далее. Все то, что обычно прячут.

Meshtastic - Как собрать свое устройство при помощи FakeTec PCB и NRF52840

В этом руководстве подробно описана сборка недорогого, экономичного узла Meshtastic с использованием микросхемы NRF52840 Pro, LoRa-модуля HT-RA62 и печатной платы FakeTec.

Как добавить ChatGPT в свою сеть Meshtastic

Привнесите искусственный интеллект ChatGPT в вашу сеть Meshtastic с помощью простого бота на Python. Один узел, подключенный к интернету, обслуживает всю сеть, обеспечивая мгновенные ответы на вопросы по выживанию, полевым операциям, образованию и т. д.,

Как добавить экран в устройство FakeTec NRF52840 Meshtastic

Мы расскажем вам, как добавить дисплейный модуль к устройству FakeTec Meshtastic Device, чтобы отображать сообщения, информацию об узлах и состояние сети в режиме реального времени.

Понимание и оптимизация использования каналов в устройствах Meshtastic

Использование каналов — это ключ к эффективной связи. Мониторинг и оптимизация использования каналов имеют решающее значение для здоровой сети.

Как включить Paxcounter (счетчик прохожих)  на узле Meshtastic

Узнайте, как Paxcounter, инструмент для отслеживания потока людей, легко интегрируется с Meshtastic, обеспечивая мониторинг толпы и управление заполняемостью в режиме реального времени. 

Как подключить датчик телеметрии (температуры и т.д.) BME280 в устройство FakeTec Meshtastic

Мы расскажем вам, как добавить модуль телеметрии в устройство FakeTec Meshtastic Device для измерения давления воздуха, температуры и влажности

Как создать свой собственный узел Meshtastic из ESP32 и Lora Radio

 Создайте свой собственный узел Meshtastic LoRa Node с помощью нашего простого руководства DIY. Полный шаг за шагом для создания вашей собственной распределенной коммуникационной системы.

Как добавить метеодатчик BME280 в узел Heltec Lora v3 Meshtastic

Мы расскажем вам о том, как добавить модуль BME280 (температура, влажность, давление, качество воздуха)  к существующему узлу Heltec V3 Lora ESP32 Meshtastic Node. 

Как организовать собственный MQTT для узлов Meshtastic

Интеграция MQTT с Meshtastic расширяет возможности автономной связи, соединяя удаленные сети. Это позволяет обмениваться глобальными сообщениями и гарантирует более быструю доставку сообщений через интернет. Идеально подходит для удаленных районов и чрезвычайных ситуаций.

Как добавить датчик землетрясения в устройство Meshtastic

Встройте датчик вибрации/землетрясения в ваш узел Meshtastic на базе ESP32 LoRa  Heltec V3 Lora, TTGo или T-Beam. Такая настройка позволяет сети передавать предупреждения при обнаружении сейсмической активности.

Краткий обзор / рейтинг устройств Meshtastic

На рынке Meshtastic уже довольно много устройств, которые стали популярны у пользователей.
Так что же лучше, Heltec v4 или LilyGo T-Beam? ProMicro Faketec или Wireless Tracker? Разберем в этом обзоре. 

Как добавить GPS к узлу Meshtastic

Расскажем, как добавить GPS-модуль к существующему узлу Heltec V3 Lora ESP32 Meshtastic Node. Это руководство также подойдет для любых плат ESP32, но могут потребоваться небольшие изменения.

Выбор аккумулятора для питания устройства Мештастик

Пошаговое руководство по добавлению аккумулятора к Heltec LoRa v3. Выбираем литий-полимерные (LiPo) или литий-ионные (Li-ion) аккумуляторы — наше руководство поможет вам принять обоснованное решение, исходя из ваших конкретных потребностей.

Как настроить заранее определенные сообщения с быстрой отправкой для узла Meshtastic

Усовершенствуйте свой узел Meshtastic Node, добавив энкодер для быстрого выбора стандартных ответов — сообщений. 

Топ рейтинг корпусов для Meshtastic

Это наш топ рейинг лучших 3D моделей корпусов для устройств Meshtastic. Обсудим плюсы и минусы каждого корпуса, чтобы вам было проще выбрать. Все вопросы — в комментариях.

Что такое Meshtastic? - Полное руководство по началу работы

Meshtastic — платформа для создания ячеистых сетей с открытым исходным кодом, которая переосмысливает коммуникации. От децентрализованных, дальнобойных возможностей до универсальных применений в чрезвычайных ситуациях и приключениях на природе. 

Как добавить клавиатуру в узел Meshtastic

Узнайте, как легко интегрировать клавиатуру M5Stack CardKB Keyboard в ваш узел Meshtastic, превратив его в автономное коммуникационное устройство. 

Удаленное управление узлом Meshtastic с помощью телефона через сеть Mesh

В этом блоге мы расскажем вам о том, как удаленно управлять узлом Meshtastic с помощью телефона через сеть Mesh. Этот метод гораздо проще, чем использование командной строки, и вам не понадобится подключение по Bluetooth или Wi-Fi (после первоначальной настройки).

Как добавить датчик пламени в узел Meshtastic

Встройте датчик пламени в ваш узел Meshtastic на базе ESP32 LoRa с помощью нашего руководства, подходящего для таких плат, как Heltec V3 Lora, TTGo или T-Beam. Эта настройка позволяет передавать в сеть сообщения, когда датчик обнаруживает пламя.

Отличие Meshtastic от обычной УКВ рации

Разбор Meshtastic VS PMR раций. Мы рассмотрим, что они могут делать, как далеко они дотягиваются, как они общаются, как долго работают их батареи и насколько они просты в использовании. 

Как добавить датчик дождя/снега к вашему узлу Meshtastic

С помощью нашего руководства интегрируйте датчик дождя/снега в ваш узел LoRa Meshtastic на базе ESP32, подходящий для плат типа Heltec V3 Lora, TTGo или T-Beam. Эта настройка позволяет сети передавать сообщения, когда датчик обнаруживает дождь/снег.

Как передавать звук при помощи Meshtastic

Вы когда-нибудь задумывались, можно ли отправлять голосовые заметки через сеть Meshtastic с низкой пропускной способностью? Я точно задумывался, и с удовольствием поделюсь своим уик-эндом, посвященным попытке реализовать эту идею.

Лучшая антенна для портативного узла Meshtastic

Ознакомьтесь с лучшими антеннами Meshtastic с помощью нашего подробного руководства. 

Как добавить зуммер (пассивный) к вашему узлу Meshtastic

Добавляем пищалку — оповещение о входящих, к любой ноде.

Как добавить датчик телеметрии BME280 к DIY ESP32 Meshtastic

Узнайте, как добавить датчик BME280 к самодельному узлу ESP32 Meshtastic для мониторинга температуры, влажности и давления воздуха.

Квадрифлярная антенна 433МГц своими руками

Как самому сделать QFA антенну с хорошими параметрами. 

Как добавить датчик звука / охранную сигнализацию к ноде Meshtastic

Добавление датчика звука позволит реагировать на события, проникновение на охраняемый обьект и так далее.

Посещая этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.