Розумний будинок на Ардуін uno. «Розумний будинок» на Arduino для побутівки

Далі справа техніки – написати під Ардуїно цикл опитування параметрів та вивести їх для початку до монітора порту. Час одного циклу вийшов близько секунди. Однак у кінцевому варіанті проекту з логуванням даних на флешку та опитуванням температурних датчиків цей час зріс до 4-х секунд. Це мене вже зовсім не влаштовувало і довелося поринути в оптимізацію. У результаті я знову досяг секундного інтервалу без втрати функціональності. До речі, скетч я переписував з нуля двічі чи тричі, поки не знайшов правильну архітектуру та економні алгоритми.

Програмна реалізація обміну з лічильником

Код видертий з контексту мого великого робочого скетчу. Скомпільований, але у такому вигляді я його ніколи не запускав. Наводжу лише для прикладу, а не як готову робочу програму. Хоча теоретично все має працювати саме у такому вигляді.

Код написаний для двох типів лічильників одночасно, однофазного МТ-124 та трифазного МТ-324. Вибір типу лічильника відбувається в програмі автоматично за словом, що ініціалізує команди.

Код наводжу як є, без чудових і додаткових коментарів крім тих, що писав сам для себе. І так, я не програміст, і навіть не навчаюсь на нього, тому штовхати мене за якість коду не слід, але повчити як треба кодувати можна: EnergyMeterNeva.ino

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

У рідкісні моменти, коли електроживлення на дачі відключається і лічильник стає недоступним, поточний чася отримую від внутрішнього таймера Ардуїни. Коли електролічильник працює та його дані доступні, внутрішній таймер Ардуїни я перепрописую значенням зі лічильника на кожному витку loop. Коли лічильник відвалюється – поточний час продовжує цокати на таймері Ардуїни.

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

Температурні датчики

Тест температурних датчиків за допомогою скетчу-прикладу я вже проводив окремо раніше. Тепер залишалося лише вбудувати їхнє опитування в основний проект. Це не склало жодних труднощів. Усі дев'ять наявних у мене датчиків працювали без проблем при паралельному включенні по 1-Wire. Розкид показань між ними становив близько 0.5 градусів, що показує безглуздість використання їх на максимальній точності 0.0625 градусів. Датчики для тесту зібрав у пачку і загорнув у кілька шарів пухирчастого поліетилену. Для більшої точності пачку розташував вертикально і чекав на добу для повного вирівнювання температури. Покази всіх датчиків не виявилися однаковими.

Однак загрубувати точність конвертації температури самих датчиків я теж не став. Простіше округлити свідчення програмно, а вигоди за часом опитування я не отримав би, оскільки придумав такий алгоритм, при якому час очікування конвертації не є порожнім марним delay(750). Звичайна логіка роботи з датчиками така - спочатку подача команди на запуск конвертації температури, потім очікування закінчення конвертації (ті самі 750 мс мінімум) і вже потім вичитування даних. Я зробив все навпаки, що дозволило мені виключити порожній інтервал очікування – спочатку вичитую дані із датчиків, а потім одразу запускаю конвертацію. І поки решта коду в циклі LOOP відпрацює, дані якраз встигають підготуватися для вичитування на наступному витку. За часом дані з датчиків я отримую в цьому випадку трохи пізніше - цикл LOOP займає приблизно 1-1.5 секунд, але це зовсім не критично.

Іноді з усіх датчиків я отримував дані "85" або "0". Що це за косяк, я так і не зрозумів, тому зробив у коді перевірку та виключив попадання таких даних у результат. Ще виявився одвірок у одного з датчиків - він не тримав налаштування при відключенні живлення. Чи то флешка його внутрішня дохла, чи ще що. Тому в сетапе прописав налаштування датчиків, і тепер за включенням живлення (якщо воно таки пропадає) всі датчики налаштовані гаранітрованно.

Адреси конкретних датчиків я отримав за допомогою скетча-прикладу, десь наритого і трохи модифікованого мною: DS18x20_Temperature.ino

Після цього адреси я забив константами в масив і в основній програмі звертався до датчиків вже відразу за їх адресами: TempSensors_DS18B20.ino

Для правильної роботи датчиків на шині 1-Wire потрібно встановити підтяжковий резистор 4.7 кОм між лінією даних та живленням. Мені було зручно припаяти між пінами клемної колодки SMD-резистор, але знайшов я у себе в відповідному корпусі тільки 5.1 ком, його і поставив (він видно на фотці в розділі про складання на нижній стороні плати). Працює все гаразд.

Датчики температури у мене підключені електрично паралельно на одній довгій лінії (+5, gnd та data), всі 9 штук, але хитро. Фізично кабелі кручений пари підключені зіркою для зручності розведення датчиків по об'єкту. У кожному плечі кабелю я використовую дві пари. Одна пара – це живлення датчика. Друга пара - це лінія даних, яка йде по одному дроту до датчика і повертається від нього назад по другому дроту. Таким чином, виходить можливим розвести кабелі зіркою від щитка, але електрично це зірка тільки по живленню, а за даними це одна лінія. Такий варіант підключення виявився більш надійним у роботі на довгих лініях, при простому паралельному підключеннібуло багато збоїв під час читання даних. Ось ескіз такої схеми:

Напівметрові хвости трипровідних кабелів самих датчиків я не вкорочував, підключив їх як були, виявилося не критично.

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

Загальна довжина кручений пари по побутівці склала приблизно 25 метрів. Шматки для зовнішніх датчиків - 5 і 10 метрів, і 10-метровий внутрішній шматок з відгалуженнями на сім датчиків. Усе працює майже ідеально. Лише зрідка проскакують прочерки замість значень температури. Це означає, що дані з конкретного датчика були некоректно прочитані. Але трапляється це настільки рідко (помічаю раз на місяць може), що не завдає жодних проблем.

Віддалений доступ

Для віддаленого доступу до Ардуїно купили Ethernet shield. За наявності вбудованої бібліотеки робота з ним, як і з рештою в Ардуїно, виявилася досить простою.

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

Також сторінка має набір контролів для управління виконавчими механізмами, підключеними до Ардуїно – силовими реле, які комутують навантаження – електрообігрівачі та освітлення.

З дизайном веб-сторінки я не парився, тим більше, що був необхідний мінімальний обсяг текстових даних для її більш швидкого завантаження, тому найпримітивніший html і все:

У html-код замість даних вбудував теги, які на льоту підмінюються реальними даними при генерації сторінки сервером. При автооновленні даних на запит яваскрипта вони передаються в браузер вже безпосередньо з мікроконтролера у форматі JSON.

Код сторінки лежить у файлі на картці пам'яті і завантажується з неї під час звернення до сервера. Для більш швидкої та зручної модифікації коду сторінки я вбудував механізм її оновлення до неї саму. Внизу, під блоком основних контролів, є текстове поле і кнопка Відправити. У текстове поле копіюю новий html-код, тисну кнопку, після чого java-скрипт здійснює відправку даних на веб-сервер контролера, який зберігає його спочатку в буферний файл. Якщо передача відбулася успішно, основний файл підміняється буферним, сторінка автоматично оновлюється. Все. Зміни ухвалено.

Наводжу фрагменти коду моєї реалізації цього механізму.
У html-сторінці вбудовуємо форму:



CONTROL.HTM:


Йде відправка сторінки:
За кнопкою «Надіслати» запускається наступний ява-скрипт: send_HTM.js

У скетчі у функції обробки запитів веб-сервера за префіксами у запиті "CONTROL.HTM" (старт відправлення файлу), "htmlineN" (надсилка рядка №) та "END_CONTROL.HTM" (кінець відправлення файлу) визначаємо подальші дії:

File acceptHtmFile; ................ if (fl_accept_htm) // префікс "CONTROL.HTM" ( SD.remove(CTRL_HTM); acceptHtmFile = SD.open(CTRL_HTM, FILE_WRITE); // відкриваємо файл на запис if (!acceptHtmFile) // якщо файл відкрити не вдалося - нічого не пишемо (#ifdef DEBUG_SD Serial.println("SD-card not found"); #endif client.print("FAIL"); client.stop (); ) else client.print("OK_OPEN_FILE"); client.print("FAIL"); acceptHtmMode = false; cntHtmModeIteration = 0; ) cntHtmModeIteration = 0; SD.remove(CONTROL_HTM); acceptHtmFile.close(); File htmlFile = SD.open(CONTROL_HTM, FILE_WRITE); ;< acceptHtmFile.size(); i++) { digitalWrite(PIN_WATCHDOG_DONE, 1); htmlFile.write(acceptHtmFile.read()); digitalWrite(PIN_WATCHDOG_DONE, 0); } acceptHtmFile.close(); htmlFile.close(); client.print("OK_CLOSE_FILE"); acceptHtmMode = false; cntHtmModeIteration = 0; break; }
Дефайни CONTROL_HTM та CTRL_HTM тут це імена html-файлів. Перший – основний файл, другий – буферний. У масиві чарів tag лежить текст прийнятого рядка, виділений із запиту. Логіка така: при прийомі даних вони пишуться в буферний файл, після прийому буферний файл переписується в основний. Як просто перейменувати файли я так і не зміг зрозуміти, у стандартній бібліотеці SD такої функції немає, тому тупе посимвольне копіювання, що забирає купу часу.

Було б зручним код веб-сторінки управління зберігати не на карті пам'яті контролера, а на клієнтській машині, або завантажувати з якогось зовнішнього ресурсу. Але заборона на кросдоменні запити не дозволяє це зробити. Яваскрипти можуть надсилати свої запити тільки тій півночі, з якої були завантажені самі. Тіла яваскриптів при цьому можуть підвантажуватися звідки завгодно, важливо лише звідки була завантажена сторінка з їх викликом.

Логування даних

Ethernet shield має на борту слот картки пам'яті micro-SD. Саме через його наявність я і вирішив писати дані до лог-файлів. p align="justify"> Для роботи з картою пам'яті також є вбудована бібліотека, і керувати записом-читанням файлів з нею взагалі елементарно.

Для економії обсягу даних алгоритму логування я побудував так, що запис відбувається тільки тоді, коли дані змінюються більш ніж на заданий поріг. Для температури 0.1°, для напруги 0.2В. В один файл пишуться дані за одну добу. У нуль годинника створюється новий файл. Формат зберігання я вибрав звичайний текстовий з роздільниками, щоб можна було швидко контролювати вміст файлів при налагодженні, і була б проста можливість завантаження в Excel.

Конструктивні обмеження не дозволяють зручно вставляти-виймати карту пам'яті, тому я використовував карту великого об'єму. За моїми розрахунками, вона буде заповнюватися протягом декількох років, після чого потрібно буде розібрати корпус, вийняти картку пам'яті та очистити її.

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

Графіки

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

Наприклад наведу свій яваскрипт малювання графіків. Сам по собі він марний, тому що працює тільки в сукупності і з веб-сервером, і з html-сторінкою, і, можливо, зав'язаний на інші скрипти (справа була давно, всіх деталей вже не пам'ятаю). Але налаштування зовнішнього вигляду моїх графіків міститься саме в ньому та почерпнути їх звідти можна: get_log.js

Великою перевагою бібліотеки amchart є те, що вона вміє малювати правильні графіки за «рваними» даними. Як я вже згадував вище, в лог я зберігаю дані тільки за їх зміни. Тобто це відбувається асинхронно та хаотично. Нових даних може бути кілька хвилин, та був за кілька секунд вони зміняться кілька разів. Відповідно записи у лозі йдуть з довільними інтервалами часу. Amchart при малюванні враховує це самостійно, я не маю необхідності інтерполювати дані перед малюванням. Я просто надсилаю масив даних як є, і бачу красивий рівномірний у часі графік.

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

Правильним рішенням було б організувати окремий сервер зберігання та візуалізації даних, куди з Ардуїни в реальному часі дані капали б трохи і складувалися в БД, і звідки б вони могли швидко бути віддані користувачеві в браузер для візуалізації.

Зараз графіки виглядають так (на прикладі дня, коли у побутівці нікого немає і, відповідно, немає жодного енергоспоживання). Коли виникають дані струму, масштаб автоматично встановлюється так, щоб все гарно влазило, і на вертикальної осівиникають і значення рівнів струму:

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

Повний комплект вихідних частин проекту не наводжу навмисно з кількох причин:

  • Його не можна запустити як є в будь-якій іншій мережі, крім моєї, тому що я не намагався зробити проект портабельним, і він жорстко зав'язаний на мої адреси та мою топологію мережі.
  • Я впевнений, що загальна ідеологія проекту страждає на масу різноманітних проблем, оскільки це моя перша спроба в тій галузі, в якій я розуміюся погано. Тому не пропоную нікому весь проект до повторення саме у такому вигляді. Я поділився лише тими моментами, в яких більш-менш упевнений.
  • Проект робився давно і довго, і я вже ніколи не згадаю всіх деталей і не зможу пояснити низку рішень. Обсяг скетчу дуже великий (за моїми мірками, близько 2 тис. рядків), різноманітних обслуговуючих ява-скриптів більше десятка, принципову схемузаліза я не робив. Тобто не зможу допомогти консультативно з більшості питань.
  • Складання

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

    І відразу ж вирішив, що цей пристрій я хочу розмістити всередині електрощитка. Там і харчування, і лічильник, і взагалі це зручно.

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

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

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

    Для монтажу накупив купу всіляких стійок, гвинтиків, шайб і гайок. Перше прикидне складання:

    Для підключення проводів до верхніх контактів довелося використовувати загнуті штирі, інакше не влазило в корпус:

    Ізолювальні шайби місцями доводилося підрізати:

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

    Для одиночної релюшки не вистачило точок опори, тому повисла лише на двох точках:

    Прикидне складання разом з клемними колодками:

    Потім виріб почав поступово обростати проводами. Плата була використана тільки для розведення живлення та для підключень до клемним колодкам. Для сигнальних зв'язків використовував провід МС-16 (мені він більше подобається), для силових він не проходив за напругою (до 100 В), тому МГТФ:

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

    У результаті вийшла ось така бородатий начинка:

    А ось і хустка з мікросхемкою сторожового таймера, дала притулок в надрах мого творіння, прямо над перетворювачем рівнів RS-485 - TTL:

    Вся конструкція розбірна, все можна зняти, від'єднати та замінити без паяння, крім хустки з вотчдогом, вона припаяна до пін роз'єму, одягненого на ряд IO-портів Ардуїни.

    У коробочці:

    Отвори під роз'єм Ардуїни випилив у пластиковій стінці корпусу. Спочатку зробив отвори точно за розмірами роз'ємів, але складання в корпус потрібно заводити по діагноналі (інакше просто ніяк) і роз'єми не проходили, довелося розточити трохи:

    Увімкнення готового виробуна столі, все запрацювало відразу:

    на лицьову панельвивів:

    • Чотири червоні світлодіоди - індикація навантаження;
    • Два зелені - наявність зв'язку з лічильником і з VPN-сервером;
    • Два жовті - запасні;
    • Один жовтий – індикація перезавантаження роутера;
    • Один червоний – харчування;
    • І кнопочка скидання.
    Для отримання 5-вольт з 220-ти я використовував динреечный блок живлення з підстроюванням вихідного рівня, живлення подано безпосередньо на мікроконтролер, минаючи вхідний перетворювач з 7-12 в 5 вольт. Це було зручно з кількох причин. По-перше, потужності вбудованого перетворювача рано чи пізно стало не вистачати, струм там обмежений. По-друге, живити реле все одно потрібно було 5-ма вольтами. По-третє, у щитку зручний динрейковий форм-фактор з погляду монтажу. Тому ось:

    Випробування

    На столі все було перевірено, все працювало як треба, настав час інсталювати контролер у щиток і перевірити його в бойовому режимі.

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

    Як можна помітити на фотці вище, досі я намагався керувати перезавантаженням роутера за допомогою «розумної» розетки Senseit. Однак цей девайс шаленою вартістю 5 тис (на 2016 рік) виявився на диво глючним і примхливим. За рік використання неодноразово змушував мене незаплановано приїжджати на дачу в неурочний час, щоб вручну вивести це чудо інженерної та маркетингової думки з глибокого дауна в частині GSM-зв'язку. З переходом на свій Ардуїно-контролер, який виявився не на приклад надійнішим, я з полегшенням кинув це «професійне» барахло в гарній коробочці в ящик, і забув про нього.

    Тест пройшов успішно, збоїв не було, і можна було розпочати остаточну інсталяцію в штатне місце:

    Так-так, це щиток ABB TwinLine 800x300x225 IP55, вартістю 25 тис. руб. без начинки (і начинка ще 15 тис. приблизно). І так, він встановлений у побутівці 6х2. У всіх свої таргани. Так, збирав усю електрику сам. І побутівку будував теж, так. Ні, я не електрик. І не будівельник.

    У глибині щитка я розташував невелике джерело безперебійного живлення Powercom WOW 300, он там горить його зелений світлодіод, а ліворуч і вище - його вилка вхідного живлення:

    Його вистачає на ~40 хвилин автономної роботи Ардуїно-девайса, роутера з USB-модемом та вайфаєм, та Full HD IP-камери зовнішнього спостереження.

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

    Треба сказати, що маленьким синім китайським релюшечкам я б ніколи не довірив комутацію потужного навантаження, незважаючи на те, що начебто дозволяють це робити параметри цих релюшок. Тому відразу ж було закладено використання нормальних модульних контакторів Legrand кат. № 412501 з можливістю ручного управління. Тобто релюшки усередині корпусу контролера керують контакторами, а контактори вже керують навантаженням. Це надійно. А ось харчування роутера і камери здійснюється тільки через цю маленьку синю китайську релюшку, струм там невеликий, тому можна.

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

    Думав уже, що все пропало. Навіть замовив твердотілі реле, але вони, сволоти, більше за висотою, і в мою конструкцію вже не помістилися б. Але потім подумав, що може бути все ж таки перешкоду можна придушити. Знову погуглил, знайшов спеціальні перешкододавлюючі конденсатори (т.зв. конденсатори типу X). Просто підключив їх паралельно керуючої обмотці контакторів, і диво! Зависання зникли повністю. За ось уже рік експлуатації жодного випадку не зареєстровано:

    А ось таким чином можна зазирнути всередину коробки:

    Та й закінчений вигляд щитка з пластроном (заглушок ось у комплекті не дали):

    Для бігу та перепрошивки кабель USB підключений до контролера і зберігається всередині щитка за закритими дверцятами (ізернет на цій фотці тимчасово не підключений):

    Система працює майже рік, пережила морози до 20 градусів без проблем.

    Загалом я задоволений результатом. Однак для більш-менш функціональних завдань Ардуїно явно слабкий. Я вже не раз стикався з вичерпуванням пам'яті і доводилося кроїти та оптимізувати. Та й швидкість роботи, особливо з карткою пам'яті, мене зовсім не влаштовує. Тому майбутні реалізації подібних виробів, якщо такі будуть потрібні, я хотів би ґрунтувати на чомусь потужнішому. Колеги піарять мені Raspberry Pi, добрий варіант, думаю. Додати теги

    Те, що вийшло в результаті, можна назвати, мабуть, найдешевшим рішенням для створення Розумного дому, яке вміє:

    • Керувати освітленням та силовими пристроями (Реле, димери DMX-512 та Modbus RTU)
    • Керувати теплими підлогами(як термодатчики використовуються півтора десятка дешевих DS18B20, розлучених по квартирі)
    • Керувати засувками вентиляції/кондиціонера
    • Керувати саморобною системоюприпливної вентиляції.
    • Багато чого такого, про що я спочатку не замислювався, просто через те, що контролер вийшов абсолютно відкритим, що гнучко конфігурується, і прекрасно доповнює Openhab+Mosquitto+NodeRed.
    На вхід контролера підключаються звичайні вимикачі, кнопки, контактні датчики, датчики протікання та ін. які можуть керувати як локальними навантаженнями так і пристроями, підключеними до інших контролерів або до всього, що розуміє протокол MQTT. У мене, наприклад, підключено геркон, встановлений у коробці вхідних дверей. Коли закриваю замок на три обороти – вимикаються світло, тепла підлога, бойлери, AV ресивер. Коли повертаюся – стан цих приладів відновлюється як було до відходу.

    Serial CLI під час створення нового контролера треба прописати в NVRAM унікальну MAC адресу. Саме MAC є ключем, яким спочатку завантажується конфігурація з http сервера.

    Як керуючий ПЗ я взяв Openhab 2, що має весь потрібний мені функціонал, плюс, мобільний додаток, плюс «Хмара» - роль якого, щоправда, тільки в тому, щоб надавати доступ до домашньої інфраструктури ззовні, не прокидаючи портів на роутері і не володіючи фіксованим IP. Також Openhab має інтеграцію з HomeKit від Apple, що дозволяє керувати пристроями будинку з iPhone, взагалі без встановлення аплікації. (Можливість цікава, але користуюся, переважно, «рідним» додатком).

    Трохи скріншотів Openhab



    Наявність у проекті квартири великої кількості світлодіодного освітленнятакож вимагало якогось розумного управління.

    Подробиці по LED освітленню

    Рішення, виявлені на ринку, були або закритими «мовами в собі», або коштували неадекватних грошей, підтримуючи при цьому кілька каналів. Часто, виробники обмежувалися трьома каналами (RGB), хоча варіант RGBW дозволяє використовувати світлодіонні стрічки як основне освітлення, а не просто для кольорового підсвічування.

    Подумавши, я замовив на АliExpress пару плат, кожна з яких може керувати 30 каналами LED з номінальним струмом до 2А на канал.

    Для того, щоб збільшити максимальну потужністьодного каналу, я перейшов зі світлодіодних стрічок на 12В на 24В стрічки. При цьому повноцінно висвітлити кімнату близько 16-18 кв. м виявилося можливим за допомогою 4-х ключів. Великі за площею приміщення довелося зонувати - у вітальні підключив незалежно 4 стрічки по 5 м, задіявши при цьому 16 каналів.

    Для синхронного керування всією кімнатою довелося придумати тип каналу «група»

    Ось як виглядає опис вітальні в конфізі JSON:

    "kuh":], "kuhwin":, "kuhline":, "kuhfre":, "kuhwork":,
    Перший елемент масиву – тип каналу, другий – параметр каналу, який може бути масивом.

    Для елемента типу 7 (група) - аргументом є масив елементів, що входять до групи.
    Рекурсія, звісно ж, підтримується.

    Для елемента типу 1 (стрічка RGBW) – аргумент – базова DMX адреса каналу.

    Зі стандартною бібліотекою EasyDMX плати не запрацювали відразу. Як виявилося, китайський LED контролер не перетравлював 2ms затримку між кадрами DMX (interframe delay). Нескладна модифікація коду бібліотеки (скорочення циклу вдвічі) допомогла.

    Деталі кондиціювання

    На жаль, не вдалося знайти приводів повітряних заслінокз ШІМ або якимось цифровим входом, тому на тому ж AliExpress були придбані 4 перетворювачі ШІМ стандартний аналоговий сигнал 0..10В.

    На жаль, на Aliexpress цих пристроїв вже не бачу, але на e-bay будь ласка

    Перетворювачі чудово заробили відразу, довелося лише перепрограмувати таймер ШІМ виходів для того, щоб задати відповідну частоту.

    Нижче приклад перепрограмування таймерів 3 і 4 (відповідають за pin 2, 3, 5, 6, 7, 8 Arduino Mega на частоту 4000Гц).

    PinMode(iaddr,OUTPUT); //timer 0 for pin 13 and 4 //timer 1 for pin 12 and 11 //timer 2 for pin 10 and 9 //timer 3 for pin 5 and 3 and 2 //timer 4 for pin 8 and 7 and 6 int tval = 7; // 111 in binary - used as an eraser TCCR4B &= ~tval; // налаштувати три біти в TCCR2B to 0 TCCR3B &= ~tval; tval = 2; // Prescaler = 2 ---> PWM frequency is 4000 Hz TCCR4B | = tval; TCCR3B | = tval; analogWrite(iaddr,k=map(Value,0,100,0,255));


    Далі, я почав шукати WiFi контролери теплих підлог. Знайшов, в цілому, непоганий пристрій вартістю близько 6 тис руб від Теплолюксу, але він мав деякі істотні для мене недоліки.

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

    Вийшло таке:

    • Все управління - локально на контролері та незалежно від домашньої ІТ інфраструктури
    • Використовуються вимірювання з 1-wire термодатчиками. Якщо датчик тривалий час не може бути опитаний - нагрівач вимикається.
    • Через MQTT можна ввімкнути/вимкнути теплу підлогу та задати її температуру. Відповідно, підлоги керовані через інтерфейси та мобільний додаток Openhab
    • Я не став реалізовувати хитрі сценарії та розклади на контролері. За бажанням, це легко реалізується правилами Openhab або Node-Red. Я обмежився лише відключенням пристроїв, коли люди покидають будинок.
    Ось приклад конфіга для однієї теплої статі:

    "ow":( "2807FFD503000036":("emit":"t_bath1","item":"h_bath1") ), "items":( "h_bath1":, ),
    Дані при опитуванні термометра OneWire із зазначеною адресою передаються на шину MQTT в топік t_bath1, а також, всередині контролера, об'єкту h_bath, що має тип №5 (термостат), реле підключено до pin#24 контролера, уставка - 33 градуси (можна коригувати по M )


    Входи пристрою

    У конфізі для кожного входу можна встановити як передачу команди локальному об'єкту так і видачу команди в MQTT топік. Причому окремо як на умовне «натискання» кнопки так і на «відпускання».

    Приклади:

    "in":( "41":("emit":"/myhome/in/all","scmd":"HALT","rcmd":"REST"), "38":("item":" spots_en"), "37":("emit":"/myhome/in/light","scmd":"ON","rcmd":"OFF"), "40":("emit":"/ myhome/in/gstall","scmd":"TOGGLE","rcmd":"TOGGLE"), "35":("emit":"/myhome/s_out/water_leak") )
    Pin 41: Геркон на замку вхідних дверей - при замиканні - видаємо в топік /myhome/in/all команду HALT, при відмиканні - команду REST.

    У мене це призводить до повного «засинання» та «прокидання» вдома. До слова - команди не входять до стандартний набір OpenHab, але вийшли вкрай зручні – HALT – вимикає пристрій, REST – відновлює параметри пристрою до останнього значення (колір, яскравість, температура), але тільки для того пристрою, який було вимкнено командою HALT а не OFF. Це дозволяє не вмикати те, що було вимкнено на момент залишення будинку.

    Pin 38: Просто звичайний вимикач світла. При замиканні – видає (за замовчуванням) команду ON, при розмиканні – команду OFF. Ці значення передаються об'єкту spots_en. Зрозуміло, що стан об'єкта можна змінити з мобільного додатка. У цьому випадку, вимикач залишається, наприклад, у включеному положенні, але світло вимкнене.

    Для любителів класичних прохідних вимикачів, підійде синтаксис Pin 40: І при включенні і при вимкненні видається команда TOGGLE (теж, до речі, нова, щодо OpenHab), що змінює положення Увімкнути-Вимкнути пристрої (в даному прикладі, лампа управляється не локально, а через MQTT іншим контролером).

    Якщо це не перекидний вимикач, а кнопка - досить просто скоригувати «rcmd»:"" - при цьому команда на перемикання видаватиметься тільки при натисканні.


    А, та й майже забув описати DMX-IN - вхід, заради якого, можна сказати, я і починав цю розробку.

    На ринку багато вдалих з дизайнерської точки зору і, в цілому, ергономічних DMX контролерів світлодіодних стрічок.

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

    Поки що нічого не змінюється - пристрої нормально керуються віддалено. Варто сенсорної панелі змінити значення яскравості каналів – ці зміни транслюються на DMX виходи.

    Як не дивно, цей милиця вийшов цілком ергономічним. Хоча, як показав досвід, ми все рідше використовуємо сенсорну панель та все частіше смартфони для керування пристроями.

    Висновок

    На жаль, в одній статті неможливо описати всі нюанси, закладені на розробку.
    Наприклад, зовсім за кадром залишилася тема підключення Modbus пристроїв, їх пулінг та синхронізація локального стану пристрою із системою Розумного Дому, інтеграція із простою припливною установкою. Ну і, можливо, порівняння з існуючими системами близьких класів, такими, як MegaD-328, AMS і, навіть, WirenBoard. Можливо, якщо буде зацікавленість – продовжу.

    Також поки за кадром те, що з використанням NodeRed вдалося проінтегрувати систему з Telegram. Поки що працює для отримання оповіщень, але можна створити повноцінний Bot.

    Щодо проекту LightHub - за всієї дешевизни, контролери виявилися цілком робочим рішенням. Чесно кажучи, я сам не вірив, що на основі Arduino можна створити стабільну систему, але, на мою думку, це вдалося.

    Звичайно, треба багато ще доробити: повністю піти від хардкода (залишилося зовсім трохи), трохи і місцями почистити та рефакторити код, ретельно документувати проект, розвести друковану плату (зараз інтерфейсні Шилди спаяні просто на основі макетних платі містять три MAX-485 – (DMX-IN, DMX-OUT, Modbus) та 1-Wire міст) – і це стане, по суті, дуже бюджетним готовим рішенням.

    Warning: Нагадую, що проект поки що на рівні макетних плат. Відкриваючи наступний спойлер, ви можете завдати шкоди своїм естетичним почуттям.

    Небагато картинок


    Перший контролер, керуючий LED (60 каналів DMX-512), Modbus (димери, приплив), заслінки ветиляції;


    Це DMX-512 декодер, який зручно розміщувати там, де світлодіодні стрічки надходять до трансформаторів. У мене - під фальшстелею в коморі.

    А це другий контролер, що обслуговує 1-wire, вимикачі/датчики і релейний модуль. (Сам релейний модуль розмістився прямо в розпаювальній коробці, де йому і місце разом з трьома фазами. Сусідство 380В і слаботочки я викоренив скрізь, де можливо після однієї невдалої події)

    Зрозуміло, що треба розширювати функціонал. Як мінімум, у напрямку бездротових датчиків/пристроїв. (Хоча, наприклад, ZWave і так зараз можна використовувати через стандартні біндинги Openhab).

    Можливість підключення, наприклад, бюджетного NooLight, мабуть, непогана ідея. Можливо, подумаю над міграцією на ESP-8266 для розширення RAM, хоча догляд на WiFi з проводового підключення до LAN мені не подобається з точки зору надійності. Та й ESP не має таку багату переферію як Arduino Mega. Ще планую зробити облік електроенергії через датчики струму та підключення Rotary Encoder на вхід.

    Також, корисно було б зробити конфігурування та запуск контролера більше User Friendly (візуальні конфігуратори та ін.). При цьому свідомо не хочеться перетворювати контролер на вебсервер з файлами/картинками, AJAX тощо. На мій погляд, це вже має бути прерогативою сервера. Хоча б на основі Raspberry.

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

    UPDATE: Після публікації статті, об'єднавши зусилля разом з одним із мешканців Хабра та намалювавши принципову схему LighthHub Shield, розпочали розведення друкованої плати, з урахуванням всього осмисленого досвіду та коментарів
    • Плата буде сумісна як з Arduino Mega (5v), так і з Arduino DUE (ARM 3,3В)
    • Вбудований інтерфейс Ethernet на базі Wiznet5500
    • 8 опторазв'язаних дискретних входів, 8 дискретних входів/виходів із захистом за напругою/струмом
    • 8 аналогових входів із захистом за напругою/струмом. Надалі, припускаю використовувати аналогові входи для контролю споживаної потужності (датчики струму) та для того, щоб підключати зовнішні потенціометри (димери)
    • 8 ШИМ виходів, 4 з них з потужними вихідними ключами (до 500 мА/50В) + 4 дискретні потужні виходи. Дозволять локально підключити до контролера, наприклад, кілька пускачів або навіть не дуже довгу RGBW LED стрічку.
    • Роз'єм формату UEXT , який дозволить, згодом, підключити до контролера сумісну переферію - наприклад, додаткові радіомодулі, для з'єднання з бездротовими пристроями.
    • Інші входи/виходи будуть виведені без захисту на роз'єми RJ45 для підключення локальних пристроїв(Релейні плати, ЦАП та ін)
    • 1-wire
    • dmx-512
    • dmx
    • Node-Red
    • modbus
    • iot
    Додати теги

    Світ не стоїть на місці. Техніка проникає у життя людей. З кожним днем ​​все складніше уявити повсякденність без електроніки. І якщо раніше все це було доступно лише заможним людям, то тепер техніка знаходиться в кожному будинку і робить життя простіше та цікавіше.

    До речі, зараз будь-яка людина, володіючи базовими знаннями, може зібрати самостійно будь-яке пристосування, яке в майбутньому може стати корисним у повсякденному житті. Інтернет повний тематичних сайтів та форумів, фото та відео майстер-класів, порад та інструкцій. Ось так і створюються пристрої, які сприяють більш легкому та приємному життю. Якщо будинок чи квартира оснащена спеціальними датчиками, які зчитують ту чи іншу інформацію та виконують певні функціїТакий будинок можна назвати «розумним».

    «Розумний» будинок – що це?

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

    Насправді все, звичайно, не так чарівно і барвисто. Нинішні машини та комп'ютери ще не досягли такого рівня розвитку. Тому функції сучасного «розумного» будинку обмежені. Наприклад, датчики можуть контролювати:

    • Вмикання-вимикання світла.
    • Витрати енергії.
    • Температура.
    • Вологість у будинку.

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

    Технологія збирання

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

    Отже, як зробити свій будинок «розумним»? Що для цього потрібне? Для початку потрібно зайнятися закупівлею необхідних контролерів, які необхідно запрограмувати і налагодити. На перший погляд, все досить просто, але насправді можуть виникнути проблеми з експлуатацією самої системи, для складання та управління якої необхідні певні знання. Тому компанія Arduino постаралася максимально спростити свою систему, з якою може впоратися навіть дитина.

    Що таке система Arduino?

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

    Принцип роботи Arduino

    Як працює система Arduino? Дуже просто. Встановлені по всьому будинку або квартирі датчики зчитують інформацію про довкілля та передають усі дані на комп'ютер, який самостійно приймає рішення. Ця система може працювати на комп'ютері, ноутбуці, планшеті або навіть телефоні. Всі програми для ардуїно можна знайти в вільному доступі. Все "залізо" виробник робить максимально стандартизованим під системні роз'єми.

    Функції системи Arduino

    Система ардуїно для проекту «розумного дому» має виконувати такі функції:

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

    Переваги
    • Ціна.
    • Якість.
    • Зручність.
    • Простота монтажу та проекту в цілому.
    • Низька вартість у разі поломки або виходу з експлуатації окремих комплектуючих.
    • Доступність програмного забезпечення.

    Всім привіт! З вами знову Артем Лужецький та черговий матеріал у напрямку. Щоб зв'язати наші проекти з інтернетом можна використовувати десятки способів, але ми поки що зупинимося на модулі, про який я ще говорив ще в першій статті, ESP 8266. не може працювати з інтернетом. Звичайна плата без додатків та модулів не може передавати інформацію на відстані.

    Але за допомогою UART інтерфейсу на Arduino ми можемо отримувати інформацію, обробляти її та надсилати дані назад. За допомогою нього, UNO може працювати з Bluetooth та Wi-fi модулями, які вже дають нашій системі додаткові функції.

    Вихід в інтернет

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

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

    Ви можете дізнатися, що таке IP, TCP, HTTP, GET – запит в інтернеті, якщо вам надалі буде не зрозуміло.

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

    Передача даних від Ардуїно

    Спочатку ми змусимо нашу Ардуїну передавати дані на окремий сайт, який буде зображати дані, отримані з датчиків Ардуїно. Для цього чудово підійде сайт для інтернет речей – dweet.io

    Спробуємо передавати дані зміни температури нашої кімнати.

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

    На головній сторінці можна переглянути можливі варіанти роботи даного сайту

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

    Схема підключення

    Розберемо електричну схемупідключення esp 8266. Нам потрібно тільки піни Rx, Tx, Gnd та Vcc. Цей модуль живиться від 3,3 вольт.

    І загальну електричну схему, в якій нам знадобиться ардуїно, esp та термістор.

    Код проекту

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

  • ESP8266 wifi(Serial) - Підключаємо esp8266 через Serial з'єднання.
  • wifi.joinAP(a,b); - Підключення до wifi, де а – це назва точки доступу, а b – пароль до цієї точки доступу.
  • wifi.createTCP(a,b) - Відкриття TCP з'єднання, де "a" - DNC сайту (www.dweet.io), а "b" - мережевий порт (порт 80).
  • wifi.send(a,b) - надсилаємо дані, де "a" - дані в масиві (рядок с-стилю), а "b" - загальна кількість відправлених байтів.
  • wifi.releaseTCP() - Закриття TCP з'єднання.
  • #include "ESP8266.h" // для роботи з esp8266 #include // щоб додати більше пінів UART #include // щоб вирахувати логарифм #define SSID "Arduino" // ім'я вашого wi-fi #define PASSWORD "12345678" // пароль вашого wi-fi #define Thermistor_PIN A0 // пін підключення термістора SoftwareSerial mySerial (2, 3); // піни підключення UART ESP8266 wifi (mySerial); // кажемо esp8266, що вона працюватиме через піни UART String name = "MyEyse"; // ваш ключ від сайту dweet.io void setup() ( Serial.begin(9600); // відкриваємо serial з'єднання if (wifi.joinAP(SSID, PASSWORD))) ( // якщо ми підключилися до нашої мережі Serial.println( "https://dweet.io/follow/" + name); // пишемо в моніторі порту адресу сайту) else (Serial.println("Wi-Fi connection error"); // у випадку, якщо ми не підключимося до мережі, нам видадуть помилку ) ) void loop() ( float volt_temp = 1023.0 / analogRead(Thermistor_PIN) - 1.0; (wifi.createTCP("www.dweet.io", 80)) ( // якщо нам вдалося створити TCP з'єднання String data = "GET /dweet/for/" + name + "?"; // створюємо змінну data у вигляді рядка (заповнюємо GET-запит) data += "temperatur_C=" + String(temperatur) + "HTTP/1.1\r\n"; data += "Host: dweet.io\r\n\r"; // закриваємо GET-запит у рядку wifi.send(data.c_str(), data.length()); // відправляємо дані в масиві (рядок з-стилю) та загальна кількість байтів wifi.releaseTCP(); // закриваємо TCP з'єднання ) else ( Serial.println("create TCP error"); // у разі, якщо ми не створили TCP з'єднання, нам видадуть помилку ) delay(1000); // Чекаємо на секунду (dweet.io обробляє дані 1 секунду, немає сенсу відправляти дані раніше) ) Підсумковий результат

    Якщо код ви записали правильно, з правильним паролем та ім'ям від вашого wifi, який справно працює, то монітор порту буде відправлено посилання, яке необхідно вставити в адресний рядок браузера. Зображення має виглядати так

    А тепер ви можете підключити ардуїно до джерела живлення та прибрати провід підключення ардуїно – комп'ютер. І дізнаватись температуру у вашому будинку, перебуваючи на іншому кінці міста. Все залежить лише від вашої фантазії.

    Наступного разу спробуємо розібрати ще один проект, який допоможе розкрити всі можливості інтернет модуля. Надалі спробуємо створити свій сервер та сайт, а також поговоримо про з'єднання із соцмережами. Збільшити можливості зробити ваш будинок розумним. Успіхів!

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

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

    Принцип роботи розумного будинку на базі Ардуїно

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

    Схема управління світлом за допомогою «Розумного дому»

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

    Створений на Arduino розумний будинок, керується через Web-інтерфейс, що дозволить віддалено контролювати роботу системи з будь-якого пристрою, підключеного до інтернету. Також підтримує Arduino GSMуправління за допомогою звичайних мобільних телефонівабо смартфонів.

    Які датчики та контролери можна підключати і як вони працюють

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

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

    Датчики та компоненти «Розумного дому» на базі Arduino

    Через шилди до контролера можна підключити різні за функціональністю датчики.

  • Сенсори, які контролюють параметри та характеристики навколишнього середовища всередині або поза приміщенням. Це можуть бути вологості, тиску, рівня освітленості наявності опадів.
  • Сенсори, які контролюють просторову орієнтацію об'єкта, до якого вони прикріплені. До них належать гіроскопи, компаси, акселерометри.
  • Сенсори, які реєструють наявність рухомих об'єктів. До них належать датчики руху, теплові датчики УЗ-сенсори.
  • Сенсори контролю аварійних ситуацій. До них належать пристрої, які дозволяють контролювати цілісність інженерних комунікацій у будинку. Датчики виявляють витік газу, відключення електрики, .
  • Багато з цих пристроїв входять до набору Ардуїно розумний будинок, пропонований виробниками для тих, хто зібрався самостійно автоматизувати свій будинок.

    Процес складання розумного будинку

    Створення розумного будинку на базі Arduino чимось схоже на роботу з конструктором Лего. Воно передбачає підключення потрібних датчиківдо мікропроцесорного контролера, програмування створеної системи та підключення її до засобів управління через глобальну мережу інтернет. Розглянемо детальніше кожен із цих процесів.

    Підключення всієї периферії

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

    Прикріплення датчика руху «Розумного будинку»

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

    Програмування та налагодження

    Щоб розумний будинок на Ардуїно своїми руками запрограмувати, потрібно знати мову програмування С++ або використовувати спеціальну оболонку Arduino IDE. Перший варіант підходить для просунутих користувачів, які знають та можуть програмувати цією мовою. Другий варіант підійдедля тих, хто робить перші кроки в програмуванні алгоритмів для пристроїв, створених на платформі Ардуїно.

    Оболонка Arduino IDE є спрощеною версією С++. Вона має вбудований текстовий редактор, менеджер проектів, передпроцесор, компілятор та інструменти, потрібні для того, щоб залити програмний код у мікропроцесор плати Arduino.

    Версії Arduino IDE доступні користувачам для різних операційних систем. Це може бути Windows, Mac OS X чи Linux.

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

    Щоб система розумний будинок завжди була під контролем, існують різні програми, які можна встановити на свій смартфон. Наприклад, можна завантажити та налаштувати програму SmartHome.apk. З його допомогою можна будь-коли отримувати дані від контролера розумного будинку, а також виконувати управління його функціями.

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

    Спілкування з Інтернетом

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

    Спочатку потрібно зайти в розділ налаштувань роутера та прописати в ньому IP-адресу для системи Arduino. Потім виконується відкривання порту 80.

    Якщо є необхідність у тому, щоб привласнити доменне ім'я адресі системи розумний будинок, можна скористатися можливостями сервісу https://www.noip.com. Після реєстрації на цій платформі слід скористатися функцією «Add host» та прописати там IP-адресу створеної системи розумного будинку. Після цього доступ можна буде отримувати, як за IP-адресою, так і доменне ім'я.

    Схема підключення «Розумного дому» на базі Arduino до інтернету

    Щоб керувати розгорнутим на Arduino розумнимбудинком можна було з будь-якого місця, де є інтернет, потрібно провести нескладне налаштування використовуваного браузера. Для цього в адресному рядку слід набрати наступний код «xxx.xxx.xxx.xxx/all».

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

    Висновок

    На сьогоднішній день існує багато готових Ардуїно проектів розумний будинок, які можна знайти в мережі інтернет. Також можна створити свій власний проект, який максимально підходитиме під конкретний об'єкт. Системи, побудовані на Ардуїно, відрізняються тією перевагою, що їх можна модернізувати і масштабувати.

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

    Відео: Розумний будинок на Arduino