Проблема с ИК
- Войдите на сайт для отправки комментариев
Для одного моего проекта нужно управлять кондиционером (midea mse-12sr) через ИК. Управление организуется с помощью ардуино.
Использую библиотеку отсюда: http://www.arcfn.com/2009/09/arduino-universal-remote-record-and.html
У библиотеки есть отличный пример - IRrecord: record and play back IR signals as a minimal
Пример делает все просто - сначала нажимаем кнопку на оригинальном пульте - ардуино захватывает этот сигнал, если может - дешифрует, если не может - записывает "как есть" (RAW). Далее нажатие на кнопку, подключенную к соответствующему выводу, приводит к тому, что ИК-диод начинает моргать соответствующей командой (дешифрованной или "как получилось").
Проверка очень простая - записываем ИК-команду, нажимаем кнопку - ИК-команда воспроизводим. Если все "ок" - то принимающее устройство эту команду воспримет.
С аудио-видео техникой все без неожиданностей (ресивер, телевизор, медиаплеер, спутниковый ресивер и игровая консоль) - все команды спокойно захватываются и обрабатываются (причем, часть из них не декодируются, а идут как "raw").
Засада именно с кондеем (а ведь именно его надо заставить включаться). Команда захватывается ("RAW" - у кондеев сложная система команд - в одной команде передается сразу все - "включить", "температура", "положение заслонок", "режим работы" и т.п.). Но вот кондей не управляется командой с ардуино.
Сначала подумалось, что есть ограничение на длину "посылки" и я ее нашел в коде IRremote.h (она была установлена в 76):
#define RAWBUF 200 //76 // Length of raw duration buffer
Поправил эту переменную (установил в 200) - и оказалось, что пульт кондея дает команду "длинной" ровно 100.
Убедился, что 100 - именно "длинна" всей команды ПДУ кондея (убедился просто - стал обучать ардуино разным пультам и на одном из них ардуина сказала, что длинна команды 136).
Но легче не стало - кондей все равно не отзывается :(
Может, кто-то уже решал эту проблему и нашел решение? Любые идеи? Как заставить кондей включиться?
На вскидку, скорее всего, несущая частота не совпадает. Ардуина, при использовании IRRemote, передает сигнал на несущей 36-40 КГц, а у пульта ду кондея может быть другая частота (скорее всего выше). Если знания позволяют, надо покопаться в библиотеке IRRemote и попробовать выставить другую несущую частоту.
Знания позволяют, какую частоту попробовать выставить? (просто перебирать - будет сильно долго). Может, есть какие-то характерные частоты?
Инфа с википедии:
Модуляция
Обычно в пультах используется одна частота модуляции несущей (то есть частоты излучения ИК-светодиода) — на неё настроен и пульт и приёмник. Частоты модуляции обычно стандартны — это 36 кГц, 38 кГц, 40 кГц (Panasonic, Sony). Редкими считаются частоты 56 кГц (Sharp). Фирма Bang & Olufsen использует 455 кГц, что является большой редкостью. Использование приёмника с частотой модуляции, не точно совпадающего с частотой передатчика, не означает что он не будет принимать — приём останется, но его чувствительность может очень сильно упасть.
Передача сигнала осуществляется излучением ИК-светодиода с соответствующей частотой модуляции. Для частот от 30 до 50 кГц обычно используются светодиоды с длиной волны 950 нм, а для 455 кГц — специальные светодиоды с длиной волны 870 нм (на эту длину волны и высокую частоту модуляции ориентированы специализированные приёмники TSOP5700 и TSOP7000).
Частота модуляции приемника/передачика у кондея, скорее всего, стандартная (или близка) - внешне приемник выглядит как самый обычный - вот так:
ИК-диод в пульте тоже обычного вида - полностью прозрачный (на другую длинну волны видел с окрашенными колбами - сине/фиолетовые).
И погорячился я с тем, что знаний хватит подкрутить частоту модуляции.. :( в самой библиотеке этого не нашел. Правил в скетче - указал там 56. Изменений, к сожалению, нет.
Может, кто-то может повторить мой опыт со своим кодеем (думаю, там принцип почти везде одинаковый)?
Скетч могу выложить, если нужно... хотя это файл из примера IRrecord, который есть в библиотеке.
Никак у меня не "взлетает". И как проверить тоже пока не представляю.
Пульт от кондея могу разобрать... только вот что это может дать?
Еще одну штуку проверил.. есть у меня универсальный пульт Logitech One - так вот я его учил командам пульта кондея (успешно).
Попробовал скетчем IRrecord захватить команды не только от оригинального пульта, но и от универсального - вижу в Serial Monitor практически идентичные данные от обоих пультов.
и, имхо, еще один довод, что используется "стандартный" ИК - то, что logitech One нормально обучился командам пульта... но вот как на ардуине правильно записать и воспроизвести команду? :(
в стандартной поставке IRRemote идет пример скетч IRReciveDump (Точно не помню, но Dump в названии точно есть).
Он все что удалось "понять/расшифровать" кидает в сериал. В том числе и RAW данные (длины импульсов).
Вообщем смотрите что-же принимает ва IR. Одно и тоже или нет. На одноу и туже кнопку, ну а там чухать голову "в чем отличае" между нормальными пультами и кодеевским. Искать даташиты на этот пульт. Штудировать http://www.lirc.org/, искать конфигурации для этого пульта...
Можно еще попробовать "финт ушами" (с точки зрения логики смысла нет, но ...). Обучить Logitech кондеевским командам, и дать их ардуине... может она его поймет лучше чем оригинальный пульт.
финт ушами пройден - одниково плохо ардуина берет (сканирует хорошо (по крайней мере изображает, что сканирует), но вот воспроизведение ни к чему не приводит).
видимо, надо финт ушами усложнить:
1. захватить команду ардуиной от оригинального пульта
2. отправить эту команду на универсальный пульт (чтобы он ее запомнил)
3. захватить только что обученную команду от универсального пульта
4. сравнить результаты п.1 и п.2
Сегодня попробую... но, сдается мне, что получу одинаковые вещи (в рамках погрешности), собака где-то в другом месте порылась.. но вот как понять где?
финт ушами пройден - одниково плохо ардуина берет (сканирует хорошо (по крайней мере изображает, что сканирует), но вот воспроизведение ни к чему не приводит).
Почему вы думаете, что "изображает, что сканирует"?
Ведь красиво изобразить можно, даже не сканируя.
Или прочитав сканируемый сигнал с ошибками, выходящими за пределы допустимого.
Сегодня попробую... но, сдается мне, что получу одинаковые вещи (в рамках погрешности), собака где-то в другом месте порылась.. но вот как понять где?
В универсальном пульте ИК-диод может по длине волны получше подходить для кондиционера, чем тот, который вы к ардуине прилепили. Напрмер, из-за того, что перед ИК-приемником кондиционера стоит хороший светофильтр, пропускающий достаточно узкий диапазон ИК-света. Если такой фильтр есть - попробуйте снять.
В универсальном пульте ИК-диод может по длине волны получше подходить для кондиционера, чем тот, который вы к ардуине прилепили. Напрмер, из-за того, что перед ИК-приемником кондиционера стоит хороший светофильтр, пропускающий достаточно узкий диапазон ИК-света. Если такой фильтр есть - попробуйте снять.
ну или самый жесткий вариант: открыть кондиционер. Найти его IR датчик, подключится к нему. И снять какие импульсы от ловит когда вы шлете ему ардиуино, и какие логитехом (или родным пультом). И посмотреть "в чем отличаются". Заодно и маркировку датчика выяснить.
Попробовал вытащить блок с ИК-приемником из кондея для более детального изучения - не получилось (побоялся вырвать его с корнем, а где и как сзади него отключается кабель - не смог понять :(
Поэтому пока только фото:
При тестах все светофильтры, естественно, убраны. Пока результатов нет.
Сейчас попробую записать команду с "родного" пульта, потом записать то, что воспроизведет ардуина на универсальный пульт и потом считаю то, что универсальный пульт воспроизведет.. и сравню с эталоном. Может, что-то прояснится.
Эксперимент провел.
Результаты (данные из програмы IRrecord):
Собственно, первая строка - захват ардуиной оригинального пульта (включение кондея), вторая - та же команда, но от универсального пульта (обучен от родного пульта), третья строка - команда от универсального пульта (обучен от ардуины).
Может, кто-то увидит, в чем разница?
P.S. к адруине подключал разные ИК-светодиоды, подсовывал их к блоку кондея на расстояние 3 метра, 1 метр, 10 см, 5 см - результат везде один :(
Рискнул и все-таки смог снять блок с ИК-приемником с кондея.
Маркировки на приемнике не оказалось. Решил пойти дальше - выпаял приемник из кондея, подключил к адруино и сканировал данные оригинального пульта. Получил то же самое:
Поскольку таких кондеев дома больше одного - тут же попробовал воспроизвести записанную команду на другом кондее - результат тот же :( Кондей ее просто игнорирует (в случае, если кондей принимает какую-то команду от пульта, которая в текущий момент неуместна - он звуком оповещает, что команду принял и нифига не делает).
В случае с командами от Ардуино - посто полный игнор (никаких звуков и действий).
Есть еще какие-то идеи? в чем может быть проблема? где еще подкрутить? что крутить надо?
В замен выпаянного ИК-датчика впаять другой такой-же с частотой модуляции 36-38 Кгц. Например TSOP1736 или TSOP1738. Может прокатит.
неа.. не прокатывает :( работают одинаково... где-то в другом месте собака зарыта
выпаял приемник из кондея, подключил к адруино и сканировал данные оригинального пульта.
Ну то что "кондишный приемник", нормально принимает данные импульсы от родного пульта и так было известно. Хотя "в точности иметь команды" - конечно не плохо.
Тут скорее интерестно "что этот приемник" принимает когда данные ему шлет ардуина (и принимает-ти что-то вообще). В идеале нужно "две дуины". Одна "шлет", другая принимает с помощью "кондишного датчика". Возможно получится и одной ардуиной "сколхозить", когда она одновеременно и посылает и записывает, но "не уверен". В целях экономии вторую "ардуину" можно сколхозить из ATMEGA8 + кварц + два кондера.
В случае с командами от Ардуино - посто полный игнор (никаких звуков и действий).
не совсем понятно. "кто игнорирует-то"? куда вы слали команды от ардуино? на реальный кондишн или на датчик кондишина подключенный к ардуине? (тогде какие звуки и действия ожидались).
И погорячился я с тем, что знаний хватит подкрутить частоту модуляции.. :( в самой библиотеке этого не нашел. Правил в скетче - указал там 56. Изменений, к сожалению, нет.
Ну что вы правили в скетче - неизвестно. Так как самого скетча нет.
В библиотеке за установку частоты отвечает функция enableIROut(ЧАСТОТА). Вызывается она с помощью функции sendRaw(..) - третий параметр - частота.
Но в комментах к enableIROut написанно, что она "заточена" под частоты 36-40KHz, другие значение "на собственный страх и риск".
Так что для других диапазонов, нужно будет разбиратся как она реализована, выкуривать даташиты по поводу тонкного тюнинга PWM, править ее и т.п. Поищите, на прошлой неделе, ветку про перенос кода на Attiny, там step962 совместно с топик стартером раскуривали мануалы, режимом PWM и проч.
для начала исправлюсь (хотя про то, какой код, мне казалось, дал точное описание):
по поводу "подкручивания" - крутил файл IRremote.h из соответствующей библиотеки. Там в конце файла есть вот такие строчки:
Подкручивал второе определение, команда от пульта не влазила в предназначенную ей длину (длина команды пульта от моего кондея - ровно 100). Остальные параметры пытался менять (в небольших примерах, но не увидел разницы (или не знал, куда смотреть)).
> для начала исправлюсь (хотя про то, какой код, мне казалось, дал точное описание):
Описание != Код.
Во первых описание это часто "вы думаете он это делает", а код может делать другое :) Во вторых во описании трудно сослатся на строчку.
Для начала вам нужно, все-таки, собрать схему, когда вы шлете ардуиной и принимаете тоже ардуиной. Используя датчик от кондишина.
Иначе это "кручение в слепую", не зная что принимает датчик.
То что вы подкрутили размер буффера - архиверно. Но это "кручение", которое предпологалось автором библиотеки как "возможное".
Второе место где он дал возможность "подстроится" это строчка 138 вашего кода "irsend.sendRaw(rawCodes, codeLen, 38);
Вот этот третий параметр "38" и есть частота. Его можно менять от 36-ти до 40-ка. По задумке автора. Если вы выходите за этот диапазон, то "автор ничего не гарантирует". Возможно(!) в этом случае потребуется исправлять реализацию функции enableIROut(...) из библиотеки. Плотно брать в руки даташит, разбиратся что она делает сейчас (осознать каждую строчку), и что тут можно поменять что-бы по другому несущая формировалась.
Естественно этот irsend.sendRaw(rawCodes, codeLen, 38) нужно крутить если используется именно он. Если "распознать протокол", библиотека не смогла и обзывает его Unknown. Если же она приняла его за Sony,Nec и т.п., но из скетча частотой рулить не получится. Для них частоты зашиты в библиотеке (впрочем там их не трудно найти/поменять). Или поменять скетч, что-бы он принудительно, в любом случае слал команды как RAW.
Но еще раз, это все имеет смысл только если вы подключили датчик к ардуине и видите, что "ОТ АРДУИНЫ" он не принимает правильно тики. "Не видит их" или "ловит мусор". Когда точно известно что проблема в связке "IR-диод ардуины <-> приемник кондишина".
Для начала вам нужно, все-таки, собрать схему, когда вы шлете ардуиной и принимаете тоже ардуиной. Используя датчик от кондишина.
Иначе это "кручение в слепую", не зная что принимает датчик.
Да, это я сделал. Выпаял ИК-приемника с платы кондея. Данные, которые получает ардуино через него от оригинального пульта - такие же, как и с моего первого ИК-приемника (TSOP меньшего размера и с другой распиновкой).
То что вы подкрутили размер буффера - архиверно. Но это "кручение", которое предпологалось автором библиотеки как "возможное".
да, без этого никак. В "штатный" буфер вся команда не лезла - обрезалась, а у нас и без этого "проблемы".
Второе место где он дал возможность "подстроится" это строчка 138 вашего кода "irsend.sendRaw(rawCodes, codeLen, 38);
Вот этот третий параметр "38" и есть частота. Его можно менять от 36-ти до 40-ка. По задумке автора. Если вы выходите за этот диапазон, то "автор ничего не гарантирует". Возможно(!) в этом случае потребуется исправлять реализацию функции enableIROut(...) из библиотеки. Плотно брать в руки даташит, разбиратся что она делает сейчас (осознать каждую строчку), и что тут можно поменять что-бы по другому несущая формировалась.
Естественно этот irsend.sendRaw(rawCodes, codeLen, 38) нужно крутить если используется именно он. Если "распознать протокол", библиотека не смогла и обзывает его Unknown. Если же она приняла его за Sony,Nec и т.п., но из скетча частотой рулить не получится. Для них частоты зашиты в библиотеке (впрочем там их не трудно найти/поменять). Или поменять скетч, что-бы он принудительно, в любом случае слал команды как RAW.
Параметр "38" крутил. Брал "крайние" значения (36 и 40) - измененй никаких :(
Протокол "распознать" скетчу не удается - обзывается именно Unknown (для кондея) и скетч для него посылает именно как RAW.
При этом скетч точно работает - захватывает команды от A/V-ресивера (ресивер Yamaha, протокол NEC) и управляет им, так же работает и вариант Unknown (RAW) - команды для медиаплеера Dune замечательно принимаются и управляют плеером.
Команды захватывались как "тестовым" ИК-приемником, так и ИК-приемником из кондея (никакой разницы - все другие устройства замечательно реагируют на захваченные команды.).
Но еще раз, это все имеет смысл только если вы подключили датчик к ардуине и видите, что "ОТ АРДУИНЫ" он не принимает правильно тики. "Не видит их" или "ловит мусор". Когда точно известно что проблема в связке "IR-диод ардуины <-> приемник кондишина".
Проблема все-таки в чем-то другом. "Тики" от пульта кондея мы получаем, но то-ли не все, то-ли неверно. И это ТОЛЬКО для команд кондея (с остальным оборудованием все "пучком" - все работает).
Куда все-таки копать-то?
P.S. вариант с двумя дуинами попробую, но вот что-то мне подсказывает, что мы примем тот же сигнал, что дуина "захватила" (захват, похоже, происходит неверно и именно для команд кондея).
>Брал "крайние" значения (36 и 40) - измененй никаких
А как вы это узнали? В чем вы ожидали изменения?
>Команды захватывались как "тестовым" ИК-приемником, так и ИК-приемником из кондея
Так а кто шлет-то команды? Вариант "ардуина шлет", а мы СМОТРИМ что именно ловит пульт кондея был? Все ваши примеры были когда вы смотрели что ловит датчик кодея когда шлют пульты.
Третий раз: Есть возможность сделать АРДУИНА шлет -> датчик от кондея -> АРУДИНА записывает?
а не "ардуина->обучаемый пульт->датчик от кодея ->ардуина", как вы делали.
По крайней мерез из ваших слов я понял, что вы ниразу не проверили как же датчик кондея видит ардуину.
>"Тики" от пульта кондея мы получаем, но то-ли не все, то-ли неверно
А проверить "оригинальный пульт" -> записать в арудину -> обучаемый пульт -> настоящий кондей.
Если эта связка "проходит" - значит ардуина все видит нормально.
абсолютно с такой же проблемой (тот же кондер) вожусь уже третий день, автор отпиши что таки получилось ли что-нить сделать?
пробывал ардуино_1 посылать эти сигналы, а ардуино_2 их принимать - все шлется/принимается отлично, видимо либо ардуино не считывает весь пакет от пульта, обрезая часть, либо .......
ну не верю я, что приемник у кондера так уж критично относится к длиннам сигналов, или что там частота какая-то мега-редкая используется...
на днях попробую осциллографом захватить оба сигнала (от пульта и от ардуины) и сравнить - может что проясниться....
У меня пока ничего не получилось (большая загрузка, а потом вообще уехал), думаю, на неделе смогу продолжить исследования.
Осциллограф что-нибудь показал интересное?
я записал сигнал от пульта звуковухой
немного не та картина, что показывает ардуина
согласно звуковухе сигнал повторяется два раза через 4,500 мс
вот wav`ка - еще не ковырял ее
сейчас курю вот это вот там сказано как принять сигнал на звуковуху или КОМ порт
ура, товарищи! заработало!
полный сигнал состоит из 100 пиков/падений и повторяется два раза
вот такой массив я передал функции irsend.sendRaw(ppp,200,38);
это код кнопки включения кондера на максимум
Убедился, что 100 - именно "длинна" всей команды ПДУ кондея (убедился просто - стал обучать ардуино разным пультам и на одном из них ардуина сказала, что длинна команды 136).
а вот почему-то длина сигнала 200, со 100 не работает....
А скетчик уже есть рабочий, который позволяет захватить команду с ПДУ кондея и по нажатию кнопки ее воспроизвести и чтобы сработало?
А скетчик уже есть рабочий, который позволяет захватить команду с ПДУ кондея и по нажатию кнопки ее воспроизвести и чтобы сработало?
ну стандартным скетчом IRrecord захватить команду в 100 байт, и затем два раза продублировать ее, только так...
хз уж почему ардуино никаким скетчом не хочет все 200 байт принимать, мы ведь размер буфера увеличиваем define`ом до 250
догадка...
если там именно повторение (полное), может, стандартный скетч его как раз и отлавливает? И обрабатывает как "повторение", не догадываясь, что в нашем случае, две длинные команды друг за другом - норма?
ну это в любом случае нужно курить сырцы - только там все ответы
вот в irrecv.decode(&results) происходит интерпретация результатов, вот там собака и порылась имхо
вечером прокурю эту функцию
Помогите решить траблу.
есть IR сернсор, есть библиотека IRremote.h
Все работает как часы.
Но стоит в программе упомянуть tone(), как получаем
core.a(Tone.cpp.o): In function `__vector_7':
D:\arduino-1.0.1\hardware\arduino\cores\arduino/Tone.cpp:523: multiple definition of `__vector_7'
IRremote\IRremote.cpp.o:D:\arduino-1.0.1\libraries\IRremote/IRremote.cpp:311: first defined here
На лицо конфликт с таймерами.
Пробовал менять - один черт конфликт. Что делать?
Ругань на эту функцию
ISR(TIMER2_COMPA_vect) в tone.cpp
IRRemote может работать только на прерывании 2. Tone по умолчанию тоже использует таймер 2, но это можно изменить в файле hardware\arduino\cores\arduino\Tone.cpp
Там в начале есть дефайны, допустимые значения заремарены. Можно переключить на таймер 1.
Оно потом ни на чем не скажется? А то что-нить еще перестанет работать...
Может подскажите на какой именно?
Просмотрел файл - не нашел заремареных таймеров. Они все расставлены в зависимости от используемого железа.
Пробовал ручками поменять - не работает. Подскажите на какой конкретно сажать? Их там первых как грязи
Разобрался. Там помимо назначения таймера, надо было еще и процедуру его скопировать.
Не понравился мне звук на первом и нулевом таймере. Хриплый какой-то.
Альтернативы родному "tone" есть?
Или еще вариант какой-нить с ИК. На стороннем чипе может быть, с передачей по i2w или как он там называется...
Альтернатива... заюзать ШИМ, но частоту не всякую выставишь... Заюзать таймер напрямую... тут глубоко в программирование можно уйти. Поискать другую либу для IR или попробовать пересадить ее на таймер 1.
Хотя для получения хорошего звука нужен конечно внешний синтезатор. Сразу припоминается музыкальный сопроцессор в Сенклере AY-8912
Вот, наткнулся на кучу синтезаторов от Ямахи
Вижу аналогию. Копаюсь с неизвестным ик датчиком и пультом от Sharp. Пульт посылает 3 ! Кода. Похоже с кондеем тоже самое, шлет два кода. Увеличением длины буфера это не лечится. Когда сделаю с Шарпом, могу поделиться информацией. Хотя, судя по датам, проблема уже решена.
kisoft, если разберетесь - поделитесь результатом. Я пока так и не поборол (переключился на другие задачи).
Мне бы не только получение, но и воспроизведение команды ;) все не выкидывайте, если не затруднит
Нашел небольшое и очень краткое описание двух кондиционеров Daikin & Samsung. Во всяком случае понятно, что пульт шлет всю информацию при нажатии любой кнопки:
http://led-displays.ru/ir/daikin_irremote.html
Какую именно - это придется выяснять методом тыка, поскольку протоколов там нет.
Проанализировав ваш код из сообщения #12, можно увидеть, что это RCA http://www.sbprojects.com/knowledge/ir/rca.php.
Однако он не совсем RCA по данным, здесь нет пересылки инвертированных данных.
Например, коды из #12 сообщения декодируются в последовательность:
Здесь первые 4 цифры - адрес, остальные 8 цифр - команда (в скобках - в HEX). Хотя, совершенно очевидно, что это совсем не RCA данные. Но нам это не очень важно.
Судя по описанию на RCA, несущая частота 56 КГц (в других протоколах обычно 38КГц и около того).
"1". Каждый MARK выдается как 28 циклов (для несущей частоты 56 КГц), что по длительности около 500 мкс, далее идет SPACE длительностью около 2 мс.
"0". Каждый MARK выдается как 28 циклов (для несущей частоты 56 КГц), что по длительности около 500 мкс, далее идет SPACE длительностью около 1 мс.
В отличии от протокола RCA, здесь одна посылка занимает 48 бит. Сколько посылок делает пульт за один раз - непонятно, нужно проверять. У меня пульта для кондера нет под рукой, потому проверить сложно.
С прогой пока не закончил, есть желание сделать максимально точное измерение, используя таймеры/счетчики. Мысль тупая, заряжаем таймер/счетчик (высокоскоростной), затем, когда данные начнутся (на первом MARK) фиксируем данные, пока не встретится пауза длительностью больше секунды (тут можно поиграть). Когда запись закончится, выплюнуть все эти данные в Serial. Тогда будет видно, сколько посылок при нажатии одной кнопки выдает пульт.
Мысли следующие:
- необходимо сканить изменения до тех пор, пока не будет большой паузы (больше секунды)
- при нажатии кнопки возможно будет несколько посылок (это можно определить по MARK в 4 мс + SPACE 4 мс)
- когда это получится, нужно сграбить все возможные варианты и проанализировать, возможно там простой протокол, либо не заморачиваться и записать коды в бинарном виде (в виде "0" и "1").
- при выводе использовать PWM на частоте 56 КГц для MARK (не знаю, возможно ли это).
ПС Кто не знает:
MARK - активный сигнал (высокий уровень), SPACE - неактивный сигнал (низкий уровень), однако поскольку в IR приемнике обычно инверсия, то на цифровом пине MARK - низкий уровень, а SPACE - высокий. MARK - модулируется несущей частотой, здесь - 56 КГц.
Помогите, пожалуйста, разобраться с посылкой данных через sendRaw. Мне надо тоже послать сигнал кондишке, но проблема не только в этом. Все тестировал на пульте от телика, он отлично определяется как NEC и через sendNEC сигналы уходят четко и без проблем. А вот, если считать данные через пример DUMP и потом послать их уже как Raw, то реации вообще никакой. Может, кто сталкивался с этим и как-то решил проблему?
Для кондиционера попробуйте третий параметр, 56 (56 КГц), возможно поможет. Но 0 элемент массива не используйте.
Поскольку в соседней теме nehidd проблему решил, можно пойти по его пути, см. http://arduino.ru/forum/apparatnye-voprosy/nuzhna-pomoshch-po-radiomodulyu-i-ik-peredatchiku#comment-19266
Вчера, наконец то заработал пример из "Arduino Cookbook" - классная книга, всем рекомендую. На английском, но примеров море на всякие разные темы/датчики/драйверы и т.п. А потому я получил более точные значения MARK & SPACE путем захвата таймером, т.е. расчет длительности на аппаратном уровне. Т.о. можно сделать скетч для "исследовательских" целей, т.е. нажимая на разные кнопки пульта кондиционера, получить разницу в кодах/битах. Думаю в выходные будет готово, конечно же результатами поделюсь, может быть проще сделать библиотеку. Попробую взять с работы пульт для кондея и на нем всё это отработать.
С выводом кодов на IR светодиод пока сложнее, хотя я IR светодиод нашел (выпаял из ненужного китайского пультика, правда не знаю его данные, но это не важно, они примерно все одинаковые по параметрам), посмотрим, если получится, то и это сделаю, в общем как попрёт :)
kisoft, добили свой скетч/библиотеку? поделитесь?
К сожалению нет, видимо дело затянется. У меня сейчас мой Леонардо перестал коннектиться к компу, я пока что пинбоард изучаю, ассемблер смотрю на атмеге16. Стм32 очень понравился, это как раз то, что мне нужно. Задачу не забросил, но пока другие дела.
Идея такая, захват таймером, в прерывании расчет разницы времени между прерываниями, без сброса таймера, это важно. А с распознавалкой протокола пока не определился. Попробовал свой вариант - не понравился. В общем это пока варится в голове.
Помогите пожалуйста и мне
Использую так же http://www.righto.com/2009/09/arduino-universal-remote-record-and.html
Задача включить и выключить музыкальный центр.
Без особых сложностей получил код включения, выключения:
Далее загрузил вот такой код:
#include <IRremote.h>
IRsend irsend;
void setup(){
Serial.begin(9600);
}
void loop() {
if (Serial.read() != -1) {
for (int i = 0; i < 3; i++) {
irsend.sendRC5(0xC7F, 12);
delay(40);
}
}
}
Так же пробовал такой вариант:
#include <IRremote.h>
IRsend irsend;
void setup(){
}
void loop() {
irsend.sendRC5(0xC7F, 12);
delay(40);
}
К сожалению все безуспешно. Подключено все так:
Что я делаю не так? Arduino от музыкального центра в 30 сантиметрах.
Для начала прочитайте прикрепленную ветку
Вставка программного кода в тему/комментарий
Потом обратите внимание на сообщение #42, попробуйте с ним поигратся.
Убедитесь что у вас светик рабочий (некоторые мобилки, особенно старые, при фотографирировании вполне нормально видят инфакрасные диоды).
Если есть другая дуина - попробуйте на ней, записать что посылает первая и посмотреть "в чем разница". Если нет - можно даже на этой же самой дуине попробовать соденить пины светика и приемника. Типа "послать самому себе".
Да, я умею вставлять код, но к сожалению в Opera которой я пользуюсь ваш WYSIWYG себя безобразно ведет. Очень сложно редактировать текст я уже не говорю о вставление кода.
По поводу #42 сообщения, не совсем понял о чем речь.
Вы предлогаете в моем коде 0xC7F заменить на 56xC7F, или 12 заменить на 56?
я так же нашел и разобрал еще 1 пульт, пробовал подключить тот светик, безуспешно. Может я просто не так что-то подсоеденяю?
Вы получили код, значит у Вас есть чем получить, теперь попробуйте подать код "на себя". Как уже посоветовали.
Можно всё на одном Arduino, поскольку прием по прерываниям. В качестве примера в библиотеке IRRemote есть пример IRrecord, в нем есть как приём, так и передача кода.
Сейчас посмотрел, не знал. Если для приемника разрешить индикацию, светодиод на PIN13 будет моргать при приеме кода. Разрешить можно так: recv.blink13(TRUE); Хотя Вам это неинтересно, у Вас прием работает.
Удачи!
UPD: На счет подключения, полярность светика и сопротивление (сколько, кстати), вроде тут наковырять сложно. Тем более схема есть в приведенной Вами ссылке.
UPD2: если есть осцилл, я бы глянул сигнал на выходе. Или логический анализатор. Дабы понять, есть ли что то вообще на выходе.
Да, я умею вставлять код, но к сожалению в Opera которой я пользуюсь ваш WYSIWYG себя безобразно ведет. Очень сложно редактировать текст я уже не говорю о вставление кода.
Дабы не разводить флейм тут - ответил в отвлеченных темах ответил
Опера глючит
По поводу #42 сообщения, не совсем понял о чем речь.
Вы предлогаете в моем коде 0xC7F заменить на 56xC7F, или 12 заменить на 56?
нет. можно попытатся послыть через sendRaw. У нее есть третий параметр, "на какой частоте слать". Вот там можно поподбирать 36,38,40б42,54,56 и т.п. Если так заработает, то потом можно полезть в библиотеку и подхачить дефолтное значение для sendDEC (по дефолту там 36 используется).
Но это все "хардкор", в него имеет смысл лезть только убедившись что светик передает.
я так же нашел и разобрал еще 1 пульт, пробовал подключить тот светик, безуспешно. Может я просто не так что-то подсоеденяю?
Может. Но телепаты в отпуске.
Вообщем проверяйте светик. Через мобилку, через соединение пинов, через "направить светик на этот же приемник дуины" и посмотреть что приходит.
Можете еще без декодирования поигратся. Попробуйте sendRaw