В сегодняшней статье будет рассматриваться подключение ИК приемника 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
Прикрепленные файлы:
- IR.rar (123 Кб)
- Arduino_IR_lib.rar (23 Кб)