Модуль инфракрасного передатчика представляет из себя плату со светодиодом, для передачи сигнала в инфракрасном диапазоне. С помощью данного модуля можно производить передачу информации беспроводным способом. Также, можно сымитировать нажатие кнопок (клавиш) пульта дистанционного управления, тем самым не приходя к помощи механического воздействия на пульт.
В среде разработки Arduino по-умолчанию присутствует библиотека для работы с ИК приёмником и передатчиком - она называется <RobotIRremote>, однако она работает некорректно и её необходимо удалить чтобы две библиотеки не конфликтовали друг с другом. Для этого перейдите в папку установки Arduino/Libraries и удалите папку RobotIRremote.
Обратите внимание что для работы ИК-приёмника и ИК передатчика используется одна и та же библиотека <IRremote>. Таким образом скачивать и устанавливать данную библиотеку дважды не требуется!
В примерах происходит подключение модуля ИК передатчика к первому контроллеру (что по сути является передатчиком). Подключение модуля приёмника ИК-сигнала ко второму контроллеру (приёмник). Таким образом, после заливки скетча иллюстрируется пример передачи информации с контроллера №1 (передатчика) на контроллер №2 (приёмник). Примеры тестировались на контроллерах Smart UNO.
Передача 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(); // возобновление работы ИК приемника
}
}
Передача 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; //теперь новый статус стал текущим
}
}
}
В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок пульта дистанционного управления. (Коды кнопок в шестнадцатиричной системе счисления)
Что нужно | Кол-во, шт |
---|---|
Контроллер 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(); //возобновление работы ИК приемника
}
}
В данном примере с помощью модуля ИК передатчика имитируется нажатие кнопок пульта дистанционного управления. (Коды кнопок в десятичной системе счисления)
Что нужно | Кол-во, шт |
---|---|
Контроллер 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(); //возобновление работы ИК приемника
}
}