Translate

вторник, 24 апреля 2018 г.

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

...или почему надо сначала читать о том, что покупаешь.


Заказал я из Китая очередную посылочку. Вот сегодня приехала, так что робот опять откладывается в сторону... эх, обязательно до него доберусь! На самом деле, приехало кое-что и для робота, модуль вай-фая, например, так что всё по порядку и потихоньку.

Герой дня, DHT-11
Однако, сегодня мы подключаем и разбираемся с датчиком температуры и влажности DHT-11. В планах у меня ни много ни мало - улично-балконная метеостанция. В принципе, всё приехало для неё уже... или не всё?
Присмотрел я гигро-термодатчик уже давно, а тут собирал посылку и тоже купил до кучи. Купил, и не посмотрел диапазон его измерений. Датчик и датчик. Датчик же температуры и влажности - меряет температуру и влажность - ясен пень!
Теперь вот читаю параметры и расстраиваюсь. Оказывается, что он комнатный, и измеряет температуру только до нуля градусов. Нет, ну в жарком африканском климате где-нибудь может он и за уличный сойдёт, но у меня-то тут зимой морозы случаются, снежок идёт... Ну, ладно, будем испытывать, что есть.

Колдунство с бубном над библиотеками


Библиотек к датчику оказалась тьма-тьмущая, и ни одна не захотела работать. Не буду вдаваться в описание процесса, но времени ухлопал кучу - весь вечер ушёл. Может вам повезёт больше, мне сегодня не повезло. Не компиллирует, и всё тут. Установил DHT.h - требует Adafruit_Sensor.h! Пришлось найти, скачать и скормить - угомонился, так что даю ссылки на обе.

Да, при этом Адафрут можно не подключать, как выяснилось, и так работает. Но быть она в библиотеках должна!


Подключение


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


Текст прошивки 

// Скетч управляет работой DHT-11 и выводит данные на компьютер
#include "DHT.h"
#define DHTPIN 12  // Номер пина, к которому подключаем датчик
long time_pass; // Переменная таймера
// Нужно раскомментить строку вашего датчика, у меня DHT-11
// Я оставил это из оригинального скетча, мало ли...

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE); // Указываем параметры работы датчика
//(в скобках № пина и тип датчика)

void setup() {
  Serial.begin(9600); // Устанавливаем последовательный порт на 9600 бод
  dht.begin(); // Инициируем датчик
  time_pass = millis(); // Обнулили таймер
}
void loop() {
  float h, t, f; // влажность, температура в Цельсиях и Фаренгейтах
  // Если прошло 2 секунды между измерениями
  if ((millis() - time_pass) >= 2000)
  {
     h = dht.readHumidity(); // Читаем влажность
   t = dht.readTemperature(); // Читаем температуру в Цельсиях
   f = dht.readTemperature(true); // а так - в Фаренгейтах
   time_pass = millis(); // Снова обнулили таймер

  // Проверяем корректно ли всё прочитано, иначе - выходим
  if (isnan(h) || isnan(t) || isnan(f))
  {
    Serial.println("Ошибка чтения с сенсора!");
    return;
  }
  // Считаем температурный индекс в Фаренгейтах (по умолчанию)
  float hif = dht.computeHeatIndex(f, h);
  // А так в Цельсиях
  float hic = dht.computeHeatIndex(t, h, false);
  // Выводим всё на экран
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" % ");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F ");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");
  }
}
Вот такая жестокая схема

Итог


Вот, в принципе, и всё. Тупил я сегодня просто по-страшному, а всё потому что спешил. Но вот, всё работает. В результате получаем лог с кучей данных. Результатом я не очень доволен, кстати. Время измерения 2 секунды. Температура меняется оооочень меееедленно! 
Включил: +29. Дома +24, не больше. Ну, ок, думаю, подождём - ничего.
Ладно, подышал на него. О! Влажность подскочила до 95%! Температура +29...
Сунул под лампочку - ты смотри - подскочила до +30!
На балкон понёс, на улице подозреваю, около нуля. Открыл окно, стою проветриваюсь, прохладой так и несёт - начал остывать (в смысле датчик): +25, +24... Я думаю, околею тут, пока ты промёрзнешь. Поставил ноут со всем этим хозяйством на подоконник и пошёл на кухню. Вернулся через несколько минут - "нагрело" до +12... Мда... 

Такая вот игрушка. Серьёзно я его не воспринимаю после всего это.
Ладно, барометр у меня ещё лежит тут :) Так что до скорого, как налажу - отпишусь!

Комментариев нет:

Отправить комментарий