Cómo construir un teclado mecánico personalizado

En esta entrada os voy a explicar cómo podéis hacer en casa un teclado mecánico desde 0 y personalizarlo para que se ajuste al uso que le queráis dar.
De primeras parece algo difícil, pero en realidad se trata de un proceso simple.
Para este proyecto vamos a necesitar:

  • Interruptores mecánicos
  • Diodos
  • Cables
  • Soldador de estaño
  • Microcontrolador
  • Tapas para las teclas
  • Plancha para colocar los interruptores
  • Material para hacer la caja

Hardware

Lo primero es saber qué queremos construir. En este caso es un teclado, obviamente, pero podemos elegir la distribución de teclas que queramos.
Para esto podemos dirigirnos a la web Keyboard Layout Editor configurar el teclado que deseemos.
Una vez que tengamos el diseño listo toca hacer una plancha de un material resistente con los agujeros para colocar los interruptores.
Se puede hacer a mano, pero es complicado y se tarda mucho, aparte de que no quedará tan bien como hecho a máquina.
A mano o máquina, lo primero que necesitamos es saber cómo hay que cortar los agujeros. Por suerte podemos usar los datos de la web Keyboard Layout Editor para que nos lo calculen automáticamente. Para ello vamos a la pestaña «raw data» y copiamos todo lo que salga ahí. Luego vamos  a http://builder.swillkb.com/ y pegamos los datos.
Ahí podremos configurar opciones adicionales como qué tipo de interruptores vamos a usar, el margen que queremos darle a la plancha o si queremos redondear las esquinas.
Con todo ya configurado le damos a «Draw my CAD» y nos sacará un diseño CAD para poder hacer la plancha.
Lo bueno de esta página es que tienen una colaboración con una empresa de corte por láser y se puede encargar directamente una plancha ya cortada a medida, lo que ahorra mucho trabajo y dolores de cabeza.

La plancha final

Una vez tenemos la plancha es hora de ir pensando de cara al firmware que va a haber que programar (es mucho más sencillo de lo que parece). De momento solo hay que saber que vamos a tener que organizar los interruptores en filas y columnas.
Conviene sacar una copia en papel de la distribución de teclas para planificar cómo distribuir las filas y columnas y tenerlo a mano

 
Cuando tengamos claro cómo queremos conectarlos es hora de coger el soldador de estaño y ponernos manos a la obra.
Los interruptores más famosos (Cherry MX) tienen 2 contactos en la parte inferior, uno plano y otr0 más cuadrado. Tenemos que soldar las columnas uniendo los cuadrados y las filas conectando 1 diodo a cada uno de los contactos planos, con la parte negra del diodo hacia fuera, para luego unir los diodos de cada fila entre si.
Resultado tras soldar las filas y columnas.

Y para finalizar la parte del hardware ya solo queda hacer una caja que sirva de apoyo a la plancha con  los interruptores y guarde los cables y el controlador al que conectaremos los cables de las filas y columnas. Para el controlador yo uso una placa teensy 2.o, que es pequeña y barata, pero hay muchas opciones más.
 

Firmware

Para esta parte viene bien tener algo de idea de programación, pero tampoco es indispensable. Con la documentación disponible online se puede hacer sin muchas complicaciones.
Usaremos el firmware QMK que podemos descargar de github. Para tenerlo todo listo incluye una serie de scripts en qmk/util (linuxInstall.sh y installDependencies.sh) que ayudarán a instalar todos los paquetes necesarios en varias distros Linux. También se puede configurar en Windows, pero no lo he probado.
Una vez instalado todo creamos un nuevo proyecto ejecutando qmk/util/new_project.sh <nombre>. Esto crea una nueva carpeta en qmk/keyboards/<nombre> con los archivos que vamos a tener que modificar para configurar el teclado.

config.h

Tenemos que buscar las lineas que dicen

#define MATRIX_ROWS X
#define MATRIX_COLS Y

 
y cambiar la x y la y por el número de filas y columnas que hayamos hecho.
A continuación tenemos que buscar

#define MATRIX_ROWS_PINS {R1, R2, R3...}
#define MATRIX_COLS_PINS {C1, C2, C3...}

Y poner ahí el nombre de los pines a los que hemos conectado cada fila/columna en la placa del controlador.

rules.mk

Aquí encontramos opciones relacionadas con la placa que estemos usando. Conviene consultar la documentación del proyecto para elegir lo adecuado para cada controlador.
 

<nombre>.h

Aquí es dónde indicamos cómo están distribuidos físicamente los interruptores. Tenemos que escribir 2 «matrices»

#define layout ( \
k000, k001, k002, k003, k004, k005, \
k100, k101, k102, k103, k104, k105, \
k200, k201, k202,       k204, k205, \
k300, k301, k302, k303, k304,          \
) \
{ \
{k000, k001, k002, k003, k004, k005}, \
{k100, k101, k102, k103, k104, k105}, \
{k200, k201, k202, KC_NO,k204, k205,}, \
{k300, k301, k302, k303, k304, KC_NO} \
}

Estas matrices representan la distribución de las teclas. La de arriba indica los interruptores que hay conectados. En la segunda hay que poner cómo están las filas y columnas, incluyendo los huecos que pueda haber. Si en una posición concreta de fila/columna no hemos conectado ningún interruptor, entonces en la primera matriz dejamos un hueco y en la segunda indicamos que está vacía la posición con el código KC_NO.
 

keymaps/<nombre>/keymap.c

Al crear el proyecto se crea la carpeta keymaps/default. Se recomienda hacer una copia de esa carpeta y renombrarla con el nmbre del proyecto.
En keymap.c se indica lo que hace cada una de las teclas. Básicamente sustituimos los Kxxx de la primera matriz del punto anterior por los códigos de las teclas que nosotros queramos.
Un ejemplo usando la matriz de arriba:

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, RESET, \
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, \
KC_TAB, KC_Q, KC_W,         KC_E, KC_R, \
KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F,    \
),
};

Todos los códigos disponibles los podemos encontrar en la documentación del proyecto.
 
Ahora toca compilar el firmware. Desde la carpeta raíz del proyecto ejecutamos make <nombre>:<keymap> donde keymap es el nombre de la carpeta dentro de keymaps/ en la que esté nuestro keymap.c.
Por último solo queda instalar el firmware en el controlador, asegurarse de que está todo bien conectado y enchufar el teclado al PC para comprobar que lo hemos hecho todo bien. Para esta comprobación es recomendable que hayamos asignado a alguna de las teclas el código RESET para poder resetear el controlador pulsando esa tecla, en vez de tener que acceder físicamente a el, ya que a estas alturas ya estará guardado en la caja y quizás sea complicado.
 
Con esto ya deberíamos tener un bonito y personalizado teclado mecánico hecho por nosotros.

Mi teclado acabado

 
Eso es todo, espero que os haya gustado. Si queréis más información podéos visitar alguna de las siguientes webs