Оглавление:
- Шаг 1. Идея
- Шаг 2: Создание контроллера
- Шаг 3: настройка контроллера
- Шаг 4. Инструменты для упрощения пошива одежды
Видео: Falling in Stm32: Remote Control for Home Media Center: 4 шага (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Это законченный прототип пульта дистанционного управления домашним медиацентром на базе микроконтроллера smt32, stm32f103c8t6, известного как плата bluepill. Предположим, вы используете ПК в качестве домашнего медиацентра. Это очень гибкое решение, которое позволяет вам разместить огромную видеотеку на внутреннем жестком диске, или вы можете воспроизводить видео из сети, например YouTube или около того, у вас вообще нет проблем с кодеками или воспроизведением видео, потому что это очень легко обновить программное обеспечение плеера в любое время. Основным недостатком этого решения является то, что вы должны использовать мышь и клавиатуру для управления воспроизведением. Для этого очень удобен ИК-пульт дистанционного управления.
В этой статье я покажу, как создать собственный пульт дистанционного управления с помощью чиповой платы bluepill.
Шаг 1. Идея
Основная идея очень проста: плата bluepill имеет встроенный USB-порт и может работать как USB HID-клавиатура. Если мы прикрепим ИК-приемник к плате, он может преобразовать команду с вашего ИК-пульта дистанционного управления в «нажатие клавиши» виртуальной клавиатуры. Никаких дополнительных драйверов не требуется!
В окружающем нас мире существует множество ИК-протоколов. Каждый телевизор производителя VCS имеет свой ИК-протокол. Но у всех этих протоколов есть кое-что общее: они используют импульсную модуляцию для кодирования сигнала. Обычно есть преамбула: длинный импульс перед первым битом в пакете. Затем ИК-контроль передает весь пакет с 0 и 1 и завершает передачу длинным завершающим импульсом. Чтобы декодировать бит, нам нужно измерить длину импульса и длину пика. Обычно пиковая длина логического 0 и логической 1 одинакова, разница заключается в полной длине импульса.
Микроконтроллеры stm32 имеют встроенную функцию захвата сигнала ШИМ. Почти каждый таймер микроконтроллера может быть включен в режим «Захват сигнала ШИМ больше», когда переменные канала таймера сохраняют общую длину импульса и его пиковую длину. Здесь я должен выделить небольшую деталь: когда ИК-приемник улавливает сигнал, напряжение на его рабочем контакте становится равным 0, а в состоянии ожидания напряжение на рабочем контакте составляет 5 или 3,3 В в зависимости от напряжения питания ИК-приемника. То есть приемник «инвертирует» сигнал.
В режиме захвата PWM микроконтроллер stm32 можно легко превратить в дистанционный ИК-переводчик с ИК-пульта на коды клавиатуры. Затем вы можете запустить свое любимое программное обеспечение для визуализации, например Kodi из VLC, чтобы воспроизвести свой любимый фильм в медиацентре.
Шаг 2: Создание контроллера
Для программирования микроконтроллера stm32 я хотел бы порекомендовать бесплатное программное обеспечение от STM: системную рабочую среду (также известную как ac6) и инструмент настройки платы cubeMX. Для загрузки программного обеспечения в микроконтроллер можно использовать клон чипа адаптера ST-Link V2. К этому шагу прикреплены файлы проекта системной рабочей среды, файл F1-IR_remote.zip.
Инструмент настройки платы упрощает процесс начальной конфигурации оборудования нашего микроконтроллера.
Если вы используете инструмент System Workbench, вы можете просто использовать загруженный проект. Но если вы хотите изучить проект более подробно, вы можете создать конфигурацию платы в cubeMX:
- Создайте новый проект и выберите плату stm32f103c8
- Выберите «Кристаллический / керамический резонатор» для пункта «Высокоскоростные часы (HSE)» в меню RCC.
- Выберите «Serial Wire» для пункта «Debug» в меню SYS.
-
Настройте таймер №2 (меню TIM2) в режиме захвата ШИМ, как показано на рисунке:
- Подчиненный режим -> Режим сброса
- Источник триггера -> TI1FP1
- Источник часов -> Внутренние часы
- Канал1 -> Прямой режим захвата ввода
- Установите флажок Device (FS) в меню USB.
- Выберите элемент раскрывающегося меню 'Human Interface Device Class (HID)' в пункте 'Class of FS IP' в меню USB_DEVICE.
- На панели настройки часов убедитесь, что для таймера №2 предоставлено 72 МГц, потому что нам нужно счетчик таймера на каждые 1 мкс.
- В панели конфигурации настройте USB-устройство, как показано на картинке.
-
На панели конфигурации настройте таймер №2 следующим образом:
- Предварительный вызов - 71 (от 0 до 71) - тик в 1 микросекунду!
- Режим счетчика - вверх
- Период счетчика - 39999 (мы должны уметь измерять длинный импульс)
- Входной канал захвата 1 - Falling Edge (помните, что сигнал от ИК-приемника инвертирован)
В режиме захвата ШИМ таймер №2 будет работать следующим образом:
При обнаружении падающего фронта счетчик таймера будет сохранен в регистре канала 1, а счетчик таймера будет сброшен на 0. Затем таймер продолжит отсчет направления вверх. Таким образом, мы можем легко измерить длину импульса в микросекундах.
По умолчанию класс STM32 USB HID имитирует USB-мышь. Здесь вы можете найти инструкцию по превращению контроллера в клавиатуру.
Шаг 3: настройка контроллера
Проект работает с пультом дистанционного управления Panasonic и медиацентром Kodi. Чтобы адаптировать проект для вашего собственного контроллера, вы должны добавить массив кодов для вашего пульта дистанционного управления, как я сделал для пульта дистанционного управления panasonic (panasonicCode), в заголовок Inc / code.h. Как видите, каждая команда имеет уникальный идентификатор (в перечислении IRcommmand). В проекте распознаются 24 команды (0–23). Команды отсортированы по актуальности.
typedef перечисление {IR_play = 0, IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IR_chapter_next, IR_chapterle_previous, IR_subit_previous, IR_chapter_next, IR_chapter_previous, IR_subit_previous, IR_nlete_subit, IR_power, IR_unknown} IRcommand;
Const uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L, (uint16_t (HID_LEFT_CTRL) << 8) | HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C};
Const uint32_t panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091, 0x180a021, 0xd00bcb1};
Затем вы должны добавить свой собственный пульт дистанционного управления в метод init () в IR.cpp с функцией addRemote (). Аргументы функции:
- Количество бит в пакете
- Длина заголовка пакета
- 'Нулевая' битовая длина
- Длина в один бит
- Указатель на массив кода
- Числовые элементы массива
void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode) / sizeof (uint32_t));
}
Также файл содержит другую таблицу для преобразования команд в коды клавиатуры. Массив kbdr_kodi содержит ключевые коды для медиацентра Kodi. Вы можете добавить еще один массив для собственной программы медиацентра, например, vlc player. Если вы добавите еще одну таблицу приложения медиацентра, вы создадите другой объект KBD и инициализируете его в main.cpp.
Шаг 4. Инструменты для упрощения пошива одежды
В репозитории есть еще два проекта
- ИК-исследование - позволяет измерять временные параметры сигналов вашего пульта ДУ.
- IR_capture - позволяет захватывать HEX-коды вашего пульта ДУ.
Просто загрузите проект ИК-исследования и подключите USB-порт платы bluepill к компьютеру. Затем запустите любую терминальную программу на устройстве виртуального последовательного порта, соответствующем плате stm32. Пока вы нажимаете кнопки на пульте дистанционного управления, программа будет измерять полученные импульсы и печатать среднее время для разных импульсов. Следует упростить определение длительности импульса для заголовка пакета, нулевого и единичного битов.
В проекте ИК-исследования таймер №2 работает в режиме захвата ШИМ с двумя каналами: канал 1 фиксирует всю длину импульса, а канал 2 фиксирует длину пика. При обнаружении спада сигнала значение таймера сохраняется в регистре канала 1, и таймер сбрасывается на 0. Когда обнаруживается нарастающий фронт сигнала, счетчик таймера сохраняется в регистре канала 2.
Для захвата кодов кнопок вашего собственного пульта дистанционного управления можно использовать проект IR_capture. В файле main.c вы должны добавить удаленное определение, подобное этому:
IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};
- .hdr - длина заголовка в мкс
- .bits - количество бит в пакете
- .zero - длина нулевого бита
- .one - длина один бит
- .dev - отклонение (разница во времени, которое может быть принято). Обычно это 1/10 наименьшей длины.
Затем добавьте свой пульт в список поддерживаемых пультов:
const IRcode * remote [2] = {& panasonic, & pioneer};
Рекомендуемые:
Folow-UP: Advanced Media Center с Odroid N2 и Kodi (поддержка 4k и HEVC): 3 шага
Folow-UP: Advanced Media Center с Odroid N2 и Kodi (поддержка 4k и HEVC): эта статья является продолжением моей предыдущей, довольно успешной статьи о создании универсального медиацентра, основанного сначала на очень популярном Raspberry PI, но позже, из-за отсутствия выхода, совместимого с HEVC, H.265 и HDMI 2.2, он был переключен
Наденьте пульт дистанционного управления Amazon Fire Remote TV Remote: 3 шага (с изображениями)
Наденьте пульт Amazon Fire Remote TV Remote: О, Amazon, ваш Fire TV такой потрясающий, почему вы не предоставили нам регуляторы громкости на своем пульте? Ну, менее чем за 5 долларов на Amazon вы можете купить этот симпатичный маленький пульт, питание, отключение звука , объем и канал - все в небольшом корпусе. Введите в 3D-принтер и
Fairies: Portable Arcade и Media Center: 5 шагов
Fairies: Portable Arcade and Media Center: Моей целью было создать портативную консоль и amp; медиацентр для моей дочери. Геймплей миниатюрных моделей вроде клонов PSP или Nintendo кажется слишком далеким от идеи старых аркадных шкафов. Хотелось приобщиться к ностальгии по кнопкам
Raspberry PI Media Center, OSMC DAC / AMP: 3 шага
Raspberry PI Media Center, OSMC DAC / AMP: возьмите Raspberry pi, добавьте ЦАП и усилитель, и вы получите очень хороший медиацентр за небольшие деньги. Во-первых, я должен сказать «БОЛЬШОЙ»; Спасибо сотрудникам GearBest за то, что прислали мне этот предмет для опробования. А если вы хотите получить
1981 Портативный видеомагнитофон Raspberry PI Media Center: 12 шагов (с изображениями)
1981 Портативный видеомагнитофон Raspberry PI Media Center: Это портативный видеомагнитофон Sharp VC-2300H начала 80-х, который я преобразовал - теперь в его основе лежит Raspberry Pi, на котором установлено отличное программное обеспечение медиацентра Raspbmc. Другие обновления включают в себя шикарные часы на базе Arduino и EL-проводную "ленту"