Реле влажности своими руками (Arduino, урок №2)

Страница товара в магазине / Купоны Banggood
Цена: $11.70
Поиск товара в других магазинах Китая

Я давно хотел автоматизировать процесс просушки ванной комнаты после купания. У меня было много обзоров, посвящённых теме влажности. Решил внедрить в жизнь (так сказать) один из методов борьбы с ней. Кстати, зимой в ванной и бельё сушим. Достаточно вытяжной вентилятор включить. Но следить за вентилятором не всегда сподручно. Вот и решил поставить автоматику на это дело. Первый опыт внедрения оказался неудачный. Обзор был. Но я не сдался…

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

Именно таким и пользовался до сего дня.
В данном конкретном случае (у кого нет вентилятора с таймером) всё можно сделать на программном уровне.
Так как живу в многоквартирном «муравейнике», то единственное место для сушки белья – это балкон. В ванной может и затухнуть. Для сушки необходима либо низкая влажность, либо циркуляция воздуха. Выполнение обоих условий – лучший вариант. Вентилятор должен был решить эту проблему. Поначалу именно так и делал. Главное не забыть его выключить. Во время работы вентилятора необходимо приоткрывать малость окошко. Про школьную задачку с бассейном и двумя трубами напоминать не надо? Чтобы воздух выходил в вытяжку, необходимо, чтобы он откуда-то входил в квартиру. У кого окна деревянные, а не пластиковые, проблем не будет. Щелей хватит. А вот с пластиковыми квартира превращается в террариум.
Тут я и задумался об автоматизации процесса. Именно для этого я и заказал датчики.
Печальным опытом реализации своей идеи я уже делился. Вот тот модуль. Он работать не может в ПРИНЦИПЕ. Но без дела не останется. И ему будет применение.

(Напряжение питания: 5В. Максимальная нагрузка: 10А 250В переменного и 10А 30В постоянного тока). Использую как блок реле. Для обычного вентилятора этого достаточно.
Схему модуля я тоже рисовал. Проблем с подключением не будет.

Красный светодиод индицирует наличие питающего напряжения. Зелёный – сработку реле. Бесполезный датчик (датчик влажности, его уже нет) я заменил на сопротивление 10кОм. А также добавил ещё сопротивление. Оно пойдёт к «умному» блоку. Оба выделил красным. Всё это должно исключить возможные недоразумения. Ведь блок реле питается от напряжения 5В, а «умный» блок от 3,3В. Управляется блок реле низким уровнем. Высокий уровень отключает реле (вентилятор). В прошивке это учтено.
В основе схемы лежит компаратор на LM393. Подстроечный резистор изначально был предназначен для настройки порога срабатывания реле влажности. Возможно, его придётся немного крутануть.
Можно использовать простые блоки реле. Они продаются. Я же буду использовать то, что осталось после прошлой неудачной попытки.
Пора смотреть, в каком виде прибыли датчики AM2302 (DHT22). Заказал сразу три. Думаю, что только ванной это не ограничится. В голове много всяких идей. Где б только найти время и желание для их реализации.


Датчики были запаяны в антистатические пакеты. Всё по уму. Пайка аккуратная. Претензий по внешнему виду не имею. Даже плата промыта.

Вот, что написано на странице магазина:
AM2302 Humicap digital temperature and humidity module is a digital output signal containing a calibrated temperature and humidity combined sensor. It uses a dedicated digital modules capture technology and the temperature and humidity sensor technology to ensure that products with high reliability and excellent long-term stability. Sensor includes a capacitive humidity sensing element and a high-precision temperature measurement devices, and with a high-performance 8-bit microcontroller connected. Therefore, the product has excellent quality, fast response, anti-interference ability, high cost and other advantages. Ultra-small size, low power consumption, signal transmission distance up to 20 meters. Making it the best choice for all kinds of applications and even the most demanding applications.
Specification:
Dimension: 40 x 23mm
Weight: 4g
Voltage: 5V
Port: digital two-way single bus
Temperature range: -40-80 °C ± 0.5 °C
Humidity: 20-90% RH ± 2% RH
Platform: Arduino, SCM
Package included:
3 x Sensor Module
На плате деталей минимум. Датчики неразборные, что внутри не покажу.
Пора переходить к делу. Часть того, что применю, я уже показал. Ещё мне потребуется блок питания на 5В. Его я сделаю из старой (уже ненужной) зарядки к телефону.


Эта зарядка без USB разъёма. Ну очень старенькая (рекомендую использовать более новые, у них 5В на выходе). Поэтому на выходе 7В. Пришлось припаять МС стабилизатора КРЕН5. В этом ничего сложного нет. Кто дружит с паяльником, тот знает. А кто не дружит, зря читает топик.

Сильно не пугайтесь, сделал времянку. После отладки механизма всё будет выглядеть достойно. Возможно, и зарядку поменяю. Всё зависит от того, с каким результатом приду к финишу. Устанавливать по месту (на постоянку) буду после «комплексного опробования». Возможно, придётся применять зимний/летний вариант программного обеспечения. Температурные и влажностные характеристики воздуха зимой/летом отличаются.
Ещё мне потребуется WIFI модуль из предыдущего обзора.

Пригодится кабель-конвертер (USB To RS232 TTL UART) для программирования WIFI модуля.

Блок схема моей затеи выглядит просто.

Но нюансы конечно же имеются.
Осталось составить программку управления вентилятором.
Условий несколько:
1. Вентилятор включается при достижении влажности более 68%.
2. Время работы (таймер) 5 минут.
3. Передача данных о температуре и влажности по WIFI (на всякий случай).
4. Индикация режима по WIFI.
Если остановиться на условии №1, то достаточно будет самой простой Arduino. Но Arduino у меня только одна плата, а WIFI модулей целых три :)
Лично для меня самое сложное место – составление программы, немного (мягко сказано) не моя тема. Но жизнь течёт и увлекает в своё течение всё большие массы людей. Буду постигать необъятные просторы Arduino на примере датчика влажности DHT22 и WIFI модуля. Но если у меня всё получилось, значит, получится и у вас.
Сначала некоторая информация для чайников, как я.
В программе Arduino IDE не хватает в настройках тех плат, которые я буду использовать. Например, ESP8266 надо добавить.
Добавление компонентов на примере ESP8266.
Первым делом я скачал и установил на компьютер Arduino IDE. Затем запускаю программу.
Файл→Настройки→Вставляю ссылку в доп. ссылки→нажимаю ОК. Ссылка:
arduino.esp8266.com/stable/package_esp8266com_index.json


При этом необходимо подключение к интернету. Обязательно!
Затем захожу в менеджер плат.
Инструменты→Плата:…→Менеджер плат.

Нахожу свой модуль. Выбираю последнюю версию. Нажимаю установить.

В скаченной программе Arduino IDE не хватает и библиотек для датчиков. Например, библиотеку DHT22 тоже надо добавить.
Подключение библиотеки на примере датчика DHT22.
Сначала с интернета скачиваю архив типа DHT.zip. Найти не проблема.
Затем запускаю программу Arduino IDE.
Скетч→Подключить библиотеку→Добавить zip библиотеку.


Появляется вкладка типа этой.

Указываю место хранения…Open.
Библиотека подключена.

Осталось дело за малым :)
Схема подключения датчика влажности может отличаться. Мои пришли в виде модуля с тремя выводами и сопротивлениями, уже установленными на плате.


Ну и, наконец, заливка скетча.
Заливка скетча.
Открываю готовый скетч. В моём случае «WiFi-DHT22_AleksPoroshin68.ino».

Arduino IDE запускается автоматически.
Затем подключаю программатор, захожу в инструменты и подключаю Com-порт. Тот, к которому подключился высвечивается. Его и активирую. На моём нетбуке их три: это com6, com8 и com10.

Изучаю прошивку. Можно изменить имя и пароль доступа.

Нажимаю кнопку для загрузки.


Происходит компиляция скетча. Достаточно долго.

В это время необходимо нажать сброс на собранной схеме модуля.
При этом GPIO 00 на нуле.
Вот сам скетч:

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>
#include <Wire.h>
#include "DHT.h"

#define DHTPIN 4
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
float dhtTemp = NAN;
float dhtHumidity = NAN;

int ledPin = 12;  //GPIO 12

/* Set these to your desired credentials. */
const char *ssid = "AleksPoroshin";
const char *password = "12345678";

ESP8266WebServer server(80);

/* Just a little test message.  Go to http://192.168.4.1 in a web browser
 * connected to this access point to see it.
 */
void handleRoot() {

  String s = "<!DOCTYPE HTML>\r\n<html lang=\"ru\"><head><title>ESP201</title>";
  s += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
  s += "<meta http-equiv=\"refresh\" content=\"5\"></head>";
  //s += "Status - <a href='/a'>Actions</a> - <a href='/c'>Config</a>";
  s += "<h3>Модуль ESP 201</h3>";
  s += "
";

  if (isnan(dhtTemp))
    s += "
Температура: Ошибка чтения";
  else {
    s += "
Температура: ";
    s += dhtTemp;
    s += " C";
  }

  if (isnan(dhtHumidity))
    s += "
Влажность: Ошибка чтения";
  else {
      s += "
Влажность: ";
      s += dhtHumidity;
      s += " %";
  }

  if(digitalRead(ledPin) == HIGH)
    s += "

Вытяжка: Откл.";
  else 
    s += "

Вытяжка: Вкл.";
  
  s += "
</html>";
  
	server.send(200, "text/html", s);
}

void setup() {
	delay(1000);
	Serial.begin(115200);
	Serial.println();
	Serial.print("Configuring access point...");
	/* You can remove the password parameter if you want the AP to be open. */
	WiFi.softAP(ssid, password);

	IPAddress myIP = WiFi.softAPIP();
	Serial.print("AP IP address: ");
	Serial.println(myIP);
	server.on("/", handleRoot);
	server.begin();
	Serial.println("HTTP server started");

  dht.begin();
  Serial.println("DHT22 init success");
  pinMode(ledPin, OUTPUT);
}

void loop() {
  getDHT();
	server.handleClient();
}


void getDHT()
{
  dhtTemp = dht.readTemperature();
  dhtHumidity =  dht.readHumidity()+5;
  
  if (dhtHumidity < 68) {
    digitalWrite(ledPin, HIGH);
    Serial.println("ledPin HIGH");
  }
  else {
    digitalWrite(ledPin, LOW);
    Serial.println("ledPin LOW");
  }

  
}

Сильно не ругайте. Я только учусь.
После заливки скетча для подтверждения программирования GPIO подключаю к +3,3В. Затем отключаю. Прошивка залита.

Собираю схему на макетнице. Всё проверяю. Работает. Но не всё так хорошо, как хотелось. В нужном мне диапазоне китайские датчики занижают показания на 5-6%.

Немецкому логгеру у меня доверия больше. Да и цена у него в несколько десятков раз больше. А самое главное, он прошёл поверку.
Ввёл поправку в программу (добавил 5 единиц). Я согласен, что это неправильно. Но в диапазоне 40-70% показывает точно. Более правильно снять характеристику и исправить библиотеку. К этому я не готов :). Остальные датчики тоже врали. Хотя все показывали приблизительно одинаково.


Вот так выглядит интернет страничка, если подключится к моему WIFI модулю:

Пароли и явки указаны в скетче.
Переключение происходит на 68% влажности. Всё чётко.

Но есть один нюанс. И его не учитывать нельзя. На границе в 68% влажности вентилятор может циклить, то включаясь, то выключаясь. Для решения этой проблемы нужен таймер. У меня вентилятор с таймером. Т.е. проблемы нет. У кого обычный вентилятор, придётся решать эту проблему на программном уровне.
Дальнейшая моя задача всё это собрать согласно схеме, но уже не на макетнице и протестировать в течение месяца. Все изменения можно вносить в процессе эксплуатации. Что делать и куда вставлять, я всё написал.
Несколько слов по поводу монтажа датчика. Засовывать его в вентканал не советую. Причина проста. Даже в самой чистой и ухоженной квартире присутствует пыль, которая при включении вентилятора именно туда и устремляется (в ветканал). А ведь год назад я вентилятор вынимал и тщательно чистил.

Чтобы не менять часто датчики из-за их порчи, рекомендую найти им более подходящее место, где-нибудь рядом. Дополнительно можно обернуть для защиты от пыли салфеткой из нетканого материала или чем-то подобным. И будет вам счастье.
На этом всё.
Как правильно распорядиться сведениями из моего обзора каждый решает сам. Кому что-то неясно, задавайте вопросы. Надеюсь, хоть кому-то помог. Возможно, кто-то захочет помочь мне. Я буду очень благодарен.
Удачи всем!
Проверка на работоспособность:

Продолжение следует…
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.