Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/264: Рейтинг темы: голосов - 264, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249

Робот с управлением от ИК пульта ДУ.

21.03.2011, 23:09. Показов 49995. Ответов 71
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Недавно в голову пришла мысль сделать робота, управляемого пультом ДУ, с ИК излучателем. Т.е. в общих чертах схема должна, я думаю, выглядеть так:


С пульта задаем направление движения (вперед/назад), затем значение длины пути в сантиметрах, которое будет преобразовываться и передаваться как значение на сколько надо включить движки в мкс. Если будет нажато вправо/влево и какое то число то будет передаваться направление вращения и значение угла поворота вокруг своей оси, также в последствии преобразованное в мкс. И Enter - отослать пакет информации самому роботу. Усилитель ИК-приемника хочу взять отсюда: http://sxim.net/ik/2-5.php На роботе же будут стоять фото-тахометры, которые по сути будут следить за тем, чтобы движки вращались с одинаковой скоростью. У меня по этому поводу возникли следующие вопросы:
1) Как опрашивать фото-тахометры по таймеру или ещё как?
2) Если появится рассогласование скоростей, то по какому закону/принципу мне это исправить?
3) Передавать сигнал, я думаю надо при помощи PastPWM, а вот как принимать? UART, АЦП или ещё как то?
4) Какая частота смены уровня сигнала рекомендуется в таком случае при передаче?
5) Что можно на эту тему почитать? Может кто помнит похожие топики...

Заранее благодарю!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2011, 23:09
Ответы с готовыми решениями:

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

Контроллер управлением оконных жалюзи и дистанционным управлением
МПК AVR в интернете вообще ни какой информации по этой теме нет может кто то реферат писал.или программировал кто то

2 пульта и 2 переключателя
Есть: Одна цифровая линия АТС (два провода), 2 цифровых пульта в двух комнатах. К линии подключены пульты через один переключатель на...

71
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 49
24.03.2011, 15:09
Студворк — интернет-сервис помощи студентам
Да и на счет подключения к звуковухе. Подаешь питание на TSOP, а информационный вывод через конденсатор к звуковухе. Запускаешь ченить типа Soumd Forge и включаешь запись. Тычешь пультом в TSOP, нажимаешь кнопку. Останавливаешь запись и смотришь че там за код.
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
24.03.2011, 16:27
А зачем, извините, звуковухи и прочая фигня? Ведь есть/будет девайс, который будет этот код обрабатывать. Так просто захватить всю посылку и передать в комп (связь то всё равно есть/будет). А там уже килосекунды с микрогерцами рассматривать. Причём захватывать только фронты надо (Это если с TSOP) - любой пульт будет как на ладони.

А теперь немного наблюдений (почти все домашние пульты попробовал):

- Даже один и тот же протокол у разных пультов имеет разброс 20-30% по времени.
- Сам пульт гуляет в пределах 5-10% легко.

А таймер нужно один использовать, который умеет InputCapture. У меня он тикает примерно в районе 1 МГц (в зависимости от тактовой контроллера). Если он переполнился, а нужное количество бит не пришло - посылка кончилась/прервалась/сбилась.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 49
24.03.2011, 17:32
Зачем городить огород с какойто передачей посылки в комп захватывать ее и непойми в чем рассматривать, когда тут раз и готово.
И биты тоже надо как то детектировать, чтобы посчитать нужное количество.
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
24.03.2011, 21:01
посчитанный таймером интервал сейчас длинный
Что вообще значит длинный или короткий интервал? Там же по идей все интервалы по 889us только высокий уровень у 1 в конце, а у 0 в начале.(если смотреть схему выше или на http://rodyokot.ru/articles/16/)
Да и на счет подключения к звуковухе. Подаешь питание на TSOP, а информационный вывод через конденсатор к звуковухе. Запускаешь ченить типа Soumd Forge и включаешь запись. Тычешь пультом в TSOP, нажимаешь кнопку. Останавливаешь запись и смотришь че там за код.
Спасибо! Я в принципе так и собираюсь делать.
А по поводу таймера, как использовать один? Я понимаю только так, как я писал выше: настраиваем таймер на 1333,5us снимаем логический уровень и толкаем в стек, потом не выходя из прерывания по совпадению меняем регистр сравнения так что бы таймер оттикал ещё 444,5us, потом опять всё сначала и так 14 раз. Это чисто моя теория. А как на практике? С AVRкой возможен такой фокус: что в самом прерывании по совпадению уменьшаем значение регистра OCR1A и таймер понимает, что он не дотикал ещё 444,5us и дотикивает их? Мне кажеться, что нет, хотя хотелось бы ошибаться. :) Уважаемые, кто нибудь может накидать блок схемку этого злосчастного алгоритма по приему, а то ведь кто то пишет для PIC-ов, кто то на С и т.д. и разобраться во всех этих чудесах мне как начинающему не легко, а блок схема вроде должна быть понятна всем и вся. Заранее спасибо!
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
24.03.2011, 21:19
Цитата Сообщение от Votk
Цитата:посчитанный таймером интервал сейчас длинный Что вообще значит длинный или короткий интервал? Там же по идей все интервалы по 889us только высокий уровень у 1 в конце, а у 0 в начале
всё верно.просто если идут два одинаковых сигнала(допустим"1" и "1" или "0"и"0")то интервал между ними короткий(примерно 900 мкс) а если разные то длинный.
ща попробую раскурить код с кота с пояснениями.Если получится выложу или в личку скину.
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
24.03.2011, 21:35
всё верно.просто если идут два одинаковых сигнала(допустим"1" и "1" или "0"и"0")то интервал между ними короткий(примерно 900 мкс) а если разные то длинный.
ща попробую раскурить код с кота с пояснениями.Если получится выложу или в личку скину.
Спасибо тебе огромное! Очень сильно помогаешь! От души. А вот мой метод имеет право на жизнь? Я просто то что придумал сам лучше понимаю. :) (да наверное как и все.) Я щас попробовал поменять в самом прерывании значение OCR1A, вроде получилось. Теперь бы додумать как их (1333,5us и 444,5us) чередовать и в принципе задачка решена. (я надеюсь)
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
24.03.2011, 21:48
как писал THT_BEAST

- Даже один и тот же протокол у разных пультов имеет разброс 20-30% по времени.
- Сам пульт гуляет в пределах 5-10% легко.
поэтому я думаю что несовсем верно будет так точно настраивать таймер.Я думаю будет проще мерять временную длинну посылки задав границы +- 5 мкс.
запустить таймер .
настроить прерывания по изменению фронта на ноге внешнего прерывания.
в прерывании проверить значение таймера,
обнулить таймер
снова запустить
проверить значение на ноге прерывания,занести значение в стек.
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
24.03.2011, 22:19
[QUOTE="MyxoMyk"]как писал THT_BEAST

[QUOTE="Цитата:[/QUOTE]
- Даже один и тот же протокол у разных пультов имеет разброс 20-30% по времени.
- Сам пульт гуляет в пределах 5-10% легко.
поэтому я думаю что несовсем верно будет так точно настраивать таймер.Я думаю будет проще мерять временную длинну посылки задав границы +- 5 мкс.
запустить таймер .
настроить прерывания по изменению фронта на ноге внешнего прерывания.
в прерывании проверить значение таймера,
обнулить таймер
снова запустить
проверить значение на ноге прерывания,занести значение в стек.
Ну да, с таким разбросом мой метод не прокатит. А можно поподробней тот метод раскрыть, а то я не совсем понимаю зачем мы в прерывании проверяем значение таймера ведь с момента запуска таймера до прихода прерывания его значение может быть очень большим. Если я не ошибаюсь то мы сравниваем значение таймера с длинным или коротким промежутком? Т.е. если его длина равна 1778+-500us(как осуществить это самое +/-) то толкаем в стек 0, если 90us (т.е. интервал был короткий), то ставим 1. Так? Т.о. весь алгоритм будет выглядеть так:
запустить таймер с тиком в 1us.
настроить прерывания по изменению фронта на ноге внешнего прерывания.
в этом прерывании проверить значение таймера,
если оно равно 1778us то в стек пихаем 0, если 90us, то единицу (Это без инверсии)(всё равно значения чёткие получаются, как сделать 1778+-500us я не знаю или мне просто надо его замерить конкретно для моего пульта и оно будет постоянно?)
Затем обнулить таймер
и снова запустить
и так 14 раз.
Если что не так, прошу поправить.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
24.03.2011, 23:11
балин.Я как та собачка понимать понимаю,сказать не могу.
Давай сначала.

создаём переменную flag.

создаём стек stek[14](массив из 14 переменых).

создаём счётчик принятых бит code.

запускаем таймер.

допустим у нас сработало прерывание.

заносим значение таймера в переменную
(допустим time)

останавливаем таймер.

проверяем какой по счёту бит пришёл.
если первый(code==0),то

запускаем таймер.

stek[code]==инвертированное значение на входе прерывания=="1".
(В RC5 по умолчанию первый сигнал всегда "1".)

инкремент счётчика code++.

flag=="1".

если срабатывание не первое то:
для короткого интервала(0,704..1,088мс)

проверяем предыдущий сигнал(flag)

если flag=1 то flag=0
иначе(flag был "1") то
stek[code]=инвертированное значение на входе прерывания.
code++

для длинного интервала(1,28..2,176мс )
заносим инвертированное значения на входе прерывания в stek[code]
code++

лучше врядли объясню.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
24.03.2011, 23:25
ещё пока при памяти
Цитата Сообщение от Votk
запустить таймер с тиком в 1us.
примерно.
Цитата Сообщение от Votk
как сделать 1778+-500us я не знаю
проверять значение по границам
как писал выше.
короткий
0,704< time<1,088мс
длинный
1,28< time<2,176мс
как сделать на асме не знаю.
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
24.03.2011, 23:27
Цитата Сообщение от MyxoMyk
балин.Я как та собачка понимать понимаю,сказать не могу.
Давай сначала.

создаём переменную flag.

создаём стек stek[14](массив из 14 переменых).

создаём счётчик принятых бит code.

запускаем таймер.

допустим у нас сработало прерывание.

заносим значение таймера в переменную
(допустим time)

останавливаем таймер.

проверяем какой по счёту бит пришёл.
если первый(code==0),то

запускаем таймер.

stek[code]==инвертированное значение на входе прерывания=="1".
(В RC5 по умолчанию первый сигнал всегда "1".)

инкремент счётчика code++.

flag=="1".

если срабатывание не первое то:
для короткого интервала(0,704..1,088мс)

проверяем предыдущий сигнал(flag)

если flag=1 то flag=0
иначе(flag был "1") то
stek[code]=инвертированное значение на входе прерывания.
code++

для длинного интервала(1,28..2,176мс )
заносим инвертированное значения на входе прерывания в stek[code]
code++

лучше врядли объясню.
Спасибо объяснил отлично! Я вроде въехал! Теперь буду пробовать это всё в асм. реализовать.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
24.03.2011, 23:30
Цитата Сообщение от Votk
Теперь буду пробовать это всё в асм. реализовать.
отпишись если получится.
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
26.03.2011, 13:36
Цитата Сообщение от MyxoMyk
Цитата Сообщение от Votk
Теперь буду пробовать это всё в асм. реализовать.
отпишись если получится.
Обязательно.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 176
26.03.2011, 16:05
не знаю зачем 2 таймера... на одном отлично работает. Пока сделал на пульте от ТВ, т.к. с уартом что-то не заладилось.

http://www.youtube.som/watch?v=ZnC_qRKcUAA

идея распознавания такая же как в статье в сообществе, но теперь на си и без кучи условий. Код легко правится почти под любой сигнал(настраивается время от стартового события до первого измерения и время между измерениями.)
0
0 / 0 / 0
Регистрация: 12.11.2010
Сообщений: 249
26.03.2011, 20:03
На выходных времени что то совсем не было, но блок-схемку набросать всё таки успел. Проверьте пожалуйста.

http://i.serverymoges.ru/1/1185/e893b4fb21c9cd8be3933f18913675b5_thumb.jpg
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
26.03.2011, 23:02
для длинного интервала не надо вводить проверку флага.Просто занести инвертированное значение на входе в стек,и инкреминировать принятые биты.
Это первое что увидел.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
26.03.2011, 23:15
в самом начале ,после занесения значения таймера в переменную,останавливать таймер не надо,надо его всеголишь обнулить и пусть дальше тикает.
Это второе.
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
26.03.2011, 23:21
соответсвенно из всех условий убрать команду TCNT1:=0.Это третье
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
26.03.2011, 23:23
Какой у вас камень?В смысле МК?
0
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 313
27.03.2011, 11:54
Цитата Сообщение от K_I_S_T
но теперь на си
А можно глянуть на саму прогу.В блогах нашёл вашу статью,но там на АСМ и для ПИКа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.03.2011, 11:54

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

Копирование ИК пульта
Добрый день! Мне надо сделать дубликат пульта.(его нет возможности купить и перепрограммировать) т.е. Оригинальный пульт - скопировать...

Разборка пульта lg mr21ga
Здравствуйте.Подскажите как разобрать пульт от телевизора mr21ga.Нет ни единого винта.Понимаю что там защелки.Использую для разбора...

Получить радиосигнал от пульта
Здравствуйте. Есть вопрос. Заказала себе выключатель с Алишки с радиопультом. Пульт работает на частоте 433 мГц. Взяла приёмник и...

Регулируемая с ИК пульта люстра
Всем привет. Вот наконец доделал сей девайс. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru