ИК пульт из Arduino

При наличии ИК светодиода на базе 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);}

В скетче показан пример использования двух кнопок, но Вы по примеру скетча можете добавить любой кол-во кнопок.

Добавить комментарий

Войти с помощью: