При наличии ИК светодиода на базе Arduino можно сделать ИК пульт. Такой ИК пульт может управлять работой различных уст-в имеющих ИК приемник. На этой странице будет рассмотрен пример передачи команд с одной платы Arduino к другой. К плате Arduino которой передаются команды от ИК диода подключен ИК- приемник, команды ИК пульта обрабатываются и могут быть использованы для управления различными исполнительными механизмами (например реле).
Соберите схему показанную на рисунке и загрузите скетч.
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip #include <boarddefs.h> IRsend irr; void setup(){ Serial.begin(9600); irr.enableIROut(38); // 38 kHz out D9 pinMode(2,INPUT); pinMode(3,INPUT); pinMode(4,INPUT); pinMode(5,INPUT); } void loop() { if(digitalRead(2)==HIGH){irr.sendNEC(0x1A001134, 32);} if(digitalRead(3)==HIGH){irr.sendNEC(0x2A004516, 32);} if(digitalRead(4)==HIGH){irr.sendNEC(0x3A006780, 32);} if(digitalRead(5)==HIGH){irr.sendNEC(0x4A001122, 32);} delay(200); }
Далее ко второй плате Arduino подключите модуль ИК приемника
Загрузите скетч
#include <boarddefs.h> #include <IRremote.h> IRrecv irrecv(12); // указываем вывод модуля IR приемника decode_results ir; void setup() { irrecv.enableIRIn();Serial.begin(9600); pinMode(13,OUTPUT); } void loop() { if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();}// IR приемник - чтение, в мониторе порта отображаются коды кнопок if(ir.value==0x1A001134){digitalWrite(13,HIGH);} if(ir.value==0x2A004516){digitalWrite(13,LOW);} ir.value=0; }
Откройте монитор порта и нажмите поочередно кнопки подключенные к первой плате Arduino, в мониторе порта Вы увидите следующую информацию
Как видно на скриншоте, в мониторе порта второй платы отображаются коды кнопок которые посылает ИК передатчик с первой платы Arduino. Дополнительно активирован цифровой выход D13 во второй плате к которой подключен светодиод (находится на плате Arduino), при нажатии на кнопку 1 (первая плата) светодиод загорается, при нажатии на кнопку 2 гаснет.
ИК удлинитель
Следующий пример позволяет плате Arduino принимать команды с ИК пульта и туже передавать нужный код на конечное устройство. Соответственно к плате Arduino подключаются одновременно ИК-датчик и ИК-диод.
#include <IRremote.h> // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip #include <boarddefs.h> IRsend irr; IRrecv irrecv(12); // указываем вывод модуля IR приемника decode_results ir; byte w; void setup(){ Serial.begin(9600); irrecv.enableIRIn(); irr.enableIROut(38); // 38 kHz out D9 } void loop() { if( irrecv.decode( &ir )) {Serial.print("0x");Serial.print( ir.value,HEX);irrecv.resume();} if(ir.value==0){w=0;} if(ir.value==0x2FD00FF){w=1;ir.value=0;irr.enableIROut(38);irr.sendNEC(0x1A001134, 32);Serial.println(" code 1 ");delay(50);} if(ir.value==0xFFFFFFFF && w==1){ir.value=0;irr.enableIROut(38);irr.sendNEC(0x1A001134, 32);Serial.println(" code 1 ");delay(50);} if(ir.value==0x2FD42BD){w=2;ir.value=0;irr.enableIROut(38);irr.sendNEC(0x1A001555, 32);Serial.println(" code 2 ");delay(50);} if(ir.value==0xFFFFFFFF && w==2){ir.value=0;irr.enableIROut(38);irr.sendNEC(0x1A001555, 32);Serial.println(" code 2 ");delay(50);} irrecv.enableIRIn(); delay(200); }
В работе ИК-удлинителя есть одна сложность, дело в том что при нажатии кнопки пульта код кнопки который нужно передать через Arduino на конечное уст-во содержит уникальный код (можно посмотреть в мониторе порта), а вот удержание любой кнопки пульта передает код 0xFFFFFFFF (как правило), как раз эта особенность учтена в скетче. Скетч различает к какой кнопке относится код 0xFFFFFFFF, а к какой нет.
После загрузки скетча необходимо открыть монитор порта и получить коды кнопок Вашего пульта, а затем вписать их в скетч:
if(ir.value==КОД_КНОПКИ_ПУЛЬТА){w=1;ir.value=0;irr.enableIROut(38);irr.sendNEC(КОД_КОТОРЫЙ НУЖНО_ПЕРЕДАТЬ, 32);Serial.println(» code 1 «);delay(50);}
В скетче показан пример использования двух кнопок, но Вы по примеру скетча можете добавить любой кол-во кнопок.