AquaBot - контролер для акваріума

Submitted by gary on Sat, 11/16/2013 - 17:32

Нещодавно закінчив збирати альфа версію контролера для акваріума.
Є кілька причин чому я почав збирати власний контролер: був настрій щось зібрати і запрограмувати, прохання знайомого електроніка зробити йому таку штуку, відсутність контролера, який задовольняє всі потреби за розумні гроші (мабуть) і, найголовніше: just for fun!
Зараз спробую описати нутрощі контролера, який збирався і програмувався кілька місяців тому.
Перед розробкою контролера було поставлено кілька задач:
1. Контроль освітлення (час ввімкнення, час вимкнення, перерва в освітленні вдень, плавне включення)
2. Контроль температури (просто підтримувати температуру в діапазоні допустимих температур)
3. Контроль провітрювання
4. Гнучкі налаштування
5. Зручний інтерфейс

Контроль освітлення

Це, мабуть, найскладніша частина. Тут найбільше змінних значень. Плавне включення зроблено максимально на скільки це можливо з лампами денного світла. Проблема цих лам, що вони можуть бути лише в двох положеннях: вкл і викл. Тому було вирішено вмикати лампи з певним інтервалом. Зараз контролер розрахований на 2 лампи. Вмикаються вони від реле, який тут 4. (2 для освітлення, 1 для нагрівачі, і 1 для провітрювання).
Лампи мають працювати лише вдень, в заданий проміжок часу, і плавно вимикатися. Вдень всі лампи згасають на перерву (для того, щоб на склі не росли водорослі). Час та тривалість цієї перерви також задається.

Контроль температури

Тут все просто: є цифровий термодатчик ds1820. Він дуже чудовий. Житиме цей датчик у воді, звісно. На ebay спеціально купив водонепроникну версію, з метровим шнуром. В залежності від температури - контролер вмикає або вимикає нагрівач. Є верхня і нижня межа допустимої температури. Між цими межами стан нагрівача не змінюється, щоб реле довше прожило можна поставити більший діапазон температур. Але звісно ж треба зважати на жителів акваріуму, і це приорітетніше)

Контроль провітрювання

Для провітрювання немає ніяких датчиків. Тут налаштування скоріше інтуїтивне) Є два параметри які можна налаштувати: інтервал між провітрюванням і тривалість провітрювання. Також провітрювання ЗАВЖДИ вмикається коли увімкнений нагрівач, щоб під час нагрівання вода краще змішувалася, і рівномірніше нагрівалася. Вирішив цей параметр, навіть, не вносити в інтерфейс.
Крім того можна підключити малопотужний вентилятор, який також буде спрацьовувати в цей час. Його можна розмістити десь під кришкою, щоб не збирався конденсат.

Гнучкі налаштування

Щоб налаштовувати цей контролер для різних акваріумів, або підготувати до якихось інших змін, було вирішено зробити можливість змінювати параметри, а не вшивати їх в контролер.
Всього налаштовуються такі параметри:
- Час включення освітлення (години, хвилини)
- Час виключення освітлення (години, хвилини)
- Інтервал між включенням і виключенням ламп (хвилини)
- Час перерви в освітленні (години, хвилини)
- Тривалість перерви в освітленні (хвилини)
- Мінімальна допустима температура (градуси Цельсія, крок 0,5)
- Максимальна допустима температура (градуси Цельсія, крок 0,5)
- Інтервал включення провітрювання (хвилини)
- Тривалість провітрювання (хвилини)
- Поточний час (години, хвилини, секунди)
- Поточна дата (рік, місяць, день)
- Автопідстройка (секунди)
- Коди кнопок управління (меню, вгору, вниз, вліво, вправо, світло)

Зручний інтерфейс

Це забрало немало часу і нервів. Спочатку довго не міг придумати як все буде виглядати в результаті. Але потім все прийшло само собою... Для виведення інформації використав LCD дисплей на 20*4 символів. Екран не підтримує кирилицю, але я не сильно переймався) Для управління спочатку хотів зробити кнопки. І добре що я такий лінивий і не став цього робити) Вирішив не винаходити велосипед а вже використати прилади де є багато кнопок і які завжди під руками - пульт ДУ від телевізора :-) В результаті просто додав IR-приймач і трохи коду в програму. Насправді з програмою в мене були проблеми адже мені треба весь час зчитувати сигнали з IR-приймача, весь час оновлювати данні на екрані, весь час слідкувати за температурою та іншими параметрами. В результаті на такі прості задання не вистачало ресурсів процесору і зчитування сигналів з пульта ДУ відбувалося не чітко. Довгенько в мене не виходило правильно організувати роботу програми (розбалували мене сучасні комп'ютери з, майже, необмеженими ресурсами). Та потім, трохи подумавши, все вирішив. І запрацювало все так чітко і швидко, що я й досі не вірю в це диво. Інформація на дисплеї оновлюється миттєво, пульт працює чітко, і все виконується вчасно. Краса!)
Доречі, при включенні контролер кілька секунд пропонує прив'язати інші коди кнопок пульта ДУ. Дуже зручний момент, наприклад при втраті пульта, чи при зміні хазяїна контролера..) Якщо пропустити цей етап, то будуть працювати кнопки які призначили минулого разу.
А якщо все працює швидко і чітко, і відображається на симпатичному дисплеї, то це і є зручний інтерфейс..)

Апаратна частина

Серцем цього контролеру є Atmega 328PU. Трішки соромно, але не дуже, що цей процесор в платі Arduino Duemilanove. Наступний такий контролер (для автора ідеї) буду робити скромніше, і вже не буду запихати цілу arduino.
Щоб не налаштовувати контролер кожен раз після включення, в ньому вбудований годинник реального часу (RTC) з власною батарейкою. Тобто якщо зникне електроенергія, то при включенні контролер буде знати поточний час і дату. До того ж RTC має 56 байт власної оперативної пам'яті. В цій пам'яті я зберігаю всі параметри які налаштовую через інтерфейс, в тому числі і коди кнопок пульта ДУ. Зручно і надійно.
Термодатчик використовується DS18B20, здається. Він цифровий, і працює по OneWire. Багато розказувати нема чого. Після недовгого калібрування працює точно.
Дисплей підключений без конвертера, тому займає багатенько виходів на Arduino. Кирилицю не підтримує, але симпатичний)
Силове управління лежить на парі двоканальних релейних модулів. Працюють чітко, але гучно)
Всі плати зафіксовані термоклеєм марки "Китайські соплі" в корпусі від ADSL маршрутизатора DLINK :-)
Для живлення цього добра треба десь 7.5 - 9 вольт. Все (крім вентиляції) живиться через КРЕН5А, якій я зробив урбаністичний радіатор)

В контролеру є значний запас для розширення функціоналу. Прошивка, також, написана досить структуровано, для розширення функціоналу пристрою.
Якщо Вас це зацікавило, а бо є питання - зв'яжіться зі мною, обіцяю, буде цікаво!)

Pictures: