Миниатюрный универсальный ИК пульт дистанционного управления

17/07/2011 - 07:27 Игорь Журавлев

Предыстория

   Собираюсь с Вами поделиться конструкцией одного маленького но очень полезного устройства. Оно было специально разработано и использовалось для незаметного убавления громкости музыкального центра в общественном месте, где часто бываю. Некоторые молодые люди, тоже посещающие это место, не понимали словами и разговорами что чрезмерно громкая музыка может кому то мешать и по этому было принято кардинальное  решение - вынести напрочь им мозг :)
  Идея заключалась в создании миниатюрного ИК пульта управления способного копировать коды команд с оригинальных ИК пультов от бытовой аппаратуры. При этом пульт должен поддерживать разные версии протоколов (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   

# JoJo 2011-07-18 20:26
Игорь, молодец. Хорошая работа. Придумать бы еще средство противодействия для соседей по дому.
# igor727 2011-07-18 21:09
Есть Вариант например передавать в сеть на частоте 100 кГц прямоугольные импульсы или синус мощностью 10-100-и Ватт. мы на работе когда разрабатывали свой PLC модем так попалили предки у включенного в розетку оборудования (предохранитель после него стоящая емкость 0,1-0,22мкФ образовали контур тока по ВЧ). Или другой вариант передавать 2 мощных сигнала с разностью частот. Усилок поймает эти 2 сигнала на нелинейных эелементах произойдет вычитание частот и если например разность будет в 1 кГц то у соседей из динамика должен по идеи раздаться звонкий ПИ )))
# Денис987 2014-03-14 14:06
Игорь, добрый день.
А можно про надоедливых соседей схемку по подробнее. Если не тяжело конечно.
# Pashgan 2011-07-19 10:32
Игорь, а ты схему в Schemagee рисовал? Я пользуюсь этой программой на работе, но недавно начал переходить на Altium.
# igor727 2011-07-19 16:23
Да в Sсhemagee. удобная програмка. На Альтиум были попытки но пока не до него.
# Seriy 2011-07-22 11:13
Игорь а почему код написан на Bascom? Чем он лучше Iara или Gcc?
# человек 2011-07-22 12:16
Что за Bascom(v))/? С чем его едят? Но а так всё круто смотрится..
# igor727 2011-07-22 19:34
Bascom это язык высокого уровня по сути есть Basic для AVR. Тут дело вкуса кому на чем больше нравится писать. Я очень долго писал на Ассемблере но когда проекты пошли достаточно сложные пришлось переходить на язык более высокого уровня, что бы не тратить время на написание мелочей а заниматься именно "ядром" программы. Из всех опробованных понравился IAR и Bascom. Но Bascom очень порадовал: Синтаксис Basic-а, много готовых функций, компактный генерируемый код, приятный интерфейс. Что еще нужно.
# DVF 2011-07-26 08:36
Самое интересное впереди - момент, когда автора разоблачат :lol:
# igor727 2011-07-26 08:43
Там дошло до того что у меня и товарища стали проявляться сверхспособност и. Ну типа крутишь пальцем в воздухе перед мафоном а тот убавляется. Рукой махнул выключился. Пальцем счелкнул включился.... А пульт то (оригинальный) вон он на мафоне лежит.... СИЛА МЫСЛИ ))) Это все происходит в тренажерном зале. Мы и говорим что надо тренеровать не только мышцы но и силу мысли ))) После этого люди стали догадываться что это мы делаем но не понимали КАК... )))
# rust 2011-07-30 14:43
А если вместо IR диода RF датчик прикрутить, то можно и другие коды сканить, сигналки авто и т.д.)) ...спс за исходник)))
# igor727 2011-07-30 19:17
Quoting rust:
А если вместо IR диода RF датчик прикрутить, то можно и другие коды сканить, сигналки авто и т.д.)) ...спс за исходник)))

Если только во благо человечества ;)
# Leshiy71 2012-03-17 18:56
Собрал, работает супер! Давно хотел такой пульт иметь, а вот теперь как-то аж расстроился, пульт в руках и работает 8-)))) igor727 а можно попросить вас добавить количество кнопок? 5 кнопок решило текущую проблему но захотелось уже и для дома такой сделать.
# igor727 2012-04-05 15:17
Quoting Leshiy71:
Собрал, работает супер! Давно хотел такой пульт иметь, а вот теперь как-то аж расстроился, пульт в руках и работает 8-)))) igor727 а можно попросить вас добавить количество кнопок? 5 кнопок решило текущую проблему но захотелось уже и для дома такой сделать.

А сколько необходимо кнопок ?
# Leshiy71 2012-04-05 16:11
Quoting igor727:
Quoting Leshiy71:
Собрал, работает супер! Давно хотел такой пульт иметь, а вот теперь как-то аж расстроился, пульт в руках и работает 8-)))) igor727 а можно попросить вас добавить количество кнопок? 5 кнопок решило текущую проблему но захотелось уже и для дома такой сделать.

А сколько необходимо кнопок ?

да по максимуму, на сколько у вас желания хватит. хотелось бы телевизор, двд, спутниковое туда же, для компа пару кнопок, освещение и т.д. насколько душа развернется :) было бы не плохо организовать алгоритм зарядки литий-ионных акб, это уже в мечтах конечно. силовую часть если нужно могу посчиталь сейчас(хотя тут можно и LTADY подключить отдельной цепью). еще идеи принимаются? подсветка клавиатуры с зависимостью от внешнего освещения с реакцией на любое нажатие. свободных портов много еще, жалко что просто так болтаются.
# denisyurevich 2012-09-20 21:45
Quoting igor727:
Quoting Leshiy71:
Собрал, работает супер! Давно хотел такой пульт иметь, а вот теперь как-то аж расстроился, пульт в руках и работает 8-)))) igor727 а можно попросить вас добавить количество кнопок? 5 кнопок решило текущую проблему но захотелось уже и для дома такой сделать.

А сколько необходимо кнопок ?


а можно ли хоть 10 кнопочек ? то есть 4 добавить
# ZQZ 2012-04-03 23:23
А как правильно выставить фьюзы :-? ???
# Leshiy71 2012-04-04 06:41
Quoting ZQZ:
А как правильно выставить фьюзы :-? ???

посмотрите в архиве есть, там же и печатка под корпус от китайского пульта для автомобильного мп3. может пригодится кому.
http://depositfiles.com/files/30230sgac
# slava 2012-04-05 14:44
Можно-ли заменить atmega88 на atmega8 ?
# igor727 2012-04-05 15:15
Quoting slava:
Можно-ли заменить atmega88 на atmega8 ?

Можно но только потребуется корректировка программы.
# slava 2012-04-05 15:28
Понятно, значит не получиться у меня заменить 88 на 8, сам я программу откорректироват ь не смогу.
# vlad 2012-10-11 11:19
добавте код под WinAVR, если не сложно. Очень нужно)
# Stas 2012-12-25 06:26
А еще этот пульт не работает с телевизорами JVC, видимо у них протокол немного другой, а так - классная штука. Спасибо Игорь за ваш труд!
# Влад 2013-03-29 10:56
я так и не понял, как кнопки нужно подключать?
2 нижних контакта в землю, один верхний - к контроллеру и другой к конденсатору? так что ли?
# Pashgan 2013-03-29 20:20
У кнопки четыре вывода. Одна пара контактов (они должны звониться между собой) сажается на землю, вторая соединена с контроллером и конденсатором.
# Stas 2013-03-29 17:35
Конденсаторы параллельно кнопкам, где какие выводы у кнопок вызванивайте мультиметром.
# Dмитрий 2013-04-04 18:05
Автор, можешь скинуть разводку для этого устройства? Буду благодарен.
# JoJo 2013-04-04 18:51
В конце статьи же написано Quote:
К сожалению файл печатной платы был утерян, но при желании читатель может разработать свою топологию.
# igor727 2013-09-19 07:24
Fuse: HighFuse = 0xDF, LowFuse = 0xFF
# igor727 2013-09-19 07:24
где ставить какие галочки смотреть тут: http://www.engbedded.com/fusecalc
# влад 2014-07-20 01:21
класс !!чем то напоминает кодграббер :)
# IOPA4 2014-10-01 11:21
Подскажите, пожалуйста, что нужно изменить в коде, чтобы скомпилировать под Atmega8. Касательно:
Config Timer1 = Timer , Prescale = 8
Config Timer0 = Timer , Prescale = 64
Pcmsk0 = &B00011110
Pcmsk1 = &B00000011
# IOPA4 2014-10-05 15:20
Мне понадобился пульт на шесть рабочих кнопок:
1Кн - Вкл. TV
2Кн - Вкл. ресивера
3Кн - Каналы ресивера(+)
4Кн - Каналы ресивера(-)
5Кн - Громкость(+)
6Кн - Громкость(-)
7Кн - Программировани е пульта

Переделал исходник, шесть кнопок режимов. Вместо кнопки программировани я перемычка. Проект под Atmega168V - какой был. Легко можно перекомпилирова ть под Atmega88. В архиве исходник, прошивки и проект под Proteus вместе с ПП под DIP.

http://dfiles.ru/files/g2l5s7cd9: http://dfiles.ru/files/g2l5s7cd9
# lada 2015-02-05 15:27
Что-то не получается открыть. Не могли б скинуть на почту файл?))
# ra0wbj 2015-03-05 06:43
вот печатка похожая по топологии на авторскую
http://dfiles.ru/files/5robzu31k
# Угон Камазофф 2015-04-22 17:04
Ништяк тема, братишка! Я замастырил из энтой лентяйки сканнер авто сигналок. С корешем вощем пять тачек уже угнали кароче.
# Joanna 2015-04-26 08:36
Thanks very interesting blog!

Also visit my blog :: supplement: https://twitter.com/supplenutrition

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