Tabla de contenido:
- Suministros
- Paso 1: circuito eléctrico
- Paso 2: Montaje
- Paso 3: programación
- Paso 4: configurar accesos directos
- Paso 5: mejoras
Video: Teclado programable: 5 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
En este proyecto, mostraré cómo hacer un teclado programable relativamente simple y económico para mapear sus atajos de teclado, aplicaciones y más.
Este teclado se detecta como teclado en todos los sistemas operativos principales, no se necesitan controladores adicionales.
Suministros
- Codificador rotatorio.
- Muchos botones (depende de sus necesidades).
- Arduino Pro Micro, Arduino Leonardo o cualquier otra placa de desarrollo con Atmega32U4 MCU.
- Alambre, soldadura, soldador, etc.
- (Opcional) Una base pesada para evitar que el teclado se deslice, estoy usando un disco duro antiguo de 3,5"
Paso 1: circuito eléctrico
Elegí usar la placa de desarrollo Arduino Pro Micro con Atmega32U4 MCU que tiene 18 pines digitales utilizables.
Los pines para conectar los botones pulsadores y el codificador rotatorio se seleccionaron sin ningún orden en particular en mente, pero se deben tener en cuenta algunas cosas:
- Todos los pines con capacidad de lectura digital tienen pull-ups internos que permiten mitigar las resistencias pull-down externas. Por supuesto, el código debe actualizarse en consecuencia, porque espera que el estado del pin pase de bajo a alto cuando se presionan los botones.
- En el ejemplo de la biblioteca encoder.h se observa que el mejor rendimiento del codificador se alcanza cuando ambos pines están conectados a pines con capacidad de interrupción MCU. La mayoría de los pines analógicos de Atmega32U4 no tienen capacidad de interrupción.
- Los valores exactos de la resistencia pull-down no importan mucho, cualquier valor de 1 kΩ a 100 kΩ funcionará bien. Los valores de resistencia más grandes permiten una disipación de energía más pequeña, pero dan como resultado una respuesta de clavija más lenta a los cambios de voltaje. Simplemente elija las resistencias de valor que tenga más.
- Los codificadores mecánicos no son las cosas más confiables debido al desgaste de los contactos y al rebote. Es por eso que se necesita una buena solución de eliminación de rebotes. Los valores de condensador elegidos y los tiempos de retardo en el código probablemente no le proporcionarán los mejores resultados. Así que se necesita un poco de experimentación. O cambie a algo como un codificador óptico, pero su precio es significativamente más alto.
Paso 2: Montaje
Quería que el teclado tuviera un aspecto lo más limpio posible, así que soldé todos los componentes en la parte posterior de la placa prototipo. Pensé que el teclado sería más ergonómico si se usara elevado en un ángulo pequeño. Es por eso que soldé Arduino Pro Micro en una placa separada y conecté todos los pines digitales con cables a botones pulsadores. Es más conveniente conectar el cable USB de esa manera.
Encontré un disco duro antiguo de 3.5 para usar como base para el teclado, es bastante pesado y evita que la tabla se deslice por el escritorio cuando se opera (las almohadillas antideslizantes también ayudan). También tiene orificios para tornillos de 3 mm en los que atornillé separadores de latón y fijó el tablero en un ligero ángulo.
Paso 3: programación
El código está escrito con Arduino IDE. Necesitará instalar 2 bibliotecas:
- Codificador de Paul Stoffregen
- Teclado de Arduino
Para compilar para Atmega32U4 también necesita instalar el archivo de placa Arduino Pro Micro, Sparkfun tiene un gran tutorial sobre cómo hacerlo.
Una cosa a tener en cuenta de antemano es tener cuidado de no dejar "teclas presionadas" en su código. Esto me pasó a mí y MCU constantemente enviaba spam a alguna combinación de teclas. La única forma en que sé cómo solucionar esto es volver a grabar el cargador de arranque en MCU. Si terminas como yo, puedes seguir esta guía para grabar el cargador de arranque, necesitarás otra placa arduino para usar como programador.
En el bucle principal, la MCU lee primero el estado de cada botón, si se detecta un cambio de estado de BAJO a ALTO, se ejecuta la función keyboard_shortcut (i). La variable i es una identificación del botón presionado, el número total del botón pulsador está definido por ALL_BUTTONS (en mi caso, 15). Cuando se ejecuta, keyboard_shortcut (i) envía CTRL + SHIFT y luego una letra que se asigna a la identificación del botón: 1-> A, 2-> B, 3-> C, etc. Algunas combinaciones como CTRL + SHIFT + N se omiten porque es ya se usa en Windows10 por defecto (en este caso para crear una nueva carpeta). Aquí está la lista de todos los accesos directos predeterminados de Windows. Después de un breve retraso, la MCU envía una señal para liberar todas las teclas y la función vuelve al bucle principal.
Después de que se verifican todos los botones, MCU verifica si la posición del codificador rotatorio cambió y, si lo hace, keyboard_shortcut (i) se ejecuta con una identificación única.
La presión del botón del codificador invierte la variable booleana encoderButtonFlag. Cuando se gira el codificador, se envían diferentes accesos directos a la PC, según la dirección de rotación y el valor de encoderButtonFlag.
Si debugFlag se establece en 1, los mensajes de depuración se envían a través de UART al monitor en serie.
Paso 4: configurar accesos directos
Lo que hace cada atajo depende también de usted, todos tenemos preferencias diferentes. Proporcionaré los atajos que configuré para mí como ejemplo. Estoy usando Linux Mint 19.3 con el administrador de escritorio xfce4, por lo que mis ejemplos involucran principalmente scripts bash, pero también mostraré algunos ejemplos básicos para Windows10.
En la primera imagen, puede ver qué scripts asigné a qué atajos. Se hace desde el menú de configuración de xfce, el proceso para esto es sencillo. Puedes encontrar estos scripts en mi repositorio de GitHub
Los 6 botones pulsadores más pequeños en la parte inferior son para iniciar aplicaciones como el navegador web o el administrador de archivos, algunas de estas aplicaciones se llaman desde el script start_only_one_app.sh, que muestra todos los nombres de las aplicaciones iniciadas y busca la aplicación que desea iniciar. Si la ventana de la aplicación ya existe, se enfoca, de lo contrario, se inicia una nueva instancia de una aplicación.
Otros guiones:
- 2nd_display_control.sh - enciende / apaga el segundo monitor.
- moon_lamp.sh - enciende y apaga mi lámpara lunar.
- pc_load.sh: crea una burbuja de notificación con el uso y las temperaturas actuales de la CPU y la GPU.
- shutdown.sh: inicializa el apagado de la PC con un retraso de 1 minuto y crea una burbuja de notificación en la que se muestra el tiempo restante.
- spec_vpn.sh: se conecta a un servidor OpenVPN específico o, si la conexión ya existe, se desconecta del servidor.
- shortcut_controll.sh - toma el comando (más, menos, tabulador, cerrar) como argumento, detecta qué ventana está ahora enfocada y si se encuentra una aplicación específica activa, ejecuta la acción de control. Por ejemplo, para abrir una nueva pestaña en el editor de texto sublime, el atajo predeterminado es "CTRL + N" y en el terminal xfce - "CTRL + T", por lo que este script permite abrir una nueva pestaña en sublime y terminal con el mismo botón.
La primera función del codificador rotatorio es controlar el volumen, la segunda función es controlar el zoom de la ventana activa a través de shortcut_controll.sh.
Para el sistema operativo Windows, puede asignar accesos directos a aplicaciones a través de la ventana de propiedades del programa, como se muestra en la segunda imagen. Para cualquier otra cosa, querrá utilizar AutoHotkey. Es un lenguaje de secuencias de comandos de automatización para Windows.
Algunos ejemplos simples de sintaxis AHK:
;Control del volumen
^ + t:: Enviar {Volume_Up}
regreso
^ + v:: Enviar {Volume_Down}
regreso
; Cerrar ventana activa
^ + h:: WinGetTitle, Título, A
PostMessage, 0x112, 0xF060``,% Título%
regreso
;Apagar la PC
^ + b:: Ejecutar shutdown / s
Paso 5: mejoras
Algunas posibles mejoras:
- Pulsadores de mejor calidad.
- El prototipo de PCB se flexiona bastante cuando se presionan los botones.
- Iluminación RGB para cambiar de color según la función del codificador rotatorio configurado.
- Más botones (use el expansor IO IC).
- Mejor codificador rotatorio (o mejor solución antirrebote).
Recomendado:
Sudadera con capucha programable Stranger Things: 9 pasos (con imágenes)
Sudadera con capucha programable de Stranger Things: es posible que nunca tengas que pasar tiempo en un mundo de monstruos de pesadilla, pero a veces solo quieres usar una camisa que diga que PODRÍAS vivir allí si quisieras. Dado que tal camisa no existe en el mercado abierto, decidimos hacer nuestra o
DoReMiQuencer - Secuenciador MIDI programable con teclado: 7 pasos
DoReMiQuencer - Secuenciador MIDI programable con teclado: este dispositivo fue creado para su uso con VCVRack, un sintetizador modular virtual creado por VCV, pero puede servir como un controlador MIDI de propósito general. Sirve como secuenciador o teclado MIDI, dependiendo del modo seleccionado. Las notas MIDI asignadas al ke
Teclado programable de cartón: 8 pasos (con imágenes)
Teclado programable de cartón: a medida que se desarrolla la tecnología, la gente quiere que las cosas sean cada vez más virtuales; sin embargo, a veces es mucho más práctico y conveniente tener algo físico que puedas tocar e interactuar con tus propias manos. Un ejemplo de
Interfaz de teclado con 8051 y visualización de números de teclado en 7 segmentos: 4 pasos (con imágenes)
Interfaz de teclado con 8051 y visualización de números de teclado en 7 segmentos: En este tutorial, le contaré cómo podemos interconectar el teclado con 8051 y mostrar los números de teclado en la pantalla de 7 segmentos
Reloj programable con pantalla de cuatro caracteres: 5 pasos (con imágenes)
Reloj programable con pantalla de cuatro caracteres: serás la comidilla de la ciudad cuando uses este desagradable, sobredimensionado y completamente impracticable reloj de pulsera. Muestre su lenguaje obsceno favorito, letras de canciones, números primos, etc. Inspirado por el kit de microlector, decidí hacer un reloj gigante usando