Инфракрасное управление. Схема дистанционного управления устройствами. Максимальная мощность нагрузки одного канала, Вт

(перевод с английского)

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

Инфракрасный на самом деле нормальный свет с определенным цветом. Мы, люди не можем видеть этот цвет, потому что его длина волны 950нм, что ниже видимого спектра. Это одна из причин, почему ИК-свет выбран для удаленных целей управления, мы хотим использовать, но мы не заинтересованы видеть этот свет. Другая причина в том, что ИК управление довольно легко сделать, и поэтому дешевы в производстве. Хотя мы, люди не видим инфракрасный свет, излучаемый из пульта дистанционного управления не означает, что мы не можем сделать его видимым.

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

Модуляции

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

На картинке вы можете видеть слева передатчик модулирующий сигнал с помощью ИК-светодиода. Сигнал регистрируется в приемнике на другой стороне. В последовательной коммуникации мы обычно говорим о "маркерах" и "пространстве". "Пространство" - период при отсутствии сигналов с передатчика. Никакой свет не излучается в это время. После простоя "маркеры" ИК импульсов идут в определенном частотном диапазоне. Частоты между 30 кГц и 60 кГц обычно используются в бытовой электронике. На выходе приемника "пространство" представлено высоким логическим уровнем. "Маркер" представляет низкий уровень. Пожалуйста, отметьте, что "маркеры" и "пространство" не 1-ы и 0-и, которые необходимо передать. Реальные отношения между "маркерами" и "пространства" и единиц и нулей зависят от используемого протокола. Больше информации об этом может быть найдено на страницах, которые описывают протоколы.

Передатчик

Передатчики это обычно пульты с батареями. Он должен потреблять мало энергии, как это возможно, и ИК-сигнал должен быть как можно более надежным, чтобы достичь приемлемой дистанцний управления. Предпочтительно она должна быть ударопрочной.
Многие чипы предназначены для использования в качестве ИК-передатчиков. Старые чипы были предназначены для лишь одного из нескольких ныне используемых протоколов. В нынешнее время очень низкое потребление у микроконтроллеров, позволяет использовать в ИК-передатчиках, а также они являются более гибкими в использовании. Если не нажата кнопка они находятся в режиме сна, в котором низкий ток потребления. Процессор "просыпается" для того чтобы передать соответствующую команду ИК только при нажатии клавиши.
Кварцевые кристаллы редко используются в таких пультах. Они очень хрупкие и, как правило, легко ломаются, когда пульт падает. Керамические резонаторы гораздо более подходящие, потому что они могут выдерживать большие физические перегрузки. Тот факт, что они менее точны, совсем не важен.
Ток через светодиод (или светодиодов) может варьироваться от 100 мА и до более 1А! Для того чтобы получить приемлемую дистанцию управления светодиодный ток должен быть как можно выше. Тут выбирается компромисс между параметром светодиода, срок службы батареи и максимальной дистанции. Светодиодные токи могут быть высокими, потому что управляющие импульсы светодиодов очень короткие. Средняя мощность излучения светодиода не должна превышать максимального значения. Вы также должны добиться того, чтобы максимально быстрый взгляд тока для светодиодных не был превышен. Все эти параметры можно найти в спецификации светодиодов.

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

Чтобы избежать этого в цепи эмиттера последовательно ставят 2 диода. При серии импульсов на базе транзистора напряжение будет ограничено до 1,2В. База-эмиттер транзистора вычитает 0,6В, что, в результате амплитуда составит 0,6В на эмиттере. Расчет тока через светодиод прост - снова применяя закона Ома.

Приемник

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

На картинке выше вы можете видеть типичный блок-схема такого ИК-приемник. Не беспокойтесь, если вы не понимаете частей, все построено в одном электронном компоненте. Полученный ИК-сигнал с фотодиода обнаружения (на левой стороне диаграммы). Этот сигнал усиливается и ограничивается в первых 2-х этапах. Ограничителем выступает АРУ, чтобы получить постоянный уровень импульса, независимо от расстояния до пульта. Далее с AРУ сигнал поступает на полосовой фильтр (BPF). Полосовой фильтр настроен на частоту модуляции пульта. Общий диапазон частот от 30 кГц до 60 кГц для потребительской электроники. Следующий этап: детектор, интегратор и компаратор. Цель этих трех блоков для обнаружения присутствия частоты модуляции. Эта частота модуляции представляет выход компаратора как низкий сигнал.
Как я уже говорил ранее, все эти блоки интегрированы в единый электронный компонент. Есть много различных производителей этих компонентов на рынке. Устройства доступны в нескольких версиях, каждая из которых настроены на определенную частоту модуляции.
Обратите внимание, что усилитель установлен на очень высокий коэффициент усиления. Поэтому система считывает очень легко. Подключение большого конденсатора, по крайней мере 22мФ, к питанию приемника является обязательным. Некоторые даташиты рекомендуют ставить сопротивление 330 Ом последовательно с источником питания для дальнейшего отделить питания от остальной части схемы.

Есть несколько производителей ИК-приемников на рынке. Siemens, Vishay Telefunken и являются основными поставщиками в Европе. Siemens имеет свой SFH506-хх серии, где хх обозначает частоту модуляции 30, 33, 36, 38, 40 или 56кГц. Telefunken производили свои TFMS5xx0 и TK18xx серии, где хх еще раз указывает на частоту модуляции устройства. Похоже, что эти компаненты уже устарели. Они заменяются Vishay TSOP12xx, TSOP48xx и TSOP62xx.
Sharp, Xiamen Hualian и Japanese Electric - 3 ведущих азиатских компаний в сфере ИК устройств. Sharp производит устройства с очень загадочными именами, как: GP1UD26xK, GP1UD27xK и GP1UD28xK, где х, связанные с частотной модуляцией. Hualian имеет свои HRMxx00 серии, как и HRM3700 HRM3800. Japanese Electric имеет ряд устройств, которые не включают частоту модуляции в наименовании детали. PIC12043LM настроен на 36.7kHz, и PIC12043LM настроен на 37.9kHz.

Конец?

На этом мы завершаем теории операции для ИК систем дистанционного управления, предназначенный для использования в бытовой электронике. Я понимаю, что существуют другие способы для реализации ИК-контроля, но я ограничусь лишь описанием выше. Один из вопросов, не освещенных здесь является безопасность. Безопасность не имеет никакого значения, если мне надо управлять только своими видеомагнитофоном или телевизором. Но когда дело доходит до открытия двери или автомобиля, то ключевой сигнал должен быть уникальным! Может быть, я расскажу этому вопросу позже, но не сейчас.
Я также понимаю, что мой небольшой перечень производителей далек от завершения. Вряд ли возможно перечислить всех производителей здесь. Вы можете отправить мне по электронной почте, если у вас есть сведения о других протоколов, которые вы считаете необходимо добавить на страницы.
Эта страница только описание основных теории работы ИК-пультов дистанционного управления. Он не описывает протоколы, которые участвуют в общении между передатчиком и приемником. Существуют разные протоколы, разработаные разными производителями.

Инфракрасный пульт дистанционного управления — один из самых простых способов взаимодействия с электронными приборами. Так, практически в каждом доме есть несколько таких устройств: телевизор, музыкальный центр, видеоплеер, кондиционер. Но самое интересное применение инфракрасного пульта — дистанционное правление роботом. Собственно, на этом уроке мы попытаемся реализовать такой способ управления с помощью популярного контроллера Ардуино Уно.

1. ИК-пульт

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

На таком пульте есть 10 цифровых кнопок и 11 кнопок для манипуляции с музыкой: громкость, перемотка, play, stop, и т.д. Для наших целей более чем достаточно.

2. ИК-датчик

Во-вторых, для приема сигнала с пульта нам потребуется специальный ИК-датчик. Вообще, мы можем детектировать инфракрасное излучение обычным фотодиодом/фототранзистором, но в отличие от него, наш ИК-датчик воспринимает инфракрасный сигнал только на частоте 38 кГц (иногда 40кГц). Именно такое свойство позволяет датчику игнорировать много посторонних световых шумов от ламп освещения и солнца.

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

  • несущая частота: 38 кГц;
  • напряжение питания: 2,7 — 5,5 В;
  • потребляемый ток: 50 мкА.

Можно использовать и другие датчики, например: TSOP4838, TSOP1736, SFH506.

3. Подключение

Датчик имеет три вывода (три ноги). Если посмотреть на датчик со стороны приёмника ИК сигнала, как показано на рисунке,

  • то слева будет - выход на контроллер,
  • по центру - отрицательный контакт питания (земля),
  • и справа - положительный контакт питания (2.7 — 5.5В).

Принципиальная схема подключения

Внешний вид макета

4. Программа

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

#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием } void loop() { if (irrecv.decode(&results)) { // если данные пришли Serial.println(results.value, HEX); // печатаем данные irrecv.resume(); // принимаем следующую команду } }

Загружаем программу на Ардуино. После этого, пробуем получать команды с пульта. Открываем монитор последовательного порта (Ctrl+Shift+M), берём в руки пульт, и направляем его на датчик. Нажимая разные кнопочки, наблюдаем в окне монитора соответствующие этим кнопкам коды.

Проблема с загрузкой программы

В некоторых случаях, при попытке загрузить программу в контроллер, может появиться ошибка:

TDK2 was not declared In his scope

Чтобы ее исправить, достаточно удалить два файла из папки библиотеки. Заходим в проводник. Переходим в папку, где установлено приложение Arduino IDE (скорее всего это «C:\Program Files (x86)\Arduino»). Затем в папку с библиотекой:

…\Arduino\libraries\RobotIRremote

И удаляем файлы: IRremoteTools.cpp и IRremoteTools.h. Затем, перезапускаем Arduino IDE, и снова пробуем загрузить программу на контроллер.

5. Управляем светодиодом с помощью ИК-пульта

Теперь, когда мы знаем, какие коды соответствуют кнопкам пульта, пробуем запрограммировать контроллер на зажигание и гашение светодиода при нажатии на кнопки громкости. Для этого нам потребуется коды (могут отличаться, в зависимости от пульта):

  • FFA857 — увеличение громкости;
  • FFE01F — уменьшение громкости.

В качестве светодиода, используем встроенный светодиод на выводе №13, так что схема подключения останется прежней. Итак, программа:

#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if (irrecv.decode(&results)) { // если данные пришли switch (results.value) { case 0xFFA857: digitalWrite(13, HIGH); break; case 0xFFE01F: digitalWrite(13, LOW); break; } irrecv.resume(); // принимаем следующую команду } }

Загружаем на Ардуино и тестируем. Жмем vol+ — светодиод зажигается. Жмем vol- — гаснет. Теперь, зная как это все работает, можно вместо светодиода управлять двигателями робота, или другими самодельными микроэлектронными устройствами!


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

Собственно, что такое ИК-управление - объяснять, думаю, не нужно. Сейчас более распространено управление по 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. Решил выложить фото самого пульта, чтобы было видно, что работает девайс не только как китайские приёмники, которые подключаются к ПК. Возможности гораздо шире и универсальнее.

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

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

Наиболее распространенный в настоящее время вид пультов ДУ - мобильное автономное беспроводное устройство с управлением объектами по инфракрасному каналу (ИК). Именно такой вид устройств ДУ используем в быту, когда передаем управляющие сигналы на телевизор, кондиционер, музыкальный центр, плеер и другую бытовую технику.

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

Устройство пульта дистанционного управления

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

На торце устройства расположено отверстия для линзы ИК-излучателя, который непосредственно и отправляет команду на исполнение. С обратной стороны, под крышкой, располагается ниша для установки элементов питания. Как правило, это две батарейки AAA.

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

Инфракрасный беспроводной пульт дистанционного управления: принцип действия

Устройство пульта и работа дистанционного управления основаны на односторонней или двусторонней передаче информации между пультом и объектом управления с помощью лучей света в инфракрасном диапазоне. Для приема и передачи сигналов применяются ИК-приемники и передатчики.

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

Все остальные модели в подавляющем большинстве случаев одноканальные.

Передача и прием команд

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

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

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

Схема пульта дистанционного управления

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

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

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

Пульт ДУ для ПК

Пульт дистанционного управления для персонального компьютера может оказаться полезным при работе с интерфейсом, как самой операционной системы, так и при управлении функционированием различных программ. Например, управление презентациями в Power Point или воспроизведением медиа-контента в Media Center . Иногда такие пульты уже входят в комплект ПК.

Производители пультов для ПК, в отличие от TV, реализовали 2 решения: ИК и радиопульты. Дело в том, что устойчиво при управлении в инфракрасном диапазоне взаимодействует с устройством при прямой видимости и на расстоянии до 10 м, что достаточно для TV, но может оказаться неудобным для управления ПК, особенно во время презентаций. Радиопульт увеличивает это расстояние до 30 м независимо от препятствий на пути сигнала.

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

Универсальный и/или программируемый пульт ДУ

Универсальный пульт дистанционного управления может потребоваться в двух случаях:

  1. Не найдена замена для утерянного или вышедшего из строя старого пульта управления TV или другой бытовой техники.
  2. Множество различной бытовой техники в одном помещении делает управление ею с разных пультов чрезвычайно неудобным, так как понятие «правильного дизайна» и «оптимальной эргономичности» у всех производителей свое.

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

«Обучение» запоминающих пультов производится в соответствии с руководством пользователя и с использованием оригинального ПДУ. Если приобретенный пульт имеет на своей передней панели меньшее количество клавиш, чем у «родного», то в первую очередь следует программировать только те, которые необходимы.

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

Смартфон в качестве ПДУ

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

Более интересен в качестве ПДУ вариант смартфона с ИК-портом. Рассмотрим это на примере модели Xiaomi Redmi 3 и довольно старого телевизора Daevoo . Нам потребуется установить из Google Play специальное приложение. Оно может быть любым, главное, чтобы в перечне поддерживаемого оборудования присутствовала нужна модель объекта управления. Для этого телефона с оболочкой от MIUI оно называется Mi Remote (русский язык присутствует).

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

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

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

Ловить сигнал будем с помощью фотоприёмника . Причем не каждый приёмник подойдёт – несущая частота должна совпадать с частотой пульта. Несущая частота приёмника указана в его маркировке: 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) Снимаем джамперы. Перезагружаем устройство. Готово!

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