Предыстория
Собираюсь с Вами поделиться конструкцией одного маленького но очень полезного устройства. Оно было специально разработано и использовалось для незаметного убавления громкости музыкального центра в общественном месте, где часто бываю. Некоторые молодые люди, тоже посещающие это место, не понимали словами и разговорами что чрезмерно громкая музыка может кому то мешать и по этому было принято кардинальное решение - вынести напрочь им мозг :)
Идея заключалась в создании миниатюрного ИК пульта управления способного копировать коды команд с оригинальных ИК пультов от бытовой аппаратуры. При этом пульт должен поддерживать разные версии протоколов (RC5, Daewoo, JVC, Panasonic и т.д.), т.е. быть универсальным. Поскольку мне не было известно, по какому протоколу работал оригинальный пульт.
Описание
Принципиальная схема миниатюрного универсального пульта дистанционного управления представлена на рис.1.
Рис.1. Принципиальная схема миниатюрного универсального ИК пульта дистанционного управления.
Основой схемы является микроконтроллер ATMega88, ИК-фотоприемник, ИК-светодиод и 6 кнопок управления.
Схема работает следующим образом. При удержании кнопки SB6 нажатой в течении 2.5 сек, активируется режим программирования, светодиод HL2 начинает быстро моргать сигнализируя о необходимости нажать одну из кнопок SB1 – SB5 для программирования на нее команды с оригинального пульта управления. Если ни одна из указанных кнопок не была нажата, то через 10 сек пульт переходит в ждущий режим с низким энергопотреблением (20 мкА). По нажатию одной из кнопок SB1- SB5, в указанный промежуток времени, пульт переходит в режим ожидания кодовой посылки при этом светодиод HL2 моргает медленно. Далее в течение 10 сек с расстояния 10 - 100 см от фотоприемника необходимо подать команду с оригинально пульта управления путем кратковременного нажатия на нем желаемой клавиши. В случае успешной записи светодиод будет гореть в течении 2 сек, иначе часто помигает.
Теперь нажимая на клавиши SB1-SB5 можно осуществлять управление аппаратурой с миниатюрного пульта, так как будто бы это делалось с оригинального пульта. Светодиод HL2 индицирует передачу команды. Непрерывный режим включается одновременным нажатием клавиш SB1-SB5 и SB6. Отключается нажатием клавиши SB6.
Программа для микроконтроллера написана в среде Bascom. Универсальность пульта управления перед различными протоколами достигается за счет алгоритма работы программы. Если проанализировать несколько версий ИК протоколов передачи команд управления (Рис.2 – Рис.5. http://users.telenet.be/davshomepage), то можно найти в них сходство.
Рис.2. Протокол RC-5.
Рис.3. Протокол Daewoo.
Рис.4. Протокол JVC.
Рис.5. Протокол Panasonic.
У всех протоколов есть старт импульс представляющий собой последовательность сигнала высокого и низкого уровня определенной длительности. Внутри кодовой комбинации имеются повторяющиеся между собой по длительности уровни нулей и единиц. Отличие между протоколами заключается в рабочей частоте фотоприемника и числа комбинации нулей и единиц в посылке, их длительностей и длительности старт импульса. Как правило рабочая частота фотоприемника равняется 36 или 38 кГц. На небольшом расстоянии фотоприемник и пульт с разными рабочими частотами способны “увидеть” друг друга. На рис. 2-5 показаны огибающие ВЧ импульсов передаваемых пультами на вход фотоприемника, аналогичный сигнал присутствует на выходе фотоприемника только в инверсной форме (помните об этом).
В процессе программирования кнопки в режиме ожидания кодовой посылки программой отслеживается появление логического нуля на выходе фотоприемника. Так как фотоприемник выдает инверсный сигнал, то появлению логического нуля будет соответствовать приход старт импульса. В этот момент обнуляется счетчик Timer1 отсчитывающий время до момента прихода высокого уровня с фотоприемника, соответствующего началу паузы в старт импульсе. Значение счетчика сохраняется в ОЗУ микроконтроллера (переменная Length_start), счетчик сбрасывается, и начинается отсчет паузы старт импульса. Отсчет происходит до момента прихода низкого уровня на выходе фотоприемника, что соответствует началу первого информационного бита. Длительность паузы так же сохраняется в ОЗУ (переменная Length_pause). Далее, аналогичным образом, принимаются первые длительности высокого и низкого уровней информационных битов, которые также сохраняются в ОЗУ в переменные Length_00 и Length_10, соответственно! Существует так же массив, в который первый высокий уровень на выходе фотоприемника сохраняется как код 00, а первый низкий уровень как код 10 (первое число это инверсное значение уровня, второе порядковый номер). Далее в процессе приема длительности высокого и низкого уровней сравниваются с заданной точностью с длительностями Length_00 и Length_10, соответственно. В случае если длительность совпадает, то она также добавляется в массив как код 00 или 10, соответственно. В случае если принятая длительность не совпадает, то она сохраняется в ОЗУ для высокого уровня в переменной Length_01 или для низкого в переменной Length_11. Соответственно в массив данные длительности записываются как коды 01 и 11. Например, в протоколе Panasonic (Рис.5) присутствуют два вида длительностей высокого уровня Length_00, Length_01 (напоминаю, на диаграмме сигнал инверсный относительно сигнала на выходе фотоприемника), и один вид длительности низкого уровня Length_10. Переменная Length_11 не используется. Для протокола RC5 (рис.2) будут задействованы уже все переменные Length. В процессе приема происходит проверка счетчика на превышение значения 20 мс. Таким образом, это является признаком конца кодовой посылки. Так же параллельно ведется вычисление усредненного значения длительностей Length_00, Length_01, Length_10 и Length_11, что добавляет лучшей точности в воспроизведении посылки с миниатюрного пульта. Если в процессе приема появляется еще какая то третья длительность из ряда Length_00, Length_01 или Length_10, Length_11, то это принимается за ошибку и прием прекращается, информируя пользователя об ошибке частым миганием светодиода HL2.
После завершения приема, все длительности и массив сохраняются в соответствующую для кнопки SB1-SB5 область EEPROM микроконтроллера.
При передаче команды с миниатюрного пульта управления происходит обратный процесс. Сначала передается старт импульс в виде ВЧ импульсов частотой 38 кГц, генерируемых при помощи счетчика Timer2, и паузы затем из массива поочередно извлекаются по 2 бита и передается ВЧ импульсы или пауза соответствующей им длительностью.
У данного алгоритма есть свой недостаток – он боится энергосберегающих ламп, поскольку питание лампы в них происходит током с частотой порядка 30-60 кГц то фотоприемник способен уловить световую пульсацию при большой яркости лампы или близком положении к ней.
Испытания пульта с различной бытовой аппаратурой показали хорошие результаты, единственное, что не работает с ним это пульты от кондиционеров. Полагаю в них либо большая разрядность кода, либо другая рабочая частота фотоприемника.
В том самом помещении, мне было очень забавно наблюдать как молодые люди крутились вокруг муз-центра и не понимали почему он сам убавляет громкость или выключается. Я над ними подшучивал и говорил, что он перегревается от слишком большой громкости, сделайте тише и будет все нормально :)))
Пульт может найти применения в быту и в более мирных целях ;)
К сожалению файл печатной платы был утерян, но при желании читатель может разработать свою топологию. Привожу фото получившейся конструкции.
Работу устройства можно посмотреть на YouTube
Файлы
Проект для Bascom-AVR - IkPult.rar
П.С.:
С подобным алгоритмом сохранения кодовой посылки от ИК пультов 4 годами ранее было реализовано устройство дистанционного управления освещением с адаптацией к пультам от бытовой аппаратуры.Спасибо за Внимание!
Огромная благодарность Pashgan за отличный сайт!
Игорь Журавлев, специально для http://chipenable.ru/
E-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Comments
А можно про надоедливых соседей схемку по подробнее. Если не тяжело конечно.
Если только во благо человечества ;)
А сколько необходимо кнопок ?
да по максимуму, на сколько у вас желания хватит. хотелось бы телевизор, двд, спутниковое туда же, для компа пару кнопок, освещение и т.д. насколько душа развернется :) было бы не плохо организовать алгоритм зарядки литий-ионных акб, это уже в мечтах конечно. силовую часть если нужно могу посчиталь сейчас(хотя тут можно и LTADY подключить отдельной цепью). еще идеи принимаются? подсветка клавиатуры с зависимостью от внешнего освещения с реакцией на любое нажатие. свободных портов много еще, жалко что просто так болтаются.
а можно ли хоть 10 кнопочек ? то есть 4 добавить
посмотрите в архиве есть, там же и печатка под корпус от китайского пульта для автомобильного мп3. может пригодится кому.
http://depositfiles.com/files/30230sgac
Можно но только потребуется корректировка программы.
2 нижних контакта в землю, один верхний - к контроллеру и другой к конденсатору? так что ли?
Config Timer1 = Timer , Prescale = 8
Config Timer0 = Timer , Prescale = 64
Pcmsk0 = &B00011110
Pcmsk1 = &B00000011
1Кн - Вкл. TV
2Кн - Вкл. ресивера
3Кн - Каналы ресивера(+)
4Кн - Каналы ресивера(-)
5Кн - Громкость(+)
6Кн - Громкость(-)
7Кн - Программировани е пульта
Переделал исходник, шесть кнопок режимов. Вместо кнопки программировани я перемычка. Проект под Atmega168V - какой был. Легко можно перекомпилирова ть под Atmega88. В архиве исходник, прошивки и проект под Proteus вместе с ПП под DIP.
http://dfiles.ru/files/g2l5s7cd9: http://dfiles.ru/files/g2l5s7cd9
http://dfiles.ru/files/5robzu31k
Also visit my blog :: supplement: https://twitter.com/supplenutrition
RSS feed for comments to this post