Оглавление:

Falling in Stm32: Remote Control for Home Media Center: 4 шага (с изображениями)
Falling in Stm32: Remote Control for Home Media Center: 4 шага (с изображениями)

Видео: Falling in Stm32: Remote Control for Home Media Center: 4 шага (с изображениями)

Видео: Falling in Stm32: Remote Control for Home Media Center: 4 шага (с изображениями)
Видео: ESP32-CAM - Guide to making YOUR first DIY Security Camera 2024, Ноябрь
Anonim
Falling in Stm32: пульт дистанционного управления для домашнего медиацентра
Falling in Stm32: пульт дистанционного управления для домашнего медиацентра

Это законченный прототип пульта дистанционного управления домашним медиацентром на базе микроконтроллера 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};

Рекомендуемые: