Tabla de contenido:

Falling in Stm32: Control remoto para Home Media Center: 4 pasos (con imágenes)
Falling in Stm32: Control remoto para Home Media Center: 4 pasos (con imágenes)

Video: Falling in Stm32: Control remoto para Home Media Center: 4 pasos (con imágenes)

Video: Falling in Stm32: Control remoto para Home Media Center: 4 pasos (con imágenes)
Video: DUERME SANANDO CUERPO y EMOCIONES 🟠 ¡Experiencia Increíble! 2024, Noviembre
Anonim
Falling in Stm32: control remoto para Home Media Center
Falling in Stm32: control remoto para Home Media Center

Este es un prototipo completo para el control remoto del centro multimedia doméstico basado en el microcontrolador smt32, stm32f103c8t6 conocido como placa 'bluepill'. Suponga que está utilizando una PC para el centro multimedia doméstico. Es una solución muy flexible, que le permite colocar una gran biblioteca de videos en el disco duro interno, o puede reproducir videos de la red, por ejemplo, youtube o algo así, no tiene ningún problema con los códecs o la reproducción de videos, porque es muy fácil de actualizar el reproductor de software en cualquier momento. La principal desventaja de esta solución es que debe usar el mouse y el teclado para controlar su reproducción. El control remoto por infrarrojos es un modo muy conveniente para esto.

En este artículo, mostraré cómo crear un control remoto propio usando una placa chip bluepill.

Paso 1: la idea

La idea
La idea
La idea
La idea

La idea principal es muy simple: la placa bluepill tiene un puerto USB integrado y puede actuar como un teclado USB HID. Si conectamos el receptor de infrarrojos a la placa, podría traducir el comando de su control remoto de infrarrojos a la 'pulsación de tecla' del teclado virtual. ¡No se requieren controladores adicionales!

Hay muchos protocolos de infrarrojos en el mundo que nos rodea. Cada televisor del proveedor de VCS tiene su propio protocolo de infrarrojos. Pero todos estos protocolos tienen algo en común: utilizan modulación de pulsos para codificar la señal. Por lo general, hay algún preámbulo: impulso largo antes del primer bit del paquete. Luego, el control de infrarrojos transmite el paquete completo con 0 y 1 y finaliza la transmisión con un pulso largo de finalización. Para decodificar el bit necesitamos medir la longitud del pulso y la longitud del pico. Por lo general, la longitud máxima del 0 lógico y el 1 lógico son iguales, la diferencia está en la longitud completa del pulso.

Los microcontroladores stm32 tienen una función incorporada para capturar la señal PWM. Casi todos los temporizadores del microcontrolador se pueden poner en la 'captura de señal PWM más' cuando las variables de canal del temporizador guardan la longitud total del pulso y su longitud máxima. Aquí debo resaltar el pequeño detalle: cuando el receptor de infrarrojos capta la señal, el voltaje en su pin de trabajo se vuelve 0 y en el estado inactivo el voltaje en el pin de trabajo es de 5 o 3.3 voltios dependiendo del voltaje de suministro del receptor de infrarrojos. Es decir, el receptor 'invierte' la señal.

Con el modo de captura PWM, el microcontrolador stm32 se puede convertir fácilmente en un traductor remoto IR desde el control remoto IR a los códigos del teclado. Luego, puede iniciar su software de visualización favorito, por ejemplo, Kodi de VLC para reproducir su película favorita en el centro de medios.

Paso 2: creación del controlador

Creando el controlador
Creando el controlador
Creando el controlador
Creando el controlador
Creando el controlador
Creando el controlador
Creando el controlador
Creando el controlador

Para programar el microcontrolador stm32, me gustaría recomendar el software gratuito de STM: system workbench (también conocido como ac6) y la herramienta de configuración de la placa cubeMX. Para cargar el software en el microcontrolador, se puede utilizar el clon de chip del adaptador ST-Link V2. Los archivos del proyecto del banco de trabajo del sistema adjuntos a este paso, archivo F1-IR_remote.zip.

La herramienta de configuración de la placa simplifica el proceso de configuración inicial del hardware de nuestro microcontrolador.

Si está utilizando la herramienta del banco de trabajo del sistema, puede usar el proyecto descargado. Pero si desea investigar el proyecto con más detalles, puede crear la configuración de la placa en el cubeMX:

  • Cree un nuevo proyecto y seleccione la placa stm32f103c8
  • Seleccione 'Resonador de cristal / cerámica' para el elemento 'Reloj de alta velocidad (HSE)' en el menú RCC.
  • Seleccione 'Cable serial' para el elemento 'Depurar' en el menú SYS.
  • Configure el temporizador # 2 (menú TIM2) en el modo de captura PWM como se muestra en la imagen:

    • Modo esclavo -> Modo de reinicio
    • Fuente de disparo -> TI1FP1
    • Fuente de reloj -> Reloj interno
    • Canal1 -> Modo directo de captura de entrada
  • Establezca la casilla de verificación 'Dispositivo (FS) en el menú USB
  • Seleccione el elemento del menú desplegable 'Clase de dispositivo de interfaz humana (HID)' en el elemento 'Clase de IP de FS' en el menú USB_DEVICE
  • En el panel de configuración del reloj, asegúrese de proporcionar 72 MHz al temporizador n. ° 2 porque necesitamos un conteo del temporizador en cada 1 mks.
  • En el panel de configuración configure el dispositivo USB como se muestra en la imagen
  • En el panel de configuración, configure el temporizador n. ° 2 de la siguiente manera:

    • Prescaller - 71 (de 0 a 71) - ¡1 microsegundo tic!
    • Modo contador - Arriba
    • Período de contador - 39999 (deberíamos poder medir el pulso largo)
    • Canal de captura de entrada 1: borde descendente (recuerde que la señal del receptor de infrarrojos está invertida)

En el modo de captura PWM, el temporizador n. ° 2 funcionaría de la siguiente manera:

Cuando se detecte el frente descendente, el contador del temporizador se guardará en el registro del canal 1 y el contador del temporizador se reiniciará con 0. Entonces el temporizador continuará contando en sentido ascendente. De modo que podemos medir fácilmente la longitud del pulso en microsegundos.

De forma predeterminada, la clase STM32 USB HID simula el mouse USB. Aquí puede encontrar las instrucciones para convertir el controlador en teclado.

Paso 3: Adaptación del controlador

El proyecto funciona con el control remoto de Panasonic y el centro multimedia Kodi. Para adaptar el proyecto a su propio controlador, debe agregar la matriz de códigos para su control remoto como hice para el control remoto panasonic (panasonicCode) al encabezado Inc / code.h. Como puede ver, cada comando tiene un ID único (en la enumeración del comando IR). Hay 24 comandos (0-23) reconocidos por el proyecto. Los comandos están ordenados por relevancia.

typedef enum {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_chapter_previous, IRtit_post_support, IR_chapter_previous, IRtit_posle_sub, IR_título_título_lista_título,, 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};

Luego debe agregar su propio control remoto en el método init () en el IR.cpp con la función addRemote (). Los argumentos de la función son:

  • Número de bits en el paquete
  • La longitud del encabezado del paquete
  • Longitud de bit 'cero'
  • Longitud de un bit
  • Puntero a la matriz de código
  • Numerar elementos de la matriz

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode) / sizeof (uint32_t));

}

Además, el archivo contiene otra tabla para convertir comandos en códigos de teclado. La matriz kbdr_kodi contiene los códigos clave para el centro de medios Kodi. Puede agregar otra matriz para su propio programa de centro de medios, por ejemplo, vlc player. Si agregara otra tabla de aplicación del centro de medios, crearía otro objeto KBD y lo inicializaría en main.cpp.

Paso 4: herramientas para simplificar la confección

Herramientas para simplificar la confección
Herramientas para simplificar la confección
Herramientas para simplificar la confección
Herramientas para simplificar la confección

Hay otros dos proyectos en el repositorio.

  • Investigación de infrarrojos: permite medir los parámetros de sincronización de las señales de su control remoto.
  • IR_capture: permite capturar los códigos HEX de su control remoto.

Simplemente cargue el proyecto de investigación de infrarrojos y conecte el puerto USB de la placa bluepill a su computadora. Luego, inicie cualquier programa de terminal en el dispositivo de puerto serie virtual, correspondiente a la placa stm32. Mientras presiona los botones en su control remoto, el programa medirá los pulsos recibidos e imprimirá los tiempos promedio para diferentes pulsos. Debería simplificarse para detectar la longitud del pulso para el encabezado del paquete, bits cero y uno.

En el proyecto de investigación de infrarrojos, el temporizador n. ° 2 está funcionando en el modo de captura PWM con dos canales: el canal uno captura la longitud completa del pulso y el canal 2 captura la longitud máxima. Cuando se detecta el borde de la señal descendente, el valor del temporizador se guarda en el registro del canal uno y el temporizador se reinicia con 0. Cuando se detecta el borde ascendente de la señal, el contador del temporizador se guarda en el registro del canal 2.

Para capturar los códigos de los botones de su propio control remoto, se puede utilizar el proyecto IR_capture. En el archivo main.c debe agregar la definición remota como esta:

IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - la longitud del encabezado en mks
  • .bits: la cantidad de bits en el paquete
  • .zero - la longitud del bit cero
  • .one - la longitud uno el un bit
  • .dev: la desviación (la diferencia de tiempos que se puede aceptar). Por lo general, es 1/10 de la longitud más pequeña.

Luego agregue su control remoto a la lista de controles remotos compatibles:

const IRcode * remoto [2] = {& panasonic, & pioneer};

Recomendado: