Pull to refresh

Бесконтактный, оптический выключатель освещения со звуковым эффектом на Arduino

Reading time4 min
Views18K


Всем привет!

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

С тех пор выключатель трудится у меня круглыми сутками на протяжении 9 лет. Что самое интересное, за все это время, он не вышел из строя и даже ни разу не подвис, а также у него никогда не было ложных срабатываний. В общем он хорошо себя зарекомендовал и я с уверенностью могу его Вам рекомендовать для самостоятельной сборки.
Если Вам интересны подробности, то прошу под кат.

У меня в коридоре смонтировано 7 светильников.



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



Саму плату я спрятал в пространстве между гипсокартоном и потолком, благо места там больше чем достаточно.



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



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



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



Запитал я эту плату обычным зарядным устройством от телефона.



Основой всего устройства является контроллер Arduino Nano V.3, но можно так же использовать любые другие платы, с микроконтроллером ATmega328.



ИК светодиод с фототранзистором можно взять от датчика препятствий, но не обязательно их выпаивать, достаточно перерезать лишние дорожки и припаять к ним 3 провода. Если у вас уже есть где-то ранее выпаянные детали, то перед использованием, лучше сначала проверить их на работоспособность. Инфракрасный светодиод нужно подключить к напряжению 5 В через токоограничивающий резистор 120 Ом и посмотреть на него через камеру телефона, он должен светиться фиолетовым светом. Для проверки фототранзистора понадобится любой тестер с функцией прозвонки проводников. Переводим тестер в режим прозвонки, а выводы фототранзистора подключаем к щупам тестера. После чего нужно к нему вплотную поднести любой пульт от бытовой техники и нажать любую кнопку. В ответ раздастся прерывистый пищащий звук.



9 лет назад я не нашел подходящих твердотельных реле и мне пришлось их собирать самому из радио-комплектующих. Но на данный момент проще купить 8-канальный модуль твердотельных реле как на изображении, чем заниматься тратой времени на поиск этих компонентов.



Работает выключатель следующим образом


Arduino с выхода D5 постоянно выдает ШИМ сигнал с частотой примерно 977 Гц. К этому выходу через токоограничивающий резистор 82 Ом подключен светодиод, излучающий сигнал в инфракрасном диапазоне. Фототранзистор, подключенный к входу D2 детектирует отраженный от руки ИК сигнал и проверяет его на достоверность. Если сигнал из 20-ти или больше идущих подряд периодов соответствует частоте 977 Гц, то тогда контроллер включает по очереди все 7 светильников и начинает воспроизводить звуковой эффект через ШИМ выход D11. Все то же самое происходит и при выключении.



Воспроизведение звуков


Для воспроизведения звуковых эффектов используется формат WAVE без сжатия, с частотой 16000 Гц и глубиной 8 бит, но при воспроизведении данного формата с использованием ШИМ, в аудио тракте наблюдается неприятный свист и шипение. Поэтому для улучшения качества воспроизведения, я в коде использовал линейную интерполяцию. При которой, выборка семплов происходит на частоте 62.5 кГц и между оригинальными выборками вставляются еще 3 дополнительных семпла, рассчитанных методом линейной интерполяции. Таким образом на выходе снижается шум квантования, пропадает свист, улучшается качество звука и для воспроизведения не обязательно использовать дополнительные RC фильтры.



Вместо динамика я использовал старую, маленькую компьютерную колонку без встроенного усилителя.



Для конвертирования Wave файлов в Си код, можно воспользоваться онлайн конвертером.

Схема


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



Компоненты для сборки


1 — Arduino Nano V.3
2 — Датчик препятствий
3 — 8-канальный модуль реле
4 — Резисторы 82 Ом и 1 кОм
5 — Динамик 0,5-3 Вт
6 — Любой N-P-N транзистор с допустимым током не менее 500 мА

Код для Arduino


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

В коде вынесены несколько констант, которые можно изменить перед прошивкой.

Константа power_ir — отвечает за дистанцию срабатывания выключателя, может принимать значения от минимума 20 и до максимума 200. Требуемое Вам значение можно определить экспериментальным путем.

lamp_num — определяет количество используемых Вами ламп. Минимальное число лампочек не может быть меньше 1, а максимальное не более 7. Если подправить код, то можно увеличить до 15.
lamp_delay — это задержка между последовательными включениями ламп, которая выражена в миллисекундах и может начинаться от 0 и до 4 294 967 295 мс. Хотя я не думаю, что такие огромные задержки кому то понадобятся.

Видео


Для просмотра видеоролика кликните по изображению.


Заключение


В заключении хотелось бы добавить, что я очень удивлен, что микроконтроллер без WDT за 9 лет ни разу не подвис. По этой же причине я не стал править код и добавлять в него WDT, так как Arduino со старыми bootloader не умеют работать с ним.

Спасибо, что дочитали до конца!

Если Вам понравилась моя статья — то поддержите ее лайком и подпиской.

Если у Вас есть вопросы, то можете их задать в комментариях.
Tags:
Hubs:
Total votes 23: ↑22 and ↓1+21
Comments71

Articles