Pull to refresh

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

Programming microcontrollersDeveloping for ArduinoPopular scienceDIYElectronics for beginners


Всем привет!

Сегодня статья про бесконтактный выключатель со звуковым эффектом, который был сделан мной 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:своими рукамиduino.ruсделай самв домашних условияхардуино проектыarduino проектыcyberlabдомашние самоделкиdiyардуиноarduinoэкспериментыумныйсенсорныйбесконтактныйвыключательсветсветильникдомлампаосвещениеоптическийдатчиксенсоринтерьер
Hubs: Programming microcontrollers Developing for Arduino Popular science DIY Electronics for beginners
Total votes 23: ↑22 and ↓1+21
Views11K
Comments Comments 71

Popular right now