Проект 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 // подключение библиотеки
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 // подключение библиотеки
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).

Листинги программ скачать



 

Вверх