Utilisateur:Jeff/atelier clavier

De Disposition de clavier bépo

Cette page est destinée à centraliser quelques ressources utiles pour se faire un clavier (voir http://forum.bepo.fr/viewtopic.php?id=776)

Il commence à y avoir beaucoup de monde qui veut se faire son propre clavier, c'est pas mal du tout. Dans les projets de status de l'association Ergodis il y a une petite note là dessus, il faudrait confirmer cet objectif, même si pour moi c'est plus fait à titre ludique quand dans un réel objectif d'ergonomie.

Objectif

La création d'un nouveau clavier peut être vu comme la continuité du travail sur l'ergonomie de la disposition sur un clavier standard.

L'objectif de cette page est de donner quelques orientations pour aider quelqu'un voulant se fabriquer ou modifier un clavier. Ce n'est pas un guide de construction pas à pas, l'objectif est d'assister la créativité, pas de la tuer.

Liens utiles, références

Généralité et référence

Avant de tout réinventer, il peut être utile de connaître quelques bases. L'exploration du site Bépo est une première étape, en particulier :

À ne pas rater

Forums dédiés aux claviers, principalement mécaniques :

Sites de "bricolage" électronique

Divers

Éléments techniques utiles

Exemples de réalisation

Attention

La chasse est ouverte !

Extérieures

Nom liens état remarque
humblehacker http://www.humblehacker.com/keyboard/ et http://geekhack.org/index.php?topic=6292.0. prototype
Chordite http://chordite.com prototype
Ergodox http://ergodox.org Commande groupées
Key64 http://www.key64.org/ prototype
XYNV http://deskthority.net/workshop-f7/the-xynv-keyboard-t40.html prototype clavier matriciel en deux parties
?? microswitchs http://mykeyboard.co.uk/microswitch/ prototype clavier a microswitchs
Komar https://github.com/komar007/ghkb prototype
steampunk input set http://deskthority.net/photos-videos-f8/steampunk-input-set-t3757.html prototype
numpad http://geekhack.org/index.php?topic=38963.90 prototype
Kmac http://deskthority.net/photos-videos-f8/kmac-updates-t2051.html commande groupée
clavier en deux partie http://www.thecraftstudio.com/bcboy/keyboard.html prototype
keyglove-wearable-input-device] http://www.kickstarter.com/projects/jrowberg/keyglove-wearable-input-device prototype funded
textskin http://www.kickstarter.com/projects/1780168636/textskin-game-controller-keyboard-at-your-fingerti prototype
Clavier recouvert de cuir http://deskthority.net/workshop-f7/dell-at102w-to-tenkeyless-mod-t5137.html prototype
Trackball intégrable au clavier http://deskthority.net/workshop-f7/custom-trackball-t4773.html prototype
Transformer une machine à écrire en clavier http://www.instructables.com/id/usb-typewriter/ industrialisé
Almost-A-Datahand http://geekhack.org/index.php?topic=10077.0 prototype
KeyPoard http://pyrolistical.github.com/blog/2012/08/11/full-custom-keypoard/ prototype
catboard http://geekhack.org/index.php?topic=38857.30 prototype
GH60 http://geekhack.org/index.php?topic=37570.0 prototype collaboratif

Au sein du site Bépo

par liens état remarque
Fauve TypeFauvix Concept
Robipo TypeRobix Concept
XavierC Fauvix Concept
Sinma Clavier_parfait Concept
Jeff Cladeon & Clavier bois Prototypes
Twal TWalErgo Concept

Avant projet

Cible

Est-ce que l'on veut créer la nouvelle référence mondiale en terme de forme de clavier, répondre à un besoin spécifique (handicap) ou juste faire un truc original ?

Il est utile de cerner l'objectif recherché. On ne fera pas le même clavier si l'on veut pouvoir :

  • travailler avec les pieds sur le bureau ;
  • taper ses mémoires en conduisant, ou en faisant du tapis roulant (vélo d'appartement...) ;
  • recopier un texte manuscrit que l'on veut placer entre les mains ;
  • réduire l'encombrement sur le bureau ;
  • faire le clavier le moins collègue-friendly possible ;
  • faire un clavier pédagogique pour enfant ;
  • ...

TODO Faire une petite note sur l'industrialisation, ses coûts, l'absence de marché hors besoins unitaires.

Nom du projet

Ou comment sortir des type-machin et des truc-ergo.

Formes

Forme globale

  • à plat, le plus classique
  • en bol mode Kinesis
  • monobloc / multibloc, «splité»
  • vertical
  • sous le clavier type alphagrip
  • autre, façon suka
  • par accord, chordite, gkos, Jellyfish

Forme des touches

  • personnelle
  • rond
  • carré
  • standard : voir cabochons ci-dessous

Adapter la taille et la forme des touches à leur position, fonction, leur éloignement, la capacité de précision du doigt concerné.

positionnement des touches

  • dessus/dessous
  • pédale
  • dental (ou incisif ?)
  • latéral
  • frontal
  • sous le pouce
  • au dessus des doigts (action par extension)
  • en retour sous les paumes
  • par appui des paumes
  • coup de poing (pour Ctrl alt Supp par exemple)

forme de disposition

  • décalé façon machine à écrire
  • orthogonal façon typematrix
  • «patte d'ours» façon ergodox
  • en éventail (les doigts s'écartent quand on ouvre la main)

outil de modélisation

TODO lien vers outil, vers tutorial, vers des exemples

Disposition

Forcément la disposition sera fonction de la forme du clavier, et probablement inversement.

outils

Logique de fonctionnement des touches

  • rôle des touches
    • envoi de commande
    • changement de layout
    • émission de caractères
    • changement état du clavier
  • logique des modificatrices
    • instable
    • stables
  • touches programmables
  • touche unique pour les parenthèses "()" et tous les signes ouvrant nécessitant un signe fermant (cf HP48)
  • touche unique pour dérouler les accents du dernier caractère saisi

Idées pour réalisation matérielle

Mode de prototypage

  • bois
  • tôle
  • pâte à modeler
  • pâte qui durcit à la cuisson (Fimo...)
  • pâte qui durcit en refroidissant (Shapelock...)

Types de touches

Il faudrait définir précisément ce qu'est un clavier. Dans un premier temps c'est un outil qui capte une action manuelle de l'utilisateur, l’interprète et la transmet à un ordinateur sous forme de commande ou de texte (c'est pas suffisant et ne permet pas de distinguer un clavier d'une souris, mais ça suffira pour la suite du paragraphe).

Les moyens techniques destinés à capter l'action de l'utilisateur peuvent être multiples. Le plus simple est l'interrupteur, mécanique ou optique pas exemple, mais on peut aussi envisager une surface capacitive, des accéléromètres, des potentiomètres ou des jauges de contrainte.

Interrupteur

Interrupteurs dédiés

Pour avoir un aperçu des différents interrupteurs existants, ou ayant été commercialisés, consulter la page List_of_all_keyboard_switches du wiki Deskthority. On peut citer en particulier :

  • Cherry MX et leur écosystème coloré, ML... ;
  • Matias Alps.

L'utilisation des switchs facilite la création d'un clavier, il suffit d'assembler les interrupteurs et de les câbler. (voir ci-dessous "fixation des switchs spécifiques")

TODO mettre les liens vers la documentation de référence de ces interrupteurs (dimensions, type de montage)

Interrupteurs standard

  • à bascule
  • instables Left thumb panel.jpeg

Interrupteurs spécifiques

  • DIP, surtout pour la configuration
  • roues codeuse (très pratiques si on veut avoir 10 «pages» programmées)
  • thumb hat sur les joysticks (4 ou 5 positions)
  • rotacteurs, interrupteurs rotatifs multipositions

membranes

Les membranes sont des simplifications d'interrupteurs, faciles à faire.

Les deux systèmes suivants peuvent être utilisés :

  • membrane à feuillet unique,Matrice a feuillet unique.jpg, la touche ferme le contact ;
  • membrane à trois feuillets, la pression fait le contact entre le circuit du dessus et le circuit du dessous Matrice 3 feuillets décalés.jpg Matrice 3 feuillets superposés.jpg. Les trous de la membrane intermédiaire peuvent être fait à l'emporte pièce.

Le circuit peut être réalisé en cuivre (voir ci-dessous) ou à la peinture conductrice (à tester).

Pour actionner les interrupteurs, il est possible d'utiliser des dômes en caoutchouc. Dans certains clavier, les dômes sont individuels et facilement utilisable Domes individuels.jpg. Pour adapter une touche c'est une autre affaire...

Optique

  • Interrupteurs par rupture de faisceau pour détection sans contact.
  • détecteur de proximité IR

Capacitif

Autres

  • potentiomètres : Un potentiomètre linéaire et un bouton => un clavier pour violoniste. C'est pas plus dur que ça.
  • jauges de contraintes
  • micro pour détection du lieu d'un frappe sur une surface
  • accéléromètres

Cabochons

Pour avoir de jolies touches, éventuellement avec des indications d'usage dessus. Les cabochons spécifiques aux interrupteurs cherry peuvent se trouver facilement (commandes groupées). Consulter la page Keycaps du wiki Deskthority.

Des cabochons pour interrupteurs cherry peuvent également être fait à la main (voir Utilisateur:Jeff/structure_bois#Test_de_cabochon_en_bois) :

Touche bois montage.jpg


Comment indiquer les caractères sur les cabochons ?

  • autocollant voir la page Autocollants
  • gravure (mécanique, laser)
  • décalcomanie et vernis (résistance ?)
  • pyrogravure

Processeur

Récupération

C'est la technique la plus simple pour débuter

Puces claviers PS2 .jpg

Il est possible de récupérer le circuit d'un vieux clavier, soit directement un circuit USB (le plus facile), soit un circuit PS2 qui sera ensuite adapté pour l'USB. Dans les deux cas, la logique est similaire, il s'agit de substituer la matrice d'origine par un câblage répondant à notre besoin (voir matrice plus bas). La photo de droite montre quelques exemples de puces PS2. Les plus anciennes, celles comportant des puces au format DIP comme à droite, sont les plus facile à réutiliser.

  • Si la structure globale du clavier est conservée, c'est à dire qu'il y a juste quelques touches à déplacer, un pontage direct peut être fait sur la matrice.
  • Si tout le clavier est refait, il faut constituer un tableau qui identifie pour chaque couple de pinoches du circuit le code de caractère émis. Lorsque la matrice adaptée est crée, il n'y a plus qu'à la connecter au circuit en respectant le tableau.
    Ps2 wiring.jpeg

Cette technique permet, par exemple, de faire très simplement un clavier bluetooth. Elle peut éviter d'avoir à programmer un microcontroleur pour ceux que la programmation rebute. Sauf à mettre de la logique entre la puce récupérée et l'ordinateur (voir ci-dessous) cette technique est cependant un peu limitée ; la logique du clavier d'origine est en effet conservée et il est rarement possible d'ajouter des touches.

En complément d'un processeur, elle permet de s'affranchir de l'achat de composants décrits ci-après.

microcontroleur / Platine de développement avec capacité HID

  • Teensy
  • Arduino Leonardo ou clone
  • stellaris launchpad. Pas encore testé
  • microcontroleur
  • autres exemples de solution controllers et Chameleon

Les outils de programmation des processeurs embarqués se sont beaucoup démocratisés, en particulier dans la lignée des outils Wiring et Arduino. Les compétences nécessaires sont maintenant relativement aisées à acquérir, même pour des non-informaticiens, et beaucoup d'exemples sont disponibles sur internet.

Éléments complémentaire

  • extension IO sur I2C (MCP23008, MCP23017)
  • registres à décalage
  • module bluetooth

Firmware

Les claviers USB ne sont pas des périphériques «unicode» qui définissent précisément à l'ordinateur le caractère à transmettre. La norme à conservé une compatibilité avec les anciens clavier et leur logique, le clavier envoie un code décrivant la touche appuyée (généralement en faisant référence à la position de la touche dans une disposition qwerty) et l'ordinateur l’interprète. La description des touches n'est pas identique pour tous les claviers. Ainsi, l'appui de la touche arobase d'un clavier spécial pour Mac connecté à un ordinateur window affichera un petit exposant 2.

Ce choix se justifie d'un point de vue industriel car les composants des claviers sont ainsi génériques (sauf les cabochons bien sûr) et seul le logiciel doit gérer l'internationalisation. C'est cependant un peu plus délicat si on veut juste se fabriquer un clavier multiplatformes sans avoir à toucher aux drivers.

Créer un clavier Bépo qui fonctionne à la place d'un clavier azerty aussi bien sur PC que sur MAC sans modification des paramètres de langue est faisable mais ça demande un peu de travail. Un interrupteur à bascule (DIP par exemple) permet dans ce cas de choisir le mode de fonctionnement du clavier (MAC, PC, Bépo, Azerty)


Une technique simple est d'enregistrer le mappage des touches dans des «pages» représentées dans le code par des tableaux. Les majuscules et les minuscules ont chacune une page.

En utilisant des tableaux de pointeurs, il est possible qu'une touche donne accès à un caractère, une chaine ou une fonction.

TODO exemple d'utilisation des pointeurs de fonctions

Teensy

Les différentes «pages» de configuration de touches prennent pas mal de place en RAM. Lorsqu'il y en a trop, ça dépasse la capacité du processeur qui donne des résultats imprédictibles. Il faut alors stocker ces pages dans la mémoire de programmation (PROGMEM) et utiliser des fonctions spéciales pour y accéder.

TODO exemple d'utilisation PROGMEM

USB

  • type de périphérique (clavier, joystick, souris, stockage)
  • codage des caractères

Lecture PS2

La lecture des trames PS2 d'une puce de clavier peut être réalisée grâce à la bibliothèque PS2Keyborard http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html . S'il ne s'agit pas de transmettre directement un code via le port USB, certaines adaptations peuvent être nécessaire.

TODO relire le code pour vérifier

Commande IO expander

Le code suivant est destiné à piloter un MCP23017 mais peut être facilement adapté pour les autres composants de la même famille. Ce sont des extensions de port commandées par un bus I2C. Pour piloter ce bus à partir d'un microcontroleur (teensy, arduino) la bibliothèque I2C.h (https://github.com/rambo/I2C) est un plus facile à utiliser que wire.h. C'est celle qui sera utilisée dans l'exemple ci après qui est donné à titre d'illustration, ce n'est pas un code fonctionnel.

Le schéma suivant est un exemple de montage destiné à illustrer le code qui suit (à confirmer avec un teensy 2.0, en fait seulement testé avec un teensy 2.0++)

Proposition cablage MCP23017.png.

Il faut d'abord définir les adresses spécifiques au MCP23017 (voir datasheet du composant )

#define IODIRA   0x00   // IO direction  (0 = output, 1 = input (Default))
#define IODIRB   0x01
#define IOPOLA   0x02   // IO polarity   (0 = normal, 1 = inverse)
#define IOPOLB   0x03
#define GPINTENA 0x04   // Interrupt on change (0 = disable, 1 = enable)
#define GPINTENB 0x05
#define DEFVALA  0x06   // Default comparison for interrupt on change (interrupts on opposite)
#define DEFVALB  0x07
#define INTCONA  0x08   // Interrupt control 
                        //(0 = interrupt on change from previous, 1 = interrupt on change from DEFVAL)
#define INTCONB  0x09
#define IOCON    0x0A   // IO Configuration: bank/mirror/seqop/disslw/haen/odr/intpol/notimp
//#define IOCON 0x0B  // same as 0x0A
#define GPPUA    0x0C   // Pull-up resistor (0 = disabled, 1 = enabled)
#define GPPUB    0x0D
#define INFTFA   0x0E   // Interrupt flag (read only) : (0 = no interrupt, 1 = pin caused interrupt)
#define INFTFB   0x0F
#define INTCAPA  0x10   // Interrupt capture (read only) : value of GPIO at time of last interrupt
#define INTCAPB  0x11
#define GPIOA    0x12   // Port value. Write to change, read to obtain value
#define GPIOB    0x13
#define OLLATA   0x14   // Output latch. Write to latch output.
#define OLLATB   0x15

On définit ensuite les adresses spécifique au montage. Ici le clavier comporte 48 touches, c'est suffisant pour un clavier en deux parties.

#define MCP23017_ADDR 0x20 // En fonction du cablage de ses pattes d'adresse, 
                           //le composant peut prendre son adresse de  0.20 à 0x27
#define MCP23017_ROW 6
#define MCP23017_COL 8
#define MCP23017_NB  MCP23017_ROW * MCP23017_COL

Le composant est ensuite initialisé avant sa première utilisation :

void init_mcp23_kbd(){
  // direction 
  I2c.write(MCP23017_ADDR,IODIRA,0x00); // le port A est utilisé comme sortie
  I2c.write(MCP23017_ADDR,IODIRB,0xFF); // le port B est utilisé comme entrée
  // enable pull-up on switches
  I2c.write(MCP23017_ADDR,GPPUB,0xFF); // pour détecter quand une touche est relachée
  // invert polarity
  I2c.write(MCP23017_ADDR,IOPOLA, 0xFF); // pour avoir un 1 quand la touche est enfoncée
  I2c.write(MCP23017_ADDR,IOPOLB, 0xFF); 
  // enable interrupts
  // (GPINTENA, 0xFF); // enable interrupts - both ports  // pour l'instant, pas d'utilisation des interruptions
  // no interrupt yet
  // keyPressed = false
  // read from interrupt capture ports to clear them
  // Read (INTCAPA);
  // Read (INTCAPB);
}

Ensuite la boucle active les rangs alternativement et lit le résultat sur les colonnes :

void loop_mcp23_kbd(){
  int index = 0 ;
  for (int i = 0;i<MCP23017_ROW; i++) { 
    I2c.write(MCP23017_ADDR,GPIOA,~(1<<i));
    I2c.read(MCP23017_ADDR,GPIOB,2); // (pourquoi 2 ?)
    int tot= I2c.receive();
    for (int j = 0;j<MCP23017_COL; j++) { 
      //code de gestion des touches
      if (tot & (1<<j) ) {          
         index = j*MCP23017_ADRR_ROW+i ;
         Serial.print("touche : ");  Serial.print(index); Serial.println(" appuyée ");  
      } 
    }
  }  
}

Commande registre à décalage

Pilotage écran

  • I2C
  • série
  • parallèle

Boite

Fixation des interrupteurs spécifiques

La fixation des interrupteurs peut se faire sur BCP ou sur plaque ajourée.

La fixation sur PCB est probablement la plus simple mais doit être réservée aux claviers plats (ou presque) Raw fingers panel.jpeg.

Pour une fixation sur plaque, pour une construction plus rigide ou suivant une forme non plane, différentes solutions sont envisageables :

Pour le treillis en bois, il doit être possible d'utiliser des baguettes de modélisme naval (3*5mm et 5*8mm). Pour des exemples par impression 3D, voir le travail de Suka sur DT.

Pour les plaques métalliques, perceuse et lime. Mais plutôt envisager une commande auprès d'un artisan spécialisé. Passer par une commande groupée pour baisser les coûts (se raccrocher à une commande existante ou en provoquer une).

Matériaux

  • bois
  • métal
  • plastique
    • impression 3D

Par exemple boite de clavier en bois ou Utilisateur:Jeff/structure_bois

Boite bois hetre face.jpg

Câblage

  • Diodes : pour la différence de complexité, ce n'est pas la peine de se priver. Sauf peut être lors d'un premier essai avec un puce PS2.
  • matrice
  • matrice suspendue, facile et efficace
  • Cherry PCB

Le cuivre adhésif en rouleau destiné à créer les vitraux tiffany permet de faire des pistes. C'est un matériaux souple, adhésif, soudable, très utile en fait. Ruban cuivre adhesif.jpg Contrairement à l'aluminium, le cuivre accroche la soudure classique à l'étain et ne requiert pas d'outillage sophistiqué. Soudure cuivre autocollant.jpg Utilisé pour faire des blindages électromagnétiques dans les guitares, il est donc vendu en plaques autocollantes par des magasins de musique comme chez Thomann.

« Attention à vos doigts, ça coupe » XavierC

Pour connecter de l'aluminium sans le souder, il est possible d'utiliser du vernis conducteur destiné à réparer les circuits de dégivrage automobile.

TODO Photo

Le principe du câblage d'une matrice d'interrupteur avec des diodes d'"antighosting" est le suivant :

Schema matrice clavier avec diodes.png

Pour une explication claire voir la page de Dave Dribin (#Éléments_techniques_utiles).

TODO Comment se faire un PCB / ou commander un PCB sur mesure (trouver rédacteur)

TODO Comment relier des parties en plusieurs parties ?

  • PS2 : 4 fils
  • I2C : 4 fils
  • bluetooth

Retours visuels

  • diodes
  • écran

référence pour la position des mains

  • ergots sous les index (point ou ligne)
  • cabochons avec une structure en relief : texturé ou ayant un marquage gravé en creux
  • autre solution ?

Système de pointage intégré

  • minijoystick
  • trackpoint
  • easypoint
  • touchpad
  • joystick

divers

  • récepteurs IR
  • HP
  • prise USB

Outillage

La difficulté est de faire la part des choses entre les différents types d'outillage :

  • celui qui est utile ;
  • celui dont on a besoin ;
  • celui dont on rêve ;
  • celui dont on ne se servira qu'une fois.

On peut résumer à :

  • celui qu'on a ;
  • celui qu'on n'a pas.

Il est souvent plus pertinent de sous-traiter certains travaux ou de faire avec les moyens du bord.

Ce qui peut toujours servir :

  • un fer à souder ;
  • un multimètre ;
  • ...

Autres :

  • perceuse colonne
  • fraiseuse
  • découpe laser
  • défonceuse
  • plieuse à tôle
  • poinçonneuse
  • station de soudage
  • oscilloscope
  • mortaiseuse

Accessoires

Emballage

Pour transporter son clavier :

idées de récupération

  • Il est possible de trouver des switchs dans certains vieux claviers. Vérifier leur valeur avant de les démonter, c'est toujours dommage de détruire une pièce de collection.
  • interrupteurs dans les équipement électroniques (magnétoscopes...)
  • puces PS2 ou USB provenant de vieux clavier
  • nappes de disque dur
  • câble téléphone / RJ45
  • leds (attention cependant à leurs tensions d'utilisation)
  • tôles