Современный котел заводского изготовления для отопления загородного дома комплектуется подобным контроллером. Данная статья о том, как самому сговнякать такой контроллер практически за копейки.
В процессе разработки контроллера я не стал делать упор на его универсальность, что-бы одним устройством можно было решить все потребности. На практике, в жизни, так не получается. В результате мы получаем хромую лошадь, которая кое-как решает возложенную на нее задачу, а все остальное — как получится. Плюсом мы получаем никогда не заканчивающуюся разработку, сложное подключение и управление, а так-же низкую надежность. Данный контроллер собран из готовых, проверенных временем, модулей и схемотехнических решений и «заточен» под выполнение одной задачи — контролировать температуру теплоносителя и управлять вентилятором поддува воздуха в самодельный котел.
Основа проекта очередной Китайский клон Ардуино — FUNDURINO NANO V3. Ничем не отличается от оригинала, кроме того, что Arduino IDE его в упор не видит и не прошивает. Для того, что-бы Узкоглазая поделка заработала, нужно в Arduino IDE перейти в вкладку «Инструменты», выбрать «Processor: «ATmega328P (Old Bootloader)» и поставить галку на «ATmega328P (Old Bootloader)»:
Несмотря на то, что скорость чтения/записи чипа понизится в два раза, на практике это практически не заметно. Взамен мы получаем почти полный аналог Arduino Nano v3 всего за 300р.
Плата Ардуино соединяется с основной платой через «панельку» для микросхем DIP-32 — встает в нее просто идеально и очень прочно и надежно удерживается. Остаются незадействованными два контакта «панельки» — панель DIP-30 была-бы предпочтительней, но она не стандартная и цена на нее явно завышена.
Датчик температуры — DS18B20. Вычисление температуры происходит в самом датчике — используется стандартная библиотека «DallasTemperature.h». Обратите внимание: попадаются датчики, которые измеряют только кратно 0.5°С. Сама библиотека позволяет получать значение температуры с точностью до 0.01°С. Нам такая точность не к чему, поэтому температура округляется до 0.1°С (откидываются сотые доли градуса). Подойдут и датчики с точностью 0.5°С, но их показания не так наглядны — не сразу заметно, температура растет или падает.
Всем известный «подводный камень» библиотеки «DallasTemperature.h» («delay» в теле библиотеки) меня в этот раз обошел стороной — датчик опрашивается практически каждую миллисекунду. Именно поэтому, я и использовал эту библиотеку в довольно сложном проекте. Иначе, такая библиотека годится только для демонстрации возможностей датчика, не более — «delay» в теле библиотеки будет принудительно останавливать всю программу на время преобразования температуры. Мне кажется этот «баг» связан не столько с самой библиотекой, сколько с типом датчика. Я протестировал несколько датчиков, купленых в разных интернет-магазинах, и выяснил, что примерно 2/3 из них действительно имеют этот «баг» — выполнение кода тормозится на период опроса датчика, из-за чего притормаживает вся прошивка целиком. В основном этим грешат датчики, купленые по 50р. за 10 шт. на АлиЭкспресс и Озон. Датчики, купленые в ЧиДе по 300-600р. за 1 шт., работают идеально.
Индикатор — модуль для Ардуино с 4-символьным 7-сегментным светодиодным дисплеем 19мм на TM1637. Плюсом такого модуля является то, что он подключатся к Ардуино всего двумя проводниками. Кроме того, под Arduino IDE для этого дисплея написано много прекрасных библиотек с множеством функций и возможностей.
Здесь стоит отметить один важный момент: если на этом дисплее не планируется проект часов или чего-то похожего, ни коем случае не покупайте модули с дисплеями с двоеточием — в таких дисплеях двоеточие физически подключено вместо десятичных точек (сегмент «dp») и точки, соответственно, не горят ни при каких условиях. Т.к. Ардуино «не мой конек», с таким модулем я столкнулся впервые и, естественно, купил не тот — с двоеточием. Пришлось аккуратно выпаять неподходящий дисплей и впаять «правильный»:
Для любителей перед пайкой смоделировать схему в Протеусе дам одну подсказку: что-бы микросхема TM1637 заработала в симуляторе, нужно ее входы CLK и DIO «подтянуть» в плюсу резисторами по 10кОм. А модели Ардуино для Протеуса берем здесь: https://www.theengineeringprojects.com/2015/12/arduino-library-proteus-simulation.html
Схема контроллера состоит из двух частей: собственно, сам контроллер и силовая часть. Так сделано умышленно по двум причинам:
- Низковольтная и высоковольтная части схемы находятся на разных печатных платах. Это повышает безопасность устройства для пользователя и наладчика.
- Если в процессе разработки нужно что-то изменить в одной из частей схемы, то не нужно переделывать большую и сложную плату — достаточно заменить только необходимую часть.
На данный момент, такая схема отработала уже вторую зиму и показала, что такой подход к контролю температуры котла, очень прост и удобен: засыпал полную топку угля, выбран нужную температуру и пошел заниматься своими делами. За все время, схема, естественно, претерпела ряд изменений и дополнений. Поэтому, на данный момент, актуальна схема версии 1.4 — в нее внесены все важные и существенные дополнения и улучшения.
Особенности версии 1.4:
- Регулировка температуры от 0 до 100°С с шагом 5°С кнопками UP/DOWN. В пред. версиях температура регулировалась сначала с шагом 0.1°С потом с шагом 1°С. Но, практика показала, что в этом нет необходимости и гораздо удобнее, когда температура котла регулируется с шагом 5°С.
- Регулировка мощности вентилятора от 0 до 100% с шагом 25% кнопками MIN/MAX. Такой способ регулировки также выстрадан на практике и мне показался наиболее удобным.
- Сохранение установленных значений температуры и вентилятора в энергонезависимой памяти.
Схема управляющей части может питаться от 5В или больше — используйте соответствующие контакты для подключения. Я использую внутренности зарядных устройств от старых смартфонов. Как правило, такие ЗУ выдают стабильные 5В и их можно подключать напрямую к выходу встроенного стабилизатора Ардуино, вывод V_OUT (он-же 5V или VCC). Вывод V_IN (VIN) при этом не задействован. На моей плате этот контакт подписан +5V. Если ваш источник питания выдает больше 5В, то питать Ардуино напрямую от него нельзя — нужно подавать питание на контакт VCC, он-же V_IN или VIN на плате Ардуино.
Обе платы устройства изготовлены на двухстороннем стеклотекстолите — компоненты и дорожки равномерно распределены по обеим сторонам. На управляющей плате, кнопки, индикатор и контакты для подключения размещены на верхней стороне, а Ардуино и «мелочевка» — на нижней:
Еще пару слов про датчик DS18B20: резистор подтяжки линии DQ установлен на плате и если используется короткий провод, то как правило, этого вполне достаточно. Но, если датчик подключается длинным проводом, то нужно этот резистор продублировать на конце линии — прямо на выводах датчика. В идеале нужно вообще всегда так делать и не паять этот резистор «подтяжки» на плате. Но с короткими проводниками это допустимо.
На схеме и на готовой плате есть пищалка-зуммер, но программно она пока не используется — введена для развития проекта. Возможно, в будущих версиях задействую ее для подтверждения нажатия кнопок или сигнализации о превышении температуры.
Программная часть проекта написана на упрощенном С в среде Arduino IDE 2.3.8 (не знаю, может кому-то это важно) с активным использованием готовых библиотек. Ну, в общем, как и полагается настоящему Ардуинщику. Да и зачем изобретать велосипед с написанием своих библиотек и функций, если можно потратить это время на что-то более важное. Наша задача, как Ардуинщиков, все это правильно друг с другом свести и красиво прокомментировать:
Помимо основной части, исходник разбит на три функции: опрос кнопок, считывание температуры и управление вентилятором. Опрос кнопок происходит без delay-ев — на таймере millis. Кнопки физически подтянуты к плюсу, плюс фильтруются конденсатором. Но программного антидребезга все равно не избежать. Для опроса кнопок используется наиофигеннейшая библиотека «uButtonMulti.h» — рекомендую, легко настраивается, работает адекватно + множество функций.
Для регулировки скорости вращения вентилятора используется ШИМ + суперский оптрон MOC3083. Этот оптрон сам следит за переходом синусоиды через ноль и нам остается только подавать на него сигнал и все — его не нужно контролировать программно.
Значения ШИМ подобраны опытным путем, исходя из особенностей моего вентилятора. Но, как правило, все вентиляторы более-менее стандартизированы, а значит и с другим вентилятором все будет работать примерно также. Тем более, исходник к статье прилагается — правьте сами, на свой вкус. Гистерезис регулировки температуры не предусмотрен потому, что вентилятор сам по себе довольно инерционный + процесс раздува котла инерционен еще больше.
Конструктивно придумано так, что силовая плата расположена под управляющей (как и в обычной жизни — начальник всегда сверху), при этом она ее размер немного больше на ширину разъемов для подключения высоковольтных проводов. Так сделано что-бы было удобно весь этот «сэндвич» подключать, не разбирая.
Схема силовой части стара как мир, за исключением оптрона MOC3083, который значительно упростил управление симистором. Не забываем важное правило — симистор по току нужно выбирать минимум в два раза больше чем требуется. Учитывая, что вентилятор потребляет крайне мало тока, радиатор для симистора не требуется — он припаян прямо на плату. Если данный терморегулятор использовать для электронагревателя (например ТЭН), то симистор нужно обязательно установить на радиатор.
К контактам AC_IN подключают сеть 220В, к контактам FAN_OUT подключают вентилятор (рассчитанный на 220В). Контакты AC_OUT предназначены для подключения ЗУ от смартфона для питания управляющей платы.
Для безопасности, между платами устанавливается прокладка из паронита, а стойки, соединяющие платы, должны быть пластиковыми.
В итоге, у нас получается такой вот «сэндвич» из двух плат, между которыми спрятался ЗУ от смартфона:
Фото выше, это разные устройства предыдущих версий. Они все похожи, поэтому я не делал фото устройства версии 1.4 — оно выглядит также. В приложенном архиве есть все версии устройства для ознакомления с этапами разработки устройства, но повторять всегда нужно самую последнюю версию.
Также в архиве есть *.wrl файл 3D-модели модуля TM1637:
Скачать архив к статье можно с Я.Диска: https://disk.yandex.ru/d/t3SCrisAXVlNPw





















