Оглавление:

Яркая управляемая лампа восхода солнца: 6 шагов
Яркая управляемая лампа восхода солнца: 6 шагов

Видео: Яркая управляемая лампа восхода солнца: 6 шагов

Видео: Яркая управляемая лампа восхода солнца: 6 шагов
Видео: В Арктике Луна прошла 30 секундный путь, блокируя солнце на 5 секунд 2024, Ноябрь
Anonim
Яркая управляемая лампа восхода солнца
Яркая управляемая лампа восхода солнца
Яркая управляемая лампа восхода солнца
Яркая управляемая лампа восхода солнца

Вы когда-нибудь просыпались в 7:00, обычное время, когда вам нужно просыпаться на работу, и оказывались в темноте? Зима - ужасное время, правда? Вы должны проснуться посреди ночи (а то почему так темно?), Сорваться с кровати и отправить свое полусознательное тело в душ.

Этот проект призван решить одну из проблем - утреннюю темноту.

Вокруг много дешевых ламп для восхода солнца, но все они маломощные и бледные. Они больше похожи на ночник, который должен улучшать сон. Совсем не то, что я хочу.

В то же время, простое включение яркого света сразу же разбудит вас, но не достаточно мягко. Я хочу комбинацию обоих подходов - загораться с низкой яркостью, медленно набирать полную скорость, затем срабатывает настоящий будильник, и вы больше не чувствуете такой сонливости. Давайте добавим к нему немного птичьего пения, и каждое утро вы просыпаетесь на небесах!

Шаг 1: решетка ламп

Матрица ламп
Матрица ламп
Матрица ламп
Матрица ламп

В первую очередь нам понадобится сама лампа. У меня довольно большая комната с белыми стенами и потолком, поэтому я выбрал 7 светодиодных ламп GU10, примерно по 6 Вт каждая, более 40 Вт чистой мощности! Этого достаточно, чтобы вы почувствовали, что уже наступил день. Также может использоваться как обычное комнатное освещение в дневное время.

На самом деле не имеет значения, как вы его собираете, какие лампы вы используете с какими розетками. Все, что имеет значение - это должны быть лампы с регулируемой яркостью!

В моем случае у меня есть деревянная доска с прикрепленными вместе 7 розетками GU10. Позже положу в пластиковую коробку.

Шаг 2: теория затемнения

Теория диммирования
Теория диммирования

Теоретически разницы между теорией и практикой нет. На практике есть.

Управление диммером от ESP32 / Arduino оказалось не таким простым, как я себе представлял. У меня есть один из модулей RobotDyn AC Light Dimmer. Для этого производитель предлагает библиотеку. Он не работает на ESP32 (и его действительно сложно адаптировать, потому что он использует много низкоуровневого доступа к реестру, специфичного для ATMega), вроде работает на Arduino Nano, давая ужасное мерцание при низкой и средней яркости. Вот почему я потратил некоторое время на то, чтобы исследовать, как все это работает, и найти свой собственный путь.

Немного теории

В выбранном модуле диммера используется очень популярный TRIAC: BTA16. Об этом написано много статей. Попробую здесь резюмировать.

TRIAC - это модуль, который может передавать входное положительное или отрицательное напряжение на выход или блокировать его. По умолчанию он все блокирует. Чтобы его открыть, нужно подать на вход затвора высокий сигнал на 100 мкс. Затем он будет оставаться открытым до тех пор, пока ток не упадет до нуля, что происходит, когда входное напряжение меняет знак, пересекая нулевое напряжение. Затем в следующем цикле мы должны сделать еще один импульс 100 мкс и так далее. Выбирая, когда подавать импульс, мы контролируем яркость: делаем это в самом начале, и это будет близко к 100% передаче мощности. Сделайте это позже, и он будет затемнен. Посмотрите на диаграмму выше, объясняя это.

Чтобы генерировать импульсы в одной и той же точке цикла, нам нужно точно знать, когда он начинается. Вот почему модуль диммера имеет встроенный детектор нулевого пересечения. Он просто генерирует сигнал (который мы будем воспринимать как аппаратное прерывание в Arduino) каждый раз, когда напряжение пересекает ноль.

Шаг 3: Практика диммирования

Практика диммирования
Практика диммирования

Ага, вот как бы вы проснулись, если бы ваша лампа не димлала и направила все 40 Вт мощности в ваши сонные глаза.

Общие проблемы

Нам нужно решить множество проблем.

Мерцание.

Время микроконтроллера должно быть действительно точным при включении и выключении выхода затвора. Библиотека, которую предлагает RobotDyn, имеет прерывание по таймеру каждые 100 мкс и изменяет уровень ворот только по таймеру. Это означает, что оптимальное значение может отличаться на +/- 50 микросекунд. Дает хороший результат на высокой яркости, но сильно мерцает на низкой яркости. Кроме того, если микроконтроллер выполняет много функций, он снижает точность времени, поэтому в идеале для диммера следует использовать специальный микроконтроллер.

Минимальная яркость. В светодиоды встроен преобразователь питания, который при нехватке мощности просто откажется работать. Мои лампы вроде работали нормально, начиная с 10-11%.

Даже с этим значением некоторые из моих ламп отказывались загораться при запуске. Даже при последующем увеличении яркости они остаются темными. Вот почему, когда мы переходим из выключенного состояния в состояние некоторой положительной яркости, мы начинаем с периода прогрева в 5 циклов, когда мы даем лампам полную мощность. Затем продолжаем с желаемой яркостью. Это почти незаметно, но действительно помогает.

Частота сети 50/60 Гц. Вам нужно знать, сколько ждать до следующего нуля. Это довольно просто - мы просто посмотрим на разницу во времени между двумя последними прерываниями.

Постепенное изменение яркости. ESP32 довольно медленный, для обработки тривиального HTTP или даже WebSocket запроса требуется 0,5 секунды, поэтому не ждите плавного перехода яркости, его нужно как-то реализовать на уровне диммера. Вот почему, когда он получает новую яркость от последовательного порта, он просто устанавливает цель, а затем медленно приближается к ней с течением времени.

Решение

Вот мой простой код Arduino для диммера. Он ожидает команды (один байт с новой яркостью) от последовательного входа, обрабатывает прерывания Zero-Cross, управляет TRIAC, решая все вышеперечисленные проблемы.

Шаг 4: Контроллер лампы (ESP32)

Контроллер лампы (ESP32)
Контроллер лампы (ESP32)
Контроллер лампы (ESP32)
Контроллер лампы (ESP32)

Вот схема подключения всех имеющихся у меня компонентов. Плата ESP32 сильно отличается от той, что я использую (Heltec), поэтому выбранные контакты выглядят немного странно, но все равно должны работать нормально. Не стесняйтесь использовать в своем проекте разные булавки.

Вот код, управляющий всем этим. Это довольно просто.

Основные особенности

Управляемый. Лампа подключается к Wi-Fi, запускает сервер WebSocket на порт 81, ждет команд. Формат команды:

На данный момент поддерживаются только две команды: "set_brightness" и "update_settings", которые… довольно информативны.

Получение времени от NTP. Я не хочу слишком усложнять ситуацию и добавлять в схему часы реального времени. У нас есть доступ в Интернет, а это значит, что мы можем получать реальное время с какого-то NTP-сервера, а затем отслеживать текущее время с помощью системных таймеров.

Будильник восхода солнца. Вы можете установить один будильник. Что он на самом деле делает: начинается с минимальной яркости и постепенно переходит на полную яркость в течение 10 минут. Потом остается на пару часов. Затем он постепенно отключается в течение 60 секунд.

Все вышеперечисленные параметры можно настраивать.

Пение птиц. DFPlayer mini используется для воспроизведения музыки. Для этого есть много руководств, но по сути вам просто нужно подключить карту MicroSD, отформатированную в FAT32, с одним файлом с именем 0001.mp3. В этом файле может быть все, что угодно, в моем случае это 15 минут пения птиц (он будет закольцован), и это делает мое утро потрясающим. Обратите внимание, что есть огромный конденсатор на питании и резисторы 1 кОм на последовательной линии между ESP32 и DFplayer - они необязательны, но помогают уменьшить шум.

Сохранение настроек в EEPROM. Все настройки записываются в EEPROM и загружаются при запуске. Это позволяет использовать лампу как минимум с функцией сигнализации без подключенного контроллера.

Отображение некоторой информации на OLED-экране. Мой Heltec ESP32 имеет встроенный экран SSD1306 128X64 I2C. На нем представлена вся важная информация. Я знаю, коробка выглядит некрасиво, я только что распечатал какие-то вещи и вырезал отверстия и окна сверлом. Быстро, грязно, но работает!

Шаг 5: Панель управления

Панель управления
Панель управления
Панель управления
Панель управления

Это суть проекта. Raspberry Pi с оригинальным 7-дюймовым дисплеем, работающий под управлением интерфейса Kivy.

Вот полный исходный код.

Особенности

Написано на Python. Мне нравится Kivy, это Python-фреймворк для пользовательских интерфейсов. Очень простой, но гибкий и эффективный (использует много кода C внутри для высокой производительности и аппаратного ускорения).

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

Контроллер SunriseLamp. Другая панель отображает основную информацию о тревоге и позволяет регулировать яркость. Если вы зайдете в настройки, вы можете настроить любой параметр лампы, включая расписание будильника, максимальную громкость звука и так далее.

Заставка: отображает Game of Life на экране после некоторого периода бездействия.

Раньше было больше, но другие вещи казались бесполезными.

Установка

Я установил все вручную на Raspbian и теперь могу сказать: не повторяйте моих ошибок. Используйте KivyPie, в нем все предустановлено.

Кроме того, просто следуйте инструкциям по установке в репозитории кода.

Шаг 6: Наслаждайтесь

Лично я устройством доволен. Я использую его как основное освещение дома в течение дня, и он позволяет мне просыпаться утром, это потрясающе.

Я знаю, что инструкции не очень подробные и описательные. Если кто-то сделает то же самое и возникнут проблемы - буду рад помочь!

Рекомендуемые: