Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej: 8 pasos
Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej: 8 pasos

Video: Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej: 8 pasos

Video: Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej: 8 pasos
Video: #184 Сделать USB-регулятор громкости Arduino — идеальный проект для начинающих 2025, Enero
Anonim
Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej
Arduino Keyboard Joystick Extender Box y Sound Controller Thing usando Deej

Proyectos Tinkercad »

Por qué

Durante un tiempo he querido agregar un pequeño joystick a mi teclado para controlar elementos de la interfaz u otras tareas más pequeñas en juegos y simuladores (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons, etc.).

Además, para Elite: Dangerous, he estado luchando con la mezcla de niveles de volumen de audio externo (la música incorporada, aunque buena, se vuelve repetitiva después de muchas horas en negro), audio en el juego y soporte de voz externa.

El mezclador de fuentes integrado de Windows está "bien", pero es un fastidio cambiar las pantallas y los controles deslizantes del mouse en medio de un juego. Tener una caja de control de teclado extendida parecía el camino a seguir. Deej es la solución que encontré.

Cómo

Recientemente he estado aprendiendo sobre Arduino y encontré el proyecto deej en reddit. Parecía que esto resolvería ambos problemas en un paquete práctico. Y me permitiría diseñar e imprimir una ingeniosa carcasa en 3D.

¿Qué es deej?

(del sitio) deej es un ** mezclador de volumen de hardware de código abierto ** para PC con Windows y Linux. Te permite usar controles deslizantes de la vida real (¡como un DJ!) Para ** controlar sin problemas los volúmenes de diferentes aplicaciones ** (como tu reproductor de música, el juego que estás jugando y tu sesión de chat de voz) sin tener que detener qué estás haciendo.

Mi version

Para mantener la caja pequeña, opté por perillas (potenciómetro lineal giratorio (ollas = resistencias)) en lugar de controles deslizantes. Funcionalmente funcionan igual. Los diseños de DJ actuales y populares no incluyen un joystick, por lo que será un diseño un poco híbrido. De lo contrario, es una construcción bastante sencilla.

Deej funcionará con un Arduino Nano, Pro Micro o Uno, pero el desarrollador 'recomienda oficialmente' Nano y Pro Micro. Elegí Arduino Pro Micro porque quería el joystick y la biblioteca de joystick de Arduino lo admite. También puedo usar la biblioteca de teclado Arduino cuando quiero usar la función de silencio del teclado multimedia (en lugar del 'silencio suave') con el botón del joystick, pero eso está más adelante.

Paso 1: Suministros

Suministros
Suministros
Suministros
Suministros
Suministros
Suministros

La caja

Descarga los archivos STL (diseñados en Tinkercad):

  • Archivos adjuntos en Prusa (https://www.prusaprinters.org/)
  • Thingiverse (próximamente)

El hardware (unidad de producción)

  • 1x Arduino Pro Micro
  • Potenciómetros rotativos (perilla) de 4x 10k (no controladores rotativos, use potenciómetros)
  • 1x Joystick Arduino KY-023
  • Cable de red de 5 pies de desecho cat5
  • 1x cable micro USB A a USB B (USB A es el conector cuadrado grande, USB B micro es lo que hay en el Arduino Pro Micro)
  • 1x LED rojo de 5 mm
  • 1x resistencia de 220 ohmios

Tenía algunas piezas adicionales, así que pensé en construir una unidad de desarrollo para probar las cosas. Con solo conectar las cosas a una placa de pruebas, fue más fácil visualizar el elemento final.

  • 1x Arduino Pro Micro
  • Potenciómetros rotativos de 4x 10k (perilla) (no controladores rotativos, use potenciómetros)
  • 1x interruptor de botón momentáneo (interruptor de restablecimiento completo)
  • 1x cable micro USB A a USB B (USB A es el conector cuadrado grande, USB B micro es lo que hay en el Arduino Pro Micro)
  • cables de puente surtidos
  • tablero de circuitos
  • 1x LED rojo de 5 mm
  • 1x resistencia de 220 ohmios

Paso 2: el recinto

El recinto
El recinto
El recinto
El recinto
El recinto
El recinto
El recinto
El recinto

El diseño

Me gustaron algunos de los otros diseños perfilados en la galería de la comunidad de deej, así que basé la mía en las características que me gustaron:

  • Fácil de diseñar e imprimir
  • No se interponga en el camino de mis otros periféricos de escritorio
  • No use tornillos o sujetadores para asegurar el gabinete
  • Estética de diseño similar al teclado

Diseñé e imprimí dos prototipos antes de decidirme por este diseño final. Me gusta tener una versión física para jugar en el espacio en el que lo estoy usando, ya que me da una mejor idea de cómo funcionará el objeto final.

Comencé brevemente a diseñar en Fusion360, pero no lo sé tan bien como Tinkercad, así que cambié y trabajé allí.

Como quería un diseño sin tornillos, creé una caja nido. El primer prototipo tenía una tapa delgada y una caja profunda para todo. El segundo diseño lo cambió por una tapa profunda y una caja inferior poco profunda. Solo tenía que sostener el Arduino Pro Mini, por lo que realmente no necesitaba ser grande. También se incorporaron los iconos en relieve.

El tercer diseño fue redimensionado para adaptarse al espacio junto a mi teclado.

La impresión

Imprimí la caja en PLA, programando un intercambio de filamento / capa de Negro a Rojo para la tapa donde los íconos comenzarían a ser visibles, y nuevamente a Negro para el resto de la tapa.

Un problema

A lo largo de todo esto, el soporte del joystick fue un problema. Incluso en el tercer diseño, la palanca choca contra los soportes en un lugar. La próxima iteración tendrá mejores holguras. Podría haber trabajado más en el diseño, pero quería pasar a la siguiente fase, la instalación.

Paso 3: el circuito

El circuito
El circuito
El circuito
El circuito
El circuito
El circuito

El peor trabajo de cableado jamás realizado

Ok, este es mi primer proyecto completo de Arduino. Sí, he hecho cosas en placas de prueba antes y estoy usando una para construir la versión de desarrollo de esto, pero en cuanto a fabricar y ensamblar, esta es la primera. Entonces mi cableado parece una mierda. Ahí, eso está fuera del camino:)

Actualización: desde entonces he construido otro y el cableado es mucho mejor allí. Ver las imágenes:)

Unidad de producción: qué va a dónde

El Arduino Pro Micro es una pequeña placa y cabe en la sección moldeada de la base. Las perillas y el joystick encajan en sus respectivos orificios en la tapa. Pero no monte nada hasta que obtenga la competencia de soldadura.

Alambrado

No tenía ningún cable de circuito adecuado, pero tenía un rollo sobrante de cable de red cat5 de núcleo sólido, así que eso es lo que usé. Es un poco más rígido y quizás más frágil que el cable de circuito trenzado, pero funciona.

Colocando los componentes en una aproximación de su posición de montaje final, calculé la distancia, para cada cable, agregué un poco más para la holgura, etc., luego corté y recorté el cable. Dejé mucha holgura.

Refiriéndome al diagrama de cableado, ejecuté la conexión a tierra común (negro) y VCC (rojo) a las perillas y el joystick donde se indica. Dado que el cable de red no viene en estos colores, simplemente elegí un color y mantuve mi cableado consistente con la función.

La olla individual. Las líneas analógicas (amarillas) se dirigieron a los pines A0 - A3. Las líneas de la palanca de mando (naranja), también analógicas, se dirigieron a los pines de E / S 8 y 9. Estos deberán designarse como analógicos en el código Arduino como A8 y A9.

La patilla del interruptor de la palanca de mando (azul) pasó a la patilla 7. Esta será una patilla digital en el código.

Aislamiento

Dado que este cable rígido se colocará en un espacio pequeño, opté por aislar mis conexiones de soldadura con una buena cantidad de pegamento termofusible. Luego colocó todo en su lugar y ejecutó una prueba simple en la placa y las ollas usando la versión del código Arduino Example AnalogInput - modificado para leer todas las ollas.

Segunda versión

Las dos últimas imágenes de arriba muestran la siguiente caja que estoy construyendo. Éste tendrá 5 perillas y un pulsador momentáneo para silenciar. Sin joystick. Caja del mismo tamaño.

Paso 4: acabado del hardware

Terminando el hardware
Terminando el hardware

Cuando instalé el Joystick, me di cuenta de que no había mucho espacio libre entre su placa y los encabezados de los pines que quedaban en el Pro Micro.

Después de doblar un poco con cuidado los cabezales de los pines y volver a aplicar pegamento termofusible (para aislamiento), el gabinete se cerró correctamente.

La instalación de las macetas se realizó sin problemas.

De nuevo con los cables

Los alambres de núcleo sólido son un poco rígidos y pueden ser quebradizos si se flexionan demasiadas veces, así que dóblelos con cuidado (sin esquinas afiladas) en el espacio disponible. Algunos de los míos eran demasiado largos y requerían un poco de plegado adicional.

Una vez que todo esté colocado en su lugar, simplemente coloque la base en la parte superior y debería haber terminado con el hardware….

Pero espera hay mas

Por supuesto, después de algunas semanas de uso, decidí que necesitaba un indicador que me hiciera saber cuál es el estado de la función MUTE codificada en software.

Después de editar el código para agregar la funcionalidad del LED (ver la siguiente sección), rápidamente soldé el LED / cables / resistencia y los conecté a la placa.

Dediqué más tiempo a perforar el agujero a través de la parte superior de la caja, ya que no quería estropear el acabado superior. Marqué un punto central, lo abolló y luego hice girar una broca para hacer el agujero.

Una presentación cuidadosa adicional limpió el orificio y aseguró un buen ajuste a presión para garantizar que el LED no sobresaliera demasiado por encima de la superficie superior.

Paso 5: el software

El software
El software
El software
El software
El software
El software

Visión general

Entonces, este es un proceso de dos partes.

  1. Obtenga y comprenda cómo funciona Deej y edite el archivo Config.yaml
  2. Edite el código Arduino para que coincida con el hardware y las características deseadas
  3. Obtenga la biblioteca de Joystick Arduino

En mi caso, quería estas características:

  • Perillas que controlan los niveles (micrófono y salida)
  • Interruptor de silencio
  • Joystick de 2 ejes reconocido por Windows para uso de aplicaciones

Niveles

Deej prácticamente se ocupa del primer punto a medida que se presenta. No modifiqué esta funcionalidad

Interruptor de silencio

Decidí desde el principio que iba a usar el botón de presionar / cambiar en el Joystick como un botón de silencio funcional.

Cuando examine el código, verá que he elegido (inicialmente) utilizar un silencio "suave": cuando se presiona el botón, el volumen del micrófono se reduce a cero (y el LED se enciende). Cuando se presiona de nuevo, el volumen del MIC vuelve a su configuración anterior y el LED se apaga.

Eventualmente, buscaré implementar la biblioteca de teclado Arduino para alternar el estado de silencio a través del conjunto de códigos de teclado multimedia extendido.

Implementación de joystick

Esto requiere el uso de la biblioteca Arduino Joystick para garantizar que Windows y, en consecuencia, cualquier juego / aplicación reconozcan el joystick como un dispositivo HID.

Soy un poco novato en lo que respecta a la codificación y encontré la documentación de la biblioteca de Joystick un poco escasa en el lado de la implementación real, pero un poco de búsqueda en Google me llevó a otros ejemplos que me ayudaron a comprender lo que está sucediendo. Consulte la sección de recursos al final para obtener más detalles.

Todo lo que tenía que hacer era identificar los pines X / Y, leer su estado y enviarlo a la biblioteca de Joystick. El Arduino apareció como un Leonardo para Windows y se configuró correctamente como un dispositivo Joystick.

Pude configurarlo en Elite Dangerous, junto con mi configuración HOTAS existente y hacer que el Joystick controle correctamente las cosas y no entre en conflicto con el HOTAS. También funciona bien en Star Wars: Squadrons: lo tengo configurado como un interruptor rápido para configurar los escudos mientras estoy en combate.

Los archivos que funcionan con la configuración de mi Joystick

Subí mis archivos actuales (octubre de 2020) a Codepile.

  • Código Arduino (archivo.ino)
  • Deej config.yaml

Paso 6: Finalizar

Fin
Fin

Bueno, este está hecho. Funciona y estoy bastante satisfecho con la forma en que se formó. Y aprendí un poco más sobre diseño de hardware, integración y programación Arduino.

Paso 7: Addendum..dum..dum

Addendum..dum..dum
Addendum..dum..dum

VLC: ese increíble reproductor de audio y video tiene un poco de rareza donde el nivel de volumen, cuando se controla externamente, salta de 0% a 27% ish. Esto no sucede cuando se ajusta el nivel usando el control de volumen de la interfaz en la aplicación, solo con controles externos como Deej.

El desarrollador de Deej encontró rápidamente una solución alternativa en VLC que hace el trabajo, vea la imagen de arriba:

"… si desea deshabilitar este comportamiento de" Seguimiento ", puede hacerlo cambiando el módulo de salida de audio de VLC. Usé DirectX en mis intentos aquí. Deberá reiniciar VLC para que el cambio surta efecto. tener una sesión de audio de Windows y poder controlarla a través de deej, esto solo evitará que la barra de volumen de VLC se mueva con ella)"

Paso 8: Recursos adicionales

Recursos adicionales
Recursos adicionales

Encontrado a través del poderoso Goog, listado sin ningún orden en particular …

  • Biblioteca de joystick de Arduino (v2): necesaria para integrar el joystick
  • Guía de conexión Sparkfun Pro Micro: buen recurso sobre este Arduino
  • deej - el software que maneja las perillas
  • Tipos de conectores USB: ¿quién sabía que había tantas variantes?
  • Pinouts micro analógicos de Arduino Pro
  • Joystick para juegos Arduino Leonardo - Leonardo es similar al Pro Micro, solo que más grande
  • Puerto Arduino Pro Micro (Clon) no detectado (Solución) - cuando bloqueas tu Pro Micro (lo hice)
  • Arduino Leonardo / Micro como controlador de juego / Joystick
  • Ejemplo de uso de una tecla multimedia para silenciar: uso de la biblioteca de proyectos HID
  • Código de ejemplo de la biblioteca de proyectos HID para pausar / reproducir medios
  • Otro ejemplo de código que muestra el controlador de gamepad.
  • ArduinoGamingController_updated: buena descripción del código del uso de la biblioteca de joystick
  • Cosa de calculadora de resistencias LED: para averiguar qué tan grande es una resistencia que necesitaría en su proyecto
  • Biblioteca de iconos - flaticon.com - fuente de las imágenes utilizadas sobre las perillas
  • Otro decodificador de color de resistencia: ¡haga clic en un color y viola!