ІЧ-пульт дистанційного керування

 

У цьому експерименті ми організуємо бездротовий ик-зв'язок, який дозволить відправляти до плати Arduino команди за допомогою будь-якого ик-пульта.


Необхідні компоненти: • контролер Arduino UNO R3; • плата для прототипування; • мікросхема TSOP 31236; • конденсатор 10 мкФ 25; • резистор 100 Ом; • світлодіод – 8 шт.; • резистор 220 Ом - 8 шт.; • будь-який ІЧ-пульт; • дроти тато-тато.

Пристрої інфрачервоного діапазону хвиль часто застосовуються в робототехніці. Наявність дешевих приймачів діапазону 36–40 кГц, а також наявність великої кількості пультів від побутових приладів дозволяє організувати просте та зрозуміле бездротове керування. Як приймач будемо використовувати мікросхему TSOP31236. В одному корпусі вона поєднує фотодіод, підсилювач та формувач. На виході формується звичайний ТТЛ-сигнал без заповнення, придатний подальшої обробки микроконтроллером. Несуча частота 36 кГц. Як передавач – будь-який пульт для управління побутовою технікою. Для забезпечення надійного прийому та гарантованого захисту від перешкод при інфрачервоній передачі використовуються модуляція сигналу та кодування. На жаль, немає єдиного та універсального протоколу для ІЧ-пультів дистанційного управління, хоча серед усього різноманіття є найпоширеніші. Найбільш поширеними протоколами для ІЧ-пультів дистанційного керування є такі:

• RC5; • NEC; • JVC; • Sony. 






Вихід ІЧ-приймача приєднаний до виведення 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(); // получить следующее значение
}
}
Порядок підключення: 
1. Підключаємо ІЧ-приймач та світлодіоди до плати Arduino за схемою на рис. 25.1. 2. Завантажуємо до плати Arduino скетч з лістингу 25.1. 3. Відкриваємо монітор послідовного порту Arduino IDE і дивимося коди, що надходять при натисканні кнопок на ІЧ-пульті. Запам'ятовуємо коди, що надходять при натисканні кнопок 2–9 на ІЧ-пульті. Пишемо скетч, що перемикає стан світлодіодів на контактах D2-D9, при отриманні певного коду. Вміст скетчу показаний у лістингу 25.2. Значення констант K2-K9 (кодів для клавіш 2-9) у вас буде іншим.

Листинг 25.2

// коды клавиш ИК-пульта
#define K2 1936
#define K3 3984
#define K4 144
#define K5 2192
#define K6 3472
#define K7 1424
#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).

Немає коментарів:

Дописати коментар