У подальшому викладі хотів би продемонструвати і поділитися своїми напрацюваннями по акваріумному контролеру. На мій погляд, тематика дуже затребувана серед акваріумістів, але далеко не всі аспекти і проблеми розглянуті. Можливо, когось що-небудь зацікавить, або хтось захоче повторити конструкцію, тому в темі додаються всі необхідні файли. Для тих, кому захочеться покопатися в програмній складовій пристрою додаються всі вихідники.
Відразу обмовлюся, що створювалося все під власні потреби і потреби друзів-акваріумістів. Все нижче описане - IMHO і не претендує на «істину», або глобалізацію вирішення всіх існуючих проблем.
Вступна частина
Передумови для створення контролера досить банальні - був придбаний акваріум на 450 л, і до нього на додаток йшла кришка з встановленими лампами, ЕПРА, кулерами, PH-електродом з підсилювачем, і керуючим всім цим багатоканальним контролером. Перший час все працювало без збоїв, але потім почали вмирати керівні симістори, скидатися поточний час, та й функціонал не зовсім задовольняв збільшеним вимогам. Після тривалого використання та аналізу наявного контролера було прийнято рішення зробити свій керуючий орган, і продумано функціонал майбутнього пристрою:
1. Керування 8 каналами (+ 1 ШИМ канал):
- 4 канали освітлення;
- компресор;
- нагрівач;
- електроклапан системи CO2;
- помпа/електроклапан автодоливу;
- кулера 12В (ШИМ).
2. Підключення 3-х температурних датчиків DS18B20.
3. Підключення електродів PH і Redox-потенціалу.
4. Підключення датчика рівня води (аналоговий датчик).
5. Як комутуючий елемент використовувати електромеханічні реле.
6. Підключення 4-х рядкового ЖКМ на контролері HD44780.
7. Наявність годин реального часу DS1307Z.
8. Зв'язок з ПК організувати 2 способами:
- радіомодуль, що використовує Bluetooth HC-05 (основний канал);
- з "єднання з USB (резервний канал).
9. Номінальна потужність комутованого навантаження 650 Вт.
10. Наявність електричних фільтрів живлячих напружень і захисних елементів основних ланцюгів пристрою.
11. Промаркувати всі роз'єми і виводи з'єднань.
Можливості програмного забезпечення для ПК:
- ручний режим керування навантаженням;
- 4 автоматичні режими (температурний режим, режим PH/CO2, режим вентиляції кришки, режим автодоливу води);
- використання 3-х таймерів на кожен канал, з можливістю по секундній установці інтервалів;
- калібрування електродів;
- обмежуючі тимчасові інтервали підсвічування ЖКМ, роботи кулерів і системи СО2;
- запис даних в енергонезалежну пам'ять контролера і всіляка індикація поточних параметрів системи.
З деякими поправками даний функціонал може бути віднесений до категорії універсальних пристроїв. Це звичайно не зовсім коректно, тому що акваріумні контролери можна розділити на 2 підгрупи - для прісноводних і морських мешканців. Розрізняються і режими освітлення, і наявність різних електродів, що визначають параметри води, і програмні режими, що стабілізують ці параметри, і ін. Апаратна складова акваріумів так само дуже відрізняється. Освітлення може бути організовано люмінесцентними лампами, а можуть бути використані світлодіоди або світлодіодні стрічки. IMHO - використання світлодіодів більш привабливий підхід, як з точки зору отримання необхідного спектрального складу, так і при організації керуючих режимів. Однак, використання якісних комплектуючих, стабілізаторів струму, джерел живлення і питання відведення тепла робить цей підхід більш дорогим. Через що, велика кількість акваріумістів все ще використовує люмінесцентне освітлення, і змінювати його поки не збираються. Відмінностей може бути великий натовп, бо готові рішення набуваються вкрай рідко, і велика частина акваріумів зібрані під індивідуальні смаки їх власників. В даному випадку розглядалися 3 акваріуми, і були об'єднані/усереднені вимоги щодо них. У підсумку, вийшла система для прісноводного акваріума (або травника), з люмінесцентним освітленням, об'ємом до 500 л., автономним режимом роботи, виведенням необхідної інформації на ЖКМ і підключенням до ПК для конфігурації.
Апаратна реалізація
Виходячи з особистого досвіду, досвіду інших розробників і шкідливості свого IMHO - конструкції типу «бутерброд», побудованих на базі Arduino і іже з ним, намагаюся не використовувати. Взагалі і ніколи. Це ж стосується і програмного забезпечення (низького або високого рівня). Винятки становлять зовнішні бібліотеки, власноруч перероблені та пройшли не одну сотню годин тестування. Ну і зрозуміло стандартні ліби, блокнот, компілятор, программатор/налагоджувач і осциллограф.
Апаратна частина заснована на мікроконтролері фірми Atmel - ATmega32A, що працює від зовнішнього кварцового резонатора 11.0592 MHz. Вибір обґрунтований наявністю великого кол-ва флеш- і оперативної пам'яті, необхідним кол-вом висновків, щоб не відчувати себе соромленим у засобах (у результаті було використано ауд 80% ресурсів МК). Комутація навантаження реалізована за допомогою електромеханічного реле. У пристрої використовувалися реле герметичного виконання фірми OMRON, серія - G5LA. Отримання поточного часу організовано за допомогою мікросхеми DS1307Z + прецизійний термостабільний резонатор, завчасно знятий зі швейцарського промислового обладнання. Вибір був обумовлений наявністю цієї мікросхеми і якісного резонатора. В іншому випадку краще використовувати DS3231. Для управління кулерами використовується ШИМ-сигнал. Як ключовий елемент використовується польовий транзистор LR3714Z. Для виведення даних на ЖКМ використовується 4-бітова шина, для комутації підсвічування використовується транзистор FMMT717TA. Зв'язок з ПК організовано за допомогою радіоканалу (RS232-Bluetooth HC05), або перетворювача RS232-USB CP2102. Швидкість передачі даних 9600 kbit/s. Фільтрація мережевого напруження розрахована на номінальну потужність ауд 650 Вт. Термінування температурних датчиків DS18B20 необхідно виробляти в безпосередній близькості від датчика. Для підвищення надійності пристрою використовувався зовнішній супервайзер ADM690ANZ, що відстежує тактування МК і рівень напруги, що живить. Радіоканал реалізований окремим модулем, що підключається на плату контролера через 4 піновий роз'єм. Присутня всіляка індикація (активність каналів, наявність напружень, тактування МК, передача пакета даних).
Хотілося б, звичайно, використовувати Wi-Fi підключення, з HTTP сервером. Але для цього необхідно мати в розпорядженні Ethernet MAC модуль, що тягне за собою також необхідність і DMA інтерфейсу, - а це вже завдання не для AVR. Та й вартість адекватного Wi-Fi модуля досить висока. Не будемо розглядати ланцюжок з декількох плат (про це я писав спочатку параграфа), або ж дешевих китайських модулів, здатних на все, але при цьому відвалюються кожні півгодини. І з ARM7TDMI на більш свіжу архітектуру все ніяк не осиллю себе перейти. Та й сенс використовувати ARM для такого завдання, де з лишком вистачає AVR. Тільки для Ethernet/Wi-Fi - не бачу сенсу. Загалом, це вже завдання іншого рівня. Для поточного автономного контролера було прийнято рішення обмежитися USB/Bluetooth і зовнішнім супервайзером.
Для розробки пристрою використовувався програмний продукт P-CAD 2006 SP2. Нижче наведено принципову схему пристрою (клікабельно):
Друкована плата пристрою була розроблена під SMD-монтаж. Клас точності - 4. Використовуються корпуси TQFP44, QFN28, SOT23, TAN-A, TAN-B, SMA, 0805, 0603 та ін. Плата має двосторонню реалізацію. Загальний вид друкованої плати пристрою наведено нижче (клікабельно):
Виготовлення друкованої плати було довірено китайським фахівцям, бо якість місцевих виробників залишає бажати кращого. Яка саме фірма займалася виробництвом плати вже сказати не зможу, тому що замовляв я її через товариша, до якого я просто «впав на хвіст» під час його замовлення, і відправив йому всі необхідні файли. Якістю «піднебесної» я був вельми вражений. Вартість однієї плати обійшлася мені приблизно в 20 $. Так само дуже порадував сервіс. Вартість плати залежала від її класу точності, розмірів, та інших заданих вимог. Протягом одного робочого дня моє замовлення було оброблене, розраховане і вказана точна дата прибуття в моє місто. Того ж дня кошти були вже переведені на їх рахунок. І саме в зазначений день мені надійшло повідомлення про доставку моєї посилки. Обробка замовлення, виготовлення і доставка зайняли трохи менше 2 тижнів. Жоден з вітчизняних виробників мені таке і близько не зміг запропонувати (в рамках адекватної вартості). Нижче наведено фото однієї з отриманих плат:
Після напайки всіх компонентів, прочищення ультразвуком від флюса і прошивки контролера пристрій набув наступного вигляду:
Для установки супервайзера передбачена 8-пінова панелька. ADM690ANZ дуже чутливий до флуктуацій напруги, і якщо у вас немає можливості встановити якісне стабілізоване джерело живлення на 5В - краще супервайзер не використовувати. Інакше отримаєте більше проблем, ніж користі від його використання. Для перемикання між USB і Bluetooth використовується відповідна перемичка.
Спочатку, пристрій планувалося встановлювати в кришку акваріума. Тому організація корпусу не передбачена. Однак, надалі, можливо, потреба в цьому з'явиться. Для відображення інформації використовувався 4-х рядковий ЖКМ WH2004L-TMI-CTW, що встановлюється на передню частину алюмінієвої кришки. Щоб уникнути наводок на індикатор, під час комутації силового навантаження, сам індикатор необхідно ізолювати від зіткнутих металевих частин кришки, а шлейф, що йде від контролера до екрану, - екранувати.
Ну і в завершенні опису апаратної складової нижче представлена фотографія кришки акваріума. У ній встановлено сам контролер з ЖКМ, джерело безперебійного живлення на 5В з акумулятором, імпульсне джерело живлення на 12В, 6 ЕПРА, плата підсилювача для PH-електрода (заснована на CA3140E), 2 80мм кулера і роз'єм для мережевого живлення з простеньким вхідним фільтром.
Реалізація зв'язку з пристроєм
Основним каналом зв'язку передбачено радіоканал Bluetooth (HC-05), USB-підключення - резервне. Пристрій не має гальванічної розв'язки між мікроконтролером і перетворювачем рівнів CP2102 (USART-USB). При підключенні за допомогою USB необхідно переконатися, що джерело електроживлення, яке використовується для отримання + 5В, і напруження ПК, що живить, включені в один вузол електромережі (розетку). В іншому випадку можлива некоректна робота пристрою, вихід з ладу певних елементів конструкції. Нижче наведено схему та друковану плату радіомодуля:
Програмна реалізація
Програмне забезпечення складається з 2 частин - низького рівня (прошивка) і високого рівня (програма для ПК). Для розробки низькорівневої частини використовувався програмний продукт WinAVR, версія компілятора GCC 4.3.3. Для організації керуючих підпрограм був реалізований диспетчера завдань, заснований на автоматі прапорів. Було виділено кілька тимчасових інтервалів: 1 — 41ms, 2 — 167ms, 3 — 333ms, 4 — 1.34s, 5 — 2.67s, 6 — 10.6s. У першому часовому інтервалі реалізовано прострочене відображення інформації на ЖКМ. У другому - опитування температурних датчиків (ауд раз на 3 секунди), отримання поточного часу, опитування АЦП і розрахунок значень електродів, з урахуванням калібрувальних коефіцієнтів. У третьому часовому інтервалі реалізовані основні керуючі функції контролера:
- обробка даних вхідних пакетів;
- перетворення поточного часу на числове значення (для зручності всі часові значення в програмі представлені в числовому вигляді HHMMSS);
- керування заданими каналами, відповідно до обраних режимів роботи (раз на секунду);
- керування каналом PWM;
- обробка даних керуючих режимів (температурний режим, режим PH/CO2, режим вентиляції кришки, режим автодоливу води);
- встановлення обмежень тимчасових інтервалів (підсвічування ЖКМ, робота кулерів і системи CO2);
- запис даних у EEPROM;
- аналіз поточного стану кожного з каналів, обраних режимів з відповідною індикацією;
Четвертий часовий інтервал - формування тактового сигналу для супервайзера. У п'ятому інтервалі - відправка пакета даних про поточний стан датчиків, активність каналів і режимів управління, та ін інформація для відображення в програмі для ПК. Останній часовий інтервал використовується для перевірки стану датчика рівня води, при увімкненому режимі автодоливу.
Проект складається з декількох файлів: main.c, hd44780.h, i2c.h, USART.h, Functions.h, ds18b20.c, delay.h, crc8.c. Бібліотеки для роботи з шиною 1-Wire були запозичені з відкритого проекту на одному з німецьких сайтів і перероблені під власні потреби (прибрані невикористовувані функції і додано вказівку використовуваного порту і виведення МК для відповідного датчика). Всі інші ліби написані з чистого аркуша.
Для налагодження низькорівневого програмного забезпечення використовувалося комп'ютерне моделювання пристрою, за допомогою програмного пакету Proteus 7.7 SP2. Нижче наведена зібрана схема пристрою:
Для розробки програмного забезпечення високого рівня використовувався програмний продукт Microsoft Visual Studio 2007. Основні можливості ПЗ представлені 4-ма закладками: відображення інформації, режими/події, щоденні таймери, калібрування електродів. Дані оновлюються раз на 3 секунди. Для передачі даних використовується метод транзакцій. ПЗ відправляє пакет даних пристрою, який у свою чергу, після отримання, відправляє прийнятий пакет назад на ПК. Якщо відправлений і прийнятий пакети збігаються - транзакція пройшла успішно. Якщо ж дані різняться, поточний пакет даних відправляється заново. При багаторазовому не збігу відправленого і прийнятого пакета даних відображається помилка з'єднання з пристроєм. Для передачі даних використовувався рядковий тип, що дозволяє безпомилково визначити початок/кінець пакета, його тип і самі дані. Нижче представлено інтерфейс програмного забезпечення для ПК:
Повний опис роботи програмного забезпечення AquaController 2014 знаходиться в довідкових матеріалах, доступних через меню Допомога/Довідка. Детальний опис пристрою знаходиться у файлі «Технічний опис».
Приблизна вартість пристрою з огляду на доставку комплектуючих, ауд 100 $
Це перша реалізація проекту акваріумного контролера. За більш ніж півроку не виявлено жодного збою в його роботі. Деякі конструктивні і програмні недоліки все ж є, але цього поки недостатньо, для розробки наступного прототипу.
З урахуванням експлуатації поточного контролера, перелік того, що може бути додатково втілено в подальшому пристрої:
- апаратна реалізація на ARM Cortex;
- зв'язок по Ethernet/Wi-Fi з організацією HTTP-сервера;
- наявність зовнішньої клавіатури для аварійного відключення або активації керованих каналів;
- інтеграція підсилювача для PH і Redox електродів на плату контролера;
- наявність керованих каналів для світлодіодного підсвічування;
- управління додатковими агрегатами (автогодівницею, системою подачі добрива та інше);
- збільшено номінальну потужність навантаження;
- заміна DS1307 на DS3231;
- можливість встановлення в один зі стандартних корпусів.
Але поки це всього лише плани на майбутнє, так як даний контролер повністю задовольняє вимогам мого поточного акваріума.
Нижче завантажена на github необхідна документація, програмне забезпечення та вихідники програм: Акваконтроллер 2014
Дякую за увагу.
