Il est possible d’interfacer Arduino avec l’ordinateur et le transformer en périphérique HID. Il est ainsi possible de transformer un Arduino en contrôleur d’ordinateur au même titre qu’une manette de jeu vidéo, un clavier d’ordinateur ou une souris.
Matériel
- Arduino UNO
- bouton poussoir (ou un 1 câble dupont)
Schéma
Dans ce tutoriel, nous allons utiliser une seule entrée pour tester le clavier et la configuration du périphérique HID. Nous plaçons donc un bouton poussoir entre la broche GND et la broche A0 de l’Arduino.

Vous pouvez utiliser un bouton pour chaque touche ou n’importe quel capteur pour créer votre propre contrôleur.
Code
Comme nous n’avons qu’un seul bouton, à chaque fois que nous appuyons dessus nous incrémentons la variable btnCount afin de modifier le caractère suivant qui sera afficher.
//azerty q b c d e f g h i j k l , n o p a r s t u v z x y w & é " ' ( - è _ ç à ) = ^ $ * No fr m ù ² ; : ! < //qwerty a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0 - = [ ] \ No US ; ' ` , . / No US //keycode 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, 45,46,47,48,49, 50, 51,52, 53, 54,55,56, 100}; uint8_t buf[8] = { 0 }; //Keyboard report buffer //Keypad const int btnPin = A0; int btnState=false,oldState=true; int btnCount=4; //Key code A-4 Z-29 void setup() { Serial.begin(9600); pinMode(btnPin,INPUT_PULLUP); } void loop() { sendKey(); } void sendKey() { /* function readAbtn */ //// Read button states from keypad getBtn(); if (btnState!=oldState and btnState==true) { buf[2] = btnCount++; // keycode Serial.write(buf, 8); // Send keypress releaseKey(); } if(btnCount>29) btnCount=4; oldState=btnState; } void getBtn() { /* function getABtn */ //// Read button states from keypad if (analogRead(btnPin) > 200) { btnState=false; } else { btnState=true; } delay(100); //anti-bounce delay } void releaseKey() { buf[0] = 0; buf[2] = 0; Serial.write(buf, 8); // Send Release key }
Pour simplifier le code et ne pas avoir à trouver les keycodes, vous pouvez utiliser la librairie Keyboard.h.
Configuration du périphérique HID
Pour transformer l’Arduino en périphérique HID, il faut modifier le code du port USB contrôler par l’ATmega16U2. Pour cela nous allons nous servir du logiciel Flip qui va nous permettre de changer le firmware du microprocesseur.
- Télécharger et installer le logiciel Flip

- Sélectionner le microprocesseur dans la liste proposée

- Faire un reset du port USB en reliant les deux pin du port ICSP
- Sélectionner Settings>Communication>USB Ctrl+U, puis cliquer sur « Open ».

- Charger le fichier Arduino-keyboard-0.3.hex dans File> Load HEX…, puis appuyer sur « Run »

Résultat
Une fois cela fait, débrancher puis rebrancher le port USB. Ouvrez un fichier texte. Lorsque vous appuyer sur le bouton, les caractères devraient s’afficher successivement. Vous remarquerez que les touches a,q,w,z sont inversé car le clavier est configuré en AZERTY.

Passer l’Arduino de périphérique HID à périphérique Série
Pour retrouver un fonctionnement normal de l’Arduino, on refait la manipulation avec le logiciel Flip mais à la place du fichier arduino-keyboard.hex on charge le fichier Arduino-usbserial-uno.hex.
Reset du port USB avec un pont entre les broches ICSP, puis charger le fichier hex puis appuyer sur « Run ».

Applications
- Créer un clavier ou un contrôleur de jeu vidéo avec Arduino
- Utiliser Arduino pour piloter un ordinateur automatiquement