Эта страница только для чтения. Вы можете посмотреть исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Модуль инфракрасного передатчика ====== ===== Описание ===== Модуль инфракрасного передатчика представляет из себя плату со светодиодом, для передачи сигнала в инфракрасном диапазоне. С помощью данного модуля можно производить передачу информации беспроводным способом. Также, можно сымитировать нажатие кнопок (клавиш) пульта дистанционного управления, тем самым не приходя к помощи механического воздействия на пульт. ==== Технические характеристики ==== * Цвет свечения: ИК * Длина волны: 940 нм * Мощность ИК излучения: 60мВт/ср * Угол по горизонтали/вертикали: 34°/34° ==== Физические размеры ==== * Модуль (Д х Ш х В): 20 х 30 х 12 (мм) ==== Плюсы использования ==== * Модуль не требует дополнительной обвязки * Имеет три вывода и шлейф в комплекте, облегчая подключение через Sensor шилд * Передача любых данных беспроводным способом ==== Минусы использования ==== * Не высокая дальность (в сравнении с пультами управления) ==== Библиотека для работы с модулем ==== * [[https://files.smartelements.ru/know_libs/irremote_master.zip|Скачать (irremote)]] * [[https://files.smartelements.ru/datasheet/tsal6200.pdf|Даташит]] <WRAP center round important 60%> В среде разработки Arduino по-умолчанию присутствует библиотека для работы с ИК приёмником и передатчиком - она называется <RobotIRremote>, однако она работает некорректно и её необходимо удалить чтобы две библиотеки не конфликтовали друг с другом. Для этого перейдите в папку установки Arduino/Libraries и удалите папку RobotIRremote. </WRAP> <WRAP center round info 60%> Обратите внимание что для работы ИК-приёмника и ИК передатчика используется одна и та же библиотека <IRremote>. Таким образом скачивать и устанавливать данную библиотеку дважды не требуется! </WRAP> ===== Примеры подключения и использования модуля ===== В примерах происходит подключение модуля ИК передатчика к первому контроллеру (что по сути является //передатчиком//). Подключение модуля приёмника ИК-сигнала ко второму контроллеру (//приёмник//). Таким образом, после заливки скетча иллюстрируется пример передачи информации с контроллера №1 (//передатчика//) на контроллер №2 (//приёмник//). Примеры тестировались на контроллерах Smart UNO. ==== Пример 1 ==== Передача 1 и 0 с частотой в одну секунду. Передача происходит по алгоритму RC5. ^ Что нужно ^ Кол-во, шт ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]] | 2 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 2 | | [[httpss://smartelements.ru/collection/new_products/product/modul-infrakrasnogo-peredatchika|Модуль ИК передатчика]] | 1 | | [[httpss://smartelements.ru/collection/svyaz/product/modul-infrakrasnogo-priemnika-tsop4838|Модуль ИК приёмника TSOP4838]]| 1 | | [[httpss://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h3-20-sm|Шлейф х3]] | 2 | **Шаг 1:** Подключите модуль ИК-передатчика к контроллеру №1: {{ :главная:связь:модуль_ик_передатчика_н.png?nolink |}} Загрузите следующий скетч в контроллер №1: <file Arduino> #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 секунду } </file> **Шаг 2.** Подключите ИК-приёмник к контроллеру №2. {{ :главная:связь:модуль_ик_приемника-4838_н.png?nolink |}} Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные. <file Arduino> #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(); // возобновление работы ИК приемника } } </file> ==== Пример 2 ==== Передача 1 и 0 с частотой в одну секунду. Передача происходит по алгоритму RC5. При приёме сигнала считаем что 1 - это команда ко включению светодиода, 0 - к выключению светодиода. Таким образом, на стороне приёмника модуль светодиода мигает с частотой в 1 секунду. ^ Что нужно ^ Кол-во, шт ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]] | 2 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 2 | | [[httpss://smartelements.ru/collection/new_products/product/modul-infrakrasnogo-peredatchika|Модуль ИК передатчика]] | 1 | | [[httpss://smartelements.ru/collection/svyaz/product/modul-infrakrasnogo-priemnika-tsop4838|Модуль ИК приёмника TSOP4838]]| 1 | | [[httpss://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h3-20-sm|Шлейф х3]] | 3 | | [[httpss://smartelements.ru/collection/moduli/product/modul-svetodioda-krasnyy|Модуль светодиода (красный)]] | 1 | **Шаг 1:** Подключите модуль ИК-передатчика к контроллеру №1: {{ :главная:связь:модуль_ик_передатчика_н.png?nolink |}} Загрузите следующий скетч в контроллер №1: <file Arduino> #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 секунду } </file> **Шаг 2.** Подключите ИК-приёмник и модуль светодиода к контроллеру №2. {{ :главная:связь:модуль_ик_передатчика_пример_2_шаг_2_н.png?nolink |}} Загрузите в контроллер №2 следующий скетч, и наблюдайте мигание модуля светодиода. <file Arduino> #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; //теперь новый статус стал текущим } } } </file> ==== Пример 3 ==== В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок [[https://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy|пульта дистанционного управления]]. (Коды кнопок в шестнадцатиричной системе счисления) ^ Что нужно ^ Кол-во, шт ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]] | 2 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 2 | | [[httpss://smartelements.ru/collection/new_products/product/modul-infrakrasnogo-peredatchika|Модуль ИК передатчика]] | 1 | | [[httpss://smartelements.ru/collection/svyaz/product/modul-infrakrasnogo-priemnika-tsop4838|Модуль ИК приёмника TSOP4838]]| 1 | | [[httpss://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h3-20-sm|Шлейф х3]] | 2 | **Шаг 1:** Подключите модуль ИК-передатчика к контроллеру №1: {{ :главная:связь:модуль_ик_передатчика_н.png?nolink |}} Загрузите следующий скетч в контроллер №1: <file Arduino> #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; //объект для работы с ИК-приёмником //функция, возвращающая код кнопки пульта // https://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 секунду } } </file> **Шаг 2.** Подключите ИК-приёмник к контроллеру №2. {{ :главная:связь:модуль_ик_приемника-4838_н.png?nolink |}} Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные. <file Arduino> #include <IRremote.h> //подключение библиотеки const int IR_pin = 8; //пин подключения инфракрасного приемника decode_results results; //переменная для хранения результата приема IRrecv irreceiver(IR_pin); //создание объекта приемника //функция переводящая код кнопки в её обозначение // для пульта https://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(); //возобновление работы ИК приемника } } </file> ==== Пример 4 ==== В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок [[https://smartelements.ru/collection/svyaz/product/pult-upravleniya-infrakrasnyy|пульта дистанционного управления]]. (Коды кнопок в десятичной системе счисления) ^ Что нужно ^ Кол-во, шт ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]] | 2 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 2 | | [[httpss://smartelements.ru/collection/new_products/product/modul-infrakrasnogo-peredatchika|Модуль ИК передатчика]] | 1 | | [[httpss://smartelements.ru/collection/svyaz/product/modul-infrakrasnogo-priemnika-tsop4838|Модуль ИК приёмника TSOP4838]]| 1 | | [[httpss://smartelements.ru/collection/provoda-i-kabeli/product/shleyf-mama-mama-h3-20-sm|Шлейф х3]] | 2 | **Шаг 1:** Подключите модуль ИК-передатчика к контроллеру №1: {{ :главная:связь:модуль_ик_передатчика_н.png?nolink |}} Загрузите следующий скетч в контроллер №1: <file Arduino> #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; //объект для работы с ИК-приёмником //функция, возвращающая код кнопки пульта // https://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 секунду } } </file> **Шаг 2.** Подключите ИК-приёмник к контроллеру №2. {{ :главная:связь:модуль_ик_приемника-4838_н.png?nolink |}} Загрузите в контроллер №2 следующий скетч, и наблюдайте в мониторе Serial-порта получаемые данные. <file Arduino> #include <IRremote.h> //подключение библиотеки const int IR_pin = 8; //пин подключения инфракрасного приемника decode_results results; //переменная для хранения результата приема IRrecv irreceiver(IR_pin); //создание объекта приемника //функция переводящая код кнопки в её обозначение // для пульта https://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(); //возобновление работы ИК приемника } } </file>