Projet

Général

Profil

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