Автоматический увлажнитель воздуха на основе Ардуино

Сегодня мы соберем автоматический увлажнитель воздуха на основе Ардуино и дополнительных комплектующих.

Вступление

Если для вас много текста читать скучно, то ниже мы разбираем два варианта реализации этого интересного устройства:

  1. Первый вариант - создание устройства целиком,
  2. Второй вариант - автоматизация купленного увлажнителя воздуха.

Большинство людей воздерживаются от проветривания жилого помещения в зимний период. Это происходит, не потому что температура воздуха понизится, а потому что воздух в помещении высохнет. Дело в том, что холодный воздух попадая в помещение нагревается и забирает влагу из воздуха, который уже имеется в комнате. В результате получается сухой воздух, который очень вреден для здоровья. Именно из-за этого сохнет и трескается кожа. Под особым воздействием оказывается очень нежная кожа лица. А еще под сильным влиянием оказываются комнатные растения. Из-за сухого воздуха их листья сохнут и опускаются вниз. В таких условиях их нельзя держать. В противном случае они погибнут.

Решить эту проблему можно легко и просто. Здесь на помощь приходят увлажнители воздуха. Это такое устройство, которое измеряет влажность окружающего воздуха. Если он будет слишком сухой, то устройство его повысит. Увлажнители воздуха появились на рынке сравнительно недавно и из-за этого не успели войти в привычную для всех жизнь. Также при покупке данного устройства придется выложить круглую сумму и поэтому его проще и дешевле собрать своими руками.

Само устройство очень простое. Однако решает одну из главных проблем бытовой жизни. Как говорится «красота в простоте». Увлажнитель воздуха, хоть и дорогое новаторское решения, но его можно сделать своими руками. Единственное, что придется - это закупить электронные компоненты в разных интернет магазинах. Детали для нашего устройство можно найти в Российских радиоэлектронных магазинах или в известном всем АлиЭкспресс.

Ниже мы поговорим о двух вариантах реализация увлажнителя воздуха на основе плат Arduino, но, вкратце, для создания увлажнителя воздуха нам понадобится:

  • ультразвуковой испаритель воды,
  • платформа Ардуино Нано или Ардуино Уно,
  • соединительные провода,
  • датчик влажности,
  • потенциометр,
  • вентилятор,
  • блок питания и гнездо для его подключения.

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

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

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

В верхней крышке контейнера необходимо просверлить несколько отверстий. Одни для выхода пара, другие для нагнетания воздуха вентилятором. Выдуваемый пар должен двигаться не вверх, а под наклоном вперед. Достигается это при помощи клея и ножниц, формируя направление потока. Вентилятор нужно герметично приклеить к корпусу, чтобы повысить КПД. Также нужно разделить контейнер на де части при помощи пластика. Это нужно для изоляции вентилятора от испарителя. После этого устройство полностью готово. Давайте перейдем к конкретным вариантам реализации автоматического увлажнителя воздуха.

Вариант № 1

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

Комплектующие

  • Arduino
  • Сенсор влажности и температуры Grove (Temp&Humi Sensor)
  • Кнопка Grove (Button)
  • Дисплей I2C LCD
  • Модуль автоматизации Grove Water Atomization

Grove Water Atomization - это идеальный модуль, позволяющий легко создать распылитель или модуль распылителя. Всего за несколько простых шагов вы можете создать прототип распылителя. Он имеет интерфейс Grove, который позволяет легко интегрироваться во множество приложений. Увлажнитель воздуха - это базовое устройство, которое может быть создано на его основе.

Grove Water Atomization 1.0
Grove Water Atomization 1.0

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

Делаем корпус

Для нашего устройство увлажнения воздуха необходимо создать корпус для фиксации в нем модулей Grove и других компонентов. Корпус создаем из акриловых листов и разрезаем из с помощью лазерной резки. Вы можете скачать чертежи корпуса в формате CDR ниже:

Подключаем модули

Подключаем все модули таким образом:

  • Grove <–> Temp&Humi A0
  • I2C_LCD <-> I2C-Port
  • Grove Water Atomization <-> D5
  • Grove Button <-> D2

Код и библиотеки

Подключаем плату Arduino к компьютеру через USB. Далее скачайте все библиотеки и основной код ниже:

#include <Wire.h>
#include <I2C_LCD.h>
#include "DHT.h"
#define DEBUG 1

enum status{
  Standby            = 0,
  Humidification     = 1,
  AutoHumidification = 2,
  
};
typedef enum status SystemStatus;
SystemStatus WorkingStatus;

I2C_LCD LCD;
uint8_t I2C_LCD_ADDRESS = 0x51; //Device address configuration, the default value is 0x51.

#define DHTPIN A0     // what pin we're connected to
// Uncomment whatever type you're using!
#define OneSecond     1000
#define DHTTYPE       DHT11   // DHT 11 
#define WaterAtomPin  5
#define ButtonPin     2
#define DateUpdateInterval 5   // unit seconds
#define HumidityLimen 50
uint8_t StartTime;
uint8_t ButtonFlag;
//For detials of the function useage, please refer to "I2C_LCD User Manual". 
//You can download the "I2C_LCD User Manual" from I2C_LCD WIKI page: http://www.seeedstudio.com/wiki/I2C_LCD

//The usage of LCD.print() is same to the Serial.print().
//For more informations about print, please visit: http://www.arduino.cc/en/Serial/Print
DHT dht(DHTPIN, DHTTYPE);
void setup(void)
{
    Wire.begin();         //I2C controller initialization.
    LCD.CleanAll(WHITE);    //Clean the screen with black or white.
    LCD.WorkingModeConf(ON, ON, WM_CharMode);
    LCD.BacklightConf(LOAD_TO_RAM, 20);
    
    LCD.FontModeConf(Font_10x20, FM_ANL_AAA, BLACK_BAC);
    LCD.DispStringAt("SeeedStudio", 10, 20);    //Display "Sparking" on coordinate of (0, 20).
    delay(3000); 
    LCD.CleanAll(WHITE);    //Clean the screen with black or white.
#if DEBUG
    Serial.begin(9600); 
    Serial.println("Enable Debug");
#endif
    pinMode(WaterAtomPin,OUTPUT);
    pinMode(ButtonPin,INPUT);
    attachInterrupt(0,Buttonclick,RISING);
    dht.begin();
    DisableWaterAtom();
    WorkingStatus = Standby;
    StartTime = millis()/OneSecond + DateUpdateInterval;
}

void loop(void)
{
    float humidity    = dht.readHumidity();
    float temperature = dht.readTemperature();
    switch (WorkingStatus) {
    case Standby:
        if(((millis()/OneSecond) - StartTime) > DateUpdateInterval) {
            if (isnan(temperature) || isnan(humidity)) {
                Serial.println("Failed to read from DHT");
            } else {
                LCD.FontModeConf(Font_8x16_1, FM_ANL_AAA, BLACK_BAC); 

                //Set the start coordinate.
                LCD.CharGotoXY(0,0);

                //Print string on I2C_LCD.
                LCD.print("Temp: ");
                //Print float on I2C_LCD.
                LCD.print(((float)((int)(temperature*10))/10), 1);
                LCD.println("`C");  
                LCD.print("Hum : ");
                //Print float on I2C_LCD.
                LCD.print(((float)((int)(humidity*10))/10), 1);
                LCD.println(" %");    
            
                //Print the number of seconds since reset:
                LCD.FontModeConf(Font_6x8, FM_ANL_AAA, BLACK_BAC); 
                LCD.CharGotoXY(0,48);
                LCD.print("Hum Limen : ");
                LCD.print(HumidityLimen);
                LCD.println(" %");
                //LCD.CharGotoXY(0,56);
                LCD.println("Prs BTN to moisturize");
        
                //LCD.CharGotoXY(68,48);
                //Print the number of seconds since reset:
                //LCD.print(millis()/1000,DEC);
                StartTime = millis()/OneSecond;
        }
        }
#if DEBUG
            Serial.println("StandBy");
#endif
        if (ButtonFlag == true) {
            delay(200);
            ButtonFlag = false;
            WorkingStatus = Humidification;
            LCD.CleanAll(WHITE);
        }
        if (humidity <= HumidityLimen) {
            WorkingStatus = AutoHumidification;
        }
        break;
    case Humidification: 
        if(ButtonFlag == true) {
            delay(200);
            ButtonFlag = false;
            WorkingStatus = Standby;
            LCD.CleanAll(WHITE);
            DisableWaterAtom();
        } else {
            EnableWaterAtom();
            LCD.FontModeConf(Font_8x16_1, FM_ANL_AAA, BLACK_BAC); 

                //Set the start coordinate.
            LCD.CharGotoXY(0,0);

                //Print string on I2C_LCD.
            LCD.print("Temp: ");
                //Print float on I2C_LCD.
            LCD.print(((float)((int)(temperature*10))/10), 1);
            LCD.println("`C");  
            LCD.print("Hum : ");
                //Print float on I2C_LCD.
            LCD.print(((float)((int)(humidity*10))/10), 1);
            LCD.println(" %");   
            LCD.FontModeConf(Font_6x8, FM_ANL_AAA, BLACK_BAC); 
            LCD.CharGotoXY(0,48);
            LCD.println("Prs BTN to STOP");
        }
        
#if DEBUG
    Serial.println("Humidification");
#endif
        break;
    case AutoHumidification:
        if(ButtonFlag == true) {
            delay(200);
            ButtonFlag = false;
            WorkingStatus = Standby;
            LCD.CleanAll(WHITE);
            DisableWaterAtom();
        } else {
            EnableWaterAtom();
            LCD.FontModeConf(Font_8x16_1, FM_ANL_AAA, BLACK_BAC); 

                //Set the start coordinate.
            LCD.CharGotoXY(0,0);

                //Print string on I2C_LCD.
            LCD.print("Temp: ");
                //Print float on I2C_LCD.
            LCD.print(((float)((int)(temperature*10))/10), 1);
            LCD.println("`C");  
            LCD.print("Hum : ");
                //Print float on I2C_LCD.
            LCD.print(((float)((int)(humidity*10))/10), 1);
            LCD.println(" %");   
            LCD.FontModeConf(Font_6x8, FM_ANL_AAA, BLACK_BAC); 
            LCD.CharGotoXY(0,48);
            LCD.println("Prs BTN to STOP");
        }
        if (humidity > HumidityLimen) {
            WorkingStatus = Standby;
            LCD.CleanAll(WHITE);
            DisableWaterAtom();
        }
        break;
    default:
        break;
        
    }
    
}


void EnableWaterAtom()
{
    digitalWrite(WaterAtomPin, HIGH);
}
void DisableWaterAtom()
{
    digitalWrite(WaterAtomPin, LOW);
}


void Buttonclick()
{
    ButtonFlag = true;
#if DEBUG
    Serial.println("Buttonclick");
#endif
}

Распакуйте загруженные zip-файлы в:

C:\Users\Administrator\Documents\Arduino\

Запустите Arduino IDE. Далее нажмите:

Sketch -> Add file

Для версии на русском: Эскиз / Скетч -> Добавить файл. Таким образом мы добавим файл uvlazhnitel.ino. Нажмите CTRL+U, чтобы загрузить код на вашу плату. Подождите некоторое время, появится подсказка, подобная следующей:

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

Заливать можно любую воду, но желательно дистиллированную. Ее можно купить в любом автомобильном магазине. Это делается для того, чтобы в испарители не образовалась накипь, которая приведет его в негодность.

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

Вариант № 2

Перейдем ко второму варианту увлажнителя воздуха Ардуино. Его суть в автоматизации вашего купленного увлажнителя воздуха. Не всегда есть возможность и время включать или выключать увлажнитель, а иногда просто хочется, чтобы система сама работала при определенных условиях. Так обычно устроены умные дома.

Внимание! Этот проект использует высокое напряжение и силу тока. Любое неправильное использование или ошибки могут привести к серьезной травме или смерти. Владельцы сайта не несут ответственности за любые ваши действия.

Комплектующие

Программное обеспечение

Схема устройства и подключение

Для начала нам нужно прикрепить датчик температуры/влажности DHT-11 к Arduino. Далее берем вилку увлажнителя воздуха и отрезаем конец, который является питанием:

Теперь очистите обрезанный провод примерно на 1-1,5 см, а затем открутите клемму COM на модуле реле. Вставьте штекерный провод в разъем COM, а другой конец - в разъем NO или нормально открытый. Будьте осторожны, когда вы подключаете провод или контакты с оголенными проводами, неправильные действия могут привести к поражению электрическим током.

Оставьте пока всё в таком отключенном состоянии. Если вам ближе познакомиться с работой модуля DHT-11, то лучше всего начать с этих двух уроков:

Убедитесь, что пин данных DHT-11 подключен к контакту 2 Ардуино, а контакт управления реле подключен к контакту 7. Итоговая схема нашего проекта ниже:

Код проекта

Откройте вашу IDE и установите библиотеку DHT-11. Теперь скопируйте и вставьте код Arduino и загрузите его на плату.

Скачать библиотеку DHT

#include "DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("ready.");
pinMode(7,OUTPUT);
dht.begin();
digitalWrite(7,HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
delay(5000);
float h = dht.readHumidity();
Serial.println(h);
if (h < 30){
  while(h < 40){
    h = dht.readHumidity();
    digitalWrite(7,LOW);
  delay(1000 * 60 * 10);
  }
}
else if (h > 30){
  digitalWrite(7,HIGH);
  delay(1000 * 60 * 10);
}
}

Что вы делаете с библиотекой. Откройте Arduino IDE, перейдите в:

Sketch -> Include libraries -> Manage libraries

Если у вас русская версия, то путь такой : Скетч -> Включение библиотек -> Управление библиотеками

Далее мы переходим:

DHT -> Install the DHT sensor library by adafruit - version 1.2.2

Теперь повторно запустите свой скетч.

Нам осталось только включить Arduino и подключите шнур питания к сетевой розетке. Теперь увлажнитель воздуха должен включаться каждый раз, когда влажность опускается ниже 30%. Он также имеет "период охлаждения", чтобы избежать слишком частого включения и выключения увлажнителя.

На этом всё. Желаю вам хорошо увлажнить воздух.

26 ноября 2019 в 14:21 | Обновлено 6 декабря 2019 в 23:59 (редакция)
Опубликовано:
Уроки, ,

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *

Adblock
detector