Am2320 am2302 чем отличается
Перейти к содержимому

Am2320 am2302 чем отличается

Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino

Датчики температуры и влажности DHT11 и DHT22/AM2302 от AOSONG довольно просты в использовании, недорогие и отлично подходят для любителей! Эти датчики предварительно откалиброваны и не требуют дополнительных компонентов, поэтому вы можете сразу начать измерение температуры и относительной влажности.

Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino Рисунок 1 – Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino

Одна из важнейших функций, которую они предоставляют, заключается в том, что температура и влажность измеряются с точностью до десятых долей; то есть до одного десятичного знака. Единственным недостатком этого датчика является то, что вы можете получать с него новые данные с периодичностью только раз в одну или две секунды. Но, учитывая его производительность и цену, вы не можете жаловаться.

DHT11 против DHT22/AM2302

У нас есть две версии серии датчиков DHTxx. Они выглядят немного похоже и имеют одинаковую распиновку, но имеют разные характеристики. Вот подробности.

DHT22 является более дорогой версией, которая, очевидно, имеет лучшие характеристики. Диапазон измерения температуры составляет от -40°C до +80°C с точностью ±0,5 градуса, а диапазон температур DHT11 составляет от 0°C до 50°C с точностью ±2 градуса. Также датчик DHT22 имеет более широкий диапазон измерения влажности, от 0 до 100% с точностью 2-5%, в то время как диапазон измерения влажности DHT11 составляет от 20 до 80% с точностью 5%.

Сравнение спецификаций DHT11 и DHT22/AM2302
DHT11 DHT22
DHT11 DHT22
Рабочее напряжение от 3 до 5 В от 3 до 5 В
Максимальный рабочий ток 2,5 мА макс 2,5 мА макс
Диапазон измерения влажности 20-80% / 5% 0-100% / 2-5%
Диапазон измерения температуры 0-50°C / ± 2°C от -40 до 80°C / ± 0,5°C
Частота выборки 1 Гц (чтение каждую секунду) 0,5 Гц (чтение каждые 2 секунды)
Размер корпуса 15,5 мм х 12 мм х 5,5 мм 15,1 мм х 25 мм х 7,7 мм
Преимущество Ультра низкая стоимость Более точный

Хотя DHT22/AM2302 более точен и работает в большем диапазоне температур и влажности; есть три вещи, в которых DHT11 сильно превосходит DHT22. Он более дешевый, меньше по размеру и имеет более высокую частоту выборки. Частота выборки DHT11 составляет 1 Гц, то есть одно чтение каждую секунду, в то время как частота выборки DHT22 составляет 0,5 Гц, то есть одно чтение каждые две секунды.

Рабочее напряжение обоих датчиков составляет от 3 до 5 вольт, в то время как максимальный ток, используемый во время преобразования (при запросе данных), составляет 2,5 мА. И самое приятное, что датчики DHT11 и DHT22/AM2302 являются «взаимозаменяемыми», то есть, если вы создаете свой проект с одним датчиком, вы можете просто отключить его и использовать другой датчик. Ваш код, возможно, придется немного изменить, но, по крайней мере, схема не изменится!

Для получения более подробной информации обратитесь к техническим описаниям датчиков DHT11 и DHT22/AM2302.

Обзор аппаратного обеспечения

Теперь давайте перейдем к более интересным вещам. Давайте разберем оба датчика DHT11 и DHT22/AM2302 и посмотрим, что внутри.

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

Рисунок 2 Внутренности датчиков температуры и влажности DHT11 DHT22/AM2302 Рисунок 2 – Внутренности датчиков температуры и влажности DHT11 DHT22/AM2302

Чувствительный к влажности компонент, который используется, разумеется, для измерения влажности, имеет два электрода с влагоудерживающей подложкой (обычно соль или проводящий пластиковый полимер), зажатой между ними. По мере поглощения водяного пара подложка высвобождает ионы, что, в свою очередь, увеличивает проводимость между электродами. Изменение сопротивления между двумя электродами пропорционально относительной влажности. Более высокая относительная влажность уменьшает сопротивление между электродами, в то время как более низкая относительная влажность увеличивает это сопротивление.

Рисунок 3 Внутренняя структура датчика влажности в DHT11 и DHT22 Рисунок 3 – Внутренняя структура датчика влажности в DHT11 и DHT22

Кроме того, в этих датчиках для измерения температуры имеется датчик температуры NTC (термистор). Термистор – это терморезистор – резистор, который меняет свое сопротивление в зависимости от температуры. Технически все резисторы являются термисторами – их сопротивление слегка изменяется в зависимости от температуры, но обычно это изменение очень мало и его трудно измерить.

Термисторы сделаны так, чтобы их сопротивление резко изменялось при изменении температуры, и изменение на один градус может составлять 100 Ом или более! Термин «NTC» означает «Negative Temperature Coefficient» (отрицательный температурный коэффициент), что означает, что с ростом температуры сопротивление уменьшается.

Рисунок 4 График зависимости сопротивления NTC термистора от температуры Рисунок 4 – График зависимости сопротивления NTC термистора от температуры

С другой стороны имеется небольшая печатная плата с 8-разрядной микросхемой в корпусе SOIC-14. Эта микросхема измеряет и обрабатывает аналоговый сигнал с сохраненными калибровочными коэффициентами, выполняет аналого-цифровое преобразование и выдает цифровой сигнал с данными о температуре и влажности.

Распиновка DHT11 и DHT22/AM2302

Датчики DHT11 и DHT22/AM2302 довольно легко подключаются. У них есть четыре вывода:

  • Вывод VCC обеспечивает питание датчика. Хотя допускается напряжение питания в диапазоне от 3,3 до 5,5 В, рекомендуется питание 5 В. В случае источника питания 5 В, вы можете держать датчик на расстоянии до 20 метров от источника питания. Однако при напряжении питания 3,3 В длина кабеля не должна превышать 1 метра. В противном случае падение напряжения в линии приведет к ошибкам измерения.
  • Вывод Data используется для связи между датчиком и микроконтроллером.
  • NC не подключен
  • GND должен быть подключен к земле Arduino.

Подключение DHT11 и DHT22/AM2302 к Arduino UNO

Теперь, когда у нас есть полное понимание того, как работает датчик DHT, мы можем начать подключать его к нашей плате Arduino!

К счастью, подключение датчиков DHT11, DHT22/AM2302 к Arduino довольно тривиально. У них довольно длинные выводы с шагом 0,1 дюйма (2,54 м), поэтому вы можете легко вставить их в любую макетную плату. Подайте на датчик питание 5 В и подключите землю. Наконец, подключите вывод данных к цифровому выводу 2 на Arduino.

Помните, как обсуждалось ранее, между VCC и линией данных нам нужно установить подтягивающий резистор 10 кОм, чтобы поддерживать высокий логический уровень на линии данных для правильной связи между датчиком и микроконтроллером. Если у вас есть готовый модуль датчика, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. Модуль поставляется со встроенным подтягивающим резистором.

Рисунок 6 Подключение DHT11 к Arduino UNO Рисунок 6 – Подключение DHT11 к Arduino UNO Рисунок 7 Подключение DHT22/AM2302 к Arduino UNO Рисунок 7 – Подключение DHT22/AM2302 к Arduino UNO

Теперь вы готовы загрузить в Arduino код и заставить ее работать.

Код Arduino. Вывод значений на монитор последовательного порта

Как обсуждалось ранее, датчики DHT11 и DHT22/AM2302 имеют собственный однопроводный протокол, используемый для передачи данных. Этот протокол требует точной синхронизации. К счастью, нам не нужно беспокоиться об этом, потому что мы собираемся использовать библиотеку DHT, которая позаботится почти обо всем.

Сначала скачайте библиотеку, посетив репозиторий на GitHub, или просто нажмите эту кнопку, чтобы скачать архив:

Чтобы установить библиотеку, откройте Arduino IDE, перейдите в «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку» и выберите только что загруженный zip-архив DHTlib.

После установки библиотеки вы можете скопировать следующий скетч в IDE Arduino. Данный скетч выводит значения температуры и относительной влажности в монитор последовательного порта. Попробуйте скетч в работе; а затем мы рассмотрим его подробнее.

Скетч начинается с включения библиотеки DHT. Затем нам нужно определить номер вывода Arduino, к которому подключен вывод данных нашего датчика, и создать объект DHT . Так мы сможем получить доступ к специальным функциям, связанным с библиотекой.

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

В функции loop() мы будем использовать функцию read22() , которая считывает данные с DHT22/AM2302. В качестве параметра она принимает номер вывода данных датчика. Если вы работаете с DHT11, вам нужно использовать функцию read11() . Вы можете сделать это, раскомментировав вторую строку.

После расчета значений влажности и температуры мы можем получить к ним доступ:

Объект DHT возвращает значение температуры в градусах Цельсия (°C). Его можно преобразовать в градусы Фаренгейта (°F) по простой формуле:

В конце мы выводим значения температуры и влажности в монитор последовательного порта.

Рисунок 8 Вывод в мониторе последовательного порта показаний датчика DHT11 или DHT22/AM2302 Рисунок 8 – Вывод в мониторе последовательного порта показаний датчика DHT11 или DHT22/AM2302

Код Arduino. Использование DHT11 и DHT22/AM2302 с LCD дисплеем

Иногда может возникнуть идея, контролировать температуру и влажность в инкубаторе. Тогда для отображения условий в инкубаторе вам, вероятно, понадобится символьный LCD дисплей 16×2 вместо монитора последовательного порта. Итак, в этом примере вместе с датчиком DHT11 или DHT22/AM2302 мы подключим к Arduino LCD дисплей.

Если вы не знакомы с LCD дисплеями на 16×2 символов, взгляните на статью «Взаимодействие Arduino с символьным LCD дисплеем».

Далее нам нужно подключиться к LCD дисплею, как показано ниже.

Рисунок 9 Подключение к Arduino символьного LCD дисплея 16x2 и DHT11 Рисунок 9 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT11 Рисунок 10 Подключение к Arduino символьного LCD дисплея 16x2 и DHT22 Рисунок 10 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT22

Следующий скетч будет выводить значения температуры и относительной влажности на символьном LCD дисплее 16×2. Он использует тот же код, за исключением того, что мы печатаем значения на LCD дисплее.

Рисунок 11 Показания температуры и влажности на LCD дисплее Рисунок 11 – Показания температуры и влажности на LCD дисплее

Wide range of Hygrometers:
DHT22, AM2302, AM2320, AM2321, SHT71, HTU21D, Si7021, BME280

Previous experiments looked at comparing a set of six Aosong DHT22/AM2302 and compared the Aosong DHT22/AM2302 with the Aosong DHT11 and Sensirion SHT71. Here I have added five new devices meaning this test now covers most commonly available low-cost digital hygrometers. This page will present only new results. For details of how the experiment works, please refer to the previous write-ups.

  • Aosong AM2302 (A.K.A. DHT22)
  • Aosong AM2320
  • Aosong AM2321

The DHT11 is clearly a different class of sensor with substantially lower specification and has been dropped from further investigation. In my tests it performed perfectly well with respect to its specification, but I am only interested in devices that claim to read the full range 0–100% RH.

Image of all the devices before installation

The Devices and Test Apparatus

Aosong AM2302

Also commonly known as DHT22. Two devices (E & F) from my previous experiments have been included. Device E was selected as the best of the six I originally started with. [AM2302 datasheet]

Aosong AM2320 & AM2321

The AM2320 is effectively the latest version of the AM2302 with the addition of an option to communicate over I2C interface. It is physically a little smaller, but with identical pin-out. The one-wire serial of the AM2302 is retained making this a simple drop-in replacement. [AM2320 datasheet]

The AM2321 appears to be the same but in a much smaller physical package and narrower pin pitch. It might be electrically identical. There is some suggestion from the manufacturer’s web site that this might already be discontinued and replaced by AM2322. I am not sure. [AM2321 datasheet]

The sensing elements in these are likely the same as each other and I presume similar to the AM2302/DHT22. The internals of these devices are not exactly the same as the DHT22 because they do not exhibit the very distinctive sawtooth behaviour around 25°C.

Sensirion SHT71

Measurement Specialties HTU21D & Silicon Labs Si7021

I discuss these together though they are distinct devices from two different manufacturers. In normal use they are interchangeable both in terms of specification and communications protocols and even have the same I2C address so are drop-in replacements for each other. Similarly the Sensirion SHT21 (not included here) also has a near identical specification and interface. I have seen the same third party generic break-out boards being sold with any one of these devices attached. (See Figure 1.) The one difference I have found and possibly the only way to be sure which device you have is in the devices’ unique serial numbers for which each manufacturer uses a slightly different format, detailed in their respective datasheets. So long as you do not attempt to read the device serial number, these three sensors function identically. That is not to say they will all perform identically. Though equivalent for most normal use, the precise specification details do differ, most particularly in their speed of response. [HTU21D datasheet, Si7021 datasheet]

An interesting feature of the SHT21, HTU21 and Si7021 is that they are available in options with or without a protective PTFE membrane over the sensing element. For this test I am running one device each, with and without. (See Figure 1.) The intent had been to include an identical pair of sensors with and without the cover, however when my devices arrived I found the retailer had sent me HTU21s without the cover and Si7021s with the cover. It was only by reading the internal serial numbers I was able to ascertain that. Though not discussed in detail on this page, the effect of using the protective cover on the response speed has been investigated elsewhere. My conclusion was that is has virtually no impact at all.

Be careful with variable types in your software. These devices can return humidity values <0% RH. This is a good thing because it allows some head room for small errors in the calibration. The first version of my code however used unsigned variables which caused numeric underflow and 0% ended up getting read as 3500%.

Bosch BME280

This device is a bit different. First, unlike all the other devices tested it includes a barometer. Though an interesting addition and I will write about it elsewhere, for the present report I present only the temperature and humidity data.

Second, it possibly works on an entirely different physical principle from the other sensors here. As far as I have been able to acertain, all the other devices are polymer capacitance hygrometers. The Bosch website, datasheet and press releases contain no information that I have been able to find about what is inside the BME280. Currently I am operating on a belief that it is a resistive sensor, measuring the electrical resistence through a porous film rather than the capacitance across a film like the other devices. Many thanks to Nava Whiteford who has sent me some scanning electron micrographs of what is inside the BME280. In those images, the lower die looks like a typical MEMS barometer so the upper die must presumably be the hygrometer and I am guessing that we see a pair of almost square electrodes and the device is measuring the resistence of the cracked film that spans between them.

The datasheet has no accuracy specification outside the range 20%<RH<80%, but my past experience from other Bosch Sensortec devices is that the specifications are rigourous and conservative. They seem to under-promise and over-deliver, so a priori I am not expecting problems outside the specified range. [BME280 datasheet]

As previously demonstrated for other sensors (DHT22, SHT71), driving this device too fast can lead to self-heating. Contrary to the other devices though, this can occur straight out of the box, in the factory default configuration. In its default configuration, rather than taking a reading on demand, the device continuously reads values as fast as it can, returning the latest available value on request. The sampling rate is controlled by setting the 0xF5 memory register and the various speed options are defined in the datasheet. When running at the default full speed my device returned temperatures 0.5°C warmer than when running at one sample per second. At one sample per second values agreed with the polled operating mode where the device was put to sleep between readings. For the present experiment speed is of no consequence and I operated at 1 sample/sec.

Manufacturers’ Specification
AM2302 AM2320/AM2321 SHT71 HTU21D Si7021 BME280
Operating Range 0–100 0–100 0–100 0–100 0–100 0–100
Absolute accuracy
(%RH, 25°C)
±3% (10-90%)
±5% (<10, >90%)
±3% (10-90%)
±5% (<10, >90%)
±3% (20-80%)
±5% (<20, >80%)
±3% (20-80%)
±5% (<20, >80%)
±3% (0-80%)
±5% (>80%)
±3% (20-80%)
Repeatability (%) ±0.3 ±0.1 ±0.1 ±0.025
Long term stability
(% per year)
0.5 0.5 0.5 0.5 0.25 0.5
1/e Response (sec) 5 5 8 5 18 (with cover)
17 (without)
1
Voltage supply (V) 3.3–5.5 3.1–5.5(AM2320)
2.6–5.5(AM2321)
2.4–5.5 1.5–3.6 1.9–3.6 1.71–3.6

The Test Apparatus

Apparatus setup is essentially as previously described though a new board had to be built to hold nine devices inside the jars. The AM2302 and SHT71 devices have proprietary one-wire serial interfaces and were addressed independently, each using a separate GPIO pin as in the previous experiments. All the other sensors were multiplexed onto the I2C bus. I2C is able to address multiple devices on a single bus so long as each has a different address, but since I have multiple samples of the same device I am not able to identify each one uniquely. I therefore use a TI CD4051 8×1 multiplexer so that only one of the devices is connected to the I2C bus at a time. The devices are powered continuously, but the I2C IO lines are briefly connected to each device in turn. This would not have been required if I had only one each of the different device models.

The reference calibration sources are the same as before, eleven saturated solutions and distilled water. Sensors were allowed to stabilise for a few hours with each solution. The software automatically steps the temperature over a pre-defined range, allowing the readings to settle at each temperature and logging a reading to a database before stepping to the next temeperature.

Results

Throughout the following plots you will notice the data for sensor G are a little more sparse than the others. Both my AM2320 devices fail intermittently above 50% RH, just returning bytes of 00 or FF. They are worst in the range 50-70% where I got almost no readings. Below that I had not problems and above they were intermittent but fine most of the time. I never found a cause or have any suggestion for why they should fail to produce output in such a narrow range of humidity. At least the values are obviously wrong and an extra function was added to the microcontroller code to simply reject the bad data. The others all continue uneffected but values were only logged from this sensor when they were sensible.

Similarly, the AM2321 device J failed to return values when the humidity was above 90%. Whenever I used H2O (100%) or K2NO3 (92%) the sensor would work for about 10-15min and then freeze, refusing to even repond to I2C communication requests. It worked again immediately once the humidity dropped. Again, I have not found a fix and simply did not log data from this sensor above 90%.

Part 1: As a Function of Humidity

First we look at the varying response of the sensors to different reference humidities 0–100%. Figures 3 and 4 contain the same data plotted with different axes. Figure 3 shows the actual relative humidity values measured and Figure 4 shows the deviations from a perfect calibration. The manufacturers’ specifications are all defined at 25°C so I highlight those data in red. Data obtained at other temperatures are shown in blue.

Plots of measured vs. reference humidity for the nine hygrometers

Plots of measured vs. reference humidity for the nine hygrometers

Both of the above figures have equivalents in previous test runs where you can see earlier results for SHT71 and AM2302 E, F. The other six are new and this is their first test.

Part 2: As a Function of Temperature

In Figure 4 the red data are measured at 25±1°C and the blue data at other temperatures. Device E (an AM2302/DHT22) performs very well at 25°C, easily achieving the advertised specification. The large scatter of the blue points however show that the calibration degrades rapidly with varying temperature. As previously noted, this is my cherry-picked, best AM2302 from a sample of six. In contrast, device K (an HTU21D) seems to lie just slightly outside its specified tolerance at 25°C but has the very substantial advantage of behaving consistently over temperature. In different applications, absolute accuracy at 25°C or a small temperature dependence might be preferable. Easily the best performers though are the BME280 which are both accurate and consistent over the range tested.

    is sodium chloride. [DHT22/DH11/SHT71 version] is ammonium nitrate. [DHT22/DH11/SHT71 version] is magnesium chloride. [DHT22/DHT11/SHT71 version]

Plots showing thermal dependence of sensor output. Measured humidity vs. temperature.

Plots showing thermal dependence of sensor output. Measured humidity vs. temperature.

Plots showing thermal dependence of sensor output. Measured humidity vs. temperature.

The BME280 shows outstanding calibration throughout. For the other sensors, where the slope of my data matches the slope of the reference data (e.g., NH4NO3 panel K), that device shows good thermal compensation and simply has a constant offset. Where the slopes of the measurements and reference data differ (e.g., MgCl panel K), the device is showing varying errors as the temperature changes.

Part 3: As a Function Simultaneously of Temperature and Humidity

Finally, if a sensor is to be used to measure humidity under a range of varying temperatures a full bivariate calibration is required. Such a calibration over the temperature range 5 < °C < 35 is shown in Figure 8. The curves in Figure 4 are effectively cross sections through these surfaces.

AM2320 – измеряем температуру и влажность

AM2320

Есть такой хороший датчик температуры и влажности, как AM2320. По характеристикам он почти идентичен с более известными датчиками серии DHT, но в то же время имеет возможность работы по I 2 C.

Сравнение аналогов

Если сравнивать датчики серии DHT и AM2320, получаем следующую картину:

Характеристика Датчик
DHT11 DHT22 AM2320
Диапазон температур 0 … +50°C -40 … +80°C -40 … +80°C
Шаг измерения температуры 1°C 0,1°C 0,1°C
Погрешность температуры ±2°C ±0,5°C ±0,5°C
Диапазон влажности 20 … 90% 0 … 100% 0 … 99,9%
Шаг измерения влажности 1% 0,1% 0,1%
Погрешность влажности ±5% ±5% ±3%
Цена 70 руб. 260 руб. 190 руб.

Цены для сравнения взяты из одного и того же магазина (какого – рекламы делать не буду). Так что выбор в пользу AM2320 был очевиден.

Достаточно непонятный момент – зачем делать такой шаг измерения, если погрешность превышает его в десятки раз? Но это вопрос скорее риторический.

Особенности работы

Важное преимущество этого датчика перед DHT – умение работать по шине I 2 C, но это же является причиной одного из главных недостатков. Дело в том, что работа по I2 C предполагает обмен данными по запросу, при этом передаётся адрес устройства (от 0 до 127). И проблема в том, что датчики имеют один и тот же адрес, соответственно, подключить на эту шину более одного датчика будет очень сложно. Тем не менее, мне встречались упоминания о возможности.

Если у вас несколько таких датчиков, работать с ними следует как с DHT – по одному проводу. Для этого достаточно заземлить четвёртый вывод, который в режиме I 2 C используется для синхронизации AM2320.

Чтение данных с датчика

Мы в примере будем использовать работу по I 2 C. Для работы с датчиком скачаем соответствующую библиотеку, а также для поддержки I 2 C подключим библиотеку Wire. Поскольку нашей целью является работы с датчиком, а не с дисплеем, вместо отображения будем отправлять данные в последовательный порт, а смотреть их при помощи монитора порта в среде разработки.

Выводы датчика подключаем следующим образом:

  • 1 – к выводу +5В.
  • 2 – к выводу SDA (A4 для Arudino Uno);
  • 3 – к выводу 0В.
  • 4 – к выводу SCL (A5 для Arudino Uno).

И получаем следующую конструкцию:

Arudino UNO + AM2320

Arudino UNO + AM2320

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

После запуска приложения открываем монитор порта и наблюдаем передачу данных с датчика.

Arudino UNO + AM2320 - результаты измерения

Arudino UNO + AM2320 — результаты измерения

Добавить комментарий

Ваш адрес email не будет опубликован.