Skip to main content

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) : 

 

clavier-ergogen.png

 

 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 :

clavier-pcb.png

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