Автоматика для аквариума своими руками схемы. Простой аквариумный контроллер. Возникновение идеи создания аквариума

Поскольку у меня в аквариуме живые растения, однажды встал вопрос разумного освещения. Как известно, светить дольше 12 часов чревато тем, что заимеешь проблему с разного рода водорослями. Чаще всего зелёными. А сократить «световой день» или освещать, как бог на душу положит – плохо растениям.

Сейчас у меня в аквариуме освещение 1 ватт на литр. Это довольно много, и если не контролировать время, установив таймер розеточный, во-первых, подобное освещение действительно на радость зелёным обрастаниям на стёклах, во-вторых, электросчётчик за месяц наматывает не хилую сумму в денежном эквиваленте. А у меня постоянно получался «пересвет» - часов по 14 в день горит светильник 160 киловатт.

Как с утра включу, так до середины ночи в аквариуме свет, поскольку я «сова», работаю допоздна, а аквариум в кабинете радует глаз. Заработаешься и забудешь отключить. Да и помнить желательно, во сколько сегодня он был включен. Сделаешь перерыв в работе, полюбуешься на аквариум, как там всё зелено и красиво... И так расставаться с этой красотой не хочется.

Однажды, я решила, что довольно! Надо систематизировать время освещения, установить стабильные 10 часов и не более! Ага, надо искать в продаже таймер розеточный! Как оказалось, в продаже нет, а продавцы даже не представляют, что это такое. И вот, наконец, удача! Однажды я его сама увидела на витрине, просто догадалась, что это оно, то самое! Выглядит он вот так.

Таймер розеточный механический

Программируется он на 24 часа. То есть весь суточный цикл, который нам и нужен. Как оказалось, даже «блондинка» разберётся с ним без труда.

  1. Первый шаг – выключатель. У таймера он находится сбоку. Перед началом программирования его следует перевести в режим «постоянное включение».
  2. Все маленькие голубые рычажки поднять вверх.
  3. Диск программирования повернуть по стрелке направо, пока метка на нём не совпадёт с текущим временем.
  4. Теперь приступаем к программированию. Каждый голубой рычажок равен 30 минутам. Опускаем их вниз по очереди, задавливая пальцем. Надо вам, скажем, выставить время с 10 утра до 22 часов вечера. Вот в этом временном промежутке все рычажки должны быть придавлены. Ровно в 10 таймер включит электроприборы, а в 22 их отключит. Эту программу таймер розеточный будет повторять ежедневно. Однажды выставив программу, можно о таймере забыть.Боковой выключатель перевести из режима «постоянное включение» в режим «часы».

А вот, собственно и всё! Срок службы у этого прибора 7 лет. Называться он может и иначе, например, таймер времени механический. У меня закончились проблемы с бессистемным освещением аквариума! Я забыла, когда в последний раз чистила стёкла от зелёных обрастаний. Свет горит строго 10 часов. Прибор простенький и безотказный. Рекомендую всем!

chesdenis 25 ноября 2015 в 13:02

Система автоматического управления аквариумом на Arduino

  • DIY или Сделай сам

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

Так уж получилось, что я в основном занимался.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++, от которого будут наследоваться все остальные подменю.

Class qQuariumMode { protected: LiquidCrystal* LcdLink; public: // Чтобы экран не мерцал, была предусмотрена bool переменная isLcdUpdated. bool isLcdUpdated = false; // Выход из подменю или меню. void exit(); // Метод loop в каждом варианте подменю будет свой. Собственно, он и отвечает за вывод // текста на экран. Он будет вызываться из главного цикла программы контроллера. virtual void loop(); // Методы, которые помечены как virtual, будут переопределяться индивидуально в каждом // меню. virtual void OkClick(); virtual void CancelClick(); virtual void LeftClick(); virtual void RightClick(); };
К примеру, для меню «Устройства» реализация базового класса qQuariumMode будет выглядеть так:

#include "qQuariumMode.h" class qQuariumDevicesMode: public qQuariumMode { private: int deviceCategoryLastIndex = 4; //Варианты подменю в меню Устройства enum DeviceCategory { MainLight, // управление основным светом Aeration, // управление аэратором Compressor, // управление компрессором Vulcanius, // Управление вулканом Pump // Управление помпой }; DeviceCategory CurrentDeviceCategory = MainLight; char* headerDeviceCategoryText = NULL; // Ссылка на "драйвер", с помощью которого осуществляется управление устройством BaseOnOfDeviceHelper* GetDeviceHelper(); public: void loop(); void OkClick(); void CancelClick(); void LeftClick(); void RightClick(); };
Вот что получилось в результате реализации первого уровня меню:

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

Несколько слов хочется сказать про аппаратную часть аквариумного контроллера. Для нормальной работы контроллера мне пришлось приобрести:
  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 единиц, а цвет будет фиолетовым. В общем, такой вариант решения меня не устроил.

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

Void LedRgbHelper::Show(RGBColorHelper colorToShow) { // RGBColorHelper класс содержит сведения о доли каждого компонента в цвете. // Кроме того, содержит информацию о яркости цвета int sumColorParts = colorToShow.RedPart + colorToShow.GreenPart + colorToShow.BluePart; // доля каждого компонента в общем цвете float rK = 0; float gK = 0; float bK = 0; if (sumColorParts != 0) { float redPartAsFloat = (float)colorToShow.RedPart; float greenPartAsFloat = (float)colorToShow.GreenPart; float bluePartAsFloat = (float)colorToShow.BluePart; float sumColorPartsAsFloat = (float)sumColorParts; int brightness = colorToShow.Brightness; // определяем относительную яркость каждого компонента в цвете. rK = redPartAsFloat / sumColorPartsAsFloat; gK = greenPartAsFloat / sumColorPartsAsFloat; bK = bluePartAsFloat / sumColorPartsAsFloat; // определяем абсолютное значение компонента в цвете rK = rK*brightness; gK = gK*brightness; bK = bK*brightness; } uint8_t totalCParts = (uint8_t)rK + (uint8_t)gK + (uint8_t)bK; if (totalCParts <= 255){ // подаем напряжение на каждый компонент цвета. в сумме мы должны получить не более 255 единиц. analogWrite(RedPinNum, (uint8_t)rK); analogWrite(GreenPinNum, (uint8_t)gK); analogWrite(BluePinNum, (uint8_t)bK); } }
В таком варианте исполнения красный цвет и фиолетовый цвет имели одинаковую яркость. Т.е. красные светодиоды в первом случае светили с яркостью 255 единиц, а при фиолетовом цвете красный был с яркостью 127 единиц и синий с яркостью 127 единиц, что в итоге было приблизительно равно 255 единиц:

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

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

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

Void MainLightHelper::HandleState() { if (!IsFadeWasComplete) { unsigned long currentMillis = millis(); if (currentMillis - previousMillis > 50) { previousMillis = currentMillis; switch (CurrentLevel) { case MainLightHelper::Off: { // Если заявлено выключенное состояние, то снижаем яркость белого света на одну единицу за цикл. if (currentBright != 0) { if (currentBright > 0) { currentBright--; } else { currentBright++; } } else { // В случае полного выключения, останавливаем анимацию затухания белого цвета. currentBright = 0; IsFadeWasComplete = true; } break; } case MainLightHelper::Low: case MainLightHelper::Medium: case MainLightHelper::High: { // В случае установки уровня белого света, постепенно увеличиваем или уменьшаем яркость за один шаг цикла if (currentBright != CurrentLevel) { if (currentBright > CurrentLevel) { currentBright--; } else { currentBright++; } } else { currentBright = CurrentLevel; IsFadeWasComplete = true; } } break; } // подаем напряжение нужной величины для установки яркости белого цвета. analogWrite(PinNum, currentBright); } } }

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

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

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

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

Long time = 0; int periode = 10000; void VulcanusHelper::HandleState() { if (IsActive){ // time - аргумент cos в связке с указанным периодом. // остальные коэффициенты - деформация функции и смещение по оси ординат time = millis(); int value = 160 + 95 * cos(2 * PI / periode*time); analogWrite(PinNum, value); } else { analogWrite(PinNum, 0); } }
Вулкан отлично подсвечивает аквариум в вечернее время, а сама пульсация смотрится очень красиво:

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

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

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

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

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

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

Void ButtonHandler::Learn(IRrecv* irrecvLink, LiquidCrystal* lcdLink) { // Инициализируем прием инфракрасного сигнала с датчика irrecvLink->enableIRIn(); // В эту переменную помещаются результаты декодирования сигнала decode_results irDecodeResults; ... ... while (true) { // Если пришли результаты и их можно декодировать if (irrecvLink->decode(&irDecodeResults)) { // продолжаем принимать сигналы irrecvLink->resume(); // Пробуем декодировать сигнал с пульта. if (irDecodeResults.bits >= 16 && irDecodeResults.value != 0xC53A9966// fix for Pioneer DVD) { lcdLink->setCursor(0, 1); // Выводим на экран декодированное значение в формате HEX lcdLink->print(irDecodeResults.value, HEX); // Запоминаем в оперативной памяти Arduino полученный сигнал irRemoteButtonId = irDecodeResults.value; ... ...
В дальнейшем я пришел к выводу, что пульт дистанционного управления это неудобно. Просто потому что его надо искать и это лишнее устройство в доме. Лучше управление реализовать посредством мобильного телефона или планшета. У меня зародилась идея использовать микрокомпьютер Raspberry PI, поднять на ней ASP.NET MVC 5 веб-приложение через Mono и NancyFX. Далее использовать фреймворк jquery mobile для кроссплатформенности веб-приложения. Через Raspberry общаться с Arduino посредством WiFi, или LAN. В этом случае можно даже отказаться от LCD экрана, ведь всю нужную информацию можно посмотреть на смартфоне или планшете. Но этот проект пока только в голове.

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

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

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

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

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

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

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

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


Аквариумный контроллер "Аквамарин"

Здравствуйте, уважаемые коты! Рыбкой побаловаться не хотите? Вы же так обожаете этих вкусных, сочных рыбок;))) Вот и я люблю их, но предпочитаю ими любоваться через стекло:

Пока фоткал, охранник Кеша Мозгоклюев начал на меня шипеть, пришлось его тоже запечатлеть малёха:

Вообще жизнь рыбок и товарища Мозгоклюева была бы спокойней, если бы я не был электронщиком до мозга костей. Поэтому они периодически подвергаются моим опытам. Вот и один из них - аквариумный контроллер "Аквамарин".

Встречаем схему (в конце статьи в архиве оригинал):

Как видите ничего архисложного в этой схеме нет. Микроконтроллер ATMega16 отвечает за сбор и выдачу информации и принимает соответствующие решения, управляя релюшками и полевиками. Теперь всё по порядку. Сбор информации идёт от датчика температуры U2 DS18b20, от U3 DS1307 - часов реального времени, и естественно от кнопок управления. Выдача информации осуществляется на LCD1 типа Star0802А восемь символов по две строки. Дисплей русифицирован - знания английского не требуется;) У контроллера есть три режима работы "Автоматический", "Ручной режим" и режим настроек. При ручном режиме, вход в который осуществляется нажатием кнопки "Режим/Ввод"

Внешний вид:

Лицевая сторона


Под крышечкой:)

Сюда подключаем нагрузки

Вид на эти розетки изнутри

Ну что, заглянем, посмотрим на внутренности?

Вид на разъёмы подключения датчика температуры(слева) и подключения светодиодных модулей синего и белого света(справа)

С одного бока

С другого бока

Режимы работы:

В ручном режиме можно включить или выключить подачу воздуха и фильтрацию, нажав на кнопки "+Л/Воздух", "Фильтр". О том, что включёны фильтр и воздушный компрессор, сигнализируют светодиоды "Воздух" и "Фильтр".

"Ручной режим" удобен для кормления рыбок и при чистке аквариума. Выход в автоматический режим кнопкой "Режим/Ввод".

В автоматическом режиме на дисплее выводится информация о времени, дате и температуре в аквариуме.

В автоматическом режиме контролируются параметры температуры и времени суток. По заданным параметрам температуры можно управлять нагревом воды в аквариуме, если аквариум в холодном помещении ИЛИ охлаждением, если аквариум находится в тёплом помещении.

По параметру времени суток контроллер отрабатывает программу Рассвет/Закат.

К контроллеру подключены светодиодные модули белого и синего цвета через полевые транзисторы IRFL024, и управляются методом ШИМ. Закат происходит в заданное время в течении полутора часов. Белый свет начинает угасать, а синий прибавляет яркость. В итоге имеем синее освещение аквариума ночью. Очень приятно глазам при походе ночью в туалет:)). Ночничок, так сказать:)) Утром же наоборот, при заданном времени начала рассвета происходит угасание синего и увеличение яркости белого света. Процесс этот происходит тоже в течении полутора часов. В приложенных исходниках это можно поменять как ваша душа пожелает. Так же в контроллер заложена функция восстановления режимов работы после сбоя в электросети. Если вы уехали на целый день на шашлычок, и в это время был выключен свет, а потом включен(ну всякое бывает), то контроллер автоматом включит фильтрацию, воздух и подогрев/охлаждение так, как это было задано Вами! Вообще я делюсь с Вами, дорогие мои котофеи, всем проектом с исходниками, что хотите с ним, то и делайте - мне не жалко:)

А на последок предлагаю глянуть видеоролик:

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

Это особенно полезно во время чистки аквариума, не нужно выдергивать шнур фильтра из розетки, а можно просто нажать кнопку на контроллере.

Описание аквариумного контроллера

Аквариумный контроллер построен на микроконтроллере PIC16F677. Прошивка, скорее всего, должна подойти и для микроконтроллеров более высокого уровня из этой группы. Работа схемы была проверена и на микроконтроллере PIC16F690. Измерение температуры обеспечивает цифровой температурный датчик DS18B20 с разрешением 0,5 гр. Цельсия.

Отсчет времени организован с помощью микросхемы DS1302 – контроллера реального времени. В случае отключения электроэнергии, к 8 ножке DS1302 (вывод резервного питания) подключен конденсатор C8. Его емкости хватает более чем на 3 дня для того чтобы не произошел сброс времени.

Все управление осуществляется четырьмя кнопками: «СВЕТ» (S) «ОБОГРЕВ» (Т) «КОМПРЕССОР» (V) и «ФИЛЬТР» (F). Короткое нажатие будет включать/выключать соответствующий канал. Возможно переключение между ручным и автоматическим режимом управления. Это относится только к освещению и обогреву. Включение/ выключение компрессора и фильтра осуществляется только в ручном режиме. Обогрев в автоматическом режиме удерживает необходимую заданную температуру воды в аквариуме.

Управление освещением: первое нажатие включает свет, второе отключает, треть переводит управление освещением в автоматический режим. Для установки времени включения/выключения света, необходимо нажать кнопку (S) и удерживать ее более 4 секунд.

Сначала устанавливается время включения. Короткими нажатиями кнопки (S) происходит переход от одного разряда индикатора к другому, значение каждого можно менять кнопками V (+) и F (-). Далее, продолжительным нажатием кнопки (S) значение сохраняется и происходит переход в настройки времени выключения. Здесь порядок настройки такой же. Еще одним долгим нажатием происходит переход в исходное состояние.

Установка температуры практически такое же. Продолжительное нажатие кнопки (Т) позволяет перейти в режим установки необходимой температуры воды в аквариуме. Изменение величины с шагом 0,5 гр. Цельсия осуществляется кнопками V (+) и F (-). После установки продолжительное нажатие кнопки (Т) переводит контроллер в основной режим.

Установка значения реального времени осуществляется одновременным и продолжительным нажатием двух кнопок (S) и (T). Далее все то же самое, как и при настройке освещения. Все значения хранятся в EEPROM, и при отключении питания нет необходимости все заново настраивать.

Индикация состояния каждого канала – графическая. Каждый канал обозначается своей буквой: «СВЕТ» (S) «ОБОГРЕВ» (Т) «КОМПРЕССОР» (V) и «ФИЛЬТР» (F). Если буква на экране заглавная, то это означает, что канал включен, если же прописная, то выключен.

Еще под каждым из выше перечисленных каналов прописывается либо буква А (автоматический режим — automatic) либо буква М (ручной режим – manual). Так же на индикатор выводится дата, время и фактическая температура воды в аквариуме.

Для удобства силовая часть контроллера сделана отдельно и подключена к основной плате TP-проводом с разъемом RJ-45. Трансформатор для блока питания подойдет любой с выходом на вторичной обмотке — 9 В и токе не менее 400 мА.

(скачено: 465)

http://www.tosi.cz/elektro/akvarium.html


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

Материалы:

- модуль Пельтье
- светодиоды
- блок питания
- корпус сетевого фильтра
- вентилятор
- радиатор
- индикатор МТ-10Т7
- таймеры
- аккумулятор
- резисторы R6-R9-R13
- транзисторы
- тиристоры

Описание работы прибора.
Многофункциональный акваконтроллер отсчитывает реальное время в часах и минутах. Управляет тремя нагрузками по времени. Имеет шесть таймеров, которые можно программировать и они не зависят друг от друга. Каждый таймер способен управлять одной из нагрузок, при дискретности в 15 минут. Измеряет и изменяет нагрев воды каждый десять секунд с точностью до 1°C . Имеет вентилятор и модуль Пельтье. Имеет индикацию включения и выключения нагрузок. Позволяет вручную корректировать время, а так же способен автоматически его корректировать на заданную величину в пределах +- минуты за сутки. Благодаря наличию батареи может сохранять ход часов от 2 до 7 дней. Так же сохраняет все настройки пользователя при отключении питания, в памяти независимой от сетевого питания, и восстанавливает их при следующем подключении сети.

Описание процесса сборки устройства.

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


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



Шаг второй: создание платы процессора устройства.


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


Шаг третий: продолжение сборки устройства и работа над индикатором.

При проектировании и сборке устройства автор шел от имеющихся деталей, поэтому вся конструкция довольно сильно удешевлена. Поэтому был куплен самый дешевый индикатор МТ-10Т7. За дешевизну деталей приходится расплачиваться очевидными минусами удобства, одни из таких минусов является то, что отображать буквы при помощи всего семи сегментов сложновато.

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

Так выглядит расположение измененного монтажа:


По итогу получился следующий вариант схемы аквариумного контроллера, несколько отличный от изначальной схемы образцового устройства:

Шаг четвертый: плата силового блока.

А вот так выглядит схема платы силового блока питания:


И вот так она же выглядит уже в собранном состоянии:


В качестве резервного источника питания будет использоваться аккумулятор, поэтому автор установил резистор R6. Другие резисторы от R9 до R13 автор выбирал исходя из необходимости установки под конструкцию его силового блока устройства аквариумного контроллера.

Шаг пятый: установка деталей в корпус.


В качестве оболочки для всей электронной начинки автор выбрал корпус от старого сломанного сетевого фильтра, просто потому, что такой имелся в наличии.

В данном устройстве нет необходимости в использовании нагрузки на 220 В более 150 ватт, поэтому тиристоры автор решил установить без радиаторов.

Для большей части всех аквариумных приборов такого будет даже более, чем достаточно. Радиаторы так же отсутствуют на транзисторах, которые управляют нагрузкой в 12 В, поэтому нагрузка на каналы по 12 вольт должна быть не мощнее 2 Вт, при учете имеющегося трансформатора и остальных факторов. Чтобы запитывать вентилятор, который охлаждает устройство, а так же обеспечивать работу светодиодов, подобных мощностей должно хватать.

В таком виде таймер способен управлять работой освещения в аквариуме, а тем временем автор продолжает работу над корпусом устройства контроллера.

Подведение итогов.

В целом по ходу сборки автор не заметил каких-либо серьезных проблем или ошибок. В процессе эксплуатации и активного использования устройства так же не было выявлено никаких проблем, что говорит о качественных схемах устройства. Правда возникла небольшая заминка с несовпадением отверстий индикатора на плате с отверстиями на самом индикаторе, расхождение составило порядка 0.5-1 мм. Данная помарка была решена при помощи надфиля, так как место вполне располагало к подобным работам.

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: