Arduino Uno. Підключення ІК-приймача

В сьогоднішній статті буде розглядатися підключення ІК приймача TSOP34836 до плати Arduino 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);
  }
}

Пульт використовується якийсь китайський, при натисканні "+" серва обертається в один бік, при натисканні "-", в інший.

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

Top