Проект 25: ІЧ-фотоприймач і ІЧ-пульт. Обробляємо команди від пульта
В цьому експерименті ми організуємо бездротову ІЧ-зв'язок, яка нам дозволить відправляти на плату Arduino команди за допомогою будь-якого інфрачервоного пульта.
Необхідні компоненти:
- контролер Arduino UNO R3;
- плата для прототипування;
- мІЧросхема TSOP 31236;
- конденсатор 10 мкФ 25 В;
- резистор 100 Ом;
- світлодіод - 8 шт.;
- резистор 220 Ом - 8 шт.;
- будь-ІЧ-пульт;
- дроти тато-тато.
Пристрої інфрачервоного (ІЧ) діапазону хвиль часто застосовуються в робототехніці. Наявність дешевих приймачів діапазону 36-40 кГц, а також наявність великої кількості пультів від побутових приладів дозволяє організувати просте і зрозуміле бездротове управління. Як приймач будемо використовувати мІЧросхему TSOP31236. В одному корпусі вона об'єднує фотодіод, передпідсилювач і формувач. На виході формується звичайний ТТЛ-сигнал без заповнення, придатний для подальшої обробки мІЧро контролером. Несуча частота 36 кГц. Як передавача - будь-який пульт для управління побутовою технІЧою. Для забезпечення надійного прийому і гарантованого захисту від перешкод при інфрачервоної передачі використовуються модуляція сигналу і кодування. На жаль, немає єдиного і універсального протоколу для ІЧ-пультів дистанційного керування, хоча серед усього розмаїття є найбільш поширені. Найбільш поширеними протоколами для ІЧ-пультів дистанційного керування є наступні:
- RC5;
- NEC;
- JVC;
- Sony.
Можна дізнатися протокол вашого пульта і написати скетч для отримання кодів, що відправляються з пульта. На щастя, вже написана універсальна бібліотека для прийому і обробки кодів з будь-якого пульта - Irremote. Її ми і будемо використовувати при написанні скетчу. У нашому експерименті ми будемо з ІЧ-пульта запалювати світлодіоди, підключені до плати Arduino. Схема з'єднань показана на рис. 25.1.

Рис. 25.1. Схема з'єднань ІЧ-управління
Вихід ІЧ-приймача приєднаний до виводу 1 плати Arduino. Без фільтра живлення буде працювати нестабільно, з пропуском посилок, тому ставимо RC-фільтр.
Спочатку завантажимо скетч, який визначає коди, що приходять з приймача, і виводить їх в монітор послідовного порту. Вміст скетчу показано в лістингу 25.1.
#include <IRremote.h> // підключення бібліотеки
int RECV_PIN = 1; // контакт підключення ІЧ-приймача
IRrecv irrecv (RECV_PIN);
decode_results results;
void setup ()
{
Serial.begin (9600);
irrecv.enableIRIn (); // включити приймач
}
void loop ()
{
if (irrecv.decode (& results))
{
Serial.println (results.value, HEX);
irrecv.resume (); // отримати таке значення
}
}
Порядок підключення:
- Підключаємо ІЧ-приймач і світлодіоди до плати Arduino за схемою на рис. 25.1.
- Завантажуємо в плату Arduino скетч з лістингу 25.1.
- Відкриваємо монітор послідовного порту Arduino IDE і дивимося коди, що приходять при натисканні кнопок на ІЧ-пульті. Запам'ятовуємо коди, що приходять при натисканні кнопок 2-9 на ІЧ-пульті. Пишемо скетч, що перемикає стан світлодіодів на контактах D2-D9, при отриманні певного коду. Вміст скетчу показано в лістингу 25.2. Значення констант K2-K9 (кодів для клавіш 2-9) у вас буде іншим.
лістинг 25.2
// коди клавіш інфрачервоного пульта
#define K2 тисячі дев'ятсот тридцять шість
#define K3 3984
#define K4 144
#define K5 2192
#define K6 3472
#define K7 тисяча чотиреста двадцять чотири
#define K8 3216
#define K9 +1168
#include <IRremote.h> // підключення бібліотеки
int RECV_PIN = 1; // контакт підключення ІЧ-приймача
IRrecv irrecv (RECV_PIN);
decode_results results;
// значення на D2 - D9 Arduino
int val_pins [] = {0,0,0,0,0,0,0,0};
int res = 0;
void setup ()
{
Serial.begin (9600);
irrecv.enableIRIn (); // включити приймач
for (int i = 2; i <10; i ++)
{
pinMode (i, OUTPUT);
digitalWrite (i, LOW);
}
}
void loop ()
{
if (irrecv.decode (& results))
{
switch (results.value)
{
case K2: res = 2; break;
case K3: res = 3; break;
case K4: res = 4; break;
case K5: res = 5; break;
case K6: res = 6; break;
case K7: res = 7; break;
case K8: res = 8; break;
case K9: res = 9; break;
default: res = 0; break;
}
if (res> 0)
{
pins [res-2] = 1 pins [res-2];
// переключити світлодіод
digitalWrite (res, pins [res-2]);
}
irrecv.resume (); // отримати таке значення
}
}
Завантажуємо скетч 25.2 на плату Arduino і натисканням на пульті кнопок 2-9 перемикаємо стан світлодіодів, підключених до виводів 2-9 плати Arduino (див. Рис. 25.1).