У датчика измерения температуры и влажности DHT-11 (о его возможностях и стыковке с Arduino я подробно писал в предыдущей статье) есть "старший брат", сенсор DHT-22 (часто под этим названием фигурирует AM2302, производимый фирмой AOSONG):
Несколько проигрывая DHT11 по габаритам, этот датчик имеет более широкий диапазон измеряемых величин и обладает большей точностью. Ранние версии даташитов объясняют, что измерением температуры занимается встроенный DS18B20, однако в последних вариантах его заменили на термистор.
Сравнительная таблица из предыдущей статьи должна быть дополнена так:
Показатель | DS18B20 | DHT11 | DHT22 |
---|---|---|---|
Допустимый диапазон t,°C | -55..+125 | 0..+50 | -40..+80 |
Погрешность измерения t, min | ±0.5°C@-10..+85°C | ±2°C@0..+50°C | ±0.5°C@+15..+55°C |
Погрешность измерения t, max | ±2°C | ±2°C | ±1°C |
Разрешение шкалы t,°C | 0.5/0.25/0.125,/0.0625 | 1 | 0.1 |
Допустимый диапазон RH, % | - | 20..95 | 0..99.9 |
Погрешность измерения RH, min | - | ±4% +25°C | ±2% +25°C |
Погрешность измерения RH, max | - | ±5% | ±4% |
Разрешение шкалы RH, % | - | 1 | 0.1 |
Точность измерения относительной влажности возрастает для значений меньших 12% и больших 90%, а также имеет некоторый гистерезис. Считывание очередного значения возможно не чаще, чем один раз в 2 секунды. Более подробно можно прочесть в документации: AM2302.pdf.
Подключение DHT22 к Arduino выглядит аналогично DHT11. Пины имеют идентичное назначение, схема подключения не отличается, да и протокол общения с датчиком, по сути, тот же.
Отличия начинаются в трактовке считываемых значений. Мы по-прежнему получаем от сенсора по 40 бит:
- Старшая часть значения влажности;
- Младшая часть значения влажности;
- Старшая часть значения температуры;
- Младшая часть значения температуры;
- Контрольная сумма.
Значение относительной влажности и температуры выдаются в десятых долях, например: если прочитано 010Dh, то эту цифру надо перевести в десятичный формат (269), а затем разделить на 10 - получится 26,9. И, кстати, отрицательные значения температуры кодируются единицей в старшем разряде считываемого 16-битного значения: 1000 0000 0110 0101 означает -10,1 °C.
Существует несколько вариантов библиотек для Arduino (и вы можете написать свой собственный!), вот наиболее известные:
- https://github.com/ringerc/Arduino-DHT22
- https://github.com/adafruit/DHT-sensor-library (работает на Arduino с тактовой частотой, отличной от 16 МГц)
- http://playground.arduino.cc/Main/DHTLib.
В примере ниже я использую именно последний вариант, он простой и универсальный (работает не только с DHT22, но и с DHT11). Архив с библиотекой надо распаковать в каталог sketchbook/libraries и перед загрузкой скетча в Arduino не забыть исправить значение константы DHT22_PIN на номер пина, к которому подключен вывод DATA датчика:
#include <dht.h> dht DHT; #define DHT22_PIN 6 void setup() { Serial.begin(115200); Serial.println("DHT TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println(DHT_LIB_VERSION); Serial.println(); Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); } void loop() { // READ DATA Serial.print("DHT22, \t"); int chk = DHT.read22(DHT22_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t\t"); Serial.println(DHT.temperature, 1); delay(2000); }
После старта программы надо вызвать окно Serial Monitor-а (Ctrl+Shift+M):
Датчик можно применять в системах вентиляции и кондиционирования, осушителях, климатических камерах, автомобильных поделках, даталоггерах, регуляторах влажности, метеорологических станциях и тому подобном - тут уж как подскажет ваша фантазия.
Диапазон питания датчика составляет +3.3...+5.5В, поэтому его можно с успехом использовать с трехвольтовыми Arduino и конструировать довольно компактные и малопотребляющие конструкции - например, при помощи Freeduino Pro Mini. Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В не должна превышать 100 см.
Очень полезные ваши статьи ) нравится
ОтветитьУдалитьа не подскажите этот датчик тоже нельзя использовать в одной сети с DS18B20
может быть если по очереди их опрашивать будет срабатывать ?
в общем буду пробовать
Да, с DHT-22 та же ситуация, что и с DHT-11 - они не имеют собственного внутреннего уникального идентификатора (как у DS18B20), на подключение каждого такого датчика надо потратить один пин Arduino.
Удалить