Увлажнитель воздуха (humidifier) – это устройство для увеличения относительной влажности в закрытом пространстве, то есть обеспечения требуемого уровня влажности. Увлажнители особенно актуальны зимой, когда работают батареи отопления, которые помимо нагрева помещения также осушают воздух в нем (уменьшают относительную влажность).
В данной статье мы рассмотрим создание своими руками (DIY) автоматического портативного увлажнителя воздуха на основе платы Arduino, который сможет поддерживать относительную влажность в помещении в заданных пределах.
Измерять уровень относительной влажности мы будем с помощью датчика DHT11, который ранее уже применялся во многих проектах на нашем сайте. Если измеренный уровень влажности будет ниже требуемой границы, то увлажнитель будет автоматически включаться, и наоборот. Выводить уровень относительной влажности (relative humidity, RH) в процентах мы будем на экран OLED дисплея.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- OLED дисплей (купить на AliExpress).
- Ультразвуковой увлажнитель (купить на AliExpress).
- Модуль реле 5V (купить на AliExpress).
- Регулятор напряжения 7805 (купить на AliExpress).
- Электролитический конденсатор 25V, 1000 мкФ (купить на AliExpress).
- Адаптер AC-DC, 12V, 2 AMP.
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- USB Female socket (разъем типа "мама").
- Вентилятор.
- Перфорированная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Принцип работы увлажнителя
Портативный увлажнитель (portable humidifier) способен производить теплый/прохладный туман при помощи металлической диафрагмы, вибрирующей с высокой частотой. Вибрации звука выталкивают влагу в воздух. Водяной туман, производимый увлажнителем, практически мгновенно абсорбируется (поглощается) в воздухе. Чтобы увлажнитель мог производить водяной туман он должен плавать на поверхности воды.
Структурная схема работы нашего автоматического увлажнителя воздуха на Arduino показана на следующем рисунке.
Как показано на приведенной структурной схеме, ультразвуковой увлажнитель помещается на поверхность воды в контейнере. Для измерения влажности окружающего воздуха к плате Arduino Nano подключен датчик DHT11. Для вывода информации используется OLED. В зависимости от измеренного значения влажности нам необходимо будет включать/выключать реле, которое, в свое очередь, будет включать/выключать ультразвуковой увлажнитель.
Основные технические характеристики используемого нами ультразвукового увлажнителя:
- тип: плавающий/ультразвуковой;
- питание: USB, 5V DC;
- рабочий ток: 500 Ma;
- уровень шума: ≤36 дБ.
Схема проекта
Схема автоматического увлажнителя воздуха на основе платы Arduino представлена на следующем рисунке.
Напряжение питания 12V DC от внешнего источника преобразуется в напряжение питания 5V DC с помощью регулятора напряжения 7805 и емкостного фильтра (конденсатора). Это напряжение питания подается на плату Arduino Nano, OLED дисплей, датчик DHT11 и модуль реле. OLED дисплей подключен к контактам интерфейса I2C (A4, A5) платы Arduino.
Внешний вид собранной на перфорированной плате конструкции проекта показан на следующем рисунке.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе мы подключим используемые библиотеки: “SoftwareSerial.h”, “wire.h”, “Adafruit_SH1106.h” и “DHT.h”. Библиотеки “SoftwareSerial.h” и “wire.h” встроены в Arduino IDE, библиотеку “Adafruit_SH1106.h” можно скачать по этой ссылке, а библиотеку “DHT.h” – по этой.
1 2 3 4 |
#include <SoftwareSerial.h> #include <Wire.h> #include <Adafruit_SH1106.h> #include "DHT.h" |
Далее определим адрес I2C OLED дисплея, он может быть OX3C (чаще всего для дисплея 1,3 дюйма) или OX3D. В нашем случае он оказался равным OX3C. Также определим контакт сброса (Reset pin) OLED дисплея. В нашем случае он равен -1 поскольку он является общим с контактом сброса платы Arduino.
1 2 3 |
#define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display(OLED_RESET); |
Затем создадим объект класса DHT для работы с датчиком температуры и влажности.
1 2 |
DHT dht; int humidity=0; |
Внутри функции мы инициализируем последовательную связь со скоростью 9600 бод и зададим режимы работы используемых контактов. Также инициализируем OLED дисплей с помощью функции display.begin. Параметр SH1106_SWITCHCAPVCC внутри данной функции используется для указания того, чтобы дисплей запитывался от внутреннего источника 3.3V.
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); dht.setup(2); pinMode(6,OUTPUT); pinMode(11,OUTPUT); display.begin(SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay(); } |
Для считывания данных с датчика DHT11 используется функция getHumidity() – считываемые с него данные сохраняются в переменной humidity. Отображение данных на экране OLED дисплея производится с помощью функции display.print, установка размера текста и позиции курсора осуществляется с помощью функций display.setTextSize и display.setCursor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
delay(dht.getMinimumSamplingPeriod()); humidity = dht.getHumidity(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(27, 2); display.print("CIRCUIT DIGEST"); display.setTextSize(1); display.setCursor(35, 20); display.print("HUMIDITY(%)"); display.display(); display.setTextSize(2); display.setCursor(55, 40); display.print(humidity); display.display(); delay(50); display.clearDisplay(); |
Для включения/выключения увлажнителя значение влажности сравнивается с заранее определенным значением (88). Если значение влажности менее 88, то происходит включение вентилятора и увлажнителя.
1 2 3 4 5 6 7 8 9 10 11 |
if(humidity<88 ) { digitalWrite(6,HIGH); digitalWrite(11,HIGH); } else { digitalWrite(6,LOW); digitalWrite(11,LOW); } } |
Тестирование работы портативного увлажнителя воздуха
После того как аппаратная и программная части нашего проекта будут готовы, можно приступить к тестированию работы нашего увлажнителя. Для этого поместите увлажнитель в закрытое помещение и выполните следующую последовательность шагов:
- наполните контейнер свежей водой до уровня ¾ от максимальной отметки и опустите ультразвуковой увлажнитель сверху на поверхность воды (чтобы он в ней плавал) как показано на следующем рисунке:
- подайте питание на конструкцию проекта, после этого вы должны увидеть на экране OLED измеренное значение влажности;
- если измеренное значение влажности меньше определенной нами границы, то должен включиться вентилятор, а увлажнитель должен начать производить водяной туман.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <SoftwareSerial.h> #include <Wire.h> #include <Adafruit_SH1106.h> #define OLED_ADDRESS 0x3C #define OLED_RESET -1 Adafruit_SH1106 display(OLED_RESET); #include "DHT.h" DHT dht; int humidity=0; void setup() { Serial.begin(9600); dht.setup(2); pinMode(6,OUTPUT); pinMode(11,OUTPUT); display.begin(SH1106_SWITCHCAPVCC, OLED_ADDRESS); display.clearDisplay(); } void loop() { delay(dht.getMinimumSamplingPeriod()); humidity = dht.getHumidity(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(27, 2); display.print("CIRCUIT DIGEST"); display.setTextSize(1); display.setCursor(35, 20); display.print("HUMIDITY(%)"); display.display(); display.setTextSize(2); display.setCursor(55, 40); display.print(humidity); display.display(); delay(50); display.clearDisplay(); if(humidity<85) { digitalWrite(6,HIGH); digitalWrite(11,HIGH); } else { digitalWrite(6,LOW); digitalWrite(11,LOW); } } |
BC547 и резистор обязателен? просто они не указаны в "Необходимые компоненты"
Для чего нужен USB Female socket?
Для того чтобы вставлять туда Male штырь
Можете прислать пример, где используется многофункциональная плата 9 в 1 что конкретно можно собрать, используя эту плату?
Я не совсем понял какую многофункциональную плату 9 в 1 вы имеете ввиду