Привет, увлеченным электроникой читателям. В этой статье и видео нам предстоит разработать, смонтировать и отладить проект под названием регулятор влажности воздуха на Ардуино. Это реальный заказанный мне проект, выполнение которого хочу показать вам. Мы вместе с вами подберем компоненты, начертим схему их электрического соединения. Смонтируем прибор в корпусе. Напишем и отладим программу. И в конце пути получим готовое устройство – регулятор влажности воздуха для передачи заказчику.
Обязательно подпишитесь на наш канал Youtube
Звучит задание просто: необходимо измерять влажность в помещении, склонном к её увеличению и включать вентилятор при влажности, выше заданной. Вентилятор питается от сети 220В. Так же в задании четко указано, что должна быть возможность изменения величины заданной влажности воздуха. И самое сложное я в этом проекте выделю реализацию интерфейса для ввода задания на регулирование влажности, что потянет за собой индикатор для отображения цифр, а так же инструмент ввода данных.
По описанию заказчика, помещение с датчиком склонно к конденсации влаги. Поэтому устройство регулирования будет находиться в сухом рядом стоящем помещении, а датчик будет вынесен на проводах. Сам датчик я выберу BME280 – он, если хорошо плату загерметизировать лаком или термоклеем, меньше других боится конденсата. Он может также замерять и температуру и давление воздуха, но в этом проекте эти данные будут не задействованы. Индикатор будет четырехзначный на светодиодах с дробными точками между цифрами. Корпус с прозрачной крышкой для безпроблемного монтажа индикатора.

Блок питания возьмем на 9В, подключим на вход VIN контроллера Arduino и все модули запитаем от стабилизатора напряжения 5В 800мА на его борту.
Модуль реле будет самый дешевый одноканальный на 5В. С одним недостатком – логика обратная и при подаче питания реле может проклацывать кратковременно.
Разработанная схема упрощает монтаж, а так же разработку программы. Поэтому я вам советую не пренебрегать схемой при реализации своих проектов. Я разработаю схему в любимой бесплатной программе KiCad. Результирующая схема регулятора влажности перед вами.

Теперь монтируем все компоненты в корпус согласно принципиальной схеме. Вывод проводов на вентилятор сделаем через гермоввод. И так же поступим с отводом кабеля для датчика влажности BME280. Сверлим отверстия в корпусе для енкодера, ввода питания и двух гермовводов. Монтируем провода, приклеиваем модули на свое место. Железо для регулятора на Ардуино готово.
Теперь набрасываем скетч для загрузки в контроллер. В нем нужно предусмотреть считывание текущего значения влажности воздуха с датчика по сети I2C, обработку енкодера и кнопки енкодера, управление релешкой, отображение на индикаторе двух режимов: текущего и ввода задания. Так же необходимо программно предусмотреть запись последнего значения заданной влажности в постоянную енергонезависимую память контроллера, чтобы при выключении питания задание не сбрасывалось на ноль.
Программа под Arduino IDE получилась следующей
#include <Wire.h>
#include <BME280.h>
#include <EEPROM.h>
BME280 bme;
#define SCLK 10
#define RCLK 9
#define DIO 8
#define button 4
#define relay 5
byte digitBuffer[4];
unsigned long previousMillis = 0;
const long interval = 1000;
int pinA = 2; // номер вывода, подключенный к CLK енкодера
int pinB = 3; // номер вывода контроллера, подключенный к DT енкодера
int encoderPosCount = 0;
int pinALast;
byte mode;
float h_set, humidity;
void setup(){
pinMode(RCLK, OUTPUT);
pinMode(SCLK, OUTPUT);
pinMode(DIO, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
EEPROM.get(0, h_set);
bme.begin();
Serial.begin(9600);
pinMode (button,INPUT_PULLUP);
pinMode (pinA,INPUT);
pinMode (pinB,INPUT);
pinALast = digitalRead(pinA);
attachInterrupt(0, doEncoderA, CHANGE); //прерывание по изменению пина №2(для Arduino UNO)
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if(digitalRead(button) == LOW) {if (mode==1) {mode=0; EEPROM.put(0, h_set);} else {mode=1; encoderPosCount=h_set;}}
Serial.print("h_set=");
Serial.println(h_set);
humidity = bme.readHumidity();
unsigned int intvar;
if(mode==0) intvar = humidity * 10.0; else intvar = h_set * 10.0;
digitBuffer[0] = intvar / 1000;
digitBuffer[1] = intvar % 1000 / 100;
digitBuffer[2] = intvar % 1000 % 100 / 10;
digitBuffer[3] = intvar % 1000 % 100 % 10;
out_func();
}
// заполняем массив
// однократно выводим данные из массива на 7сигмент
// тоесть функция должна постоянно крутится.
showDisplay();
}
void doEncoderA() {
// следим за переходом low-to-high на контакте A
if (pinALast != digitalRead(pinA)){
if (digitalRead(pinA) == HIGH) {
// проверяем контакт B для определения направления вращения
if ((digitalRead(pinB) == LOW)&&(encoderPosCount<100)) {
encoderPosCount ++; // CW
}
else if(encoderPosCount>0){
encoderPosCount--; // CCW
}
}
Serial.println (encoderPosCount);
}
pinALast = digitalRead(pinA);
if (mode==1) h_set=encoderPosCount;
}
void out_func(){
if (humidity > h_set) digitalWrite(relay, LOW);
if (humidity < h_set-2.0) digitalWrite(relay, HIGH);
}
void showDisplay(){
const byte digit[10] = { // маска для 7 сигментного индикатора
0b11000000, // 0
0b11111001, // 1
0b10100100, // 2
0b10110000, // 3
0b10011001, // 4
0b10010010, // 5
0b10000010, // 6
0b11111000, // 7
0b10000000, // 8
0b10010000, // 9
};
const byte chr[4] = { // маска для разряда
0b00001000,
0b00000100,
0b00000010,
0b00000001
};
// отправляем в цикле по два байта в сдвиговые регистры
for(byte i = 0; i <= 3; i++){
digitalWrite(RCLK, LOW); // открываем защелку
byte chislo = digit[digitBuffer[i]];
if(i==2) chislo &=~(1<<7);
shiftOut(DIO, SCLK, MSBFIRST, chislo); // отправляем байт с "числом"
shiftOut(DIO, SCLK, MSBFIRST, chr[i]); // включаем разряд
digitalWrite(RCLK, HIGH); // защелкиваем регистры
delay(1); // ждем немного перед отправкой следующего "числа"
}
}
Электромагнитное реле 12 В
Имеет одну группу переключающихся контактовТок коммутации при переменном напряжении 250 В - 10 А,при..
32.69грн.
Стабилитроны: принцип работы, характеристики и применение в электронике
Стабилитрон: что это и как он работает Стабилитрон (англ. Zener diode) — это полупр..
Разработка печатных плат под заказ — профессиональное проектирование PCB для бизнеса
Разработка печатных плат под заказ — профессиональное проектирование PCB для бизнеса Разработка..
Подключение шагового двигателя
Привет, друзья! Предлагаю вам практический алгоритм, как правильно подключить обмотки шагового дви..
AMS1117-5.0 микросхема стабилизатор напряжения
Микросхема - линейный регулятор напряжения применяется для получения стабилизированного напряжения 5..
6.27грн.





