Premiers pas
Le terrier du lapin et premier projet: un macropad basique
Après avoir acheté mon premier clavier mécanique, je décide de continuer la customisation et acquiert des touches G20 pour mon clavier. Voulant pousser la customization encore plus, et par envie d’apprendre des rudiments d’électronique, je commence à me renseigner sur comment fabriquer de A à Z son clavier mécanique. Du design du layout en passant par la conception du PCB, je trouve énormément de ressources sur le sujet. Je décide donc de me lancer dans la conception d’un clavier low-profile en 60%. Mais avant cela, me connaissant, je préfère commencer par un petit projet, pour être sûr que ça me plaise. Le projet de macropad, proposé par le site Golem Keyboard Project du Redditor u/dovenyi, est parfaitement adapté. On complétera avec d’autres ressources çà et là sur des sujets passé vite fait mais j’arrive tout de même à fabriquer le macropad. Le plus chiant ayant été de flasher le firmware sur le micro-contrôleur. Ça fonctionne, même si je me suis planté dans la matrice, ayant inversé les touches (oui, si on regarde à l’envers, forcément c’est à l’envers…); passons donc à un projet un peu plus complexe mais quand même réalisable.
Deuxième projet
Plus de touches
Le but étant de continuer à apprendre et essayer de faire un clavier un peu plus complexe que le macropad. Je décide donc de me lancer dans un pavé numérique. Ça pourrait me servir en plus de mon clavier actuel et serait un bon exercice de conception/fabrication.
Je cherche donc des numpads déjà existants afin de voir ce qui se fait déjà: peut-être qu’il y en a des plus originaux que le pad numérique que l’on trouve sur les claviers 100%.
Je tombe sur un numpad tout compact et mignon de Varmilo. J’hésite du fait du deuxième layer de touche (qui complexifie la programmation du firmware?). Mais cela dit, ça m’éviterait de récupérer des stabilisateurs nécessaires sinon pour les touches plus larges (en général les touches “+”, “Entrée” et “0”).
Sinon on peut partir sur un plus classique (à voir si on garde les touches supplémentaires en haut).
Numpad simple
Layout
On utilise Keyboard Layout Editor pour concevoir le layout. Ça tombe bien, le numpad tout simple est proposé par KLE en exemple de présentation. On sélectionne tout et on copie-colle après avoir chargé puis supprimé un des presets proposés. J’enregistre le layout dans mes gists Github.
On récupère les données brutes (utiles pour la suite) qu’on retrouve dans l’onglet “Raw data” de KLE.
["Num Lock","/","*","-"],
["7\nHome","8\n↑","9\nPgUp",{h:2},"+"],
["4\n←","5","6\n→"],
["1\nEnd","2\n↓","3\nPgDn",{h:2},"Enter"],
[{w:2},"0\nIns",".\nDel"]
Plate
Pour positionner les switches, on créera une plate d’abord en carton, comme suggéré sur le site Golem. Ça ne coûte rien et ça permet d’expérimenter plusieurs positions de touches (et de se planter sans trop de conséquences).
Il existe plusieurs outils de générateur de plates qui utilisent les données brutes de KLE.
Je vais utiliser ici celui de Keeb.io. On colle les données brutes dans le champs “KLE Raw data” et l’outil génère les découpes pour les touches et les stabilisateurs.
Vu qu’ici on ne compte pas (encore) faire découper la plaque par un prestataire dans de l’aluminium ou de l’acrylique, on met tous les paramètres de découpe à 0. On laisse l’espacement des touches (Keyspacing) à la valeur par défaut des switchs MX (19,05 mm).
L’outil propose donc automatiquement d’ajouter les emplacements pour les stabilisateurs.
On récupère ensuite le SVG (Export SVG) pour pouvoir ensuite l’éditer avec Inskcape, un outil libre de dessin vectoriel. On pourra ainsi rajouter les contours de la plaque pour ensuite découper tout ça sur du carton pour le prototype.
Ce qui donne ceci après 5 min. dans Inkscape:
J’ai rajouté l’emplacement pour le microcontrôleur (Pro Micro) pour laisser la place lors du montage final.
Plus qu’à imprimer et utiliser la technique proposée sur Golem.hu, à savoir:
- positionner le patron sur le carton que l’on souhaite utiliser comme plaque de prototype
- faire des trous à chaque coin de case en utilisant une épingle pour délimiter les emplacements des switches et stabilisateurs
Une fois qu’on a fait tous ces trous, on prendra une règle métallique et un cutter et on découpe le tout.
Il manque les stabilisateurs (que je dois me procurer) mais je voulais voir ce que ça donnait quand même ^^
Alors, je pense que le carton n’était peut-être pas assez épais (j’aurais probablement dû le renforcer) et le fait d’avoir les emplacements pour les stabilisateurs fragilisent les découpes au niveau des switchs. Une solution aurait été d’espacer plus les touches (donc de ne pas suivre le standard MX).
Je me suis aussi planté en voulant aller trop vite et, faute d’avoir prévu le coup, j’ai omis les emplacements pour les supports du plateau. Je vais devoir me procurer des entretoises, comme celles pour les cartes-mères. Je pourrais aussi tout simplement faire une boîte, et dans le même temps incliner le tout (ou pas). Sur ce point, le post du blog de mat3o donne de bonnes pistes.
Numpad v0.2
On prend les mêmes et on recommence…
OK, on va reprendre depuis le début.
J’ai utilisé le Plate & Case Builder de Swill afin d’avoir les emplacements corrects pour les stabilisateurs. Eh ouais, je me rend compte que les découpes utilisées plus haut étaient OK pour des stabilisateurs vissés sur le PCB. Or, je veux des stabilisateurs sur le plateau… Donc pas la même découpe 🤦 De plus, l’outil permet de générer les emplacements pour les vis.
Je me dis que ce serait pas mal si je concevais le PCB afin d’intégrer plus proprement le micro-contrôleur (ici un Pro Micro). Est-ce qu’il serait possible de le placer sous les touches ou est-ce que je devrais quand même le déporter (parce que pas la place)?
J’aimerai au final avoir un clavier en sandwich assez correct en m’inspirant du tutorial 68 keys.
Le plateau
Finalement, j’ai craqué et commandé la découpe du plateau en aluminium sur LaserBoost. Ils font de la découpe laser sans minimum de commande et sont basés en Espagne.
J’ai également commandé des stabilisateurs et 20 sockets hotswap sur Keycapsss. Enfin, j’ai acheté une sélection d’entretoises sur eBay.
La matrice
Pour savoir comment tout connecter, j’utilise le Keyboard Firmware Builder. Je n’oublie pas cette fois de cocher “Flip” souder les switches et les diodes dans le bon sens.
On aura 4 colonnes et 5 rangées, donc un total de 9 inputs sur le MCU. À noter qu’on peut bouger les points de contacts et modifier le nombre de rangées et de colonnes si besoin. Ici, je n’ai rien modifié.
Soudure!
On place les diodes avec la cathode (+) vers le bas (c’est le petit trait noir). Je me suis servi des pattes pour faire les rangées et de bouts de pattes pour les jonctions plus compliquées.
Il ne manquera qu’a souder des câbles sur la droite, aux extrêmités des rangées.
Ensuite on soude les colonnes. On va dénuder à intervalle régulier sur le câble pour pouvoir faire une boucle au niveau des connecteurs hotswap. Je n’arrive toujours pas à bien calibrer où dénuder (les traces de plastique fondu en témoignent) mais ça fonctionne à peu près.
Programmation du firmware
Avant de pouvoir flasher le firmware sur le MCU et avoir un clavier fonctionnel, il faudra installer QMK dans notre environnement. Un setup pour les noobs est dispo dans la doc QMK noob tutorial. Sur MacOS et Windows, on pourra utiliser un outil graphique mais sur Linux, ce sera via le terminal.
Correspondance entrées sur le Pro Micro
On continue d’utiliser le Keyboard Firmware Builder. Une fois le layout importé depuis le Keyboard Layout Editor, dans l’onglet “Pins”, on va associer chaque rangée et chaque colonne à une entrée sur le Pro Micro. Les entrées imprimées sur le MCU sont propres à Arduino et on doit donc les convertir (cf la Table de conversion d’Arduino vers AVR sur Golem.hu). Par défaut le contrôleur choisi est le ATmega32U4; ça tombe bien, c’est celui du Pro Micro.
Rows | AVR | Arduino |
---|---|---|
0 | D1 | 2 |
1 | DO | 3 |
2 | D4 | 4 |
3 | C6 | 5 |
4 | D7 | 6 |
Columns | AVR | Arduino |
---|---|---|
0 | B6 | 10 |
1 | B2 | 16 |
2 | B3 | 14 |
3 | B1 | 15 |
Keymap
On va ensuite vérifier que le mappage des touches est correct. Ça n’est pas le cas ici, on va donc cliquer sur chaque touche et modifier le keycode associé. Pratique, la plupart des touches sont déjà renseignées, il y a juste à cliquer pour éditer.
Erratum:
NCLK
n’existe pas/plus, le remplacer parKC_NUM
(CF. QMK Docs - Simple Keycodes - Full list.
Export vers QMK
À l’onglet “Settings”, on peut nommer notre clavier et spécifier la taille du bootloader (ici, on utilisera le bootloader Caterina, spécifique à Arduino). Ensuite on récupère le JSON en cliquant sur “Save configuration”.
Dans la console, on va importer ce fichier pour créer un nouveau clavier dans le dossier de QMK avec la commande ci-dessous:
qmk import-kbfirmware /path/to/export.json
Le Keyboard Firmware Builder n’est plus maintenu et donc le fichier généré n’est plus vraiment compatible, c’est pour cela qu’on passe par l’import du JSON. Plus d’infos ici.
Cela créera le dossier du clavier dans qmk_firmware/keyboards/nom_du_clavier
. On devra ensuite éditer le fichier info.json
pour mettre caterina
à la clé bootloader
, sinon le bootloader ne sera pas reconnu et on ne pourra pas flasher le firmware sur le MCU.
On vérifie que les entrées sont correctes dans la clé matrix_pins
et on sauvegarde le fichier.
Flashons!
On peut maintenant flasher le firmware (écrire le micrologiciel sur le microcontrôleur).
On va d’abord brancher le MCU à l’ordi et vérifier qu’il est présent dans la liste des périphériques USB en utilisant lsusb
. On devra avoir une entrée avec Arduino dans le nom qui apparaît dans la liste.
On peut lancer le flashage (flashing?) en utilisant la commande ci-dessous (on utilise le layout par défaut, puisqu’on n’en a pas défini d’autre):
qmk flash -kb numpad_simple -km default
Source: Flash your Keyboard from the Command Line
S’il n’y a pas d’erreur, QMK va compiler le firmware et une fois terminé va tenter de flasher celui-ci sur le MCU.
Le MCU doit être en mode Bootloader pour qu’on puisse écrire dessus. Pour cela, on doit appuyer sur le bouton RESET
s’il existe (ici, non) ou court-circuiter les entrées GND
et RESET
sur le MCU. On peut utiliser un bout de câble pour ce faire. Une rapide connexion suffit et ensuite QMK va copier le firmware sur le MCU; dans notre cas, ça prendra moins d’une minute.
Ensuite c’est bon! On peut d’ors et déjà tester le clavier et ça fonctionne!