Андроид-Блютуз-Ардуино-Ик передатчик-ТВ(и прочая техника)

singer15
Offline
Зарегистрирован: 25.03.2015

Доброго времени уважаемые форумчане!

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

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

 

Идея такова: андроид приложение посылает на блютуз модуль HC06 код. Код попадает на Ардуино и обрабатывается. В ардуино заранее считаны и внесены коды кнопок пульта от лед ТВ САМСУНГ. Сигнал посылается на ИК передатчик и дальше на ТВ соответственно.

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

1. Проблема считывания

Первой моей проблемой было считывание кода с пульта. Подключил я к Ардуино китайский ИК приемник SM0038 (GND, VCC, OUT). Первый раз подключал напрямую, заливал стандартый скетч из библиотеки IRremote для считывания сигнала. Открывал монитор порта и наблюдал "бешеный" приход данных, я даже пульт в руки еще не брал, а в мониторе порта уже было куча значений, и они продолжали приходить... Далее я нашел даташит на этот ИК приемник и подключил его по правилам с использованием конденсатора и резистора. Проблема не исчезла. На каком-то форуме читал, что проблема решается заменой китайского ИК приемника на нормальный, ну или хотя бы на другой китайский, но рабочий.

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

 

2. Проблема ИК передачи

Фууххх... коды есть, теперь дело за малым - отправить их в ИК передачу. Но не тут то было. Собираю скетч, который получает сигнал из блютуз модуля и передает его по средствам библиотеки IRremote на ИК диод. Заранее оговорюсь, что в момент написания вопроса у меня нет скетча, котрый я загружал и я не могу Вам его показать (по крайней мере сейчас, могу при необходимости загрузить его когда буду за домашним компом).

 

В скетче вроде ничего сложного нет. Приходит значение, присваивается к переменной и отправляет соответствующий код на ИК диод. ИК диод работает, проверяю каждый раз камерой на телефоне. НО телевизор не реагирует! Чего я только не пробовал!

- Использовал другой скетч, отправлял команды в разных кодировках - ТВ молчит.

- При считывании заметил, что перед моим кодом и после (есть определенная закономерность) проскакивает 0xFFFFFFF, использовал и это значение в добавок к коду, и в начале и в конце. И в подряд несколько раз.

ИНФО. обращал внимание на то, что при кратковременном нажатии на кнопку пульта (допустм, переключение канала вперед), канал не переключался, но лампочка на ТВ моргала. Т.е. какой-то сигнал доходил на ТВ, но не достаточный для принятия решения переключать канал.

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

- Пытался так же дублировать команду.

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

Конечно, на этом этапе я задумался о том, как хорошо было бы получить чистый код моей кнопки, абы быть в нем уверенным. Но для этого нужен новый ИК приемник, который мне на сегодняшний день негде взять. Просто за ним нужно далеко ехать. Если вы настоите, что именно в этом может быть проблема (в правильности кода), то прийдется таки ехать...

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

Еше одной надеждой для меня было добавление в скетч в SETUP строки irsend.enableIROut(38);, но вчера попробовал и снова остался без результата...

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

 

 

 

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

или с помощью IRrecord.ino записать сигнал и его генерировать. хз это все там реализуется хз. но нужно разобраться

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

irsend.IRsendSAMSUNG(0xa90, 12);

 

singer15
Offline
Зарегистрирован: 25.03.2015

Обьясните, пожалуйста, что такое "12);", это разрядность?  и почему именно 12? Я всегда писал 32.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

это количество бит

#ifdef SAMSUNG
void IRsend::sendSAMSUNG(unsigned long data, int nbits)
{
  enableIROut(38);
  mark(SAMSUNG_HDR_MARK);
  space(SAMSUNG_HDR_SPACE);
  for (int i = 0; i < nbits; i++) {
    if (data & TOPBIT) {
      mark(SAMSUNG_BIT_MARK);
      space(SAMSUNG_ONE_SPACE);
    } 
    else {
      mark(SAMSUNG_BIT_MARK);
      space(SAMSUNG_ZERO_SPACE);
    }
    data <<= 1;
  }
  mark(SAMSUNG_BIT_MARK);
  space(0);
}
#endif

какое должно быть я хз

CivicEG
Offline
Зарегистрирован: 12.09.2014

Мой тебе совет: Найди нормальный ИК приемник, а потом на него направь свой ИК передатчик и сиди добивайся пока не будет отличий от пульта и ардуины.

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

singer15
Offline
Зарегистрирован: 25.03.2015

Проблема почти решена. Опишу стратегию решения, вдруг у кого-то появится такая же проблема.

Начну с того, что я сделал большую ошибку, когда для тестирования взял пульт от современного телевизора Самсунг, или правильнее сказать - ГНУСМАС))))

Пульт действительно не распознается. Т.е. его команды нужно отправлять на телефизор так как пришли. Я купил новый ИК приемник, как и ожидал, он прекрассно заработал. Команды считывались только при нажатии на кнопки. Один раз только поплыли помехи, но при повторном включении никаких помех больше не было. С помощью стандартного скетча из библиотеки IRremote я смог увидеть коды своих кнопок. Кстати, они были такими же, как я опредлил их опытном путем ранее. Но нужно использовать не команду в виде 0xFFFFFFF, ее телевизор не понимает, а команду состоящую из массива данных. При получения с пульта она имеет пробелы и знаки "-". Благодаря знающим людям в соседних постах я определил, что первые цыфры нужно удалять. Используем все остальное. Копируем в блокнот, функцией найти-заменить меняем все пробелы на запятые, а знаки "-" вовсе удаляем. Снова копируем все данные и уже их отправляем на ТВ. О чудо! Телевизор начал откликатся! Моей радости не было предела.

Следующим шагом было считывание всех кнопок и внесение их в скетч. И тут снова проблема.

Дело в том, что команды на включение каналов 1-9 работаеют отлично, а остальные команды типа "меню", "ок" и другие не работают. У меня есть соображения по этому поводу, не было времени протестировать. Как только испробую - отпишусь. Если у кого-то уже есть соображения по этому поводу - делитесь, буду благодарен!