Аквариумный контроллер “TeRRaN”

Предисловие: «проект Терран».

Дон Кирпич был не молод, по меркам черепахи, но до старости ему было еще далеко. В жизни он видел некоторое дерьмо. Но были радостные моменты. И вот один из таких радостных моментов настал, когда я понял, что наш «болотник» вырос из своего старого жилища и пора бы ему переезжать в новый террариум. Сказано – сделано. Заказали новую «банку», новый внешний фильтр, новые лампы освещения и подогрева. В общем прям пентхаус ему новый построили. А т.к. я, по своей природе, человек ленивый, то в новом террариуме оставлять старые заморочки с включением ламп, фильтра и т.д. тоже не очень хотелось. Ну фиг ли, пусть пентхаус будет умным. Так и был придуман контроллер «Терран». Почему «Терран»? Может потому что террариум, может потому что я в старкрафт переиграл, да просто вот так.

Глава 1 «Чего бы еще повключать?»

Обдумав все свои идеи, и пообщавшись с парочкой аквариумистов, я решил не зацикливаться только на своём конкретном случае, а сделать контроллер «Терран» более или менее универсальным. Так сказать для аквариумов, террариумов и прочих «умов». Ну а раз уж нам надо (как всегда) быстро, то угадайте что я буду использовать? Правильно, Arduino. К слову, не так давно пересмотрел свои позиции относительно неё. Стал немного лучше к ней относиться, с учётом количества реализуемых мной проектов на arduino nano. Ну да ладно, речь не об этом. Так вот концепция, с учётом аппаратных возможностей и наших потребностей такая:

  • Включение и отключение трех устройств по суточному таймеру. При чем без привязки к конкретным суткам. Иными словами нужно иметь возможность включить устройство, к примеру в 20:00, а выключить в 19:00 следующего дня.
  • Включение и отключение одного устройства по температуре. Опять же, не важно, подогреватель это или охладитель. Вдруг Вам захочется аксолотлей завести? Температуры включения и отключения могут быть любыми.
  • Возможность ручного управления.
  • Восстановление состояния после сбоя питания.

Глава 2 «Ректальная тонзиллэктомия»

В проекте «TimeLapse контроллер» я использовал довольно удачную (как мне показалось) связку Arduino nano, дисплея от Nokia5110 и энкодера. Почему бы не повторить? Добавим сюда термистор для измерения температуры и четыре реле для управления. Ну а раз эта аппаратная часть у нас уже проверена, то схватим лошадь за хвост начнем с кода. Так интересней:

Это версия 1.0. Последующие версии буду просто выкладывать в архив с исходниками.

Немного пояснений:

  • Функцию обработки температуры я честно скопипастил с какого-то примера из интернетов.
  • Основная функция цикла нарукожоплена написана таким образом, что бы можно было устанавливать любое время включения и выключения и любые температуры. Положительная разница между ними или отрицательная – не имеет значения.
  • Функция initOn() восстановление после отключения, служит для расчета времени и температур при включении устройства. Благодаря ней не нужно записывать каждый раз состояния в EEPROM. А это существенно продлит жизнь нашей ардуинке.
  • Функция autoCorrection() раз в сутки (начиная от последней настройки времени) компенсирует неточность часов, прибавляя заданное число секунд.

Про последнюю фичу нужно вообще сказать отдельно. Эта функция родилась в процессе отладки устройства, т.к. часы на базе DS1307 вообще не отличаются сильной точностью хода, а ставить GPS приёмник, например, это уже дичайший перебор. В моём случае часы убегали вперед на 5-6 секунд в сутки. Но из профильных форумов читал, что бывают и случаи по 15-20 секунд на сутки. Данная функция позволила сократить разбег часов до 4х секунд в неделю. Что, как я думаю, достойный результат. Вообще, как я понял из собственного опыта, самое сложное в микроконтроллерном программировании, это работа со временем. Оказалось, что это очень тонкая материя – рулить переменной, от которой отталкивается всё, в том числе и сам “руль”. Это как стоять на доске и пытаться её же поднять! А штука в том, что в программировании это ВОЗМОЖНО! И так как я не программист, я много времени провел в интернете, в поисках примера. Десятки форумов проговаривали фразу «программная коррекция», но ни один так и не дал пример. То ли теоретиков слишком много, то ли все считали, что это настолько элементарно, что и пример кода не нужен. В общем пришлось писать самому. А мне, как НЕ программисту, это далось ни разу не просто.

Так или иначе запустил всё это на симуляторе Proteus и (с чего бы это???) всё заработало. Если кто-то захочет поиграться, положу файл Proteus’а в архив с исходниками.

После небольших телодвижений напильником по коду, я накидал схему:

Тут всё по традиции, никакого изврата. Ну разве что подключение пьезоизлучателя через ULN2003, но это просто оптимизация. Был лишний транзистор в сборке, почему бы и не использовать? Так же все порты подключены через резисторы, что бы ограничить ток на случай выхода чего либо из строя. Думаю, как подключать реле к розеткам 220в, объяснять не нужно. А если нужно, то Вам явно не стоит затеваться с повторением этого контроллера.

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

Знаю, выглядит ужасно. Но мы тут не ядерный синтез запускаем. Главное – работает!

Глава 3 «Снова практикуем ардусатанизм»

приступаем к печатной плате:

Для экономии места расположил часы вертикально. И да! Снова выворачиваем «нанку на изнанку». Отдельный стабилизатор 7805 поставил, что бы не греть встроенный в ардуину. Ну не доверяю я им, хрупкие они на мой взгляд. Это моя «шиза» и нечего с неё смеяться. А вообще, можно использовать и встроенный. Кто как любит. Всё проверил, травлю, лужу, паяю, лаком покрываю:

Тестовый запуск:

Вот над вопросом «И куда вот это вот всё засунуть?» я думал долго. Корпус хотелось не большой, но с розетками на 220в, что, оказалось, две несовместимые «хотелки». На моё счастье нашелся дохлый ИБП с нужным корпусом типа вот такого:

Ну что же, не очень компактно, но неплохо. Четыре розетки я использовал для своих целей, а остальные четыре просто запитал напрямую. Вынул всё лишнее, отпилил всё ненужное, поставил внутрь всё нужное:

Маленькая белая коробочка справа – блок питания на 12в 500мА. Куплен в местном радиодетальном магазине. Собрал:

Рекомендация по сборке всего лишь одна:

Т.к. мы тут имеем дело с напряжением 220в, четко понимайте и перепроверяйте всё что вы делаете. Тут Вам не шутки. Обязательно озаботьтесь предохранителями и прочими средствами защиты. Пожары и жертвы никому не нужны.

Глава 4 «Как это работает?»

Прошивка 1.0

И так, в итоге у нас управление энкодером, и три варианта экрана. Главный экран включает в себя:

  • Дата и время
  • Кнопки с номерами розеток, для ручного управления
  • Под ними индикаторы “O” или “I”. Показывают включена или выключена розетка
  • Справа температура на датчике. Обновляется каждую нечётную секунду
  • Снизу кнопки “Auto” – для входа в меню установок автоматизации, и “Sett” – для настройки самого устройства.

Экран установок автоматизации:

  • Четыре строки с номером розетки. Напротив каждого номера время включения, время выключения. На четвертой розетке соответственно температуры включения и выключения.
  • Кнопка возврата в главный экран
  • Текущая температура. Для удобства установки последнего реле

Экран настройки:

  • “DAY” – установка даты
  • “TIME” – установка времени
  • “tADJ” – количество секунд, прибавляемое каждые сутки, для автоматической корректировки часов
  • “DSPL” – уровень контраста дисплея
  • Кнопка возврата в главный экран
  • “τ” время следующей автоматической корректировки часов

Первый запуск контроллера «Терран», настоятельно рекомендую проводить с зажатой кнопкой енкодера. Это сбросит настройки на начальные и пропишет их в память EEPROM. Так же при первом запуске велика вероятность, что модуль часов не инициирован и Вы увидите вместо даты и времени «00». Это нормально, нужно зайти в настройки и как только Вы начнёте задавать дату или время – часы начнут отсчёт. Рекомендую начать установку от года к дням. Так же, именно с момента установки времени, будут отсчитываться 24 часа для периодической корректировки времени. Далее рекомендую выставить точное время и проверить через 24 часа на сколько и в какую сторону убегает Ваш экземпляр часов. Установить это время в параметре tADJ. Например, в моём случае, часы спешили на 5 сек. Соответственно в параметре tADJ я указал -5 сек, скорректировал часы по серверу точного времени и сохранил EEPROM.
Основной цикл автоматизации и автокоррекция не работают пока Вы находитесь на одном из экранов настройки. Если Вы что-то меняли в настройках или в установках автоматизации – нажмите и подержите кнопку енкодера на главном экране до звукового сигнала. Это сохранит изменения в EEPROM память контроллера (включая последнее время корректировки времени). Если этого не сделать, то после выключения питания настройки вернутся на предыдущие.

Прошивка 1.1

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

Прошивка 1.2

  • глобально переработан цикл дисплея
  • количество таймеров выросло с четырех до восьми (6 по времени и 2 по температуре). Все розетки отвязаны от таймеров. Любой таймер  можно назначить на любую розетку и можно их смешивать.
  • исправлены ошибки в основном цикле и цикле инициализации
  • исправлена стабильность работы енкодера
  • размер занимаемой памяти сократился на 5-7%.

инструкция по эксплуатации версии 1.2

Заключение

Данный прототип я собирал пару дней, а вот отлаживал почти месяц. И прошивка Террана продолжает “вылизываться” по сей день. Тем не менее, устройство стабильно работает и имеет право на жизнь. Главное что дон Кирпич доволен и улыбается. И не маловажная часть прототипирования – экономическое обоснование. Ну так вот: цена всех запчастей на момент публикации составила примерно 1300р + корпус. Если все эти пироги покупать не в местном магазине, а заказать в Китае, выйдет еще дешевле. А вот три розетки с таймером и один термостат в заводском исполнении, по цене обошлись бы примерно в два-три раза дороже. В скором времени напишу простенькую инструкцию по эксплуатации.

исходники проекта

4 комментария для “Аквариумный контроллер “TeRRaN”

  1. Честно говоря, я считаю, что собрать нормальный аквариум, например, местами сложней. Это же нужно целую экосистему создать, кучу мелочей продумать. Так что если человек способен на создание подобного, то и этот контроллер будет для него выполнимой задачей. Может не простой, но выполнимой 🙂

  2. Классно получилось! основательно, даже с шпротеусом) Теперь черепахен вообще людей перестанет видеть, всё завтоматизировал)
    Репозитарий на github не надумал завести? чтобы обновления прошивок вести.

  3. ой, ниии. я пока не дорос до хаба. А черепах только рад, что его не трогают. Он только жрачку когда чуит – активизируется))

Добавить комментарий

Ваш адрес электронной почты не будет опубликован.Обязательные поля помечены *