KONBANWA («Добрый вечер» — яп. ?????).

Это светодиодная лента, которая крепится на верх окна и применяется для удлинения светлого времени суток. Так как источник дневного света и дополнительного не меняет своего положения, в комнате получается комфортное освещение. Кроме того, фактически уличная засветка штор не позволяет увидеть, что происходит внутри комнаты.

В проекте konbanwa учитываются астрономические сумерки, путем передачи широты и долготы устройства. Смещением широты южнее или севернее, можно управлять временем и длительностью рассвета/заката.

На каждые астрономические сумерки можно выставить свой цвет и яркость освещения.
От заката до гражданского заката, самый яркий период работы. В это время человек обычно не спит. Можно подобрать цвет близкий к заходящему солнцу (оттенки красного), а яркость — максимально комфортную. Очень необычно, когда на улице слякоть, дождь, а на стенах лучи заходящего солнца. Ночью включается режим ночника. В это время яркость минимальна, лучше выбирать оттенки синего или зеленого. С рассветом, оранжево-желтые оттенки с минимальной яркостью. Днем — выключено.

Все это работает в автоматическом режиме, достаточно один раз настроить яркость и цвет. Единственное условие — это работающий wifi. В качестве «мозга» применен node-red, который может быть установлен на Raspberry PI внутри локальной сети, либо на внешних серверах. Для транспорта данных применен mqtt брокер mosquitto. Геолокация не определяется автоматически. Эта функция возложена на node-red сервер, где она прописывается вручную.

node-red
image

Область применения: от северных территорий, где зимой темнеет рано, до южных, где темное время суток наступает практически вслед за закатом. Основным применением является установка на окно. Также можно установить на входную дверь для автоматического освещения входа, чтобы не искать замочную скважину в темноте.

Немного истории:
В 2018 году был собран первый опытный образец, который оказался работоспособным. Собирался на базе esp01 и адресных светодиодах ws2812b. Степень защиты IP30. Свет включался по времени и включение постоянно нуждалось в коррекции. Устройство установлено в детской и используется по сей день в качестве ночника.

Второй опытный образец на esp01 собран для входной двери, но степень защиты IP30 не позволила работать на улице и после зимы светодиоды пришли в негодность.

В начале 2019 года произошло переосмысление и проект получил продолжение konbanwa 2.0, в котором были учтены астрономические сумерки. Также уменьшена яркость рассвета практически до режима ночника.

Konbanwa 3.0 собрана на esp12e с дополнительным датчиком температуры и влажности DHT22 и светодиодная лента на 60 светодиодов на метр. Именно в это время выяснилось, что ленты очень зависят от производителя. И обладают разной цветопередачей.

Konbanwa 4.0 получила продолжение в середине лета 2019 года. DHT22 был заменен на BME280 датчик температуры, влажности и атмосферного давления. Подключено 2 канала для светодиодной ленты. Дополнительно подключено два реле с оптической развязкой управляемых одноклавишным выключателем без фиксации. Переписана прошивка, разведена печатная плата и заказано изготовление плат на JLCPCB. Модуль esp12e заменен на NodeMCU v3.

Схема и PCB
image
image

Все эти изменения в дальнейшем позволят легко монтировать устройство на потолке под натяжным или подвесным потолком или в люстре. Внутри люстры монтируется блок питания на 5 вольт, на который постоянно подается питание с одного канала выключателя. Одноклавишным выключателем возможно управлять двумя каналами люстры. Светодиодные ленты подключаются шестью тонкими проводами (шлейф), которые могут быть легко приклеены к потолку или убраны за потолок. Шлейф по три провода на канал. +5 вольт, -5 вольт и данные. Светодиодные ленты устанавливаются на окна. Максимум два по количеству каналов. Логика работы выключателя проста. Клик — 1-й канал, клик — 2-й канал, клик — оба канала. Если прошло 10 секунд между кликами, то независимо от того, какой режим работы выбран, внутренние реле обесточиваются. Между кликами должно быть не менее 500 миллисекунд и не более одной секунды. Вся работа контролируется mqtt брокером. Данные, температура, влажность, атмосферное давление, какой цвет зажигать на светодиодах и какой канал включить на люстре. Всем этим можно управлять или читать удаленно. Bme280, отправляя данные на брокер, в дальнейшем позволит управлять климат системой.

Фото подсветки
День.

image

Закат

image

Гражданские сумерки

image

Навигационные сумерки

image


В исходном коде нет ничего интересного. Стандартные подписки и публикации в топики mqtt.
Проект домашний, поэтому занимаюсь по мере появления интереса к нему.

Исходники. Не рекомендуется к просмотру. Берегите нервы.
Раннюю версию исходников под vscode (PlatfornIO) можно посмотреть на github
А схему первого устройства на easyeda

Комментарии (12)


  1. GarryC
    20.08.2019 10:40

    Как Вы понимаете, после Вашего предостережения, просто не мог не взглянуть на исходники.

    Если позволите, несколько мелких замечаний навскидку:
    0. Не все так плохо, я видел и хуже, но тем не менее, относительно wifi.cpp
    1. Вложенные include — это ЗЛО
    2. Глобальные переменные config, dnsServer — это ЗЛО
    3. Если нет разницы, то все таки лучше --count
    4. Для печати просто просится макрос
    5. При дефолтном и внешнем назначениях разная печать — так и должно быть?


    1. Uzhor Автор
      20.08.2019 16:03

      С вложенным include получилось не хорошо. Мое стремление писать отдельными модулями исчезло. я надеялась на #pragma once, но видимо оно не работает или работает не так как ожидала. На каждый .cpp я наивно создавала .h с нужными include. Наследие windows.
      Все замечания очень ценны для меня, обязательно учту при внесении правок, особенно стыдно за вложенные include
      «разная печать» — так не должно быть. мне нужно быть более внимательной. Все исправлю, как только побольше разберусь с контролем версий. Спасибо, что проверили мою работу.


      1. GarryC
        21.08.2019 10:24

        Ни в коем случае не стыдитесь, это мэйнстрим, более того, во многих проектах, считающихся хорошими, типа CMSIS или исходников Linux, не просто вложенные заголовки, но зацикленное вложение, вот почему без прагмы once или защиты от повтора оно просто не собирается.
        Так что Вы в большой компании, и лишь отдельные отдельные старики, еще помнящие, как надо, брюзжат в комментариях.
        Раньше было принято иметь 2 заголовочных файла, один — для внешнего представления с интерфейсом и другой, имеющий все необходимое для реализации и там лежали в том числе и ссылки на другие заголовки, но сейчас так не делают, наверное, имена файлов стали дефицитом


        1. Uzhor Автор
          23.08.2019 11:58

          Благодарю. Код стал лучше. Хоть шапки и одеты на лысую голову и смотрятся сиротливо. Но мне было интеренсно отказаться от #include в .h Благодаря Вам я поняла как работает #pragma once (это свершилось). Это очень хорошее продвижение. Мне требовалось несколько месяцев, что бы понять это в одиночку. Похоже, что вложенные инклюды большая проблема и это муравейник в который легко наступить по незнанию.


  1. lingvo
    20.08.2019 11:42

    Если кому интересно, оставлю свой коммент, как это делается в системе Умного Дома быстро, без пайки и нудного программирования (почти :-)), но не дешево по железу:
    Из железа понадобится: Raspberry Pi — тот который у вас уже наверняка есть и используется в качестве сервера Умного Дома, Z-wave контроллер, например Aeon Z-wave Stick, которым вы будете управлять всеми I/O. Fibaro RGBW контроллер, блок питания 220В/12В — я рекомендую миниатюрный, в подрозетник типа такого, сорри не знаю кто производитель, и любая китайская RGB лента из магазина.


    USB Стик вставляете в RPi. Ленту приклеиваете на карниз, подключаете RGBW Контроллер и блок питания по инструкции. RGBW Контроллер и блок питания вместе со всеми проводами влазят в подрозетник.


    По настройке:


    1. На Распберри ставите Openhabian, устанавливаете в настройках Mosquitto MQTT Broker и NodeRED
    2. В OpenHAB устанавливаете Z-wave Binding, включаете в сеть RGBW контроллер и делаете Inclusion, чтобы он обнаружился в OpenHAB. Получаете RGB каналы для управления, линкуете их с Items и наслаждаетесь ручным управлением LED лентой.
    3. Устанавливаете там же Astro Binding, тыкаете в карте свой дом, получаете Sunset канал для получения всех этих разных гражданских, астрономических и навигационных сумерек для своих координат.
    4. Устанавливаете MQTT биндинг и настраиваете event bus, чтобы все, что происходит в OpenHAB появлялось в виде MQTT сообщений на брокере, и обратно, чтобы все, что отправлялось в MQTT с других устройств, отображалось в OpenHAB.
    5. Теперь самое интересное — в NodeRed рисуете flow в котором по событиям от Sunset будет задаваться цвет вашей подсветки. Пример в моей статье. Можете радугу придумать. Можете по времени настроить. Режим ночника добавить. В общем все графически.

    Вот в принципе и все.


    1. Uzhor Автор
      20.08.2019 16:18

      Разработка, пайка, программирование. Это магия. Я не могу отказать себе в удовольствии отключив мозг от повседневных дел писать код или трассировать pcb руками. Написание кода не может быть «нудно». Вы знаете как работает Z-wave? А можете поменять логику его работы? У меня нет цели сделать быстро или как нибудь, что бы работало. Это хобби которое доставляет мне удовольствие.
      Зачем вышивать когда можно купить уже вышитое на ЧПУ? Ответ прост. Получение удовольствия от создания чего либо.


      1. lingvo
        20.08.2019 17:26

        Не, ну хобби — это святое. Моя инструкция чисто для тех, для кого важен не процесс, а результат и надо получить надежное рабочее решение. Вот и все.


        Я сам и разработчик и программист встраиваемой электроники, если что.


  1. berez
    20.08.2019 21:25

    А… эээ… у меня один вопрос: почему так сложно, с интернетом и т.п.? Разве нельзя присобачить к контроллеру таймер RTC с батарейкой, чтоб хранил текущее время, задать один раз в конфигурации прошивки текущую таймзону и широту, и радоваться жизни безо всяких mqtt-брокеров? Это ж просто лампочка с таймером.


    1. GarryC
      21.08.2019 10:26

      Не гибко. А внести гибкость с использованием стандартных решений не трудно и не дорого.


    1. lingvo
      21.08.2019 10:41

      В основном причина в желании будущей интеграции. Поставив таймер с батарейкой вы получите изолированное решение, которое будет решать только одну простую задачу — вашу лампочку с таймером.


      Но привязав это дело к системе Умного Дома или Интернет ваше устройство сможет намного больше — например вы также сможете управлять подсветкой с любого выключателя, пульта и телефона в доме, подсветка может имитировать присутствие людей, когда вас нет дома, привлекать внимание, если вдруг в дом залезут воры, интегрироваться с различными сценами освещения и т.д.


      Но для этого надо сразу продумать как реализовать это соединение с интернетом и сделать один раз.
      Ну а когда интернет уже есть — то почему б не воспользоваться готовеньким?


    1. Uzhor Автор
      21.08.2019 12:08

      Первая версия была сильно урезанной и даже без rtc. Планета Земля со своей наклонной осью сильно портит жизнь на идеальной сфере. Закат и рассвет происходит не в одно и то же время, даже на одной широте. Содержать массив 365(дней)*6(сумерки) слишком накладно и бестолково для esp01. Не нашла в rtc возможность задать широту и астрономические сумерки. По работе, частая смена часовых поясов с изменение широты, разрушает меня. Это освещение задает нужный ритм, я легче переношу переезд. Кроме этого передача гео с моего телефона позволяет дому понять, что я близко и включить split-systems-air, а режим работы задает влажность и температура в лампе. И я всегда могу контролировать атмосферное давление. Это позволяет мне делать погодный прогноз, для России это особенно актуально. В node-red есть нода astrodata dayvalues которая работает не очень хорошо. Невозможно получить который лунный день и lon,lat работают не так как я ожидаю. Поэтому node-red просит php скрипт с post передачей гео в json. Но это тема уже для отдельной статьи konbanwa4.0 которую буду писать если Вы готовы читать. Мне нужно проделать большую работу для правильного подношения информации и исправлять кучу ошибок. Извините, что заставляю вас ждать.


    1. lingvo
      21.08.2019 12:23

      Ну да, астроданные не так уж просты, как кажется на первый взгляд. И тут опять же проявляется преимущества интеграции — вы можете выбрать провайдера данных по вкусу. Я пробовал ноду Sunrise/Sunset в Nodered — оно в принципе работало, но были проблемы с чем-то — помоему с переводом часов. Не понравилось — выкинули, из библиотеки попробовали следующий вариант — их там кучи.


      Я, в принципе для себя вообще взял Astro из Openhab. Там очень легкая настройка и куча параметров. Кстати рекомендую взглянуть https://www.openhab.org/addons/bindings/astro/ там и по Луне полно параметров, не знаю, правда, кому они нужны.


      Тоже самое по погоде — в принципе мне датчик температуры воздуха на улице не нужен — просто берешь погоду в своем городе с любого сервиса и используешь, где нужно. Точность вполне нормальная.