Комнатный контроллер с управлением по Modbus RTU
В прошедшие выходные, наконец, создал новую прошивку для одного из моих комнатных контроллеров, которая позволит управлять светом через Modbus RTU. Почему-то в сети полно статей как это сделать, но мне пока не удалось найти исчерпывающего руководства, чтобы реализовать все что хочется.
Сейчас у меня дома весь свет управляется четырьмя контроллерами собранными на базе Arduino Pro Mini. Один контроллер управляет светом в кухне, гостиной и лоджии. Второй в душе, Третий управляет ванной и коридором, а четвертый управляет светом в двух комнатах и гардеробной, он то и будет моим первым пациентом для перепрошивки. В качестве коммуникационной платы во всех контроллерах используются готовые сборки max485, но их то я пока и не подключил, так что мой умный дом еще достаточно глуп. Чтобы заставить всю систему работать были созданы простые прошивки, не подразумевающие централизованного управления, и вот, наконец, я готов это сделать для одного из контроллеров, который управляет светом в двух комнатах и гардеробной.
В качестве серверного решения будет крутится Openhab. Прошивка позволяет управлять светом в двух комнатах и гардеробной, причем, для гардеробной реализовано плавное включение через ШИМ с регулировкой максимального значения. Яркость можно регулировать на сервере, так-же как включать и выключать свет. Дополнительно, поддерживаются герконы на дверях в комнатах и гардеробной, при этом, герконы на дверях в комнаты просто сигнализирует о своем состоянии на сервер - я еще не придумал сценарии их использования, а геркон на двери гардеробной будет дополнительно включать свет при открытии двери - свет там все-равно нужен всегда. Также подключил датчик температуры и влажности - так как в гардеробная еще и серверная - температуру знать там не повредит. Вот пока и весь функционал, а больше пока и не нужно, все остальное можно реализовать на сервере, если понадобится.
К слову сказать, код контроллера все еще мне не нравится. Это пока еще proof of concept. Есть еще что можно улучшить. Из последних нововведений мне понравилось использовать указатели на функции - их активно используют например, при программировании для Pebble. Это позволяет лучше разбить код на более мелкие, но при этом универсальные блоки, и в отличии, например, от виртуальных функций код не становится медленнее, что важно, если у вас медленный процессор с ограниченными ресурсами.
Прошивку выложил на github - https://github.com/maxistar/Controller03
Описание в схеме не полное, постараюсь выложить больше информации по этой теме, так как, похоже, что тема весьма актуальная. Видео, работы постараюсь сделать и выложить на днях. Если прошивка покажет себя хорошо - обновлю и остальные контроллеры.
Вообще планов громадье, например, нужно также, автоматизировать еще и отопление - все батареи у меня уже оснащены кранами с приводами и к ним уже подведены провода для датчиков температуры и протечки, но это сразу после того как я подключу теплые полы везде где они проложены - на лоджии в санузлах и коридоре, так что тема для автоматизации своего жилища - она неисчерпаема.
Планшеты с беспроводной зарядкой
Пользоваться планшетом с беспроводной зарядкой оказалось очень удобно. Даже несмотря на то, что безымянная китайская Qi (читается как чи или цы) зарядка оказалась очень капризной к блоку питания. После того как я приделал к своему столу кронштейн для планшета с зарядкой у гаджета появился свой домик и все домашние знают где его искать. На ночь его ставят на место, где он прекрасно заряжается и на следующий день он снова готов к работе.
В новой квартире я даже предусмотрел места для настенных креплений с беспроводной зарядкой и подвел к ним провода. Но вот встал вопрос, что купить на смену старенькому Nexus 7, у которого за два года уже стал теряться товарный вид и стал отказывать акселерометр? Стал искать альтернативы.
Оказалось, что альтернатив то и нет! Не выпускают планшетов с беспроводной зарядкой! Ходят слухи что iPhone7 будет оснащен беспроводной зарядкой, Samsung Edge имеет, Microsoft Lumia и еще некоторые телефоны. Планшетов с беспроводной зарядкой нет как класса!
А очень жаль, ведь это очень удобно - не нужно возиться с дурацким micro usb разъемом, провода от которого у меня живут несколько недель. Просто поставил планшет на место и всё, ты можешь быть уверен, что он будет заряжаться.
Похоже придется придумывать альтернативный вариант зарядки, может быть сделаю докстанцию с разъемом, может быть приклею внешнюю зарядку, но факт остается фактом - Nexus 7 был последним планшетом с беспроводной зарядкой.
Умный свет на Arduino
Продолжаем тему плавного включения света, начатую ранее.
В выходные, наконец, собрал вместе все компоненты управления светом в моей новой квартире в кухне, гостиной и лоджии. Основная идея - реализовать управление светом при помощи простых кнопочных выключателей. Что может быть проще и естественней при входе в комнату нажать на выключатель - щелк и свет горит. Соответственно для этого не нужно хитрых ручек, кнопочек, сенсорных панелей - просто кнопка. Разумеется, в будущем, все будет дублироваться с планшета и можно будет управлять светом и с планшета и голосом, но сейчас, пока в жилище ремонт -- контроллер должен работать автономно, но при этом, обеспечивать все те же возможности управления светом, что и у готовой системы используя лишь простой кнопочный выключатель.
Наиболее нетривиальной задачей было организовать управление точечными светильниками с плавным включением. Её я успешно решил, выкинув "родные" блоки питания, замнив их на управляемые ШИМ источники тока и запитав всю схему от одного мощного блока питания. Светильники на 3 Ватта питаются от блока питания 12 вольт, светильники на 6 Ватт - от блока питания на 24 вольта.
Сам контроллер собран в корпусе на дин-рейку, заказанном на чипе&дипе. Корпус, кстати, оказался весьма удобным с макетной платой, на которой и были размещены маломощный блок питания для ардуины и три семисторных ключа с оптронной гальванической развязкой - безопасность превыше всего! Сама плата arduino pro mini и микросхема max485 для шины модбас размещены на отдельной макетной плате и помещенны в тот же корпус, благо место позволяет.
Прошивку написал с нуля - она пока не совсем такая как я хочу, но уже не вызывает рвотного рефлекса при взгляде на код - оказывается, ардуино позволяет писать программы на вполне приличном C++ с объектами, наследованием и виртуальными функциями. Все это делает код вполне читаемым и, главное, поддерживаемым в будущем. Код выложил на github - замечания и дополнения приветствуются!
Основная фишка - одна кнопка. Тут я вполне согласен со Стивом Джобсом - одна кнопка рулит!
В кухне одной кнопкой включается основной свет и свет над рабочей зоной. На лоджии плавно включается четыре шестиваттных потолочных светильника. В гостиной - одной кнопкой управляем двумя светильниками общего света. При этом есть возможность управлять яркостью светодиодных светильников - делать их ярче или тусклее.
Конечно, ремонт пока еще в самом разгаре и в будущем на кухню я планирую добавить подсветку с светодиодной лентой по периметру потолка. В гостиной планируется добавить отдельную зону из светодиодных светильников, как на кухне.
Как говориться, начало положено и схема доказала свою реализуемость, что не может не радовать.
Плавное включение светодиодного освещения
Всем хороши светодиодные светильники - и экономичные, и работают долго и яркие. Но есть один недостаток который вытекает из их достоинства - высокое быстродействие и мгновенный выход на максимальную яркость приводит к тому что включение света в темноте мягко говоря не очень комфортно. Обычные лампочки при включении загораются не так резко - спирали нужно нагреться. Газоразрядные лампы зажигаются хоть и быстрее но тоже выходят на максимальный режим постепенно, но светодиодные светильники загораются мгновенно раз - и свет горит, зрачек адаптироваться за ним не упевает. Представьте ситуацию, пошел ты, ночью в туалет, нажал на выключатель и, ба-бах на несколько секунд вы ослепли - пока продрали глаза, пока привыкли к яркому свету - пора выключать свет чтобы остаться в полной темноте и ждать пока глаза снова адаптируются.
В тоже время, плавное включение светодиодного света организовать не просто - а очень просто!
Берем любой светодиодный светильник, например вот такой:
Можно купить в магазине, но я заказываю на ebay - выходит в разы дешевле чем покупать у наших перекупщиков, вот только доставка занимает значительное время.
Блок питания от него нам не понадобится, вместо этого нам понадобится источник стабилизированного тока с ШИМ управлением, можно сделать самим, а можно купить готовый, например вот такой.
Понадобится, также источник напряжения - как правило зависит от мощности светильника - трехваттным светильникм хватит 12 вольт, 6 ваттным - 24 вольта и т.д.
Arduino Pro Mini будет управлять нашим устройством. Идея заключается в следующем - при нажатии на кнопку выключателя свет будет плавно включаться, при повторном нажатии - плавно выключаться. Если мы хотим уменьшить яркость нашего диммера - просто оставляем кнопку нажатой немного дольше - умный выключатель перейдет в режим настройки и будет циклически увеличивать яркость до максимума а затем её уменьшать. Найдя нужное значение яркости отпускаем кнопку - наш диммер запомнит это значение и будет использовать это значение яркости в дальнейшем.
Подключение готового устройства не предстваляет трудности даже человеку далекому от электроники. Подключаем кнопку к ножке A0 второй провод кнопки - на землю. Подтягивающий резистор не нужен - будем использовать внутренний подтягивающий резистор самого микроконтроллера. ШИМ управление будем снимать с вывода 6. Скетч для прошивки контроллера выложил сюда.
Конечно, это пока только концепт, в дальнейшем можно сделать чтобы яркость автоматически сама устанавливалась в ночное время на минимум, можно добавить в схему детектор движения и геркон на дверь - все зависит от вашей фантазии.