Construction d'une souris USB "rapid fire"

La souris qui clic plus vite que son ombre

Image d'entête

par skywodd | | Licence (voir pied de page)

Catégories : Projets | Mots clefs : Teensy Teensyduino PJRC Souris Mouse USB

Cet article n'a pas été mis à jour depuis un certain temps, son contenu n'est peut être plus d'actualité.


Dans cet article, je vous présente un projet que j'ai réalisé pour m'aider dans une tâche fastidieuse et monotone. Ce projet n'est rien de plus qu'une souris USB minimaliste, avec un unique bouton, permettant de simuler un "clic gauche" plus de 4 fois par seconde. Dans cet article, je vais vous expliquer comment j'ai réalisé ce projet et pourquoi.

Sommaire

Bonjour à toutes et à tous !

Durant le week-end, j'ai dû faire face à un problème inattendu : exporter des données d'un logiciel professionnel … à la main.

Capture écran menu export (progiciel)

La liste problématique

Le logiciel en question permet d'exporter des fiches clients, une fiche à la fois ou en lots, au moyen d'une liste. Dans le principe, exporter un nombre arbitraire de fiches est trivial. Il suffit de double cliquer sur le nom du client pour basculer sa fiche de la liste "clients" à la liste "à exporter".

Seulement voilà, entre théorie et pratique, il y a souvent un gouffre. Dans le cas présent, le logiciel ne permet pas de sélectionner plusieurs fiches à la fois, pour exporter un lot d'une centaine de fiches par exemple. Or, il m'était demandé d'exporter … 4538 fiches. Outch !

Un simple bouton "tout sélectionner" aurait suffi. Mais sans ce bouton pour me faciliter la vie, il a fallu que je trouve une solution par moi même. Ma solution ? Construire une souris qui clic à ma place quand je lui demande.

Le but du projet

Puis-ce qu'il me suffit d'un double clic pour exporter une fiche, je suis arrivé à la conclusion que la solution la plus simple pour arriver à mes fins serait d'avoir une souris qui clic sans interruption, d'une simple pression d'un bouton.

Dans les faits, le projet est vraiment simpliste : un bouton, une carte pouvant se faire passer pour une souris USB et un câble USB. Quand on appuie sur le bouton, la carte envoie des ordres à l'ordinateur pour lui dire de cliquer, le tout aussi vite que possible, jusqu'à ce que le bouton soit relâché. En jeu vidéo, ce genre de montage s'appelle des "rapid fire" (feu rapide).

PS : Je m'excuse par avance aux lecteurs qui s'attendent à voir une souris USB se faire mettre en morceaux au nom de la science (et du DIY). Ce projet restera d'une simplicité déconcertante et utilisera une bête carte de développement USB, mais comme on dit en informatique : "la solution la plus simple est souvent la meilleure".

Présentation rapide des cartes Teensy

Pour ce projet, j'avais besoin d'une carte de développement USB, capable de se faire passer pour une souris USB et avec une interface de programmation simple.

Illustration Arduino Leonardo VS Teensy

Arduino Leonardo VS Teensy

Deux choix s'offraient à moi : utiliser une carte Arduino Leonardo ou une carte Teensy.

Photographie de diverses cartes Teensy

Diverses cartes Teensy

Il s'avère que je dispose d'un certain nombre de cartes Teensy dans mes tiroirs, mais pas de carte Arduino Leonardo. Le choix était donc vite fait.

Carte Teensy 2.0++

Carte Teensy 2.0++

Sans entrer dans les détails (on verra cela plus tard dans un article de test dédié), les cartes Teensy sont des cartes compatibles Arduino, avec un port USB "natif" permettant d'émuler à peu près n'importe quel périphérique USB classique : souris, clavier, port série, joystick, dongle Midi, module HID, etc. C'était donc le candidat idéal pour ce projet.

Le montage

Matériel pour le projet TeensyMouseClicker

Matériel nécessaire

Le montage est simpliste, il nécessite seulement :

  • Une carte Teensy 2.0++ (une carte 2.0 simple ou une carte 3.x peut aussi faire l'affaire),

  • Un câble USB,

  • Un bouton poussoir,

  • Une résistance de 10K ohms (marron / noir / orange),

  • Une plaque d'essai et des fils pour câbler notre montage.

Vue schématique du projet TeensyMouseClicker

Vue schématique du montage

Vue prototypage du projet TeensyMouseClicker

Vue prototypage du montage

Pour réaliser le câblage, il suffit de placer la carte teensy et le bouton poussoir sur la breadboard. Il convient ensuite de relier une extrémité du bouton poussoir à la broche GND de la carte Teensy et l'autre extrémité à la broche F0 de la carte Teensy.

Astuce : câblez le bouton poussoir en diagonal. De cette façon, vous avez l'assurance de câbler correctement les deux contacts du bouton poussoir.

Montage du projet TeensyMouseClicker

Le montage fini

Pour finir, il suffit de câbler une résistance de tirage à l'état haut entre la broche F0 et la broche +5V de la carte Teensy.

Le code

Les cartes Teensy sont des cartes compatibles Arduino, mais pas tout à fait. Ce sont des cartes un peu spéciales qui nécessitent un plug-in nommé Teensyduino pour fonctionner avec le logiciel de développement Arduino.

L'installation de Teensyduino est très simple, il suffit de télécharger le plug-in, de lancer l'installateur et de suivre les instructions à l'écran.

N.B. Si vous utilisez un PC sous Windows, pensez à lancer l'installateur avec les droits administrateurs (clic gauche, lancer en tant qu'administrateur).

1
const byte PIN_BUTTON = A0;

Le montage est simple, le code aussi !

Le code commence par la déclaration d'une constante (mot clef const) qui contient le numéro de broche sur laquelle est câblé le bouton.

Brochage d'une carte Teensy 2.0++ avec le logiciel Arduino

Brochage d'une carte Teensy 2.0++ avec le logiciel Arduino

Dans le cas de la carte Teensy 2.0++, la broche F0 correspond à la broche A0 dans le logiciel Arduino.

1
2
3
4
5
6
7
8
void setup() {

  /* Met la broche du bouton en entrée */
  pinMode(PIN_BUTTON, INPUT);
  
  /* Décommenter la ligne suivante pour les cartes Arduino Leonardo */
  //Mouse.begin();
}

Dans la fonction setup(), le code se contente de mettre la broche du bouton en entrée avec pinMode().

Pour les lecteurs qui souhaiteraient tester ce code sur une carte Arduino Loenardo, il vous suffit de décommenter la ligne Mouse.begin();. Le code est compatible avec les cartes Teensy et Arduino Leonardo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void loop() {

  /* Lit l'état du bouton poussoir */
  if (digitalRead(PIN_BUTTON) == LOW) {
  
    /* Si le bouton est appuyé -> clic (gauche) de souris */
    Mouse.click();
  }
  
  /* Attend 150 ms entre deux clics de souris */
  delay(150);
}

Dans la fonction loop(), le code se contente de vérifier l'état du bouton poussoir. Si celui-ci est appuyé, le code envoie un clic (gauche) de souris à l'ordinateur.

Afin d'éviter de faire planter l'ordinateur et le logiciel avec des centaines de clics de souris par seconde, le code attend 150 ms entre deux clics de souris.

Le code complet avec commentaires :

 1
 2
 3
 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
/**
 * Souris rapid fire DIY. 
 * Fait des clics gauche aussi vite que possible quand le bouton est appuyé.
 */

/** Numéro de broche pour le bouton */
const byte PIN_BUTTON = A0;

/** Fonction setup, exécutée au lancement du programme */
void setup() {

  /* Met la broche du bouton en entrée */
  pinMode(PIN_BUTTON, INPUT);
  
  /* Décommenter la ligne suivante pour les cartes Arduino Leonardo */
  //Mouse.begin();
}

/** Fonction loop, exécutée en boucle tant que la carte Arduino est alimentée */
void loop() {

  /* Lit l'état du bouton poussoir */
  if (digitalRead(PIN_BUTTON) == LOW) {
  
    /* Si le bouton est appuyé -> clic (gauche) de souris */
    Mouse.click();
  }
  
  /* Attend 150ms entre deux clics de souris */
  delay(150);
}

L'extrait de code ci-dessus est disponible en téléchargement sur cette page (le lien de téléchargement en .zip contient le projet Arduino prêt à l'emploi).

Conclusion

Ce projet est désormais achevé.

Si ce projet vous a plu, n'hésitez pas à le commenter sur le forum, à le diffuser sur les réseaux sociaux et à soutenir le site si cela vous fait plaisir.