Итак, по плану строительства моего каркасного дома была предусмотрена система вентиляции, которую я собираюсь сделать с рекуперацией воздуха.
Задача максимум: сделать своими руками рекуператор, управляемый в автоматическом режиме по сигналам датчиков качества воздуха микроконтроллером на базе ARDUINO.
Получится у меня или нет - вопрос... Но, поживем - увидим. Далее я буду писать порядок действий и выкладывать рабочие скетчи (прошивки) для конкретного оборудования.
Расчет потребных параметров системы вентиляции можно почитать в статье Вентиляция в каркасном доме своими руками.
Блок управления рекуператором на ARDUINO
Для блока управления рекуператором мне понадобятся:
- контроллер (я выбрал Arduino UNO R3 на ATMEGA328P CH340);
- дисплей LCD1602 (синий) в сборе с I2C адаптером (что облегчит его подключение);
- модуль BME280 высокоточного датчика атмосферного давления, температуры и влажности (управление возможно по I2C интерфейсу);
- инфракрасный датчик MH-Z19B для контроля уровня углекислого газа (UART, PWM).
Все комплектующие были куплены на Aliexpress.com.
I2C / IIC (Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.
Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.
Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.
Среда Arduino IDE сначала ни в какую не хотела определять китайскую плату Arduino UNO R3. Для корректного определения пришлось в настройках изменить тип платы на "Arduino Duemilanove or Diecimila".
Подключение LCD1602 к Arduino UNO R3
Я купил дисплей LCD1602 (синий) в сборе с I2C адаптером, который подключает экран LCD1602 к платам Uno, Nano или Mega всего лишь при помощи 4 пинов.
Жидкокристаллический дисплей с поддержкой i2c подключается к плате при помощи четырех проводов – два провода для данных, два провода для питания:
- вывод GND подключается к GND на плате;
- вывод VCC – на 5V;
- SCL подключается к пину A5;
- SDA подключается к пину A4.
Подробнее - на сайте https://arduinomaster.ru
После подачи питания на схему необходимо добиться правильного контраста, если он будет настроен неверно, то на экране ничего не будет отображаться.
Для настройки контраста следует потенциометром (сзади на плате) добиться заполнения прямоугольниками верхней строки дисплея.
Для отображения информации на дисплее необходимо скачать и подключить библиотеку LiquidCrystal_I2C.h, после чего загрузить скетч, приведенный ниже.
Самый простой путь подключить библиотеку LiquidCrystal_I2C.h:
- запустить среду Arduino IDE;
- выбрать в меню "Скетч - Подключить библиотеку - Управлять библиотеками";
- в открывшемся окне Менеджера Библиотек ввести в строку поиска LiquidCrystal I2C, найти "LiquidCrystal I2C by Frank de Brabander", нажать кнопку установки.
#include <Wire.h> // подключение библиотеки для связи микроконтроллера с устройствами и модулями через интерфейс I2C
#include <LiquidCrystal_I2C.h> // подключение библиотеки LCD-экрана
LiquidCrystal_I2C lcd(0x27,16,2);
// создаем значек градуса, byte - хранит 8-битное беззнаковое число, от 0 до 255
byte gradus[8] =
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
// Функция setup вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д.
// Функция setup запускает только один раз, после каждой подачи питания или сброса платы Arduino.
void setup()
{
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку дисплея
lcd.createChar(1, gradus); // 1 – номер, присваиваемый создаваемому символу (от 0 до 7); gradus - пиксельные данные для символа
lcd.clear(); // Очищаем экран и размещаем курсор в левом верхнем углу
Wire.begin(); // Подключаемся к шине i2c
}
void loop()
{
lcd.clear(); // очищаем экран для следующей итерации
lcd.setCursor(0,0); // устанавливаем курсор на нужную позицию
lcd.print("VLAG: "); // выводим необходимую информацию
lcd.print(" %");
lcd.setCursor(0,1);
//lcd.print("P ");
lcd.print(" ");
//lcd.print("T ");
lcd.print("\1");
lcd.print("C");
delay(1000); // обновление информации на экране 1 раз в 1000 мс
}
Подключение датчика давления, влажности и температуры BME280 по шине I2C
У модуля BME280 всего 4 контакта: питание (VIN), земля (GND), линия тактирования (SCL) и линия данных (SDA).
Подключаем аналогично дисплею:
- вывод GND подключается к GND на плате;
- вывод VCC – на 5V (мой датчик 5-вольтовый);
- SCL подключается к пину A5;
- SDA подключается к пину A4.
Подключал напрямую, без подтягивающих резисторов.
Попутно я подключил и модуль реального времени DS1302. Для установленной бибилиотеки iarduino_RTC time по умолчанию подключение выводов следующее:
- pin 8 к выводу RST;
- pin 6 к выводу CLK;
- pin 7 к выводу DAT;
- GND - GND;
- 5 V - VCC.
Ссылка на скетч данного этапа https://yadi.sk/d/UpuV-6b_8fHiVA
Подключение датчиков температуры DS18B20
Датчики температуры DS18B20 в количестве 4-х штук я планирую разместить на входе и выходе рекуператора. Они позволят мне анализировать температуру входящего и выходящего воздуха, а затем примерно рассчитать эффективность рекуперации, а также определить необходимость включения режима разморозки при низких отрицательных температурах.
Для подключения датчиков необходимо:
- установить библиотеку OneWire.h;
- запастись (обязательно) сопротивлением 4,7 кОм (подтягивающий резистор для сигнального провода).
Процесс подключения я описывать не буду (можно почитать по ссылке http://arduino-diy.com/arduino-tsifrovoy-datchik-temperatury-DS18B20). Датчики я буду подключать через коннекторы, для этого припаял цветные пины (чтобы не перепутать провода).
Ссылка на скетч данного этапа https://yadi.sk/d/UpuV-6b_8fHiVA
В настоящее время мой проект имеет следующий вид:
Далее планируется подправить код скетча (убрать ненужное, добавить обработку данных температуры от датчиков), а также продумать логику работы для управления реле вентиляторов.
Но об этом позже.
Блок управления содержит плату Ардуино, все датчики, а также два реле для включения и выключения вентиляторов.