В качестве приемника мы будем использовать ИК датчик VS1838b (https://www.yourduino.ru/product/infrakrasnyy-datchik-vs1838b). Работает он на частоте 38 кГц, напряжение питания: 2.7-5.5 В, максимальный потребляемый ток 1.5 мА, угол приема сигнала 900. Заявленная дальность — до 20 метров прямой видимости.
Управлять мы будем трехцветным RGB-диодом с общим катодом. На каждую ногу повесим резистор номиналом 220 Ом, чтобы ограничить ток, протекающий через диоды. Также понадобится макетка и набор соединительных проводов. Пульт управления, я думаю, у вас найдется и не один. Ну и, конечно, сама плата Arduino.
Собираем всю конструкцию по схеме:
Каждый раз, когда мы нажимаем кнопку на пульте, передатчик будет передавать определённый сигнал. Для каждой кнопки он будет разным. Нам будет необходимо узнать соответствие нажатой кнопки и полученного сигнала. Используем такой скетч:
#include <IRremote.h> // подключаем библиотеку для работы с IR IRrecv irrecv(7); // указываем пин, к которому подключен IR приемник decode_results results; //сигналы, принимаемые от пульта void setup() { Serial.begin(9600); //запускаем последовательный интерфейс irrecv.enableIRIn(); // инициализируем инфракрасный приёмник } void loop() { if (irrecv.decode(&results)) // была нажата кнопка на пульте { Serial.println(results.value); //выводим значение в монитор порта irrecv.resume(); // ожидаем следующее нажатие } }
Загружаем скетч в плату, запускаем монитор порта, нажимаем кнопки на пульте и видим коды, приходящие в монитор порта.
Замечания по коду:
- Библиотеку IRremote.h искать в интернете не надо. Необходимо её установить из меню управления библиотеками.
- Код отслеживает только одиночные нажатия. Если зажать кнопку на пульте, то сперва выведется код кнопки, а после этого сразу же код повтора.
Так как нам нужно управлять 3 диодами (красным, голубым и зеленым), то для этого мы задействуем 3 кнопки на пульте: «1», «2» и «3». И еще одну большую красную кнопку, чтобы все диоды погасить.
Для каждой кнопки у меня получились вот такие коды:
«1» - 16582903
«2» - 16615543
«3» - 16599223
«Выкл» - 16580863
У вас скорее всего коды будут другие. Поэтому обязательно нужно поправить скетч, приведенный ниже:
#include <IRremote.h> // подключаем библиотеку для работы с IR IRrecv irrecv(7); // указываем пин, к которому подключен IR приемник decode_results results; //сигналы, принимаемые от пульта //задаем коды для управления каждым светодиодом, //предварительно считанные c помощью Serial Monitor #define switch_RED_LED 16582903 //Кнопка "1" #define switch_BLUE_LED 16615543 //Кнопка "2" #define switch_GREEN_LED 16599223 //Кнопка "3" #define TURN_OFF 16580863 //Кнопка выключения всех диодов #define RED_LED 2 //задаем имена для пинов, управляющих светодиодами #define BLUE_LED 3 #define GREEN_LED 4 void setup() { Serial.begin(9600); irrecv.enableIRIn(); // инициализируем инфракрасный приёмник pinMode(RED_LED, OUTPUT); //устанавливаем пины всех pinMode(BLUE_LED, OUTPUT); //используемых светодиодов как выходные pinMode(GREEN_LED, OUTPUT); //чтобы управлять ими digitalWrite(RED_LED, LOW); //гасим все светодиоды digitalWrite(BLUE_LED, LOW); digitalWrite(GREEN_LED, LOW); } void loop() { if (irrecv.decode(&results)) // была нажата кнопка на пульте { Serial.println(results.value); switch (results.value) { case switch_RED_LED: if (digitalRead(RED_LED) == LOW) { digitalWrite(RED_LED, HIGH); } else { digitalWrite(RED_LED, LOW); } break; case switch_BLUE_LED: if (digitalRead(BLUE_LED) == LOW) { digitalWrite(BLUE_LED, HIGH); } else { digitalWrite(BLUE_LED, LOW); } break; case switch_GREEN_LED: if (digitalRead(GREEN_LED) == LOW) { digitalWrite(GREEN_LED, HIGH); } else { digitalWrite(GREEN_LED, LOW); } break; case TURN_OFF: digitalWrite(RED_LED, LOW); digitalWrite(BLUE_LED, LOW); digitalWrite(GREEN_LED, LOW); break; } irrecv.resume(); // ожидаем следующее нажатие } }
Данный код позволяет обрабатывать только одиночные нажатия. Если вы зажмете какую-либо кнопку на пульте, то сначала приемник получит код этой кнопки, а затем непрерывно будет приходить код повторения, т.е. диоды мигать как «угорелые» не будут.
Вот так просто можно подключить инфракрасное управление Ардуинкой. Это способ может быть задействован в разных проектах. К примеру, управление роботом или включение/отключение какого-либо устройства.
На этом все! Спасибо за внимание. Надеюсь, что статья была для вас полезной, а вы смогли почерпнуть для себя много нового и интересного😊 До скорых встреч.
Комментарии