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

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 для просмотра.

Комментарии   

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

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

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

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

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

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


а можно ли хоть 10 кнопочек ? то есть 4 добавить
Ответить | Ответить с цитатой | Цитировать
# ZQZ 03.04.2012 23:23
А как правильно выставить фьюзы :-? ???
Ответить | Ответить с цитатой | Цитировать
# Leshiy71 04.04.2012 06:41
Цитирую ZQZ:
А как правильно выставить фьюзы :-? ???

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

Можно но только потребуется корректировка программы.
Ответить | Ответить с цитатой | Цитировать
# slava 05.04.2012 15:28
Понятно, значит не получиться у меня заменить 88 на 8, сам я программу откорректироват ь не смогу.
Ответить | Ответить с цитатой | Цитировать
# vlad 11.10.2012 11:19
добавте код под WinAVR, если не сложно. Очень нужно)
Ответить | Ответить с цитатой | Цитировать
# Stas 25.12.2012 06:26
А еще этот пульт не работает с телевизорами JVC, видимо у них протокол немного другой, а так - классная штука. Спасибо Игорь за ваш труд!
Ответить | Ответить с цитатой | Цитировать
# Влад 29.03.2013 10:56
я так и не понял, как кнопки нужно подключать?
2 нижних контакта в землю, один верхний - к контроллеру и другой к конденсатору? так что ли?
Ответить | Ответить с цитатой | Цитировать
# Pashgan 29.03.2013 20:20
У кнопки четыре вывода. Одна пара контактов (они должны звониться между собой) сажается на землю, вторая соединена с контроллером и конденсатором.
Ответить | Ответить с цитатой | Цитировать
# Stas 29.03.2013 17:35
Конденсаторы параллельно кнопкам, где какие выводы у кнопок вызванивайте мультиметром.
Ответить | Ответить с цитатой | Цитировать
# Dмитрий 04.04.2013 18:05
Автор, можешь скинуть разводку для этого устройства? Буду благодарен.
Ответить | Ответить с цитатой | Цитировать
# JoJo 04.04.2013 18:51
В конце статьи же написано Цитата:
К сожалению файл печатной платы был утерян, но при желании читатель может разработать свою топологию.
Ответить | Ответить с цитатой | Цитировать
# igor727 19.09.2013 07:24
Fuse: HighFuse = 0xDF, LowFuse = 0xFF
Ответить | Ответить с цитатой | Цитировать
# igor727 19.09.2013 07:24
где ставить какие галочки смотреть тут: http://www.engbedded.com/fusecalc
Ответить | Ответить с цитатой | Цитировать
# влад 20.07.2014 01:21
класс !!чем то напоминает кодграббер :)
Ответить | Ответить с цитатой | Цитировать
# IOPA4 01.10.2014 11:21
Подскажите, пожалуйста, что нужно изменить в коде, чтобы скомпилировать под Atmega8. Касательно:
Config Timer1 = Timer , Prescale = 8
Config Timer0 = Timer , Prescale = 64
Pcmsk0 = &B00011110
Pcmsk1 = &B00000011
Ответить | Ответить с цитатой | Цитировать
# IOPA4 05.10.2014 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 05.02.2015 15:27
Что-то не получается открыть. Не могли б скинуть на почту файл?))
Ответить | Ответить с цитатой | Цитировать
# ra0wbj 05.03.2015 06:43
вот печатка похожая по топологии на авторскую
http://dfiles.ru/files/5robzu31k
Ответить | Ответить с цитатой | Цитировать
# Угон Камазофф 22.04.2015 17:04
Ништяк тема, братишка! Я замастырил из энтой лентяйки сканнер авто сигналок. С корешем вощем пять тачек уже угнали кароче.
Ответить | Ответить с цитатой | Цитировать
# Joanna 26.04.2015 08:36
Thanks very interesting blog!

Also visit my blog :: supplement: https://twitter.com/supplenutrition
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Защитный код
Обновить