Как подключить dht11 и dht22 к ардуино
Содержание:
- Объяснение программы для Raspberry Pi
- Unified Sensor Drivers
- Display Humidity and Temperature on the Serial Monitor
- Сравнение датчиков DHT11, DHT22 и DHT21
- Changes to the original library:
- DHT11 на Ардуино Уно
- Installing the required Arduino libraries
- Example code for DHT11 and DHT22/AM2302 temperature and humidity sensor with I2C LCD and Arduino
- Dewpoint tables
- Installing Libraries
- Код программы
- Устройство датчиков и схема подключения к Ардуино
- Принципы измерения температуры и влажности с помощью датчика DHT11
- Датчики температуры и влажности DHT11 и DHT22 и Arduino
Объяснение программы для Raspberry Pi
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В программе нам необходимо считывать значения температуры и влажности с датчика DHT11 и отображать их на экране ЖК дисплея. Поскольку мы уже скачали и установили библиотеки для работы с датчиком DHT11 и ЖК дисплеем, то код нашей программы в этом случае значительно упрощается.
В программе нам первым делом необходимо подключить (импортировать) используемые нами библиотеки.
Python
import time #import time for creating delay
import Adafruit_CharLCD as LCD #Import LCD library
import Adafruit_DHT #Import DHT Library for sensor
1 |
importtime#import time for creating delay importAdafruit_CharLCD asLCD#Import LCD library importAdafruit_DHT#Import DHT Library for sensor |
Далее нам необходимо объявить используемые переменные и контакты. Переменная sensor_name у нас будет ассоциирована со значением Adafruit_DHT.DHT11 поскольку в нашем проекте мы используем датчик DHT11. К контакту GPIO 17 у нас подключен выход датчика DHT11.
Python
sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor
sensor_pin = 17 #The sensor is connected to GPIO17 on Pi
1 |
sensor_name=Adafruit_DHT.DHT11#we are using the DHT11 sensor sensor_pin=17#The sensor is connected to GPIO17 on Pi |
Аналогичным образом мы объявим контакты, к которым подключен ЖК дисплей. В нашем проекте мы подключили его в 4-битном режиме, поэтому мы используем 4 контакта для передачи данных дисплею и 2 контакта для управления его работой. Также, если вы хотите управлять фоновой подсветкой дисплея, для этого необходимо будет подключить дополнительные контакты дисплея.
Python
lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
lcd_backlight = 0 #LED is not connected so we assign to 0
1 |
lcd_rs=7#RS of LCD is connected to GPIO 7 on PI lcd_en=8#EN of LCD is connected to GPIO 8 on PI lcd_d4=25#D4 of LCD is connected to GPIO 25 on PI lcd_d5=24#D5 of LCD is connected to GPIO 24 on PI lcd_d6=23#D6 of LCD is connected to GPIO 23 on PI lcd_d7=18#D7 of LCD is connected to GPIO 18 on PI lcd_backlight=#LED is not connected so we assign to 0 |
Также, если хотите, вы можете подключить ЖК дисплей к плате Raspberry Pi в 8-битном режиме, но тогда количество свободных контактов платы будет меньше.
Библиотека для работы с ЖК дисплеем от компании Adafruit, которую мы скачали и установили, может работать с любыми ЖК дисплеями, поэтому в нашем проекте для данной библиотеки необходимо указать количество строк и столбцов нашего ЖК дисплея.
Python
lcd_columns = 16 #for 16*2 LCD
lcd_rows = 2 #for 16*2 LCD
1 |
lcd_columns=16#for 16*2 LCD lcd_rows=2#for 16*2 LCD |
После этого мы можем инициализировать ЖК дисплей с помощью следующей команды:
Python
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library
1 |
lcd=LCD.Adafruit_CharLCD(lcd_rs,lcd_en,lcd_d4,lcd_d5,lcd_d6,lcd_d7, lcd_columns,lcd_rows,lcd_backlight)#Send all the pin details to library |
Вначале работы программы мы покажем на экране ЖК дисплея (на второй строчке – для этого используется символ \n) небольшое приветственное сообщение и затем после задержки 2 секунды приступим к выполнению основной программы.
Python
lcd.message(‘DHT11 with Pi \n -CircuitDigest’) #Give a intro message
time.sleep(2) #wait for 2 secs
1 |
lcd.message(‘DHT11 with Pi \n -CircuitDigest’)#Give a intro message time.sleep(2)#wait for 2 secs |
Бесконечный цикл в нашей программе мы будем формировать с помощью команды:
Python
while 1: #Infinite Loop
1 | while1#Infinite Loop |
В этом цикле мы каждые 2 секунды будем считывать значения температуры и влажности с выхода датчика и отображать их на экране ЖК дисплея.
Для считывания значений температуры и влажности с датчика DHT11 мы будем использовать функцию humidity, temperature = Adafruit_DHT.read_retry(sensor_name, sensor_pin). Считанные значения мы будем отображать на экране ЖК дисплея с помощью следующего фрагмента кода:
Python
lcd.clear() #Clear the LCD screen
lcd.message (‘Temp = %.1f C’ % temperature) # Display the value of temperature
lcd.message (‘\nHum = %.1f %%’ % humidity) #Display the value of Humidity
time.sleep(2) #Wait for 2 sec then update the values
1 |
lcd.clear()#Clear the LCD screen lcd.message(‘Temp = %.1f C’%temperature)# Display the value of temperature lcd.message(‘\nHum = %.1f %%’%humidity)#Display the value of Humidity time.sleep(2)#Wait for 2 sec then update the values |
Unified Sensor Drivers
The following drivers are based on the Adafruit Unified Sensor Driver:
Accelerometers
- Adafruit_ADXL345
- Adafruit_LSM303DLHC
- Adafruit_MMA8451_Library
Gyroscope
Adafruit_L3GD20_U
Light
- Adafruit_TSL2561
- Adafruit_TSL2591_Library
Magnetometers
- Adafruit_LSM303DLHC
- Adafruit_HMC5883_Unified
Barometric Pressure
- Adafruit_BMP085_Unified
- Adafruit_BMP183_Unified_Library
Humidity & Temperature
DHT-sensor-library
Humidity, Temperature, & Barometric Pressure
Adafruit_BME280_Library
Orientation
Adafruit_BNO055
All in one device
- Adafruit_LSM9DS0 (accelerometer, gyroscope, magnetometer)
- Adafruit_LSM9DS1 (accelerometer, gyroscope, magnetometer)
Display Humidity and Temperature on the Serial Monitor
Before you can use the DHT11 on the Arduino, you’ll need to install the DHTLib library. It has all the functions needed to get the humidity and temperature readings from the sensor. It’s easy to install, just download the DHTLib.zip file below and open up the Arduino IDE. Then go to Sketch>Include Library>Add .ZIP Library and select the DHTLib.zip file.
After it’s installed, upload this example program to the Arduino and open the serial monitor:
You should see the humidity and temperature readings displayed at one second intervals.
If you don’t want to use pin 7 for the data signal, you can change the pin number in line 5 where it says .
Сравнение датчиков DHT11, DHT22 и DHT21
На сегодняшний день существует множество датчиков и модулей, которые можно использовать для измерения температуры и прочих показателей, связанных с поддержанием оптимальной жизнедеятельности человека, а также других вещей и организмов.
Их можно использовать в самых простых метеостанциях, в различных системах контроля за климатом и в умном доме, для поддержания необходимой температуры в помещениях, на производстве и во многих других случаях.
Датчики семейства DHT являются самыми популярными в кругу ардуинщиков. Важными критериями здесь являются простота в использовании и написании программного кода, да и относительно недорогая стоимость.
В семействе DHT выделяют три самых распространенных датчика: DHT11, DHT22 и DHT21.
Состоят они из термистора и емкостного датчика влажности. Цифровой сигнал, исходящий от чипа, находящегося внутри датчика, позволяет считывать температуру и влажность воздуха, а уже затем мы можем выводить эти значения в монитор порта или на дисплей, обрабатывать их и т.д.
Подключаются данные модули очень просто – с помощью трех контактов (два из которых отвечают за питание, а третий подключается к цифровому выходу на плате).
Сразу возникает вопрос: а какой датчик лучше применять? Ведь они различаются по своим характеристикам и ценам. Как выбрать необходимый модуль именно для вашего проекта и с правильным соотношением “цена-качество”? Давайте разбираться. Начнем с небольшого обзора.
DHT21 имеет несколько другой вид.
Отличие этого модуля от первых двух заключается в том, что он имеет защитный корпус, что позволяет использовать его на улице, где этот корпус защитит его от пыли, грязи и дождя.
Теперь сравним модули по основным показателям.
Датчик DHT11:
- определение влажности в диапозоне 20-80% с точностью ±5% RH
- определение температуры от 0°C до +50°C с точностью ±2 °C
- частота опроса 1 раз в секунду
Датчик DHT22:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +125°C с точностью ±0.5℃
- частота опроса 1 раз в 2 секунды
Датчик DHT21:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +80°C с точностью ±0.5°C
Сравнивая цены на данные модули, можно сразу выделить низкую цену на датчик DHT11. Стоит он, как правило, в районе 100-200 рублей – это связано с высоким спросом на данные модули и с их простым устройством.
DHT21 и DHT22 на фоне первого легко можно отнести к более дорогим: цена на них обычно колеблется в районе 300-400 рублей (то есть в 2-3 раза дороже).
Связано это с большей точностью показаний, большим диапазоном в измерении температур, к тому же у датчика DHT22 есть защитный корпус, который предохраняет его от загрязнения и влаги, что тоже играет весомую роль в составлении цены.
В связи с этим стоит подумать, а так ли вам надо переплачивать за защитный корпус, если применение вашего датчика ограничивается, к примеру, лишь комнатой?
Наиболее оптимальным датчиком для домашней метеостанции будет DHT11, поскольку он дешевле, занимает меньше места, надежен и прост в эксплуатации и не требует от создателя измерять рекордно низкие или высокие температуры, поддерживая стабильность на протяжении долгого времени.
Если же вам необходимо измерять отрицательную температуру или повысить точность и частоту результатов, то воспользуйтесь датчиком DHT22.
Надеемся, что статья была полезной и помогла вам в выборе необходимого модуля в управлении климатом. Удачной всем компиляции и следите за нашим блогом!
DHT22 и Arduino – схема подключенияПодключение кнопки к Arduino
Changes to the original library:
- 2017-12-12: Renamed DHT class to DHTesp and filenames from dht.* to DHTesp.* to avoid conflicts with other libraries — beegee-tokyo, beegee@giesecke.tk.
- 2017-12-12: Updated to work with ESP32 — beegee-tokyo, beegee@giesecke.tk.
- 2017-12-12: Added function computeHeatIndex. Reference: Adafruit DHT library.
- 2017-12-14: Added function computeDewPoint. Reference: idDHTLib.
- 2017-12-14: Added function getComfortRatio. Reference: libDHT. (References about Human Comfort invalid)
- 2018-01-02: Added example for multiple sensors usage.
- 2018-01-03: Added function getTempAndHumidity which returns temperature and humidity in one call.
- 2018-01-03: Added retry in case the reading from the sensor fails with a timeout.
- 2018-01-08: Added ESP8266 (and probably AVR) compatibility.
- 2018-03-11: Updated DHT example
- 2018-06-19: Updated DHT example to distinguish between ESP8266 examples and ESP32 examples
- 2018-07-06: Fixed bug in ESP32 example
- 2018-07-17: Use correct field separator in keywords.txt
- 2019-03-22: Fixed auto detection problem
- 2019-07-31: Make getPin() public, Updated ESP8266 example
- 2019-10-01: Using noInterrupts() & interrupts() instead of cli and sei
- 2019-10-05: Reduce CPU usage and add decimal part for DHT11 (thanks to Swiftyhu)
- 2019-10-06: Back to working version by removing the last commit
- 2021-02-20: Fix negative temperature problem (credits @helijunky)
DHT11 на Ардуино Уно
Помимо самой платы и датчика, чтобы подключить к Ардуино DHT11 в версии без обвязки, требуется предварительно подготовить следующие комплектующие:
- макетную плату;
- резистор — подойдет номиналом в десять кОм;
- светодиоды.
Нумерация контактов происходит справа, если само устройство располагается «ножками» вниз:
- Питание (VCC).
- Вывод (DATA).
- Контакт, который не используется (NC).
- Заземление (GND).
Чтобы на Arduino датчик влажности корректно работал, резистор впаивается между первым и вторым контактом.
Когда речь идет о уже готовом модуле для Ардуино, подключается он значительно проще:
- VCC присоединяется к +5 В. Рекомендуется использовать питание именно в 5 В, так как в этом случае датчик можно расположить на расстоянии в двадцать метров от источника. Если питание минимально — то есть равно 3.3 В, длина кабеля не может превышать метра или же измерения окажутся некорректными;
- отмеченный GND — к земле;
- третий присоединяется к свободному пину, имеющемуся на плате, а номер пина указывается в скетче. Он необходим для обеспечения связи с микроконтроллером.
Важным моментом при подключении датчика является строгое соблюдение полярности. Если этим аспектом пренебречь, то устройство выйдет из строя, а пластиковый корпус может даже оплавиться от перегрева.
Предпочтительным вариантом подключения одиннадцатой версии или DHT22 к Arduino является второй пин — в этом случае программирование будет осуществляться по приведенному скетчу. Изменение пина требует внесения определенных правок в код.
Installing the required Arduino libraries
The code below uses the Adafruit DHT sensor library which you can download here on GitHub. This library only works if you also have the Adafruit Unified Sensor library installed, which is also available on GitHub.
You can also download the two libraries by clicking on the buttons below:
DHT-sensor-library-master.zip
Adafruit_Sensor-master.zip
You can install the library by going to Sketch > Include Library > Add .ZIP Library in the Arduino IDE.
Another option is to navigate to Tools > Manage Libraries… or type Ctrl + Shift + I on Windows. The Library Manager will open and update the list of installed libraries.
You can search for ‘dht’ and ‘adafruit unified sensor’ and look for the library by Adafruit. Select the latest version and then click Install.
Example code for DHT11 and DHT22/AM2302 temperature and humidity sensor with I2C LCD and Arduino
By combining a temperature and humidity sensor with a small LCD, you can create a cheap weather station.
In the following example, I will be using an I2C character LCD like this one from Amazon. You can read more about using an I2C LCD with Arduino in the article below:
How to control a character I2C LCD with Arduino
If you have a normal LCD without an I2C backpack, check out the tutorial below:
How to use a 16×2 character LCD with Arduino
You will need to make some extra connections to the Arduino so we can control the 16×2 character LCD. The DHT11 or DHT22/AM2302 sensor is connected in the same way as before.
The wiring diagram below shows you how to connect an I2C LCD to the Arduino.
DHT11 temperature and humidity sensor with 16×2 I2C character LCD and Arduino wiring diagram
The connections are also given in the following table:
I2C LCD Connections
I2C LCD | Arduino |
---|---|
GND | GND |
VCC | 5 V |
SDA | A4 |
SCL | A5 |
If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location. An Arduino UNO with the R3 layout (1.0 pinout), also has the SDA (data line) and SCL (clock line) pin headers close to the AREF pin. Check the table below for more details.
Board | SDA | SCL |
---|---|---|
Arduino Uno | A4 | A5 |
Arduino Nano | A4 | A5 |
Arduino Micro | 2 | 3 |
Arduino Mega 2560 | 20 | 21 |
Arduino Leonardo | 2 | 3 |
Arduino Due | 20 | 21 |
I2C pin locations for different Arduino boards
The code uses the LiquidCrystal_I2C library, which you can download here on GitHub. It also includes the Wire.h library, which allows you to communicate with I2C devices. This library should come pre-installed with the Arduino IDE.
LiquidCrystal_I2C-master.zip
The code below is mostly the same as before, but now we display the temperature and humidity on the LCD instead of the Serial Monitor.
You can copy the code by clicking on the button in the top right corner of the code field.
/* Arduino example code for DHT11, DHT22/AM2302 and DHT21/AM2301 temperature and humidity sensors with I2C LCD. More info: www.www.makerguides.com */ // Include the libraries: #include <Adafruit_Sensor.h> #include <DHT.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> // Set DHT pin: #define DHTPIN 2 // Define SDA and SCL pin for LCD: #define SDAPin A4 // Data pin #define SCLPin A5 // Clock pin // Set DHT type, uncomment whatever type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Initialize DHT sensor for normal 16mhz Arduino: DHT dht = DHT(DHTPIN, DHTTYPE); // Connect to LCD via I2C, default address 0x27 (A0-A2 not jumpered): LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); //Change to (0x27,20,4) for 2004 LCD void setup() { // Setup sensor: dht.begin(); // Initiate the LCD: lcd.init(); lcd.backlight(); } void loop() { // Wait a few seconds between measurements: delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) // Read the humidity in %: float h = dht.readHumidity(); // Read the temperature as Celsius: float t = dht.readTemperature(); // Read the temperature as Fahrenheit: float f = dht.readTemperature(true); // Compute heat index in Fahrenheit (default): float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius: float hic = dht.computeHeatIndex(t, h, false); // Print the temperature and the humidity on the LCD: lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(t); lcd.print(" " "\xDF" "C"); lcd.setCursor(0, 1); lcd.print("Humid: "); lcd.print(h); lcd.print(" %"); }
You should see the following output on the LCD:
(Coming soon)
Dewpoint tables
Dew Point (°F) | Dew Point (°C) | Description |
---|---|---|
Below 55°F | (13°C) | Air Feels Dry |
55 ~ 60°F | (13°C) ~ (16°C) | Air Feels Comfortable |
60 ~ 64°F | (16°C) ~ (18°C) | Air Fairly Humid |
65 ~ 69°F | (18°C) ~ (21°C) | Humid |
70 ~ 75°F | (21°C) ~ (24°C) | Very Humid |
Above 75°F | (24°C) | Oppressive |
[sources http://www.livescience.imwcom/43269-what-is-dew-point.html,
http://www.theweatherprediction.com/habyhints/190/, video 2]
1. Vince Condella : Humidity vs Dew point.
What is the difference between RH and the Dew point? with easy to understand
props.
2. NWS Chicago Humidity vs Dew point.
This video shows visually (and with some numbers) what the difference is and
shows why an RH of 100% at 55°F feels better than an RH of 50% at 95°F.
3. Mike Hermann Humidity: Relative and absolute.
The water content of air changes with temperature and hotter air can contain
more water than colder air.
Absolute humidity : e.g. 5g/m3
Relative humidity : More commonly used in weather reports — it compares
amount of vapor to the maximum it can hold (the dew point). Relative humidity
changes with temperature.
Installing Libraries
To read from the DHT sensor, we’ll use the DHT library from Adafruit. To use this library you also need to install the Adafruit Unified Sensor library. Follow the next steps to install those libraries.
Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.
Search for “DHT” on the Search box and install the DHT library from Adafruit.
After installing the DHT library from Adafruit, type “Adafruit Unified Sensor” in the search box. Scroll all the way down to find the library and install it.
After installing the libraries, restart your Arduino IDE.
Код программы
После того как вы собрали тестовый стенд для испытаний датчика, вам потребуется скачать библиотеку DHT11 и подключить к среде разработки Arduino IDE, скачать библиотеку можно по этой ссылке. Как установить библиотеку, мы уже рассказывали в статье Установка и подключение библиотек.
Далее нужно загрузить скетч (см. ниже) через Arduino IDE на плату, и тогда мы уже сможем считывать показания датчиков и получим температуру и влажность окружающей среды. Т.е., подключив Ардуино к компьютеру и выбрав вашу плату и порт, заливаем скетч:
#include <dht11.h> dht11 DHT; //Вывод данных DHT11 подключен к ноге 4 #define DHT11_PIN 4 void setup() { Serial.begin(9600); //Запускаем отладочный порт int check; Serial.print("DHT11 STATUS – \t"); //Состояние датчика check = DHT.read(DHT11_PIN); //запрашиваем состояние //Выводим результат switch (check) { case DHTLIB_OK: //Датчик готов к работе Serial.print("OK\n"); break; case DHTLIB_ERROR_CHECKSUM: //Ошибка контрольной суммы - проверить контакт Serial.print("Checksum error\n"); break; case DHTLIB_ERROR_TIMEOUT: //Превышено премя ожидания Serial.print("Timeout error\n"); break; default: //Библиотека не может подключиться к датчику по неизвестной причине Serial.print("Unknown error\n"); break; } } void loop() { //Вывод температуры и влажности Serial.print("Humidity is "); Serial.print(DHT.humidity,1); //Влажность Serial.print("\n"); Serial.println("Temperature is "); Serial.println(DHT.temperature,1); //Температура delay(1000); // Опрос раз в секунду }
После того как вы залили скетч, открываем последовательный монитор порта и смотрим показания датчика.
Подышав на датчик, можно отследить изменения показаний. В этом случае уровень влажности должен увеличиться. А если приложить к датчику что-нибудь горячее, температура тоже поползет вверх.
Устройство датчиков и схема подключения к Ардуино
DHT11 входит в состав приборов отслеживания влажности DHTXX. Другим датчиком в этой серии является DHT22. В результате они будут измерять как влажность, так и температуру. Хотя DHT11 дешевы и медленны, они очень популярны среди любителей и начинающих.
DHT11 состоит из 3 основных компонентов. Датчик влажности резистивного типа, термистор NTC и 8-разрядный микроконтроллер, который преобразует аналоговые сигналы и отправляет одиночный цифровой сигнал.
Схема подключения DHT11 к Ардуино
Этот цифровой сигнал может быть прочитан любым микроконтроллером или микропроцессором для дальнейшего анализа.
DHT11 состоит из 4 контактов: VCC, Data Out, Not Connected (NC) и GND. Диапазон напряжения для вывода VCC составляет от 3,5 до 5,5 В. Питание 5 В будет достаточно. Данные на выводе Data Out являются последовательными цифровыми данными.
DHT11 может измерять значение влажности в диапазоне 20-90 % относительной влажности (RH) и температуру в диапазоне 0-50 С. Период выборки составляет 1 секунду.
Все DHT11 точно калибруются в лаборатории, а результаты хранятся в памяти. Между любыми микроконтроллерами, такими как Arduino и DHT11 Sensor, может быть установлена однопроводная связь.
Кроме того, длина кабеля может достигать 20 метров. Данные состоят из целочисленных и десятичных частей, как для относительной влажности (RH), так и для температуры.
Данные от DHT11 и Ардуино датчиков движения состоят из 40 бит, и формат выглядит следующим образом:
8 бит данных для интегрального значения RH, 8 бит данных для десятичного значения RH, 8 бит данных для интегральных значений, 8 бит данных для интегрального значения температуры и 8 бит данных для контрольной суммы.
Принципы измерения температуры и влажности с помощью датчика DHT11
Функционально схема устройства состоит из 3-х основных блоков: первый блок измеряет температуру и влажность с помощью датчика DHT11, второй блок считывает эти значения с выхода датчика и преобразует их в форму, удобную для восприятия, а третий блок отображает значения влажности и температуры на ЖК дисплее. Функциональная взаимосвязь этих блоков представлена на следующем рисунке.
Работа нашей схемы будет основана на последовательной передаче данных по одиночному проводнику. Вначале Arduino передает стартовый сигнал (то есть чтобы DHT модуль начал работу) DHT модулю, а затем DHT модуль (то есть модуль измерения температуры и влажности) выдает Arduino ответный сигнал, содержащий данные о температуре и влажности. Arduino собирает эти данные, обрабатывает и передает на ЖК дисплей 16×2.
В этом проекте мы будем использовать датчик DHT11. Этот модуль способен измерять температуру и влажность и выдавать их значения на выход в виде калиброванного цифрового сигнала. Этот датчик обеспечивает высокую точность измерений, высокую надежность и стабильность измерений. Принцип действия данного датчика основан на резистивном типе измерения влажности и NTC-типе (NTC — отрицательный температурный коэффициент) измерения температуры. Данный датчик имеет встроенный 8-битный микроконтроллер, что обеспечивает ему быстрый отклик на изменения окружающей среды и приемлемую стоимость. Датчик имеет 4 выходных контакта.
Модуль DHT11 работает по принципу последовательной связи по одиночному проводнику. Этот модуль передает данные в виде последовательности импульсов с определенным периодом. Но прежде чем он начнет передавать данные ему нужно подать команду инициализации с Arduino. Весь этот процесс занимает примерно 4 мс. Процесс передачи 40 бит данных будет включать в себя:
8-bit integral RH data + 8-bit decimal RH data + 8-bit integral T data + 8-bit decimal T data + 8-bit check sum (проверочная сумма).
Датчики температуры и влажности DHT11 и DHT22 и Arduino
В статье рассмотрены основы работы с недорогими датчиками температуры и влажности серии DHT.
Эти сенсоры простые и медленные, но при этом отлично подходят для хобби-проектов на Arduino. Датчики DHT состоят из двух основных частей: ёмкостный датчик влажности и термистор. Также в корпусе установлен простенький чип для преобразования аналогового сигнала в цифровой. Считывать цифровой сигнал на выходе достаточно просто, можно использовать любой контроллер, не обязательно Arduino.
Технические характеристики DHT11 и DHT22
Существуют две версии сенсоров DHT. Выглядят они почти одинаково. Распиновка тоже одинаковая. Основные отличия – в технических характеристиках:
DHT11:
- Очень дешевый.
- Питание от 3 до 5В.
- Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
- Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. При этом точность измерений находится в диапазоне 5%.
- Измеряет температуру в диапазоне от 0 до 50 градусов с точностью плюс-минус 2%.
- Частота измерений не более 1 Гц (одно измерение в секунду).
- Размер корпуса: 15.5 мм x 12 мм x 5.5 мм.
- 4 коннектора. Расстояние между соседними – 0.1″.
DHT22:
- Дешевый.
- Питание от 3 до 5В.
- Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
- Рассчитан на измерение уровня влажности в диапазоне от 0% до 100%. При этом точность измерений находится в диапазоне 2%-5%.
- Измеряет температуру в диапазоне от -40 до 125 градусов с точностью плюс-минус 0.5 градусов по Цельсию.
- Частота измерений до 0.5 Гц (одно измерение за 2 секунды).
- Размер корпуса: 15.1 мм x 25 мм x 7.7 мм.
- 4 коннектора. Расстояние между соседними – 0.1″.
Как видите, DHT22 более точный и имеет больший диапазон измеряемых значений. Оба датчика имеют по одному цифровому выходу. Запросы к ним можно отправлять не чаще чем один в секунду или две.
Подключение датчиков DHT к Arduino
Ссылки для заказа электронного оборудования, которое использовалось в примере ниже из Китая
Подключаются датчики легко. Так как у них достаточно длинные коннекторы 0.1″, можно устанавливать их непосредственно на макетную или монтажную плату (смотрите на рисунке ниже).
Непосредственное подключение к Arduino тоже простое. На сенсоре 4 коннектора:
- Питание (VCC) – от 3 до 5 В.
- Вывод данных.
- Не подключается.
- Земля.
Коннектор 3 просто игнорируйте, он не подключается. Желательно подключить подтягивающий резистор на 10 кОм между питанием и сигналом. На Arduino есть встроенные резисторы, но их номинал 100кОм нам не подойдет.
На рисунке ниже приведена схема подключения DHT11 к Arduino. Подключите сигнал с датчика к пину 2, чтобы схема соответствовала примеру скетча, который приведен ниже. Этот пин можно изменить с соответствующими правками в коде.
Считывание данных с датчиков DHTxx
Для проверки скетча мы используем Arduino. Можно использовать любой другой микроконтроллер, который поддерживает тайминг в микросекундах.
Для начала скачайте библиотеку для работы с DHT датчиками здесь: Github. Для загрузки нажмите кнопку DOWNLOADS в верхнем правом углу.
Переименуйте папку DHT и убедитесь, что в ней есть файл dht.cpp и другие. После этого переместите папку DHT в папку arduinosketchfolder/libraries/ . Возможно вам придется создать подпапку для библиотек, если вы впервые интегрируете библиотеку. Перезагрузите Arduino IDE.
Теперь загрузите скетч: Examples->DHT->DHTtester. Выглядит программа примерно так:
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
И уберите комментарий со строки:
#define DHTTYPE DHT11 // DHT 11
Эти настройки помогают снимать правильные значения именно с вашей модели датчика. В окне серийного монитора этобудет выглядеть примерно так:
Вы должны увидеть показания температуры и влажности. Подышав на датчик, можно отследить изменения показаний. В этом случае уровень влажности должен увеличиться.
Если Вам необходимы даташиты на датчики, просмотреть и скачать их можно по ссылкам:
Datasheet DHT11
Datasheet DHT22