« Utilisateur:Jeff/atelier clavier » : différence entre les versions
m (mise à jour de mon pseudo) |
|||
(54 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{ | {{note|type=attention|Cette page n'est plus d'actualité, elle est remplacée par [[Atelier_presentation|cette page sur le site principal]] }} | ||
Cette page est destinée à centraliser quelques ressources utiles pour se faire un clavier. | 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. | 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. | ||
Ligne 6 : | Ligne 6 : | ||
=Objectif= | =Objectif= | ||
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. | 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= | =Liens utiles, références= | ||
==Généralité et référence== | ==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 : | |||
* [[En_savoir_plus|En savoir plus]] | * [[En_savoir_plus|En savoir plus]] | ||
* [[Ergonomie|Ergonomie]] | * [[Ergonomie|Ergonomie]] | ||
Ligne 27 : | Ligne 29 : | ||
==Divers== | ==Divers== | ||
*[http://www.reddit.com/r/mechanicalkeyboards reddit.com/r/mechanicalkeyboards] et [http://www.reddit.com/r/keyboards/ reddit.com/r/keyboards/], en particulier pour les liens sur la droite des pages. Ça permet surtout de tomber sur des trucs du genre [http://imgur.com/vFsOejp Clavier en bambou] | *[http://www.reddit.com/r/mechanicalkeyboards reddit.com/r/mechanicalkeyboards] et [http://www.reddit.com/r/keyboards/ reddit.com/r/keyboards/], en particulier pour les liens sur la droite des pages. Ça permet surtout de tomber sur des trucs du genre [http://imgur.com/vFsOejp Clavier en bambou] | ||
* Présentation de Jesse (DT, GH): [http://fr.slideshare.net/obrajesse/2013-osdcmadeakeyboard So, I made a keyboard] | |||
==Éléments techniques utiles== | ==Éléments techniques utiles== | ||
Ligne 32 : | Ligne 35 : | ||
*USB | *USB | ||
*I2C | *I2C | ||
*PS2 | *PS2 (par exemple commencer par http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html#details) | ||
*Infra-rouge (par exemple commencer par http://www.pjrc.com/teensy/td_libs_IRremote.html) | |||
=Exemples de réalisation = | =Exemples de réalisation = | ||
Ligne 75 : | Ligne 79 : | ||
|- | |- | ||
| Almost-A-Datahand || http://geekhack.org/index.php?topic=10077.0 || prototype || | | 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 || | |||
|- | |||
|Hornet || http://deskthority.net/workshop-f7/codename-hornet-t4488.html|| prototype || | |||
|} | |} | ||
==Au sein du site Bépo== | ==Au sein du site Bépo== | ||
{| border="1" | {| border="1" | ||
|- | |- | ||
! liens !! état !! remarque | ! par !! liens !! état !! remarque | ||
|- | |- | ||
| [[TypeFauvix]] || Concept|| | | [[Utilisateur:Fauve|Fauve]] || [[TypeFauvix]] || Concept||différents collaborateurs successifs ont enrichi ce projet | ||
|- | |- | ||
| [[TypeRobix]] || Concept|| | | [[Utilisateur:Robipo|Robipo]]|| [[TypeRobix]] || Concept|| | ||
|- | |- | ||
| [[Utilisateur:XavierC| XavierC]] || Concept|| | | [[Utilisateur:XavierC| XavierC]]|| [[Utilisateur:XavierC| 1+1=10]] || Concept||placement des touches grossièrement testé sur un clavier orthogonal | ||
|- | |- | ||
| [[Utilisateur: | | [[Utilisateur:Ariasuni|ariasuni]] ||[[Utilisateur:Ariasuni/Clavier_parfait|Clavier parfait]] || Concept|| | ||
|- | |- | ||
| [[Utilisateur:Jeff/cladeon|Cladeon]] || Prototypes|| | | [[Utilisateur:Jeff|Jeff]]|| [[Utilisateur:Jeff/cladeon|Cladeon et Cellovier]] & [[Utilisateur:Jeff/structure_bois|Clavier bois]]|| Prototypes|| | ||
|- | |- | ||
| [[Utilisateur:TWal/TWalErgo|TWalErgo]] || Concept|| | | [[Utilisateur:TWal|Twal]] || [[Utilisateur:TWal/TWalErgo|TWalErgo]] || Concept|| | ||
|- | |||
| [[Utilisateur:Robin|Robin]] || [[Utilisateur:Robin/proto_moussix|Proto_moussix]] || Concept|| | |||
|} | |} | ||
=Avant projet= | =Avant projet= | ||
==Cible== | ==Cible== | ||
Ligne 107 : | Ligne 121 : | ||
* faire un clavier pédagogique pour enfant ; | * 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== | ==Nom du projet== | ||
Ou comment sortir des type-machin et des truc-ergo. | Ou comment sortir des type-machin et des truc-ergo. | ||
==Outils d'aide à la conception== | |||
Les outils suivants peuvent être pertinents en phase de conception. Dans la mesure du possible, des liens vers des documentations, des tutoriaux et des exemples sont indiqués : | |||
*papier crayon ; | |||
*[http://inkscape.org/?lang=fr Inkscape] pour diffuser son travail au format SVG ; | |||
** http://screencasters.heathenx.org | |||
*http://fritzing.org/ pour modéliser un circuit électronique ; | |||
*http://www.kicad-pcb.org pour la réalisation de circuit intégrés ; | |||
*[http://librecad.org libreCAD] dessin industriel ou [http://www.3ds.com/fr/produits-et-services/draftsight/ Draftsight] ; | |||
*[http://www.blender.org/ Blender] modélisation 3D. | |||
Pour des formes un peu complexes, il peut être utile de faire un maquettage en grandeur réelle : | |||
*pâte fimo / pâte à modeler ; | |||
*papier mâché ; | |||
*carton plié. | |||
==Formes== | ==Formes== | ||
Il n'y a pas de réelle limite à la forme que peut avoir un clavier. Au delà du conformisme et de l'utilisabilité, tout un champ de possible est ouvert à la fantaisie. | |||
===Forme globale=== | ===Forme globale=== | ||
*à plat, le plus classique | *à plat, le plus classique, droit, en vague ; | ||
*en bol mode Kinesis | *en bol mode Kinesis ; | ||
*monobloc / multibloc, «splité» | *monobloc / multibloc, «splité», zone spécifique pour les pouces ; | ||
*vertical | *vertical ; | ||
*sous le clavier type alphagrip | *sous le clavier type alphagrip ; | ||
*par accord, chordite, gkos, Jellyfish ; | |||
*par accord, chordite, gkos, Jellyfish | *autre, façon suka ; | ||
*totalement différent ([[Utilisateur:Jeff/cladeon#Cellovier|violoncelle]], curseur 2D ou 3D). | |||
=== | ===Nombre de touches === | ||
*complet | |||
*tenkeyless | |||
*réduit | |||
*multiplication des touches (cf clavier multimédia) | |||
*Réduction ([http://deskthority.net/workshop-f7/a-reduced-matrix-layout-for-ergodox-kinesis-maltron-etc-t4820.html “a reduced matrix layout…”]) | |||
===Positionnement des touches=== | |||
*dessus/dessous | *dessus/dessous | ||
*pédale | *pédale | ||
Ligne 133 : | Ligne 172 : | ||
*coup de poing (pour Ctrl alt Supp par exemple) | *coup de poing (pour Ctrl alt Supp par exemple) | ||
=== | ===Disposition des touches=== | ||
[[Image:Formes_disposition_touches.png|400px|right|Exemples de formes de disposition des touches]] | |||
L'image suivante résume quelques idées de disposition des touches : | |||
Ce ne sont que quelques exemples de disposition possibles, il manque par exemple l'alignement pur de type piano : | |||
* | *décalé façon machine à écrire ; | ||
* | *orthogonal façon typematrix ou [[Utilisateur:Jeff/ortho]] ; | ||
*«patte d'ours» façon ergodox | |||
* | *en éventail (les doigts s'écartent quand on ouvre la main) ; | ||
*tentative de composite ([[Utilisateur:Jeff/cladeon#V2]]). | |||
* | |||
* | |||
==Types de touches== | ==Types de touches== | ||
Ligne 195 : | Ligne 201 : | ||
TODO mettre les liens vers la documentation de référence de ces interrupteurs (dimensions, type de montage) | TODO mettre les liens vers la documentation de référence de ces interrupteurs (dimensions, type de montage) | ||
Il existe également un projet pour reproduire les interrupteurs à doigt 5 positions utilisés dans les claviers Datahand ([http://geekhack.org/index.php?topic=41422.0 Re-Create the datahand - first babystep]) | |||
====Interrupteurs standard ==== | ====Interrupteurs standard ==== | ||
Ligne 204 : | Ligne 211 : | ||
*thumb hat sur les joysticks (4 ou 5 positions) | *thumb hat sur les joysticks (4 ou 5 positions) | ||
*rotacteurs, interrupteurs rotatifs multipositions | *rotacteurs, interrupteurs rotatifs multipositions | ||
==== | ====Membranes==== | ||
Les membranes sont des simplifications d'interrupteurs, faciles à faire | Les membranes sont des simplifications d'interrupteurs, faciles à faire mais peut-être plus délicates à intégrer dans un montage que des interrupteurs dédiés. | ||
====Optique==== | ====Optique==== | ||
*Interrupteurs par rupture de faisceau pour détection sans contact. | *Interrupteurs par rupture de faisceau pour détection sans contact. C'est le procédé utilisé pour les molettes de souris. | ||
*détecteur de proximité IR | *détecteur de proximité IR | ||
===Capacitif=== | ===Capacitif=== | ||
*Utilisation de touchpad, | *Utilisation de touchpad, | ||
Ligne 227 : | Ligne 227 : | ||
*micro pour détection du lieu d'un frappe sur une surface | *micro pour détection du lieu d'un frappe sur une surface | ||
*accéléromètres | *accéléromètres | ||
==Cabochons == | |||
==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é. | |||
==Disposition== | |||
Forcément la disposition sera fonction de la forme du clavier, et probablement inversement. L'adaptation des algorithmes d'optimisation avec des claviers très originaux peut être délicate et peu rentable. | |||
Même s'il a une forme très originale ([http://bepo.fr/wiki/Utilisateur:Jeff/cladeon#cellovier cellovier]), il apparait que l'on se fait très rapidement à un clavier basé sur une disposition bépo. | |||
==Référence pour la position des mains== | |||
*ergots sous les index (point ou ligne). Utilisé principalement sur les familles de cabochons à empreinte cylindrique (la forme moderne) | |||
*empreinte plus creuse que les autres touches. Utilisé sur les familles de cabochons à empreinte sphérique (la forme ancienne) | |||
*structure texturée [http://wasdkeyboards.com/index.php/textured-cherry-mx-keycaps.html/ (exemple chez WASD)] | |||
*granulosité différente (surface plus ou moins lisse) | |||
*hauteur ou inclinaison différente de la surface (rangée ou famille différente) | |||
*empreinte différente (cylindrique/sphérique) | |||
==Logique de fonctionnement des touches== | |||
*rôle des touches | |||
**envoi de commande ("imprime écran") | |||
**changement de couche/layout ("Maj") | |||
**émission de caractères ("A") | |||
**changement état du clavier (paramétrage lent/rapide, bépo/azerty) | |||
*logique des modificatrices | |||
**instable ("Ctrl") | |||
**stables ("Caps lock") | |||
**instable avec double clic pour bascule | |||
*touches programmables | |||
*touche unique pour les parenthèses "()" et tous les signes ouvrant nécessitant un signe fermant (cf HP48 ou [[Utilisateur:XavierC| 1+1=10]]) | |||
*touche unique pour dérouler les accents du dernier caractère saisi | |||
*clavier à accord | |||
**complet du type Chordite | |||
**mixte : un clavier fonctionnant de façon usuelle mais l'appui de plusieurs touches simultanées permet de donner accès à des caractères ou des fonctions spécifique (pas seulement les touches shift, alt...). On pourrait avoir par exemple : | |||
a+e => "æ" o+e => "œ" t+n => "tion" t+m => "ment" i+q => "ique" i+e => "aire" e+l => "elle" t+e => "ement" | |||
a+n => "ation" m+e => "omme" p+r => "pour" l+r => "leur" e+u => "euse" | |||
b+r => "Bonjour" c+t => "Cordialement," ... ... | |||
==Intégration de fonctions complémentaires== | |||
===Retours visuels=== | |||
*diodes | |||
*écran | |||
===Système de pointage intégré=== | |||
*minijoystick | |||
*trackpoint | |||
*easypoint | |||
*touchpad | |||
*joystick | |||
===Divers === | |||
*récepteurs IR | |||
*lecteur de carte | |||
*rotacteur de défilement (alt-tab, vol+/- | |||
*détection de présence | |||
*détection d'ambiance (T°, vibration, luminosité) | |||
*lecteur carte | |||
*prise USB | |||
*prise jack audio/micro | |||
*HP | |||
*... | |||
==Emballage== | |||
Pour transporter son clavier : | |||
*[http://deskthority.net/photos-videos-f8/custom-keyboardbag-t5159.html Custom keyboardbag par KennyR] | |||
*[[Utilisateur:Jeff/pochette_typematrix|Pochette Typematrix 2030]] | |||
=Idées pour une 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...) | |||
*polystyrène extrudé | |||
*logiciel de conception 3D et impression 3D. | |||
==Boite== | |||
===Matériaux=== | |||
* bois | |||
* métal | |||
* plastique | |||
** impression 3D | |||
Par exemple [http://deskthority.net/post101728.html#p101728 boite de clavier en bois], [[Utilisateur:Jeff/TKL#R.C3.A9sultat]] ou [[Utilisateur:Jeff/structure_bois]] | |||
[[Fichier:Boite_bois_hetre_face.jpg|600px]] | |||
==Interrupteurs== | |||
===Membranes=== | |||
Les deux systèmes suivants peuvent être utilisés : | |||
* membrane à feuillet unique,[[Fichier:Matrice_a_feuillet_unique.jpg|100px]], la touche ferme le contact ; | |||
* membrane à trois feuillets, la pression fait le contact entre le circuit du dessus et le circuit du dessous [[Fichier:Matrice_3_feuillets_d%C3%A9cal%C3%A9s.jpg|100px]] [[Fichier:Matrice_3_feuillets_superpos%C3%A9s.jpg|100px]]. 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). | |||
TODO ajouter photo essai clavier à membrane | |||
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 [[Fichier:Domes_individuels.jpg|100px]]. Pour adapter une touche c'est une autre affaire... | |||
===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). | 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 [http://deskthority.net/wiki/Category:Keycaps Keycaps] du wiki Deskthority. | Consulter la page [http://deskthority.net/wiki/Category:Keycaps 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]]) : | |||
[[Fichier:Touche_bois_montage.jpg|200px]] | |||
Comment indiquer les caractères sur les cabochons ? On peut envisager : | |||
*autocollant voir la page [[Marquer_son_clavier#Autocollants|Autocollants]] ; | |||
*gravure (mécanique, laser) ; | |||
*décalcomanie et vernis (résistance ?) ; | |||
*pyrogravure. | |||
===Fixation des interrupteurs spécifiques=== | |||
Selon le type d'interrupteur, leur fixation peut se faire sur PCB (circuit imprimé) 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) et il faut trouver un circuit imprimé suffisamment grand. [[Fichier:Raw_fingers_panel.jpeg|100px]] ou le faire soi-même en partant d'une plaque époxy ou bakélite vierge (voir la partie cablage). | |||
Pour une fixation sur plaque, pour une construction plus rigide ou suivant une forme non plane, différentes solutions sont envisageables : | |||
*sur plaque métallique, acier, inox ou alu ([[Utilisateur:Jeff/ortho#essais_de_d.C3.A9coupage_de_plaque|exemples]]); | |||
*sur plaque en PVC ou en plexiglass, si on ne veut pas percer du métal et que l'on veut une pouvoir former la plaque ([http://deskthority.net/workshop-f7/codename-hornet-t4488.html Hornet]) ; | |||
*impression 3D (voir le travail de Suka sur DT) | |||
*[http://deskthority.net/workshop-f7/cutting-keyboard-plates-phantom-etc-t2444.html#p51184 support cherry MX par treillis en bois] | |||
*[http://deskthority.net/workshop-f7/my-diy-keyboard-collection-or-how-i-became-a-kb-geek-t2534-60.html#p100916 support de switch dans du contre plaqué] | |||
Pour le treillis en bois, il doit être possible d'utiliser des baguettes de modélisme naval (3*5mm et 5*8mm). | |||
Pour les plaques métalliques, perceuse et lime. Mais plutôt envisager une commande auprès d'un artisan spécialisé pour une découpe par poinçonnage, laser ou jet d'eau (voir [[Utilisateur:Jeff/ortho]]). Passer par une commande groupée pour baisser les coûts (se raccrocher à une commande existante ou en provoquer une). | |||
Voir ce fil de discussion (https://geekhack.org/index.php?topic=47744.0) pour obtenir les modèles d'ouvertures adaptés aux différents interrupteurs. | |||
Pour les Cherry MX, il est possible d'adapter la forme des trous pour pouvoir ouvrir l'interrupteur sans le dessouder. | |||
Le découpage est cependant plus complexe et plus couteux. | |||
==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 une puce PS2 de récupération. | |||
*matrice | |||
*[http://geekhack.org/index.php?topic=20898.0 matrice suspendue], facile et efficace | |||
*[http://deskthority.net/workshop-f7/designing-a-cherry-pcb-t3416.html Cherry PCB] il est aussi possible de partir d'une plaque d'essai. | |||
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. [[Fichier:Ruban_cuivre_adhesif.jpg|100px]] | |||
Contrairement à l'aluminium, le cuivre accroche la soudure classique à l'étain et ne requiert pas d'outillage sophistiqué. [[Fichier:Soudure_cuivre_autocollant.jpg|100px]] | |||
Utilisé pour faire des blindages électromagnétiques dans les guitares, il est donc vendu en plaques autocollantes par des magasins de musique comme chez [http://www.thomann.de/fr/goeldo_el900_profi_shield_screen.htm Thomann]. | |||
« Attention à vos doigts, ça coupe » [[Utilisateur:XavierC|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 : | |||
[[Fichier:Schema_matrice_clavier_avec_diodes.png|300px]] | |||
Pour une explication claire voir la page de Dave Dribin ([[#Éléments_techniques_utiles]]). | |||
Comment | Pour un nombre restreint de touches, il est aussi possible de se passer de matrice et de diodes si le microcontroleur utilisé possède au minimum autant de ports entrée/sortie numériques que de touches désirées. Dans ce contexte, il suffit de relier chaque interrupteur à un seul port qui lui sera dédié et de le connecter à la masse de l'autre côté. Il n'y a ainsi aucun ghosting possible. Évidemment, il faut programmer le controleur différemment et un circuit récupéré sur un vieux clavier ne fonctionnera pas pour ce type de montage. | ||
* | |||
* | TODO Comment se faire un PCB / ou commander un PCB sur mesure (trouver rédacteur) | ||
* | *plaque cuivrée brute à graver ou à passer au bain en ayant appliqué un vernis protecteur | ||
* | *plaque à insuler (necessite une boite à insulation, artisanale ou non, et pas mal de tests) | ||
*sites qui proposent de fabriquer ses propres circuits imprimés, impose souvent d'organiser une commande groupée pour atteindre le minimum d'unité à produire et/ou un prix à l'unité décent. | |||
TODO Comment relier les claviers en plusieurs parties ? | |||
*interface PS2 : 4 fils | |||
*interface I2C : 4 fils | |||
*interface sans fil (Bluetooth, ZigBee,… ) Nécessite une source d'alimentation secondaire. | |||
*cablage brut via une nappe IDE ou cable multibrin (hdmi ou Péritel pour ajouter la sécurité du blindage) : un fil pour chaque port entrée/sortie utilisé. | |||
*faire les parties avec chacune leur controleur indépendant (éventuellement brancher le tout sur un Hub qui peut être contenu à l'intérieur d'une de ces parties) | |||
==Processeur== | ==Processeur== | ||
=== Récupération === | Le bloc processeur peut se décomposer en trois parties : | ||
* la partie détection, l'interface avec la matrice pour identifier les touches appuyées ; | |||
* la partie traitement qui traduit les appuis en fonctions ; | |||
* la partie transmission qui transmets la fonction sous une forme compatible avec l'ordinateur. | |||
TODO images exemples | |||
En fonction de la forme du clavier, des capacités du microcontroleur, des choix de développements, ces trois parties peuvent être réalisées par une seule puce ou par des circuits distincts. | |||
Pour un clavier en plusieurs parties, afin de limiter les câblages, il peut être intéressant d'intégrer une part du traitement de détection dans chacune des parties du clavier (voir I2C). | |||
Si le contrôleur choisi n'a pas de capacité native I2C et un nombre limité de ports, l'utilisation de registre à décalage pour la partie détection pourra être privilégiée. | |||
===Récupération === | |||
{{note|type=note|C'est la technique la plus simple pour débuter}} | {{note|type=note|C'est la technique la plus simple pour débuter}} | ||
[[Fichier:Puces_claviers_PS2_.jpg|100px|right]] | [[Fichier:Puces_claviers_PS2_.jpg|100px|right]] | ||
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 | Il est possible de récupérer le circuit d'un vieux clavier, soit directement un circuit USB (le plus facile, la puce fait alors la détection, le traitement et la transmission), soit un circuit PS2 (qui ne fera que la partie détection, le traitement et la transmission étant alors réalisés par un microcontroleur voir [[Utilisateur:Jeff/atelier_clavier#Lecture_PS2|Lecture_PS2]]). | ||
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 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.[[Fichier: | [[Fichier:DellAT102_resultback.jpg|400px]] | ||
*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. | |||
[[Fichier:Jeff-clavier-ortho-grabwood-dessous.png|400px]] | |||
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. | 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. | ||
=== microcontroleur / Platine de développement avec capacité HID === | |||
* Teensy | * Teensy | ||
* Arduino Leonardo ou clone | * Arduino Leonardo ou clone | ||
Ligne 259 : | Ligne 445 : | ||
* microcontroleur | * microcontroleur | ||
* autres exemples de solution [http://deskthority.net/workshop-f7/all-about-custom-keyboard-controllers-t2340.html#p44786 controllers] et [http://deskthority.net/wiki/Chameleon_keyboard_controller Chameleon] | * autres exemples de solution [http://deskthority.net/workshop-f7/all-about-custom-keyboard-controllers-t2340.html#p44786 controllers] et [http://deskthority.net/wiki/Chameleon_keyboard_controller Chameleon] | ||
Pour une utilisation dans un environnement informatique courant, il y a deux modes de connexion entre le clavier et l'ordinateur, l'USB/HID et le bluetooth. Utiliser un microcontroleur utilisant directement l'un de ces deux standards permet de faciliter le développement. La connexion via USB/HID est relativement fréquente (teensy), la capacité bluetooth impose généralement l'ajout de composants complémentaires (voir plus bas). | |||
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. | 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. | ||
Une solution de facilité est l'utilisation du teensy2++ qui permet d'éviter de se poser des questions, cette platine est suffisamment complète pour couvrir la majorité des besoins (sauf bluetooth). | |||
* Arduino : | |||
** pour : relativement répandu, environnement de développement | |||
** contre : cout, encombrement et seul Leonardo a une capacité native USB/HID | |||
=> s'orienter vers un clone ? | |||
*Teensy | |||
** pour : support natif USB/HID, compatibilité Arduino, taille réduite | |||
** contre : peu disponible en france, coût relativement élevé et aucun modèle ne propose de trous pour des vis/boulons de montage (tient uniquement par ses soudures à un circuit imprimé) | |||
** 2.0, 2.0++, 3.0 ? fonction du besoin. 2.0++ est un bon compromis, cependant un peu plus grand que la 2.0. Si la question de la taille n'est pas critique c'est la solution à privilégier. | |||
*Stellaris launchpad | |||
** pour : coût | |||
** contre : taille, Pas encore d'exemple disponible, environnement de développement | |||
*Microcontroleur seul | |||
** pour : coût | |||
** contre : il faut des compétences électroniques pour l'intégrer à un circuit et bien souvent ce sont des composants de surface assez délicats à souder. | |||
=== Éléments complémentaire === | === Éléments complémentaire === | ||
Ligne 272 : | Ligne 479 : | ||
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. | 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 | 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 pilotes. | ||
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) | 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) Il existe cependant des limitations : Les caractères doivent être disponibles dans le pilote azerty de l'ordinateur hôte. | ||
---- | ---- | ||
Ligne 283 : | Ligne 490 : | ||
TODO exemple d'utilisation des pointeurs de fonctions | TODO exemple d'utilisation des pointeurs de fonctions | ||
===TMK=== | |||
Pour programmer un microcontrolleur sans réinventer la roue, le mieux est de se reporter à un projet existant. [https://github.com/tmk/tmk_keyboard TMK] est relativement complet et flexible, il devrait pouvoir être adapté à la majorité des projet. La documentation est relativement claire, elle est à lire avant de se lancer dans un projet de développement. | |||
===Teensy=== | ===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 | 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évus. Il faut alors stocker ces pages dans la mémoire de programmation (PROGMEM) et utiliser des fonctions spéciales pour y accéder. La Tensy 2++ ou 3 ont une mémoire vive plus importante qui peut éviter l'utilisation de PROGMEM. | ||
TODO exemple d'utilisation PROGMEM | TODO exemple d'utilisation PROGMEM | ||
Ligne 291 : | Ligne 502 : | ||
===USB=== | ===USB=== | ||
*type de périphérique (clavier, joystick, souris, stockage) | *type de périphérique (clavier, joystick, souris, stockage) | ||
*codage des | *codage des caractères | ||
===Lecture PS2=== | ===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 === | ===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 plus facile à utiliser que wire.h. C'est donc 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++) | |||
[[Fichier:Proposition_cablage_MCP23017.png|400px]]. | |||
=== | Il faut d'abord définir les adresses spécifiques au MCP23017 (voir [http://ww1.microchip.com/downloads/en/devicedoc/21952b.pdf datasheet du composant] ) | ||
<pre> | |||
#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 | |||
</pre> | |||
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. | |||
<pre> | |||
#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 | |||
</pre> | |||
Le composant est ensuite initialisé avant sa première utilisation : | |||
<pre> | |||
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); | |||
} | |||
</pre> | |||
Ensuite la boucle active les rangs alternativement et lit le résultat sur les colonnes : | |||
<pre> | |||
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 "); | |||
} | |||
} | |||
} | |||
} | |||
</pre> | |||
===Commande registre à décalage === | |||
===Pilotage écran=== | |||
*I2C | |||
*série | |||
*parallèle | |||
== | |||
* | |||
* | |||
* | |||
=Outillage= | =Outillage= | ||
Ligne 379 : | Ligne 609 : | ||
Il est souvent plus pertinent de sous-traiter certains travaux ou de faire avec les moyens du bord. | Il est souvent plus pertinent de sous-traiter certains travaux ou de faire avec les moyens du bord. | ||
Il faut aussi bien évaluer l'utilisation d'un outil avant achat : Pour une utilisation ponctuelle, le bas de gamme peut suffir. | |||
Ce qui peut toujours servir : | Ce qui peut toujours servir : | ||
*un fer à souder ; | *un fer à souder, pompe ou tresse à dessouder, une éponge sèche en laiton (ça coûte que dalle et c'est bien mieux qu'une éponge normale); | ||
*un multimètre ; | *un multimètre ; | ||
* | *un tournevis avec plein d'embouts (utile pour la réparation et le désossage de matériel électronique); | ||
*une mini-perçeuse multifonction (pas obligé de taper dans du Dremel) | |||
*… | |||
Autres : | Autres : | ||
*perceuse colonne | *perceuse à colonne (il existe des colonnes pour y fixer sa perceuse à main, c'est pas très cher et ça fonctionne plutôt bien) | ||
*fraiseuse | *fraiseuse | ||
*découpe laser | *découpe laser | ||
*défonceuse | *défonceuse | ||
*plieuse à tôle | *plieuse à tôle | ||
*poinçonneuse | *poinçonneuse | ||
*station de soudage | *station de soudage, de dessoudage (pratique pour récupérer des composants), station à air chaud… | ||
*oscilloscope | *oscilloscope | ||
*mortaiseuse | *mortaiseuse | ||
*imprimante 3D | |||
* | |||
=idées de récupération= | =idées de récupération= | ||
Ligne 409 : | Ligne 637 : | ||
*câble téléphone / RJ45 | *câble téléphone / RJ45 | ||
*leds (attention cependant à leurs tensions d'utilisation) | *leds (attention cependant à leurs tensions d'utilisation) | ||
*tôles | *tôles (carcasse d'électroménager : magnétoscope, lave-linge) |
Dernière version du 23 juillet 2017 à 03:07
Cette page n'est plus d'actualité, elle est remplacée par cette page sur le site principal
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
- reddit.com/r/mechanicalkeyboards et reddit.com/r/keyboards/, en particulier pour les liens sur la droite des pages. Ça permet surtout de tomber sur des trucs du genre Clavier en bambou
- Présentation de Jesse (DT, GH): So, I made a keyboard
Éléments techniques utiles
- matriçage des interrupteurs (http://www.dribin.org/dave/keyboard/one_html/)
- USB
- I2C
- PS2 (par exemple commencer par http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html#details)
- Infra-rouge (par exemple commencer par http://www.pjrc.com/teensy/td_libs_IRremote.html)
Exemples de réalisation
Extérieures
Au sein du site Bépo
par | liens | état | remarque |
---|---|---|---|
Fauve | TypeFauvix | Concept | différents collaborateurs successifs ont enrichi ce projet |
Robipo | TypeRobix | Concept | |
XavierC | 1+1=10 | Concept | placement des touches grossièrement testé sur un clavier orthogonal |
ariasuni | Clavier parfait | Concept | |
Jeff | Cladeon et Cellovier & Clavier bois | Prototypes | |
Twal | TWalErgo | Concept | |
Robin | Proto_moussix | 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.
Outils d'aide à la conception
Les outils suivants peuvent être pertinents en phase de conception. Dans la mesure du possible, des liens vers des documentations, des tutoriaux et des exemples sont indiqués :
- papier crayon ;
- Inkscape pour diffuser son travail au format SVG ;
- http://fritzing.org/ pour modéliser un circuit électronique ;
- http://www.kicad-pcb.org pour la réalisation de circuit intégrés ;
- libreCAD dessin industriel ou Draftsight ;
- Blender modélisation 3D.
Pour des formes un peu complexes, il peut être utile de faire un maquettage en grandeur réelle :
- pâte fimo / pâte à modeler ;
- papier mâché ;
- carton plié.
Formes
Il n'y a pas de réelle limite à la forme que peut avoir un clavier. Au delà du conformisme et de l'utilisabilité, tout un champ de possible est ouvert à la fantaisie.
Forme globale
- à plat, le plus classique, droit, en vague ;
- en bol mode Kinesis ;
- monobloc / multibloc, «splité», zone spécifique pour les pouces ;
- vertical ;
- sous le clavier type alphagrip ;
- par accord, chordite, gkos, Jellyfish ;
- autre, façon suka ;
- totalement différent (violoncelle, curseur 2D ou 3D).
Nombre de touches
- complet
- tenkeyless
- réduit
- multiplication des touches (cf clavier multimédia)
- Réduction (“a reduced matrix layout…”)
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)
Disposition des touches
L'image suivante résume quelques idées de disposition des touches :
Ce ne sont que quelques exemples de disposition possibles, il manque par exemple l'alignement pur de type piano :
- décalé façon machine à écrire ;
- orthogonal façon typematrix ou Utilisateur:Jeff/ortho ;
- «patte d'ours» façon ergodox
- en éventail (les doigts s'écartent quand on ouvre la main) ;
- tentative de composite (Utilisateur:Jeff/cladeon#V2).
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)
Il existe également un projet pour reproduire les interrupteurs à doigt 5 positions utilisés dans les claviers Datahand (Re-Create the datahand - first babystep)
Interrupteurs standard
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 mais peut-être plus délicates à intégrer dans un montage que des interrupteurs dédiés.
Optique
- Interrupteurs par rupture de faisceau pour détection sans contact. C'est le procédé utilisé pour les molettes de souris.
- détecteur de proximité IR
Capacitif
- Utilisation de touchpad,
- matrices capacitive en utilisant les ports Capacitive Touch des MCP430 (MSP430_Low_Cost_PinOsc_Capacitive_Touch_Keypad)
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
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é.
Disposition
Forcément la disposition sera fonction de la forme du clavier, et probablement inversement. L'adaptation des algorithmes d'optimisation avec des claviers très originaux peut être délicate et peu rentable.
Même s'il a une forme très originale (cellovier), il apparait que l'on se fait très rapidement à un clavier basé sur une disposition bépo.
Référence pour la position des mains
- ergots sous les index (point ou ligne). Utilisé principalement sur les familles de cabochons à empreinte cylindrique (la forme moderne)
- empreinte plus creuse que les autres touches. Utilisé sur les familles de cabochons à empreinte sphérique (la forme ancienne)
- structure texturée (exemple chez WASD)
- granulosité différente (surface plus ou moins lisse)
- hauteur ou inclinaison différente de la surface (rangée ou famille différente)
- empreinte différente (cylindrique/sphérique)
Logique de fonctionnement des touches
- rôle des touches
- envoi de commande ("imprime écran")
- changement de couche/layout ("Maj")
- émission de caractères ("A")
- changement état du clavier (paramétrage lent/rapide, bépo/azerty)
- logique des modificatrices
- instable ("Ctrl")
- stables ("Caps lock")
- instable avec double clic pour bascule
- touches programmables
- touche unique pour les parenthèses "()" et tous les signes ouvrant nécessitant un signe fermant (cf HP48 ou 1+1=10)
- touche unique pour dérouler les accents du dernier caractère saisi
- clavier à accord
- complet du type Chordite
- mixte : un clavier fonctionnant de façon usuelle mais l'appui de plusieurs touches simultanées permet de donner accès à des caractères ou des fonctions spécifique (pas seulement les touches shift, alt...). On pourrait avoir par exemple :
a+e => "æ" o+e => "œ" t+n => "tion" t+m => "ment" i+q => "ique" i+e => "aire" e+l => "elle" t+e => "ement" a+n => "ation" m+e => "omme" p+r => "pour" l+r => "leur" e+u => "euse" b+r => "Bonjour" c+t => "Cordialement," ... ...
Intégration de fonctions complémentaires
Retours visuels
- diodes
- écran
Système de pointage intégré
- minijoystick
- trackpoint
- easypoint
- touchpad
- joystick
Divers
- récepteurs IR
- lecteur de carte
- rotacteur de défilement (alt-tab, vol+/-
- détection de présence
- détection d'ambiance (T°, vibration, luminosité)
- lecteur carte
- prise USB
- prise jack audio/micro
- HP
- ...
Emballage
Pour transporter son clavier :
Idées pour une 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...)
- polystyrène extrudé
- logiciel de conception 3D et impression 3D.
Boite
Matériaux
- bois
- métal
- plastique
- impression 3D
Par exemple boite de clavier en bois, Utilisateur:Jeff/TKL#R.C3.A9sultat ou Utilisateur:Jeff/structure_bois
Interrupteurs
Membranes
Les deux systèmes suivants peuvent être utilisés :
- membrane à feuillet unique,, la touche ferme le contact ;
- membrane à trois feuillets, la pression fait le contact entre le circuit du dessus et le circuit du dessous . 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).
TODO ajouter photo essai clavier à membrane
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 . Pour adapter une touche c'est une autre affaire...
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) :
Comment indiquer les caractères sur les cabochons ? On peut envisager :
- autocollant voir la page Autocollants ;
- gravure (mécanique, laser) ;
- décalcomanie et vernis (résistance ?) ;
- pyrogravure.
Fixation des interrupteurs spécifiques
Selon le type d'interrupteur, leur fixation peut se faire sur PCB (circuit imprimé) 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) et il faut trouver un circuit imprimé suffisamment grand. ou le faire soi-même en partant d'une plaque époxy ou bakélite vierge (voir la partie cablage).
Pour une fixation sur plaque, pour une construction plus rigide ou suivant une forme non plane, différentes solutions sont envisageables :
- sur plaque métallique, acier, inox ou alu (exemples);
- sur plaque en PVC ou en plexiglass, si on ne veut pas percer du métal et que l'on veut une pouvoir former la plaque (Hornet) ;
- impression 3D (voir le travail de Suka sur DT)
- support cherry MX par treillis en bois
- support de switch dans du contre plaqué
Pour le treillis en bois, il doit être possible d'utiliser des baguettes de modélisme naval (3*5mm et 5*8mm).
Pour les plaques métalliques, perceuse et lime. Mais plutôt envisager une commande auprès d'un artisan spécialisé pour une découpe par poinçonnage, laser ou jet d'eau (voir Utilisateur:Jeff/ortho). Passer par une commande groupée pour baisser les coûts (se raccrocher à une commande existante ou en provoquer une).
Voir ce fil de discussion (https://geekhack.org/index.php?topic=47744.0) pour obtenir les modèles d'ouvertures adaptés aux différents interrupteurs.
Pour les Cherry MX, il est possible d'adapter la forme des trous pour pouvoir ouvrir l'interrupteur sans le dessouder. Le découpage est cependant plus complexe et plus couteux.
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 une puce PS2 de récupération.
- matrice
- matrice suspendue, facile et efficace
- Cherry PCB il est aussi possible de partir d'une plaque d'essai.
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. Contrairement à l'aluminium, le cuivre accroche la soudure classique à l'étain et ne requiert pas d'outillage sophistiqué. 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 :
Pour une explication claire voir la page de Dave Dribin (#Éléments_techniques_utiles).
Pour un nombre restreint de touches, il est aussi possible de se passer de matrice et de diodes si le microcontroleur utilisé possède au minimum autant de ports entrée/sortie numériques que de touches désirées. Dans ce contexte, il suffit de relier chaque interrupteur à un seul port qui lui sera dédié et de le connecter à la masse de l'autre côté. Il n'y a ainsi aucun ghosting possible. Évidemment, il faut programmer le controleur différemment et un circuit récupéré sur un vieux clavier ne fonctionnera pas pour ce type de montage.
TODO Comment se faire un PCB / ou commander un PCB sur mesure (trouver rédacteur)
- plaque cuivrée brute à graver ou à passer au bain en ayant appliqué un vernis protecteur
- plaque à insuler (necessite une boite à insulation, artisanale ou non, et pas mal de tests)
- sites qui proposent de fabriquer ses propres circuits imprimés, impose souvent d'organiser une commande groupée pour atteindre le minimum d'unité à produire et/ou un prix à l'unité décent.
TODO Comment relier les claviers en plusieurs parties ?
- interface PS2 : 4 fils
- interface I2C : 4 fils
- interface sans fil (Bluetooth, ZigBee,… ) Nécessite une source d'alimentation secondaire.
- cablage brut via une nappe IDE ou cable multibrin (hdmi ou Péritel pour ajouter la sécurité du blindage) : un fil pour chaque port entrée/sortie utilisé.
- faire les parties avec chacune leur controleur indépendant (éventuellement brancher le tout sur un Hub qui peut être contenu à l'intérieur d'une de ces parties)
Processeur
Le bloc processeur peut se décomposer en trois parties :
- la partie détection, l'interface avec la matrice pour identifier les touches appuyées ;
- la partie traitement qui traduit les appuis en fonctions ;
- la partie transmission qui transmets la fonction sous une forme compatible avec l'ordinateur.
TODO images exemples
En fonction de la forme du clavier, des capacités du microcontroleur, des choix de développements, ces trois parties peuvent être réalisées par une seule puce ou par des circuits distincts.
Pour un clavier en plusieurs parties, afin de limiter les câblages, il peut être intéressant d'intégrer une part du traitement de détection dans chacune des parties du clavier (voir I2C).
Si le contrôleur choisi n'a pas de capacité native I2C et un nombre limité de ports, l'utilisation de registre à décalage pour la partie détection pourra être privilégiée.
Récupération
C'est la technique la plus simple pour débuter
Il est possible de récupérer le circuit d'un vieux clavier, soit directement un circuit USB (le plus facile, la puce fait alors la détection, le traitement et la transmission), soit un circuit PS2 (qui ne fera que la partie détection, le traitement et la transmission étant alors réalisés par un microcontroleur voir Lecture_PS2).
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.
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.
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
Pour une utilisation dans un environnement informatique courant, il y a deux modes de connexion entre le clavier et l'ordinateur, l'USB/HID et le bluetooth. Utiliser un microcontroleur utilisant directement l'un de ces deux standards permet de faciliter le développement. La connexion via USB/HID est relativement fréquente (teensy), la capacité bluetooth impose généralement l'ajout de composants complémentaires (voir plus bas).
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.
Une solution de facilité est l'utilisation du teensy2++ qui permet d'éviter de se poser des questions, cette platine est suffisamment complète pour couvrir la majorité des besoins (sauf bluetooth).
- Arduino :
- pour : relativement répandu, environnement de développement
- contre : cout, encombrement et seul Leonardo a une capacité native USB/HID
=> s'orienter vers un clone ?
- Teensy
- pour : support natif USB/HID, compatibilité Arduino, taille réduite
- contre : peu disponible en france, coût relativement élevé et aucun modèle ne propose de trous pour des vis/boulons de montage (tient uniquement par ses soudures à un circuit imprimé)
- 2.0, 2.0++, 3.0 ? fonction du besoin. 2.0++ est un bon compromis, cependant un peu plus grand que la 2.0. Si la question de la taille n'est pas critique c'est la solution à privilégier.
- Stellaris launchpad
- pour : coût
- contre : taille, Pas encore d'exemple disponible, environnement de développement
- Microcontroleur seul
- pour : coût
- contre : il faut des compétences électroniques pour l'intégrer à un circuit et bien souvent ce sont des composants de surface assez délicats à souder.
É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 pilotes.
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) Il existe cependant des limitations : Les caractères doivent être disponibles dans le pilote azerty de l'ordinateur hôte.
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
TMK
Pour programmer un microcontrolleur sans réinventer la roue, le mieux est de se reporter à un projet existant. TMK est relativement complet et flexible, il devrait pouvoir être adapté à la majorité des projet. La documentation est relativement claire, elle est à lire avant de se lancer dans un projet de développement.
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évus. Il faut alors stocker ces pages dans la mémoire de programmation (PROGMEM) et utiliser des fonctions spéciales pour y accéder. La Tensy 2++ ou 3 ont une mémoire vive plus importante qui peut éviter l'utilisation de PROGMEM.
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 plus facile à utiliser que wire.h. C'est donc 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++)
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
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. Il faut aussi bien évaluer l'utilisation d'un outil avant achat : Pour une utilisation ponctuelle, le bas de gamme peut suffir.
Ce qui peut toujours servir :
- un fer à souder, pompe ou tresse à dessouder, une éponge sèche en laiton (ça coûte que dalle et c'est bien mieux qu'une éponge normale);
- un multimètre ;
- un tournevis avec plein d'embouts (utile pour la réparation et le désossage de matériel électronique);
- une mini-perçeuse multifonction (pas obligé de taper dans du Dremel)
- …
Autres :
- perceuse à colonne (il existe des colonnes pour y fixer sa perceuse à main, c'est pas très cher et ça fonctionne plutôt bien)
- fraiseuse
- découpe laser
- défonceuse
- plieuse à tôle
- poinçonneuse
- station de soudage, de dessoudage (pratique pour récupérer des composants), station à air chaud…
- oscilloscope
- mortaiseuse
- imprimante 3D
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 (carcasse d'électroménager : magnétoscope, lave-linge)