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); } }
Пульт використовується якийсь китайський, при натисканні "+" серва обертається в один бік, при натисканні "-", в інший.
Прикреплені файли:
- IR.rar (123 Кб)
- Arduino_IR_lib.rar (23 Кб)