Три способа управления компьютером через любой ик пульт. Схема дистанционного управления устройствами


был сделан модуль управления роботом по ИК каналу. Вот о нём я бы и хотел написать поподробнее. Так как применений этому можно найти очень много.

Собственно, что такое ИК-управление - объяснять, думаю, не нужно. Сейчас более распространено управление по Wi-Fi, Bluetooth, ZigBee. Но если вам требуется простое устройство, которое можно собрать «на коленке» при минимальных затратах, то эта статья для вас. =)


Я не буду привязывать эту статью к определённому микроконтроллеру, а опишу общие принципы работы ИК прёмо-передатчика с AVR МК.

1. Что потребуется
При создании простого ИК-управления, негласным стандартом является использование приёмника от компании Vishay TSOPxxxx и диода TSALxxxx в качестве передатчика.

В обозначении приёмников TSOP последние две цифры означают частоту (в кГц) на которой воспринимается передаваемый сигнал. Сложностей в работе с этими компонентами особых нет. Можно писать свой протокол передачи, можно воспользоваться уже готовыми решениями. В моём случае я решил связать два микроконтроллера ИК-каналом, используя USART. Принцип такой же, как если бы мы соеденили два МК обычными проводами. Нюанс только в модулировании несущей частоты и в настройке таймера.

2. Схемки
Чтобы не городить огородов, воспользуемся схемой включения TSOP из его даташита:

Выход TSOPа нужно подключить напрямую к входу (RX) USART МК.

С подключением передатчика ситуация немного другая. Так как приёмник работает только на определённой частоте, то нужно задать эту же частоту на излучателе. Это сделать не сложно запрограммировав таймер. Для ATmega16 это будет выглядить вот так:
TCCR1A=0x40;
TCCR1B=0x09;
OCR1AH=0x00;
OCR1AL=0x84;

Нужную частоту можно выразить из формулы:

OCRn - будет искомое значение, которое нужно перевести в шестнадцатеричный формат и записать в регистр OCR1A (для случая с МК ATmega16).

Теперь TSOP будет принимать наш сигнал. Но чтобы можно было использовать USART, нужно промодулировать наш сигнал. Чтобы это можно было делать - подключим ИК-диод по схеме:

3. Немного кода
Прошивки я писал в CodeVision AVR.

Вот так будет выглядеть код для передатчика:
#include
#include

Void main(void)
{
PORTB=0x00;
DDRB=0x02;

DDRC=0x00;
PORTC=0xFF;

TCCR1A=0x40;
TCCR1B=0x09;
OCR1AH=0x00;
OCR1AL=0x84; // Сюда вписываем значение для вашей частоты

// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Mode: Asynchronous
// USART Baud Rate: 2400
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0xCF;

While (1)
{

If (PINC.4 == 0x00) { putchar("S");}/* В данном случае при нажатии на кнопку, которая висит на PINC.4 МК отсылает символ "S". Который передаётся на другой контроллер через ИК.*/
};
}

Код приёмника не привожу, т.к. занимает много места, а для восприятия общих принципов кода передатчика будет, думаю, достаточно.

Помимо дистанционного управления (хотя это и так обширная область применений), можно использовать этот метод для датчиков припятствий\прохождения объектва и если таковых датчиков у вас много, а работаю они на одной частоте, то чтобы они не засвечивали друг друга можно передавать разные пакеты.

Желаю удачи! Буду рад любым вопроса\критике\предложениям;)

UPD. Решил выложить фото самого пульта, чтобы было видно, что работает девайс не только как китайские приёмники, которые подключаются к ПК. Возможности гораздо шире и универсальнее.

Рассмотренные схемы предназначены для дистанционного управления нагрузками по телефонной проводной линии, по каналам мобильной и радиосвязи, а также управления различными устройствами с помощью инфракрасного канала.

Устройство инфракрасного управления состоит из двух блоков - передатчика и приемника в возможной дальностью действия до семи метров. Схема дистанционного управления построена с использованием микроконтроллера PIC12F629, прошивку которого вы можете скачать по зеленой стрелочке чуть выше.


Основа схемы ИК передатчика микроконтроллер PIC12F629 для его правильной работы по протоколу RC5 нужна стабильная несущая частота 36 кГц, поэтому в конструкции используется внешний генератор на радиокомпонентах Q1,C1,C2.

Модулированный ИК сигнал от передатчика поступается на приемный модуль TSOP4836 и обрабатывается PIC12F629 в соответствии с прошивкой. В зависимости, от нажатой кнопки в схеме передатчика, осуществляется срабатывание нужного канала в приемнике. Реле осуществляют коммутацию нагрузки на каждом из каналов. Для прошивки микроконтроллеров используйте .

К почти любому радиозвонку достаточно легко изготовить приставку для управления любой бытовой техникой. Доработка позволяет дистанционно включать и выключать бытовой прибор, в цепь питания которого введены контакты реле

На этой странице я собрал простые и доступные для повторения схемы дистанционного управления нагрузкой на микроконтроллерах, например освещением или любыми бытовыми приборами. Прошивки и прочие дополнительные файлы к проектам вы можете найти тут-же.

Рассмотренные схемы осуществляют дистанционное управление нагрузкой. В обоих конструкциях присутствует функция программирования, дающая возможность нажатием на запрограммированную кнопку включать или выключать различную нагрузку на растоянии

Принципиальная схема передатчика показана на рисунке 1. SW1 - это модуль из восьми DIP-переклю-чателей. Он устанавливается на плату и позволяет задать индивидуальный код -восьмиразрядное двоичное число. На приемнике должен быть задан точно такой же код, иначе он не будет реагировать на команды этого передатчика. Вместо блока DIP-переключателей можно распаять обычные проволочные перемычки, но, опять же х распайка должна совпадать с распайкой перемычек на приемном блоке

Схема питается от 5 В источника питания. Цифровая микросборка CD4017 это типовой счетчик делитель на 10. Полученный сигнал с датчика следует на микросхему, в соответствии от сигнала на выходах Q0-Q9 задается высокое состояние, в нашем схемотехническом примере к выходу Q1 подсоединено реле через биполярный транзистор T2. В высоковольтную цепь которой можно подключить почти любую нагрузку - от обычного утюга или микроволновки и заканчивая холодильником или кондиционером


Загоревшийся световой индикатор Status LED говорит о том что сигнал принят и реле сработало. В качестве пульта может применить даже любой ПДУ от от телевизора. Внешний вид собранного устройства на макетной плате:


В этой статье поговорим о том, как собрать ИК управление нагрузкой своими руками. Схема управления может управлять различными подключенными к ней нагрузками: светом, вентилятором, бытовой техникой. ИК управление осуществляется с помощью любого ПДУ, в.т.ч и телевизионного.

В первой рассмотренной схеме управление вентилятором или кулером осуществляется по сигналу термистора в течении заданного временного интервала. Радиолюбительская конструкция очень проста, т.к собрана всего на трех биполярных транзисторах. Такие системы управления можно применить в самых разных областях, где требуется охлаждение с помощью вентилятора, допустим, охлаждения системной платы компьютера, в мощных звуковых усилителях и источниках питания и подобным устройствах, которые могут перегреваться в процессе своей работы.

Большая часть современной бытовой электронной аппаратуры имеет пульт дистанционного управления, использующий инфракрасное (ИК) излучение в качестве способа передачи информации. ИК канал передачи данных используется в некоторых устройствах системы " ", которую мы производим.

Принцип ИК передачи информации

Инфракрасное, или тепловое излучение - это электромагнитное излучение, которое испускает любое нагретое до определенной температуры тело. ИК диапазон лежит в ближайшей к видимому свету области спектра, в его длинноволновой части и занимает область приблизительно от 750 нм до 1000 мкм. Инфракрасное излучение составляет большую часть излучения ламп накаливания, около половины излучения Солнца. Оптические свойства веществ в инфракрасном излучении отличаются от их свойств в видимом свете. Например, некоторые стекла непрозрачны для инфракрасных лучей, а парафин, в отличие от видимого света, прозрачен для ИК излучения и используется для изготовления ИК линз. Для его регистрации используют тепловые и фотоэлектрические приемники и специальные фотоматериалы. Источником ИК лучей, кроме нагретых тел, наиболее часто используются твердотельные излучатели - , ИК лазеры, для регистрации применяются фотодиоды, форотезисторы или болометры. Некоторые особенности инфракрасного излучения делают его удобным для применения в устройствах передачи данных:

  • ИК твердотельные излучатели (ИК светодиоды) компактны, практически безинерционны, экономичны и недороги.
  • ИК приемники малогабаритны и также недороги
  • ИК лучи не отвлекают внимание человека в силу своей невидимости
  • Несмотря на распространенность ИК лучей и высокий уровень "фона", источников импульсных помех в ИК области мало
  • ИК излучение низкой мощности не сказывается на здоровье человека
  • ИК лучи хорошо отражаются от большинства материалов (стен, мебели)
  • ИК излучение не проникает сквозь стены и не мешает работе других аналогичных устройств

Все это позволяет с успехом использовать ИК способ передачи информации во многих устройствах. ИК передатчики и приемники находят применение в бытовой и промышленной электронике, компьютерной технике, охранных системах, системах передачи данных на большие расстояния по оптоволокну. Рассмотрим более подробно работу систем (пультов) управления бытовой электроники.

Пульт ИК управления при нажатии кнопки излучает кодированную посылку, а приемник, установленный в управляемом устройстве, принимает её и выполняет требуемые действия. Для того, чтобы передать логическую последовательность, пульт формирует импульсный пакет ИК лучей, информация в котором модулируется или кодируется длительностью или фазой составляющих пакет импульсов. В первых устройствах управления использовались последовательности коротких импульсов, каждый из которых представлял собою часть полезной информации. Однако в дальнейшем, стали использовать метод модулирования постоянной частоты логической последовательностью, в результате чего в пространство излучаются не одиночные импульсы, а пакеты импульсов определенной частоты. Данные уже передаются закодированными длительностью и положением этих частотных пакетов. ИК приемник принимает такую последовательность и выполняет демодулирование с получением огибающей. Такой метод передачи и приема отличается высокой помехозащищенностью, поскольку приемник, настроенный на частоту передатчика, уже не реагирует на помехи с другой частотой. Сегодня для приема ИК сигнала обычно применяется специальная микросхема, объединяющая фотоприемник, усилитель с полосовым фильтром, настроенным на определенную несущую частоту, усилитель с АРУ и детектор для получения огибающей сигнала. Кроме электрического фильтра, такая микросхема имеет в своем составе оптический фильтр, настроенный на частоту принимаемого ИК излучения, что позволяет в максимальной степени использовать преимущество светодиодного излучателя, спектр излучения которого имеет небольшую ширину. В результате таких технических решений, стало возможным принимать маломощный полезный сигнал на фоне ИК излучения других источников, бытовых приборов, радиаторов отопления и т.д. Работа современных устройств ИК управления достаточно надежна, а дальность составляет от нескольких метров до 40 и более метров, в зависимости от варианта реализации и уровня помех.

Передатчик ИК сигнала

Передатчик ИК сигнала, ИК пульт, чаще всего имеет питание от батарейки или аккумулятора. Следовательно его потребление должно быть максимально низким. С другой стороны, излучаемый сигнал должен быть значительной мощности для обеспечения большой дальности передачи. Такие противоположные по энергетическим затратам задачи успешно решаются способом передачи коротких импульсных кодированных пакетов. В промежутках между передачами пульт практически не потребляет энергии. Задача контроллера пульта - опрос кнопок клавиатуры, кодирование информации, модулирование опорной частоты и выдача сигнала на излучатель. Для изготовления пультов выпускаются различные специализированные микросхемы, однако для этих целей могут быть использованы и современные микроконтроллеры общего применения типа AVR или PIC. Основное требование к таким микроконтроллерам - это наличие режима сна с чрезвычайно низким потреблением и способность чувствовать нажатия кнопок в этом состоянии.

Излучатель ИК сигнала испускает инфракрасные лучи под действием тока возбуждения. Ток на излучатель обычно превышает возможности микроконтроллера, поэтому для формирования необходимого тока устанавливается простейший на одном транзисторе. Для снижения потерь, при выборе транзистора необходимо обратить внимание на его коэффициент усиления тока - β или h21. Чем выше этот коэффициент, тем выше эффективность устройства. Современные передатчики используют полевые или CMOS транзистоы, эффективность которых на используемых частотах можно считать предельной.

Приведенная схема не лишена недостатков, в частности при снижении уровня заряда батареи, мощность излучения будет падать, что приведет к снижению дальности. Для снижения зависимости от напряжения питания, можно использовать простейший стабилизатор тока.

Большинство передатчиков работают на частоте 30 - 50 кГц. Такой диапазон частот был выбран исторически при создании первых подобных устройств. Была выбрана область с наименьшим уровнем помех. Кроме того, принимались в расчет ограничения на элементную базу. В дальнейшем, по мере стандартизации и распространения аппаратуры с таким способом управления, переход на другие частоты стал нецелесообразным.

В целях увеличения импульсной мощности передатчика, а соответственно и его дальности, сигнал основной частоты отличается от меандра и имеет скважность 3 - 6. Таким образом повышается импульсная мощность с сохранением или даже уменьшением средней мощности. Импульсный ток светодиода выбирается исходя из его паспортных значений и может достигать одного и более Ампер. Импульсный ток в большинстве пультов ИК не превышает 100 мА. При этом, поскольку и опорная частота имеет малый коэффициент заполнения и длительность кодированной посылки не превышает 20-30 мс, средний ток при нажатой кнопке не превышает одного миллиампера. Повышение импульсного тока светодиода сопряжено с снижением эффективности и уменьшением срока службы. Современные инфракрасные светодиоды имеют эффективность 100-200 мВт излучаемой энергии при токе 50 мА. Допустимый средний ток не должен превышать 10-20 мА. Питание светодиода должно иметь RC фильтр, который снижает воздействие импульсной помехи на питание микроконтроллера. Спектр применяемых светодиодов для ИК пультов большинства бытовой аппаратуры имеет максимум в области 940 нм.

Длительность единичного пакета опорной частоты для уверенного приема составляет не менее 12-15 и не более 200 периодов. При передаче кодированной посылки, передатчик формирует в начале преамбулу, которая представляет собой один или несколько пакетов опорной частоты и позволяет приемнику установить необходимый уровень усиления и фона. Данные в кодированной посылке передаются в виде нулей и единиц, которые определяются длительностью или фазой (расстоянием между соседними пакетами). Общая длительность кодировнной посылки чаще всего составляет от нескольких бит до нескольких десятков байт. Порядок следования, признак начала и количество данных определяется форматом посылки.

Приемник ИК сигнала

Приемник ИК сигнала как правило имеет в своем составе собственно приемник ИК излучения и микроконтроллер. Микроконтроллер раскодирует принимаемый сигнал и выполняет требуемые действия. Поскольку приемник в большинстве случаев устанавливается в аппаратуре с сетевым питанием, его потребление не существенно. Микроконтроллер чаще всего выполняет и другие сервисные функции в устройстве и является его центральным логическим устройством.

Приемник ИК излучения чаще всего выполняется в виде отдельного интегрального модуля, который располагается за передней панелью управляемой аппаратуры. В передней панели имеется прозрачное для ИК лучей окошко. Как правило, такая микросхема имеет три вывода – питание, общий и выход сигнала. Производители электронных компонентов предлагают приемники ИК сигналов различного типа и исполнения. Однако, принцип их работы схож. Внутри такая микросхема имеет:

  • фотоприемник - фотодиод
  • интегрирующий усилитель, выделяющий полезный сигнал на уровне фона
  • ограничитель, приводящий сигнал к логическому уровню
  • полосовой фильтр, настороенный на частоту передатчика
  • демодулятор - детектор, выделяющий огибающую полезного сигнала.

Корпус такого приемника выполняется из материала, выполняющего роль дополнительного фильтра, пропускающего ИК лучи определенной длины волны. Современные интегральные приемники позволяют принимать полезный сигнал на уровне фона, превышающего его в несколько десятков раз и при этом чувствовать посылки частоты, имеющие всего от 4 - 5 периодов.

Питание приемника излучения должно быть выполнено с RC фильтром для увеличения чувствительности. Микроконтроллер производит помеху широкого спектра на линиях питания, что может повлиять на работу приемника.

Форматы ИК передачи данных

Различные производители бытовой аппаратуры применяют в своих изделиях различные пульты ИК управления. Поскольку пульт должен общаться только с конкретным устройством, он формирует последовательность данных, уникальную для своего типа оборудования. Передаваемые данные содержат кроме собственно команды управления адрес устройства, проверочные данные и другую сервисную информацию. Более того, различные производители используют различные способы формирования последовательности данных и различные способы передачи логических состояний. Наиболее распространенные способы кодирования битов информации - это изменение длительности паузы между пакетами (метод интервалов) и кодирование сочетанием состояний (бифазный метод). Однако, встречаются способы кодирования бит информации длительностью, сочетанием длительности и паузы и т.д. Наиболее распространенные форматы передачи.

В июньском номере Railway Modeller за 2007г. была статья про 0-масштабный макет Бодмина (Bodmin), сделанный Рэем Грином (Ray Green) с использованием инфракрасного пульта управления поездами. Неужели мои молитвы были услышаны? Я занялся поисками и спустя несколько дней навестил Стива Лейланда (Steve Leyland) из компании MicroMotive, которая расположена в Клэй-Кросс, Дербишир (Clay Cross Derbyshire), чтобы увидеть их инфракрасную систему Красная Стрела” (“Red Arrow”). Естественно, домой я вернулся с инфракрасной системой: пультом управления и сумкой деталей, необходимых для оснастки двух локомотивов.

Пульт управления

Детали - (слева направо)

  • Блок управления
  • Геркон
  • ИК-приёмник
  • Резисторы ограничительного выключателя

(внимание : аккумулятор и соединитель к нему в комплект не входят.)


Испытательная установка

Прочитав несколько раз инструкцию, я собрал испытательную установку, чтобы проверить детали, перед тем как оснащать ими локомотив.



Для испытаний я использовал всего один 3х-вольтовый моторчик, но всё отлично заработало.

Настал черёд разделывания локомотива и тендера - самый кощунственный процесс, где приходится фактически разрушать то, что годами хранилось как сокровище. Я назвал это хирургической операцией и постарался причинить модели как можно меньше вреда.

На фото показан блок управления, помещённый сверху тендера Jubilee Bachmann , для того, чтобы наглядно увидеть соотношение размеров.


Блок управления на тендере

Первое, что я сделал, было удаление из локомотива токосъёмников, так как я оснащал его новым источником питания (позже я понял, что это следовало сделать в конце, т.к. ели бы мне не удалось установить блок управления и аккумулятор в тендер - это действие оказалось бы напрасным. Это урок на будущее).

Что же, для меня это оказалось непростой задачей. Разбирая Jubilee, я вскоре понял, что в нём нет как таковых токосъёмников, вместо них использовались два разделённых металлических шасси с двумя пружинами, прижимающими контакты мотора. Уфф.

Разделённые шасси



Как показано на снимке, две маленькие пружинки располагались в отверстиях. Они прижимались к контактам, расположенным на корпусе мотора. Я решил удалить пружинки (сохранив их на будущее), заизолировать контакты и вывести два провода из локомотива к тендеру.

Заизолированные контакты


Показанные на фото резиновые изоляторы не подошли, так как они оказались слишком громоздкими и мешали поставить шасси на своё место. Я заменил их на два кусочка изоляции, снятой с сетевого кабеля.

Питание мотора в сборе


Я собрал локомотив и просто подключил его к 9-вольтовому аккумулятору. Первое, что я заметил (я использовал новый стандартный PP3 аккумулятор), была явная потеря мощности, и локомотив ехал медленнее, чем обычно. Я снова разобрал и собрал локомотив - результат был прежним, тогда я поставил его на рельсы, и он поехал со своей обычной скоростью, возможно проблема была в том, что я подключил 9- вместо 12- вольтового аккумулятора. Это может стать проблемой для длинного состава, но, так как у меня оставалось ещё много работы, поверку мощности я отложил на потом.

Теперь разделывание, простите, оперирование тендера.

Внутри тендера распложены три металлические пластины, используемые в качестве балласта. Первым этапом была замена средней пластины на пластиковую, разделённую посредине, что образовало отверстие, через которое можно было провести кабельную стяжку, чтобы закрепить ярусное расположение всех компонентов.


Отверстие для кабельной стяжки


На пластины я положил батарейку и блок управления, поместив их друг на друга. Похоже на это:

Ярусное расположение (обратите внимание на маленькую деталь, приклеенную к концу связки - это монтажная пластина - см. дальше)


Кроме этих деталей мне ещё нужно было установить ИК-приёмник, геркон, резисторы ограничительного выключателя, выпрямительный мост, соединители и пр. - хватит ли у меня места?

С герконом проблем не возникло. В моём комплекте оказался бесконтактный герконовый мангнитоуправляемый переключатель. В нормальном положении контакты замкнуты, что замыкает всю цепь. Кладём на него магнит - контакты размыкаются, что, в свою очередь, размыкает всю цепь. Проверка показала, что магнит достаточно мощный, чтобы работать через стенки корпуса тендера.

Герконовый переключатель
При помощи двустороннего скотча переключатель был прикреплён к задней стенке нижней части корпуса тендера.


Чтобы отключить питание, мне нужно всего лишь положить магнит сверху тендера, как показано ниже.



После этого мне нужно было смонтировать выпрямительный мост и резисторы (по-моему, на 120Ом) Большой необходимости в этом нет, но это избавляет от разборки тендера каждый раз, когда аккумулятор разряжается. Я хотел иметь возможность заряжать аккумулятор, не снимая локомотив с рельсов.

Поэтому чуть позже я собрал этот элемент (на монтажной пластине veroboard, показанной выше), установил все детали на шасси тендера и попытался надеть верхнюю часть.... Ничего не вышло - детали не вмещались.

Я перебирал разные варианты.

И тут я вспомнил любимый совет своего папы, который он мне всегда давал, когда я что-нибудь чинил: “Если деталь не становится на своё место - переверни её другой стороной и попробуй снова.”

Точно, папа, спасибо. Я пытался установить все детали на шасси в надежде, что верхняя часть станет на место. Теперь же я все детали разместил в обратном порядке в корпусе тендера, что оказалось гораздо проще.

Но места всё равно не хватало, поэтому я убрал балластные пластины и их держатели, а также расположил ИК-приёмник на крыше, но с краю от центра.


Детали, заключённые в корпус тендера


На этом фото видно, что ИК-приёмник приклеен (эпоксидным клеем) к крыше тендера, но смещён в сторону, чтобы оставалось достаточно места для аккумулятора.

Внутренний вид


и ещё одно изображение сверху - мне ещё нужно почистить верх, так как клей выступил через зазоры.

Вид сверху


Ура Всё подошло - но будет ли это работать?


Испытания в работе

На снимке показано испытание паровоза, к которому ещё не присоединён тендер. ЗАРАБОТАЛО С ПЕРВОГО РАЗА. Фотоаппарат не смог передать быстрое вращение колёс.
(обратите внимание: Зелёные провода нужны для системы подзарядки аккумулятора).

В процессе работы я столкнулся с парой проблем. Но я вполне доволен, потому что, кроме опыта сборки нескольких цепей с диодами, у меня нет никаких знаний в электронике.

Проблемы, возникшие в процессе работы и требующие решения:


1) Явная нехватка напряжения (9В вместо 12В) - хватит ли его, чтобы тянуть состав?
2) Система позволяет запрограммировать 99 локомотивов. По умолчанию в заводских настройках запрограммировано 27, и я не смог их перепрограммировать. Больше 27 не получилось.

3) Прочитав инструкцию, я узнал, что мне нужен ещё и радиатор для транзистора. У меня очень смутное представление как о том, что это такое и для чего он нужен, так и какого он размера, где его устанавливать и где его взять.
4) Ещё нужно установить токосъемные контакты для подзарядки аккумулятора. Сделать их на колёсах тендера (что проще), или же прикрепить к разделённым шасси локомотива (что эффективнее)?
5) У паровоза Jubilee закрытый корпус тендера формируется за счёт формованной крышки, создающей эффект наполненности углём. А как быть с паровозами, тендеры которых пустые или в них мало угля?
6) Плохо ли скажется на аккумуляторе постоянная подзарядка?
7) После присоединения, паровоз и тендер будут связаны навсегда проводами. Найду ли я для этого подходящий микроконнектор?

Я также пришёл к выводу, что:
1) Данная конструкция не подойдёт для паровозов без тендера.
2) Данная конструкция не подойдёт для паровозов, мотор которых установлен в тендере.

Завязка или «Как начинался девайс»

…Когда я пришёл, Виктория сидела на диване, уставившись в телевизор. День выдался тяжёлый, поэтому ей не хотелось ничего делать. Несколько минут мы смотрели какой-то попсовый сериал, потом он закончился, и Вика выключила телевизор. В комнате стало темно. На улице шумел дождь, и от этого казалось, что дома тоже холодно.
Вика поднялась с дивана и принялась, на ощупь, искать выключатель от светильника. Настенный светильник висел, почему-то, не у дивана, а на другой стене и приходилось топать через всю комнату, чтобы зажечь свет. Когда она, наконец, включила его, комната наполнилась тёплым светом лампочки накаливания.
Около меня, на помятой простыне, лежал пульт от телевизора. Нижние кнопки без опознавательных знаков и, скорее всего, не использовались. И тут у меня возникла интересная мысль
— Вик, а хочешь, я сделаю так, что твой светильник можно будет пультом от ящика включить? Там даже кнопки лишние есть…

Концепция
Наше устройство должно уметь принимать сигнал с ИК-пульта, отличать «свою» кнопку от других, и управлять нагрузкой. Первый и последний пункты простые, как топор. А вот со вторым немного интереснее. Я решил не ограничиваться каким-то конкретным пультом (Почему? – «Не интересно так!»), а сделать систему, которая может работать с разными моделями пультов от разной техники. Лишь бы ИК-приёмник не спасовал, и уверенно ловил сигнал.

Ловить сигнал будем с помощью фотоприёмника . Причем не каждый приёмник подойдёт – несущая частота должна совпадать с частотой пульта. Несущая частота приёмника указана в его маркировке: TSOP17xx – 17 это модель приёмника, а хх – частота в килогерцах. А несущую частоту пульта можно найти в документации или в инете. В принципе, сигнал будет приниматься, даже если частоты не совпадают, но чувствительность будет фиговой – придётся тыкать пультом прямо в приёмник.

Каждая компания, выпускающая бытовую технику, вынуждена соблюдать стандарты при изготовлении «железа». И частоты модуляции у пультов, тоже стандартные. Зато разработчики отрываются на программной части – разнообразие протоколов обмена между пультом и устройством просто поражает. Поэтому, пришлось придумать универсальный алгоритм, которому плевать на протокол обмена. Работает он так:

В памяти устройства хранятся контрольные точки. Для каждой такой точки нужно записать время и состояние выхода с ИК-приёмника – 0 или 1.
При получении сигнала с пульта, МК будет последовательно проверять каждую точку. Если все точки совпали – то это была та самая кнопка, на которую устройство запрограммировали. А если выход с приёмника хотя-бы в одной точке не совпал с шаблоном, то устройство никак не отреагирует.

Впрочем, баги никто не отменял! Возможно, что, сигнал будет отличаться от шаблона, но
в контрольных точках значения будут одинаковые. Получится ложное срабатывание. Казалось-бы – редкостное западло, и бороться с ним пипец сложно! Но на самом деле не всё так плохо (а местами даже хорошо).

Во-первых, у нас ведь цифровой сигнал, а значит, импульсы идут с постоянными задержками (таймингами) и просто-так не возникают. Поэтому, если точки стоят достаточно плотно, то можно не бояться, что какой-нибудь импульс будет пропущен.

Во-вторых мелкий шум (обычно выглядит, как редкие короткие импульсы) в большинстве случаев идёт лесом – ибо если он не попадёт прямо на контрольную точку, то нифига не повлияет на систему. Значит у нас есть естественная защита от шума.

Второй тип ошибок (aka «Пропуск команды») бывает из-за того, что точка расположена слишком близко к фронту импульса (к тому месту, где сигнал на выходе приёмника меняет свой уровень).
Представь себе, что через несколько микросекунд после контрольной точки сигнал должен меняться с HIGH на LOW. А теперь представь, что пульт выдал команду чуть быстрее, чем обычно (довольно часто случается). Фронт импульса сдвинулся во времени, и теперь он происходит ДО контрольной точки! Выход с приёмника не совпадёт с шаблоном и система сбросится.
Чтобы этого не происходило, нужно размещать контрольные точки подальше от фронтов.

«Всё круто» — скажешь ты – «Но откуда мне взять контрольные точки?». Вот и я над этим долго тупил. В результате решил доверить расстановку точек тебе.
На устройстве есть джампер J1. Если при включении он замкнут – устройство будет тупо передавать через UART всё, что выдаёт ИК-приёмник. На другой стороне провода эти данные принимает моя программа, которая выдаёт на экран компа импульсы с TSOP’а. Тебе остаётся только мышкой раскидать по этому графику контрольные точки, и прошить их в EEPROM. Если возможности использовать UART нету, то на помощь приходит джампер J2. Когда он замкнут – устройство не выдаёт данные по UART, а складывает их в EEPROM.


Схема
Простая до безобразия. В качестве контроллера я взял ATTiny2313. Частота 4 мегагерца, от кварца, или внутренней RC цепочки.
На отдельный разъём выведены линии RX и TX для связи, и питание. Туда – же выведен RESET для того чтобы можно было перепрошивать МК, не вынимая из устройства.
Выход фотоприёмника подключается к INT0, он подтянут к питанию через резистор в 33к. Если будут сильные помехи, то можно поставить туда резистор поменьше, например, 10к.
На пинах D4 и D5 висят джамперы. Jumper1 на D5 и Jumper2 на D4.

К пину D6 подцеплен силовой модуль. Причём симистор я взял самый мелкий из тех, что у меня были – BT131. Ток у него 1А – не круто, но зато корпус не слишком большой — ТО92. Для мелкой нагрузки самое то. Опторазвязку я сделал на MOC3023 – у неё нет датчика пересечения нуля, а значит она подходит для плавного управления нагрузкой (здесь я это так и не реализовал).

Порт B почти полностью выведен на разъём – туда можно прицепить индикатор или ещё что-нибудь. Этим-же разъёмом я пользуюсь при прошивке девайса. Пин B0 занят светодиодом.

Питается всё это дело через LM70L05 и диодный мост. То есть на вход можно подавать переменное напряжение, например, с трансформатора. Главное, чтобы оно не превышало 25 Вольт, а то умрёт либо стабилизатор, либо кондер.

Плата получилась вот такая:


Да, она немного отличается от той платы, которая лежит в архиве. Но это не значит, что я сделал себе убер-продвинутую плату, а вам подсунул демо версию:). Напротив, моя плата имеет пару недостатков, которых нет в конечной версии: у меня не выведена на штырёк ножка RESET, и светодиод висит на PB7. А это не очень способствует внутрисхемному программированию.

Прошивка
Устройство может работать в двух режимах. В первом – когда J2 замкнут – оно просто передаёт импульсы с фотоприёмника в UART. С него и начнём:

UART работает на скорости 9600, т.е, при частоте 4МГц в регистр UBRR записываем 25.

…ждём, пока не дёрнется ножка фотоприёмника. Как только она опустилась (изначально-то она болтается на pull-up резисторе) мы запускаем таймер (TIMER/COUNTER1, тот, что на 16 бит) и врубаем прерывание INT0 на любое изменение входа – any logical change (ICS00 = 1). Таймер тикает… ждём.

Импульс с пульта кончился – выход с фотоприёмника взметнулся вверх, прерывание сработало. Теперь записываем в память значение таймера и сбрасываем таймер. Ещё нужно инкрементировать указатель записи, чтобы в следующем прерывании записать в другую ячейку памяти.

Ещё импульс… выход дёргается… прерывание… запись значения таймера в память… сброс таймера… указатель + 2 (мы пишем два байта за раз)…

И так будет продолжаться до тех пор, пока не станет ясно, что конец (оперативки) близок. Или, пока сигнал не кончится. В любом случае, мы стопорим таймер и отключаем прерывания. Потом, не спеша выкидываем всё, что насобирали, в UART. Или, если J2 замкнут – в EEPROM.

В конце можно затупить в бесконечный цикл и ждать ресета – миссия выполнена.
А на выходе получится последовательность чисел. Каждое из них – время между изменениями состояния выхода TSOP’a. Зная, с чего началась эта последовательность (А мы знаем! Это перепад с HIGH на LOW), мы можем восстановить всю картину:

После инициализации сидим и ждём, пока TSOP дёрнется. Как только это случилось – читаем из EEPROM первую точку, и в простом цикле тупим столько, сколько там написано. При этом время считаем пачками по 32us. Выйдя из ступора, проверяем – что-там на выходе приёмника.

Если выход не совпал с тем, что мы ожидали – это не наша команда. Можно спокойно дожидаться конца сигнала и начинать всё сначала.

Если выход соответствует нашим ожиданиям – загружаем следующюю точку и проверяем её. Так до тех пор, пока не наткнёмся на точку, время которой = 0. Это значит, что точек больше нет. Значит вся команда совпала, и можно дёргать нагрузку.

Вот так, получается, простенький алгоритм. Но ведь чем проще, тем надёжнее!

Софтина
Сначала я думал сделать автоматическое запоминание шаблона. То есть ты замыкаешь джампер, тыкаешь пультом в TSOP, а МК сам расставляет контрольные точки и складывает их в EEPROM. Потом стало ясно, что идея бредовая: более-менее адекватный алгоритм получится чересчур сложным. Или не будет универсальным.

Второй идеей была программка для компа, в которой можно самому расставить контрольные точки. Не слишком технологично, но всяко лучше, чем доверять это дело МК.


Приучаем девайс отзываться на нужную кнопку пульта:

1) Замыкаем перемычку J1.

2) Подключаем UART. Если возможности его подключить нету, то замыкаем джампер J2. Тогда устройство будет скидывать данные в EEPROM.

3) Врубаем питание.

4) Если мы решили юзать UART, то запускаем софт и смотрим на строку состояния (внизу окошка). Там должно быть написано “COM порт открыт”. Если не написано, то ищем косяк в подключении и тыкаем кнопу «Подключить».

5) Берём пульт и тыкаем нужной кнопкой в TSOP. Как только девайс почует, что сигнал пошёл – загорится светодиод. Сразу после этого устройство начнёт передавать по UART (или писать в EEPROM) данные. Когда передача закончилась, светодиод гаснет.

6.1) Если работаем по UART, то жмём кнопу «Загрузить по UART». И радуемся надписи «Загрузил график…» в строке состояния.

6.2) Если работаем через EEPROM, то читаем программатором EEPROM память и сохраняем в *.bin файл. (Именно bin!). Потом нажимаем в программе кнопку «Загрузить.bin» и выбираем файл с EEPROM.

7) Смотрим на загрузившийся график – это сигнал с TSOP’a. На боковой панели есть ползунок – им можно менять масштаб. Теперь тыкаем мышкой по графику – ставим контрольные точки. Правой кнопкой точки удаляются. Только не нужно их ставить слишком близко к фронтам. Получается примерно так:


8) Нажимаем «Сохранить.bin» и сохраняем точки. Потом прошиваем этот файл в EEPROM. Так-как мы запихиваем время между двумя точками в 7 бит, то оно ограничено 4мс. Если время между двумя точками превысит это значение – программа откажется запихивать точки в файл.

9) Снимаем джамперы. Перезагружаем устройство. Готово!

Видео с испытаний