Контроль влажности подвала на arduino pro mini arduino+

arduinoLab

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

то как оно работает у меня:

Структурная схема или как все подключено, если собирать на модулях.

Принцип работы прост, измеряем температуру и относительную влажность воздуха в подвале и на улице (в приточной трубе вентиляции), из этих данных вычисляем абсолютную влажность и если в подвале влажность больше чем на улице, включаем вытяжной вентилятор. Для этого установлено два «датчика» с интерфейсом RS485, датчики являются исполнительными устройствами и по запросу передают в сеть данные с сенсора HDC1080 или управляют 9 ногой ардуино к которому подключен мосфет, который в свою очередь управляет вытяжным 12 вольтовым вентилятором. Отправляет команды на датчики ардуино леонардо, он же вычисляет абсолютную влажность из полученных с датчиков данных о температуре и влажности, дает команду на включение или выключение вентилятора, отображает информацию на LCD экране, передает телеметрию на радиомодуль HC12.

Уличный датчик, собран на плате с микроконтроллером, микросхемой MAX485 и стабилизатором питания AMS1117-05. имеет разъем с питанием и I2C шиной для подключения датчика температуры и влажности серии SHT, HDC или подобных, которые могут быть установлены на плате китайского модуля и две колодки, одну для подключения шины RS485 и питания, вторую, для подключения датчиков с однопроводной шиной. Изначально планировалось использовать датчик AM2301 или ему подобный и подключать его к той колодке, в итоге используется HDC1080 в I2C.

Датчик в подвале, имеет аналогичную разводку платы, только за место колодки для датчика AM2301, установлен мосфет и колодка для подключения 12 вольтового вентилятора.

Платы в формате .lay

на ардуино леонардо, установлен протошилд, на котором распаяны колодки для подключения RS485 и питания, китайский модуль на МАХ485, колодка для LCD1602 с I2C и радиомодуль HC12. для сети RS485 используется экранированная витая пара для локальной сети.

Для вычисления абсолютной влажности используется формула, истоки которой тут

Контроль влажности подвала на Arduino pro mini

Решаем изначальную задачу убрать выпадение конденсата в подвалах путем создания контроля влажности подвала на Arduino pro mini.

Есть в загородном доме два подвала которые гидроизолированы от земли (нет поступления воды из грунта).

Зимой на стенах появляется конденсат, предметы покрываются влагой. Температура в подвалах не опускается ниже 0…+2 градусов, т.е. вода не замерзает. Это достигнуто утеплением стен подвала снаружи ЭППС и нагревом пола подвала (он тепло не изолирован) землей.

1. Принцип работы

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

2. Выбор элементной базы

В качестве контроллера было выбрано Arduino Pro Mini. Это мой второй проект (первый – контроль работы теплового насоса был сделан на uno). Изучив предлагаемые контроллеры Arduino пришел к выводу что существует всего три варианта:

  • Arduino DUE (отдельная песня и мне кажется тупик),
  • Arduino MEGA,
  • все остальное (сильно схожие контроллеры на одном чипе 328).

Задача достаточно простая, по этому выбор пал на Arduino Pro Mini (не на мегу). В pro mini был прошит загрузчик optiboot 5 версии, это дало возможность использования сторожевого таймер и увеличением максимального размера кода.

Устройство индикации – до этого были испытаны монохромные дисплеи 4х20 символов и графический 128х64 точки на 9372. Появилось желание подключить дисплей цветной ЖК. В виду малого количества ножек у МК было использовано подключение по SPI . Ebay – имеет большое количество предложений на контроллере ILI9341 с размерами диагонали 1.8-2.8 дюйма и разрешением 320х240 точек. В эту конструкцию был куплен дисплей 2.4 дюйма.

Т.к. устройство будет устанавливаться в подвале то для наблюдения я хочу сделать выносной пульт со связью по радиоканалу. Для организации радиоканала были использованы модули на основе nrf24. Планируется система типа “умного дома” каждый блок (а сейчас есть уже два блока в подвалах) посылает пакет о своем состоянии в головное устройство.

Исполнительное устройство

В начале был использован классический одно канальный релейный шилд для ардуино. Корпус проектировался под него (есть даже выступы для крепления). После установки устройства в подвале был выявлен косяк – зависание контроллера дисплея при выключении вентилятора (25 вт). Сразу были увеличены конденсаторы по питанию, поставлен LC фильтр по 5 вольтам, дисплей был переведен на питание 3.3 вольта от внешнего стабилизатора (он уже был и использовался для питания nrf24). Все эти меры ничего не дали.

Затем возникла идея сброса контроллера дисплея при зависании. Программный сброс обеспечил. А вот как читать регистры дисплея так и не разобрался (типа прочел регистр все ок не прочел надо перегружать). Был организован периодический сброс – раз в час. Решение кривое. Все это делалось за городом из того что было.

Решение меня не удовлетворило. Пришлось везти блок в Москву, там было установлено твердотельное реле Sharp S202S02 ( с зеро кросс блоком) и помехо-гасящий конденсатор на 0.1 мкф. После этого устройство заработало без зависаний.

Используется датчик температуры и влажности DHT22, штатное включение, подтягивающий резистор 5 кОм, длина провода до 6 метров (что испробовал). Для согласования уровней 5 вольт ардуино и дисплея используются делители из резисторов 2к+4к. Согласования уровней для nrf24 не требуется.

3. Программа

Скетч, т.е. программа целиком ниже:

У меня есть достаточно богатый опыт программирования (с 89 года), но все это касается полноценных компьютеров, последнее время занимаюсь разработкой управляющих систем на arm под самосборной допиленной Linux, пишу либо на голом с или qt. Опыта программирования МК не имел, но старался перенести свой опыт на них.

Использую шедуллер задач leos ver 1 (первая версия использует таймер вторая использует сторожевой таймер), это “обертка” таймера для организации периодического вызова функций (у меня вызов опроса датчика).

Сторожевой таймер используется для борьбы с зависанием МК (я их не наблюдал но пусть будет).

Для работы с дисплеем используется библиотека ucglib версии не позднее 1.02. D более поздних версиях переработан формат шрифтов и есть проблемы с русификацией в кодировке UTF-8, допиливать было лень.

Для nrf24 используется библиотека от маньяка.

Для чтения датчиков DHT используется самая свежая библиотека с официального сайта. Там кодов ошибок больше.

Реализован подсчет мото часов блока и вентилятора.Кнопка повешена на прерывание и позволяет менять настройки включения вентилятора, смотреть информацию об устройстве (длительное нажатие) и сбрасывать счетчики (нажатие при включении).

Реализован вывод ошибок чтения DHT22 (верхний правый угол цифры), с чтением были проблемы, после оптимизации кода они ушли. На графике выводится не весь диапазон темперур (вывод -20…+20) для увеличения разрешающей способности графика в области допустимых темератру в подвале (0…+20).

4. Конструктив

Корпус напечатан на 3D-принтере (нижняя часть склеена из двух частей). Очень удобно, все отверстия сразу сделаны, только заусецы счистить и можно использовать. Получилось достаточно компактно. Вся электроника кроме входных цепей распаена на макетке, проводом (по времени один вечер).

Замеченные косяки:

  1. На дисплее появляются “не штатные” точки на графике (скоре всего помехи по SPI после перерисовке экрана они проподают),
  2. Кнопка иногода “не четко” срабатывает проблемы с длительным нажатием.
  3. nrf24 в блоке ожидает “квитанции” о приеме пакета иногда “квиатнция” не приходит (30-40%) но пакет доставляется до приемного устройства.
  4. Уличный датчик DHT-22 показания влажности прыгают утром (ветер, солнце?). Датчик менял.

Конструктивная критика приветствуется, особенно по коду.

Arduino контролирует в подвале температуру, влажность и затопление и выдает данные на веб-страницу

Хочу поделиться опытом создания системы контроля и предупреждения.

На одном из строительных объектов делали строение с бассейном, сауной, тренажёрным залом и комнатой отдыха. Все это было в приличных размерах как для одного хозяина. Чисто технически понадобилось 2 подвала: 1-й для обслуживания насосов бассейна — маленький, 2-й для обслуживания систем обогрева и накопления тепла

Закуплены были 2 напольных евро-люка разных размеров для двух подвалов. Люки зарывались 4-мя винтами и имели очень плотные резиновые уплотнения. Чтобы открыть подвал, необходимо было 4 человека (и немного здоровья). При работе всей техники в подвале поднималась температура и влажность, при этом контролировать что там происходит практически неудобно.

В итоге было принято решение о создании устройства, которое бы показывало, а также управляло вентилятором, звуковым сигнализатором, электро-клапаном (воды), и контролировать его можно было с любого смарт устройства.

За основу взял Arduino Pro Mini плюс Ethernet ENC28J60. Для замера влажности и температуры датчик DHT11 и FC-28 (датчик влажности почвы – в роли датчика затопления).

Тех задание:

1) Управление и информирование через Web интерфейс;
2) Включение и отключение вентиляции по заданному уровню влажности;
3) Включение и отключение клапана водопровода (возможно, ревун, откачивающий насос) при затоплении.

В выборе Arduino Pro Mini тоже надо подумать, так как существуют разные исполнения:

Лучше брать ту, в которой стабилизатор по мощнее, так как та, что по слабее, при активных реле и сетевом контроллера закипит стабилизатор, что приводит к зависанию системы (я упустил этот нюанс и получил зависания, но приобрел более ценное – опыт).
Сетевые контроллеры также надо выбирать внимательно, так как есть те которые от 5В (стабилизатор на обратной стороне модуля) и на 3,3В. Нужен будет дополнительный стабилизатор на 3,3В.

Блок питания взял от обычного свитча (или роутера) TP-Link 9В 500мА (примерно), они часто встречаются за копейки от паленых свитчей или роутеров.

Принцип работы простой: есть 2 датчика, которые сливают информацию на контроллер. В зависимости от ситуации контроллер включает и выключает реле (клапана водопровода, возможно ревун, откачивающий насос, вентилятор). Управление и мониторинг через WEB интерфейс который реализован программой на базе модуля ENC28J60.

1) Сработка датчика затопления = включение реле (клапана водопровода(ревун, откачивающий насос ); + информирование на web странице крупным шрифтом;
2) Повышение влажности выше установленного уровня = включение реле вентилятора;
3) Вся информация о температуре влажности и затоплению выводится на web страницу;
4) При понижении температуры ниже 5 градусов оповещение на web сайте о угрозе.

Наглядно можно увидеть на видео:

На практике все очень удобно. Всегда можно посмотреть с Телевизора (Smart), телефона или планшета — что творится в закрытых помещениях, не открывая их.

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

Надеюсь, эта статья кому-то поможет, а кого то вдохновит на создание своего проекта.

Блог Евгения Николаенко

Контроль отопления и вентиляции на базе Arduino

Представляю мой новый проект — автоматическое управление отоплением и вентиляцией на базе Arduino Nano 3.0.

Довольно долго я бился над решением задачи создания оптимального микроклимата в ванной комнате, и наконец-то, благодаря знаниям, полученным в процессе изучения Arduino и различных датчиков температуры и влажности, мне это удалось! 🙂

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

А теперь предлагаю подробнее рассмотреть как все работает, включая программу (скетч) для Arduino!

Устройство системы

На передней панели системы управления отоплением и вентиляции находится двухстрочный дисплей LCD 1602 I2C, который отображает текущие значения температуры и влажности, а также позволяет просматривать меню установок прибора. Красная и зеленая кнопки — кнопки управления (оказалось вполне достаточно двух кнопок для изменения настроек и управления устройством). Красный светодиод загорается при включении отопления, а зеленый — при включении вентиляции. На левой стороне расположен датчик температуры и влажности DHT22 а также USB-порт модуля Arduino, который пришлось заклеить для лучшей сохранности.

Система для управления отоплением и вентиляцией на базе Arduino. Вид сбоку

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

Система для управления отоплением и вентиляцией на базе Arduino. Вид сбоку

Система контроля микроклимата работает от сети 220 вольт и подключена к ближайшей розетке.

Система для управления отоплением и вентиляцией на базе Arduino.

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

Система для управления отоплением и вентиляцией на базе Arduino со снятой лицевой панелью

Внутри находится сборка из модуля ардуино нано 3.0, силовых реле с максимальным током до 10 ампер, и блоком питания на 9 вольт.

Система для управления отоплением и вентиляцией на базе Arduino. Вид изнутри

Панель управления подключена к основному модулю при помощи шлейфов.

Система для управления отоплением и вентиляцией на базе Arduino. Вид изнутри

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

Панель управления системы контроля микроклимата на базе Arduino

Управляющий модуль сконструирован на монтажной плате и имеет разъемы для подключения датчика влажности и температуры DHT22, панели управления, нагрузки (4 разъема), а также источника питания. Первый, второй и четвертый разъемы работают в режиме ключа (замыкают и размыкают цепь). Третий разъем обеспечивает выход с напряжением 5 вольт для управления дистанционной розеткой.

Главный модуль системы контроля микроклимата на базе Arduino

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

Главный модуль системы контроля микроклимата на базе Arduino. Монтажная плата

Корпус системы — обычная электрическая разветвительная коробка стандартного размера.

Корпус системы контроля микроклимата

Настенный конвектор, отлично подсушивающий влажный воздух, находится на противоположной стене от модуля управления микроклиматом.

Настенный конвектор, управляемый системой на базе Arduino

Розетка с дистанционным управлением системы контроля микроклимата на базе Arduino

Управляющая программа (скетч для ардуино)

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

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

Решением данной ситуации стало изменение алгоритма программы таким образом, чтобы измерения проводились 5 раз подряд (в течение 10 секунд), а затем для всех показателей вычислялось среднее значение, на основании которого применялись правила включения/отключения нагрузки. Это позволило избавиться от таких «скачков» с выключением вытяжки или батареи!

Итак, скетч под этим спойлером:

Скетч занимает около 50% памяти ардуино и требует дополнительных библиотек для работы с датчиком DHT22 и экраном LCD через интерфейс I2C, найти которые можно на просторах интернета.

На момент написания статьи уже месяц система работает в штатном режиме, микроклимат в ванной стал практически идеальным, конечно пришлось несколько раз менять настройки включения и выключения вытяжки и батареи, но подобрав нужные параметры все стало просто идеально — и днем и ночью комфортные ощущения при нахождении в этом помещении! 🙂

Обновлено 05.11.2018

Зависание контроллера Arduino

Прошло пол года с момента начала активной эксплуатации устройства, и обнаружились некоторые проблемы, а именно, периодические зависания модуля ардуино. Начав разбираться, первым делом наткнулся на некий WatchDog, который способен автоматически перезагрузить систему при зависании микроконтроллера. Подумал — вот оно подходящее решение. Но как выяснилось, на моей китайской копии Arduino Nano 3.0 WatchDog работает неправильно из-за некорректной прошивки загрузчика. Для того чтобы это исправить, нужна «правильная» прошивка загрузчика, найти которую можно в интернете, и программатор, которым все это дело будет «зашиваться» внутрь чипа. Пока ждал программатор с Китая, решил поискать реальные причины зависания контроллера.

Просадка напряжения

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

Первым делом решил добавить 2 конденсатора по 1000 мкф в надежде, что они уменьшат просадку напряжения при срабатывании реле. Первый поставил параллельно выходу с блока питания (там кстати уже был свой конденсатор, но второй лишним не будет, подумал я), а второй — установил параллельно выходу +5V на плате ардуино, откуда как раз берется питание для реле. С этого же выхода питается и сам микроконтроллер. Складывается логичная ситуация — когда все реле включаются одновременно, микроконтроллеру не хватает напряжения и он зависает.

После добавление конденсаторов зависания практически прекратились, но все же, 1 раз в месяц могло и зависнуть.

Доработка скетча Ардуино

Поигравшись с конденсаторами, решил проверить программное обеспечение устройства на наличие неоптимального кода, который мог бы приводить к зависаниям микроконтроллера. Первым делом начал с проверки процедуры DoAll(), которая управляет включением и отключением реле. И тут меня как осенило, откуда берутся просадки напряжения.

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

Исправив код этой процедуры, а именно, добавив искусственную задержку в 200 миллисекунд после включения/отключения какого-либо реле, я был крайне удивлен стабильной работой прибора. Зависания вовсе прекратились, и вот уже 2 месяца прибор работает стабильно. Теперь и WatchDog не нужен, хотя конечно он не помешает, на всякий случай.

В итоге можно сказать, что причиной зависания являлась несбалансированность нагрузки на источник питания при выполнении программного кода, а также низкое качество источника питания. Исправив программу, исчез и дисбаланс. Ниже представлен исправленный фрагмент кода процедуры DoAll(). Жирным текстом выделены те самые задержки по 200 мсек, которые были добавлены в программу и кардинально повысили стабильность работы микроконтроллера.

Обновлено 02.02.2019

Раздельное включение вентиляторов вытяжки

Зимой обнаружилось, что из одной из вытяжет стал капать конденсат, поэтому было решено отключать на зиму этот вентилятор. И чтобы не лазить каждый сезон с отверткой в развет коробку и уж тем более в само устройство, решил сделать все программно, поскольку каждый вентилятор управляется отдельным реле. Немного переработал скетч, добавив дополнительный экран настроек, на котором можно задействовать или отключить каждый вентилятор по отдельности Также уменьшил время одновременного нажатия кнопок для переключения между экранами настроек с 3 до 2 секунд. Свежий скетч можно скачать по ссылке ниже

Источники:

http://arduinoplus.ru/kontrol-vlazhnosti-podvala-na-arduino-pro-mini/

http://habr.com/post/249201/

http://eanik.ru/2018/05/19/microclimat-control-via-arduino/

http://alexgyver.ru/arduino-led-cube/

Ссылка на основную публикацию