Залежался в моем столе проект на ардуино, который я делал для себя на протяжении нескольких месяцев и вот пришла в голову мысль: "негоже труду пропадать под слоем пыли, пусть общественность получит возможность его оценить, может это окажет влияние на его развитие". И вот я взялся за работу по обработке имеющихся материалов для приведения их к удобоваримому виду. Все же когда делашь что-то для публичного обозрения, то делаешь это внимательнее. Схемы, разводка печатной платы (бери и ЛУТай или применяй другую технологию), прошивка, пользовательское руководство, все ссылки можно найти в статье. Так что каждый желающий может его реализовать, надеюсь кто-нибудь захочет. Сам я программист-любитель, так что если кто-то решит заглянуть в мой код, то будьте готовы к моим представлениям о прекрасном.
Что это и зачем нужно
Как многие уже догадались из названия, речь об устройстве, которое наполняет гидроаккумулятор и делает помимо этого кое-что еще.
Посвящу, пожалуй абзац тому, как дошел до такого. Конечно, всем хочется сделать свою жизнь комфортнее, избавиться от бытовой рутины. Были в жизни периоды, когда приходилось ходить за питьевой водой с ведрами к колодцу в любую погоду. Потом данную задачу облегчил погружной насос, который включался вручную при помощи коридорного выключателя на D-триггере (если не ошибаюсь), было это нужно для того, чтобы запустить насос из нескольких помещений дома. Позднее был приобретен гидроаккумулятор с реле давления. Несколькими года позднее ко мне в руки попала "ардуина" и пришла идея сделать процесс поинтереснее. Отдельное спасибо AlexGyver за популяризацию данной темы, и за библиотеки, использованные в реализации.
Итак, вот что устройство позволяет на данном этапе:
управлять насосом как на основе сигналов от реле давления, либо от аналогового датчика давления;
если использовать реле давления в качестве ведущего, то можно установить критическое давление при достижении которого устройство перейдет в режим блокировки и уведомит пользователя; в моем опыте были случаи, когда реле давления залипало, что приводило к разрушению системы;
когда используется датчик давления в качестве ведущего, то это позволяет устанавливать диапазон рабочего давления вручную при помощи кнопки и энкодера, это гораздо проще и быстрее, чем настраивать реле давления подкручиванием гаек, притом, когда оно находится в труднодоступном месте;
переходить в режим блокировки, если реле давления подвело, уровень воды в источнике опустился ниже допустимого (спасет насос от работы вхолостую) или датчик давления вышел из строя;
мониторить давление в системе, объем воды в гидроаккумуляторе, уровень воды в источнике, состояние реле и датчика давления.
Функционал зависит от установленного режима работы.
Сборка
Основой данного устройства является Arduino Nano (не оригинал) на Atmega 328p. Вывод информации осуществляется на жидкокристаллический дисплей LCD 1602 с адаптером I2C. Управление устройством осуществляется с помощью кнопки и энкодера. Микросхема КР1533ЛИ1 не является необходимостью, было решено установить для предохранения от возможных программных ошибок, поскольку в ранних версиях прошивки не предполагась работа не было защиты от зависания программы и т.п. Оптопары служат для гальванической развязки пинов контроллера от внешних цепей, в принципе могут быть исключены, разве что подтягивающие резисторы следует оставить.
Итак, в сборке использованы следующие компоненты
Название | Количество |
1 | |
1 | |
Микросхема КР1533ЛИ1 | 1 |
1 | |
Механическая кнопка (встраиваемая) | 1 |
3 | |
1 | |
МОП-транзистор IRF840 | 1 |
11 | |
Светодиод | 2 |
Резистор | 9 |
Диод | 1 |
Разъем для подключения блока питания | 1 |
Блок питания 12 В | 1 |
1 | |
Реле давления (опционально) | 1 |
1 | |
Реле коммутации насоса к сети 220В, управляемое постоянным напряжением 12В | 1 |
Некоторые компоненты могут заменены на более доступные или исключены полностью, устройство собиралось из имеющихся компонентов.
Принципиальная схема устройства приведена ниже.
Указания по подключению внешних устройств описаны в прилагаемых файлах.
Часть устройство А1.2 (см. принципиальную схему) собрана на другой плате, исходники не предоставлены. Черными линиями обозначены проводники.
Плата установлена в бокс для электрических аппаратов подходящего размера. Дислей и плата со светодиодами установлены не слишком технологично: бамбуковые шпажки приклеены к боксу на цианокрилат с содой, затем закреплено термоклеем. Основная плата крепится на кусочках дерева, приклееных к задней стенке.
Прошивка написана в Atom с установленным PlatformIO. Исходники опубликованы здесь, прочая документация и схемы. Интерфейс программы русскоязычный с некоторыми нюансами, так как дисплей не поддерживает кириллицу: 8 символов кириллицы загружаются из программы, оставшиеся заменены латинницей. Руководство по использованию есть в прилагаемых файлах. Для сборки нужно загрузить следующие библиотеки себе на компьютер: GyverEncoder, GyverButton, CyberLib, LiquidCrystal_I2C. Затем прописать в параметре lib_extra_dirs в файле platformio.ini путь к папке с библиотеками (можно изменить через менеджер проекта).
Несколько слов о структуре программы. Основной код написан в src\pump_station_console.cpp. Рабочия логика описана в классе PumpStation, теоретически можно релизовать управление несколькими станциями, применив несколько экземпляров класса. В классе InputF описаны статические методы для ввода информации: целые, вещественные числа, время, элемент списка.
Надеюсь кому-то проект окажется полезным. Не исключаю, что проект будет развиваться в рамках текущей задачи. Для себя я установил в корпусе RJ45 разъем, подключенные к RX, TX, RESET, +5V, GND пинам ардуины, чтобы загрузить обновление прошивки. Есть желание сделать плату с bluetooth модулем, чтобы подключать к RJ45 и загружать HEX-файл с андроид смартфона, есть в наличии два HC-05 модуля, но настроить его на загрузку не удалось. Буду признателен, если кто-то может поделиться опытом. Весь конструктив можете направлять вконтакт.