Большим преимуществом разработки устройств на микроконтроллерной электроники является многообразие всевозможных способов по взаимодействию датчиков и компонентов между собой. К примеру, с помощью Arduino и соответствующих модулей можно организовать несколько способов беспроводного управления проектами: использовать уже давно известные протоколы связи по типу Wi-Fi, Bluetooth, LoRa или же обратиться к не менее простой передачи данных через инфракрасные сигналы. Все перечисленные способы относятся к электромагнитным волнам, но имеют свою частоту.
Использование специализированного ИК-приемника и ИК-пульта в роли передатчика – простой способ реализации дистанционного управления, когда необходимо управлять устройством, находящимся в прямой видимости на небольшом расстоянии. Основной проблемой такого способа управления является именно то, что требуется обеспечение прохождения ИК-луча сигнала между двумя компонентами системы, что не всегда возможно, особенно в условиях улицы. В домашнем же быту подобное управление массово применяется в пультах для телевизоров и кондиционеров.
С помощью инфракрасной связи вы можете дистанционно (обычно до 5 метров) управлять перемещениями робота или же эффектами свечения самодельного светодиодного торшера из светодиодной ленты. Применению данному способу множество: все зависит от вашей фантазии.
Инфракрасное излучение находится за пределами диапазона видимого света, поэтому люди его не видят, а значит работа ИК-приёмника и пульта совсем не будет заметна.
Классическая система управления содержит два элемента. Внутри ИК-передатчика, то есть пульта, находится инфракрасный светодиод, который генеририрует определённый сигнал по нажатию на кнопку. Затем он преобразуется в самом пульте в специальный модулированный электрический сигнал (защищенный от влияния внешнего освещения и шумов) и посредством быстрого включения и отключения светодиода отправляется на ИК-приёмник. Сам сигнал представляет собой группу импульсов: чередование высокого и низкого логических сигналов, длительность каждого из которых зависит от нажатой кнопки.
Специальный фотоприёмник, чувствительный к инфракрасному излучению, принимает сигнал, и там же происходит декодирование полученного оптического сигнала в электрический. Чтобы оба модуля могли взаимодействовать друг с другом без каких-либо помех, инфракрасные сигналы посылаются на частоте 38 кГц. Светочувствительный диод реагирует только на них, поскольку имеет встроенный фильтр. В зависимости от каждого пульта результат декодирования на ИК-приемнике может быть различным.
Для питания пульта используется встроенная в него батарейка типа «таблетка», а ИК-приемник подключается к любому программируемому контроллеру по трем выводам: питание (плюс и минус) и сигнальный вывод. Сигнальный вывод можно подключить к цифровому входу платы (например, D7), а для питания будет достаточно как 3.3, так и 5 вольт постоянного тока.
Для расшифровки полученных импульсов удобно использовать библиотеку IRremote. Скачать архив с ней можно здесь: https://disk.yandex.ru/d/izucVFjg4vDN7A
Установите ее с помощью простых действий в среде разработки Arduino IDE: Скетч - Подключить библиотеку - Добавить .zip библиотеку. Затем перезагрузите Arduino IDE, подключить плату Ардуино к компьютеру по USB кабелю и загрузите следующий код:
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
irrecv.resume();
}
}
С помощью вышеприеденного кода можно получать в мониторе порта (находится в разделе Инструменты в среде разработки) значения с каждой нажатой кнопки. Их можно заранее куда-нибудь выписать и использовать для второго кода. А именно:
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
const int redPin = 10;
const int greenPin = 11;
void setup(){
irrecv.enableIRIn();
irrecv.blink13(true);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
}
void loop(){
if (irrecv.decode(&results)){
switch(results.value){
case 0xFF38C7: //Keypad button "5"
digitalWrite(redPin, HIGH);
delay(2000);
digitalWrite(redPin, LOW);
}
switch(results.value){
case 0xFF18E7: //Keypad button "2"
digitalWrite(greenPin, HIGH);
delay(2000);
digitalWrite(greenPin, LOW);
}
irrecv.resume();
}
}
Данный код по-прежнему содержит считывание данных с ИК-пульта на приемнике, только к схеме добавляются два светодиода, подключенные к 10 и 11 цифровым контактам (красный и зеленый диоды соответственно). Не забудьте про использование токоограничительных резисторов 220 Ом между цифровым выводом и положительной ножкой светодиода (она длиннее, чем минус). Минус светодиода подключается к GND платы контроллера.
В данном коде выполнены условия: если поступил сигнал 0xFF38C7 (у вас может быть свое значение в зависимости от пульта), значит была нажата кнопка 5 (мы это понимаем из проделанных действий по первому коду) и тогда нужно включить красный светодиод. Если нажата кнопка 2 на пульте (с декодированным сигналом 0xFF18E7), значит включаем зеленый светодиод. Все очень просто!
Беспроводное управление Arduino с помощью ИК-пульта и приемника
13 сентября 202313 сен 2023
395
4 мин