Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

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

Датчик температуры LM35
Датчик температуры и влажности DHT
Технические характеристики DHT11
DHT22
Библиотека для DHT

Датчик температуры LM35

Датчик температуры LM35 позволяет очень просто получать значения температуры. Вам нужно получить показания с аналогового вывода, сделать несложные математические вычисления и получить готовый результат.

У датчик три вывода: питание и земля по краям и средний для вывода данных.

LM35

Точность составляет почти 0.75-1 градусов. Интервал показаний от -55 до +150. Но в большинстве случаев используются показания от 0 до 105. Если вам нужны отрицательные температуры, то используйте датчик TMP36.

Скетч для работы с датчиком.


const int analogIn = A0;

int value = 0;
double voltage = 0;
double celsius = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  value = analogRead(analogIn);
  voltage = (value / 1023.0) * 5000;
  celsius = voltage * 0.1;
  Serial.print("Temperature in C = ");
  Serial.println(celsius, 1);
  delay(500);
}

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

Существует семейство датчиков влажности и температуры DHT (DHT11, DHT22 и др.), которые используются для построения домашней метеостанции. Одновременно измерять температуру и относительную влажность выглядит оправданным, поскольку второе напрямую зависит от первого. Так, повышение температуры батарей центрального отопления приводит к уменьшению относительной влажности воздуха.

Считается, что оптимальное значение влажности около 50 % — именно при такой влажности растения, люди и животные чувствуют себя комфортно.

DHT11

DHT11
DHT11

Датчик температуры и влажности DHT11 является дешёвым датчиком, который удобно использовать в домашних условиях в учебных целях. Он не обеспечивает точные показания и имеет ограниченный диапазон измерений. Но тем не менее, он очень популярен из-за своей простоты. Существуют более дорогие аналоги, в частности его старший брат DHT22.

Датчики DHT состоят из двух основных частей: ёмкостный датчик влажности и термистор. Также в корпусе установлен простенький чип для преобразования аналогового сигнала в цифровой. Считывать цифровой сигнал на выходе достаточно просто, можно использовать любой контроллер, не только Arduino.

DHT11

Технические характеристики

  • Питание от 3 до 5В
  • Максимально потребляемый ток - 2.5мА при преобразовании (при запросе данных)
  • Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. Точность измерений в диапазоне 5%
  • Измеряет температуру в диапазоне от 0 до +50 градусов с точностью ±2°C
  • Частота измерений не более 1 Гц (одно измерение в секунду)
  • Размер корпуса: 15.5 мм x 12 мм x 5.5 мм

Сам датчик представляет собой синий прямоугольник с решёткой. Имеет четыре ножки, одна из которых (третья) не используется. Ножки имеют стандартное расстояние между собой и прибор легко устанавливается на макетную плату.

  1. VCC - Питание от 3 до 5 В
  2. DATA (OUT) - Вывод данных
  3. NC - Не подключается
  4. GND - Земля

При подключении используйте подтягивающий резистор к VCC и рекомендуется конденсатор (фильтр по питанию между VCC и GND).

Хороший вариант - готовая плата с резистором и конденсатором. Она имеет три вывода, которые можно воткнуть в макетную плату.

DHT11

DHT11 достаточно медленно конвертирует измеренные значения, считывайте показания не чаще, чем раз в секунду.

DHT22

По форм-фактору датчик похож на своего собрата. Может встречаться название Aosong AM2302.

Более точный датчик DHT22 имеет преимущества перед DHT11.

Диапазон температур от -40° до +80° (сравните с 0°..+50°). Точность измерений в диапазоне ±0.5°

Уровень влажности 0-99.9%. Точность измерений в диапазоне 2-4%.

Рекомендуемая частота чтения данных - не чаще, чем один раз в 2 секунды.

Учитывая широкий диапазон, датчик можно применять в сложных системах: вентиляция, кондиционирование, метеорологические станции

Диапазон питания датчика составляет +3.3...+5.5В, поэтому его можно использовать в платах Arduino с пониженными напряжениями. Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В не должна превышать 100 см.

Библиотека для DHT

Измерим температуру и влажность воздуха при помощи датчика DHT11.

Следует подключить подтягивающий резистор на 10 кОм между питанием и сигналом. У меня такого не оказалось, я подключил резистор на 2.2 кОм, вроде не сгорело. Для датчика DHT22 резистор не обязателен.

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

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

У меня получилась следующая схема.

Схема для DHT11

Первую ножку датчика соедините с питанием на 5В (красный провод), вторую - с пином номер 2, третью пропускаем, а четвёртую соединяем с GND (чёрный провод). Также вставляем на плату резистор - одна ножка соединяется с первой ножкой датчика, а вторая со второй.

Следующий шаг - установка библиотеки. В сети существует много библиотек для данного датчика. Популярна библиотека GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11DHT22, etc Temp & Humidity Sensors. Скачиваем архив и переименовываем папку в DHT, папку размещаем в общей папке для библиотек Arduino libraries.

Второй и удобный способ - установка через менеджер библиотек. Открываем Tools | Manage Libraries... и в поиске диалогового окна вводим DHT. Найдётся несколько библиотек, выбираем библиотеку от Adafruit. Устанавливайте версию 1.2.3. Если вы будете устанавливать версию 1.3.0 или выше, то вам придётся также установить ещё библиотеку Adafruit Unified Sensor, без неё скетч не будет компилироваться.

DHT Library

После установки библиотеки, запускаем IDE и находим пример File | Examples | DHT sensor library | DHTtester.

Скетч по умолчанию рассчитан на датчик DH22, поэтому вам нужно сначала закомментировать строчку #define DHTTYPE DHT22 и снять комментарий с строчки #define DHTTYPE DHT11.

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


// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 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

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

  dht.begin();
}

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)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
}

Запускаем скетч и наблюдаем за результатами в Serial Monitor. Датчик считается очень медленным, поэтому не следует делать слишком маленькую задержку, в примере используется пауза на две секунды.

Показания DHT11

Пример проверялся летом в жаркий день. Результаты вполне правдоподобны. Если подышать на датчик (помните в детстве мы дышали на стекло?), то влажность увеличится (и температура). Через какое-то время показания будут медленно возвращаться к первоначальным.

В составе библиотеки также есть файл с именами функций.

DHT
Класс датчика. Объявляем объект класса: DHT dht(DHTPIN, DHTTYPE);. В первом параметре объявляем пин, во втором - тип датчика
begin()
Запускаем датчик
readTemperature()
Без параметров функция измеряет в градусах Цельсия. Вызов readTemperature(true) вернёт значения в градусах Фаренгейта
convertCtoF()
Конвертирует из одной системы в другую
convertFtoC()
Конвертирует из одной системы в другую
computeHeatIndex()
Выводит индекс жары. По умолчанию используется индекс на основе градусов Фаренгейта, где нужно указать градусы и влажность. Для температуры по Цельсию нужно указывать три параметра computeHeatIndex(t, h, false)
readHumidity()
Функция для измерения влажности
read()
Что-то считывает

Дополнительные материалы

Fritzing-Library/DHT11 Humitidy and Temperature Sensor.fzpz at master · adafruit/Fritzing-Library · GitHub - в составе Fritzing нет датчика DH11. Скачайте данный файл и перетащите его на окно программы. Теперь вы сможете составлять схемы с его участием (смотри мой скриншот выше). В программе он будет находиться в разделе MINE.

Датчик температуры и влажности DHT11 (DHT22) - здесь дана дополнительная информация о работе датчика в модульном исполнении, ссылка на даташиты, примеры кода без библиотеки, графики.

Реклама