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

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

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

Применение:

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

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

Обычно, микросборка ИК-приемника имеет от трех выводов. Один является общим и подсоединяется к минусу питания 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 вольт.

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

СТАТЬЯ не ЗАКОНЧЕНА

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

Немного истории.

Уже в 1960-ых годах начали появляться первые бытовые приборы, телевизоры и радиоприёмники, с управлением на расстоянии. Сначала управление происходило по проводам, затем появлялись пульты со световым или ультразвуковым управлением. Это были уже первые "настоящие" беспроводные пульты дистаннционного управления. Но из-за звуковых или световых помех телевизор мог сам включаться или переключать каналы.
С появлением недорогих светодиодов Инфра-Красного излучения в 1970-ых годах появлиась возможность передавать сигналы с помощью невидимого для человека инфра-красного (ИК) света. А использование модулированных ИК-сигналов позволило достичь очень выскокой помехозащищённости и увеличить количество передаваемых команд.

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

Так как фотодиод, усилитель и демодулятор являются неотъемлимой частью ИК-приёмника, эти детали стали объединять в одном корпусе. Сам корпус изготавливают из пластмассы, которая пропускает ИК-лучи. Так со времением получился хорошо всем известный TSOP приёмник инфракрасных сигналов, который применяется в 99% всей бытовой аппаратуры для дистанционного управления.

Разновидности TSOP-приёмников.

Так как интегральные ИК-приёмники выпускались в разные "эпохи" и разными фирмами, существует и множество их внешних видов. Основные типы корпусов изображены на Рис. 2.


Рис. 2. Типы корпусов ИК-приёмников.

1) ИК-приёмник фирмы SHARP. Обозначение GP1Uxxx . Внутри жестяной оболочки находится небольшая печатная плата с ИК-фотодиодом и микросхемой. Такой фотоприёмник можно встретить на платах старых телевизоров и видеомагнитофонов.
2) В этом корпусе ИК-приёмники встречается наиболее часто. Выпускались ещё в середине 199x годах фирмой Telefunken с обозначением TFMSxxx . Сейчас выпускаются среди прочих фиромой Vishai и имеют обозначение TSOP1xxx .
3) ИК-приёмник в уменьшенном корпусе. Маркируется как TSOP48xx , ILOP48xx , TK18xx .
4) Очень редко встречающийся корпус ИК-приёмника. Ранее выпускался фирмой Sanyo . Обозначается как SPS440 -x.
5) ИК-фотоприёмник в SMD корпусе фирмы Vishai . Обозначение: TSOP62xx .
("x" в обозначениях означает цифру или букву.)


Рис. 3. Распиновка, вид снизу.

Распиновку каждого типа TSOP, как обычно, можно посмотреть в соответствующей на конкретную марку ИК-приёмника. Обратите внимание, что ИК-приёмники под номерами 2 и 3 имеют разную распиновку! (Рис. 3):
Vo - ножка выхода ИК-приёмника.
GND - общий вывод (минус источника питания).
Vs - вывод плюса напряжения питания, обычно от 4,5 до 5,5 вольт.

Принцип работы.


Рис. 4. Блок-схема TSOP.

Упрощённая блок-схема TSOP-приёмника приведена на Рис. 4. В качестве выходного элемента внутри TSOP используется обычный N-P-N транзистор. В неактивном состоянии транзистор закрыт, и на ножке Vo присутствует слабый уровень высокого напряжения (лог. "1"). При появлении в чувствительной зоне TSOP инфракрасного излучения с "основной" частотой этот транзистор открывается и выходная ножка Vo принимает низкий уровень сигнала (лог. "0").
"Основная" частота - это частота импульсов инфра-красного излучения (света), которую отфильтровывает внутренний демодулятор TSOP. Эта частота обычно равна 36, 38, 40 кГц, но может быть и другой, об этом необходимо справиться в даташите на конкретный тип TSOP-приёмника. Для повышения помехоустойчивости ИК-канала связи, применяется модулированная передача ИК-света. Временны е харрактеристики модуляции для помехозащитной передачи приведены в даташите на конкретный TSOP-приёмник. Но в большинстве случаев достаточно придерживаться простых правил:


Рис. 5. Принцип передачи импульсов.

1) минимальное количество импульсов в пачке - 15
2) максимальное количество импульсов в пачке - 50
3) минимальное время между пачками - 15*T
4) частота импульсов в пачке должна соответствовать основной частоте TSOP-приёмника
5) светодиод должен быть с длиной волны = 950 nm.
"T" - период "основной" частоты TSOP-приёмника.

Регулируя в некоторых пределах длину пачки импульсов, можно передавать двоичные сигналы. Длинный импульс на выходе TSOP-приёмника может означать "единицу", а короткий - "нуль" (Рис. 5). Таким образом при соблюдении правил модуляции дальность передачи цифровых сигналов на прямой видимости между светодиодом и TSOP-приёмником может достигать 10-20 метров. Скорость передачи не большая, около 1200 бит в секунду, в зависимости от применённого TSOP-приёмника.

Использование TSOP в качестве сенсора.

TSOP-приёмники можно использовать в качестве друх типов сенсоров:

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

Инфра-Карсный спектр света, так же как и видимый свет, подчиняется законам оптики:
- излучение может отражается от различных поверхностей
- интенсивность излучения уменьшается с увеличением расстояния от источника
Эти две оссобенности и используются для построения так называемых "ИК-бамперов" - безконтактных сенсоров обнаружения препятствий. Что бы исключить ложные срабатывания или ложные не срабатывания таких бамперов необходимо излучать пачки импульсов, как и при передаче комманд пультом управления.

Генерировать пачки импульсов можно с помощью обычных логических микросхем или с момощью микроконтроллера. Если в конструкции используются несколько сенсоров на основе TSOP-приёмников или несколько излучающих диодов, следует предусмотреть избирательный опрос "срабатывания" датчика. Такая избирательность достигается проверкой срабатывания TSOP-приёмника только в тот момент, когда передаётся только для него предназначенная пачка ИК-импульсов, или сразу же после её передачи.
Расстояние срабатывание ИК-бампера на основе TSOP-приёмника можно регулировать тремя способами:
1) изменяя основную частоту импульсов ИК-излучения,
2) изменяя скважность основной частоты импульсов ИК-света
3) изменяя ток через ИК-светодиод.
Выбор способа определяется удобством использования в конкретной схеме ИК-бампера.

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

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

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

Вот, например, ИК-приёмник на печатной плате телевизора.


Несмотря на кажущуюся простоту данного электронного компонента – это специализированная интегральная схема, предназначенная для приёма инфракрасного сигнала от пультов дистанционного управления (ДУ). Как правило, ИК-приёмник имеет не менее 3-х выводов. Один вывод является общим и подключается к минусу «-» питания (GND ), другой служит плюсовым «+» выводом (Vs ), а третий выходом принимаемого сигнала (Out ).

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

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

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

Микросхема приёмника ИК-излучения включает:

    PIN-фотодиод

    Регулируемый усилитель

    Полосовой фильтр

    Амплитудный детектор

    Интегрирующий фильтр

    Пороговое устройство


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

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

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

А вот так выглядит сигнал на выходе ИК-приёмника.

Стоит отметить, что избирательность полосового фильтра невелика. Поэтому ИК-модуль с фильтром на 30 килогерц вполне может принимать сигнал частотой 36,7 килогерц и более. Правда, при этом расстояние уверенного приёма заметно снижается.

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

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

В случае, когда длительность пачки импульсов чрезмерна система АРУ срабатывает, и приёмник перестаёт принимать сигнал. Такая ситуация может возникнуть, когда ИК-приёмник засвечен люминесцентной лампой с электронным балластом, который работает на частотах 30 – 50 килогерц. В таком случае промодулированное инфракрасное излучение паров ртути лампы может пройти защитный полосовой фильтр фотоприёмника и вызвать срабатывание АРУ. Естественно, при этом чувствительность ИК-приёмника падает.

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

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

Форма корпуса ИК-модуля способствует фокусировке принимаемого излучения на чувствительную поверхность фотодиода. Материал же корпуса пропускает излучение с длиной волны от 830 до 1100 нм. Таким образом, в устройстве реализован оптический фильтр. Для защиты элементов приёмника от воздействия внешних электрических полей в модуле установлен электростатический экран. На фотографии показаны ИК-модули марки HS0038A2 и TSOP2236 . Для сравнения рядом показаны обычные ИК-фотодиоды КДФ-111В и ФД-265 .

ИК-приёмники

Как проверить исправность ИК-приёмника?

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

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

О том, как проверить исправность ИК-приёмника с помощью блока питания , мультиметра и пульта ДУ читайте .

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