Управляем любой ду техникой дома по ик с вебстраницы

ИК-пульт дистанционного управления

 ePN Cashback – сервис, который возвращает часть денег с покупок, сделанных в интернет магазинах, представленных в ePN Cashback

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

Для обеспечения надежного приема и гарантированной защиты от помех используется модуляция сигнала и кодирование. Передача данных производится в близком к видимому инфракрасном спектре.

Длина волны в большинстве реализованных систем варьируется в пределах 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<\p>

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 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);

}

}

}

 

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

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

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

  — движение вперед;

  — движение назад;

  — поворот влево;

  — поворот вправо;

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

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

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

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

  — остановка робота.

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

#include<\p>

// вход ИК-приемника 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<\p>

// вход ИК-приемника 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
“);

break;

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

break;

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

case SPEED_DOWN : // скорость– Serial.print(“speed–
“); break;

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

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

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

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

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

default: break;

}

}

Источник: http://www.progdron.com/ru/arduino-shield/arduino-shield/398-ik-pult-distantsionnogo-upravleniya

Модули Мастер Кит с инфракрасным управлением

Среди устройств, предназначенных для дистанционного управления и контроля, устройства, использующие инфракрасное (ИК) излучение, занимают давнее и почетное место.

Например, первые пульты дистанционного управления на инфракрасных лучах появились в 1974 году благодаря фирмам Grundig и Magnavox, которые выпустили первый телевизор, оснащенный таким управлением. Датчики, использующие ИК-излучение, широко используются в автоматике.

Основным преимуществом устройств управления на ИК-лучах является их низкая чувствительность к электромагнитным помехам, а также то, что эти устройства сами не создают помех другим электронным устройствам.

Как правило, ИК дистанционное управление ограничивается жилым или производственным помещением, а излучатель и приемник ИК излучения должны находиться в прямой видимости и быть направленными друг на друга.

Эти свойства определяют основную сферу применения рассматриваемых устройств – дистанционные управление бытовыми приборами и устройствами автоматики на небольших расстояниях, а также там, где требуется бесконтактное обнаружение пересечения линии прямолинейного распространения излучения.

Даже на заре своего возникновения устройства на ИК лучах были весьма просты в разработке и применении, в настоящее же время при использовании современной электронной базы такие устройства стали еще проще и надежнее.

Как нетрудно заметить, даже мобильные телефоны и смартфоны оснащаются ИК-портом для связи и управления бытовой техникой по ИК-каналу, несмотря на широкое применение беспроводных технологий, таких как Bluetooth и Wi-Fi.

Компания Мастер Кит предлагает несколько модулей, работающих с использованием ИК-излучения, предназначенных для применения в проектах DIY.

Рассмотрим три устройства разной степени сложности и назначения. Для удобства основные характеристики всех устройств сведены в таблицу, расположенную в конце обзора.

  1. Инфракрасный барьер BM083 предназначен для применения в качестве датчика охранных систем, при спортивных соревнованиях в качестве фотофиниша, а также для дистанционного управления устройствами автоматики на расстоянии до 50 метров.

Устройство состоит из двух модулей – передатчика и приемника. Передатчик собран на сдвоенном интегральном таймере NE556 и формирует прямоугольные импульсы с заполнением частотой 36 кГц. Таймер имеет достаточно мощный токовый выход для того, чтобы непосредственно управлять подключенными к нему инфракрасными светодиодами.

Одиночным аналогом NE556 является знаменитый интегральный таймер NE555, который вот уже много десятков лет верой и правдой служит целой армии радиолюбителей для разработки электронных устройств.

Изучить таймер на примерах 20 электронных схем, разработанных на основе этого таймера, можно с помощью набора-конструктора NR04 «Классика схемотехники» их серии Азбука электронщика.

При сборке схем даже не потребуется паяльник; все они собираются на беспаечной макетной плате.

Излученный сигнал принимается приемником, основой которого является специализированная микросхема, детектируется пиковым детектором  и поступает на усилитель тока на транзисторе, к которому подключено реле, позволяющее коммутировать ток до 10А.

Инфракрасный барьер, несмотря на простоту, является достаточно чувствительным устройством, и позволяет работать как на «просвет», так и на «отражение» и требует изготовления бленд для передатчика и приемника, устраняющих влияние переотраженных сигналов.

Пример применения инфракрасного барьера совместно с набором NR05  «Цифровая лаборатория» из уже упомянутой серии Азбука электронщика можно посмотреть здесь.

  1. BM8049M – это выключатель освещения с управлением от любого пульта дистанционного управления на инфракрасных лучах.

Модуль позволяет управлять освещением или другими электроприборами, используя любую кнопку пульта ДУ.

Как правило, на каждом пульте ДУ есть редко используемые или вовсе не используемые кнопки. Применив этот выключатель, вы сможете включать и выключать люстру, вентилятор и т.п. с того же пульта ДУ, с которого вы управляете телевизором или музыкальным центром.

При подаче питания модуль в течение 10 секунд «ждет» получения сигнала, соответствующего выбранной кнопке пульта, и по истечению этого времени «запоминает» нажатую кнопку.

После этого для срабатывания реле модуля достаточно один раз нажать эту кнопку, при повторном нажатии реле выключится. Таким образом, реализуется режим управления типа «триггер».

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

Следует отметить, что модуль «помнит» свое последнее состояние  при отключении питания.

В устройстве предусмотрен режим автоматического отключения нагрузки примерно через 12 часов после ее включения на случай, если нагрузку забыли выключить.

Реле модуля может коммутировать мощность до 1500 Вт.

  1. Комплект беспроводного управления по ИК-каналу BM8052 имеет собственный пульт ДУ с 4-мя кнопками и 4 канала управления по 2000 Вт каждый.

Каждый из 4-х каналов дистанционного управления работает в режиме «кнопка», т.е. реле канала замкнуто, пока нажата соответствующая кнопка на пульте ДУ.

С помощью модуля можно организовать реверсивное управление двумя коллекторными электродвигателями, поскольку каждое реле имеет один нормально замкнутый (NC) и один нормально разомкнутый (NO) контакты с общим проводом.

Для удобства использования каждый канал оснащен светодиодом, индицирующим включение реле.

Пульт комплекта питается от элемента CR2032.

Управление нагрузкой с большей мощностью для всех рассмотренных устройств можно осуществить с помощью модулей расширения:

– до 4000 Вт: подойдет модуль расширения MP220op;

– до 8000 Вт: подойдет модуль расширения MP246.

Модули с инфракрасным управлением

Артикул Название Напряжение питания Число каналов управления Максимальная мощность нагрузки одного канала, Вт Примеры применения
BM083 Инфракрасный барьер 12В постоянный 1 2000 Охранные устройства; спортивные соревнования; робототехника; устройства автоматики
BM8049M Выключатель освещения 12В постоянный;220В переменный 1 1500 Управление освещением, вентиляцией, отоплением
BM8052 Комплект беспроводного управления 12В постоянный 4 2000 Реверсивное управление коллекторными двигателями; 4-х канальное управление бытовыми приборами

Источник: https://masterkit.ru/blog/articles/moduli-master-kit-s-infrakrasnym-upravleniem

Arduino: ИК-управление бытовой техникой (применение девайса)

Задравствуй хабр! По отзывам понял, что в статье «Arduino: ИК-управление бытовой техникой» мало посвятил конечной цели устройства и как его применять на практике, по-этому займусь этим сейчас. Назначение нашего arduino-девайса обеспечить управление набором устройств, управляемых по ИК-каналу.

На следующем рисунке изображен пример того как можно использовать данный девайс, сейчас пока ко мне не приехал Ethernet Shield опишу на примере USB соединения с сервером.

Сразу скажу, что рисунок был сделан специально для пояснения возможностей устройства, дома у меня все гораздо проще, ибо управление происходит только телевизором, а качестве источника использую свой ПК он же сервер, как на втором рисунке.

Предположим, у нас две комнаты и в каждой находятся устройства, а их марки и модели совпадают, соответственно наборы команд для телевизора, DVD-проигрывателя и спутникового ресивера в комнатах совпадают. Исходя из этого можно сделать вывод о необходимости использовать для каждого устройства свой выход Arduino.

В комментариях Alexeyslav предлагал мне использовать демультиплексор для этих целей, под предлогом упрощения программной части, я так понял, что имелось ввиду использование библиотеки IRRemote. Я не против демультиплексора, мне не нравится именно заточенность IRRemote на 3 вывод, к слову сказать, никто не запрещает использовать демультиплексор и с моим модулем.

Что касается меня, то у меня нет необходимости в нескольких портах, внимание на рисунок:Излучающие диоды я использовал от компании Global Cache, диод в корпусе, как на рисунке ниже.

Удобно тем, что излучатель можно приклеить прямо на оборудование в область ик-приемника и тем самым гарантировать, что управление будет стабильным и только тем устройством, которым мы хотим управлять (в случае если рядом находится более одного устройства реагирующего на посланную команду).

Когда писал серверную часть, сильно морочиться не хотелось, поэтому было решено набросать на Delphi маленький и тупенький web-сервер со встроенным «монитором порта» (для передачи данных на arduino по виртуальному Com-порту), для этого использовались Indy idHTTPSever и CPort компоненты.

На стороне сервера находится страничка index.html с файлами для нее (CSS, JS, графика и т. д.) и файл codes.txt в котором хранятся, коды для управления оборудованием. Коды можно хранить в двух форматах HEX и GlobalCache.

В формате HEX, есть правило начинать команду с идентификатора 0000, мы будем считать это местом для манипуляции с количеством повторов кода и портом на который его необходимо послать. Количество повторов — это первые два символа переведенные из шестнадцатеричной в десятичную СС + 1

т. е. 00 = 0 + 1 = 1 или 0A = 10 + 1 = 11;

Адрес порта — это вторые два символа в которых просто скрыт номер порта arduino,

например: 00 = digital port 0 или 0D = digital port 13;

Остальные данные HEX кода изменять нет необходимости, оставляем как есть. Для кодов в GlobalCache-формате с этим чуть сложнее, сам формат выглядит так:

sendir,{moduleaddress}:{connectoraddress},{ID},{frequency},{count},{offset},{on1},{off1}…

Где:

  • {moduleaddress}:{connectoraddress} — именно это и должно являться номером цифрового порта на ардуино, для совместимости с устройствами GlobalCahce было решено пересчитывать эту пару значений в номер порта ардуино, это можно сделать по формуле:ArduinoPort = ({moduleaddress} * 3)-(3-{connectoraddress})-1;Например: 5:2 = (5*3)-(3-2)-1 = (15)-(1)-1 = digital port 13;
  • {ID} — Я игнорирую;
  • {frequency} — Частота в Гц;
  • {count} — Количество повторов (1-255);
  • {offset} — Опять игнорирую;
  • {on} и {off} — Это данные.

Я использую преимущественно HEX-формат, но стоит заметить, что коды в формате GlabalCache короче почти в 2 раза и соответственно в 2 раза быстрее парсятся. Каждая команда должна находиться строго на отдельной строке, номер строки в файле используется в качестве указателя на конкретный код, у меня для удобства коды начинаются с цифр т.к. строки в файле номеруются с нуля, таким образом получается строка №0 — это код кнопки 0.Привожу в пример часть файла codes.txt с командами к своему Philips 47PLF4007:000D 0073 002A 000D 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0BDE 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0021//digit 0
000D 0073 002A 000D 0061 0021 0010 0020 0010 0010 0010 0010 0010 0020 0020 000F 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 0BED 0061 0021 0010 0020 0010 0010 0010 0010 0010 0020 0020 000F 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 0021//digit 1
000D 0073 0028 000D 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 001F 0010 0BDE 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 001F 0010 0021//digit 2
… 000D 0073 0024 000D 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 001F 0020 001F 0020 001F 0010 0010 0010 0BDE 0061 0021 0010 0020 0010 0010 0010 0010 0030 0030 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 001F 0020 001F 0020 0020 0010 0010 0010 0021//home
sendir,5:2,1,36000,1,1,97,31,16,30,16,16,16,16,16,30,32,14,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,14,16,30,16,16,32,14,16,30,16,16,16,720//list
000D 0073 002A 0000 0061 0021 0010 0020 0010 0010 0010 0010 0010 0020 0020 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 000F 0010 0010 0010 0010 0010 0BEE 0061 0021 0010 0020 0010 0010 0010 0010 0010 0020 0020 000F 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0010 0020 0010 0010 0010 0010 0010 0010 0021//info


Сервер (или типа того, смотри рисунок ниже) полностью построен на GET запросах и это надо учитывать при разработке HTML страницы. Суть такая, я запрашиваю у сервера файл, название которого начинается с нижнего подчеркивания, а дальше следует номер строки из файла codes.txt на которой находится команда.Сервер видит, что запрашиваемый файл начинается с «_», удаляет первый символ из названия и читает оставшееся число, далее отправляет устройству код находящийся на строке с номером этого числа.procedure TForm1.srvCommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var S,codeStr:String; i:Cardinal;
begin S:=ARequestInfo.Document; Delete(S,1,1); if S='' then S:=ExtractFilePath(ParamStr(0))+'webdataindex.html' else begin if (S[1]='_') then begin Delete(S,1,1); codeStr:=SL.Strings[StrToInt(S)]; Delete(codeStr,pos('/',codeStr),255); if ComPort1.Connected then ComPort1.WriteStr(codeStr+#13); S:='ok.js'; end; S:=StringReplace(S,'/','',[rfReplaceAll]); S:=ExtractFilePath(ParamStr(0))+'webdata'+S; end; try AResponseInfo.ContentType:=ARequestInfo.ContentType; AResponseInfo.ContentStream:=TFileStream.Create(S,0); except end;
end;
Для клиента я написал несколько функций отвечающих за обмен данными с сервером. Что бы запросить у сервера выполнение команды, достаточно добавить на страницу новый тэг с атрибутом scr, так мы и поступим:var boolSendRepeat = false;
function addScript(src){ var element = document.createElement('script'); element.type = 'text/javascript'; element.src = src; element.className = 'bufferresponsescript'; document.getElementsByTagName('head')[0].appendChild(element);
} function delScripts(){ var z = document.getElementsByClassName('bufferresponsescript'); for(var i=z.length;i>0;i–){ z[i-1].parentNode.removeChild(z[i-1]); }
} function sendCommand(cmdNumber){ addScript('_'+cmdNumber);
} function sendMacro(arrCmdNumber,arrDelays){ var s=''; for(var i=0;i

Результат всего вышеперечисленного показан на следующих изображениях:Буквально вчера добавил в клиентский интерфейс прямое переключение на каналы эфирного телевидения, получилось симпатично:Надеюсь в данном посте мне удалось ответить на возникшие вопросы и раскрыть то, что в прошлой статье осталось «за кадром».

Ссылки:

Источник: https://habr.com/post/216355/

Простая система дистанционного управления ик лучах своими руками

ПДУ видеомагнитофона, телевизора, музыкального центра или спутникового ресивера возможно применить для выключения и включения различных бытовых электроприборов, в том числе и освещение.

В этом нам поможет дистанционное управления своими руками, схема которого приведенная в данной статье.

 Описание работы системы дистанционного управления на ИК лучах

Для дистанционного управления  приборами применяется следующий механизм. На ПДУ нажимают и держат произвольную кнопку в течении 1 секунды. На непродолжительное нажатие (например во время управления музыкальным центром) система не откликается.

Для того, чтобы исключить отклик телевизора на управление приборами, необходимо выбирать не применяемые кнопки на ПДУ или применить пульт от выключенного в это время прибора.

Принципиальная схема дистанционного управления изображена на рисунке 1. Специальная микросхема DA1 усиливает и формирует электросигнал фотодиода BL1 в электроимпульсы. На радиоэлементах DD1.1 и DD1.2 построен компаратор, а на радиоэлементах DD1.3, DD1.4 — генератор импульсов.

Состояние системы управления (включена или выключена нагрузка) контролирует триггер DD2.1.

В случае если на прямом выходе данного триггера лог 1, генератор будет функционировать на частоте примерно 1 кГц.

На эмиттерах транзисторов VT1 и VT2 появятся импульсы, которые сквозь емкость С10 поступят на контролирующий вывод симистора VS1. Он будет отпираться в начале каждого полупериода сетевого напряжения.

В первоначальном положении на контакте 7 микросхемы DA1 находится лог 1, емкость С5 заряжена сквозь сопротивления R1, R2 и на входе С триггера DD2.1 лог 0. Если на фотодиод BL1 идут сигналы ИК излучения с пульта дистанционного управления, на контакте 7 микросхемы DA1 окажутся сигналы, и емкость С5 будет разряжаться сквозь диод VD1 и сопротивление R2.

Когда потенциал на С5 снизится до нижнего уровня компаратора (через 1 секунду или более), компаратор переключится и на ввод триггера DD2.1 поступит сигнал. Состояние триггера DD2.1 поменяется. Так совершается переключение приборов из одного состояния в другое.

Микросхемы DD1 и DD2 возможно использовать схожие из серий К564, К176. VD2 — стабилитрон на напряжение 8-9 вольт и ток более 35 мА. Диоды VD3 и VD4 — КД102Б или схожие. Оксидные емкости — К50-35; С2, С4, С6, С7 — К10-17; С9, С10 — К73-16 или К73-17.

Настройка системы дистанционного управления ик лучах

Заключается в подборе сопротивления R2 такой величины, чтобы переключение совершалось через 1…2 с. Если повышения величины данного сопротивления приведет к тому, что емкость С5 не будет разряжаться до порогового напряжения, необходимо увеличить в 2 раза емкость С5 и повторно произвести регулировку.

Емкость С6 следует ставить в том случае, если продолжительность фронта импульса, идущего с компаратора на триггер, будет чрезмерно большой и он будет переключаться нестабильно.

Если применяемый ПДУ не дозволяет управлять прибором без помех телевизору, возможно собрать самодельный пульт дистанционного управления, который является генератором прямоугольных сигналов с частотой следования 20…40 кГц, функционирующий на излучающий ИК диод. Варианты подобного ПДУ на таймере КР1006ВИ1 (NE555) и логической микросхеме указаны на рисунках 3 и 4.

  • Дистанционное управление
  • ИК
  • ПДУ

Источник: http://fornk.ru/475-prostaya-sistema-distancionnogo-upravleniya-ik-luchax-svoimi-rukami/

Обучаемый ИК пульт дистанционного управления, для домашней техники

С неудобствами, связанными с необходимостью использовать для каждого электронного устройства свой собственный пульт дистанционного управления, сталкивался каждый,

у кого таких устройств более одного.

ПДУ занимают место,  а редко используемые модели пультов в хозяйстве вообще часто «закатываются под диван», и в самый неподходящий момент требуют замены батареек,  словом, создают всевозможные неудобства.

Кроме того, у каждого производителя, как правило, имеется свое понимание «Правильного Дизайна», поэтому одна и та же кнопка (например, банальные «VOL+» и «VOL-») на каждом пульте оказывается расположена в своём хитром месте, место положение которых можно  только выучить.

Уже давно известны методы борьбы с многопультием: это использование одного универсального или обучаемого пульта.

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

В чём суть этого универсального «Множества», во внутренней памяти универсального пульта «вшиты» команды управления многих  устройств самых различных производителей — количество поддерживаемых моделей может исчисляться тысячами.

… А что же будет, если вашей модели устройства в памяти данного конкретного универсального пульта нет? А вот это и есть главный недостаток обычных универсальных пультов: ничего не будет. Не сможете вы его использовать со своим устройством.

Исправляют этот недостаток обучаемые универсальные пульты.

Отличие от универсального состоит в том, что его весьма легко можно «научить» управлять нужным устройством.

Делается это с помощью оригинального пульта, очень просто.

Оригинальный и обучаемый пульты ставятся друг напротив друга, обучаемый вводится в режим обучения, после этого на оригинале нажимается кнопка, которую мы хотим «обучить», на обучаемом пульте — та же по значению кнопка, обучаемый пульт перехватывает сигнал от оригинального, запоминает его, и теперь при нажатии «обученной» кнопки, он будет посылать устройству запомненный сигнал. И так далее, пока не выучим все нужные нам кнопки.

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

Для данного базового варианта схемы, в общей сложности, это  48 программируемых клавиш для управления различными приборами ( 60 программируемых кнопок см.Вариант программы, 4 канала – 15 кнопок R_C_328_4х15).

Базовый вариант программы, 8 каналов – 6 кнопок R_C_328_bv.

Базовая схема.

Детали для сборки: микроконтроллер Atmega328P, приемник TSOP  практически любой с частотой модуляции 36 кГц, основное на что здесь нужно обращать внимание это возможность его работы при минимальных напряжениях (эту информацию можно узнать в документации характеристик TSOP  в описании от производителя).

Вместо приемник TSOP, в данной схеме можно применить простой фотодиод.

Типа такого комплекта, который используется  как сенсор для arduino.

Фотодиод там конечно не совсем «простой» но очень близок по свойствам простого, то что он “особенный” IR-фотодиод это точно.

Описание работы.

            1. При включении питания пульт находится в режиме минимального энергопотребления, ток потребления менее 1-го микроампера (спящий режим).

            2. Нажатие на кнопки пульта, выдает команду из заранее выбранного канала. После окончания нажатия на клавишу и отправки команды, пульт снова переходит в спящий режим.

            3. Короткое нажатие на кнопки выбора канала обучаемого пульта SET+ или SET выводит пульт из спящего режима. Включается светодиод, соответствующий номеру канала.

            4. Повторное короткое нажатие (менее 1 сек) на кнопки SET+ или SET позволяет выбрать номер канала обучаемого пульта.

            5. Если в этом режиме не нажимать на кнопки SET+ или SET или кнопки пульта, то через 10 сек пульт автоматически перейдет в спящий режим.

            6. Нажатие на запрограммированную кнопку пульта приведет к отправке команды, соответствующего канала и нажатой кнопке. Нажатие кнопки дублируется индикацией включенного светодиода одного из каналов. После этого  пульт снова перейдет в спящий режим.

Режим обучения.

            1. Выбрать программируемый канал короткими нажатиями на кнопки SET+ или SET.

 2.Нажатие и удержание в нажатом состоянии кнопок SET+ или SET более 1 сек переводит пульт в режим программирования.

Начинает мигать светодиод выбранного канала с частотой 1Гц.

(если дальше не принимать никаких действий  и не нажимать на кнопки SET+ или SET, то через 60 сек пульт автоматически перейдет в спящий режим).

           3. На оригинальном пульте нажать нужную кнопку. Если сигнал принят, светодиод канала начнет мигать с частотой 5Гц.  (если дальше не принимать никаких действий, принятый  сигнал находится во временной памяти МК в течении 5 сек, иначе после 5 сек. сброс в дежурный режим.)

       4. Нажать кнопку на обучаемом пульте, соответствующую принятой команде. Команда запишется в память, пульт перейдет в спящий режим.

            5. Для программирования остальных пультов и команд повторить п. 1-4.

            6. В базовой версии программы, 8й канал обучаемого пульта имеет особенность.

Он предназначен для записи команд от кондиционеров (тестировалось с кондиционерами китайского производства типа Midea, Dekker), поэтому нужно  иметь в виду, что этот канал имеет особенность записи команд для кондиционера.

 И если использовать этот канал для обычной бытовой техники, то  нужно проверять достаточно ли комфортно подходит управление управление другими устройствами с этого канала.

В спящем режиме (режим ожидания) программа может отслеживать нажатие всех  кнопок этой схемы, от одного нажатия любой кнопки МК мгновенно “просыпается” посылает запрограммированную команду, и опять входит в режим сна,  при этом почти не потребляя ток от элементов питания.

Потому  что, в микроконтроллере ATMega328P есть функция PicoPower( и это касается всей линейки этого  МК серии с буквой Р).

Потребление тока этой схемой в режиме ожидания меньше микроампера.

Теоретически, если здесь использовать распространенную маленькую батарейку CR2032, ёмкость которой составляет около 225 мА*ч, её хватит более чем на 25 лет ожидания.

Fusebits. Программа работает с подключенным внешним кварцем 8МГц.

Не исключен вариант использовать эту программу сконфигурировать фьюзы и на внутренний генератор 8МГц.

Один из вариантов  данной схемы , воплощенный в жизнь, с использованием корпуса от донорского пульта.

https://www.youtube.com/watch?v=asHvCU6an-c

Печатная плата, это один из примеров реализации этой схемы в «железе», плата сделана конкретно под донорский пульт SAT Globo.

Не знаю подойдет кому такой вариант платы или нет, но к плате сделаю небольшой комментарий.

Так как, эта плата была первой пробой для проверки работы программы обучаемого пульта,  разводка некоторых дорожек делалось про запас, и в частности сделаны лишние подключения AVCC и AREF.

То что  эти подключения оказывают какое то влияние на энергопотребление  мне установить не удалось, так как в дежурном режиме мой тестер, уже не может производить измерения , меньше 1 мка.

Поэтому, при дальнейшем повторении , Вы можете учесть это замечание.

Архив файлов: прошивка R_C_328_bv, печатная плата.

Вариант программы, 4 канала – 15 кнопок R_C_328_4х15.

На основе базового варианта сделан еще один вариант программы, на 4 канала с 15ю программируемыми кнопками (общая 60 программируемых кнопок).

Основное описание схемы в базовой вкладке, здесь описаны только внесенные изменения.

Схема 4х15.

Описание работы.

1. При включении питания пульт находится в режиме минимального энергопотребления, ток потребления менее 1-го микроампера (спящий режим).

 2. Нажатие на кнопки пульта, выдает команду из заранее выбранного канала. После окончания нажатия на клавишу и отправки команды, пульт снова переходит в спящий режим.

3. Короткое нажатие на кнопки прямого выбора канала обучаемого пульта Кн16*** …… Кн19***  выводит пульт из спящего режима. Индикация светодиодом этого действия; одноразовое троекратное мигание (зеленый красный , зеленый) .

4. Короткое нажатие (менее 1 сек) на кнопки Кн16*** …… Кн19***   позволяет соответственно выбрать любой номер канала обучаемого пульта.

5. Нажатие на запрограммированную кнопку пульта Кн1*…… Кн15*  приведет к отправке команды, соответствующего канала и нажатой кнопке. Нажатие кнопки дублируется кратковременной индикацией включения зеленного светодиода. После этого  пульт снова перейдет в спящий режим.

Режим обучения.

1. Выбрать программируемый канал коротким  нажатием на кнопку Кн16*** …… Кн19***   

2.Нажатие и удержание в нажатом состоянии  одной из кнопок  Кн16*** …… Кн19***   более 1 сек переводит пульт в режим программирования выбранного канала. Начинает мигать красный светодиод с частотой 1Гц.

(если дальше не принимать никаких действий  и не нажимать на кнопки Кн1*…… Кн15*   или Кн16*** …… Кн19***   то через 60 сек пульт автоматически перейдет в спящий режим).

3. На оригинальном пульте нажать нужную кнопку. Если сигнал принят, зеленый светодиод начнет мигать с частотой 5Гц.  (если дальше не принимать никаких действий, принятый  сигнал находится во временной памяти МКв течении 5 сек, иначе после 5 сек. сброс в дежурный режим.)

4. Нажать кнопку на обучаемом пульте, соответствующую принятой команде. Команда запишется в память, пульт перейдет в спящий режим.

5. Для программирования остальных пультов и команд повторить п. 1-4.

6. В версии программы R_C_328_4х15,  4й канал обучаемого пульта имеет особенность.

Он предназначен для записи команд от некоторых кондиционеров , поэтому нужно  иметь в виду, что этот канал имеет особенность записи команд для кондиционера.

 И если использовать этот канал для обычной бытовой техники, то  нужно проверять достаточно ли комфортно подходит управление другими устройствами с этого канала.

Fusebits. Программа работает на внутренний генератор с частотой 8МГц.

Один из вариантов  данной схемы , воплощенный в жизнь, с использованием корпуса от донорского пульта.

https://www.youtube.com/watch?v=asHvCU6an-c

Печатная плата,  под донорский пульт .

Архив файлов: прошивка R_C_328_4х15, proteus, печатная плата.

P.S. Испытания работы программы были проведены на бытовой технике, производства Made in China, Japan, Europe  . Которая была доступна для тестирования физически , это :

Телевизоры  марки Digital,  Schneider, Universum, Samsung, Phillips, LG, спутниковые ресиверы Openbox, Globo  DVD-проигрыватели LG, Odeon  Медиа-проигрыватели Samsung,  Alfacore, Panasonic, Hitachi, кондиционеры Dekker, Midea, Sensei. Результаты управления этой техникой от обучаемого пульта положительные.

Протоколы управления этой техникой не возможно идентифицировать точно, однозначно можно только сказать что они и их разновидности из семейства протоколов RC5, Sony (SIRC), NEC, JVC, Samsung .

Поэтому есть предложение для тех кто соберет и проверит эту схему сам, написать с чем работает а с чем нет. Возможно тогда  получится  составить список моделей, которые поддерживает данный пульт.

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

Разработчик программы товарищ Soir,  большое ему спасибо, за создание этой интересной и полезной программы.

На главную

You have no rights to post comments.
Недостаточно прав для комментирования

Источник: http://sxem.org/2-vse-stati/27-radiolyubitelskie/176-obuchaemyj-ik-pult-distantsionnogo-upravleniya-dlya-domashnej-tekhniki

Универсальное дистанционное управление

Источник: http://radioskot.ru/publ/mk/universalnoe_distancionnoe_upravlenie/9-1-0-394

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}
Vol+    Недавно собрал и испытал модуль дистанционного управления на 12 каналов. Данный приемник ДУ очень прост в сборке, особенно если имеются навыки прошивки контроллеров.

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

Состоит модуль всего из 12 деталей, не считая разъема к СОМ порту ПК:

 1) PIC16F628(A) 2) 3 конденсатора 10мкф 16В 3) 2 транзистора КТ315 4) 1 стабилизатор 78L05 5) 2 резистора 10кОм 6) 2 резистора 4,7кОм

   Приёмник ДУ имеет 12 выходных каналов. Для проверки работы приёмника к каналам можно подключить светодиоды с токоограничительными резисторами по 220 Ом.

   Любой из выходов приемника дистанционного управления может работать в одном из трех режимов:

 – включение (при нажатии на кнопку ДУ пульта происходит включение, выдерживается пауза и затем происходит выключение); – выключение (при нажатии на кнопку ДУ пульта происходит выключение, выдерживается пауза и затем происходит включение); – переключение (при нажатии на кнопку ДУ пульта происходит переключение, например, из включенного в выключенное состояние, затем выдерживается пауза, чтобы вы успели отпустить кнопку на пульте ДУ).

   Паузу для каждого выхода можно сделать индивидуальной (от 1 до 16 секунд). Если вы нажали кнопку пульта ДУ и приемник находится в состоянии выдержки паузы, то в этот момент приёмник не обрабатывает сигналы для других линий. Для того чтобы начать настройку схемы под определенный пульт с помощью «Конфигуратора», необходимо прошить МК. (прошивка для PIC16F628 прилагается в архиве).

   А вот и сама программа:

   Последовательность работы с программой. 1) Подключите приемник к свободному COM-порту ПК. 2) Подайте на приемник питание 9-12 вольт. 3) Запустите программу “Конфигуратор”. 4) Выберите порт подключения (обведен красным). 5) Откройте порт (утопите кнопку обведенную синим).

 6) Установите курсор в поле “Код кнопки” у соответствующего выхода.

 7) Нажмите на пульте ДУ необходимую кнопку (“посветите” в приёмник). В поле “Код кнопки” автоматически пропишется код кнопки. Для каждого пульта и для каждой кнопки код индивидуален! Хотя многие кнопки на разных пультах совпадают, проверено мною на 5 разных пультах (3ех телевизоров, от DVD и ресивира).

 8) Повторите то же самое с остальными выходами. 9) Нажмите кнопку “Записать настройки в приёмник”

 10) Проверим, записались ли наши настройки. Перезапускаем конфигуратор, открываем порт и нажимаем кнопку “Считать настройки из приёмника”

   Должно появиться примерно такое:

   Для облегчения и ускорения работы контроллера, используется только младшая половина кода кнопки. Этого вполне достаточно. Строго говоря, хватило бы и младшей четверти кода, так как в большинстве случаев и она (младшая четверть) уникальна для каждой кнопки в пределах одного пульта. Как видите, всё довольно просто. Для того чтобы вновь записанные настройки в приёмнике дистанционного управления активировались, необходимо его перезагрузить – отключить и снова включить питание. Устройство собрал и проверил: [)еНиС

   Форум по микроконтроллерам PIC