Arduino Uno. Подключение ИК-приемника

В сегодняшней статье будет рассматриваться подключение ИК приемника TSOP34836 к плате Aduino UNO. Для этих целей можно применить любой имеющийся у вас приемник, совместимый с вашим пультом по частоте. Назначение выводов показано на рисунке.

1. Vout – выход приемника.
2. GND – «земля», общий провод.
3. Vcc – питание.
Передача данных от ИК пульта к приемнику осуществляется по протоколу RC5, представляющий из себя последовательность импульсов. Подключение осуществляется по следующей схеме.

А собрав, получаем примерно следующее:

Для обработки данных, передаваемых пультом, используем библиотеку IRremote, данная библиотека прикреплена к статье. Вставляем следующий код:

 #include "IRremote.h" IRrecv irrecv(11); // Указываем пин, к которому подключен приемник decode_results results;  void setup() {   Serial.begin(9600); // Выставляем скорость COM порта   irrecv.enableIRIn(); // Запускаем прием }  void loop() {   if (irrecv.decode(&results)) // Если данные пришли    {     Serial.println(results.value, HEX); // Отправляем полученную данную в консоль     irrecv.resume(); // Принимаем следующую команду   } }

Теперь в консоле COM — порта можно наблюдать код нажимаемой клавиши в HEX.


Вот и все, теперь можно использовать эту схему в ваших устройствах. Ниже приведен пример одного из практических применений ИК — приемника.

В качестве демонстрации будет показано, как с помощью ИК-пульта управлять сервомашинкой.

Схема устройства:

Вот так оно должно выглядеть:

Для работы устройства используем следующий код:

 #include "Servo.h" #include "IRremote.h"  IRrecv irrecv(11); decode_results results; Servo servoMain;  int servPoz = 90; //Начальное положение сервы int lastPoz = 0;  void setup() {   irrecv.enableIRIn();   servoMain.attach(10); // Servo присоединен к 10 выводу   servoMain.write(servPoz); }  void loop() {   if (irrecv.decode(&results))    {     int res = results.value;     Serial.println(res, HEX);     if(res==0xFFFF906F)// Если нажата кнопка "+"     {       lastPoz=res;       servPoz++;         servoMain.write(servPoz);     }     else if(res==0xFFFFA857)// Если нажата кнопка "-"      {       servPoz--;       lastPoz=res;       servoMain.write(servPoz);     }     else if(res==0xFFFFFFFF)// Если кнопку удерживают     {       if(lastPoz==0xFFFF906F) servPoz++;// Удерживают "+"       if(lastPoz==0xFFFFA857) servPoz--;// Удерживают "-"          servoMain.write(servPoz);     }      irrecv.resume();     delay(100);   } } 

Пульт используется какой-то китайский, при нажатии «+» серва вращается в одну сторону, при нажатии «-«, в другую.