ThimbleKrox : Contrôle Souris au Doigt avec Arduino Micro et MPU-6050
Composants et Fournitures
| Arduino Micro | × | 1 |
| MPU-6050 (Accéléromètre/Gyroscope 3 axes SparkFun) | × | 1 |
Outils Nécessaires
- Imprimante 3D (optionnel)
Logiciels
- Arduino IDE
À Propos du Projet
Voici mon premier projet, ThimbleKrox : un dé à coudre permettant de contrôler le curseur de la souris par les mouvements de l'index (ou tout autre doigt).
Étape 1 : Matériel et Outils
Matériel : Arduino Micro, MPU-6050, câble micro-USB, fils de connexion, élastique (pour fixation sur la main).
Outils : Ordinateur avec Arduino IDE, fer à souder (si broches non pré-soudées), imprimante 3D (optionnel).
Étape 2 : Connexions
- VCC Arduino → VCC MPU-6050
- GND → GND
- Pin 2 → SDA
- Pin 3 → SCL
Étape 3 : Impression 3D (Optionnel)
Deux versions du dé à coudre : version transparente (sans support, compacte) et version steampunk (avec supports, plus volumineuse, meilleure avec peinture). Les deux s'impriment avec les ergots internes vers le bas.
Étape 4 : Assemblage
Avec dé 3D : Insérer le MPU-6050 dans la cavité supérieure, câbles dans la cavité inférieure.
Sans dé 3D : Fixer le MPU-6050 sur la dernière phalange avec ruban adhésif ou élastique.
Étape 5 : Code et Calibration
Installer les bibliothèques : Wire.h, I2Cdev.h, MPU6050.h, Mouse.h.
Charger le code de calibration, ouvrir le moniteur série (Ctrl+Maj+M). Ce dernier affiche la direction détectée et les valeurs brutes (ax, ay, az, gx, gy, gz).
Procédé de calibration :
- Observer la direction affichée (ex: « left »)
- Modifier les seuils dans les lignes marquées « // calibration line » pour correspondre aux valeurs lues
- Recharger le code, vérifier que la direction affichée est correcte
- Répéter pour les 4 directions (haut, bas, gauche, droite)
- Reporter les valeurs calibrées dans le code principal
Exemple : Si le moniteur affiche « left » avec ax = 5232 mais que le code teste if (ax >= 15000), changer le seuil à 5000.
Étape 6 : Finalisation
Charger le code principal, enfiler le dé à coudre et utiliser !
Codes Sources
Code Principal
// Contrôle souris par mouvement du doigt
// Calibration : voir "ThimbleKrox calibration code" et tutoriel sur hackster.io
// Lignes à calibrer marquées "//calibration line"
// Par Magform
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>
MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;
int sensibility = 10; // Sensibilité du curseur
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) {
while (1); // Arrêt si pas de connexion
}
}
void up() { Mouse.move(0, -sensibility); }
void down() { Mouse.move(0, sensibility); }
void left() { Mouse.move(-sensibility, 0); }
void right() { Mouse.move(sensibility, 0); }
void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
if (ax >= 15000) { right(); } // calibration line
if (ax <= -9000) { left(); } // calibration line
if (ay <= -8000) { up(); } // calibration line
if (ay >= 10000) { down(); } // calibration line
// Clic droit/gauche par mouvement brusque (en développement)
/* if (gy >= 20000) { Mouse.click(MOUSE_RIGHT); delay(100); }
if (gy <= -20000) { Mouse.click(MOUSE_LEFT); delay(100); } */
delay(10);
}
Code de Calibration
// Code calibration ThimbleKrox
// Tutoriel : https://www.hackster.io/projects/dd8881/
// Lignes à calibrer : "//calibration line"
// Par Magform
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>
MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;
int Nwrong = 1;
void setup() {
Nwrong = 1;
Serial.begin(9600);
Wire.begin();
mpu.initialize();
while (Nwrong != 0) {
if (!mpu.testConnection()) {
Serial.print("Wrong connection number: ");
Serial.print(Nwrong);
Nwrong++;
delay(1000);
} else {
Nwrong = 0;
}
}
}
void up() { Serial.print(" up "); }
void down() { Serial.print(" down "); }
void left() { Serial.print(" left "); }
void right() { Serial.print(" right "); }
void rightclick() { Serial.print(" RightClick "); }
void leftclick() { Serial.print(" LeftClick "); }
void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
if (ax >= 15000) { right(); } // calibration line
if (ax <= -9000) { left(); } // calibration line
if (ay <= -8000) { up(); } // calibration line
if (ay >= 10000) { down(); } // calibration line
/* if (gy >= 20000) { rightclick(); delay(100); }
if (gy <= -20000) { leftclick(); delay(100); } */
Serial.print(" | gx= "); Serial.print(gx);
Serial.print(" gy= "); Serial.print(gy);
Serial.print(" gz= "); Serial.print(gz);
Serial.print(" | ax= "); Serial.print(ax);
Serial.print(" ay= "); Serial.print(ay);
Serial.print(" az= "); Serial.print(az);
Serial.print("\n");
delay(5000);
}
Ressources : GitHub | Modèles 3D Thingiverse
Schéma de Câblage

Processus de fabrication
- Construire un robot piloté par Internet avec streaming vidéo Arduino & Raspberry Pi
- Contrôler votre ventilateur de plafond avec Alexa : Guide étape par étape
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Centre de contrôle d'alimentation Arduino : N-FET, P-FET, Relais et RTC
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Contrôleur d'humidificateur DIY avec Arduino et relais – Installation haute tension sécurisée
- Contrôler 2 moteurs pas-à-pas avec Arduino Nano et joystick – Tutoriel Visuino
- Contrôler une LED Arduino avec Cortana via Bluetooth sur Windows 10
- Contrôle de ventilateur PWM 4 broches 25 kHz avec Arduino Uno – Construction, code et test