Интернет. Компьютер. Помощь. Советы. Ремонт

Ардуино: инфракрасный пульт и приемник. Устанавливаем дополнительный ик-приемник в спутниковый ресивер Что такое ик приемник

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

Обычно, микросборка ИК-приемника имеет от трех выводов. Один является общим и подсоединяется к минусу питания GND , другой к плюсу V s , а третий является выходом принимаемого сигнала Out .

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

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


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

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

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

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

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

Существуют различные виды и схемы ИК приемников в зависимости от длины волны длины волны, напряжения, пакета передаваемых данных и т.п.

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

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

Проверка ИК-Приемника

Так как приемник ИК-сигналов является специализированной микросборкой, то для того, чтобы убедиться в ее работоспособности требуется подать на микросхему напряжение питания, обычно это 5 вольт. Потребляемый ток при этом будет около 0,4 – 1,5 мА.

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

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

Проведем проверку на микросхеме TSOP31236 ее распиновка соответствует рисунку выше. Плюсовой вывод от самодельного блока питания подключаем к плюсовому выводу ИК-модуля (Vs), минус – к выводу GND. А третий вывод OUT подсоединяем к плюсовому щупу мультиметра. Минусовой щуп подсоединяем к общему проводу GND. Мультиметр переключаем в режим напряжения DC на 20 V.


Как только на фотодиод ИК-микросборки начнут поступать пачки инфракрасных импульсов от , то напряжение на его выходе будет падат на несколько сотен милливольт. При этом будет хорошо заметно, как на экране мультиметра значение снизиться с 5,03 вольт до 4,57. Если отпустим кнопку ПДУ, то на экране вновь отобразиться 5 вольт.

Как видим, приемник ИК излучения правильно реагирует на сигнал с пульта. Значит модуль исправен. Аналогичным образом можно проверить любые модули в интегральном исполнении.

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

Что такое ИК-приёмник и как он работает

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

В основе этой микросхемы лежит pin фотодиод, особенный элемент, с p-n переходом и i областью между ними, аналог базы транзистора, как в бутерброде, вот вам и аббревиатура pin, в своём роде, уникальный элемент.

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

Следующие ступени, интегрирующий фильтр, амплитудный детектор и на финише их ждут выходные транзисторы.

Как правило покупать новый ик-приёмник в магазине, нет особого смысла, так как его свободно можно выпаять из различных электронных плат. Если вы собираете устройство для проверки ПДУ, из подручных материалов, не зная точной маркировки прибора, то цоколёвку можно определить самому.

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

У него три вывода, один GND, на второй подаётся плюс 5 вольт, а с третьего выходит сигнал out. Подключаем питания соответственно первой и второй ноге, и снимем напряжение с третей.

Он находится в состоянии ожидания сигнала с пульта, и на мультиметре мы видим, пять вольт. Начинаем переключать каналы или нажимать на другие кнопки, направив пульт, на него.

Если он рабочий, то напряжение будет проседать, примерно на 0,5- 1 вольта. Если всё происходит, как написано здесь, по прибор рабочий, в противном случае, элемент не исправен.

Как определить цоколевку инфракрасного приёмника

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

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

Проверка приёмника инфракрасного сигнала

Как известно, ИК-приёмник представляет собой специализированную микросхему. Это осложняет его проверку. Но, несмотря на это проверить ИК-приёмник можно. Для этого понадобятся кое-какие приспособления. А именно:

    Блок питания . Желательно, чтобы блок питания был стабилизированный с выходным напряжением 5 вольт. Можно с успехом использовать самодельный блок питания с регулируемым выходным напряжением.

    Цифровой мультиметр . Подойдёт любой цифровой мультиметр с возможностью измерения постоянного напряжения.

    Любой исправный пульт дистанционного управления (ДУ).

Перед тем как начать проверку ИК-модуля необходимо определить цоколёвку его выводов. Если этого не сделать, то можно «спалить» ИК-модуль. Если к вам в руки попал неизвестный ИК-приёмник, то не стоит торопиться с его подключением. Для начала нужно внимательно осмотреть его со всех сторон и найти его маркировку. Далее по маркировке находим даташит на данную модель ИК-приёмника на сайте alldatasheet.com или через поиск Гугла. О том, как это сделать читайте . Как правило, в даташите есть рисунок с указанием цоколёвки. Разобраться по нему легко.

Для модели приёмника TSOP31236, на котором и будут проводиться испытания, цоколёвка имеет следующий вид.

Вывод под номером 1 - это вывод общего провода (GND ). К этому выводу подключается минусовой провод блока питания. Вывод под номером 2 - это плюсовой вывод (Vs ). К нему подключается плюсовой провод блока питания. Вывод под номером 3 - это выход сигнала приёмника (OUT ).

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

Итак, собираем или паяем проверочную схему. Плюсовой вывод от блока питания (+5 V) подключаем к плюсовому выводу ИК-модуля (Vs), минус – к минусовому выводу ИК-приёмника (GND). А третий вывод ИК-приёмника (OUT) подключаем к плюсовому (красному ) щупу мультиметра. Минусовой (чёрный ) щуп мультиметра подключаем к общему проводу (GND) проверочной схемы. Мультиметр переключаем в режим измерения постоянного напряжения (DC ) на предел 20 V.

Методика проверки.

Тем, кто уже узнал, что такое ИК-приёмник известно, что пока на ИК-приёмник не попадает излучение от пульта ДУ, на его выходе присутствует напряжение практически равное напряжению его питания. То есть 5 вольт. Оно не измениться до тех пор, пока на чувствительный фотодиод приёмника не начнут попадать «пачки» инфракрасных импульсов от пульта ДУ. На фото видно, что на выходе (OUT) ИК-приёмника 5,03 вольт.

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

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

Жмём на любую кнопку пульта ДУ и не отпускаем. При этом будет видно, как на дисплее мультиметра значение напряжения упадёт с 5,03 вольт до 4,57. Напряжение на выходе уменьшилось на 460 милливольт (mV).

Если отпустить кнопку пульта ДУ, то на дисплее значение напряжения вновь восстановиться до 5 вольт.

Как видим, приёмник инфракрасного сигнала исправно реагирует на сигнал с пульта ДУ. Значит ИК-модуль исправен . Аналогичным образом можно проверить и другие приёмники инфракрасного сигнала в модульном исполнении.

Думаю, понятно, что если ИК-приёмник не реагирует на сигналы с пульта ДУ и на его выходе напряжение не меняется ни на милливольт, то с большой степенью вероятности можно утверждать о том, что ИК-приёмник неисправен. На практике проводилась проверка ИК-приёмника HS0038 взятого из цветного телевизора, который сгорел во время грозы. Так вот, при проверке ИК-приёмника оказалось, что на его выходе отсутствует напряжение даже в «ждущем» режиме, а ток потребления равен 0. ИК-модуль оказался сгоревшим (скорее всего из-за превышения напряжения питания более 6 вольт).

Среди инфракрасных приёмников серии TSOP и аналогичных есть так называемые низковольтные экземпляры. В своей маркировке они имеют цифру 3. Представителем такого низковольтного ИК-модуля является TSOP 3 1236. Данный ИК-приёмник работает уже при напряжении питания 3 вольта.

Если проверяется низковольтный экземпляр ИК-приёмника (например, такой как TSOP31236 ), то на ИК-модуль можно подать напряжение питания как в 3 вольта, так и в 5 вольт. Методика проверки такого ИК-приёмника аналогична описанной.

При проверке приёмников инфракрасного сигнала стоит помнить, что любой из них имеет в своём составе фильтр. Фильтр этот настроен на определённую частоту, обычно лежащую в диапазоне 30-40 килогерц. Но на практике в руки может попасть и ИК-модуль с частотой настройки фильтра и 56, и 455 килогерц (мало ли ). Так вот, инфракрасный сигнал от рядового пульта такой приёмник может быть и будет принимать, но на выходе сигнала не будет. Почему? Потому что пульт ДУ будет излучать сигнал промодулированный частотой, например, 36 килогерц, а приёмник настроен на приём сигнала, промодулированный частотой в 455 килогерц. Понятно, что в таком случае сигнал просто не пройдёт через фильтр.

Для широко распространённых ИК-приёмников серии TSOP и аналогов частота настройки фильтра обычно составляет 36; 36,7 и 38 килогерц. Они хорошо принимают сигнал практически от любого пульта ДУ, взятого от бытовой электроники. И даже если частота фильтра не совсем совпадает с частотой модуляции сигнала от пульта ДУ, сигнал будет приниматься. Иногда для этого требуется всего лишь ближе поднести пульт к ИК-приёмнику.

  • Входное напряжение: 2,7 ... 5,5 В
  • Потребляемый ток: 0,65 … 1,05 мА (при Vсс = 5В) номинально 0,9 мА
  • Несущая частота: 38 кГц
  • Длинна световой волны: 850 … 1050 нм (пропускаемая фильтром более 80%)
  • Чувствительность: 0,17… 30000 мW/м2 (к мощности светового потока)
  • Расстояние приёма: до 45 м
  • Рабочая температура: -25 … 85 °C
  • Угол направленности: ±45°

Все модули линейки "Trema" выполнены в одном формате

Подключение:

Модуль подключается к любому цифровому выводу arduino. В комплекте имеется кабель для быстрого и удобного подключения к Trema Shield .

Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1: Используя проводной шлейф и Piranha UNO


Библиотека использует второй аппаратный таймер,

НЕ ВЫВОДИТЕ СИГНАЛЫ ШИМ НА 3 ИЛИ 11 ВЫВОД!

Подробнее про установку библиотеки читайте в нашей ..

Дополнительная информация по работе с модулем:

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

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

Количество информационных пакетов у большинства пультов равно одному, но некоторые устройства, например кондиционеры, используют 2, 3 и более информационных пакетов.

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

Длительность пауз между пакетами: обычно не превышает 200мс.

Протоколы передачи данных: определяют следующие, основные, параметры:

  • несущую частоту;
  • способ кодирования информации, длительность импульсов и пауз передаваемых битов;
  • количество информационных пакетов:
  • состав информационного пакета и пакетов повторов;
  • длительность пауз между пакетами;
  • наличие и форму сигналов Start, Stop и Toggle;

Несущая частота: у большинства пультов равна 38 кГц, именно на эту частоту настроен Trema ИК-приёмник .

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

  • кодирование длиной импульсов - сначала передаётся импульс, длина которого зависит от значения передаваемого бита, затем следует пауза, длина которой не зависит от значения бита. Например: в протоколе SIRC (Sony), длина импульса для бита «1» = 1200мкс, а для бита «0» = 600мкс, длина пауз всегда равна 600мкс. Таким образом можно отличить «1» от «0» по длине импульса.
  • кодирование длинной пауз - сначала передаётся импульс, длина которого не зависит от значения передаваемого бита, затем следует пауза, длина которой зависит от значения бита. Например: в протоколе NEC, длина паузы для бита «1» = 1687,5мкс, а для бита «0» = 562,5мкс, длина импульсов всегда равна 562,5мкс. Таким образом можно отличить «1» от «0» по длине паузы.
  • бифазное кодирование - длина импульса равна длине паузы, а их последовательность определяет тип передаваемого бита. Например: в протоколе RS5 (Philips), для бита «1» импульс следует за паузой, а для бита «0» пауза следует за импульсом. Для протокола NRC (Nokia), наоборот, для бита «1» пауза следует за импульсом, а для бита «0» импульс следует за паузой.

Сигналы Start, Stop и Toggle: по своему названию располагаются в начале, конце или середине пакета.

Stop: При кодировании длинной паузы, нельзя определить значение последнего бита в пакете, так как после пакета следует большая пауза, и последний бит будет всегда определяться как «1», поэтому в пакет добавляется сигнал Stop представляющий из себя импульс не несущий никакой информации.

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

Toggle: Это бит, который меняет своё значение при каждом новом нажатии на кнопку, используется в протоколах RS5, RS5X, RS6 (Philips), где пакеты повторов полностью повторяют данные информационного пакета. Таким образом принимающее устройство может отличить удержание кнопки от её повторного нажатия.

Примеры:

Проверка наличия данных поступивших с ИК-пульта , осуществляется функцией check(). Эта функция реагирует на нажатие кнопок ИК-пульта , но если её вызывать с параметром true , то она будет реагировать и на удержание кнопок.

Чтение данных с любого пульта, реагируем только на нажатие кнопок:

#include // Подключаем библиотеку для работы с ИК-приёмником iarduino_IR_RX IR(7); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник void setup(){ Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек IR.begin(); // Инициируем работу с ИК-приёмником } void loop(){ if(IR.check()){ // Если в буфере имеются данные, принятые с пульта (была нажата кнопка) Serial.println(IR.data, HEX); // Выводим код нажатой кнопки Serial.println(IR.length); // Выводим количество бит в коде } }

В данном скетче функция check() вызывается без аргументов, значит и реагирует она только на нажатия кнопок ИК-пульта .

Чтение данных с любого пульта, реагируем на удержание кнопок:

#include // Подключаем библиотеку для работы с ИК-приёмником iarduino_IR_RX IR(6); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник void setup(){ Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек IR.begin(); // Инициируем работу с ИК-приёмником } void loop(){ if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка) Serial.println(IR.data, HEX); // Выводим код нажатой кнопки Serial.println(IR.length); // Выводим количество бит в коде } }

В данном скетче функция check() вызывается с параметром true , значит и реагирует она как на нажатия, так и на удержания кнопок ИК-пульта .

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

#include // Подключаем библиотеку для работы с ИК-приёмником iarduino_IR_RX IR(6); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник // bool flgKey1 = false; uint32_t codKey1 = 0xFF30CF; // Определяем флаг нажатия и код кнопки 1 bool flgKey2 = false; uint32_t codKey2 = 0xFF18E7; // Определяем флаг нажатия и код кнопки 2 bool flgKey3 = false; uint32_t codKey3 = 0xFF7A85; // Определяем флаг нажатия и код кнопки 3 bool flgKey = false; uint32_t tmrKey = 0; // Определяем флаг разрещающий вывод данных в монитор и время последнего нажатия кнопки. // void setup(){ // Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек IR.begin(); // Инициируем работу с ИК-приёмником } // // void loop(){ // if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка), то... if(millis()-200 > tmrKey){ // Если с последней поступившей команды прошло более 200 мс, то flgKey1=false; // Считаем что кнопка 1 не удерживается flgKey2=false; // Считаем что кнопка 2 не удерживается flgKey3=false; // Считаем что кнопка 3 не удерживается } tmrKey = millis(); flgKey=true; // Сохраняем время последней реакции на пульт и азрешаем вывод данных if(IR.data==codKey1){ if(flgKey1){flgKey=false;} flgKey1=true; }else{flgKey1=false;} // Запрещаем вывод данных кнопки 1 при её удержании if(IR.data==codKey2){ if(flgKey2){flgKey=false;} flgKey2=true; }else{flgKey2=false;} // Запрещаем вывод данных кнопки 2 при её удержании if(IR.data==codKey3){ if(flgKey3){flgKey=false;} flgKey3=true; }else{flgKey3=false;} // Запрещаем вывод данных кнопки 3 при её удержании if(flgKey){ // Если вывод данных разрешен, то... Serial.println(IR.data, HEX); // Выводим код нажатой кнопки Serial.println(IR.length); // Выводим количество бит в коде } // } // } //

В данном скетче функция check() вызывается с параметром true , значит она реагирует как на нажатия, так и на удержания кнопок ИК-пульта . Но вывод данных в монитор последовательного порта осуществляется только при установленном флаге flgKey , который сбрасывается при удержании кнопок с кодами 0xFF30CF , 0xFF18E7 и 0xFF7A85 . Получается что на 3 кнопки скетч реагирует только при нажатии, а на остальные кнопки, как на нажатие, так и на удержание.

Чтение данных только с тех пультов, которые работают по указанному протоколу:

#include // Подключаем библиотеку для работы с ИК-приёмником iarduino_IR_RX IR(5); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник void setup(){ Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек IR.begin(); // Инициируем работу с ИК-приёмником IR.protocol("Ae`` `|LJ` @@@@BPBp"); // Указываем протокол передачи данных, на который следует реагировать } void loop(){ if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка) Serial.println(IR.data, HEX); // Выводим код нажатой кнопки Serial.println(IR.length); // Выводим количество бит в коде } }

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

Получение протокола передачи данных и типа кодировки:

#include // Подключаем библиотеку для работы с ИК-приёмником iarduino_IR_RX IR(4); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник void setup(){ Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек IR.begin(); // Инициируем работу с ИК-приёмником } void loop(){ if(IR.check()){ // Если в буфере имеются данные, принятые с пульта (была нажата кнопка) Serial.println(IR.protocol()); // Выводим строку протокола передачи данных } }

В данном примере описано как получить протокол передачи данных ИК-пультов . В статье , описано, как передавать коды кнопок по указанному протоколу.

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

Описание основных функций библиотеки:

Подключение библиотеки:

#include // Подключаем библиотеку, для работы с ИК-приёмником. iarduino_IR_RX IR(№_ВЫВОДА [, ИНВЕРСИЯ]); // Объявляем объект IR, с указанием номера вывода, к которому подключён ИК-приёмник. // Вторым параметром, типа bool, можно указать, что данные с приёмника являются инверсными.

Функция begin();

  • Назначение: инициализация работы с ИК-приёмником
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
IR.begin(); // Инициируем работу с ИК-приёмником

Функция check();

  • Назначение: Проверка наличия принятых с пульта данных.
  • Синтаксис: check([ УДЕРЖАНИЕ ]);
  • Параметры:
    • УДЕРЖАНИЕ - необязательный параметр, типа bool - указывающий что необходимо реагировать на удержание кнопок пульта.
  • Возвращаемые значения: bool - приняты или нет, данные с пульта.
  • Примечание: Если функция вызвана без параметра, или он равен false, то функция будет реагировать только на сигналы с пульта при нажатии его кнопок, а если указать true, то функция будет реагировать, как на нажатие, так и на удержание кнопок пульта.
  • Пример:
if(IR.check()){ ... ;} // Если приняты данные с пульта, при нажатии его кнопки if(IR.check(true)){ ... ;} // Если принимаются данные с пульта, при удержании кнопки

Функция protocol();

  • Назначение: Получение, установка или сброс протокола передачи данных.
  • Синтаксис: protocol([ ПАРАМЕТР ]);
  • Получение протокола: Если функция вызвана без параметра, то она вернёт строку из 25 символов + символ конца строки. Биты данной строки, несут информацию о типе протокола передачи данных пульта, данные которого были приняты последними. Данную строку можно использовать для установки протокола ИК-передатчику, или ИК-приёмнику (см.ниже).
  • Установка протокола: Если функция вызвана с параметром в виде строки из 25 символов протокола + символ конца строки, то после этого, функция chek(), будет реагировать только на пульты, соответствующие указанному протоколу передачи данных.
  • Сброс протокола: Если функция вызвана с параметром IR_CLEAN, то функция chek() опять станет реагировать на сигналы с любых пультов.
  • Получение параметров протокола: Если функция вызвана с параметром int, от 0 до 17, то она вернёт не строку протокола, а значение типа int с одним из параметров протокола передачи данных пульта, данные которого были приняты последними:
    • 0 - тип кодировки:
      • IR_UNDEFINED - тип кодировки не определён;
      • IR_PAUSE_LENGTH - кодирование длинной паузы;
      • IR_PULSE_LENGTH - кодирование длинной (шириной) импульса (ШИМ);
      • IR_BIPHASIC - бифазное кодирование;
      • IR_BIPHASIC_INV - бифазное кодирование с инверсными битами;
      • IR_NRC - пакеты повтора идентичны, а первый и последний пакеты специальные;
      • IR_RS5 - кодировка PHILIPS с битом toggle;
      • IR_RS5X - кодировка PHILIPS с битом toggle;
      • IR_RS6 - кодировка PHILIPS с битом toggle.
    • 1 - несущая частота передачи данных (в кГц);
    • 2 - заявленное количество информационных бит в 1 пакете;
    • 3 - заявленное количество информационных бит в пакете повтора;
    • 4 - длительность паузы между пакетами (в мс);
    • 5 - длительность импульса в стартовом бите (в мкс);
    • 6 - длительность паузы в стартовом бите (в мкс);
    • 7 - длительность импульса в стоповом бите (в мкс);
    • 8 - длительность паузы в стоповом бите (в мкс);
    • 9 - длительность импульса в бите рестарт или toggle (в мкс);
    • 10 - длительность паузы в бите рестарт или toggle (в мкс);
    • 11 - позиция бита рестарт или toggle в пакете (№ бита);
    • 12 - максимальная длительность импульса в информационных битах (в мкс);
    • 13 - минимальная длительность импульса в информационных битах (в мкс);
    • 14 - максимальная длительность паузы в информационных битах (в мкс);
    • 15 - минимальная длительность паузы в информационных битах (в мкс);
    • 16 - флаг наличия стартового бита (true/false);
    • 17 - флаг наличия стопового бита (true/false);
    • 18 - флаг наличия бита рестарт или toggle (true/false);
    • 19 - тип пакета повтора (0-нет, 1-с инверсными битами, 2-идентичен информационному, 3-уникален);
  • Возвращаемые значения: Зависят от наличия и типа параметра.
  • Примечание: Если ранее был установлен протокол, то попытка получения протокола, или параметров протокола, вернёт значения установленного ранее протокола, а не протокола передачи данных пульта, данные которого были приняты последними.
  • Пример:
IR.protocol("AeQQV~zK]Kp^KJp[@@@@@@@Bp"); // Устанавливаем протокол. Теперь приёмник будет получать данные, только от пультов телевизора ELENBERG. IR.protocol(IR_CLEAN); // Сбрасываем ранее установленный протокол. Теперь приёмник снова будет реагировать на любые пульты. if(IR.check()){ Serial.println(IR.protocol()); } // Получаем протокол. Как только приёмник получит данные, в мониторе высветится строка из 25 символов протокола. if(IR.check()){ Serial.println(IR.protokol(12)); } // Получаем один из параметров протокола. Как только приёмник получит данные, в мониторе отобразится максимальная длительность импульса информационного бита в микросекундах.

Переменная data

  • Значение: Возвращает код кнопки, принятый с пульта;
  • Тип данных: uint32_t.
if(IR.check()){ Serial.println(IR.data); } // Выводим код нажатой кнопки, если он принят

Переменная length

  • Значение: Возвращает размер кода кнопки, в битах;
  • Тип данных: uint8_t.
if(IR.check()){ Serial.println(IR.length); } // Выводим размер кода нажатой кнопки, если он принят

Переменная key_press

  • Значение: Возвращает флаг, указывающий на то, что кнопка пульта нажимается а не удерживается;
  • Тип данных: bool.
if(IR.check(true)){ if(IR.key_press){Serial.println("PRESS");} // Текст будет выведен 1 раз, когда кнопка нажимается else {Serial.println("HOLD ");} // Текст будет выводиться постоянно, пока кнопка удерживается }

Применение:

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

В сегодняшней статье будет рассматриваться подключение ИК приемника TSOP34836 к плате Aduino UNO. Для этих целей можно применить любой имеющийся у вас приемник, совместимый с вашим пультом по частоте. Назначение выводов показано на рисунке.

1. Vout – выход приемника.
2. GND – «земля», общий провод.
3. Vcc – питание.
Передача данных от ИК пульта к приемнику осуществляется по протоколу RC5, представляющий из себя последовательность импульсов. Подключение осуществляется по следующей схеме.

А собрав, получаем примерно следующее:

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

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

Теперь в консоле COM - порта можно наблюдать код нажимаемой клавиши в HEX.


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

В качестве демонстрации будет показано, как с помощью ИК-пульта управлять сервомашинкой.

Схема устройства:

Вот так оно должно выглядеть:

Для работы устройства используем следующий код:

#include "Servo.h" #include "IRremote.h" IRrecv irrecv(11); decode_results results; Servo servoMain; int servPoz = 90; //Начальное положение сервы int lastPoz = 0; void setup() { irrecv.enableIRIn(); servoMain.attach(10); // Servo присоединен к 10 выводу servoMain.write(servPoz); } void loop() { if (irrecv.decode(&results)) { int res = results.value; Serial.println(res, HEX); if(res==0xFFFF906F)// Если нажата кнопка "+" { lastPoz=res; servPoz++; servoMain.write(servPoz); } else if(res==0xFFFFA857)// Если нажата кнопка "-" { servPoz--; lastPoz=res; servoMain.write(servPoz); } else if(res==0xFFFFFFFF)// Если кнопку удерживают { if(lastPoz==0xFFFF906F) servPoz++;// Удерживают "+" if(lastPoz==0xFFFFA857) servPoz--;// Удерживают "-" servoMain.write(servPoz); } irrecv.resume(); delay(100); } }

Пульт используется какой-то китайский, при нажатии "+" серва вращается в одну сторону, при нажатии "-", в другую.

Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!