Здравствуйте. Добро пожаловать на мой личный магазин

Датчики температуры и влажности DHT11 и DHT22

DHT11 - вид спередиDHT11/DHT22 — довольно известные датчики для определения относительной влажности и температуры, состоят из емкостного датчика влажности и термистора. Также, датчик содержит в себе АЦП для преобразования аналоговых значений влажности и температуры. Эти цифровые датчики основаны на протоколе, который для связи использует один провод/шину с открытым коллектором, поэтому обязательна подтяжка резистором 5-10кОм к плюсу питания. Основное различие между DHT11 и DHT22 заключается в том, что DHT22 имеет более высокое разрешение и более точен по сравнению с DHT11. Помимо этого, распиновка и программирование одинаковы для обоих. В этой статье рассмотрены основы процесса протокола связи датчиков DHTxx. Кроме того, обратите внимание, что протокол, используемый DHTxx, не является то же, что и 1-проводная (1-Wire/OneWire) шина Dallas Semiconductor. Содержание 1 Распиновка DHT22 и DHT11 2 Технические характеристики — DHT11 vs DHT22 3 Подключение датчиков DHT11/DHT22 к Arduino 4 Считывание данных с датчиков DHT11/DHT22 4.1 Процесс коммуникации 5 Формат данных DHT11/DHT22 6 Библиотеки и пример программы на Arduino 6.1 Пример программы — DHT_Unified_Sensor.ino 6.2 Результат 7 Материалы и Datasheet 8 Купить DHT11 и DHT22 на Aliexpress 9 Похожие записи Распиновка DHT22 и DHT11 Распиновка DHT22 и DHT11 (pinout) Выводы Описание 1 Vcc 3-5В питание 2 Data out Вывод данных 3 NC Не используется 4 GND Общий Технические характеристики — DHT11 vs DHT22 DHT11 - вид сзади Параметры DHT11 DHT22 Питание мин. 3В 3В макс. 5.5В 5.5В Потребляемый ток мин. 0.1мА 0.05мА макс. 2.5мА 2.5мА Измерение влажности мин. 20% 0% макс. 80-95% 100% точность 5% 2-5% Измерение температуры мин. 0°C -40°C макс. +50°C +80°C точность ±2°C ±0.5°C Частота измерений 1Гц 0.5Гц Расстояние между соседними 0.1″ 0.1″ Разрешение 8 бит 16 бит Подключение датчиков DHT11/DHT22 к Arduino При подключении к микроконтроллеру, вы можете между выводами Vcc и Data разместить подтягивающий (pull-up) резистор номиналом 4.7-10 кОм. Плата Arduino имеет встроенные pull-up, однако они очень слабенькие — порядка 20-150 кОм в зависимости от использованного микроконтроллера. Подключение датчиков DHT11/DHT22 к Arduino UNO Считывание данных с датчиков DHT11/DHT22 Микроконтроллер выступает в роли ведущего устройства шины и, следовательно, отвечает за инициирование связи (т. е. чтение). Датчик влажности и температуры DHT11 всегда остаётся в качестве подчиненного устройства и отвечает данными, когда MCU просит его. Протокол, используемый для связи, прост и может быть обобщен следующим образом: DHT11/DHT22 - Процесс коммуникации (protocol) Процесс коммуникации Микроконтроллер подаёт стартовый сигнал — прижимает шину к земле на 18-20 мс; После этого контроллер отпускает линию и следить за уровнем на ней, примерно 20-40 мкс; Датчик, обнаружив сигнал и подождав пока уровень снова станет высоким, сам прижимает шину к земле на 80 мкс, за это время делаются измерения и преобразование результатов; Затем DHT11 отпускает линию на 80 мкс, что указывает на то, что он готов отправить данные; Затем он отправляет 40 бит данных. Перед отправкой каждого бита датчик прижимает шину к земле на 50 мкс, за которым следует 26-28 мкс для «0» или 70 мкс для «1»; По завершении связи линия вытягивается подтягивающим резистором и переходит в состояние ожидания. DHT11/DHT22 - Процесс коммуникации (protocol) Формат данных DHT11/DHT22 Когда датчик влажности и температуры отправляет данные, он сначала отправляет MSb (Most Significant Bit) — старший значащий бит. Данные от датчика передаются в виде посылки, состоящих из 40 бит данных — это 5 байт из которых первых два влажность, следующие 2 температура и байт четности. Байт четности равен сумме предыдущих байт. 1 и 2 байт содержат соответственно целую и дробную часть информации о влажности, 3 и 4 байт содержат целую и дробную часть информации о температуре. Для датчика DHT11 2-й и 4-й байты всегда ноль. Значение этих байтов заключается в следующем: 1-й байт: относительная влажность — целая часть в %; 2-й байт: десятая часть относительной влажности в % (ноль для DHT11); 3-й байт: целая часть температуры в °C; 4-й байт: десятая часть температуры в °C (ноль для DHT11); 5-й байт: контрольная сумма (последние 8 бит {1-й байт + 2-й байт + 3-й байт + 4-й байт}) Библиотеки и пример программы на Arduino Для работы с датчиками я использую библиотеки от Adafruit, а именно: Adafruit Unified Sensor Library и DHT Sensor Library. Пример программы — DHT_Unified_Sensor.ino // DHT Temperature & Humidity Sensor // Unified Sensor Library Example // Written by Tony DiCola for Adafruit Industries // Released under an MIT license. // Depends on the following Arduino libraries: // - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library #include #include #include #define DHTPIN 2 // Pin which is connected to the DHT sensor. // Uncomment the type of sensor in use: #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // See guide for details on sensor wiring and usage: // https://learn.adafruit.com/dht/overview DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; void setup() { Serial.begin(9600); // Initialize device. dht.begin(); Serial.println("DHTxx Unified Sensor Example"); // Print temperature sensor details. sensor_t sensor; dht.temperature().getSensor(&sensor); Serial.println("------------------------------------"); Serial.println("Temperature"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" *C"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" *C"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" *C"); Serial.println("------------------------------------"); // Print humidity sensor details. dht.humidity().getSensor(&sensor); Serial.println("------------------------------------"); Serial.println("Humidity"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println("%"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println("%"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println("%"); Serial.println("------------------------------------"); // Set delay between sensor readings based on sensor details. delayMS = sensor.min_delay / 1000; } void loop() { // Delay between measurements. delay(delayMS); // Get temperature event and print its value. sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { Serial.println("Error reading temperature!"); } else { Serial.print("Temperature: "); Serial.print(event.temperature); Serial.println(" *C"); } // Get humidity event and print its value. dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { Serial.println("Error reading humidity!"); } else { Serial.print("Humidity: "); Serial.print(event.relative_humidity); Serial.println("%"); } }

Написать отзыв

Внимание: HTML не поддерживается! Используйте обычный текст.
           

  Последние статьи

Датчики температуры и влажности DHT11 и DHT22

DHT11 - вид спередиDHT11/DHT22 — довольно известные датчики дл..