Clavier mécanique ergonomique customisable¶
Intro¶
Inspiration¶
www.qmk.fm
www.docs.qmk.fm/#
www.reddit.com/r/ErgoMechKeyboards/
www.reddit.com/r/olkb/
www.reddit.com/r/MechanicalKeyboards/
Création du layout¶
Le site www.keyboard-layout-editor.com permet de créer une disposition de touches. Il faut ensuite récupérer le texte généré automatiquement dans l'onglet raw. Pour ma part ce code ressemble à ça :
[{x:3.5},"#\n3"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4"],
[{y:-0.875,x:5.5},"%\n5"],
[{y:-0.875,x:1.5},"!\n1"],
[{y:-0.995,x:0.5,a:7},""],
[{y:-0.38,x:3.5,a:4},"E"],
[{y:-0.875,x:2.5},"W",{x:1},"R"],
[{y:-0.875,x:5.5},"T"],
[{y:-0.875,x:1.5},"Q"],
[{y:-0.995,x:0.5,a:7},""],
[{y:-0.38,x:3.5,a:4},"D"],
[{y:-0.875,x:2.5},"S",{x:1},"F"],
[{y:-0.875,x:5.5},"G"],
[{y:-0.875,x:1.5},"A"],
[{y:-0.995,x:0.5,a:7},""],
[{y:-0.38,x:3.5,a:4},"C"],
[{y:-0.875,x:2.5},"X",{x:1},"V"],
[{y:-0.875,x:5.5},"B"],
[{y:-0.875,x:1.5},"Z"],
[{y:-0.995,x:0.5,a:7},""],
[{r:7,rx:6.5,ry:4.25,y:0.25,x:-2},"","",""]
Création du dxf¶
Il faut ensuite utiliser le site www.builder.swillkb.com. En lui donnant le texte qu'on vient d'obtenir il nous génére un svg ou dxf correspondant.
Création des fichiers pour découpe laser ou impression 3D.¶
Importer le desin vectoriel dans Fusion 360¶
Le gros du travail de dessin¶
Exporter les dxf et les stl¶
Partie électronique¶
Création de la matrice de diodes¶
Soudure¶
Firmware¶
Choix du controleur/firmware¶
Il est possible d'utiliser un arduino avec QMK, mais cette fois j'ai voulu expérimenter avec un Raspberry Pico avec KMK.
main.py¶
print("Starting !")
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.layers import Layers
from kmk.handlers.sequences import send_string
keyboard = KMKKeyboard()
keyboard.col_pins = (board.GP0, board.GP1, board.GP2, board.GP3, board.GP4, board.GP5, board.GP13, board.GP6, board.GP7, board.GP8, board.GP9, board.GP10, board.GP11, board.GP12)
keyboard.row_pins = (board.GP28, board.GP27, board.GP16, board.GP17, board.GP18)
keyboard.diode_orientation = DiodeOrientation.COL2ROW
keyboard.modules.append(Layers())
# Cleaner key names
_______ = KC.TRNS
XXXXXXX = KC.NO
ARROWS = KC.MO(1)
NUM_PAD = KC.MO(2)
keyboard.keymap = [
[ #QWERTY
KC.ESC , KC.N1 , KC.N2 , KC.N3 , KC.N4 , KC.N5 , XXXXXXX, KC.GRV , KC.N6 , KC.N7 , KC.N8 , KC.N9 , KC.N0 , KC.BSPC,\
KC.TAB , KC.Q , KC.W , KC.E , KC.R , KC.T , XXXXXXX, KC.BSLS, KC.Y , KC.U , KC.I , KC.O , KC.P , KC.ENT ,\
KC.LSFT, KC.A , KC.S , KC.D , KC.F , KC.G , KC.MINS, KC.EQL , KC.H , KC.J , KC.K , KC.L , KC.SCLN, KC.QUOT,\
KC.LCTL, KC.Z , KC.X , KC.C , KC.V , KC.B , KC.LBRC, KC.RBRC, KC.N , KC.M , KC.COMM, KC.DOT , KC.SLSH, KC.RCTL,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.LGUI, ARROWS , KC.SPC , KC.BSPC, NUM_PAD, KC.RALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
],
[ #ARROWS
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.HOME, KC.END , XXXXXXX, XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.LEFT, KC.DOWN, KC.UP , KC.RGHT, XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
],
[ #NUMPAD
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.N7 , KC.N8 , KC.N9 , KC.N0 , XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.PPLS, KC.N4 , KC.N5 , KC.N6 , XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.PMNS, KC.N1 , KC.N2 , KC.N3 , XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC.PAST, KC.PSLS, KC.COMM, KC.DOT , XXXXXXX, XXXXXXX,\
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
]
]
if __name__ == '__main__':
keyboard.go()
Layout Européen¶
Pour ma part j'ai l'habitude d'utiliser un clavier QWERTY espagnol. Mais je veux pouvoir écrire en français espagnol et anglais, j'utilise donc https://eurkey.steffen.bruentjen.eu/ comme layout. Cela me permet d'utiliser les touches ñçéèêëàáó...
Pour utiliser cette disposition des touches sur une machine linux il suffit d'utiliser la commande "setxkbmap eu" (cela ne marche que dans une session X, je ne sais pas si une version Wayland de cette commande existe).
Résultat final¶