DHT11 DHT22 датчик вологості та температури, підключення до Arduino

DHT11 (AM2302) цифровий датчик температури та вологості. Вимірювання температури відбувається за допомогою терморезистора з негативним температурним коефіцієнтом  (NTC). Відносна вологість вимірюється ємнісним сенсором. Дитчики калібруются виробником, тому забеспечують високу стабільність та лінійність показників температури і вологості.

  • Живлення VCC 3.3 – 5V
  • Діапазон вимірювання температури від 0 °С до 50 °С
  • Діапазон вимірювання вологості від 20 % до 90 %
  • Чутливість вимірювання температури ±1 °С
  • Точність вимірювання температури ±2 °С
  • Чутливість вимірювання вологості ±4 % RH
  • Точність вимірювання вологості 5 % RH
  • Частота дискретизації 2 секунди
  • Струм споживання при вимірюванні 3.3V – 0.5mA, 5V – 1.5mA
  • Струм споживання в режимі очікування 3.3V – 100uA, 5V – 150uA

DHT22 (AM2302) цифровий датчик температури та вологості підвищеної точності. Також DHT22 збільшені діапазони вимірювання.

  • Живлення VCC 3.3 – 6V
  • Діапазон вимірювання температури від -40 °С до 80 °С
  • Діапазон вимірювання вологості від 0 % до 100 %
  • Чутливість вимірювання температури ±0.1 °С
  • Точність вимірювання температури ±0.5 °С
  • Чутливість вимірювання вологості ±0.1 % RH
  • Точність вимірювання вологості 2 % RH
  • Частота дискретизації 2 секунди
  • Середній струм споживання при вимірюванні 3.3V – 1mA, 6V – 1.5mA
  • Струм споживання в режимі очікування 3.3V – 40uA, 6V – 50uA

Виводи:

1. VCC живлення
2. Data Out – вивід даних
3. NC – не використовується
4. GND загальний

Схема підключення

1 вивід підключаємо 5V від Arduino.

2 вивід підключаємо до 2 піну Arduino, та через резистор на 10kOm до живлення.

3 вивід не використовується.

4 вивід підключаєм до GND.

Arduino uno dht11

Програмний код для Arduino Uno

У PlatformIO створюєм новий проект, обираєм мікроконтролер Arduino Uno, та копіюєм наступний код у файл main.cpp в папці src.

Розкоментуйте в коді свій датчик.

#include <Arduino.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>

#define DHTPIN 2             // Пін даних датчика

// Розкоментуйте свій датчик
//#define DHTTYPE DHT11        // DHT 11
//#define DHTTYPE DHT22      // DHT 22
//#define DHTTYPE DHT21      // DHT 21

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(9600);
  dht.begin();
}
void loop()
{
  float humidity = dht.readHumidity();       // Зчитуєм значення вологості

  float temperature = dht.readTemperature(); // Зчитуєм значення температури 

  // Перевірка чи дісні дані від датчика, якщо вони NaN (не число), значить щось пішло не так.
  if (isnan(humidity) || isnan(temperature))
  {
    Serial.println("Failed to read from DHT");
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(humidity);
    Serial.println(" %");
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" *C");
  }
  delay(2000);
}

Для підключення бібліотеки DHT додайте наступний рядок у файл platformio.ini.

lib_deps = adafruit/DHT sensor library@^1.4.3

Компілюємо та завантажуєм на плату. Даний приклад раз у дві секунди буде зчитувати дані з DHT11 та виводити у монітор серійного порта.

Вивід температури та вологості на LCD 1602

Додаємо диплей підключення LCD1602 дисплея по I2C.

Arduino Uno DHT11 LCD 1602

Додаємо в код вивід даних на дисплей.

#include <Arduino.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 2             // Пін даних датчика

// Розкоментуйте свій датчик
#define DHTTYPE DHT11        // DHT 11
//#define DHTTYPE DHT22      // DHT 22
//#define DHTTYPE DHT21      // DHT 21

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

byte degree[8] =             // символ градуса
    {
        B00111,
        B00101,
        B00111,
        B00000,
        B00000,
        B00000,
        B00000,
};

void setup()
{
  dht.begin();

  lcd.init();
  lcd.backlight();
  lcd.createChar(1, degree);                 // Створюєм символ під номером 1
}
void loop()
{
  float humidity = dht.readHumidity();       // Зчитуєм значення вологості
  float temperature = dht.readTemperature(); // Зчитуєм значення температури

  // Перевірка чи дісні дані від датчика, якщо вони NaN (не число), значить щось пішло не так
  if (isnan(humidity) || isnan(temperature))
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Failed read DHT");
  }
  else
  {
    lcd.setCursor(0, 0);
    lcd.print("Hum:           %");
    lcd.setCursor(9, 0);
    lcd.print(humidity, 1);
    lcd.setCursor(0, 1);
    lcd.print("Temp          ""\1C");     // '\1'platformio.ini виводимо створений символ
    lcd.setCursor(9, 1);
    lcd.print(temperature, 1);
  }
  delay(2000);
}

У файл platformio.ini потрібно додати бібліотеку LiquidCrystal_I2C.

lib_deps =
    adafruit/DHT sensor library @ ^1.4.3
	marcoschwartz/LiquidCrystal_I2C@^1.1.4

Компілюємо та завантажуєм на плату. Даний приклад один раз у дві секунди буде зчитувати дані з датчика (DHT11, DHT21, DHT22) та виводити на дисплей. Період зчитування можна встановити свій, але не менше 2 секунд.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *