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

Хотелось бы представить вашему вниманию мою самодельную светодиодную подсветку на микроконтроллере Attiny85. (видео в конце)

Умная подсветка рабочей зоны на кухне и борьба с ложными срабатываниями Своими руками, Arduino, Видео, Длиннопост, Рукоделие с процессом

Функционал
Подсветка умеет включаться ручную, причем бесконтактно - поднесением руки к коробке. Такое решение показалось мне очень разумным, потому что на кухне во время готовки руки могут быть мокрыми, в муке или ещё в чем. В темноте подсветка реагирует на движения и плавно включается на малой яркости. С одной стороны, этого достаточно, чтобы видеть куда идешь, с другой - не слепит, когда встаешь среди ночи попить водички. Настроил время автовключения на одну минуту. Каждое движение перезапускает таймер, поэтому лента светит пока я брожу по кухне и гаснет только когда ухожу в другую комнату. Если ставить меньше минуты - подсветка может погаснуть, пока я на кухне и придется ей станцевать, чтобы снова включилась. Кухня у меня проходная, поэтому функция оказалась офигительно полезной, так как избавляет от необходимости включать верхний свет. Правда, есть и минусы - в других местах квартиры я иногда подтупливаю, ожидая, что свет сам включиться или забываю выключить подсветку после ручного включения. Поэтому дописал еще функцию автовыключения, если на кухне никого нет полчаса. Работает аналогично "ночному режиму" - каждое движение перезапускает получасовой таймер.


Как это работает

Всё это реализауется при помощи датчика препятствия, датчика движения и фоторезистора. Ленту взял самую яркую из тех, что были у приятеля в магазине - 240 светодиодов на метр, 12v. Блок питания 12v 4A и всю электронику засунул в распределительную коробку. Там же мосфет irfz44n для управления лентой, стабилизатор L7805cv для питания электроники и микросхема Attiny85 - младший брат Atmega, который ставят на платы Arduino. Он компактный, дешёвый, имеет всего 5 выводов (2 ШИМа, 3 аналоговых и всего они могут работать как цифровые) и 8 КБ памяти. Из минусов - нет UART, поэтому данные с него в монитор порта не отправить, что осложняет отладку. Есть ещё более дешёвый вариант - Attiny13. Там всё то же самое, но памяти всего 1 КБ, что для этого проекта недостаточно. Программу можно писать в Arduino IDE как для обычной ардуинки. Для этого надо добавить поддержку Attiny85 и обзавестись программатором, или же прошить в плату Arduino скетч Arduino as ISP, который можно найти в примерах и использовать её в качестве программатора.


Нарисовал схему подключения всех компонентов:

Умная подсветка рабочей зоны на кухне и борьба с ложными срабатываниями Своими руками, Arduino, Видео, Длиннопост, Рукоделие с процессом

Attiny13 и Attiny85 не нуждаются ни в каких дополнительных компонентах, но рекомендуется ставить резистор на 10 кОм между первой и восьмой ножкой и конденсатор между пятой и восьмой - параллельно питанию. Резистор - чтобы контроллер не перезагружался от наводок, потому что первая ножка - пин перезагрузки, который ребутит контроллер, если на нём низкий уровень. Резистор подтягивает ножку к плюсу и исключает перезагрузки. Конденсатор - понятное дело для стабильного питания. Схемка простая и в реальности выглядит вот так:

Умная подсветка рабочей зоны на кухне и борьба с ложными срабатываниями Своими руками, Arduino, Видео, Длиннопост, Рукоделие с процессом

единственный датчик припаянный к плате - датчик движения. Фоторезистор и датчик препятствий подключаются к разъёмам. Лента и питание на плату подключаются через винтовые клеммы. Фоторезистор и линза датчика движения - в резиновых заглушках, датчик препятствий - в крышке коробки. Кусочек черной гофры прицепил на него, когда обнаружил, что датчик засвечивается сбоку солнцем. Это была целая эпопея.

Умная подсветка рабочей зоны на кухне и борьба с ложными срабатываниями Своими руками, Arduino, Видео, Длиннопост, Рукоделие с процессом


Проблема с датчиком препятствий
Обнаружилось, что лента сама включается и выключается как ей вздумается. Пытался подобрать значение, на котором бы срабатывал датчик препятствий, всё тщетно. Козырёк из гофры помогал только от прямого засвета сбоку, но отраженный от столешницы солнечный свет всё равно попадал на датчик. Тут, наверное, надо немножко пояснить как он работает.

Умная подсветка рабочей зоны на кухне и борьба с ложными срабатываниями Своими руками, Arduino, Видео, Длиннопост, Рукоделие с процессом

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


Как бороться с ложными срабатываниями
Наконец, додумался как определять ложные срабатывания, причём аж тремя способами. Основной - программно менять значение срабатывания датчика в зависимости от освещения. Если посмотреть на фото выше, то увидим 4 вывода - VCC, GND, DO и AO. Первые два - питание, DO - цифровой вывод, на котором 0V, когда нет препятствия и 5V, когда оно есть (порог срабатывания настраивается резистором-крутилкой с другой стороны платы), а вот AO - аналоговый вывод. Сигнал на нём есть всегда, ардуино его понимает как число от 0 до 1023. Таким образом, программа по значению с фоторезистора научилась вычислять значение, на котором сработает датчик. Чем больше света попадает на фоторезистор, тем ниже значение, на котором будет засчитано срабатывание датчика. Если этот метод по каким-то причинам не сработал, есть ещё два - определение ложного срабатывания по движению и по времени. С движением все просто - программа проверяет, есть ли движение во время срабатывания датчика. Если движения нет - лента не включается. Всё логично, чтобы включить ленту - надо к ней подойти, а значит датчик движения по-любому сработает. Таким образом, когда на кухне никого нет - лента точно не включится. Потом я подумал - если бы я был программой и из органов чувств имел только этот китайский датчик препятствий, то как бы я мог отличать засвет, от включения человеком. До меня, наконец дошло, что когда я включаю подсветку, то не задумываясь, убираю руку от датчика, как только включается свет. Вот оно! ВРЕМЯ воздействия на датчик отличается. Подношу руку - датчик фиксирует препятствие меньше секунды, солнце так не умеет. Даже если, как пел Цой, по небу плывут облака, закрывая небесный свет, все равно засвет будет секунд 10, а то и больше. Теперь программа научилась засекать время, в течении которого датчик выдаёт сигнал срабатывания. Если оно больше двух с половиной секунд - лента выключается. Так мне удалось победить ложные срабатывания и в моей душе воцарился покой.


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

Спасибо, что дочитали, или досмотрели :)

Рукодельники

52.4K поста58.4K подписчиков

Добавить пост

Правила сообщества

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

0. Соблюдайте основные правила Пикабу.


1. Будьте вежливы, старайтесь писать грамотно.


2. В публикациях используйте четкие и красивые фотографии.


3. Автор поста с тегом [моё] может оставить ссылку на свой профиль, группу или канал на других источниках, при условии, что ссылки (активные и не активные) не ведут на прямые продажи. Допускается не больше четырёх ссылок и только в конце поста (п. 8.5 основных правил).


Запрещены:

-ссылки рекламного характера/спам;

-ссылки, ведущие на магазины с указанием стоимости товара/услуги;

-ссылки, ведущие на призывы, покупки, продажи, подписки, репосты, голосование и тому подобное.

(нарушение основных правил сайта, п.8.1 и п. 8.2).

При переходе по ссылке запрещено наличие активных (кликабельных) ссылок, ведущих на вышеперечисленное в п.3, содержание таких ключевых слов как «товар», «услуга», «купить», «продам», «в наличии», «под заказ» и т.п.


3.1 Размещение контактов автора (самим автором или другими пользователями) в комментариях запрещено и подлежит удалению (п. 9.1 и 9.3 основных правил).


4. Обязательным для авторов является наличие технических характеристик изделия в публикациях (материалы, техники, авторские приемы, размеры, времязатраты и прочее) в текстовом виде.

Также помечайте свою работу тегом «Рукоделие с процессом» или «Рукоделие без процесса».


5. Пост-видео, пост-фото без текстового описания переносится в общую ленту. Даже если в видео показан подробный процесс изготовления, делайте краткое описание для тех, у кого нет возможности/желания смотреть видео.

Администрация оставляет за собой право решать, насколько описание соответствует п. 5.


6. Посты с нарушениями без предупреждения переносятся в общую ленту.

За неоднократные нарушения автор получает бан.

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