Télécommandez votre ordinateur avec un Arduino

L’Arduino Leonardo ressemble beaucoup à son grand frère (l’Arduino Uno). Mais, il possède un avantage supplémentaire. Il est reconnu comme un périphérique USB.

Arduino Léonardo

En ajoutant un récepteur infrarouge et une télécommande, il est possible de fabriquer un clavier, une souris ou une manette de jeu télécommandés.

Télécommande et capteur infrarouge VS1838B

Quel intérêt, me direz-vous ?

Et bien, s’il vous arrive de regarder les vidéos de votre ordinateur depuis votre canapé, vous avez dû remarquer qu’il manque un accessoire pourtant bien pratique : la télécommande.
Je vous propose donc de remédier à ce petit problème.

Pour réduire la taille du récepteur infrarouge, j’ai remplacé l’Arduino Leonardo par un Arduino Pro Micro qui possède exactement les mêmes caractéristiques, car il est équipé du même microcontrôleur : l’ATMEGA32U4. Il possède un peu moins de ports disponibles, mais cela ne pose absolument pas de problèmes (pour ce projet).

Arduino Leonardo et Arduino Pro Micro

Branchement du capteur infrarouge

Attention, le schéma correspond à un capteur infrarouge de type VS1838B, si vous utilisez un autre modèle, l’ordre des pins peut être différent (il faudra donc vérifier et adapter le schéma).

Concernant, l’Arduino, c’est généralement le port n°11 qui est connecté au capteur infrarouge. Mais comme il n’est pas disponible sur l’Arduino Pro Micro, je l’ai donc remplacé par le port n°2 (Vous pouvez en choisir un autre, mais il faudra en tenir compte dans le code).

Schéma de branchement du capteur infrarouge VS1838B

J’ai soudé le capteur directement sur l’Arduino, avec de la gaine thermorétractable (pour éviter les cours-circuits).

Soudure du capteur infrarouge VS1838B directement sur l'Arduino Pro Micro

Installation de la bibliothèque IRremote

Pour que l’Arduino puisse recevoir les signaux infrarouges de la télécommande, il faut ajouter la bibliothèque IRremote.
Pour cela, lancez l’IDE Arduino et dans les menus, sélectionnez Croquis – Inclure une bibliothèque – Gérer les bibliothèques. Ensuite, recherchez « IRremote » et cliquez sur Installer.

Installation de la bibliothèque IRremote

Décodage des touches de la télécommande

Tout d’abord, il faut bien comprendre le principe de fonctionnement d’une télécommande infrarouge. Chaque touche envoie un message différent. Il s’agit d’un signal infrarouge (invisible à l’oeil nu) que le capteur est capable de détecter. C’est un peu comme si vous envoyiez un message en morse avec une lampe de poche (mais c’est beaucoup plus rapide).

Mais le langage utilisé peut être différent d’une télécommande à l’autre. Cela permet par exemple de ne pas éteindre la télévision en essayant de fermer les volet. Pour utiliser votre télécommande, il faut donc connaitre le protocole de communication (le langage) qu’elle utilise, ainsi que le signal (le message) des touches qui nous intéressent.

Pour cela, lancez l’IDE Arduino et ouvrez le fichier IRrecvDump que vous trouverez dans Fichier -Exemples – IRremote – IRrecvDump.

Attention, si vous n’avez pas connecté le capteur infrarouge au port n°11, n’oubliez pas de modifier le numéro de port (n°2 pour moi).

Modification du port du capteur

Ensuite, téléversez le code dans l’Arduino et ouvrez le moniteur série.

Pointez la télécommande en direction du capteur, appuyez sur les boutons (que vous souhaitez utiliser) et notez le code qui s’affiche.

Par exemple, j’appuie plusieurs fois de suite sur la touche « 1 », mais le résultat obtenu est un peu surprenant. Le signal envoyé par la télécommande (entouré en rouge) est soit « 401 », soit « 10401 » (les autres informations qui s’affichent dans le moniteur série ne seront pas utilisées dans ce tuto).

Test de la touche "1"

Avec la touche « 2 », c’est pareil, le signal alterne entre « 402 » et « 10402 »  .

Test de la touche "2"

D’autres télécommandes envoient toujours le même signal (avec la même touche). Pour le savoir, il suffit simplement de tester…

À titre indicatif, voilà le résultat de mes tests, mais si vous ne possédez pas exactement la même télécommande, vos codes seront certainement différents.

Les codes de ma télécommande

On/Off : 4C7 et 104C7
Menu : 4D1 et 104D1
Display : 40F et 1040F
Haut : 458 et 10458
Bas : 459 et 10459
Gauche : 45A et 1045A
Droite : 45B et 1045B
OK : 45C et 1045C
Title : 483 et 10483
Setup : 482 et 10482
Prev : 421 et 10421
Next : 420 et 10420
Play/Pause : 42C et 1042C
Stop : 431 et 10431
Mute : 40D et 1040D
0 : 400 et 10400
1 : 401 et 10401
2 : 402 et 10402

9 : 409 et 10409
Subtitle : 44B et 1044B
Audio : 44E et 1044E
Zoom : 4F7 et 104F7
Repeat : 41D et 1041D
Repeat A-B : 43B et 1043B

Raccourcis clavier des lecteurs de vidéo

Les raccourcis suivants sont plutôt standard. Il fonctionnent avec la plupart des lecteurs vidéo. Mais, si vous avez besoin d’autres combinaisons de touche, rien ne vous empêche d’adapter le code.

VLC, Youtube et Netflix
QuitterALT + F4
PauseEspace
Couper le sonm
Mettre/Sortir du
plein écran
f
Monter le sonFlèche H
Baisser le sonFlèche B
Reculer de
10 secondes
Flèche G
Avancer de
10 secondes
Flèche D

Touches du clavier

Pour simuler l’appui sur une touche du clavier, il faut utiliser l’instruction Keyboard.press(0x« code ASCII de la lettre »). Le préfixe 0x indique qu’il s’agit d’un nombre hexadécimal. Par exemple, pour mettre la lecture en pause, il faut appuyer sur la barre s’espace du clavier dont le code ASCII hexadécimal est 20. Il faut donc taper la commande suivante :

Keyboard.press(0x20); // Espace

La liste des principaux caractères est disponible ici et les autres touches sont ici.

Attention, si votre système est configuré pour un clavier AZERTY (c’est généralement le cas, en France), certaines touches sont inversées (aq zw ,m), il faudra donc en tenir compte dans le code.

Par exemple, en tapant le code ASCII correspondant à la lettre « m », c’est le caractère « , » qui s’affiche. Pour vérifier les caractères « tapés » par l’Arduino, ouvrez simplement un traitement de texte et appuyez sur les touches de la télécommande. C’est d’ailleurs comme ça que j’ai découvert ce problème d’inversion de touches (AZERTY- QWERTY). Ensuite, il suffit de tâtonner un peu, pour trouver trouver le bon code ASCII.

Amis Belges, Suisses, Québécois ou de tout autre pays qui résiste encore au clavier QWERTY, vous devrez aussi adapter le programme à votre clavier (en fonction des touches utilisées et des spécificités de votre clavier).

Touches et raccourcis clavier

VLC, Youtube
et Netflix
Code
hexa
Touche de la
télécommande
QuitterALT + F482 + C5 On/Off
PauseEspace20Pause/Lecture
Couper le sonm3BMute
Mettre/Sortir du
plein écran
f66Zoom
Monter le sonFlèche HDAHaut
Baisser le sonFlèche BD9Bas
Reculer de
10 secondes
Flèche GD8Gauche
Avancer de
10 secondes
Flèche DD7Droite
Touche EntréeB0OK

Le code

// Leonardo_Telecommande_IR
// Appel des bibliothèques
#include "Keyboard.h"
#include <IRremote.h>
// Parametrage du récepteur infrarouge
int pin_recept = 2;
IRrecv ir_recept(pin_recept); 
decode_results ir_decode;
void setup() {
  // Initialisation du récepteur IR et des sorties
  ir_recept.enableIRIn();
  // Initialisation du clavier
  Keyboard.begin();
}

void loop() {
  // Si le capteur capte un signal
  if (ir_recept.decode(&ir_decode)){
    //Si le signal est égal à
    switch (ir_decode.value) {
      // 4C7 ou 104C7 (bouton On/Off)
      case 0x4C7:
      case 0x104C7:
      Keyboard.press(0x82); // ALT
      Keyboard.press(0xC5); // F4
      delay (300);
      break;
      // 45C ou 1045C (bouton OK)
      case 0x45C:
      case 0x1045C:
      Keyboard.press(0xB0); // Entrée
      delay (300);
      break;
      // 42C ou 1042C (bouton Pause/Lecture)
      case 0x42C:
      case 0x1042C:
      Keyboard.press(0x20); // Espace
      delay (300);
      break;
      // 40D ou 1040D (bouton Mute)
      case 0x40D:
      case 0x1040D:
      Keyboard.press(0x3B); // Touche "m"
      delay (300);
      break;
      // 4F7 ou 104F7 (bouton Zoom)
      case 0x4F7:
      case 0x104F7:
      Keyboard.press(0x66); // Touche "f"
      delay (300);
      break;
      // 458 ou 10458 (bouton haut)
      case 0x458:
      case 0x10458:
      Keyboard.press(0xDA); // Fleche haut
      delay (300);
      break;
      // 459 ou 10459 (bouton bas)
      case 0x459:
      case 0x10459:
      Keyboard.press(0xD9); // Fleche bas
      delay (300);
      break;
      // 45A ou 1045A (bouton gauche)
      case 0x45A:
      case 0x1045A:
      Keyboard.press(0xD8); // Fleche gauche
      delay (300);
      break;
      // 45B ou 1045B (bouton droite)
      case 0x45B:
      case 0x1045B:
      Keyboard.press(0xD7); // Fleche droite
      delay (300);
      break;  
    } 
    ir_recept.resume(); 
  } 
  Keyboard.releaseAll();
}

Boitier

Vous pouvez imprimer ce boitier et l’installer au sommet votre écran.

Installation du récepteur sur l'écran

Amusez-vous bien, mais n’oubliez pas de garder au moins 2 touches libres (sur votre télécommande) afin de pouvoir contrôler votre cafetière.

Publicité

4 réflexions sur “Télécommandez votre ordinateur avec un Arduino

  1. Bonjour, très interressant. Est-il possible de faire inverse : de transformer l’arduino en emetteur IR reconnaissable par votre lecteur DVD? (j’ai un projet de faire une commande déporté d’un ampli son, et ca me semble une bonne solution pour ne pas toucher a l’interieur de l’ampli).
    Jérôme.

    J’aime

    1. Bonjour,
      Oui, c’est possible de fabriquer une télécommande « universelle » en ajoutant une LED Infrarouge. J’explique dans mon livre comment fabriquer un émetteur IR (pour communiquer avec un autre Arduino). Je n’ai pas essayé de télécommander un appareil, mais en théorie ça devrait fonctionner. Bien sûr, il faut quand même un récepteur IR pour apprendre le code à reproduire.

      J’aime

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s