Arduino — работаем с IR сигналами — приёмник TSOP22 (запись IR сигнала). Arduino Uno. Подключение ИК-приемника Подключение пульта к ардуино

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

  • Невидимый инфракрасный свет от ИК-светодиода попадает на Trima-модуль ИК-приёмник , где преобразуются в демодулированные электрические импульсы.
  • Библиотека iarduino_IR постоянно считывает и раскодирует импульсы с ИК-приёмника (используя второй аппаратный таймер Arduino)
  • В коде loop мы сверяем раскодированные библиотекой данные с назначенными устройству (лампе) и если они совпали, то меняем состояние («1»/«0») на входе Trema-модуля Твердотельное реле , следовательно, включаем или выключаем устройство (лампу).
  • Устройство может быть полезным, если назначить неиспользуемые кнопки телевизионного пульта (например цветные кнопки телетекста) для управления освещением в комнате.

    Вместо ламп накаливания, Вы можете подключить любое устройство сети ~220 В, с током потребления до 2 А.

    Нам понадобится:

    • ИК-пульт дистанционного управления x 1шт. (подойдёт любой телевизионный ИК-пульт)
    • Устройства (лампы), которыми мы будем управлять х 3шт.

    Для реализации проекта нам необходимо установить библиотеку:

    • Библиотека iarduino_IR для работы с ИК-приёмопередатчиками
      ВАЖНО : библиотека использует второй аппаратный таймер,
      НЕ ВЫВОДИТЕ СИГНАЛЫ ШИМ НА 3 ИЛИ 11 ВЫВОД!

    О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE .

    Видео:

    Схема подключения:

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

    Если Вы будете подключать устройства к другим выводам, то их номера нужно указать во второй (объявление объекта IR) и третей (объявление массива pinRelay) строках скетча . Код программы написан так, что вы можете подключить столько реле , сколько есть свободных выводов у вашей Arduino , просто перечислив номера выводов в третей строке скетча (объявление массива pinRelay).

    Алгоритм работы:

    • При старте , скетч последовательно назначает код кнопки ИК-пульта каждому твердотельному реле . Сначала мигает светодиод и замыкается цепь твердотельного реле вывод которого указан первым. Если нажать на любую кнопку ИК-пульта , то код данной кнопки присвоится этому реле и начнет мигать следующее, и так, пока всем реле не будут назначены кнопки ИК-пульта .
    • После назн ачения кнопок , все реле находятся в выключенном состоянии. Если нажать кнопку ИК-пульта , то включится реле которому присвоен код данной кнопки. Если повторно нажать на указанную кнопку, то реле выключится. Устройство не отреагирует на нажатие кнопок, код которых не присваивался ни одному реле.
    • Если Вы не хотите присваивать коды кнопок при каждом старте, то явно укажите их при объявлении массива varRelay, а из кода setup удалите циклы for и while.
    • Узнать код каждой кнопки можно написав следующую строку: if(IR.check()){Serial.println(IR.data);}

    Код программы:

    #include // подключаем библиотеку для работы с ИК приёмником iarduino_IR_RX IR(A5); // объявляем объект IR для работы с ИК приёмником (с указанием любого вывода к которому подключён ИК приёмник) const uint8_t pinRelay = {A1,A2,A3}; // объявляем массив с указанием номеров любых выводов (цифровых или аналоговых) к которым подключены твердотельные реле const uint8_t allRelay = sizeof(pinRelay); // объявляем константу передавая её количество элементов в массиве pinRelay (количество реле) uint32_t varRelay; // объявляем массив с кодами (командами) ИК-приёмника включающими реле bool modRelay; // объявляем массив с состояниями реле uint8_t setRelay; // объявляем переменную с количеством реле, для которых записана команда с ИК-приёмника void setup(){ IR.begin(); // инициализируем работу с ИК приёмопередатчиком for(uint8_t i=0; iМодуль ИК Приемника в связке и ИК пультом дистанционного управления позволит легко реализовать дистанционное управление платой Arduino.

    Он представляет из себя не что иное, как ИК приемник VS1838B с установленной на плате рекомендуемой производителем обвязкой.

    Для работы с данным модулем "из коробки" необходим ПДУ с частотой 38 кГц.

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

    Основные технические характеристики:

    Напряжение питания: 2.7 - 5.5В

    Частота модуляции: 38кГц

    Диапазон температур: - 20 ... + 80°C

    Интерфейс: Цифровой

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

    Модуль оборудован трехпиновым разъемом стандарта 2.54мм

    : подключается к выводу GND

    : подключается к выводу +5V

    : подключается к цифровому выводу (в примере D2)

    Пример работы в среде Arduino

    Для работы с данным модулем необходимо установить библиотеку IRRemote

    Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.

    Считывание показаний кнопок ПДУ

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

    В качестве примера будем использовать пульт, как на картинке, т.к. пульт такого типа идет в наборе

    Про отличия в логике работы различных пультов можно прочитать в статье-оригинале от члена нашего сообщества под ником

    Пример программного кода:

    #include int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); //Создаем объект получения сигнала с определенного порта decode_results results; //Переменная, хранящая результат void setup () { Serial // Начинаем прием } void loop () { if (irrecv.decode(&results)) //При получении сигнала... { Serial .println (results.value); //…выводим его значение в последовательный порт irrecv.resume(); } }

    В мониторе порта должны увидеть слудущее:

    При почти секундном удержании каждой кнопки, мы получаем около 10 кодов. Первый из них и является кодом кнопки. А после него начинает идти стандартный код, который сообщает о залипании кнопки.

    Управление платой Arduino c ПДУ

    Заставим светодиод на плате Arduino (D13) загораться при получении кодировки первой кнопки и выключаться при получении кодировки второй.

    Пример программного кода:

    // Тестировалось на Arduino IDE 1.0.3 #include int RECV_PIN = 2; int LED = 13; IRrecv irrecv(RECV_PIN); decode_results results; void setup () { Serial .begin (9600); irrecv.enableIRIn(); // Запуск приемника pinMode (LED, OUTPUT ); } void loop () { if (irrecv.decode(&results)) { Serial .println (results.value); if (results.value == 16769565) // При получении кодировки 1 { digitalWrite (LED, HIGH ); // Включаем светодиод } if (results.value == 16761405) // При получении кодировки 2 { digitalWrite (LED, LOW ); // Выключаем светодиод } irrecv.resume(); // Получаем следующее значение } }

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

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

    Ну так что же, как говаривал Ганнибал - "Вперед, на Карфаген" . Нам нужно просто выпаять приёмник и подключить его к плате Arduino по нижеследующей схеме...

    • Подключение ИК приёмника

    ИК-приёмник который был выпаян из платы не имеет какой либо маркировки, это просто очередной неизвестный китайский радиокомпонент, каких выпущено было тысячи. Вкратце можно сказать - в одном корпусе он объединяет фотодиод, предусилитель и формирователь . На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Несущая частота возможно(!) 36 кГц, но сейчас это не так важно... Просто попробуем его подключить к плате Arduino , условная схема даст нужную распиновку данного девайса. На схеме ниже, выделенное красным - это форма корпуса в котором выполнен наш ИК-приёмник , выделенное зеленым - распиновка по которой он подключен к плате Arduino .

    Внимание!!! На просторах интернета есть много схем распиновок для приборов в таком корпусе(TSOP). Приведённая в этой статье распиновка может не совпадать с любыми найденными в интернете, но у нас всё подключено именно так. Если при подключении ИК-приёмник начинает греться - сразу же выключайте собранную схему, значит распиновка подключения не соответствует действительной, и вам придется подбирать её практически наугад. Именно так мы и сделали, потому что найденные в интернете схемы не подошли для нашего ИК-приёмника. Здесь, в общем то главное не спалить плату Arduino, действуйте осторожно!!!

    • Библиотека IRremote

    Итак, всё подключено. Чтобы прочитать коды с пульта ДУ существует библиотека IRremote.h , именно с её помощью будем изучать наш пульт, а точнее коды кнопок. В дальнейшем используем прочитанные коды в своих целях. Скетч, при помощи которого будут прочитаны коды кнопок, представлен в примерах этой библиотеки, называется он IRrecvDemo. Внимание!!! Скетч при компиляции выдаёт ошибку, в самом начале нужно добавить еще две подключаемые библиотеки:

    #include "boarddefs.h" //Добавочная библиотека #include "IRremote.h" #include "IRremoteInt.h" //Добавочная библиотека int RECV_PIN = 2; //Пин подключения выходного сигнала с ИК-приёмника //Создаём экземпляр класса IRrecv, в качестве параметра передаём пин подключения сигнала ИК-приёмника IRrecv irrecv(RECV_PIN); decode_results results; //Переменная для сохранения полученного кода нажатой кнопки void setup() { Serial.begin(9600); irrecv.enableIRIn(); //Включение ИК-приёмника в работу } void loop() { if (irrecv.decode(&results)) //Если произошло событие/кнопка была нажата { Serial.println(results.value, HEX); //Выводим в монитор порта код нажатой кнопки в шестнадцатиричном виде irrecv.resume(); //Считываем следующую значение/кнопку } delay(100); }

    После того как скетч был залит в плату Arduino (мы используем Arduino Nano на шилде I/O Wireless Shield for Nano ), можно открыть монитор порта и посмотреть какие появляются коды при нажатии кнопок на пульте ДУ. Результат работы скетча представлен на скриншоте ниже:

    Кстати, в качестве монитора порта мы используем свой проверенный софт, если кому интересно - почитать статью и скачать Serial Monitor Pro можно .

    #define KEY_ONOFF 0x807F807F //Кнопка Включения/Выключения #define KEY_MUTE 0x807F48B7 //Кнопка Mute #define KEY_1 0x807F00FF //Кнопка 1 #define KEY_2 0x807FE01F //Кнопка 2 #define KEY_3 0x807F609F //Кнопка 3 #define KEY_4 0x807F20DF //Кнопка 4 #define KEY_5 0x807FD02F //Кнопка 5 #define KEY_6 0x807F50AF //Кнопка 6 #define KEY_7 0x807F10EF //Кнопка 7 #define KEY_8 0x807FF00F //Кнопка 8 #define KEY_9 0x807F708F //Кнопка 9 #define KEY_0 0x807FC837 //Кнопка 0

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

    • Используем два релейных модуля
    • Реле №1 привязываем к кнопке "1" пульта
    • Реле №2 привязываем к кнопке "2" пульта
    • Включение любого из релейных модулей производится нажатием на кнопку к которой он привязан
    • Выключение любого из релейных модулей также производится нажатием на кнопку к которой он привязан
    • Нажатие на кнопку On/Off безусловно выключает оба релейных модуля(если они были включены, либо один из них включеный)

    Скетч, который реализует вышеописанное задание:

    #include "boarddefs.h" //Добавочная библиотека #include "IRremote.h" #include "IRremoteInt.h" //Добавочная библиотека #define KEY_ONOFF 0x807F807F //Кнопка Включения/Выключения #define KEY_1 0x807F00FF //Кнопка 1 #define KEY_2 0x807FE01F //Кнопка 2 #define RELOUT1 3 //Выходной порт для реле 1 #define RELOUT2 4 //Выходной порт для реле 2 int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; static boolean REL1_ONOFF = false; static boolean REL2_ONOFF = false; void setup() { pinMode(RELOUT1, OUTPUT); pinMode(RELOUT2, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { switch(results.value) { case(KEY_ONOFF): REL1_ONOFF = false; REL2_ONOFF = false; break; case(KEY_1): if(REL1_ONOFF) REL1_ONOFF = false; else REL1_ONOFF = true; break; case(KEY_2): if(REL2_ONOFF) REL2_ONOFF = false; else REL2_ONOFF = true; break; } irrecv.resume(); } digitalWrite(RELOUT1, REL1_ONOFF); digitalWrite(RELOUT2, REL2_ONOFF); delay(100); }

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

    Пожалуйста, включите javascript для работы комментариев.

    ИК приемник и инфракрасный пульт дистанционного управления – самый распространенный и простой способ управления электронной аппаратурой. Инфракрасный спектр излучения не виден человеческим глазом, но он отлично принимается ИК приемниками, которые встроены в электронные приборы. Модули Arduino ir remote используются для управления различной техникой в прямой видимости.

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

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

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

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

    IR приемник Arduino

    Для считывания IR сигнала понадобятся сама плата Ардуино, макет, приемник IR сигнала и перемычки. Существует огромное множество различных приемников, но лучше использовать TSOP312 или другие соответствующие для Ардуино. Данные от пульта к приемнику могут передаваться по протоколу RC5 или NEC.

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

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

    Подключение IR приемника к ардуино

    Выходы IR приемника подключают к Ардуино к портам GND, 5V и цифровому входу. Схема подключения датчика к 11 цифровому пину изображена ниже.

    Вот так выглядит схема с модулем инфракрасного приемника:


    Библиотеки для работы с IR

    Для работы с ИК устройствами можно использовать библиотеку IRremote, которая позволяет упростить построение систем управления. Скачать библиотеку можно . После загрузки скопируйте файлы в папку \arduino\libraries. Для подключения в свой скетч библиотеки нужно добавить заголовочный файл #include .

    Для чтения информации используется пример IRrecvDumpV2 из библиотеки. Если пульт уже существует в списке распознаваемых, то сканирование не потребуется. Для считывания кодов нужно запустить среду ARduino IDE и открыть пример IRrecvDemo из IRremote.

    Существует и вторая библиотека для работы с ИК сигналами – это IRLib . Она похожа по своему функционалу на предыдущую. По сравнению с IRremote в IRLib имеется пример для определения частоты ИК датчика. Но первая библиотека проще и удобнее в использовании.

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

    Оператор decode_results нужен для того, чтобы присвоить полученному сигналу имя переменной results .

    В коде нужно переписать «HEX» в «DEC».

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

    Бывает, что при загрузке программы выдается ошибка «TDK2 was not declared In his scope». Для ее исправления нужно зайти в проводник, перейти в папку, в которой установлено приложение Arduino IDE и удалить файлы IRremoteTools.cpp и IRremoteTools.h. После этого нужно произвести перезагрузку программы на микроконтроллер.

    Заключение

    Использование Arduino ir remote упрощает жизнь пользователю. В качестве пульта дистанционного управления может выступать мобильный телефон, планшет или компьютер – для этого только нужен специальный софт. При помощи Ардуино можно централизовать все управление. Одной кнопкой на пульте можно выполнить сразу несколько действий – например, включить одновременно телевизор и Blu-Ray.

    Публикации по теме

    • Казпочта отслеживание посылок Казпочта отслеживание посылок

      Казпочта - казахстанская компания, оператор казахстанской национальной почтовой сети. Штаб-квартира - в Астане. Член Всемирного почтового...

    • Скачать моды ворд оф танк Скачать моды ворд оф танк

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