В этом эксперименте мы организуем беспроводную ИК-связь, которая нам позволит отправлять на плату Arduino команды с помощью любого ИК-пульта.
Необходимые компоненты:
• контроллер Arduino UNO R3;
• плата для прототипирования;
• микросхема TSOP 31236;
• конденсатор 10 мкФ 25 В;
• резистор 100 Ом;
• светодиод – 8 шт.;
• резистор 220 Ом – 8 шт.;
• любой ИК-пульт;
• провода папа-папа.
Устройства инфракрасного (ИК) диапазона волн часто применяются в робототехнике. Наличие дешевых приемников диапазона 36–40 кГц, а также наличие большого количества пультов от бытовых приборов позволяет организовать простое и понятное беспроводное управление. В качестве приемника будем использовать микросхему TSOP31236. В одном корпусе она объединяет фотодиод, предусилитель и формирователь. На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Несущая частота 36 кГц. В качестве передатчика – любой пульт для управления бытовой техникой. Для обеспечения надежного приема и гарантированной защиты от помех при инфракрасной передаче используются модуляция сигнала и кодирование. К сожалению, нет единого и универсального протокола для ИК-пультов дистанционного управления, хотя среди всего многообразия есть наиболее распространенные. Наиболее распространенными протоколами для ИК-пультов дистанционного управления являются следующие:
• RC5;
• NEC;
• JVC;
• Sony.
Можно узнать протокол вашего пульта и написать скетч для получения кодов, отправляемых с пульта. К счастью, уже написана универсальная библиотека для приема и обработки кодов с любого пульта – Irremote. Ее мы и будем использовать при написании скетча. В нашем эксперименте мы будем с ИК-пульта зажигать светодиоды, подключенные к плате Arduino. Схема соединений показана на рис. 25.1.
Необходимые компоненты:
• контроллер 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(); // получить следующее значение
}
}
Порядок подключения:
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).
Листинги программ скачать