Concevoir un clavier avec Arduino

Bonjour la communauté !

Depuis quelques temps je m'intéresse à cette étrange bestiole qu'est l'Arduino, et j'ai un projet en tête pour lequel j'aimerais connaître la faisabilité avec ce système.

J'aimerais concevoir un clavier un peu particulier.

Projet de départ

Le clavier que j'aimerais concevoir ne serait pas basé sur un modèle traditionnel AZERTY / QUERTY mais se rapprocherait beaucoup plus d'un modèle de ce genre :

Le but de ce clavier au look un peu exotique (et super vintage, je vous l'accorde) est de permettre un mode de saisie différent et supposément plus rapide, basé sur des combinaisons plutôt que sur du "lettre par lettre" comme nos claviers habituels.

Fonctionnement souhaité

Comme je disais, la grosse particularité c'est que ce clavier fonctionnerait grâce à des combinaisons de touches (ex : touche X + touche Y = écrit une syllabe).

Dans l'idée, il pourrait y avoir jusqu'à 6 touches pressées simultanément pour saisir certaines syllabes.

Plusieurs combinaisons seraient programmées manuellement et le clavier pourrait être branché via USB (et idéalement alimenté par ce biais).

NB : J'ai bien conscience du fait que lister et programmer toutes ces combinaisons sera long et barbant, mais étant développeur web de métier, je suis habituer à dérouler des lignes de code, disons que ça ne me fait pas peur :slight_smile:

Mes pistes

J'ai quelques notions d'électronique à dépoussiérer, mais je vous partage mes quelques recherches sur le sujet. Pardonnez-moi si je dis des énormités, comme précisé plus haut je débute totalement dans ce domaine, n'hésitez donc pas à me corriger si je me plante quelque part.

Tout d'abord, j'ai lu que le Leonardo était capable d'être détecté par un ordinateur comme périphérique USB sans avoir à coder de driver (source ici).

Ensuite, j'ai vu une vidéo dans laquelle quelqu'un utilise cette fonction (il assigne un bouton à une phrase - helloworld, qui se répète autant de fois qu'il appuie sur le bouton). La vidéo en question.

Si on part du fait que l'on puisse saisir du texte en pressant un bouton, logiquement il est aussi possible de saisir du texte en pressant deux boutons ou plus, non ?

Mes questions

En partant du principe qu'un tel clavier est réalisable, j'ai quelques questions :

Tout d'abord, le but de ce clavier étant de permettre une saisie rapide et réactive, est-ce que les capacités de l'Arduino sont suffisantes pour en faire un clavier utilisable en conditions réelles ?

Deuxièmement, est-ce qu'il me faut trouver des composants spécifiques à l'Arduino (je pense surtout aux touches de clavier) ou est-ce que n'importe quel mécanisme peut faire l'affaire ?

Troisièmement, sachant que je compte tester le système avec un prototype disposant d'environ 6 ou 7 touches, de quel matériel ai-je besoin ? J'ai listé très grossièrement (et sans compter le matériel de soudure) les éléments suivants pour me faire une idée :

  • Une carte Arduino (Leonardo à ce que j'ai compris)
  • Un câble pour relier la bête en USB
  • La "planche" pour le protoypage (breadboard, c'est bien ça ?)
  • Des résistances (oui mais.. lesquelles :stuck_out_tongue: )
  • Quelques touches de clavier pour tester la saisie (mécanisme + capot)

Voilà, vous savez tout ! J'espère avoir été clair au possible mais mon amateurisme dans le domaine m'empêche d'utiliser le jargon des connaisseurs, n'hésitez pas si vous avez des questions, des conseils ou même des corrections à m'apporter concernant ce projet ! :slight_smile:

Au plaisir de vous lire,

Julien

Bonsoir,

Sympa comme projet!

Avant tout, il serai intéressant de connaitre le type de câble qui équipe le clavier. Selon la technologie de l'époque, il doit y avoir un bus "data" qu'il suffirait de décoder avec l'arduino.

Salut Jambe, merci d'avoir pris le temps de me lire !

Juste pour clarifier, l'idée est de partir totalement de zéro et de fabriquer un clavier de A à Z (enfin un proto, pour commencer). La photo postée est là dans un but d'illustration seulement, je ne possède pas le clavier en question :slight_smile:

Sinon, pour tenter de répondre à ta question quand même, je pense que la techno utilisée par le fabricant est assez ancienne, les claviers n'ont même pas de câble USB, c'est du PS/2.

bonsoir
+1 avec la reponse de pepe

le vrai problème là est l'interfaçage clavier ET surtout la détection des touches detectées/activées/relachées "simultanément"

une fois ça parfaitement bien defini , le reste sera simple , pour la gestion "HID keyboard" tu peux aussi voir du coté de la pile V-USB , ça tourne entre autre sur de l'attiny85 , mais il faut préalablement correctement fournir !
AMHA , je pense qu'il faut déjà scinder ton projet en 2 parties :

  • acquisition des touches (quelles touches par unité de temps sont enfonçées/relachées )
  • transmission de l'info en HID keyboard/USB

In fine , ce ne doit pas être très loin d'une "gestion MIDI" du probleme

Bonsoir pepe, merci pour ta réponse très complète et ta confirmation concernant l'utilisation d'un modèle Leonardo ! J'étais donc sur la bonne voie malgré ce qu'on m'a dit sur Twitter, j'ai bien fait de m'inscrire ici :slight_smile:

Ton explication concernant la problématique liée à la simultanéité des frappes était très claire, ça m'aide à conceptualiser un peu plus l'idée dans ma tête.

Pour répondre à ta question, je compte tester le concept avec un clavier à moins de dix touches, mais le modèle final en comportera 52, donc la solution 3 semble être la plus appropriée.

Concernant les diodes, au risque de poser une question bête, quelle est leur utilité ? Mes derniers cours d'électronique remontent à un paquet d'années et j'ai tellement associé le terme "diode" aux LED (probablement à tort) que je ne comprends pas leur rôle dans tout ça :slight_smile:

Bonsoir Artouste, merci d'avoir pris le temps de me répondre ! Content de lire qu'une fois réglé le problème lié aux frappes simultanées le reste sera simple. Je trouve l'analogie avec un clavier MIDI très intelligente, en tant que musicien je suis familier de ce type d'appareil et effectivement, c'est très similaire !

D'après vous, est-ce que l'Arduino peut gérer la transmission de toutes ces informations (les frappes donc) sans latence ? L'idée étant d'optimiser la vitesse de frappe de l'utilisateur, si ce n'est pas fluide et en "temps réel" sur le moniteur, le plan tombe à l'eau :stuck_out_tongue:

punkpxl:
...
D'après vous, est-ce que l'Arduino peut gérer la transmission de toutes ces informations (les frappes donc) sans latence ?

Les lois de la physique "au moins encore à ce jour admises" :grin: , interdisent simplement "une absence de latence" de distribution .
Et donc ton problème maintenant est de caractériser "simplement quelle est/serait pour toi " une latence ...acceptable 8)

Merci pepe d'avoir pris le temps de me donner toutes ces explications ! Je comprends mieux maintenant :slight_smile:

Artouste:
Les lois de la physique "au moins encore à ce jour admises" :grin: , interdisent simplement "une absence de latence" de distribution .

Mea Culpa, c'est un abus de langage :grin:

Il faudrait que la bête soit aussi réactive qu'un clavier classique, à vrai dire.

J'aimerais qu'au moment où les touches sont relâchées la syllabe s'affiche à l'écran, aussi rapidement que les lettres apparaissent quand on écrit avec un clavier commun d'ordinateur, en somme.

Hello ! J'espère que vous avez tous passé un bon week-end :slight_smile:

Désolé pour le temps de réponse, le boulot ne me facilite pas la tâche pour avancer sur ce projet, mais bon, pas le choix !

Merci une fois de plus pepe pour toutes ces précisions ! Tu soulèves un point très intéressant, si j'ai bien compris le clavier se contente d'envoyer un code et généralement c'est le pilote du clavier ou un autre soft se charge de convertir le signal en caractères ?

Personnellement, je prévoyais justement que les combinaisons possibles soient à programmer dans le clavier lui-même et je t'avoue que je n'avais pas du tout réfléchi à tout ça sous cet angle. Est-ce que ça va poser problème et surtout, est-ce signifie que je vais devoir programmer un logiciel pour interpréter le signal envoyé par le clavier ? Ou l'Arduino peut bien être programmé pour gérer tout ça correctement ?

Encore une fois, merci beaucoup pepe. C'est vraiment sympa de ta part de prendre le temps de m'expliquer tout ça, étant réellement novice tu es d'une grande aide !

J'aimerais que le clavier fonctionne sans logiciel à installer sur l'ordinateur cible. Pour la petite histoire, le clavier que je souhaite monter devra fonctionner en mode "plug-and-play" sur n'importe quel ordinateur. Idéalement PC et Mac, enfin surtout PC, mais s'il peut aussi fonctionner sur Mac ce serait top, sachant que j'utilise les deux.

Quand tu parles de réglages, tu veux dire que je devrais reparamétrer l'Arduino chaque fois que je changerai de plate-forme ? Et si tel est le cas, est-ce que c'est faisable par le biais d'un switch ou éventuellement d'une touche dédiée à cette fonction (quitte à avoir un petit écran pour indiquer les paramètres actifs, ou une LED...) ?

Effectivement, le souci de la mémoire se pose. Je ne sais pas vraiment quantifier la taille du fichier de "configuration" quoi contiendra toutes les infos nécessaires, mais j'imagine qu'on peut étendre la mémoire d'une façon ou d'une autre, non ?

Je vais faire quelques recherches sur le fonctionnement d'un clavier histoire d'approfondir un peu toutes tes indications et consulter le code du fichier dont tu parles. Merci encore pepe !