OpenHAB і домашній контролер - робимо залізо

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

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

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

Отже, що потрібно реалізувати в першу чергу?

- вимірювання тиску; температури і вологості;

- контроль стану вікон та дверей, датчиків руху, захисту від пожежі та протікань;

- контроль доступу з використанням ключів IButton і RFID;

- контроль контактів та управління виконавчими механізмами через дискретні входи та виходи;

- контроль кількох виносних датчиків температури через інтерфейс 1-Wire;

- контроль додаткових датчиків, контактів та управління виконавчими механізмами через радіоканал.

Відмінно, приступимо до проектування апаратної частини.

Спробуємо реалізувати потрібні нам функції, використавши найпопулярніші датчики і модулі від Arduino, склавши все разом отримуємо ось таку структуру:

Короткий опис апаратної частини

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

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

Для контролю вуличної температури, температури води, радіаторів опалення і температури в приміщеннях використані датчики DS18B20 що підключаються до загальної 1-Wire шини.

Другий 1-Wire інтерфейс працює з ключами I-Button, він використовується у функціях взяття і зняття з охорони, управління електрозамком. Поряд з ним розташований вихід індикатора режиму охорони його можна підключити до світлодіоду розташованого на лузі зчитувача ключів.

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

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

Для безпосереднього зв'язку з мобільними пристроями призначений BLE (Bluetooth Low Energy) трансівер HM-11. Він дозволить інтегрувати в пристрій функції iBeacon від Apple а також Google Nearby або physical-web. Пізніше, в ході обговорення було вирішено передбачити можливість заміни Bluetooth модуля HM-11 на недорогий WiFi модуль на основі ESP8266, що має розширити варіанти застосування контролера, наприклад, бездротове підключення до провідного контролера або роутера або підключення WiFi датчиків і пристроїв.

З конструкцією розібралися, пора приступати до розробки плати.

Серед любителів так мало хороших монтажників, тому я не став створювати їм труднощі, вибрав досить великий розмір резисторів і конденсаторів - 0805, залишив пристойний зазор між елементами і зробив маркування компонентів шовкографією. Всі елементи розмістив на платі 68,6х53,3мм конструкція якої відповідає модулю розширення Arduino UNO.

Розроблений в PCAD прототип друкованої плати був відправлений в Резоніт для виготовлення дослідних зразків на терміновому виробництві. Через кілька днів плати і заздалегідь замовлена комплектація була вже у мене. Ще пара днів з паяльником і ось вже думка набула реальних обрисів!

Залишилося навісити модуль на Arduino і ось він, довгоочікуваний контролер!

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

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

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

Що вийшло в результаті роботи:

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

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

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

Що залишилося зробити перед виготовленням повноцінної версії контролера:

1. Провести коригування у схемі і конструкції, усунувши помилки і недоліки, виявлені в процесі альфа тестування.

2. Встановити замість додатка HM-11 роз'єм для з'єднання WiFi модуля ESP8266, при цьому спроектувати плату перехідник для HM-11 з таким же розпинанням роз'єму.

3. Передбачити роз'єм стандарту Grove або DFRobot для виносного з'єднання датчика вологості DHT11

Ось, здається все, схему і додаткову інформацію про хід роботи можна подивитися на сторінці проекту vk.com/myremoter

Попередні публікації присвячені стикуванню Arduino з системою OpenHAB за протоколом Modbus можна подивитися тут:

Як подружити OpenHAB і Arduino habrahabr.ru/post/248569

Arduino & Modbus habrahabr.ru/post/249043

Arduino & OpenHAB habrahabr.ru/post/252555