Управление техникой по ИК каналу

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Управление техникой по ИК каналу

Сообщение kod.begemot » 21 авг 2015, 16:57

Знаю, тема уже не однократно обсуждалась. Большинство сходится на покупке специального устройства для управления по ИК каналу с интерфейсом Ethernet или WiFi (если я правильно понял).
Но у нас же "умный дом своими руками", и хочется не просто накупить кучу железок, а что-то сделать и своими руками :)
Я нашел проект http://we.easyelectronics.ru/woddy/ir-p ... eysom.html, но там заточено под команды стандартные - для аудио-видео техники, по стандартам вроде "NEC". Я для сплит-систем это не прокатывает, там нужен "жесткий RAW". в большинстве случаев.
Для своего Samsung-а я сделал "костыль" в виде мелкой дуино-нано+ir диод, к серверу по USB, управляю через виртуальный COM порт - шлю команду на включение или выключение сплита. работает как надо, но не красиво это. Пытался привязать IRremote библиотеку к ESP8266, но пока успеха не добился. Может есть ещё кто-то, кто идет в этом направлении?

vova5049
Сообщения: 26
Зарегистрирован: 05 мар 2014, 17:27

Re: Управление техникой по ИК каналу

Сообщение vova5049 » 21 авг 2015, 21:50

Так в homes-smart уже реализовали это в 8266, не только nec, но и raw и несколько стандартных протоколов..... Один минус -- платный проект это

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 22 авг 2015, 16:27

а что-то сделать и своими руками
легко :) http://sxem.org/2-vse-stati/codevisiona ... cs?start=7 протокол rc5
сгребаем все в буфер
trigger = RC5_buffer [2]; //формируем переменную тригера

device = (RC5_buffer [3] << 4)|(RC5_buffer [4] << 3)|(RC5_buffer [5] << 2)|(RC5_buffer [6] << 1)|RC5_buffer [7]; //формируем адрес ПДУ
command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13]; //формируем команду
а потом хотите пакуйте в пакет и на сервер, хотите обрабатывайте сами

stels3737
Сообщения: 27
Зарегистрирован: 24 окт 2013, 00:45

Re: Управление техникой по ИК каналу

Сообщение stels3737 » 22 авг 2015, 21:37

vova5049 писал(а):Так в homes-smart уже реализовали это в 8266, не только nec, но и raw и несколько стандартных протоколов..... Один минус -- платный проект это
100 рублей это не плата... смешно называть платным проектом

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 24 авг 2015, 10:14

alexsis_76 писал(а):
а что-то сделать и своими руками
легко :) http://sxem.org/2-vse-stati/codevisiona ... cs?start=7 протокол rc5
сгребаем все в буфер
trigger = RC5_buffer [2]; //формируем переменную тригера

device = (RC5_buffer [3] << 4)|(RC5_buffer [4] << 3)|(RC5_buffer [5] << 2)|(RC5_buffer [6] << 1)|RC5_buffer [7]; //формируем адрес ПДУ
command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13]; //формируем команду
а потом хотите пакуйте в пакет и на сервер, хотите обрабатывайте сами
Согласен, для RC5 сделать не трудно. Я сам приводил ссылку на проект, в котором есть и LAN, и COM.
А вот с RAW уже намного сложнее.

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 24 авг 2015, 11:11

RAW это имеется ввиду свой протокол передачи
trigger = RC5_buffer [2]; //формируем переменную тригера

device = (RC5_buffer [3] << 4)|(RC5_buffer [4] << 3)|(RC5_buffer [5] << 2)|(RC5_buffer [6] << 1)|RC5_buffer [7]; //формируем адрес ПДУ
command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13]; //формируем команду
вот сдесь мы собственно мы и имеем RAW(необработанные данные)

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 24 авг 2015, 11:54

Хм... Я примерно таким же путем шел, в своей самодельной программе для дуины - пытаясь сократить объем занимаемой памяти. Скажу тогда по другому - сложности не с RAW, сложности со сплитами - для samsunga моего команда на включение (с параметрами, естественно) - 347 "элементов".
Итого две команды - включение, выключение + собственный буфер библиотеки = 86% оперативки atmega328. это "в лоб", без оптимизации.

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 24 авг 2015, 12:35

т е у вас много места занял паттерн(шаблон)команд вашего самсунга?
86% что там было?

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 24 авг 2015, 15:14

Паттерн на одну команду - 347 элементов, соответственно 347 байт. итого 2 команды + буфер = 1041 байт только команды и буфер, остальное - работа с serial, ну и библиотеки... пока у меня знаний не хватает, чтобы избавиться от библиотек и реализовать всё внутри одного скетча. Если это сделать - получится от функций приема избавиться, от лишнего буфера тоже. Объём уменьшится в 2 раза, наверное. Также веду работу по оптимизации - перекодирую паттерны в некий код, чтобы повторяющиеся участки хранить оптимизированно. Есть подвижки...
Но это всё баловство. Всё-равно памяти не хватит чтобы работать "по человечески" - подключить en28j60 к примеру...
Хочется научиться работать напрямую, без IDE ардуино, чую - там возможностей больше :)
По поводу Homes-smart, посмотрел, там есть:
IR приемник (Управление ИК пультом. RAW формат. Поддержка управления GPIO. На вкладке /debug можно посмотреть принятый код. Настройка под пульт по умолчанию под NEC: Delay 0 -1200, Delay 1 -2400, Delay max -12000.)
и IR-передатчик (Команда GET запроса: /irremote?cmd=YYYYYY . YYYYYY - команда (в десятичном виде). Пока поддерживается только NEC протокол. Код кнопки можно узнать только через Arduino !! Тест: параметр &mode=X указывает протокол, 0 - NEC; 1 - samsung;2 - RC5;3- RC6;4- Sony.)
Так что нету там того, что нужно для управления сплитом.
P.S. Насчет "100 рублей - не плата" - согласен, если речь не идет о множестве устройств. Да и не всё там так, как мне нужно. Не хватает "оффлайн логики".
P.P.S. А вообще, даже пускай и с "костылями", но уже сейчас я управляю сплитом из интерфейса умного дома, и обошлось мне это в 200 рублей :)

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 24 авг 2015, 16:06

итого 2 команды + буфер = 1041 байт
чет много
паттерны можно(нужно)хранить в еепром или в памяти программ, например объявите их PROGMEM,а то неболь болтаются в оперативке,для уменьшения расхода оперативки старайтесь переменные и буферы объявлять локально
пусть буффер unsigneg char buff[30] объявлен глобально (до функции main), он будет существовать все время работы программы и занимает 30 байт,допустим вы пишите парсер и вам там нужен буфер длинной n байт, буфер нужен только функции парсера и больше ни кому,если использоать buff[30]только для парсера это будет накладно при ваших 2кб, на входе в функцию парсера объвляете unsigneg char buff_temp[30], локальный буфер будет существовать только в функции где он объявлен,он создается в стеке при вызове функции и уничтожается при выходе, а насчет библиотек это Вы зря , при правильном применении они очень помогают

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 24 авг 2015, 22:55

Насчет библиотек признаю - облегчать работу призваны, я видимо "не правильно готовлю". Думал просто от дублирования буферов избавиться таким образом. Насчет PROGMEM - пробовал, функция не принимает данные в таком виде, ругается. Как я понял - нужно переделывать тип данных перед передачей в функцию. К тому-же буфер в 30 байт не получится, 347 как минимум, ведь в irsend надо передавать весь паттерн за раз, верно?. И такой-же буфер - как я понимаю - создает и библиотека, вот и получается уже - 694 байта как минимум.

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 25 авг 2015, 03:35

Насчет PROGMEM - пробовал, функция не принимает данные в таком виде
ну все верно, дело что с PROGMEM данные перемещаются в память программ и если объявить
buf[] PROGMEM ={1,2,3} то конструкции типа i=buf[0] не будут работать, т к массив находится вне их досягаемости, нужно использовать pgm_read_ посмотрите сдесь все написано http://microsin.net/programming/AVR/avr ... ogmem.html
насчет библиотек и промежуточных буферов
к проекту подключается библиотека записи чтения в из eeprom
#include <xc.h> // ??????????? ??????????
#include "i2c.h"
#include "Func_i2c.h"
//#include "TCPIP Stack/TCPIP.h"
#include "../Microchip/Include/TCPIP Stack/TCPIP.h"
BYTE len_name_page1=30;
BYTE i2c_slave_addr=0xA0;
WORD start_page1=0x0000;
BYTE i2c_write_byte=0;
BYTE i2c_read_byte=1;

//static BYTE I2C_RECV[200];
void Read_Memory(BYTE *data,BYTE len,WORD addr_dev,BYTE addr_mem)
{

BYTE i;
i2c_start(addr_dev,i2c_write_byte);
i2c_write_addr(addr_mem);
i2c_start(addr_dev,i2c_read_byte);
i2c_rstring(data,len);
//LED1_IO = 1;
i2c_stop();

}
void Write_Memory(BYTE *data,BYTE len,WORD addr_dev,BYTE addr_mem)
{
BYTE i;
BYTE *ptr;
ptr=data;
BYTE I2C_RECV[200];
while(*ptr!=0x0d)
{
I2C_RECV=*ptr;
ptr++;
i++;
}
i2c_start(addr_dev,i2c_write_byte);
i2c_write_addr(addr_mem);
Nop();
Nop();
Nop();
i2c_write_string(I2C_RECV,len);

i2c_stop();
}

из файла GenericTCPServer.c вызывается
Write_Memory(ptr,len_name_page1,i2c_slave_addr,start_page1);

ей передаются параметры 4 шт параметр ptr -буфер который должен быть записан в память
в библиотеки определен буфер BYTE I2C_RECV[200]; он может быть объявлен глобально static BYTE I2C_RECV[200]; и локально в Write_Memory оба случая будут работать вот только если объявить static BYTE I2C_RECV[200]; объем составит
Total data memory used (bytes): 0xb86 (2950) 36%
а BYTE I2C_RECV[200]; Total data memory used (bytes): 0xabe (2750) 33% чувствуете разницу , для этого случая можно и так и так объем оперативки 8кб, против ваших 2
функция чтения байта вызывается Read_Memory(&I2C_RECV,len_name_page1,i2c_slave_addr,start_page1);
первый параметр адрес буфера в файле GenericTCPServer.c размер 300 байт буфер глобальный вместо того чтобы объявить в "i2c.с"static BYTE I2C_RECV[300];и копирования содержимого туда , а потом в память,мы передаем указатель на буфер BYTE *data,и пишем в память i2c_rstring(data,len);таким образом мы избежали дублирования буферов -300 байт
в Write_Memory промежуточный буфер можно и не объявлять а сразу написать i2c_write_string(ptr,len);,но мне нужно записать определенную часть поэтому while(*ptr!=0x0d)
{
I2C_RECV=*ptr;
ptr++;
i++;
} пока не встретится символ 0x0d

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 25 авг 2015, 12:31

Вот что значит - знающий человек!
Спасибо большое, этого мне и требовалось - буду теперь разбираться!
Насчет PROGMEM = я находил подобную информацию, но не стал тогда разбираться дальше - так как чувствовал что без избавления от дублирования буфера будет толку не много.

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 25 авг 2015, 12:40

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

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 25 авг 2015, 14:28

Хорошо, ещё раз спасибо за дельные советы!
И попутно пару вопросов - какую лучше среду разработки для Atmega? WinAVR, AVR Studio или ещё какая? для желающего "слезть с ардуино"?
И также вопрос - насколько из той среды будет удобно шить ту-же самую ардуину - с загрузчиком... или лучше шить через ISP?
Я Си изучал в универе, но это было давно. Но какие-то базовые знания вроде остались. Скачаю [куплю] книгу - буду подтягивать...

alexsis_76
Сообщения: 1045
Зарегистрирован: 26 авг 2011, 05:09
Откуда: Забайкальский край п Оловянная

Re: Управление техникой по ИК каналу

Сообщение alexsis_76 » 25 авг 2015, 15:44

какую лучше среду разработки для Atmega? WinAVR, AVR Studio
Дело вкуса,я начинал с WinAVR, потом программировал в AVR Studio.AVR Studio удобнее ,подсветка синтаксиса, эмулятор,можно поработать с отладчиком, прочие прелести, проекты WinAVR без проблем компилируются в AVR Studio
И также вопрос - насколько из той среды будет удобно шить ту-же самую ардуину - с загрузчиком... или лучше шить через ISP?
я шил через CVAVR
- с загрузчиком... или лучше шить через ISP? через загрузчик или через ISP прошьется одно и то же единственное через загрузчик удобнее, но фъюзы можно выставить только через ISP
пишите ежели что подниму свои наработки с атмегами(сейчас забросил их)

Ruslan
Сообщения: 367
Зарегистрирован: 06 янв 2014, 20:44

Re: Управление техникой по ИК каналу

Сообщение Ruslan » 25 авг 2015, 17:17

Уважаемые, форумчане!
Управление по ИК каналу - интересная штука. Ясно, что при этом присутствует тот или иной ИК-излучатель, через который передаются команды технике.
Если есть желание в будущем использовать этот функционал, какие провода необходимо будет протянуть к месту монтажа ИК-излучателя?
Понятно, что потребуется питание ИК-излучателя (2 или 3 жилы под силовой провод) и провод под передачу данных (UTP 8 жил, как наиболее очевидный). Может что еще из проводов надо заранее предусмотреть?

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 25 авг 2015, 23:50

alexsis_76 писал(а): пишите ежели что подниму свои наработки с атмегами(сейчас забросил их)
Спасибо! Вы мне очень помогли :)
Ruslan писал(а): Понятно, что потребуется питание ИК-излучателя (2 или 3 жилы под силовой провод) и провод под передачу данных (UTP 8 жил, как наиболее очевидный). Может что еще из проводов надо заранее предусмотреть?
По конкретно моему проекту - так ещё до конца ничего не понятно :)
может даже просто питание будет достаточно, а может и витую пару, проект пока в зачаточном состоянии, то - что сейчас работает нормальным девайсом ну ни как не назовешь.
А вообще думаю максимум - что может понадобиться - витая пара. Минимум - просто двупроводная линия чтобы установить просто ИК-диод, ну или дать питание на устройство с радиоканалом.

Ruslan
Сообщения: 367
Зарегистрирован: 06 янв 2014, 20:44

Re: Управление техникой по ИК каналу

Сообщение Ruslan » 26 авг 2015, 09:08

Спасибо!. Сейчас у меня как раз решается вопрос проводкой. В общем, под ИК-излучатель буду прокладывать питание + UTP (как "классику жанра").

kod.begemot
Сообщения: 388
Зарегистрирован: 21 сен 2013, 00:38

Re: Управление техникой по ИК каналу

Сообщение kod.begemot » 26 авг 2015, 12:11

Ruslan писал(а):Спасибо!. Сейчас у меня как раз решается вопрос проводкой. В общем, под ИК-излучатель буду прокладывать питание + UTP (как "классику жанра").
Достаточно просто UTP: даже при работе через LAN - 2 пары остаются свободными (в нашем случае), потому UTP+питание - избыточно.

Ответить