Как стать автором
Обновить

Светильник управляемый жестами на Arduino

Время на прочтение5 мин
Количество просмотров25K
Всего голосов 37: ↑32 и ↓5+27
Комментарии38

Комментарии 38

Не думали о применении esp8266? Она компактнее слегка и там WiFi есть, можно было бы в систему умного дома встроить. Это сейчас, мне кажется, очень модно)
Я в статье написал о том, что следующая версия будет на wemos d1 mini
Проглядел! Хороший выбор)

Хорошая работа!

Спасибо!
А сам корпус светильника на али заказывали?
В Леруа покупал за 900р. Потом видел такой же в Ашане за 700р. Еще можно использовать вазу из Ikea, дешевле выходит
У Гайвера нет жестов, просто ёмкостная кнопка (и кстати не очень стабильно определяющая двойное нажатие). Но суть очень похожая, да.

А чем обусловлен выбор отдельного датчика? Не пробовали самостоятельно собрать на ИК светодиоде и ИК фотодиода?

На ИК датчике препятствий, невозможно измерять расстояние. В светильнике регулировка яркости использует датчик приближения.
А так же для управления жестами в двух плоскостях, понадобится 4 фотодиода и ИК светодиод, а это влечет за собой увеличение размеров.
а это влечет за собой увеличение размеров
Мне кажется, вверху лампы предостаточно места. Можно хоть датчик жестов сделать и дополнительно датчик расстояния.

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

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

Я лампу делал на ИК-датчике Sharp GP2Y0A21YK, режимы переключаются по кольцу (потому что датчик, конечно, не имеет полноценного распознавания жестов), когда проводишь рукой над датчиком в горизонтальной плоскости. Яркость, оттенок регулируются в вертикальной плоскости, как раз по контролю расстояния до ладони.
Учитывая стоимость apds9960, то не вижу смысла в самодельном датчике.
Я и не говорил ничего о самодельном датчике. Sharp GP2Y0A21YK — это промышленный датчик. Но дело даже не в этом, просто вы почему-то считаете, что ИК не позволяет определять расстояние, вот и все.

Если станешь использавать ESP8266, тогда не подключай WI FI, иначе динамическое отображение эфектов станет прерывчато, по причине требования ресурсов микроконтроллера для обслуживания функций WIFI. Нужно использовать двухядерную ESP32, где второе ядро самостоятельно обслуживает WIFI.

Спасибо, учту этот факт
Если станешь использовать ESP8266, тогда не подключай WI FI, иначе динамическое отображение эффектов станет прерывисто, по причине требования ресурсов микроконтроллера для обслуживания функций WIFI.

поди библиотека NeoPixel? У нее на esp8266 импульсы для WS2812 софтварно генерируются. Можно попробовать задействовать I2S с DMA или UART1 аппаратным FIFO, тогда никаких рывков не будет.

Нужно использовать двухядерную ESP32, где второе ядро самостоятельно обслуживает WIFI.

Для esp32 некоторые версии NeoPixel используют аппаратную часть — RMI для генерирования импульсов для WS2812, второе ядро тут совсем ни причем.
А вот если поддержку RMI выключить то на esp32 оно даже работает без заеданий, пока не начинаешь делать что то тяжёлое — например декодировать и воспроизводить mp3, тогда вместо красивой гирлянды получаем непонятный стробоскоп.

Но если для управления нужно протягивать руку в сторону светильника. — почему не протянуть ее чуть-чуть дальше? Можно вместо датчика движения взять сенсорные кнопки, это надёжнее. Можно поставить их 20 шт, управлять светом в одно нажатие удобнее.

Заглянул в код библиотеки. Он показался знакомым (тоже игрался с датчиком) обилием подобных фрагментов:


    if( !setMode(POWER, 1) ) {
        return false;
    }

    return true;

Лёгким движением руки 5 строчек превращаются в одну:


return !!setMode(POWER, 1);
НИКОГДА так не делайте.
Можно узнать почему?
Потому что перевод целого в булево при помощи двойного отрицания — это:
1. Ненаглядно и не очевидно для читателя.
2. Компиляторо-зависимо
3. И (что прикольно) медленнее исполняется.
Наверное тогда уж так:
return setMode(POWER, 1);

Зачем две подряд логические инверсии? Чтобы именно true/false на выходе получить? Но это не нужно. false = 0, true !=0
true/false на выходе получить? Но это не нужно.

Согласен, здесь совершенно не нужно. Машинально написал.
Бывают ситуации, когда нужно что-то явно привести к bool, а "!!" известное сокращение для этого.

"Бывают ситуации, когда нужно что-то явно привести к bool"


Оно и так приведется. В потрохах системных include есть конструкция


define true 1
define false 0

'"!!" известное сокращение для этого.'


Вряд ли. Если хочется подчеркнуть, что тут приведение к bool, лучше так:


return (bool)setMode(POWER, 1);

Мне кажется самым читабельным и понятным вариант
return setMode(POWER, 1) != 0;

Предположу что если поставить несколько датчиков то вероятность что случайные прерывания у них совпадут будет весьма низкой.
Что скажите о такой идее?

Когда же прекратят называть схемой, то что ей не является.

Я же не написал, что это принципиальная схема. Это общая схема.
Если Вы считаете специалистом в этом вопросе, то разъясните пожалуйста?
Приведенный в статье рисунок соединения разноцветными проводками, это даже не общая схема. На Хабре есть статья по типам электрических схем.
А в целом получилось хорошее изделие.

Такие схемы рисуют в программе Fritzing. Не по ГОСТу, но своеобразный стандарт.

У вас в статье все схемы электрические, а у автора схема в общем понимании этого слова (или я пропустил момент когда она потеряла «электрическая»)

Схема — изложение, изображение, представление чего-либо в самых общих чертах, упрощённо
В статье идет описание электронного устройства, следовательно, схема должна быть не эфемерная, а связанная с электронным устройством (электрическая, структурная и т.д.). А в статье приведена картинка разноцветная.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории