20 ago. 2012

Pedal para el teclado (Orientado a VIM) // Keyboard pedal (for VIM)



Ronda por ahí (desde hace tiempo) un tutorial de alguien que fabricó un pedal USB que simula la pulsación de la tecla "i" para usarse con el editor de textos "VIM".

Me llamó mucho la atención, pero creí que si construía uno lo haría diferente y poniendo especial énfasis en la utilidad practica y la simpleza de la fabricación decidí que la tecla que simularía sería la tecla "Esc" puesto que para entrar en modo de inserción la tecla "i" nos queda -muy al alcance del dedo- sin embargo la tecla "Esc" para entrar en modo normal requiere un pequeño movimiento del brazo.




La electrónica no es mi fuerte y opté por "añadir" el pedal directamente al teclado, como lo hice:

Los materiales que usé (que tenia a la mano y pueden reemplazarse) son:

*cable de teléfono (4 hebras) pero que se puede usar cualquier cable es lo que yo tenia a la mano... (solo necesitamos 2 hebras)



*Un interruptor pulsante NA



*Una caja de un viejo casette


[Queda al ingenio de cada uno y sobre todo de los materiales que dispongan para hacer un pedal mejor]


Cuando pulsamos una tecla esta actúa como un interruptor entre dos "pines" de un integrado el cual envía a el PC 2 bytes, esto es: el ScanCode que luego es capturado por el software encargado y transformado por el SO en un KeyCode que es con el cual trabaja el SO.
Basándonos en esto tenemos que averiguar que "combinación" de "pines" corresponden a que tecla para lo cual tenemos dos opciones:

1) Una vez desarmado el teclado seguir desde la tecla deseada los dos conductores que van hasta la circuiteria del teclado y marcarlos (puede resultar un poco desesperante)

2) Usar showkey (disponible por defecto en casi la totalidad de las distribuciones GNU/Linux) en la terminal para que nos muestre el keycode de cada pulsación que hacemos e ir "puenteando" los pines de la circuiteria del teclado (es lo que yo he hecho)

Si elijen la primera opción pues caso resuelto!, pero si elijen hacerlo como yo lo hice le comento que por alguna extraña razón quienes escribieron el software showkey decidieron hacer que este terminara 10 segundos luego de la ultima pulsación, característica que nos estorba para el cometido así que tenemos 2 opciones más:

1) Echar mano del código de showkey y quitar esta limitación de tiempo

2) Ejecutarlo en un bucle (esto hice yo)

Si elijen la primera opción pues hagan lo que dice, pero en cuanto a la opción 2 el bucle seria así (en la shell):

# while [ 1=1 ]; do showkey -k; sleep 1; done  [como ROOT]

De esta forma se nos mostrará el keycode de la tecla que pulsamos pero por duplicado (cuando presionamos y cuando soltamos).

Lo que sigue será desarmar el teclado (con el bucle anterior en ejecución), remover la circuiteria del teclado y con un cable ir puenteando los pines hasta tener el keycode que buscamos (en este caso el 1 correspondiente a la tecla "Esc") y marcarlos para no perderlos luego.



Yo lo encontré conectando el pin 3 de la primera sección de pines con el pin 5 de la segunda. Cabe aclarar que TODOS los pines se pueden puentear con TODOS, más NO solamente los de una -sección- contra los de la otra -sección-.

Una vez encontrada la combinación correcta retiraremos un poco (un par de milímetros) del material oscuro que recubre los pines que usaremos empezando desde el lado de los leds para soldar ahí los cables que usaremos. Para este cometido yo emplee un bisturí que uso para pelar cables y raspe aplicando poca fuerza, solo hasta revelar la parte plateada.


(Aclaro que en la imagen yo NO lo hice en los pines que debería, por que confundí los lados y tome los pines 5-3 cuando debí haber tomado los pines 3-5  )

Con esto ya podemos soldar los cables en los pines:



Listo! solo queda colocar el circuito en su lugar y re-ensamblar el teclado (Sugiero usar un poco de silicon (goma caliente) para asegurar los cables y evitar que se suelten a causa de un tirón).


En cuanto al cable pueden hacerlo pasar por el mismo agujero del cable normal, de no caber pueden limar un poco el agujero para que quepa.

Con el teclado listo pasamos al pedal cuyo armado es completamente trivial:

Tomé el interruptor (al cual soldé previamente los dos cables que salen del teclado) y lo coloqué dentro de la caja de casette asegurándolo con silicon (goma caliente)


Tenemos nuestro pedal funcionando y de ahora en adelante tendremos nuestras manos siempre en un mismo lugar del teclado mientras programamos o configuramos o hagamos lo que sea que hagamos.

Claro que todo esto puede aplicarse a otra tecla si lo vamos a usar con otro propósito, o incluso añadir varios pedales si se nos ocurre una aplicación útil.









I've seen a VIM USB pedal tutorial before that triggers the "i" key, so we're able to enter in Inserction mode with our foot.

I want to build something similar but prefer to put effort in practical utility and simplicity. So i thought that trigger the "Esc" key would be more convenient due to the little arm movement that requiers to reach it. And you know.. "i" key is just under your finger.. so there's no such time saving using a pedal.



I've decided that the pedal should be directly attached to the keyboard circuitry, so here is what I've done:

The materials can be replaced easily:

Telephone cable (4 wires inside), every cable can be used (we need just 2 wires)



NA Interrupter



Cassette case


[Of course you can change this materials with what you have in home]

So.. when we push a key an interrupter is activated and two contacts are connected at the keyboard integrated circuit which sends the appropriate ScanCode which is then converted to a KeyCode that the OS can handle.

Based on this we need to find out which 'combination' of contacts at the circuitry correspond to the required key, so we have two options for this:

1) Disassemble the keyboard en follow all the traces from the key to the circuitry (and use a marker for this), but is a little boring and annoying task

2) Use software that tell us what KeyCode has been received so we can use a wire to connect every possible combination in the keyboard circuitry until we find the correct one (I'm using GNU/Linux so showkey command will help me)

If you choose the first option just mark down which two contacts are the appropriate, but if you choose the second option we need no know something. The people who wrote showkey decided that the software should automatically close after 10 seconds before last key pulsation (so we need to deal with this with two more options):

1) Modify showkey source code to remove that timeout

2) Execute it with a shell infinite bucle (I've choose this one)

For option number 2 here is the solution:

# while [ 1=1 ]; do showkey -k; sleep 1; done  [como ROOT]

This way the software will show us every key pulsation (key-press and key-release).

Now we can disassemble the keyboard (with the shell bucle running), take off the circuitry and use a wire to connect every contact until the appropriate keycode shows up in screen (in this case we're looking for a keycode 1 , that corresponds with "Esc" key).



I've found it connecting pin #3 in the first row with pin #5 in the second row.

Now we can scratch the pins surface a little bit to revel the coper, but just enough so we can solder the wires (a couple millimeters will be ok)


(In this picture I've used incorrect pins. I've used pins 5-3 instead of 3-5, sorry..)

Now we can solder the wires to the pins:



Ok!, now just put the circuitry back in place, and use some hot glue so the wires can't move from there.



Lets take a look on the pedal side:

I just glued the interrupter in the cassette case and solder the wires in the interrupter pins


Now we can have our fingers always in the home row while editing :)