повторитель ик сигнала на Ардуинке
- Войдите на сайт для отправки комментариев
Ср, 12/12/2018 - 20:18
Доброго времени суток!
Возникла задача создать повторитель ик сигнала на Ардуинке.
Оригинал схемы тут: http://radiostorage.net/uploads/Image/schemes/radio/rk16-05-8.png
Собрал похожую схему на Ардуине, но без входного транзистора вот код:
01 |
const int IR_Pin = 3; |
02 |
03 |
int IR_State = 0; |
04 |
const int ledPin = 13; |
05 |
void setup () { |
06 |
pinMode(IR_Pin, INPUT); |
07 |
} |
08 |
void loop () { |
09 |
IR_State = digitalRead(IR_Pin); |
10 |
if (IR_State == LOW) |
11 |
{ |
12 |
tone(2, 38000); |
13 |
digitalWrite(ledPin, HIGH); |
14 |
} |
15 |
else |
16 |
{ |
17 |
noTone(2); |
18 |
digitalWrite(ledPin, LOW); |
19 |
} |
20 |
} |
Если замкнуть выход ИК приемника на землю, генератор на Ардуине запускается, диод моргает, частота 38 кГц. Если засветить пультом в ИК приемник, диод тоже моргает, но ТВ код не понимает. Причем вечером все работало, а у тром не хочет... Где ошибка и куда копать?
Может и так... Код то правильный?
а если убрать строки 13 и 18?
Пробовал! Это просто как сигнальный диод... Было так:
В выходные продолжу...
Rom327, чем аппаратный таймер не устраивает, зачем там вообще ардуина? У меня первая мысль была по прочтению - "сделать на рассыпухе и 555", как то: тсоп, инвертор, таймер управляющийся по сбросу, усилитель мощности. Открываю схему и о чюдо, что я вижу: оно там так и есть на схеме, прямо один в один.
Афтар, не городите огород, сделайте как на схеме.
Куда копать.
1. Вы точно уверены что частота 36 кГц? Не 38? Не 40? Не 42? А? А? А?
2. Вы ни слова не сказали о транзисторах. ИК диоды - прожорливая вещь, если ток превысил 40 мА - меняйте вывод, тот к которому оно соединено без резистора - вышел из строя. Поэтому вечером работало а утром нет.
3.
Откуда инфа? Опять же, ни слова про частотомер или осциллограф в оригинальном посте.
Транзистор кт3102 - любой транзистор PNP малой мощности, можно заменить на транзистор S8550. Это крайне дешёвый китайский (скопипизженный американский) транзистор с хорошими показателями, либо просто скажите в радиотоварах "любой пээнпэ маломощный". Транзистор кт817 - составной транзистор средней мощности, можно заменить на S8050 (комплементарная пара 8550, но у него достаточный ток коллектора - 500 мА). Резистор R7 лучше увеличить до 39 Ом и потом уменьшать постепенно. Русские светодиоды жрут больше, поэтому если вы купили светодиод - скорее всего он новый и не русский, так что на нём меньше падение и он жрёт больший ток. Впрочем, транзистору будет на это насрать.
Другие номиналы частотозадающей цепи (на 38 кГц) - R4=10k, R5=1k, C2=1n8=1800pF.
Upd. Резистор R7 одноваттный (не меньше, иначе может греться).
КТ3102-NPN, осмелюсь поправить .Да и 817 не составной и тоже NPN.
В схеме косяк с названием. 3107-PNP.
Rom327, чем аппаратный таймер не устраивает, зачем там вообще ардуина? У меня первая мысль была по прочтению - "сделать на рассыпухе и 555", как то: тсоп, инвертор, таймер управляющийся по сбросу, усилитель мощности. Открываю схему и о чюдо, что я вижу: оно там так и есть на схеме, прямо один в один.
Афтар, не городите огород, сделайте как на схеме.
Куда копать.
1. Вы точно уверены что частота 36 кГц? Не 38? Не 40? Не 42? А? А? А?
2. Вы ни слова не сказали о транзисторах. ИК диоды - прожорливая вещь, если ток превысил 40 мА - меняйте вывод, тот к которому оно соединено без резистора - вышел из строя. Поэтому вечером работало а утром нет.
3.
Откуда инфа? Опять же, ни слова про частотомер или осциллограф в оригинальном посте.
Транзистор кт3102 - любой транзистор PNP малой мощности, можно заменить на транзистор S8550. Это крайне дешёвый китайский (скопипизженный американский) транзистор с хорошими показателями, либо просто скажите в радиотоварах "любой пээнпэ маломощный". Транзистор кт817 - составной транзистор средней мощности, можно заменить на S8050 (комплементарная пара 8550, но у него достаточный ток коллектора - 500 мА). Резистор R7 лучше увеличить до 39 Ом и потом уменьшать постепенно. Русские светодиоды жрут больше, поэтому если вы купили светодиод - скорее всего он новый и не русский, так что на нём меньше падение и он жрёт больший ток. Впрочем, транзистору будет на это насрать.
Другие номиналы частотозадающей цепи (на 38 кГц) - R4=10k, R5=1k, C2=1n8=1800pF.
Upd. Резистор R7 одноваттный (не меньше, иначе может греться).
Отвечаю по пунктам
1. На Ардуине будет собран еще и дешефратор ик сигнала, так что повторитель на ней же логичен.
2. 5551
3. Частоту пульта измерил осциллографом 38К.
3. Частоту пульта измерил осциллографом 38К.
2. Возьми какую-нибудь IR-библиотеку и посмотри, что ардуина принимает.
Там же и все дешифровки, и передача - в примерах всё написано.
3. Частоту пульта измерил осциллографом 38К.
2. Возьми какую-нибудь IR-библиотеку и посмотри, что ардуина принимает.
Там же и все дешифровки, и передача - в примерах всё написано.
36К это в схеме. У меня пульт работает на 38К, приемник тоже на 38К. Ардуинка сигналы декодирует и пишет код в мониторе. Тут все в порядке. Затык именно с генерацией-передачей... В примерах передача с привязкой к производителю/кодировке, а мне надо просто принять - передать, без перекодировки...
Вы пытаетесь тупо транслировать причем в цикле, что не гарантирует реального времени
если так делать то по прерываниям
но я бы сделал иначе. Взял библиотеку, декодировал бы ей сигнал, а потом заново отправил
Вы пытаетесь тупо транслировать причем в цикле, что не гарантирует реального времени
если так делать то по прерываниям
но я бы сделал иначе. Взял библиотеку, декодировал бы ей сигнал, а потом заново отправил
Если я бы это умел, я бы сюда не обратился...
По поводу прерываний почитайте про функцию attachinterrupt
насчет второго способа - библиотека IRRemote, там есть функция получить raw код и отправить raw код
3. Частоту пульта измерил осциллографом 38К.
2. Возьми какую-нибудь IR-библиотеку и посмотри, что ардуина принимает.
Там же и все дешифровки, и передача - в примерах всё написано.
36К это в схеме. У меня пульт работает на 38К, приемник тоже на 38К. Ардуинка сигналы декодирует и пишет код в мониторе. Тут все в порядке. Затык именно с генерацией-передачей...
Это как?
Это как?
что "как"? - найдите в библиотеке функцию отправки и отправьте...
Rom327
1. измерьте осциллом длительность импульса с выхода ТСОПа
2. нарисуйте схему свое выходного каскада на ик диод.
3. ТСОПы очень чувствительные приемники и могут ловить 2х, 3х кратные переотражения от стен и любых предметов,
т.е. чтобы проверять ретранслятор нужно возможность таких переотражений исключить.
Например, отключить выходной каскад и взяв синхронизацию осцила с выхода ТСОПа смотреть, что формируется на выходном пине, который должен повторять входной сигнал.
Спасибо! Схема выходного каскада в первом сообщении. Завтра попробую запустить... Сниму видео...
попробуйте запустить (для уно или нано)
при спаде импульса на входе на выходе должна формироваться пачка импульсов длительностью 1 мс
попробуйте запустить (для уно или нано)
при спаде импульса на входе на выходе должна формироваться пачка импульсов длительностью 1 мс
Т.к. проверял покупки совсем недавно и всё необходимое на столе валялось, собрал схему* (!) и НАПИСАЛ ПРОГРАММУ (sic! Звучит-то как!).
Rom327, так выглядит работающее решение твоей суперпроблемы:
==========
* Датчик VS1838B + UNO + светодиод IR513B-40 (подключен к пину через резистор 150R); телевизор MTV-2429LT2
Всем привет!
Не знаю как, но заработало! С обычным красным диодом на выходе.
Пришлось немного"подвигать" частоту, чтобы получилось 38кГц(по осциллографу).
Спасибо всем откликнувшимся!
Вот код:
Теперь трабла №2 вылезла: повторитель ик сигнала предназначается для тв приставки MAG-245. Программа включение реле предназначена для включения акустики одновременно с приставкой. Поэтому декодируется кнопка Power приставки. И если у всей нормальной техники при длительном нажатии передается сначала одиночный код кнопки (0x1CE338C7), а затем код повторения предыдущей команды (0xFFFFFFFF), то у приставки все время передается код кнопки. Причем очень хитро: при первом нажатии на кнопку Power передается код 0x38C (если держать кнопку 0x38C...0x38C...0x38C...), при отпускании и нажатии её же передается уже другой код: 0xB8C (если держать кнопку 0xB8C...0xB8C...0xB8C...). Таким образом, приходится вводить задержку, чтобы успеть убрать палец с кнопки. Можно ли как то изменить код, чтобы на было реакции на повторное нажатие кнопки?
Код включения реле:
Ну и последний вопрос: как объединить эти два кода в один? Попробовал влоб - не получилось: программа ругается:
Arduino: 1.8.7 (Windows 7), Плата:"Arduino/Genuino Uno"
Изменены опции сборки, пересобираем все
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_7'
libraries\Arduino-IRremote-master\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Вот видео, как и обещал: https://youtu.be/B3yQu3Q-1VE
Для объединения надо в библиотеках ковырятся.
А ты можешь подробнее объяснить чнго пытаешься в итоге получить (без привязки к программированию?
Просто нужно чтобы по пульту от приставки включалось и реле для питания аккустики? Тогда зачем тебе повторитель?
Для объединения надо в библиотеках ковырятся.
А ты можешь подробнее объяснить чнго пытаешься в итоге получить (без привязки к программированию?
Просто нужно чтобы по пульту от приставки включалось и реле для питания аккустики? Тогда зачем тебе повторитель?
Весь план такой: строю телевизор на кухню из монитора, тв приставки, активной акустики. Планирую тв приставку, ардуинку, блок питания и реле прячу в коробке за монитором. Акустика вешается по бокам на монитор. На морду монитора вывожу ик приемник и сигнальный диод. Провод от ик приемника идет в Ардуинку, из нее через ик диод (повторитель) сигнал подается в приставку. Приставка подключается к монитору и активной акустике. Так как при выключении приставки монитор выключается (засыпает) сам, его можно не отключать. Остается отключение акустики. Планирую включать/отключать акустику тем же кодом, что и приставку. Для этого и нужен код для реле. Если вдруг приставка и акустика начнут включаться/отключаться в противофазу, предусмотрена доп. кнопка на пульте, на которую не реагирует приставка. Как то так... Пока собрал на 2-х Ардуинках, пуляю из одной вдругую ик сигнал, работает!...
Самое простое – вскрыть приставку и подключить реле или релейный модуль на выход его БП. Только надо напряжение померять. Скорее всего там 3.3В
Ну или если в потроха сильно лезть не охота – взять сигнал включения приставки подключившись к светодиоду на панели приставки. А если не вскрывать – то взять фотодатчик и прилепить его на светодиод. А сигнал завести в ардуинку.
Самое простое – вскрыть приставку и подключить реле или релейный модуль на выход его БП. Только надо напряжение померять. Скорее всего там 3.3В
Ну или если в потроха сильно лезть не охота – взять сигнал включения приставки подключившись к светодиоду на панели приставки. А если не вскрывать – то взять фотодатчик и прилепить его на светодиод. А сигнал завести в ардуинку.
Обязательное условие: ни приставку ни монитор не вскрывать! Если подключать фотодиод к светодиоду придется ловить уровень освещенности. Днем он один, вечером другой... И чем этот способ лучше декодирования кода пульта? Можно еще ток потребления монитора измерять...
Если подключать фотодиод к светодиоду придется ловить уровень освещенности. Днем он один, вечером другой... И чем этот способ лучше декодирования кода пульта? Можно еще ток потребления монитора измерять...
Так прикрепить герметично, что бы посторонний свет не проникал.
А если хочется все на ИК сделать, то придется разбираться с конфликтующими библиотеками. Это вполне решаемо, но требует более глубокого понимания ардуинки. В целях обучения будет очень полезно.
Самое простое – вскрыть приставку ....
нет, самое простое - просто не выключать акустику. Никогда.
Чего вы хотите добиться - экономии 2х рублей в месяц на электричестве?
нет, самое простое - просто не выключать акустику. Никогда.
Чего вы хотите добиться - экономии 2х рублей в месяц на электричестве?
[/quote]
Ну, мало ли.. Вдруг вид бесполезно горящих лампочек на колонках дико раздражает тещу?
Ну, мало ли.. Вдруг вид бесполезно горящих лампочек на колонках дико раздражает тещу?
заклеить "глазки" синий изолентой. Если что - я имел в виду на колонках :)
Всем конечно спасибо за советы и предложения, но задачу я описал и ее надо реализовать именно так как она описана. Если есть конкретные советы по реализации кода, готов выслушать! А если просто охота потрепаться, создайте свою тему в курилке...
Всем конечно спасибо за советы и предложения, но задачу я описал и ее надо реализовать именно так как она описана. Если есть конкретные советы по реализации кода, готов выслушать! А если просто охота потрепаться, создайте свою тему в курилке...
А что тут обсуждать-то? Только трепаться и остается...
Вам в сообщении №20 выложили готовый код, берите и пользуйтесь
Ну и последний вопрос: как объединить эти два кода в один?
Для объединения надо в библиотеках ковырятся.
А ты можешь подробнее объяснить чнго пытаешься в итоге получить (без привязки к программированию?
Просто нужно чтобы по пульту от приставки включалось и реле для питания аккустики? Тогда зачем тебе повторитель?
Весь план такой: строю телевизор на кухню из монитора, тв приставки, активной акустики. Планирую тв приставку, ардуинку, блок питания и реле прячу в коробке за монитором. Акустика вешается по бокам на монитор. На морду монитора вывожу ик приемник и сигнальный диод. Провод от ик приемника идет в Ардуинку, из нее через ик диод (повторитель) сигнал подается в приставку. Приставка подключается к монитору и активной акустике. Так как при выключении приставки монитор выключается (засыпает) сам, его можно не отключать. Остается отключение акустики. Планирую включать/отключать акустику тем же кодом, что и приставку. Для этого и нужен код для реле. Если вдруг приставка и акустика начнут включаться/отключаться в противофазу, предусмотрена доп. кнопка на пульте, на которую не реагирует приставка. Как то так... Пока собрал на 2-х Ардуинках, пуляю из одной вдругую ик сигнал, работает!...
ардуина с инфр. приемником принимает и декодирует сигнал с приставочного пульта и включает/выключает реле питания акустики - без всяких передатчиков. Что ещё надо?
Можно еще ток потребления монитора измерять...
А что тут обсуждать-то? Только трепаться и остается...
Вам в сообщении №20 выложили готовый код, берите и пользуйтесь
А не работает код! На выходе диод моргает не всегда, и приставка на него не реагирует.
ардуина с инфр. приемником принимает и декодирует сигнал с приставочного пульта и включает/выключает реле питания акустики - без всяких передатчиков. Что ещё надо?
Приставка спрятана за монитор и не находится в прямой видимости пульта. Вы вообще мои сообщения читаете?
А что тут обсуждать-то? Только трепаться и остается...
Вам в сообщении №20 выложили готовый код, берите и пользуйтесь
А не работает код! На выходе диод моргает не всегда, и приставка на него не реагирует.
Причем очень хитро: при первом нажатии на кнопку Power передается код 0x38C (если держать кнопку 0x38C...0x38C...0x38C...), при отпускании и нажатии её же передается уже другой код: 0xB8C (если держать кнопку 0xB8C...0xB8C...0xB8C...). Таким образом, приходится вводить задержку, чтобы успеть убрать палец с кнопки. Можно ли как то изменить код, чтобы на было реакции на повторное нажатие кнопки?
т.е. при выключении кнопку Power нужно просто нажать дважды,
наверно и сама приставка так это различает
Причем очень хитро: при первом нажатии на кнопку Power передается код 0x38C (если держать кнопку 0x38C...0x38C...0x38C...), при отпускании и нажатии её же передается уже другой код: 0xB8C (если держать кнопку 0xB8C...0xB8C...0xB8C...). Таким образом, приходится вводить задержку, чтобы успеть убрать палец с кнопки. Можно ли как то изменить код, чтобы на было реакции на повторное нажатие кнопки?
т.е. при выключении кнопку Power нужно просто нажать дважды,
наверно и сама приставка так это различает
Это вряд ли.
Скорее всего там протокол RC-5, команда одна, а отличие в бите Toggle - одиночное нажатие или удержание.
А приставка при получении любой из этих команд (одиночного пакета или с повторами, безразлично) меняет свое состояние.
Причем очень хитро: при первом нажатии на кнопку Power передается код 0x38C (если держать кнопку 0x38C...0x38C...0x38C...), при отпускании и нажатии её же передается уже другой код: 0xB8C (если держать кнопку 0xB8C...0xB8C...0xB8C...). Таким образом, приходится вводить задержку, чтобы успеть убрать палец с кнопки. Можно ли как то изменить код, чтобы на было реакции на повторное нажатие кнопки?
т.е. при выключении кнопку Power нужно просто нажать дважды,
наверно и сама приставка так это различает
Очередной "умник"! Если дважды нажать кнопку, то и приставка среагирует дважды: выключится и снова включится...
не телепат уж точно, так что трахайся на здоровье
А чего тут трахаться? Задача была поставлена и задача была решена! Всем спасибо!