Модуль инфракрасного передатчика
Описание
Модуль инфракрасного передатчика представляет из себя плату со светодиодом, для передачи сигнала в инфракрасном диапазоне. С помощью данного модуля можно производить передачу информации беспроводным способом. Также, можно сымитировать нажатие кнопок (клавиш) пульта дистанционного управления, тем самым не приходя к помощи механического воздействия на пульт.
Технические характеристики
- Цвет свечения: ИК
- Длина волны: 940 нм
- Мощность ИК излучения: 60мВт/ср
- Угол по горизонтали/вертикали: 34°/34°
Физические размеры
- Модуль (Д х Ш х В): 20 х 30 х 12 (мм)
Плюсы использования
- Модуль не требует дополнительной обвязки
- Имеет три вывода и шлейф в комплекте, облегчая подключение через Sensor шилд
- Передача любых данных беспроводным способом
Минусы использования
- Не высокая дальность (в сравнении с пультами управления)
Библиотека для работы с модулем
В среде разработки Arduino по-умолчанию присутствует библиотека для работы с ИК приёмником и передатчиком - она называется <RobotIRremote>, однако она работает некорректно и её необходимо удалить чтобы две библиотеки не конфликтовали друг с другом. Для этого перейдите в папку установки Arduino/Libraries и удалите папку RobotIRremote.
Обратите внимание что для работы ИК-приёмника и ИК передатчика используется одна и та же библиотека <IRremote>. Таким образом скачивать и устанавливать данную библиотеку дважды не требуется!
Примеры подключения и использования модуля
В примерах происходит подключение модуля ИК передатчика к первому контроллеру (что по сути является передатчиком). Подключение модуля приёмника ИК-сигнала ко второму контроллеру (приёмник). Таким образом, после заливки скетча иллюстрируется пример передачи информации с контроллера №1 (передатчика) на контроллер №2 (приёмник). Примеры тестировались на контроллерах Smart UNO.
Пример 1
Передача 1 и 0 с частотой в одну секунду. Передача происходит по алгоритму RC5.
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 2 |
Sensor shield | 2 |
Модуль ИК передатчика | 1 |
Модуль ИК приёмника TSOP4838 | 1 |
Шлейф х3 | 2 |
Шаг 1: Подключите модуль ИК-передатчика к контроллеру №1:
Загрузите следующий скетч в контроллер №1:
#include <IRremote.h> //подключение библиотеки для работы с модулем ИК-передатчика IRsend irsend; //объявление объекта ИК-передатчика void setup() { } void loop() { irsend.sendRC5(0x10, 8); //отослать цифру 0 по алгоритму RC5 delay(1000); // задержка в 1 секунду irsend.sendRC5(0x11, 8); //отослать цифру 1 по алгоритму RC5 delay(1000); // задержка в 1 секунду }
Шаг 2. Подключите ИК-приёмник к контроллеру №2.
Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные.
#include <IRremote.h> // подключение библиотеки const int IR_pin = 8; // пин подключения инфракрасного приемника decode_results results; // переменная для хранения результата приема IRrecv irreceiver(IR_pin); // создание объекта приемника void setup() { irreceiver.enableIRIn(); // инициализация приемника Serial.begin(9600); // инициализация Serial порта } void loop() { if (irreceiver.decode(&results)) { // если что-то пришло Serial.print(results.value); // сообщить значение приема в монитор ( десятичная система счисления) Serial.print(" dec, in hex: "); // дополнительная поясняющая запись Serial.println(results.value, HEX); // сообщить значение приема в монитор (шестнадцатиричная система счисления) irreceiver.resume(); // возобновление работы ИК приемника } }
Пример 2
Передача 1 и 0 с частотой в одну секунду. Передача происходит по алгоритму RC5. При приёме сигнала считаем что 1 - это команда ко включению светодиода, 0 - к выключению светодиода. Таким образом, на стороне приёмника модуль светодиода мигает с частотой в 1 секунду.
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 2 |
Sensor shield | 2 |
Модуль ИК передатчика | 1 |
Модуль ИК приёмника TSOP4838 | 1 |
Шлейф х3 | 3 |
Модуль светодиода (красный) | 1 |
Шаг 1: Подключите модуль ИК-передатчика к контроллеру №1:
Загрузите следующий скетч в контроллер №1:
#include <IRremote.h> //подключение библиотеки для работы с модулем ИК-передатчика IRsend irsend; //объявление объекта ИК-передатчика void setup() { } void loop() { irsend.sendRC5(0x10, 8); //отослать цифру 0 по алгоритму RC5 delay(1000); // задержка в 1 секунду irsend.sendRC5(0x11, 8); //отослать цифру 1 по алгоритму RC5 delay(1000); // задержка в 1 секунду }
Шаг 2. Подключите ИК-приёмник и модуль светодиода к контроллеру №2.
Загрузите в контроллер №2 следующий скетч, и наблюдайте мигание модуля светодиода.
#include <IRremote.h> //подключение библиотеки const int IR_pin = 8; //пин подключения инфракрасного приемника const int LED = 13; // пин подключения светодиода bool CUR_state = LOW; //состояние светодиода (изначально выключен) bool NEW_state = LOW; // новое стостояние светодиода (изначально выключен) decode_results results; //переменная для хранения результата приема IRrecv irreceiver(IR_pin); //создание объекта приемника void setup() { irreceiver.enableIRIn(); //инициализация приемника pinMode(LED, OUTPUT); //конфигурация вывода светодиода на выход digitalWrite(LED, CUR_state); //изначальная установка режима вывода светодиода в LOW } void loop() { if (irreceiver.decode(&results)) { //если что-то пришло irreceiver.resume(); //возобновление работы ИК приемника switch (results.value) { //в зависимости от полученных данных case 16: //если это 0х10 (или 16 в десятиричной системе) NEW_state = LOW; //новый статус = ПОГАСИТЬ break; case 17: //если это 0х11 (или 17 в десятиричной системе) NEW_state = HIGH; //новый статус = ВКЛЮЧИТЬ break; } if (NEW_state != CUR_state) { //если новый статус изменился digitalWrite(LED, NEW_state); //применить изменение к свету CUR_state = NEW_state; //теперь новый статус стал текущим } } }
Пример 3
В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок пульта дистанционного управления. (Коды кнопок в шестнадцатиричной системе счисления)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 2 |
Sensor shield | 2 |
Модуль ИК передатчика | 1 |
Модуль ИК приёмника TSOP4838 | 1 |
Шлейф х3 | 2 |
Шаг 1: Подключите модуль ИК-передатчика к контроллеру №1:
Загрузите следующий скетч в контроллер №1:
#include <IRremote.h> //подключение библиотеки для работы с ИК-передатчиком //далее определяется соответствие синонимов кнопок цифрам #define PLUS 1 //цифре 1 определен синоним "PLUS" #define MINUS 2 //цифре 2 определен синоним "MINUS" #define ONOFF 3 //цифре 3 определен синоним "ONOFF" #define BACK 4 //цифре 4 определен синоним "BACK" #define FWD 5 //цифре 5 определен синоним "FWD" #define PLAY 6 //цифре 6 определен синоним "PLAY" #define MENU 7 //цифре 7 определен синоним "MENU" #define CANS 8 //цифре 8 определен синоним "CANS" IRsend irsend; //объект для работы с ИК-приёмником //функция, возвращающая код кнопки пульта // http://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy unsigned long buttonCode(const int& definitionButton) { switch (definitionButton) { // на входе синоним кнопки case PLUS: //если это кнопка PLUS return 0xFF02FD; //вернуть её код в шестнадцатиричной системе счисления case MINUS: //если это кнопка MINUS return 0xFF9867; //вернуть её код в шестнадцатиричной системе счисления case ONOFF: //если это кнопка ONOFF return 0xFFA25D; //вернуть её код в шестнадцатиричной системе счисления case BACK: //если это кнопка BACK return 0xFFE01F; //вернуть её код в шестнадцатиричной системе счисления case FWD: //если это кнопка FWD return 0xFF906F; //вернуть её код в шестнадцатиричной системе счисления case PLAY: //если это кнопка PLAY return 0xFFA857; //вернуть её код в шестнадцатиричной системе счисления case MENU: //если это кнопка MENU return 0xFFE21D; //вернуть её код в шестнадцатиричной системе счисления case CANS: //если это кнопка CANS return 0xFFB04F; //вернуть её код в шестнадцатиричной системе счисления default: //если синоним неизвестен return 0x0; //вернётся 0 } } void setup() { } void loop() { //в цикле от 1 до 8 for (int i = 1; i <= 8; i++) { irsend.sendNEC(buttonCode(i), 32); //послать код кнопки (имитировать нажатие кнопки на пульте управления) delay(1000); //задержка в 1 секунду } }
Шаг 2. Подключите ИК-приёмник к контроллеру №2.
Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные.
#include <IRremote.h> //подключение библиотеки const int IR_pin = 8; //пин подключения инфракрасного приемника decode_results results; //переменная для хранения результата приема IRrecv irreceiver(IR_pin); //создание объекта приемника //функция переводящая код кнопки в её обозначение // для пульта http://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy String whatIsTheButtonPressed(const unsigned long &value) { switch (value) { case (unsigned long)0xFF02FD: return "+"; case (unsigned long)0xFF9867: return "-"; case (unsigned long)0xFFA25D: return "ONOFF"; case (unsigned long)0xFFE01F: return "<<"; case (unsigned long)0xFF906F: return ">>"; case (unsigned long)0xFFA857: return "PLAY"; case (unsigned long)0xFFE21D: return "MENU"; case (unsigned long)0xFFB04F: return "C"; default: return "UNNOWN"; } } void setup() { Serial.begin(9600); //инициализация Serial - порта irreceiver.enableIRIn(); //инициализация приемника } void loop() { if (irreceiver.decode(&results)) { //если что-то пришло Serial.print(results.value, HEX); //сообщить значение приема в монитор (в шестнадцатиричной системе счисления) Serial.print(" "); //выведем разделитель - пробел Serial.println(whatIsTheButtonPressed(results.value)); //сообщить значение кнопки в монитор irreceiver.resume(); //возобновление работы ИК приемника } }
Пример 4
В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок пульта дистанционного управления. (Коды кнопок в десятичной системе счисления)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 2 |
Sensor shield | 2 |
Модуль ИК передатчика | 1 |
Модуль ИК приёмника TSOP4838 | 1 |
Шлейф х3 | 2 |
Шаг 1: Подключите модуль ИК-передатчика к контроллеру №1:
Загрузите следующий скетч в контроллер №1:
#include <IRremote.h> //подключение библиотеки для работы с ИК-передатчиком //далее определяется соответствие синонимов кнопок цифрам #define PLUS 1 //цифре 1 определен синоним "PLUS" #define MINUS 2 //цифре 2 определен синоним "MINUS" #define ONOFF 3 //цифре 3 определен синоним "ONOFF" #define BACK 4 //цифре 4 определен синоним "BACK" #define FWD 5 //цифре 5 определен синоним "FWD" #define PLAY 6 //цифре 6 определен синоним "PLAY" #define MENU 7 //цифре 7 определен синоним "MENU" #define CANS 8 //цифре 8 определен синоним "CANS" IRsend irsend; //объект для работы с ИК-приёмником //функция, возвращающая код кнопки пульта // http://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy unsigned long buttonCode(const int& definitionButton) { switch (definitionButton) { // на входе синоним кнопки case PLUS: //если это кнопка PLUS return 16712445; //вернуть её код в шестнадцатиричной системе счисления case MINUS: //если это кнопка MINUS return 16750695; //вернуть её код в шестнадцатиричной системе счисления case ONOFF: //если это кнопка ONOFF return 16753245; //вернуть её код в шестнадцатиричной системе счисления case BACK: //если это кнопка BACK return 16769055; //вернуть её код в шестнадцатиричной системе счисления case FWD: //если это кнопка FWD return 16748655; //вернуть её код в шестнадцатиричной системе счисления case PLAY: //если это кнопка PLAY return 16754775; //вернуть её код в шестнадцатиричной системе счисления case MENU: //если это кнопка MENU return 16769565; //вернуть её код в шестнадцатиричной системе счисления case CANS: //если это кнопка CANS return 16756815; //вернуть её код в шестнадцатиричной системе счисления default: //если синоним неизвестен return 0x0; //вернётся 0 } } void setup() { } void loop() { //в цикле от 1 до 8 for (int i = 1; i <= 8; i++) { irsend.sendNEC(buttonCode(i), 32); //послать код кнопки (имитировать нажатие кнопки на пульте управления) delay(1000); //задержка в 1 секунду } }
Шаг 2. Подключите ИК-приёмник к контроллеру №2.
Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные.
#include <IRremote.h> //подключение библиотеки const int IR_pin = 8; //пин подключения инфракрасного приемника decode_results results; //переменная для хранения результата приема IRrecv irreceiver(IR_pin); //создание объекта приемника //функция переводящая код кнопки в её обозначение // для пульта http://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy String whatIsTheButtonPressed(const unsigned long &value) { switch (value) { case (unsigned long)16712445: return "+"; case (unsigned long)16750695: return "-"; case (unsigned long)16753245: return "ONOFF"; case (unsigned long)16769055: return "<<"; case (unsigned long)16748655: return ">>"; case (unsigned long)16754775: return "PLAY"; case (unsigned long)16769565: return "MENU"; case (unsigned long)16756815: return "C"; default: return "UNNOWN"; } } void setup() { Serial.begin(9600); //инициализация Serial - порта irreceiver.enableIRIn(); //инициализация приемника } void loop() { if (irreceiver.decode(&results)) { //если что-то пришло Serial.print(results.value); //сообщить значение приема в монитор (в шестнадцатиричной системе счисления) Serial.print(" "); //выведем разделитель - пробел Serial.println(whatIsTheButtonPressed(results.value)); //сообщить значение кнопки в монитор irreceiver.resume(); //возобновление работы ИК приемника } }