Всем привет!
Сегодня статья про бесконтактный выключатель с звуковым эффектом,
который был сделан мной 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 не умеют работать с ним.
Спасибо, что дочитали до конца!
Если Вам понравилась моя статья то поддержите ее лайком и
подпиской
Если у Вас есть вопросы, то можете их задать в комментариях.