Умный дом на ардуино uno. «Умный дом» на Arduino для бытовки

Дальше дело техники - написать под Ардуино цикл опроса параметров и вывести их для начала в монитор порта. Время одного цикла получилось около секунды. Однако в конечном варианте проекта с логированием данных на флэшку и опросом температурных датчиков это время выросло до 4-x секунд. Это меня уже совершенно не устраивало и пришлось погрузиться в оптимизацию. В итоге я вновь добился секундного интервала без потери функциональности. К слову, скетч я переписывал с нуля два или три раза, пока не нашёл правильную архитектуру и экономные алгоритмы.

Программная реализация обмена со счётчиком

Код выдран из контекста моего большого рабочего скетча. Скомпилирован, но в таком виде я его никогда не запускал. Привожу только для примера, а не как готовую рабочую программу. Хотя в теории всё должно работать именно в таком виде.

Код написан для двух типов счётчиков одновременно, однофазного МТ-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 метров, и десятиметровый внутренний кусок с ответвлениями на семь датчиков. Всё работает почти идеально. Лишь изредка проскакивают прочерки вместо значений температуры. Это значит, что данные с конкретного датчика были прочитаны некорректно. Но случается это настолько редко (замечаю раз в месяц может), что не доставляет никаких проблем.

Удалённый доступ

Для удалённого доступа к Ардуино был куплен 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"); acceptHtmMode = true; break; } if (fl_htmline) // префикс "htmlineN" { int b = acceptHtmFile.println(tag); if (b == 0) { client.print("FAIL"); acceptHtmMode = false; cntHtmModeIteration = 0; } else { client.print("OK"); } cntHtmModeIteration = 0; break; } if (fl_endhtm) // префикс "END_CONTROL.HTM" { SD.remove(CONTROL_HTM); acceptHtmFile.close(); File htmlFile = SD.open(CONTROL_HTM, FILE_WRITE); // открываем на запись acceptHtmFile = SD.open(CTRL_HTM); // открываем на чтение for (int i = 0; i < 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. Именно из-за его наличия я и решил писать данные в лог-файлы. Для работы с картой памяти также имеется встроенная библиотека, и управлять записью-чтением файлов с ней вообще элементарно.

Для экономии объёма данных алгоритм логирования я построил так, что запись происходит только тогда, когда данные изменяются более чем на заданный порог. Для температуры это 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 кат.№ 4 125 01 с возможностью ручного управления. То есть релюшки внутри корпуса контроллера управляют контакторами, а контакторы уже управляют нагрузкой. Это надёжно. А вот питание роутера и камеры осуществляется только лишь через эту маленькую синюю китайскую релюшку, ток там небольшой, поэтому можно.

    При первом же боевом запуске меня ждало большое разочарование. На столе я испытал всё, кроме нагрузки. Зачем? Контакторы щёлкают, и так понятно, что нагрузку они коммутировать будут. Ан нет, надо было испытать. Мощные электроконвекторы привнесли в систему помеху в момент размыкания контактов, что приводило к гарантированному зависанию изернет-шилда. Причем вывести его из дауна было возможно только снятием питания, простой ресет не помогал. Погуглил - да, есть такая проблема у этой китайщины. И библиотека не обрабатывает эту ситуацию. То есть и железка хреновая, и софт не очень.

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

    А вот таким образом можно заглянуть внутрь коробки:

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

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

    Система работает уже почти год, пережила морозы до 20 градусов без проблем.

    В целом я доволен результатом. Однако для более-менее функциональных задач Ардуино явно слабенький. Я уже не раз сталкивался с исчерпыванием памяти и приходилось кроить и оптимизировать. Да и скорость работы, особенно с картой памяти, меня совершенно не устраивает. Поэтому будущие реализации подобных поделок, если таковые потребуются, я бы хотел основывать на чём-то более мощном. Коллеги пиарят мне Raspberry Pi, хороший вариант, думаю. Добавить метки

    То, что получилось в итоге, можно назвать, пожалуй, самым дешевым решением для создания Умного дома, которое, тем не менее, умеет:

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

    Serial CLI при создании нового контроллера надо прописать в NVRAM уникальный MAC адрес. Именно MAC является ключом, по которому изначально загружается конфигурация c 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; // set the three bits in 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 градуса (можно корректировать по MQTT)


    Входы устройства

    В конфиге для каждого входа можно задать как передачу команды локальному объекту так и выдачу команды в 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.

    Преимущества
    • Цена.
    • Качество.
    • Удобство.
    • Простота монтажа и проекта в целом.
    • Низкая стоимость в случае поломки или выхода из строя отдельных комплектующих.
    • Доступность программного обеспечения.

    Всем привет! С вами снова Артем Лужецкий и очередной материал в направлении . Чтобы связать наши проекты с интернетом можно использовать 10-ки способов, но мы пока остановимся на модуле, о котором я еще говорил еще в самой первой статье, 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; // высчитываем температуру float temperatur = 1.0 / (-log(volt_temp) / 3977.0 + 1.0 / 295.0) - 273.0; if (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\n"; // закрываем 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