Conception
J'ai généré une disposition plus ou moins idéale pour la disposition des touches en fonction de la forme de ma main sur ergopad : https://pashutk.ru/ergopad/
On vas tenter de générer un pcb depuis un logiciel prévu pour ça : ergogen le logiciel demande nodeJS, un interprète javascript que je ne connais pas et qui fut plutot laborieu a installer sur un linux, on installe ensuite ergopad. (J'ai par la suite trouver une version web beaucoup plus pratique et qui ne nécessite pas de mettre les mains dans le cambouis : https://ergogen.cache.works/#) un clavier normal a en general 26 touches de lettres, 22 pour les chiffre et caractères speciaux puis les touches de control (2 alt, 2 ctrl, 2 maj, vermaj, retours windows, tabb, dell, espace), la croix directionnelle, les 12 touches de fonction, le pavé numérique et éventuellement des touches de macro. Tout ça pour un total de 88 touches, 56 réelement indispensable.
config des pins ici : https://github.com/benvallack/ergogen
On ne posede que 5 doigts qui on entre 3 et 4 position confortable pour une touche chacun (8 pour l'index et 3 pour le pouce), un total de 44 touches possibles au total. On vas tenter de réduire au maximum le nombre de touche nécessaire par exemple en mettant différente organisation de clavier différentes interchangeable avec une une touche. ref : https://www.youtube.com/watch?v=8wZ8FRwOzhU&t=132s
Switch brown (retours tactile mais silencieux) https://fr.aliexpress.com/item/32899833333.html https://fr.aliexpress.com/item/1005001864766812.html?spm=a2g0o.productlist.0.0.6b584a82GRTs8m&algo_pvid=afcbc6e4-3e33-4a80-9bb9-defdb27c54b4&algo_exp_id=afcbc6e4-3e33-4a80-9bb9-defdb27c54b4-1&pdp_ext_f=%7B%22sku_id%22%3A%2212000017909409069%22%7D&pdp_npi=2%40dis%21EUR%21%2115.42%21%21%21%21%21%402100bb5116531312875265836e5f85%2112000017909409069%21sea
carte : https://fr.aliexpress.com/item/4000991785942.html (je vais finalement utiliser une carte promicro car déjà implémenté dans le logiciel qui génère le pcb)
diode : https://fr.aliexpress.com/item/32947233235.html
Bépo la config de touche
autres exemples : https://github.com/benvallack/ergogen/blob/master/config.yaml https://github.com/benvallack/ergogen/blob/master/config-flipper.yaml
après un passage (long et fastidieu) sur ergogen on obtient ca (le code est en dessous) : j'ai rajouté par dessus en couleur comment je voulais relier electroniquement les touches, il faut également rajouter une diode a chaque touche pour éviter une contre réaction et pouvoir appuyer sur plusieurs touches en même temp, c'est également géré par le logiciel. on obtient a la fin un fichier Kicad que nous n'avons plus qu'a dessiner les pistes a la main en reliant les composants déjà placé et relié par des trait (definit dans ergogen également grace a la condition “net”). Et voila le résultat sur Kicad :
Il ne reste plus qu'a le graver au fablab sur la technodrill ou via des services de gravures proposées en ligne.
forme sur ergogen : ca nous permet de créer un pcb sur kicad et un contours a partir de la definition des positions des touches.
Points
zones:
ptit:
anchor:
rotate: 8
rows:
1:
row_net: P10
mirror.row_net: P10
2:
row_net: P16
mirror.row_net: P16
3:
row_net: P14
mirror.row_net: P14
columns:
o:
key:
column_net: P1
mirror.column_net: P11
3autres:
anchor:
rotate : -8
ref: ptit_o_1
shift : [22, 5]
rows:
1:
row_net: P10
mirror.row_net: P10
2:
row_net: P16
mirror.row_net: P16
3:
row_net: P14
mirror.row_net: P14
4:
row_net: P15
mirror.row_net: P15
columns:
annulaire:
rotate: 0
key:
column_net: P21
mirror.column_net: P11
majeur:
rotate: -5
stagger: 5
spread: 20
key:
column_net: P20
mirror.column_net: P9
index2:
rotate: -5
stagger: -5
spread: 20
key:
column_net: P19
mirror.column_net: P8
index1:
rotate: -3
stagger: -1
spread: 21
key:
column_net: P18
mirror.column_net: P7
poucehaut:
anchor:
ref: 3autres_index1_1
rotate: -20
shift: [29.5,0]
rows:
1:
row_net: P8
mirror.row_net: P8
columns:
1:
key:
column_net: P18
mirror.column_net: P7
2:
rotate: -15
stagger : -3
spread: 21
key:
column_net: P19
mirror.column_net: P8
3:
rotate: -15
stagger : -3
spread: 21
key:
column_net: P20
mirror.column_net: P9
4:
rotate: -15
stagger : -3
spread: 21
key:
column_net: P21
mirror.column_net: P10
pouce2:
rows:
1:
row_net: P9
mirror.row_net: P9
columns:
1:
key:
column_net: P21
mirror.column_net: P10
anchor:
ref: poucehaut_4_1
rotate: 0
shift: [0,-20]
espace:
rows:
1:
row_net: P9
mirror.row_net: P9
columns:
1:
key:
column_net: P18
mirror.column_net: P7
anchor:
ref: 3autres_index1_1
rotate: -30
shift: [32,-24]
mirror:
ref: poucehaut_4_1
distance: 50
key:
footprints:
- type: mx
nets:
from: mx
to: =column_net
params.keycaps: true
- type: diode
anchor:
shift: [0, -4.7]
nets:
from: mx
to: =row_net
outlines.exports:
plate:
- type: keys
side: left
size: 30
bevel: 5
- type: polygon
points:
- ref: pouce2_1_1
shift: [0,-12]
- ref: espace_1_1
shift: [0,-12]
- ref: poucehaut_2_1
shift: [0,-12]
- ref: poucehaut_4_1
shift: [0,-12]
operation: add
- type: rectangle
size: [30, 30]
anchor:
ref: poucehaut_1_1
shift: [-14,-35]
bevel: 5
operation: add
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [14, -40]
bevel: 5
operation: add
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [9, -40]
operation: add
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [14, -60]
operation: add
# - type: rectangle # size: [35, 18] # anchor: # rotate: -90 # ref: 3autres_index1_4 # shift: [16, -2] # operation: stack # - type: circle # radius: 2 # anchor: # ref: 3autres_index1_4 # shift: [25, -19.5] # operation: stack
platemirror:
- type: keys
side: right
size: 30
bevel: 5
- type: polygon
points:
- ref: mirror_pouce2_1_1
shift: [0,-12]
- ref: mirror_espace_1_1
shift: [0,-12]
- ref: mirror_poucehaut_2_1
shift: [0,-12]
- ref: mirror_poucehaut_4_1
shift: [0,-12]
operation: add
- type: rectangle
size: [30, 30]
anchor:
ref: mirror_poucehaut_1_1
shift: [14,-35]
bevel: 5
operation: add
- type: rectangle
size: [24, 60]
anchor:
ref: mirror_3autres_index1_1
shift: [38, -16]
bevel: 5
operation: add
- type: rectangle
size: [24, 60]
anchor:
ref: mirror_3autres_index1_1
shift: [30, -16]
bevel: 5
operation: add
arduino:
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [14, -40]
bevel: 5
operation: add
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [9, -40]
operation: add
- type: rectangle
size: [24, 43]
anchor:
ref: 3autres_index1_4
shift: [14, -60]
operation: add
finalkey:
- plate
- platemirror
- type: keys
side: both
size: 18
operation: subtract
final:
- plate
- platemirror
- arduino
PCBS :
left:
outlines:
contours:
outline: plate
layer: Edge.Cuts
footprints:
- type: promicro
anchor:
rotate: -90
ref: 3autres_index1_4
shift: [25, -19.5]
right:
outlines:
contours:
outline: platemirror
layer: Edge.Cuts
footprints:
- type: promicro
anchor:
rotate: -90
ref: 3autres_index1_4
shift: [25, -19.5]
- type: jumper
anchor:
ref: mirror_3autres_index1_2
shift: [-10, 0]
nets:
from: P18
to: P20
both:
outlines:
contours:
outline: final
layer: Edge.Cuts
footprints:
- type: promicro
anchor:
rotate: -90
ref: 3autres_index1_4
shift: [25, -19.5]
#ligne L1 = P10 L2 = P16 L3 = P14 L4 = P15 L5 = P8 L6 = P9
#colones main gauche C1 = P1 C2 = P21 C3 = P20 C4 = P19 C5 = P18 #colones main droites C6 = P7 C7 = P8 C8 = P9 C9 = P10 C10 = P11
Si vous essayez de reproduire ceci et avez des problèmes avec Ergogen, n’hésitez pas a me contacter. J'ai suffisamment galéré avec ce truc pour que maintenant je puisse aider d'autres personnes. romain.tessier@etu.sorbonne-universite.fr