Электроника для аквариума

Сообщество аквариумистов

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

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

Для начала определимся что нам нужно — сколько каналов для 220в нагрузок, сколько для 12в нагрузок.

Я выбрал 5 каналов 220в:

4 независимых канала с периодом 30 мин (48 интервалов на сутки)
И один отдельный канал для углекислоты.

Для охлаждения будем использовать компьютерный вентилятор на 12в

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

Управлять всей этой красотой будем с помощью одного энкодера. Переходы по меню нажатием на энкодер, переход по значениям внутри одного меню — поворотом энкодера. Для изменения значения, нужно нажать на энкодер и не отпуская повернуть в нужную сторону.

UPDATE 22 ноября 2019г. : После прошивки контроллера нужно отключить питание, зажать энкодер нажатым и заново подключить питание. Подождать до появления вот такой картинки

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

И так, нам понадобится:

1. Arduino nano 3.0 с Atmega 328p на борту
Ссылка на али: Купить
2. Дисплей 1602 с модулем I2c
Ссылка на али: Купить
3. Датчик температуры Ds18b20 В герметичном корпусе
Ссылка на али: Купить
4. Часы реального времени DS3231
Ссылка на али: Купить
5. Модуль реле на 4 канала и еще один на 1 канал
Ссылка на али: Купить
6. Модуль с силовым ключем
Ссылка на али: Купить
6. Понижающий Преобразователь
Ссылка на али: Купить
7. Энкодер, 1шт

Ссылка на али: Купить

Перед сборкой нужно настроить понижающий преобразователь на 5В

Схема подключения :

Прошивка:

После сборки по схеме остается залить прошивку.

Файл прошивки лежит ТУТ Обновлен 22 ноября 2019г.

Прошиваем один HEX с помощью простейшей программы XLoader:

Работать с ней предельно просто:
— подключаем Arduino в USB-порт (отдельного питания не нужно)
— выбираем Hex файл
— выбираем тип Вашего Arduino
— выбираем COM порт, который создался при подключении Arduino к USB (скорость порта автоматически подставится при выборе типа Arduino)
— жмем Upload

Архив с программой Xloader.zip

Если есть вопросы, то их можно обсудить в соответствующей теме ССЫЛКА НА ТЕМУ

Простой контроллер для аквариума на ARDUINO : 6 комментариев

Ещебы рассвет и закат, и этомум контроллеру цены бы небыло

Всем привет .ПРОДЕЛАЛ ПРОЕКТ ..со2 4 реле и температура .. прошу помощи ..
меню разьяснить —переключение джойсиком .. — один режим работал по температуре ..пока щелкал остальные 1234 реле разобраться .. после включения реле щелкают но не в режиме программы молчат .. например ..подсветка экранчика ..крутил присматревался к стреле ..где как ..можно случайно включить ..

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

Теперь поговорим о самой программе. При включении питания отображается основной экран. На нём выводится информация о текущей дате, времени, температуре и влажности. Также отображаются несколько спецсимволов в зависимости от текущего состояния системы, а именно: свет включен – значок солнца; свет выключен – значок луны; фильтр включен – значок фильтра; идёт кормление – значок рыбки. При нажатии кнопки ОК, пользователь попадает в меню, где есть возможность настройки таких параметров, как:
— режим управления освещением. В этом разделе можно включать и выключать свет вручную выбором соответвтующего пунта меню, а также задать время включения и выключения по расписанию.
— режим управления фильтром. Позволяет включать и выключать фильтр вручную, выбирать функцию «кормление» (fedding), и задавать кормление по расписанию. В режиме кормления работа фильтра прекращается и восстанавливается автоматически по истечении 15 минут.
— установка текущей даты.
— установка текущего времени. Данные даты и времени записываются в модуль часов и при выключении питания не сбрасываются, если на нём установлена батарейка.

Читайте также:  Таблица про амебу эвглену и инфузорию

Для более наглядного понимания, на рисунке №13 изображена структура меню.

Хотелось бы поделиться своим первым опытом создания такой штуки, как Arduino аквариум. Ранее я вообще не работал с электроникой, и, тем более, не знал как программируются микроконтроллеры. Но все-же решил попробовать свои силы и хотел бы поделиться результатами.

Возникновение идеи создания аквариума

Так уж получилось, что я в основном занимался .NET программированием и изучил его в обход C++. Наверное, поэтому я так и не встретился с микросхемотехникой и микроконтроллерами, хотя желание познакомится с ними росло практически каждый год. Особенно, последние годы, когда я узнал про Arduino. Но надо было придумать ему практическое применение. И этот вопрос быстро решился.

В нашей комнате стоит аквариум, и каждый день нужно было лезть под стол и выключать рыбкам свет, а потом утром включать. Дополнительно рыбкам надо было включать обогреватель, когда им холодно, а выключать, когда им тепло. Иногда моя забывчивость приводила к гибели рыбок в аквариуме и приходилось покупать новых. Еще рыбкам нужно было периодически менять 2/3 воды. И для нашего аквариума эта процедура была очень долгой и неприятной.

Первым делом я посмотрел готовые решения по аквариумам. Их достаточно много. В основном это видеоролики на youtube. Также есть достаточно интересных статей на geektimes. Но для моей цели — изучение и знакомство с миром микросхемотехники, — это было слишком сложно, а подробного руководства «с нуля» в интернете не нашлось. Идею разработки аквариумного контроллера пришлось отложить до тех пор пока не будут изучены азы самой микроэлектроники.

Знакомство с микроэлектроникой

Я начал свой путь с готового набора для изучения Arduino. Наверное, каждый собирал нечто подобное, когда знакомился с данной платформой:

Обычная лампочка (светодиод), резистор на 220 Ом. Arduino управляет лампочкой по алгоритму на C++. Сразу оговорюсь, что купив любой готовый набор Arduino или его аналога нельзя собрать более-менее полезную вещь. Ну кроме пищалки или, скажем, домашнего термометра. Изучить саму платформу посредством уроков можно, но не более. Для полезных вещей придется мне пришлось освоить пайку, печатные платы, проектирование печатных плат и прочие прелести электроники.

Постройка своего первого прототипа аквариума

Итак, первое с чего я начал свой прототип аквариума — сформировал на бумаге требования к этому устройству.

  1. Светиться утром, днем, вечером и ночью разными цветами;
  2. Включать рыбкам утром белый свет, днем яркость белого света увеличивать, вечером уменьшать (имитация дневного света) и ночью его выключать;
  3. Пузырьки воздуха(аквариумный компрессор) для рыбок должны появляться только вечером и выключаться ночью;
  4. Если рыбкам холодно, аквариум должен гореть синим цветом, если жарко то красным;
  5. Диапазоны температуры при выходе из которых должна срабатывать «световая сигнализация» должны быть настраиваемыми
  6. Аквариум должен всегда отображать дату и время;
  7. Время начала и конца промежутков дня должны быть настраиваемыми. К примеру, утро не всегда начинается в 9:00 AM;
  8. Аквариум должен отображать сведения о влажности воздуха и его температуре вне аквариума, а также выводить температуру воды внутри аквариума;
  9. Аквариум должен управляться с пульта.
  10. Экран с датой при нажатии на кнопку пульта должен подсвечиваться. Если в течении 5 секунд ничего не нажато, то гаснуть.

Я решил начать с изучения работы LCD и Arduino.

Читайте также:  У кошки около рта черные точки

Создание главного меню. Работа с LCD

Для LCD я решил использовать библиотеку LiquidCrystal. Так совпало, что у меня в наборе помимо Arduino присутствовал LCD экран. Он мог выводить текст, цифры. Этого было достаточно и я приступил к изучению подключения данного экрана к Arduino. Основную информацию по подключению я брал отсюда. Там же есть примеры кода для вывода «Hello World».

Немного разобравшись с экраном я решил создать главное меню контроллера. Меню состояло из следующих пунктов:

  1. Основная информация;
  2. Настройка времени;
  3. Настройка даты;
  4. Температура;
  5. Климат;
  6. Подсветка;
  7. Устройства;

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

Собственно, был написан базовый класс на C++, от которого будут наследоваться все остальные подменю.

К примеру, для меню «Устройства» реализация базового класса qQuariumMode будет выглядеть так:

Вот что получилось в результате реализации первого уровня меню:

Аппаратная часть. Нюансы подключения компонентов

Несколько слов хочется сказать про аппаратную часть аквариумного контроллера. Для нормальной работы контроллера мне пришлось приобрести:

  1. 1 x Arduino Uno/Mega. В последствии решил работать с Mego’ой;
  2. 1 x Часы реального времени, к примеру DS1307;
  3. 2 x Реле типа RTD14005, нужны для управления компрессором и аэрацией, т.к. оба работают от 220В переменного тока;
  4. 1 x Пьезопищалка;
  5. 1 x ИК приемник;
  6. 5 x Транзисторов IRF-530 MOSFET с N каналом. (3 для RGB ленты, 1 для белой ленты, 1 для водяной помпы);
  7. 1 x RGB светодиодная лента. Если планируется погружать светодиодную ленту в воду, то нужно ее изолировать от воды. У меня лента находится внутри силиконовой трубки и залита прозрачным герметиком;
  8. 1 x White светодиодная лента;
  9. 1 x LCD экран;
  10. 1 x Датчик температуры герметичный для измерения температуры воды. Я использовал DS18B20;
  11. 1 x Датчик температуры и влажности. Я использовал DHT11;

У каждого компонента свой тип подключения и свои драйверы для работы. Я не буду описывать нюансы подключения всех компонентов, так как их можно найти на сайте производителя или на форумах. Если вы планируете использовать те же компоненты, что и я — то менять исходный код вам не придется.

Порча компонентов

Будьте внимательны. Старайтесь сначала почитать про подключаемый компонент. Он должен эксплуатироваться именно в том диапазоне напряжения, для которого он был создан. Обычно это указано на сайте производителя. Пока я разрабатывал аквариумный контроллер, я уничтожил 2 герметичных датчика температуры и часы реального времени. Датчики вышли из строя из-за того, что я их подключил к 12В, а нужно было к 5В. Часы реального времени погибли из-за «случайного» короткого замыкания в цепи по моей вине.

Светодиодная лента RGB

Особые затруднения возникли со светодиодной лентов. Я попытался реализовать следующую схему:

При подключении к Arduino я использовал пины, которые поддерживают ШИМ (широтно-импульсную модуляцию). При одновременном включении на максимум напряжения всех 3 пинов у меня сильно грелась лента. В итоге, если оставить ее на час-другой, некоторые светодиоды переставали светиться. Я полагаю, что это происходило из-за выхода из строя некоторых резисторов. Еще один минус данной схемы — разная яркость светодиодной ленты для каждого из цветов. К примеру, если я ставлю максимальное напряжение на красном компоненте ленты, то я получаю условную яркость красной ленты в 255 единиц. Если я включаю одновременно красный и синий компоненты на максимум напряжения, то яркость будет равна 255+255 = 510 единиц, а цвет будет фиолетовым. В общем, такой вариант решения меня не устроил.

Было решено реализовать следующий алгоритм:

В таком варианте исполнения красный цвет и фиолетовый цвет имели одинаковую яркость. Т.е. красные светодиоды в первом случае светили с яркостью 255 единиц, а при фиолетовом цвете красный был с яркостью 127 единиц и синий с яркостью 127 единиц, что в итоге было приблизительно равно 255 единиц:

Светодиодная лента белая

Со светодиодной лентой наверное было проще всего. Единственный сложный момент — это обеспечение плавной смены яркости при смене времени суток.

Для реализации данной задумки я применил линейный алгоритм изменения яркости белой светодиодной ленты.

Пульсация «вулкана»

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

Читайте также:  Кот не ест только пьет и спит

Он поставлялся с адаптером, на выходе которого 12В постоянного тока, а на входе — 220 В переменного. Адаптер мне оказался не нужен, так как управление питанием и яркостью вулкана я реализовал через Arduino.

Сама пульсация вулкана была реализована следующим образом:

Вулкан отлично подсвечивает аквариум в вечернее время, а сама пульсация смотрится очень красиво:

Помпа. Замена воды в аквариуме

Водяная помпа помагает быстро поменять воду в аквариуме. Я приобрел помпу, которая работает от постоянного тока 12В. Управление помпой осуществляется через полевой транзистор. Сам драйвер для устройства умеет две вещи: включить помпу, выключить помпу. При реализации драйвера я просто унаследовался от базового класса BaseOnOfDeviceHelper и ничего дополнительно в драйвере не определял. Весь алгоритм работы устройства вполне может реализовать базовый класс.

Помпу протестировал на стенде:

Хотя помпа работала нормально, я наткнулся на одну неочевидную вещь. Если выкачивать воду в другой резервуар, то начнет действовать закон сообщающихся сосудов. В результате я стал виновником потопа в комнате, потому как если выключить помпу — вода все равно будет идти в другой резервуар, в случае если его уровень воды находится ниже уровня воды в аквариуме. В моем случае именно так и было.

Инфракрасный порт и желание его заменить

Управление аквариумом через инфракрасный порт я осуществил по примеру предварительного обучения. Суть примера в следующем: при включении контроллера в сеть я опрашиваю поочередно действия left, right, up, down, ok. Пользователь сам выбирает, какие кнопки пульта он привязывает к каждому из действий. Плюс данной реализации — возможность привязать любой ненужный пульт дистанционного управления.
Обучается аквариум через метод Learn, суть которого отображена ниже:

В дальнейшем я пришел к выводу, что пульт дистанционного управления это неудобно. Просто потому что его надо искать и это лишнее устройство в доме. Лучше управление реализовать посредством мобильного телефона или планшета. У меня зародилась идея использовать микрокомпьютер Raspberry PI, поднять на ней ASP.NET MVC 5 веб-приложение через Mono и NancyFX. Далее использовать фреймворк jquery mobile для кроссплатформенности веб-приложения. Через Raspberry общаться с Arduino посредством WiFi, или LAN. В этом случае можно даже отказаться от LCD экрана, ведь всю нужную информацию можно посмотреть на смартфоне или планшете. Но этот проект пока только в голове.

Печатная плата и ее изготовление

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

Сборка на монтажных платах(используется Arduino Uno):

Я разработал однослойную печатную плату в программе Fritzing. Получилось следующее(используется Arduino Mega):

Самое противное при изготовлении печатной платы это было сверление. Особенно когда я старался создать печатную плату типа Shield, т.е. она одевалась на Arduino. Просверлить тонким сверлом больше 50 отверстий — это очень нудное занятие. А самое сложное — это забрать у жены ее новый утюг и уговорить купить лазерный принтер.

Кстати, если кто боится лазерно-утюжной технологии, то сразу скажу — это очень просто. У меня получилось с первого раза:

Сама сборка тоже оказалось простой — достаточно было припаять основные компоненты на плату:

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

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

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