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);
}
}

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

Партнер данной статьи: Electronoff


Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.