Схема ик пульт управления

Схема ик пульт управления
ИК-пульт дистанционного управленияСхема подключения ИК-пульт дистанционного управления  ePN Cashback - сервис, который возвращает часть денег с покупок, сделанных в интернет магазинах, представленных в ePN Cashback CashBack 1  

 

Обмен данными в инфракрасном диапазоне

Для обеспечения надежного приема и гарантированной защиты от помех используется модуляция сигнала и кодирование. Передача данных производится в близком к видимому инфракрасном спектре. Длина волны в большинстве реализованных систем варьируется в пределах 800–950 нм. Самый простой способ избавиться от фонового шума — модулировать (заполнить) сигнал при передаче одной из стандартных частот: 30, 33, 36, 37, 38, 40, 56 кГц. Именно на эти частоты настроены все современные интегральные приемники.

Для обеспечения достаточной дальности при передаче кодовой последовательности необходимо сформировать мощный сигнал. Ток через ИК-светодиод может достигать 1 А — такие токи вполне допустимы в импульсном режиме, при этом средняя рассеиваемая мощность не должна превышать предельно допустимую, указанную в документации.

Разработано большое количество специализированных микросхем (SAA3010, GS8489, KS51840 и т. п), генерирующих готовую кодовую последовательность и потребляющих минимальный ток в ждущем режиме, что немаловажно при питании от батарей. Эти микросхемы существенно упрощают схему пультов дистанционного управления (ПДУ). Когда мы нажимаем кнопку пульта, микросхема передатчика активизируется и генерирует кодовую последовательность с заданным заполнением. Светодиод преобразуют эти сигналы в ИК-излучение. Излученный сигнал принимается фотодиодом, который снова преобразует ИК-излучение в электрические импульсы. Эти импульсы усиливаются и демодулируются микросхемой приемника. Затем они подаются на декодер. Декодирование обычно осуществляется программно с помощью микроконтроллера.

Приемник ИК ПДУ должен восстанавливать данные с двухфазным кодированием и реагировать на большие быстрые изменения уровня сигнала независимо от помех. Ширина импульсов на выходе приемника должна отличаться от номинальной не более чем на 10 %. Приемник также должен быть нечувствительным к постоянным внешним засветкам. Удовлетворить всем этим требованиям достаточно непросто. Старые реализации приемника ИК ДУ, даже с применением специализированных микросхем, содержали десятки компонентов. Такие приемники часто использовали резонансные контуры, настроенные на частоту заполнения. Все это делало конструкцию сложной в изготовлении и настройке, требовало применения хорошего экранирования.

В последнее время большое распространение получили трехвыводные интегральные приемники ИК ПДУ (SFH5110-xx, TSOP17xx, TFMS5хх0 и т. п.). В одном корпусе они объединяют фотодиод, предусилитель и формирователь. На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Наиболее важный параметр при выборе приемника — частота заполнения.

Внутренний усилитель интегрального приемника имеет высокий коэффициент усиления, поэтому для исключения самовозбуждения и устранения влияния наводок по цепям питания необходимо использовать электролитический конденсатор емкостью не менее 4,7 мкФ, подключенный максимально близко к выводу VCC.

Подключение ИК-приемника

В качестве приемника ИК ПДУ применим микросхему TSOP31236. В одном корпусе она объединяют фотодиод, предусилитель и формирователь. На выходе формируется обычный ТТЛ-сигнал без заполнения, пригодный для дальнейшей обработки микроконтроллером. Несущая частота 36 кГц, выход инверсный, т. е. при отсутствии сигнала на пин приходит логическая "1", при появлении сигнала он посылает логический "0".

 

Библиотека IRremote

Можно узнать протокол вашего пульта и написать скетч для получения кодов, от- правляемых с пульта. К счастью, уже написана универсальная библиотека для приема и обработки кодов с любого пульта — IRremote.

Файлы библиотеки вы можете найти в папке libraries/IrRemote сопровождающего книгу электронного архива. Для использования библиотеки в своих проектах поместим их в папку libraries каталога установки Arduino. Скетч для получения кода и отправки в последовательный порт представлен в примере.

#include <IRremote.h>

int RECV_PIN = 11;

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(); // получить следующее значение

}

}

Можно и передавать ИК-команды. Поддерживаемые протоколы: NEC, Sony SIRC, Philips RC5, Philips RC6. Передающий ИК-светодиод должен быть подключен к pin 3. Скетч для отправки ИК-кода представлен в примере.

#include <IRremote.h> IRsend irsend;

void setup()

{

Serial.begin(9600);

}

void loop()

{

if (Serial.read() != -1)

{

for (int i = 0; i < 3; i++)

{

irsend.sendSony(0xa90, 12); // Sony TV power code delay(100);

}

}

}

 

Скетч для получения кодов ИК-пульта

Первая задача — получить список кодов клавиш нашего пульта.

Определим список клавиш пульта для управления:

 <↑> — движение вперед;

 <↓> — движение назад;

 <←> — поворот влево;

 <→> — поворот вправо;

 <–CH> — увеличение скорости при движении вперед/назад;

 <CH+> — уменьшение скорости при движении вперед/назад;

 <–VOL> — круговое движение на месте влево;

 <VOL+> — круговое движение на месте вправо;

 <0> — остановка робота.

Запускаем скетч из примера и получаем коды нужных клавиш для вашего пульта. Значения кодов выводятся в последовательный порт.

#include <IRremote.h>

// вход ИК-приемника int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN); decode_results results; unsigned long ir_dt, old_ir; long ir_kod;

unsigned long ir_time1, ir_time2;

void setup()

{

// последовательный порт Serial.begin(9600);

// включить приемник irrecv.enableIRIn(); ir_time1=0;ir_time2=0;

// прерывания для ИК

// FALLING – вызов прерывания при изменении уровня напряжения

// с высокого (HIGH) на низкое (LOW) attachInterrupt(0, get_ir_kod, FALLING);

}

void loop()

{

// обработка кода нажатия if(ir_kod>0)

{

ir_go(ir_kod); Serial.println(ir_kod); ir_kod=0;

}

}

// получить код, переданный с ИК-пульта void get_ir_kod()

{

detachInterrupt(0); // отключить прерывание 0 if (irrecv.decode(&results))

{

if (results.value > 0 && results.value < 0xFFFFFFFF)

{

ir_dt = results.value; ir_time2=millis();

// прошла 1 сек?

if (ir_time2-ir_time1>1000)

{ir_kod = ir_dt;ir_time1=ir_time2;}

else

ir_kod = 0;

}

irrecv.resume();

}

// активировать процедуру прерывания 0 attachInterrupt(0, get_ir_kod, FALLING);

}

Оформим их в виде констант

// коды клавиш ИК-пульта (marmitek)

#define FORWARD 1936 // ↑

#define BACK 3984 // ↓

#define SPEED_UP 144 //ch+

#define SPEED_DOWN 2192 //ch-

#define LEFT 3472 // ←

#define RIGHT 1424 // →

#define CIRCLE_LEFT 3216 //vol+

#define CIRCLE_RIGHT 1168 //vol-

#define STOP 2320 // 0 - стоп

Определять поступление команды с пульта мы будем по прерыванию 0 (на digital pin2). По прерыванию запускается процедура get_ir_kod(), которая определяет код, поступающий с пульта, и записывает его в переменную ir_kod. Процедура loop() проверяет переменную ir_kod, и в случае ненулевого значения переменной (получения кода с пульта) вызывает процедуру вывода действия ir_go(). На данном этапе — это вывод в последовательный порт предполагаемого по нажатию клавиши действия.

Данный скетч представлен в примере.

Результат команды с пульта выводитсяна монитор последовательного порта.

#include <IRremote.h>

// вход ИК-приемника int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN); decode_results results; unsigned long ir_dt, old_ir; long ir_kod;

unsigned long ir_time1, ir_time2;

// коды клавиш ИК-пульта (marmitek)

#define FORWARD 1936

#define BACK 3984

#define SPEED_UP 144 //ch+

#define SPEED_DOWN 2192 //ch-

#define LEFT 3472

#define RIGHT 1424

#define CIRCLE_LEFT 3216 //vol+

#define CIRCLE_RIGHT 1168 //vol-

#define STOP 2320 //0

void setup()

{

// последовательный порт Serial.begin(9600);

// включить приемник irrecv.enableIRIn(); ir_time1=0;ir_time2=0;

// прерывания для ИК

// FALLING – вызов прерывания при изменении уровня напряжения

// с высокого (HIGH) на низкое (LOW) attachInterrupt(0, get_ir_kod, FALLING);

}

void loop()

{

// обработка кода нажатия if(ir_kod>0)

{

ir_go(ir_kod); ir_kod=0;

}

}

// получить код переданный с ИК-пульта void get_ir_kod()

{

detachInterrupt(0); // отключить прерывание 0

if (irrecv.decode(&results))

{

if (results.value > 0 && results.value < 0xFFFFFFFF)

{

ir_dt = results.value; ir_time2=millis();

// прошла 1 сек?

if (ir_time2-ir_time1>1000)

{ir_kod = ir_dt;ir_time1=ir_time2;} else

ir_kod = 0;

}

irrecv.resume();

}

// активировать процедуру прерывания 0 attachInterrupt(0, get_ir_kod, FALLING);

}

// действие по полученному коду void ir_go(kod)

{

switch(kod)

{

case FORWARD : // направление вперед Serial.print("forward\n");

break;

case BACK : // направление назад Serial.print("back\n");

break;

case SPEED_UP : // скорость++ Serial.print("speed++\n"); break;

case SPEED_DOWN : // скорость-- Serial.print("speed--\n"); break;

case LEFT : // влево Serial.print("left\n"); break;

case RIGHT : // вправо Serial.print("right\n"); break;

case CIRCLE_RIGHT : // кружение вправо Serial.print("circle_right\n"); break;

case CIRCLE_LEFT : // кружение влево Serial.print("circle_left\n"); break;

case STOP : // стоп Serial.print("stop\n"); break;

default: break;

}

}


Схема ик пульт управления

Похожие записи:



Костюмы восточного танца своими руками

Как сделать обертывания для похудения

Упаковка новогодних подарков отзывы
Читать новость Схема ик пульт управления фото. Поделитесь новостью Схема ик пульт управления с друзьями!