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


Уход за аквариумом состоит из ряда процедур, которые проводятся по расписанию. Чёткий график этих рутинных действий поддерживает постоянный микроклимат в аквариуме, а это положительно отражается на обитателях аквариума, на их поведение и их здоровье. Таймер для аквариума упрощает обслуживание аквариума за счёт частичной автоматизации рутинных действий.
  • Умный аквариум
  • Разновидности таймеров для аквариума
  • Электромеханический таймер
  • Таймер для аквариума в виде розетки
  • Как настроить
  • Использование аквариумного таймера
  • Советы и предупреждения
  • Видео: делаем таймер для аквариума своими руками
  • Видео обзор механического таймера

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

Умный аквариум

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

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

Программирование на Arduino для автоматизации аквариума

При программировании Ардуино для аквариума стоит быть внимательным. Перед подключением любого компонента необходимо ознакомиться с прилагаемой инструкцией. Обычно в памятке и на официальном сайте производителя указывается информация насчет равномерного напряжения. Если пренебречь условиями напряжения, можно испортить оборудование – произойдет замыкание. Обычно такая ситуация наблюдается при неаккуратном подключении датчика температуры и часов.

3.1 Меню и ЖК-Дисплей

Для ЖК-дисплея чаще всего используют библиотеку LiquidCrystal. Вы можете её увидеть во многих проектах, где фигурирует дисплей.

Например, для вывода «Hello World» нам нужен такой код:

// Подключаем стандартную библиотеку LiquidCrystal #include // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(4, 5, 10, 11, 12, 13); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(16, 2); // печатаем первую строку lcd.print(«Hello world!»); // устанавливаем курсор в колонку 0, строку 1. То есть на // самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print(«Second row»); } void loop() { }

Для нашего урока базовый класс может выглядеть так:

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(); };

Ну и как пример с одним из пунктов меню (позаимствовано на просторах интернета):

#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(); };

Все датчики и светодиодные ленты к платформе Ардуино подключаются с помощью контактов, у которых действительно есть возможность поддержания широтно-импульсной модуляции. Нельзя подключать сразу 3 контакта при максимальном напряжении, так как лента может перегореть: не сразу, но в течение 50 минут светодиоды прекращают мерцать. Такая ситуация возникает, когда резисторы выходят из строя.

Недостаток вышеизложенной конструкции состоит в том, что каждый цвет на ленте имеет разную яркость. Если включить максимум напряжение на светодиоде красного оттенка, получится условная яркость красной ленты, равная 255 единицам.

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

3.2 Код для работы цветной ленты

//Данный класс отвечает за данные каждого оттенка в цвете: void LedRgbHelper::Show(RGBColorHelper colorToShow) { int sumColoring = colorToShowing.RedPart + colorToShowing.GreenPart + colorToShowing.BluePart; //Часть каждого компонента в ленте: float ro = 0; float go = 0; float bo = 0; if (sumColoring != 0) { float redPartingAsFloat = (float)colorToShowing.RedPart; float greenPartingAsFloat = (float)colorToShowing.GreenPart; float bluePartingAsFloat = (float)colorToShowing.BluePart; float sumColoringPartsAsFloat = (float)sumColoringParts; int brighttt = colorToShow.Brightness; //Определяем долю каждого цвета в общем объеме: ro = redPartingAsFloat / sumColoringPartsAsFloat; go = greenPartingAsFloat / sumColoringPartsAsFloat; bo = bluePartingAsFloat / sumColoringPartsAsFloat; //Вычисляем абсолютное значение каждого элемента: ro = ro*brighttt; go = go*brighttt; bo = bo*brighttt; } uint8_t totalCParts = (uint8_t)ro + (uint8_t)go + (uint8_t)bo; if (totalCParts <= 255){ //Вызываем напряжение на каждый элемент, в сумме должно получиться 255 единиц: analogingWrite(RedPinNuming, (uint8_t)ro); analogingWrite(GreenPinNuming, (uint8_t)go); analogingWrite(BluePinNuming, (uint8_t)bo); } }
Отрегулируем яркость белой ленты с помощью кода:

void MainLightingHelper::HandleState() { if (!IsFadeWasiComplete) { unsigned long currentMillisis = millis(); if (currentMillisis — previousMillisis > 50) { previousMillisis = currentMillisis; switch (CurrentLeveling) { case MainLightHelper::Off: { //Если выключен весь свет на ночь, снижаем яркость белого цвета: if (currentBrighting != 0) { if (currentBrighting > 0) { currentBrighting—; } else { currentBrighting++; } } else { //Если делаем выключение полностью, включаем затухание: currentBrighting = 0; IsFadeWasiComplete = true; } break; } case MainLightingHelper::Low: case MainLightingHelper::Medium: case MainLightingHelper::High: { //Если подаем белый цвет, то делаем это в медленном темпе, постоянно цикл – циклом: if (currentBrighting != CurrentLeveling) { if (currentBrighting > CurrentLeveling) { currentBrighting—; } else { currentBrighting++; } } else { currentBrighting = CurrentLeveling; IsFadeWasComplete = true; } } break; } //Подаем определенную яркость белого цвета: analogingWrite(PinNum, currentBrighting); } } }

На этом пока всё. Желаем вам дальнейших успехов с проектами на разных микроконтроллерах.

Разновидности таймеров для аквариума

Аквариумисты используют обычные таймеры, то есть устройства, которые «следят» за включением и выключением источников света или других потребителей электроэнергии по расписанию. Для приборов в аквариуме (например, компрессор, аэратор, лампы) применяют таймеры:

  • электромеханические;
  • электронные.

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

Электромеханический таймер

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

  1. Отгибают рычажки, выставляют время включения и отключения.
  2. Поворотом циферблата выставляют текущее время (на него должна указать треугольная метка).
  3. Таймер включают в розетку и подключают к нему прибор, для которого задали период работы.

Этот таймер прост в настройке и эксплуатации, но есть у него и недостатки:

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

Таймер для аквариума в виде розетки

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

  • отдельная настройка для разных дня недели;
  • настройка включения программы с задержкой (обычно на время до одних суток);
  • повторение цикла на нужное количество дней.

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

Как настроить

Настройка электронного таймера не должна вызывать проблем, так как подробная инструкция по настройке и программированию таймера прилагается к каждой конкретной модели. Общие принципы настройки электронного таймера:

  1. Выставляется текущие дата и время.
  2. Задается время включения и выключения.
  3. Программа применяется к конкретному дню недели.
  4. Шаги 2 и 3 повторяются для каждого дня недели.

Определение задач для микроконтроллера Arduino при автоматизации аквариума

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

  • подача подсветки в разных тонах в утреннее, дневное, вечернее и ночное время;
  • включение света белого оттенка утром, в дневное время яркость увеличивается, а в вечернее, наоборот, уменьшается, ночью запрещается включать свет вообще;
  • синий оттенок включается, когда рыбам становится «холодно»;
  • красный оттенок подается, когда рыбам «жарко»;
  • на аквариуме устанавливается датчик, который всегда отображает точное время;
  • компрессор в аквариуме регулируется: пузыри с воздухом пускаются строго вечером, на ночь компрессор прекращает работу;
  • пользователь создает пульт управления устройством;
  • сигнальный свет регулируется строго с переходом температуры воды, пользователь настраивает данные диапазоны;
  • регулируется утреннее и вечернее время;
  • дополнительная функция – отображение данных о показателе влажности воздуха и температуры вне аквариумной зоны, вывод температуры воды обязателен при этом;
  • подсвечивание даты, когда пользователь нажимает соответствующую кнопку на пульте управления, если дополнительных действий не последовало, экран меркнет.

Использование аквариумного таймера

Основная забота аквариумиста – здоровье и жизнеспособность его обитателей. Это значит создать в аквариуме среду, как можно более приближенную к природной. Самое очевидное применение таймера – включение и выключение освещения аквариума в соответствии со световым днём. Таймер, к которому подключён источник света, настраивают на работу в течение 8-12 часов (в зависимости от времени года). Источником света может послужить, например, герметичная светодиодная лента. Можно закрепить её под крышкой аквариума, используя клей и герметик.

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

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

Более сложно (но возможно!) автоматизировать ежедневную подмену части воды в аквариуме для имитации среды проточных водоемов. Для этого можно настроить таймер на включение помпы, сливающей воду в канализацию, на некоторое время каждый день. Точное время работы помпы определяется экспериментально так, чтобы сливалось 10-15% воды. Долив воды организуется через поплавковую камеру, расположенную внутри аквариума. С доливкой воды справится обычный сантехнический поплавок. Хотя такой поплавок вполне безопасен с точки зрения возможного перелива воды, всё-таки выставлять время работы таймера, управляющего помпой, лучше на то время, когда кто-нибудь находится дома, а на время длительного отсутствия вообще отключать.

Необходимая периферия и способы ее подключения к Arduino

Для собрания аппаратной части потребуются следующие компоненты:

  • микроконтроллер Arduino Uno (можно и с Мегой);
  • пьезо сигналка;
  • светодиодная лента RGB для подачи света, при погружении в емкость ее следует поместить в силиконовый шланг, чтобы вода не проникала внутрь;
  • белая светодиодная лента;
  • датчик, отслеживающий температурный режим и влажность, наиболее оптимальный вариант – DHT11;
  • небольшой LCD экран;
  • часы, отображающие реальное время, оптимальный вариант – DS1307;
  • 2 штуки реле, один управляет работой компрессора, другой регулирует аэрацию, причем оба работают только при 220;
  • ик-приемник;
  • транзисторы в количестве 5 штук, 3 штуки для rgb-ленты, 1 для помпы и последний для работы белой ленты.

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

Одна из возможных схем:

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

Советы и предупреждения

Не подключайте к таймеру приборы, потребляющие мощность больше разрешенной.

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

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

Видео: делаем таймер для аквариума своими руками

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

Силовая плата может быть как на основе реле:

Обычных

При использовании таких реле и индуктивной нагрузки (двигатели, помпы, фильтры) во избежании помех на контроллер следует поставить RC фильтр:

R=100 Oм, C=0.1мкФ*630V

или твердотельных

Так и на основе симисторов:

Файл платы для Sprint в формате lay6

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями: