Керований по радіо вимикач своїми руками

У попередніх постах ми спроектували, зробили і всебічно протестували блок двоканального радіокерованого вимикача.

Керований по радіо вимикач своїми руками

Але до сих пір це була «бездушна залізяка», яка незважаючи на всю свою потенційну міць, закладену в МК, - нічого не вміє.

В общем-то, наше основне пристрій (якщо не розглядати підключення радиомодуля) - анітрохи не складніше звичайнісінькою Ардуінкі, до якої підключено дві кнопки і пара світлодіодів (в результуючому пристрої - світлодіоди замінені на транзисторні ключі, керуючі релюшкой, але суть це не міняє ).

Виготовлений модуль радіовиключатель не надто налаштовує на те, щоб прямо на ньому проводити розробку і налагодження:

  • немає можливості отримати діагностичні повідомлення в «моніторі порту»,
  • відсутня візуальне підтвердження, яке з реле і в якому стані знаходиться і т.п.

Але, як я раніше вже помітив, для «оживлення» нашого модуля все-то потрібно написати скетч, який би відпрацьовував різні натискання (дві кнопки) і міг би на нашу алгоритму вмикати / вимикати два навантаження (в макеті це буде пара світлодіодів). Природно, це «базовий функціонал», після того, як розберемося з ним - додамо і «радіоканальні» функції.

Взагалі, звичайно, з «макетке» правильніше було б почати, але в даному випадку - так вийшло, що прототип робився пізніше, ніж результуючий пристрій.

Отже, щоб отримати «зручну» середовище для підготовки нашого скетчу, візьмемо беспаечное макетке, будь-яку Ардуіно-сумісну плату (в моєму випадку це cArduino Nano), дві тактові кнопки, два світлодіоди (з струмообмежувальні резистори) і кілька перемичок:

Керований по радіо вимикач своїми руками

Збираємо макет, згідно принципової схеми з першого поста.

  • Кнопку для першого каналу підключаємо між піном A1 і «землею» (GND),
  • Кнопку другого каналу - A0 і GND.
  • Світлодіоди (індикатори роботи відповідних транзисторних ключів і реле в радіовиключатель) підключаємо до D3 і D4, відповідно.

Власне, такий макет дозволить нам написати й налагодити основний функціонал.

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

Перед початком розробки слід зафіксувати базові функції, які хотілося б реалізувати.

бажаний функціонал

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

базові функції

Двоканальний вимикач буде використовуватися для управління світлом і вентиляцією в санвузлі, тому список можливостей вийшов такий:

  • За короткому натискання вмикати / вимикати відповідний канал навантаження (канал 1 - світло, канал 2 - вентиляція).
  • По довгому натисненню (більше 2 секунд) - фіксувати факт такого натискання ( «зводити прапор»), але поки нічого не робити додатково.
  • Якщо світло увімкнено більш, ніж 1,5 хвилини - автоматично включити витяжку (наприклад, хтось пішов в душ і забув включити вентиляцію).
  • Якщо були включені обидва канали та перший канал вимикається, автоматично вимкнути другий канал через 10 хвилин.
  • У разі, якщо будь-яке навантаження включили, але забули вимкнути - автоматично вимкнути (у кожного каналу - свого часу автоматичного вимкнення: 60 і 10 хвилин відповідно).

При формуванні списку функцій - активно спілкуйтеся з домашніми. Наприклад, мені розумно підказали, що час, після якого має відбуватися автоматичне включення вентиляції занадто мало і будуть непотрібні спрацьовування і взагалі, всі тимчасові параметри треба мати можливість в ході експлуатації коригувати.

радіоуправління

Ці функції будуть реалізовуватися трохи пізніше, але їх відразу варто тримати в голові (менше доведеться переписувати):

  • Команди включення / вимикання, що надійшли по радіоканалу повинні відпрацьовуватися так, як якщо б фізично натискалися кнопки вимикача (тобто повне збереження базової логіки).
  • Через радіоканал потрібно мати можливість змінювати всі тимчасові параметри роботи вимикача.
  • Тимчасові параметри роботи вимикача повинні зберігатися в енергонезалежній пам'яті (щоб після кожного вимкнення електрики не доводилося «переучувати» модуль).
  • Всі параметри (поточний стан, прапори «довгого натискання», тимчасові) повинні бути доступні по радіоканалу як за запитом (відповідь на запит), так і на регулярній основі (раз в 15 секунд - «флуд» в ефір з поточними значеннями параметрів).

програмування

В ході створення ПО для реалізації базових функцій будемо враховувати наступне:

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

Перша вимога призводить до використання масиву структур для зберігання параметрів роботи модуля, а друге - диктує використання сторожового таймера (watchdog).

Для зберігання параметрів каналу я створив таку структуру:

Тепер уже можна написати нескладний скетч.

У функції setup () проводимо всю необхідну ініціалізацію і зводимо «сторожового собаку».

Далі все просто: в основному циклі програми (loop ()) будемо послідовно робити наступні кроки:

  • Працюємо з кнопками (функція button_read ()).
  • Відпрацьовуємо автовимкнення (autoOff ()).
  • Реалізуємо додаткову логіку роботи (chkLogic ()).
  • Скидаємо сторожовий таймер (wdt_reset ()).

Якщо додаткова логіка роботи не потрібна (в моєму випадку це автоматичне включення і виключення вентиляції в залежності від стану світла) - функцію chkLogic () можна просто видалити.

У мене вийшов ось такий скетч

Базові функції працюють рівно так, як хотілося.
Короткі натискання кнопок включають відповідні світлодіоди, доп.логіка спрацьовує. По довгому натисненню будь-яку кнопку - на одну секунду запалюється вбудований світлодіод (D13) на Ардуіно.

Тепер можна реалізовувати і бездротові функції.

Для цього звернемося до одного з моїх ранніх постів: Бездротові комунікації «розумного будинку».

Основні принципи, які я там описував - витримали перевірку часом і зазнали дуже незначні зміни.

Для роботи з параметрами підійде структура:

Для переданих даних буду використовувати наступну структуру:

Згідно вищесказаного, мій модуль буде описуватися наступним чином:

Видно, що всі ключові параметри, що описують поточний стан і тимчасові параметри, присутні.

Ще трохи програмування і код готовий.

Власне, тепер залишилося прошити наш модуль.

Прошив, перевірив роботу - все ок, але виявилося, що в «чистому» МК все байти EEPROM встановлені в 255, що дає відповідні затримки.

За кодом, який наведено вище, видно, що установка всіх часових параметрів проводиться тільки через радіоканал. Але про «керуючий модуль» я ще нічого не написав - тому треба якось «ізольовано» вирішити цю проблему.

Для цього можна скористатися прикладами з бібліотеки EEPROM і прямо з них прописати первинні (більш актуальні) значення у відповідні комірки незалежній пам'яті.

Подальша перевірка показала, що тепер все працює як раз так, як хотілося.

Ще раз повторю свій основний принцип пристроїв мого «розумного будинку»: кожне створене пристрій зроблено для досягнення якоїсь певної мети і воно повинно працювати самостійно.

Тепер пристрій самодостатньо і готовий виконувати свою основну функцію (навіть без радіоканалу). Можна монтувати.

установка модуля

Керований по радіо модуль буде монтуватися всередину стіни з гіпсокартону - тому декілька найбільш прийнятних корпус (щоб в нього вліз власне модуль і блок живлення для нього і щоб цей корпус можна було без проблем пропхати в отвір для установки монтажної коробки).

Плату блоку живлення взяв там же, де і минулого разу - розпиляв блок живлення для iPhone. В принципі, можна зробити конденсаторний блок живлення або пошукати вже готові варіанти (наприклад, тут).

Вийшло якось так (тут вже все підключено - проводив останні тести перед монтажем в стіну):

Керований по радіо вимикач своїми руками

Корпус виявився дещо завеликий, але наявний в господарстві дрібніший - не підійшов.

Правильніше було б, звичайно, спочатку вибрати конкретний корпус і робити під нього, але у мене не було особливих обмежень на розмір, тому «як вийшло».

Тепер можна зайнятися безпосередньо «встраиванием» модуля в стіну (на жаль, захопився процесом і забув фотографувати, тому тільки текстовий опис):

  • Знеструмлюємо відповідну ланцюг освітлення.
  • Демонтуємо наявний вимикач (не забуваємо промаркувати, які пари йдуть на світло, а які - на витяжку).
  • Знімаємо монтажну коробку
  • Підключаємо радіовимикач до відповідних проводам (попутно позбуваючись від «скруток», які залишили «добрі будівельники»).
  • Акуратно заштовхуємо всі дроти і радіовимикач в проміжок між листами гіпсокартону (я вирішив розташувати модуль вище вимикача, щоб його було простіше дістати при необхідності).
  • Виводимо проводу, до яких будемо підключати кнопковий вимикач в отвір для установки монтажної коробки (спеціально взяв принципово відрізняється від решти проводки кабель - МГТФ, щоб в разі чого електрику було зрозуміло, що тут «щось дивне» і з цим треба спочатку розібратися) .
  • Тепер можна встановити монтажну коробку і підключити кнопковий вимикач.

Все готово. Включаємо електрику і перевіряємо, що все працює так, як хотілося.

Створене пристрій успішно змонтовано і відмінно замінило «тупий» вимикач, додавши до нього трішки «розуму» (економію електроенергії у випадках «забудькуватості» господарів, автоматичне включення / вимикання витяжки тощо).

P.S. В обговоренні першого поста були питання з приводу використання іншої елементної бази, в тому числі і для досягнення більш компактних розмірів.

Нещодавно в руки мені потрапив ось такий звір:

Керований по радіо вимикач своїми руками

Це звичайне реле (дуже тихе) з двома групами комутованих контактів. Може вмикати / вимикати ланцюга на 220В (потужність невелика, але для світлодіодних ламп - цілком підійде). Управляється 5В, можна підключати безпосередньо до висновку МК (без транзистора).

Це я до того, що не варто до всього ставитися як до догми (повторювати всі проекти «один в один») - шукайте, підбирайте найбільш адекватні (для кожного конкретного завдання) рішення, змінюйте!