→ Устанавливаем дополнительный ик-приемник в спутниковый ресивер. Arduino Uno. Подключение ИК-приемника Как определить выводы ик приемника

Устанавливаем дополнительный ик-приемник в спутниковый ресивер. Arduino Uno. Подключение ИК-приемника Как определить выводы ик приемника

  • Входное напряжение: 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 ");} // Текст будет выводиться постоянно, пока кнопка удерживается }

Применение:

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

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

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

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

Тема данного вопроса, похоже, давно тревожит умы «радиотехнической общественности». Практически во всех радиожурналах были статьи на эту тему, и много в интернете. Обычно предлагается два типа решения - проводной удлинитель и радиочастотный.

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

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

Схема подключения ИК-приемника

Я же решил пойти несколько другим путем, может быть «варварским», но от этого не менее, а даже более эффективным.

Рис. 1. Примерная принципиальная схема включения ИК-приемника в ресиверах.

Рис. 2. Структурная схема фото-приемника TSOP4838.

На рисунке 1 показана схема включения фотоприемника дистанционного управления ресивера «Topfield 5000СІ». Схема состоит из интегрального фотоприемника TSOP4838 и нескольких деталей. Практически все аналогичные схемы других ресиверов выполнены точно так же, разница только в том, какой интегральный фотоприемник, на какую частоту, ну и цоколевка может отличаться.

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

На рисунке 2 показана структурная схема фотоприемника TSOP4838. Как видно, на выходе транзисторный ключ, подтянутый к плюсу питания через резистор 33 kOm. Похоже, 33 kOm показалось много, и в схеме на рисунке 1 параллельно ему включен еще резистор на 10 kOm.

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

Рис. 3. Принципиальная схема подключения дополнительного фотоприемника к спутниковому тюнеру.

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

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

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

Сам дополнительный фотоприемник прилепил к корпусу телевизора обычной изолентой.

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

Заключение

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

Но если срок гарантии истек, или вы сами мастер, это проблемы не создает никакой.

Кстати, если есть желание, можно все сделать «культурнее», установив на корпусе ресивера трехконтактный разъем для подключения кабеля от дополнительного фотоприемника, а дополнительный фотоприемник поместить в какой-нибудь корпус-подставку, и поставить возле дополнительного телевизора, либо повесить на стену.

Арканов В. В. РК-2016-04.

Вашему вниманию предлагается справочный материал по ИК фотоприемнику SFH-506-xx . Он предназначен для систем дистанционного управления бытовой радиоаппаратурой. Обеспечивает высокую помехозащищенность и чувствительность канала управления. Не реагирует на фоновые засветки. Дальность , с хорошим светодиодом, до 35 м .

Идеальный фотоприемник для ИК канала связи.

Но! Требует разработки специального драйвера и ПО, посколькуработает только в пакетном режиме при t пакета /T< 0,4.

ИК фотоприемник SFH -506-xx

Фотоприемник SFH 506 производства фирмы Siemens предназначен для приема команд дистанционного управления в инфракрасном диапазоне. Он представляет собой фотодиод, совмещенный с интегральной микросхемой. Микросхема выполняет функции автоматического регулирования уровня, усиления принимаемых ИК фотодиодом команд. Что обеспечивает высокую чувствительность. микросхема обеспечивает и приведение уровня выходного сигнала к уровням ТТЛ и КМОП микросхем. Фотодиод и микросхема имеют внутренний экран. Корпус фотоприемника выполнен из черной пластмассы, представляющей собой светофильтр высокой прозрачности для ИК излучения с длиной волны 950 нм. Это обеспечивает защиту от внешних засветок других спектральных диапазонов. Выпускаются фотоприемники с шестью частотами несущей. Это дополнительно повышает устойчивость фотоприемника к внешним засветкам, не попадающим в заданный частотный диапазон несущей.

Фотоприемник питается от источника питания +5 В и имеет малое энергопотребление.

Чертеж фотоприемника показан на рисунке 1, а его внешний вид на рисунке 2.

Рисунок 1.

Рисунок 2.

Модификации фотоприемников типа SFH 506-XX отличаются несущей частотой, которая указывается в килогерцах на месте XX и полное наименование записывается в виде SFH 506-30 для несущей частоты 30кГц. Выпускаются модификации на несущие частоты 30, 33, 36, 38, 40, 56 кГц.

Внутренняя структурная схема фотоприемника показана на рисунке 3.

Рисунок 3.

Фотоприемник содержит фотодиод, сигнал с которого усиливается входным усилителем. Схема АРУ, полосовой усилитель, демодулятор работают под управлением схемы управления. Выходным узлом фотоприемника является n -p -n транзистор в коллектор, которого включено защитное сопротивление 100 Ком. Практически это схема с открытым коллектором.

1 - GND (Общий),

2 – Vs (+5В),

3 – OUT (Выход).

Основные технические характеристики при +25°С

Напряжение питания, В 4,5 – 5,5
типовое значение В 5
Потребляемый ток (без засветки), мА <0,8
типовое значение 0,6
Потребляемый ток (при освещенности 40000 люкс), мА 1,0
Минимальная интенсивность облучения:
1. для несущих частот 30-40 КГц 1 , мВт/м 2 <0,5
типовое значение
2. для несущей частоты 56 КГц 1 , мВт/м 2 <0,6
типовое значение 0,4
Максимальная интенсивность облучения, Вт/м 2 30
Максимум спектральной чувствительности, нм 950
Диапазон спектральной чувствительности по уровню 0,1 от максимума, нм 830 – 1100
Угол видимости, дград +/- 45
Выходное напряжение при отсутствии сигнала, В 5
Выходное напряжение при I вых<0,5 мА и освещенности < 0,7 мВт/м 2 , мВ < 250
Прием команды пакетами (t пакета /T ) <0,4

1 Обеспечивается при рабочем токе I = 0,5А ИК светодиодом типа SFH 415 на расстоянии 35 м.

Предельно допустимые значения

Диапазон рабочих температур, °С -25 – +85
Предельная температура, °С +100
Напряжение на выводах питания, В -0,3 - +5
Максимальный потребляемый ток, мА 5
Выходное напряжение, В -0,3 - +6
Максимальный выходной ток, мА 5
Максимальная рассеиваемая мощностьпри температуре +85°С, мВт 50

Аналоги

Аналогами фотоприемника являются фотоприемники:

TFMS 5360, ILM 5360, 536AA 3P – совпадает назначение выводов.

TK1833, TSOP17xx, TSOP18xx, IS1U60L, GP1U52x.

Схема включения

Схема включения фотоприемника показана на рисунке 4. Учитывая высокую чувствительность усилителей фотоприемника в цепь питания обязательно устанавливать фильтр.

Величина сопротивления фильтра рекомендованная производителем 300 Ом, а емкость конденсатора 47,0 мкФ. Можно рекомендовать установку дополнительного керамического конденсатора емкостью 0,33 мкФ как можно ближе к выводам питания фотоприемника.

В некоторых схемах применяют сопротивление фильтра больше 2 КОм, что приводит к снижению напряжения на узлах фотоприемника, его чувствительности и размаха выходного напряжения.

Рисунок 4.

На выходе фотоприемника в отсутствии сигнала присутствует логическая единица.

Фотоприемник не реагирует на ИК излучение с частотой несущей отличающейся от паспортного значения.

Не все аналоги имеют такую цоколевку, известен вариант цоколевки.

1 - Vs (+5В), 2 – GND (Общий), 3 – OUT (Выход).

В сегодняшней статье будет рассматриваться подключение ИК приемника 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); } }

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

 

 

Это интересно: