Контроллер на Arduino для рекуператора. Часть 1
Год назад я писал про недорогой рекуператор для системы приточно-вытяжной вентиляции, вот тут
Он работает на своем контроллере, и в первую очередь контроллер мне был нужен для тестирования разных режимов, а так же видеть кпд и температуры.
Как это все работает. Контроллер находится в боксе.
Внутри дисплей, джойстик и автомат на 6А для защиты вентиляторов.
На главном экране отображается, 4-е температуры, приток вытяжка, до и после рекуператора.
Air я обозначил данные с датчика качества воздуха, сначала пытался перевести их в значения co2, но без успешно, хотя в сети есть примеры перевода. У кого получиться дайте знать.
Efficiency % , это по сути кпд рекуператора, сейчас 52,7% это я давно не менял фильтры, а т.к. в внутри дома воздух грязнее чем уличный за городом, то дисбаланс, и приток чуть больше вытяжки, и чем больше забивается фильтр, тем меньше кпд. Надо менять.
Для сравнения фильтр с вытяжки
A post shared by Дмитрий Супрун (@sd.workshop) on Dec 19, 2016 at 3:07am PST
Фильтр приточный, более черный, но менее забитый
A post shared by Дмитрий Супрун (@sd.workshop) on Dec 19, 2016 at 3:08am PST
Ниже отображается скорость приточного и вытяжного вентилятора и режим работы, режима три: авто, ручной и размарозка
Движением джойстика вправо попадаем в меню.
Выбор меню происходит также движением вправо.
далее выбираем меню авто режима, ручного режима или выбора режимов.
Начнем с последнего, выбрав mode попадаем в выбор режима
В меню режима auto
Есть выбор установок.
И так co2_min — это минимальное значение качества воздуха при котором вентиляция выключится, например когда все ушли из дома, поймать этот момент очень сложно с данным датчиком.
co2_max — это значение качества воздуха при котором включается вторая скорость, реально работает когда увеличивается сильно кол-во людей, с +-1 человек скорей всего не сработает
detrost — время в минутах, сколько размораживается теплообменик, а размараживаться он начинает при сильном падении КПД при наличии за на входячем датчике менее -5, т.к. пластины обмерзают то передача тепла падает, падает КПД, и чем больше обмерзание, чем сильнее падает КПД. Можно отследить по долям миллиметра толщину инея на пластинах, работает четко.
Drying — режим не использую, сделал для теста отключает приток на заданное время постоянно через время заданное в значении Drying_T, тоесть чередование работает, не работает, задается и то и то время, вообще данная функция не нужна, только для экспериментов.
На след странице последняя функция данного меню
Eff_min — это значение кпд, при котором включается разморозка теплооменника.
Теперь меню ручного режима.
Drying, тоже самое что и в авто — «режим не использую, сделал для теста отключает приток на заданное время постоянно через время заданное в значении Drying_T, тоесть чередование работает, не работает, задается и то и то время, вообще данная функция не нужна, только для экспериментов.»
Supply fan — задаем скорость приточного вентилятора, 0 — выключен, 1 скорость или 2 скорость
Exhaust fan — задаем скорость вытяжного вентилятора, 0 — выключен, 1 скорость или 2 скорость
Ручной режим использую летом, т.к. нет байпаса, то иногда нужно в дом подать не подогретый воздух, тогда можно просто включить один приток.
Теперь как это все собрать.
И так основной компонент это плата Arduino Nano
Платформа Nano, построенная на микроконтроллере ATmega328 (по стоимости 400 руб)
Питание и запись программы осуществляется по usb mini, в целом удобно.
Так же мне потребовался LCD дисплей 128×64 12864 (по стоимости 350-400 руб)
Джойстик для управления (по стоимости 200 руб)
3-4 датчика температуры DS18B20 (по стоимости 100 руб)
4-е реле для включения вентиляторов и переключения их скорости. (по стоимости 200 руб)
У меня двух скоростные вентиляторы и их два, поэтому 4-е реле. Чуть ниже опишу как они работают.
Датчик качества воздуха MQ135 (по стоимости 150 руб)
Теперь все это надо соединить, желательно пайкой, для этого удобно купить макетную плату.
И так соединяем там
Далее чтобы все заработало необходимо подключить к ардуино компьютер и записать программный код.
Программа для ардуино с необходимыми библиотеками лежит тут
Сам код программы лежит тут
Подробнее о нем расскажу в следующей части описания.
Что бы я изменил, если не делать эксперименты, а просто собрать контроллер.
Дисплей удобен, джойстик не особо нужен, все значения можно задать с компа, ведь они почти не меняются, один раз задал и ок. Меню соответственно убрать. А переключение скоростей сделать внешним переключателем, так удобнее, не очень удобно все время лазить по меню. Т.к. режимы переключать не надо, нужно только одно реле, а не 4-е, которое отключает приток при разморозке. Можно поставить второе реле для включения догрева при температурах за бортом ниже -10, будет комфортнее, но нужен другой корпус и керамический тэн. Датчик качества воздуха не особо нужен в небольшом доме, проще переключателем выключать или увеличивать скорость когда гости, а если уж и делать то ставить полноценный датчик СО2.
Блог Евгения Николаенко
Многие читатели моего блога просят выложить схему устройства управления микроклиматом на базе Arduino, о котором я рассказывал в этой статье. Но так сложилось, что изначально никакой схемы нарисовано не было, и прибор создавался как творческий проект — каждый новый компонент добавлялся спонтанно, по ходу сборки, каждая новая функция и строчка программного кода возникала уже, казалось, после окончательного завершения проекта. В итоге проект дорабатывался несколько раз, как по аппаратной, так и по программной части.
И вот однажды один из подписчиков попросил меня изготовить для него подобную систему управления микроклиматом, но с более широким функционалом. И в этот раз я решил не обделять читателей 🙂 и предоставить не только схему и скетч, но и подробно описать весь процесс разработки системы в мельчайших подробностях.
Это первая статья из серии, посвященной сборке системы контроля отопления и вентиляции на базе Arduino. И как видно из заголовка, речь пойдет о подготовке необходимых материалов.
Для начала, несколько слов о функционале будущей системы. Проектируемая система будет выполнять следующие функции:
- Включение и отключение вентиляции в зависимости от влажности и температуры в помещении
- Включение и отключение отопления в зависимости от влажности и температуры
- Включение вентиляции утром и вечером на заданный интервал времени для принудительного проветривания
- Управление освещением с помощью кнопки-таймера
- Управление водонагревателем — включение утром и вечером на заданное количество минут для подогрева воды
- Запись показаний всех датчиков и состояний реле на SD-карту (логгирование событий)
- Чтение настроек прибора с карты памяти (возможность настройки прибора при помощи компьютера)
Как видите, список функций значительно расширился. Особенно интересны для реализации будут функции управления освещением и логгирования событий. Возможно, в процессе сборки возникнут новые идеи, и функционал будет дополнен 🙂
А теперь перейдем непосредственно к перечню компонентов, необходимых для сборки устройства.
Управление микроклиматом на Arduino. Материалы для сборки
Основные части системы:
- Arduino Nano 3.0
- Модуль часов DS1307 или DS3231
- Модуль micro-SD card adapter
- Датчики влажности и температуры DHT11 (2 шт)
- Модули реле (у меня 2 модуля: 2 реле + 4 реле)
- Блок питания 12 вольт 1А (для Arduino)
- Блок питания 5 вольт 1А (для модулей реле)
- Дисплейный модуль LCD2004 I2C
- Монтажная плата 5х7 см (будущая материнская плата)
- Батарейка CR2032 3V
- SD карта, отформатированная на компьютере в FAT32
- Управляющие кнопки (3 шт)
- Светодиоды (3 шт)
- Резисторы номиналом от 330 Ом до 1 кОм (3 шт)
- Соединительные провода
- Различные разъемы и коннекторы (по необходимости)
- Высоковольтный выключатель (250V 6A)
- Корпус для прибора (в статье будет сборка без корпуса)
Из необязательного можно добавить макетную плату — для тестирования компонентов по отдельности перед установкой на материнскую плату, а также программатор — для смены загрузчика ардуино. О смене загрузчика и зачем это нужно будет рассказано в одной из следующих статей.
Перед началом сборки все компоненты желательно протестировать по отдельности.
Схема подключения и дальнейший процесс сборки будут опубликованы в продолжении статьи.
А пока предлагаю вашему вниманию занимательное видео о том, как я тестировал модуль часов RTC DS1307 и внутренний таймер Arduino. Суть такова, что модуль часов и ардуино при запуске однократно синхронизируют время между собой, и далее ардуино выводит показания часов RTC и своих внутренних часов (SYS) на LCD экран каждую секунду. Мне было интересно, возникнет ли через некоторое время расхождение в показаниях времени, и как скоро оно возникнет. В следующем видео показан результат этого эксперимента.
Как видите, расхождение в 2 секунды появилось уже спустя сутки, а спустя еще 20 часов расхождение составило уже целых 5 секунд! Кто из них бежит вперед, а кто отстает, судить сложно, поскольку все относительно, но пока эксперимент продолжается, и позже эти данные будут сравнены с часами на компьютере 🙂
Ниже приведен программный код для воспроизведения этого эксперимента.
Рекуператор на ARDUINO своими руками
Итак, по плану строительства моего каркасного дома была предусмотрена система вентиляции, которую я собираюсь сделать с рекуперацией воздуха.
Задача максимум: сделать своими руками рекуператор, управляемый в автоматическом режиме по сигналам датчиков качества воздуха микроконтроллером на базе 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.
После подачи питания на схему необходимо добиться правильного контраста, если он будет настроен неверно, то на экране ничего не будет отображаться.
Для настройки контраста следует потенциометром (сзади на плате) добиться заполнения прямоугольниками верхней строки дисплея.
Для отображения информации на дисплее необходимо скачать и подключить библиотеку LiquidCrystal_I2C.h, после чего загрузить скетч, приведенный ниже.
Самый простой путь подключить библиотеку LiquidCrystal_I2C.h:
- запустить среду Arduino IDE;
- выбрать в меню «Скетч — Подключить библиотеку — Управлять библиотеками»;
- в открывшемся окне Менеджера Библиотек ввести в строку поиска LiquidCrystal I2C, найти «LiquidCrystal I2C by Frank de Brabander», нажать кнопку установки.
#include // подключение библиотеки для связи микроконтроллера с устройствами и модулями через интерфейс I2C
#include
// подключение библиотеки LCD-экрана
// создаем значек градуса, byte — хранит 8-битное беззнаковое число, от 0 до 255
// Функция setup вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д.
// Функция setup запускает только один раз, после каждой подачи питания или сброса платы Arduino.
void setup()
<
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку дисплея
lcd.createChar(1, gradus); // 1 – номер, присваиваемый создаваемому символу (от 0 до 7); gradus — пиксельные данные для символа
lcd.clear(); // Очищаем экран и размещаем курсор в левом верхнем углу
Wire.begin(); // Подключаемся к шине i2c
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.
Подключение датчиков температуры DS18B20
Датчики температуры DS18B20 в количестве 4-х штук я планирую разместить на входе и выходе рекуператора. Они позволят мне анализировать температуру входящего и выходящего воздуха, а затем примерно рассчитать эффективность рекуперации, а также определить необходимость включения режима разморозки при низких отрицательных температурах.
Для подключения датчиков необходимо:
- установить библиотеку OneWire.h;
- запастись (обязательно) сопротивлением 4,7 кОм (подтягивающий резистор для сигнального провода).
Процесс подключения я описывать не буду (можно почитать по ссылке http://arduino-diy.com/arduino-tsifrovoy-datchik-temperatury-DS18B20 ). Датчики я буду подключать через коннекторы, для этого припаял цветные пины (чтобы не перепутать провода).
В настоящее время мой проект имеет следующий вид:
Далее планируется подправить код скетча (убрать ненужное, добавить обработку данных температуры от датчиков), а также продумать логику работы для управления реле вентиляторов.
Но об этом позже.
Блок управления содержит плату Ардуино, все датчики, а также два реле для включения и выключения вентиляторов.