Htu21d temperature and rh sensor

HTU21D Overview

The HTU21D is a low-cost, easy to use, highly accurate, digital humidity sensor. All you need is two lines for I2C communication and you’ll have relative humidity readings such as “45.2%” or “23.1%” and very accurate temperature readings as a bonus!

SparkFun Humidity and Temperature Sensor Breakout — HTU21D

SEN-12064

10

Retired

15

Things you should know about this sensor:

  • Uses the I2C interface
  • Typical humidity accuracy of ±2%
  • Typical temperature accuracy of ±0.3C
  • Operates from 0 to 100% humidity but this sensor isn’t recommended for harsh environments where it could come in contact with water (such as rain).
  • 3.3V sensor — use inline logic level converters or 10k resistors to limit 5V signals
  • Here’s the datasheet
  • Only one HTU21D sensor can reside on the I2C bus at a time

This sensor is ideal for environmental sensing and data logging. Perfect for a weather station or humidor control system. It is a very good replacement for digital humidity sensors such as the SHT15, SHT21, SHT25, HIH-4030, HIH6130 and capacitive humidity sensors such as the HH10D.

Считывание данных с датчиков DHT11/DHT22

Микроконтроллер выступает в роли ведущего устройства шины и, следовательно, отвечает за инициирование связи (т. е. чтение). Датчик влажности и температуры DHT11 всегда остаётся в качестве подчиненного устройства и отвечает данными, когда MCU просит его. Протокол, используемый для связи, прост и может быть обобщен следующим образом:

Процесс коммуникации

  1. Микроконтроллер подаёт стартовый сигнал — прижимает шину к земле на 18-20 мс;
  2. После этого контроллер отпускает линию и следить за уровнем на ней, примерно 20-40 мкс;
  3. Датчик, обнаружив сигнал и подождав пока уровень снова станет высоким, сам прижимает шину к земле на 80 мкс, за это время делаются измерения и преобразование результатов;
  4. Затем DHT11 отпускает линию на 80 мкс, что указывает на то, что он готов отправить данные;
  5. Затем он отправляет 40 бит данных. Перед отправкой каждого бита датчик прижимает шину к земле на 50 мкс, за которым следует 26-28 мкс для «0» или 70 мкс для «1»;
  6. По завершении связи линия вытягивается подтягивающим резистором и переходит в состояние ожидания.

Ардуино код для Мастера

Код для нашего ведущего Ардуино (т.е. мастера):

Разбираем код Мастера

QNH — авиационный термин. Это один из факторов коррекции, который при применении к альтиметру позволит ему точно считывать высоту над уровнем моря в текущем местоположении.

Варьируется ото дня ко дню и даже от часа к часу. Пилоты должны устанавливать этот коэффициент каждый раз при полете для калибровки своих альтиметров. Если пилоты не могут этого добиться, например, во время полета над океаном, они все используют 1013, то все их высотомеры считывают используя один и тот же эталон. Это позволяет им летать на разных высотах, чтобы избежать столкновения. Его можно получить на погодных сайтах.

Например, вот для Кейптауна — см. ссылку.

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

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

Устанавливает уровень мощности передатчика. Высокий уровень может вызвать проблемы с нестабильностью, если питание 3,3 В осуществляется по длинным проводам. Лучше всего вставить через него конденсатор 100 мкФ, но для более долгого срока службы батареи лучше использовать низкочастотный конденсатор.

Говорит модулю вести себя как передатчик и наоборот:

говорит ему вести себя как приемник.

Передаваемые данные выводятся локально на последовательный монитор (если он подключен), а также передаются на приемник.

Строки:

посылают символ степени на последовательный монитор (для некоторых ПК это может отличаться).

Если вы используете ЖК-дисплей, вы можете сделать это с помощью:

Наконец, передает содержимое массива данных

Обратите внимание, что ему необходимо знать, сколько байт отправить и получит это

Hooking It Up

Wiring up the HTU21D humidity sensor is very easy! We recommend soldering four male headers to the breakout board and using the HTU21D in a breadboard.

Connections: Breakout board to Arduino

  • VCC → 3.3V
  • GND → GND
  • SDA → A4
  • SCL → A5

There are only four pins that need to be hooked up in order to start using this sensor in a project. One for VCC, one for GND, and two data lines for I2C communication. On an Arduino board connect the SDA pin on the breakout board to A4 and SCL to A5. If you have a newer Arduino, you can connect the SDA and SCL lines directly to the SDA and SCL lines broken out on the Arduino headers.

This board runs at 3.3V. Be sure to power the board from the 3.3V pin! Because I2C is an open drain signal, there’s no need to worry about level shifting the signal; the 3.3V signal will be adequate to communicate with the Arduino and the signal will never reach a dangerous level for the pins on the HTU21D.

Как правильно подключить ESP8266

Если вы планируете заниматься с ESP8266 больше, чем один вечер, то вам потребуется вариант подключения, обеспечивающий более высокую стабильность. Ниже приводятся две схемы подключения: с поддержкой автозагрузки прошивки из Arduino IDE, UDK, Sming и без нее.

Схема подключения ESP8266 (без автозагрузки прошивки, прошиваемся предварительно установив перемычку BURN и перезагрузив модуль)

Схема подключения с поддержкой автозагрузки прошивки из Arduino IDE, UDK, Sming. Для Flash Download Tool и XTCOM_UTIL, возможно, потребуется отключение RTS/DTR. Если RTS и DTR вам отключать неудобно, то можно добавить в схему перемычки

На этих схемах не показано подключение ADC и свободных GPIO — их подключение будет зависеть от того, что вы захотите реализовать, но если хотите стабильности, то не забудьте притянуть все GPIO к питанию (pullup), а ADC к земле (pulldown) через подтягивающие резисторы.

Резисторы на 10k могут заменены на другие от 4,7k до 50k, за исключением GPIO15 — его номинал должен быть до 10k. Номинал конденсатора, который сглаживает высокочастотные пульсации, может быть другим.

Соединение RESET и GPIO16 через резистор deep sleep на 470 Ом вам потребуется, если вы будете использовать режим deep sleep: для выхода из режима глубокого сна модуль перезагружает сам себя, подавая низкий уровень на GPIO16. Без этого соединения глубокий сон будет вечным для вашего модуля.

На первый взгляд на этих схемах кажется, что GPIO0, GPIO2, GPIO15, GPIO1 (TX), GPIO3 (RX) заняты и вы не можете их использовать для своих целей, но это не так. Высокий уровень на GPIO0 и GPIO2, низкий на GPIO15 требуются только для старта модуля, а в последующем вы можете использовать их по своему усмотрению, только не забудьте обеспечить требуемые уровни до перезагрузки модуля.

Можно использовать и TX, RX как GPIO1 и GPIO3 соответственно, не забывая о том, что при старте модуля любая прошивка будет дергать TX, отправляя отладочную информацию в UART0 на скорости 74480, но после успешной загрузки вы можете использовать их не только как UART0 для обмена данными с другим устройством, но и как обычные GPIO.

Для модулей, имеющих меньшее количество разведенных пинов, как например, ESP-01 подключение неразведенных пинов не требуется, т.е. на ESP-01 разведены только: VCC, GND, GPIO0, GPIO2, CH_PD и RESET — вот только их и подтягиваете. Нет никакой необходимости припаиваться прямо к микросхеме ESP8266EX и притягивать неразведенные пины, только если вам это действительно необходимо.

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

Внимание!

Правильным будет сказать вам, что не существует идеальной и в тоже время универсальной схемы подключения ESP8266. Все дело в том, что очень многое зависит от прошивки, которую вы собираетесь туда залить. Вышеприведенные схемы рассчитаны на новичков, которые только начинают осваивать ESP8266, для экспериментов. Для реальных проектов, возможно, вам придется немного изменить схему. Например, для прошивки TCP2UART нужно подключить RTS к GPIO15, а CTS к GPIO13

Также в реальных проектах рекомендую уделить особое внимание питанию

Примеры работы

Рассмотрим примеры работы датчика температуры и влажности DHT-21 в зависимости от управляющей платформы.

Пример для Arduino

testDHT.ino
// библиотека для работы с датчиками серии DHT
#include <TroykaDHT.h>
// создаём объект класса DHT
// передаём номер пина к которому подключён датчик и тип датчика
// типы сенсоров: DHT11, DHT21, DHT22
DHT dht(4, DHT21);
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);
  dht.begin();
}
 
void loop()
{
  // считывание данных с датчика
  dht.read();
  // проверяем состояние данных
  switch(dht.getState()) {
    // всё OK
    case DHT_OK
      // выводим показания влажности и температуры
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureC());
      Serial.println(" C \t");
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureK());
      Serial.println(" K \t");
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureF());
      Serial.println(" F \t");
      Serial.print("Humidity = ");
      Serial.print(dht.getHumidity());
      Serial.println(" %");
      break;
    // ошибка контрольной суммы
    case DHT_ERROR_CHECKSUM
      Serial.println("Checksum error");
      break;
    // превышение времени ожидания
    case DHT_ERROR_TIMEOUT
      Serial.println("Time out error");
      break;
    // данных нет, датчик не реагирует или отсутствует
    case DHT_ERROR_NO_REPLY
      Serial.println("Sensor not connected");
      break;
  }
 
  // ждём две секунды
  delay(2000);
}

Пример для Iskra JS

Выведем данные температуры и влажности в консоль Espruino Web IDE.

test-dht.js
// подключаем библиотеку DHT22 для работы с датчиком DHT21 и создаём объект для работы с датчиком
var dht = require("DHT22").connect(P4);
 
// считываем данные с датчика
// выводим показания температуры и влажности в консоль
dht.read(function (a) {
  console.log("Temp is "+a.temp.toString()+" and RH is "+a.rh.toString());
});

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки – RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

SerialFlow rd(9,10);

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

rd.setPacketFormat(2, 1);

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент  – количество чисел.

Далее нужно настроить адреса передатчика и приемника:

rd.begin(0xF0F0F0F0E1LL,0xF0F0F0F0D2LL);

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

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

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

rd.begin(0xF0F0F0F0D2LL,0xF0F0F0F0E1LL);

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

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

Помимо библиотек RF24 и SerialFlow существует и другая – библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; – задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); – выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); – выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) &data); – чтение полученных пакетов в переменную data.
  • send((byte *) &data); – подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

Библиотека OneWire для работы с DS18B20

DS18B20 использует для обмена информацией с ардуино протокол 1-Wire, для которого уже написана отличная библиотека. Можно и нужно использовать ее, чтобы не реализовывать все функции вручную. Скачать OneWire можно здесь. Для установки библиотеки скачайте архив, распакуйте в папку library вашего каталога Arduino. Подключается библиотека с помощью команды #include <OneWire.h>

Основные команды библиотеки OneWire:

  • search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
  • reset_search() – производится поиск на первом приборе.
  • reset() – выполнение сброса шины перед тем, как связаться с устройством.
  • select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
  • write(byte) – производится запись байта информации на устройство.
  • write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
  • read() – чтение байта информации с устройства.
  • crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.

Важно правильно настроить режим питания в скетче. Для паразитного питания в строке 65 нужно записать ds.write(0x44, 1);

Для внешнего питания в строке 65 должно быть записано ds.write(0x44).

Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:

  • 0x44 – измерить температуру, записать полученное значение в SRAM.
  • 0x4E – запись 3 байта в третий, четвертый и пятый байты SRAM.
  • 0xBE – последовательное считывание 9 байт SRAM.
  • 0х48 – копирование третьего и четвертого байтов SRAM в EEPROM.
  • 0xB8 – копирование информации из EEPROM в третий и четвертый байты SRAM.
  • 0xB4 – возвращает тип питания (0 – паразитное, 1 – внешнее).

Скетч для работы с датчиками DHT11 и DHT22 в Arduino

#include "DHT.h"
#define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше
// Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino
DHT dht(DHTPIN, DHT22); //Инициация датчика
//DHT dht(DHTPIN, DHT11);
void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  delay(2000); // 2 секунды задержки
  float h = dht.readHumidity(); //Измеряем влажность
  float t = dht.readTemperature(); //Измеряем температуру
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Ошибка считывания");
    return;
  }
  Serial.print("Влажность: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Температура: ");
  Serial.print(t);
  Serial.println(" *C "); //Вывод показателей на экран
}

После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов.
Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.

На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.

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

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

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

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

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

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

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

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

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

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

Introduction: Detect Temperature and Humidity With Raspberry Pi and HTU21 / SHT21

By leon-anavianavi.orgFollow

More by the author:

About: Software engineer and open source enthusiast

More About leon-anavi »

Wondering what’s the weather? Let’s check it out with your Raspberry Pi! This tutorial provides step by step instructions how to detect temperature and humidity with the dirt cheap I2C sensor HTU21D and open source code on your Raspberry Pi.

If the embedded video does not appear on your mobile device, here is an alternative link. If you like this tutorial, please subscribe to my YouTube channel, give a star to the project in GitHub and have a look at my Instructables and videos.

Step 1: Getting Ready

For this tutorial you need the following hardware components:

  • Raspberry Pi (any model or version)
  • HTU21 module
  • Breadboard
  • Male to female jumper wires (x4)
  • microSD card with Raspian GNU/Linux distribution
  • Power supply

HTU21 (or SHT21) modules are popular for hobby electronics. In general they are available for less than 5 USD per unit.

I have a couple modules here. They have different colors but the sensor is actually absolutely the same on both modules. Beware that the other physical difference is the position of the lines for data and clock. I am going to use the blue HTU21D module for the rest of the tutorial.

Примеры работы

Рассмотрим примеры работы датчика температуры и влажности DHT11 в зависимости от управляющей платформы.

Пример для Arduino

testDHT.ino
// библиотека для работы с датчиками серии DHT
#include <TroykaDHT.h>
// создаём объект класса DHT
// передаём номер пина к которому подключён датчик и тип датчика
// типы сенсоров: DHT11, DHT21, DHT22
DHT dht(4, DHT11);
 
void setup()
{
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);
  dht.begin();
}
 
void loop()
{
  // считывание данных с датчика
  dht.read();
  // проверяем состояние данных
  switch(dht.getState()) {
    // всё OK
    case DHT_OK
      // выводим показания влажности и температуры
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureC());
      Serial.println(" C \t");
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureK());
      Serial.println(" K \t");
      Serial.print("Temperature = ");
      Serial.print(dht.getTemperatureF());
      Serial.println(" F \t");
      Serial.print("Humidity = ");
      Serial.print(dht.getHumidity());
      Serial.println(" %");
      break;
    // ошибка контрольной суммы
    case DHT_ERROR_CHECKSUM
      Serial.println("Checksum error");
      break;
    // превышение времени ожидания
    case DHT_ERROR_TIMEOUT
      Serial.println("Time out error");
      break;
    // данных нет, датчик не реагирует или отсутствует
    case DHT_ERROR_NO_REPLY
      Serial.println("Sensor not connected");
      break;
  }
 
  // ждём две секунды
  delay(2000);
}

Пример для Iskra JS

Выведем данные температуры и влажности в консоль Espruino Web IDE.

test-dht.js
// подключаем библиотеку DHT11 и создаём объект для работы с датчиком
var dht = require("DHT11").connect(P4);
 
// считываем данные с датчика
// выводим показания температуры и влажности в консоль
dht.read(function (a) {
  console.log("Temp is "+a.temp.toString()+" and RH is   "+a.rh.toString());
});

Протокол датчика DHT

Выходом датчика является цифровой сигнал. Температура и влажность передаются по одному сигнальному проводу (). DHT11 общается с принимающей стороной, такой как Arduino по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так:

  1. Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
  2. Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
  3. После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания

Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА.

Работа BMP280

BMP280 поставляется в различных типах в зависимости от того, где вы его покупаете. Имейте в виду, так как некоторые из них являются устройствами с 5 В, а некоторые — с 3.3 В. Кроме того, некоторые — SPI или I2C, а некоторые — нет. В этой статье будет использована версия I2C 3.3 В. Эта, хотя и 3 В, соответствует 5 В на выводах данных. Мы используем I2C версию, так как NRF24L01 использует шину SPI.

BMP280

Диапазон давления составляет от 300 до 1100 гПа, что примерно на 500 м ниже уровня моря до 9 км в высоту и между 950 и 1050 гПа, а точность высоты +/-1 м, что довольно неплохо. Диапазон температур составляет от 40 до 85 °C с точностью +/-1 °C и 0,5 при 25.

На некоторых устройствах адрес I2C установлен на 0x77, а на других — на 0x76. На официальном сайте Arduino есть полезный сканер адресов по этой ссылке. Если он не найдет адрес, проверьте проводку.

Подключение DHT21

Подключается к цифровому порту Arduino.
 

Для работы примера нужна правильно установленная библиотека. Библиотека и образец программы тут. Взято . Резистор 10кОм. DHT21 это тот же самый DHT22 но помещенный в корпус и названный AM2301.

Образец программы:

// Example testing sketch for various DHT humidity/temperature sensors

// Written by ladyada, public domain

#include «dht.h»

#define DHTPIN 2     // what pin we’re connected to

// Uncomment whatever type you’re using!

//#define DHTTYPE DHT11   // DHT 11 

//#define DHTTYPE DHT22   // DHT 22  (AM2302)

#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V

// Connect pin 2 of the sensor to whatever your DHTPIN is

// Connect pin 4 (on the right) of the sensor to GROUND

// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

void setup() {

  Serial.begin(9600); 

  Serial.println(«DHT21 test!»);

  dht.begin();

}

void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!

  // Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!

  if (isnan(t) || isnan(h)) {

    Serial.println(«Failed to read from DHT»);

  } else {

    Serial.print(«Humidity: «); 

    Serial.print(h);

    Serial.print(» %\t»);

    Serial.print(«Temperature: «); 

    Serial.print(t);

    Serial.println(» *C»);

  }

  delay(2000);

}

Если устройство в корпусе и содержит вспомогательные элементы (как например устройство AM2301) резистор уже не нужен. Зеленый провод на схеме — это желтый провод на устройстве.

Подключение AM2301

Датчик AM2301 — это тот же датчик DHT21 но уже с обвязкой. Для его подключения не требуется резистор. Если вы случайно подключите его с резистором ничего страшного не произойдет, просто это лишнее. Красный провод — это «+», черный провод — это «-«. Желтый провод — это сигнал, он подключается к цифровому порту Arduino.

Взято с сайта www.elecrow.com

Купить AM2301 можно тут.

Troubleshooting.

Error messages:

error: dht.h: No such file or directory

error: ‘DHT’ does not name a type

Solution: Not enough rights to library files. It is necessary to run the application arduino.exe as an administrator. Right-click on the shortcut arduino.exe and select «Run as administrator».

Протокол датчика DHT

Выходом датчика является цифровой сигнал. Температура и влажность передаются по одному сигнальному проводу (). DHT21 общается с принимающей стороной, такой как Arduino по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так:

  1. Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
  2. Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
  3. После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания

Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА.

Датчик DHT21

Цифровой датчик DHT21 является составным датчиком, который выдаёт калиброванный цифровой сигнал с показаниями температуры и влажности.

Сенсор включает в себя ёмкостной компонент измерения влажности и резистивный компонент измерения температуры с отрицательным температурным коэффициентом (NTC), которые подключены к высокопроизводительному АЦП.

Каждый датчик DHT21 проходит калибровку на заводе изготовителе. Коэффициенты калибровки хранятся в однократно программируемой энергонезависимой памяти и используются во внутренних процессах обработки сигнала.

Контакты подключения трёхпроводного шлейфа

Модуль подключается к управляющей электронике по трём проводам.
Назначение контактов 3-проводного шлейфа:

  • Питание () — красный провод. На него должно подаваться напряжение питания от 3,3 до 5 В;
  • Земля () — чёрный провод. Должен быть соединён с землёй микроконтроллера;
  • Сигнальный () — жёлтый провод. Подключается к цифровому выходу микроконтроллера. Через него сенсор общается с микроконтроллером по собственному протоколу.

Выводы по nrf24l01

Беспроводной модуль nrf24l01 нельзя назвать простым в освоении устройством. И подключение, и программирование требует определенных навыков. Но стоимость и доступность модуля позволяет рекомендовать его для тех, кто занимается проектами интернета вещей или нуждается в простых инструментов для коммуникаций. Купив специальный адаптер для nrf24l01 вы можете существенно упростить подключение к ардуино. А использование библиотек позволяет максимально упростить код. Старайтесь не покупать модули nrf24l01 дешево у совсем уж неизвестных продавцов, и тогда никаких проблем с работой ваших проектов не будет.

Итого

Неплохой датчик, его преимуществами является малые размеры (3.0×3.0x0.9 мм) и маленькое время измерения температуры (до 50 мс для 14-бит) и относительной влажности (до 16 мс при 12-бит), но для ответственных применений его конечно применять не следует, но многие любительские устройства могут быть собраны с применением
HTU21D. Плохо конечно, что только один адрес только…

Существует еще множество других цифровых датчиков температуры в этом же корпусе
DFN-6, что позволит легко заменить искомый на другой: HTU31, SHT21, SI7021, HDC2080…

Также советую ознакомится (будет полезным!):

  • Советы по проектированию печатных плат при использовании датчиков температуры поверхностного монтажа
  • Простейший фильтр значений для получения качественных показаний
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector