Гігрометер / термометер на DHT22

Конструкції та програмування ARDUINO UNO
Відповісти
Аватар користувача
radioman
Site Admin
Повідомлень: 134
З нами з: 28 вересня 2020, 12:01
Звідки: Тернопіль
Дякував (ла): 8 разів
Подякували: 6 разів

Гігрометер / термометер на DHT22

Повідомлення radioman »

DHT22 - цифровий датчик температури та вологості підвищеної точності (у порівнянні з DHT11), має заводське калібрування і характеризується низьким енергоспоживанням. Складається з ємнісного датчика вологості і термістора. Передача даних здійснюється по одному дроту з використанням власного протоколу WIRE.

Основні характеристики датчика DHT22:
тип: AM2302 цифровий
точність: 0.1 ºC
діапазон вимірювання вологості: 0-100%
діапазон виміру температури: -40 ~ +80 ºC
точність вимірювання вологості: ± 2% RH
точність вимірювання температури: ± 0.5 ºC
частота опитування датчика не більше 0,5 Гц (не частіше разу в 2 секунди)
напруга живлення: 3.3-6.0 В
кількість виводів: 3/4
вбудований АЦП
ультранизьке енергоспоживання
не вимагає обв'язки
здатний працювати при досить довгому дроті

* Більш повна інформація в даташиті.

Чотирьох-контактний датчик DHT22 (Сам датчик)
SDA – контакт для обміну даними між датчиком і мікроконтроллером
VDD – напруга живлення
GND – загальний контакт
NC - не використовується

Трьох-контактний датчик DHT22 (Датчик на платці з "обв'язкою")
+ – напруга живлення
OUT – контакт для обміну даними між датчиком і мікроконтроллером
- – загальний контакт

Для роботи з датчиками DHT11/DHT22 необхідно встановити бібліотеку DHT-sensor-library (її необхідно перейменувати у DHT і поміститу у папку libraries (у мене: Документи - ArduinoData - staging - libraries), або використати іншу стандартну.
Далі можна завантажити готовий скетч

Код: Виділити все

/*   https://radioman.com.ua/viewtopic.php?f=8&t=42   */

#include "DHT.h"                      // Підключення бібліотеки
#define DHTPIN 2                      // Номер піна даних

DHT dht(DHTPIN, DHT22);               // Ініціалізація датчика
//DHT dht(DHTPIN, DHT11);             // Для датчика 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 ");
}
або написати його самостійно, використовуючи приклади.
Аватар користувача
radioman
Site Admin
Повідомлень: 134
З нами з: 28 вересня 2020, 12:01
Звідки: Тернопіль
Дякував (ла): 8 разів
Подякували: 6 разів

Re: Гігрометер / термометер на DHT22

Повідомлення radioman »

Для самостійної роботи гігрометра необхідно інформацію про вологість та температуру вивести не в термінал послідовного порту, а на дисплей. Цілком достатньо OLED дисплея SSD1306 128х32 з розміром екрану 0.91" .
При зміні попереднього скетчу, спочатку необхідно підключити бібліотеку Adafruit_SSD1306.h для роботи з OLED:

Код: Виділити все

#include <Adafruit_SSD1306.h>               // підключення бібліотеки для SSD1306

#define OLED_RESET 7
Adafruit_SSD1306 display(OLED_RESET);       // створюємо об'єкт "дисплей"
і у функції setup встановити початкові параметри дисплея:

Код: Виділити все

/* setup дисплея */
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // ініціалізація дисплея по інтерфейсу I2C, адреса 0x3C
  display.clearDisplay();                    // очистка дисплея
  display.setTextSize(2);                    // размір шрифту (1,2,3,4)
  display.setTextColor(WHITE);               // колір тексту
Відповідно, у функції loop результат перевірки справності датчика виводимо не в термінал послідовного порту, а на OLED дисплей:

Код: Виділити все

    display.clearDisplay();                    // очистка буферу дисплея
    display.display();                         // виводимо на екран (очищаємо екран)

    display.setCursor(12, 10);                 // встановлюємо курсор в позицію X = 12; Y = 10
    display.print ("ERROR DHT");               // записуємо в буфер повідомлення про помилку датчика
    display.display();                         // виводимо на екран
Аналогічно відображаємо і результат вимірювань:

Код: Виділити все

/* Вивід показників на дисплей */
    display.clearDisplay();                     // очистка буферу дисплея
    
    display.setCursor(0, 0);                    // встановлюємо курсор в позицію X = 0; Y = 0 (верхній лівий кут)
    display.print ("H = ");                     // записуємо в буфер позначення вологості
    display.print (h);                          // записуємо в буфер значення вологості

    display.setCursor(0, 18);                   // встановлюємо курсор в позицію X = 0; Y = 18 (другий рядок)
    display.print ("T = ");                     // записуємо в буфер позначення температури
    display.print (t);                          // записуємо в буфер значення температури
    display.display();                          // очищаємо екран
    display.display();                          // виводимо дані на дисплей
PS. В архіві скетч гігрометра на датчику DHT22 з відображенням інформації на OLED дисплеї SSD1306 128х32
hygrometer_oled.7z
Гігрометр на DHT22 та OLED дисплеї SSD1306 128х32
(1.24 Кіб) Завантажено 716 разів
Відповісти