• Mail !
  • Le projet UÈYÉO

    Ueyeo est un projet de clavier sur mesure, avec mains séparées, touches en pattes d'ours et contrôle de la souris. Le nom de ce projet vient de la disposition provisoire des symboles qui lui est attachée. L'accent est mis sur le confort (d'un point de vue purement subjectif) et non sur la vitesse. Mais il s'agit surtout d'essayer certains traits des claviers dits ergonomiques afin d'en tirer des conclusions pour de futurs projets.

    Il s'agit en effet de mon premier projet de ce genre (je commence à rédiger ceci en attendant la livraison de mon fer à souder !), basé sur les nombreuses informations, exemples et références trouvées en premier lieu sur le wiki et le forum du site bepo.fr et en suivant les liens qu'on y trouve. Un grand merci à tous ceux qui se reconnaitront, pour leur travail et le partage en général. :) Pour un débutant absolu cela représente une bonne quantité de lecture, dans des domaines variés (éléctronique, programmation en C, étude des matériaux, conception, 3D, etc.) mais rien d'insurmontable pour un noob motivé et patient !

     

    * Evolution du projet

     

     

    * Cahier des charges et partis pris

  • Usages : Rédaction en français et d'autres langues, développement web, graphisme, console (tty). L'ordre d'importance de ces usages variant d'une saison à l'autre. Raccourcis claviers pour les applications et gestionnaires de fenetres (Awesome, Openbox, Ratpoison). Utilisation de vim et autres programmes vim-like (luakit, vimperator, etc.). Utilisation de LaTex, Lilypond. Perspective d'en faire un clavier midi si possible. Un des objectifs est d'abolir la souris.
  • Mains séparées pour pouvoir poser devant soi un livre, des documents, une table traçante, une assiette un cendrier ou ce qu'on voudra, mais pouvoir enfin poser des trucs sur cette "table", sans qu'ils menacent de tomber des qu'on bouge ou qu'on cherche la souris !
  • Une souris intégrée justement, trackball, joystick, ou trackpoint. Certainement pas un trackpad.
  • Un maximum de caractères en accès direct, donc beaucoup de touches pour chaque main (2 x 48).
  • Symétrie des modificateurs : Ctrl, Alt, Shift, AltGr, Gui (=Super/Windows/Pomme)
  • Touches d'édition vers le centre, aux index (Return, Tab, Space, Backspace, Esc).
  • Un microcontrolleur teensy2 parce que c'est plus facile pour commencer.
  • Programmable, multicouches, doit pouvoir avoir le même fonctionnement sur tous les systèmes d'exploitation.
  • Il ne faut pas que ça coute trop cher, récupération, matériaux simples, pas de circuit imprimé ni d'impression 3D (pour l'instant !).
  • Léger et facilement transportable, pour un usage nomade. Encombrement à négocier entre le confort partout et les contraintes du transport et de l'installation.
  •  

    * Connaissances à acquérir ou améliorer

  • Electronique : théorie, composants, microcontroleurs
  • Langage C : structure, typage, compilation
  • Logiciels : graphisme vectoriel et design 3D (inkscape, blender, libreCAD)
  •  

    * Matériel et équipement

    Indispensable :
    Fer à souder (panne de 0,5mm), tresse et/ou pompe à dessouder, fil à souder (0,5mm), pince coupante, plaque d'essais (et cables qui vont avec), multimètre, calibre à coulisse, cutter, cables,

    Très utile (mais je n'en ai pas) :
    Pince à dénuder, pistolet à air chaud, pince à découper la tôle, perceuse.

     

    * Composants et matériaux

    J'ai eu la chance de retrouver au grenier un Apple Extended Keyboard II, le dernier clavier mécanique distribué par Apple, en 1995. J'en ai récupéré les rupteurs (Cream Alps) et les capuchons. Ces derniers conditionnent donc fortement la disposition des touches adoptée, en particulier au niveau des pouces et des index. Mais ils me permettent de ne pas avoir à m'occuper d'en acheter ou d'en fabriquer. L'AEKII est peut-être une pièce de collection, et il serait possible de le réhabiliter (en USB) en lui conservant son design vintage, mais il est trop encombrant et il ne servirait à personne ici. Autant le reconvertir en quelque chose d'utile.

    - 96 rupteurs (cream alps) 13x16mm recyclage
    - 96 touches 9x12mm recyclage
    - 96 diodes N4148 16<25 $
    - un joystick de pouce < 5 $
    - un microcontrôleur usb (teensy2.0) 20 $
    - cables fins
    - prise mini-usb mâle
    - embase usb femelle
    - cable en nappe recyclage
    - cable usb standard (mâle/mâle) recyclage
    - peinture, carton fort (1,5mm) récupération

    Je ne compte pas les frais de ports, répartis sur d'autres composants qui n'apparaissent pas ici. Ayant eu recours à deux fournisseurs (PJRC pour teensy et GoTronic pour le reste), en une seule commande par fournisseur les frais de port représenteraient environ 15 euros.

    Avec un peu de patience on peut aussi rassembler les diodes nécessaires en recyclant de vieux appareils. De même pour les connecteurs usb et les cables.

     

    * Touches et rupteurs

    Après avoir dessoudé les touches du circuit imprimé je dispose de mes 96 touches et rupteurs. Un peu de nettoyage, puis test de chaque rupteur avec une LED pour vérifier que tout fonctionne correctement.

     

    Ici, il s'agit de la touche CapsLock, particulière à l'AEKII en ce qu'elle est verrouillable.

    J'ai du revenir sur les premières touches dessoudées pas très proprement, mais après une demi-douzaine on commence à prendre le coup de main.

     

    * Disposition des touches, fonctionnalités

    La disposition des touches est provisoire et sera programmée et peaufinée en fin de projet, mais il est nécessaire d'envisager les choix principaux à ce stade, dans la mesure où ils peuvent avoir des conséquences sur le schéma de la matrice (nombre de colonnes et de rangées). Et surtout sur les options à prendre dans l'écriture du firmware.

     

    On peut désormais commencer à dessiner l'emplacement des trous dans la plaque de suspension.

     

    * Test du microcontroleur avec une seule touche

    A partir du code de Suka, TMK pour une seule touche (https://github.com/tmk/tmk_keyboard/tree/master/keyboard/onekey).

     

     

    * Test des raccordements et du firmware avec quatre touches

    Je n'étais pas très sûr de la façon de souder la matrice, ni de comment la raccorder au microcontroleur. Ici, les broches D0 et D1 sont en sortie (output) et envoient donc un signal éléctrique aux rangées, successivement. B0 et B1 sont en entrée (input) et reçoivent le signal en provenance d'une colonne si une touche y est enfoncée.

     

    Je dois dire que ça fait plaisir quand ça marche.
    Seulement c'est à partir de maintenant que va se poser le problème des keycodes et des partis à prendre dans l'élaboration du firmware. Un gros morceau.

    Je continue donc les tests sur quatre touches pour trouver un système qui permette de gérer 5 modificateurs et plusieurs couches (avec un objectif de 8 couches de 4 niveaux).

    Je cherche en même temps des possibilités d'envoyer n'importe quel caractère unicode, sans doute à partir d'un utilitaire (un pilote sur mesure) installé sur l'hôte. Un module kernel ?
    Pistes :
    http://www.freedesktop.org/wiki/Software/unicode-translation/
    http://fribidi.org/

    Noter que sur Debian (et les autres systèmes GNU/Linux certainement) les keycodes envoyés par le firmware sont transposés dans la dispo de l'hôte définie pour la console et non par le système X. Par exemple, sur ma machine principale, j'ai activé une disposition personnelle (byfok) en utilisant setxkbmap. Celle-ci n'est valable que pour le serveur graphique X et les applications qui en dépendent. Les tty, restent dans la disposition par défaut définie dans /etc/default/keyboard à savoir le bépo dans mon cas.
    Ce n'est donc pas la disposition courante qui est utilisée mais celle écrite « en dur » dans les fichiers de configuration au niveau du système.

     

    * Plateau de suspension des rupteurs

    Avant de passer aux tests sur une moitié de clavier, il faut préparer soigneusement le plateau dans lequel s'inséreront les rupteurs, car une fois ces derniers soudés on ne voudra plus revenir là-dessus avant un moment.

    Je reste sur le choix d'utiliser du carton. Ce sera peint à la glycéro pour donner de l'imperméabilité, et si ça s'avére trop souple, je soutiendrai les rupteurs par dessous avec des entretoises fixées sur le fond.

     

    * Tests du firmware sur un demi-clavier (48 touches)

    Pour les tests précédents (une et quatre touches) j'ai utilisé le code de Suka, TMK (https://github.com/tmk/tmk_keyboard), sans avoir à modifier grand-chose. Mais ce code utilise le qwerty comme disposition de base, et considère que c'est la disposition active sur la machine hôte. Or je veux pouvoir utiliser mon clavier sur des OS variés (Linux, tty, Windows et MacOS) qui sont susceptibles d'être configurés avec trois dispositions différentes, à savoir Azerty, Bépo et une disposition personnelle (Byfok). Eventuellement (à l'installation de nouveau systèmes par exemple) il peut être utile de pouvoir s'adapter au qwerty.

    Le code de jeff pour Cladeon semble répondre en partie à cette question, du moins devrait ouvrir des perspectives. Malgré mon niveau très grand débutant en C, je vais essayer de faire la synthèse de TMK et Cladeon et d'y ajouter mes propres solutions aux problèmes que je me pose.

    Par ordre de priorité :
    - Gestion de 5 modificateurs symétriques : Ctrl, Shift, Alt, AltGr et Gui (Super).
    - Comportement (sous OS Debian) identique en Azerty, Bépo, Byfok et Qwerty (gestion d'un switch ?).
    - Contrôle clavier des boutons (et mouvements) de la souris en couche NUM.
    - Contrôle du joystick.
    - Portabilité sur les autres OS principaux (gestion d'un switch ?).
    - Entre 1 et 5 couches supplémentaires avec des touches de fonction (Fn0-4).
    Un microcontrôleur teensy 2.0 n'y suffira vraisemblablement pas, mais j'ai sous la main une teensy 3.1 qui devrait faire l'affaire question mémoire et nombre de broches.

    Dans la définition de l'usage des claviers USB (http://www.usb.org/developpers/devclass_docs/Hut1_11.pdf pages 53-60) on voit que l'on dispose d'environ 220 keycodes. Parmi les problèmes qui se posent il y a : - les lettres accentuées
    - les touches mortes
    - AltGr et Alt symétriques

     

    * Communication entre les deux demi-claviers

    TODO

    Raccord direct (provisoire ?) avec une nappe.
    Firmware 96 touches
    96 touches plus joystick
    cable VGA 15 broches ?
    i2c ? chercher des exemples de solutions

     

    * Habillage

    TODO