Простое самодельное ИК-управление переключением ТВ-каналов (555, К561ИЕ9)

На закате СССР появились и были очень популярны отечественныеполупроводниковые телевизоры серии УСЦТ, некоторые из них и сейчас в строю. Особенно долговечными были телевизоры с размером экрана 51 см по диагонали (кинескоп был весьма надежным). Конечно, они уже совсем не отвечают современным требованиям, но как «дачный вариант» еще вполне пригодны.

Как-то, от нечего делать, появилось желание усовершенствовать старенькую, уже давно «дачную» «Радугу-51ТЦ315», дополнив её системой дистанционного управления. Сейчас уже приобрести «родной» модуль невозможно, поэтому было решено сделать упрощенную однокомандную систему, позволяющую хотя бы переключать программы «по кольцу». Микроконроллеры и спец, микросхемы сразу были отвергнуты по причине нерентабельности, и система была сделана из того, что имелось в наличии.

А именно, интегральный таймер 555, ИК светодиод LD271, интегральный фотоприемник TSOP4838, счетчик К561ИЕ9 и плюс еще по-мелочи.

Схема пульта управления

Пульт представляет собой генератор импульсов частотой 38 кГц, на выходе которого включен через ключ инфракрасный светодиод. Генератор построен на основе микросхемы «555», так называемого «интегрального таймера». Частота генерации зависит от цепи C1-R1, при налаживании подбором резистора R1 нужно установить на выходе микросхемы (вывод 3) частоту 38 кГц.

Рис.1. Принципиальная схема ИК-передатчика для дистанционного управления телевизором.

Прямоугольные импульсы частотой 38 кГц поступают на базу транзистора VT1 через резистор R2. Диоды VD1 и VD2 вместе с резистором R3 образуют схему контроля тока через ИК-светодиод HL1.

При повышенном токе напряжение на R3 увеличивается, соответственно увеличивается и напряжение на эмиттере VT1. И когда напряжение на эмиттере приближается по величине к напряжению падения на диодах VD1 и VD2 происходит снижение напряжения на базе VT1 относительно эмиттера, и прикрывание транзистора.

Импульсы ИК-света, следующие с частотой 38 кГц излучаются инфракрасным светодиодом HL1.

Управление — одной кнопкой S1, которая подает на схему пульта питание. Пока кнопка нажата пультом излучаются инфракрасные импульсы.

Устройство ИК приемника. Принцип работы

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

Принцип работы IR ресивера. Обработка сигнала от пульта ДУ

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

Под действием инфракрасного излучения в фотодиоде, у которого между p

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

Полосовой фильтр настроен на фиксированную частоту: 30; 33; 36; 38; 40 и 56 килогерц. Чтобы сигнал от пульта ДУ принимался ИК приемником Ардуино, пульт должен быть с той же частотой, на которую настроен фильтр в IR приемнике. После фильтра сигнал поступает на амплитудный детектор, интегрирующий фильтр и выходной транзистор.

Схема приемного блока

Приемник устанавливается внутрь телевизора, на него подается питание + 12V от источника питания телевизора, а катоды диодов VD2-VD9 соединяются с контактами кнопок модуля выбора программ УСУ-1-10.

Рис.2. Принципиальная схема ИК-приемника для дистанционного управления телевизором.

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

Таким образом, когда кнопка пульта нажата на его выходе ноль, а когда не нажата — единица.

TSOP4838 должен питаться напряжением 4,5-5,5V, и не более. Но, для управления модулем выбора программ телевизора нужно на кнопки транзисторного 8-фазного триггера подавать напряжение 12V. Поэтому, на микросхему D1 подается напряжение 12V, а на фотоприемник HF1 напряжение 4,7-5V через параметрический стабилизатор на стабилитроне VD10 и резисторе R4.

Согласующим уровни логических единиц каскадом служит транзистор VТ1. При этом он инвертирует логические уровни. Напряжение с коллектора VТ1 через цепь R3-C2 поступает на счетный вход счетчика D1, рассчитанный на прием положительных импульсов. Цепь R3-C2 служит для подавления ошибок от дребезга контактов кнопки S1 пульта управления.

Счетчик D1 К561ИЕ9 представляет собой трехразрядный двоичный счетчик, со схемой десятичного дешифратора на выходе. Он может находиться в одном из восьми состояний от 0 до 7, при этом логическая единица имеется только на одном, соответствующем его состоянию, выходе. На остальных выходах — нули.

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

ИК-светодиод LD271 можно заменить любым ИК-светодиодом, применимым для пультов дистанционного управления бытовой аппаратурой. Фотоприемник TSOP4838 можно заменить любым полным или функциональным аналогом.

Электроника для всех

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

Концепция

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

Ловить сигнал будем с помощью фотоприёмника TSOP

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

Второй режим. Тут мы ловим команды с пульта и управляем нагрузкой.

Прерывания не используются совсем, всё крутится в главном цикле программы. В EEPROM лежат контрольные точки. Каждая из них занимает 1 байт: 7 бит на время от последней точки и 1 бит на состояние выход TSOP’a в этой точке.

После инициализации сидим и ждём, пока 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) Снимаем джамперы. Перезагружаем устройство. Готово!

Архив с прошивкой, платой, софтом

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

Для чего нужен дополнительный резистор?

В свою очередь, резистор R1 (10 кОм) обеспечивает постоянный ток через выпрямительный диод, так что напряжение, подаваемое на приемник, не зависит в значительной степени от тока, потребляемого схемой. Ток, потребляемый этой схемой, сильно различается. Если светодиод не горит, TSOP31236 потребляет менее 1 мА. При включенном светодиоде потребление увеличивается на ~ 4 мА (немного, но все равно в 4 раза больше).

Диод D1 использовался в качестве редуктора напряжения питания, но для того, чтобы действовать в этой роли, через него должен протекать «значительный» ток, чтобы на нем могло образоваться напряжение ~ 0,7 В. Важно отметить, что он должен выполнять эту функцию должным образом (все время работы), даже когда TSOP ожидает ИК-сигнала, то есть при низком энергопотреблении.

Что такое «значительный ток»? Это спорный вопрос. Он нигде не определен и зависит в основном от параметров кремниевого диода и температуры окружающей среды. Здесь мы предположили, что дополнительная нагрузка диода с током около 0,5 мА от резистора R1 будет постоянно обеспечивать «значительный ток». В результате на D1 всегда будет требоваться падение напряжения около 0,7 Вольт.

Без этого резистора схема тоже должна работать, но это более безопасное решение!

Как подключить ИК приемник к Ардуино

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с портами — GND, 5V и A0.

Для занятия нам понадобятся следующие детали:

  • Плата Arduino Uno;
  • Макетная плата;
  • USB-кабель;
  • IR приемник;
  • Пульт ДУ;
  • 1 светодиод;
  • 1 резистор 220 Ом;
  • Провода «папка-папка» и «папка-мамка».

Схема подключения ИК приемника к аналоговому порту Ардуино

Подключите IR приемник по схеме и светодиоды к 12 и 13 пину и загрузите скетч.

#include // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; void setup () // процедура setup { irrecv.enableIRIn (); // запускаем прием инфракрасного сигнала pinMode (13, OUTPUT); // пин 13 будет выходом (англ. «output») pinMode (12, OUTPUT); // пин 12 будет выходом (англ. «output») pinMode (A0, INPUT); // пин A0 будет входом (англ. «intput») Serial .begin (9600); // подключаем монитор порта } void loop () // процедура loop { if (irrecv.decode (&results)) // если данные пришли выполняем команды { Serial .println (results.value); // отправляем полученные данные на порт // включаем и выключаем светодиоды, в зависимости от полученного сигнала if (results.value == 16754775) { digitalWrite (13, HIGH); } if (results.value == 16769055) { digitalWrite (13, LOW); } if (results.value == 16718055) { digitalWrite (12, HIGH); } if (results.value == 16724175) { digitalWrite (12, LOW); } irrecv.resume (); // принимаем следующий сигнал на ИК приемнике } }

Пояснения к коду:

  1. Библиотека IRremote.h содержит набор команд и позволяет упростить скетч;
  2. Оператор decode_results присваивает получаемым сигналам от пульта дистанционного управления имя переменной results .

На что обратить внимание:

  1. Чтобы можно было управлять включением светодиода необходимо включить монитор порта и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ;
  2. Полученные данные следует внести в скетч. Измените восьмизначный код в скетче после знака двойного равенства if (results.value == 16769055) на свой.

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

В этом нам поможет дистанционное управления своими руками, схема которого приведенная в данной статье.

Схема передатчика ИК

Барьер имеет два модуля: один передатчик, а другой — приемник. Передатчик использует классический, на микросхеме 555, который работает как генератор импульсов. Эти импульсы транзистор BC327 усиливает и подаёт на инфракрасные светодиоды.

Передача импульсов имеет два преимущества. Первое: приемник, с помощью фильтров, может выделить сигнал передатчика на фоне помех. Второе: если импульсы краткие, то можно применить большую мощность светодиодов в излучателях, без риска сжечь их, и таким образом, получая больший радиус действия. Со значениями деталей, указанными на схеме, частота передачи будет 1,3 кГц и импульсы будут иметь длительность 25 мкс. А периоды молчания будут 750 мкс. Соотношение 1 к 30.


В печатной плате предусмотрена возможность подключить сразу 3 светодиода ИК-порт. Но можно подключить только один светодиод, два или три. Если не подключать все светодиоды — нужно паять перемычки из куска провода вместо светодиодов. Сопротивление токоограничения светодиодов 10 ом. Можно его повысить, если требуется уменьшить выходную мощность излучения.

ИК-связь

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

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

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

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]