ThimbleKrox: управление мышью с пальца на Arduino Micro и MPU-6050
Компоненты и материалы
| Arduino Micro | ×1 |
| MPU-6050 (акселерометр + гироскоп) | ×1 |
Инструменты
- 3D-принтер (опционально)
Программное обеспечение
- Arduino IDE
О проекте
ThimbleKrox — наперсток, позволяющий управлять курсором мыши движениями указательного (или любого другого) пальца.
Шаг 1: Материалы и инструменты
Материалы: Arduino Micro, MPU-6050, кабель micro USB, перемычки, резинка для крепления на руку.
Инструменты: компьютер с Arduino IDE, паяльник (если нет ножек), 3D-принтер (для корпуса).
Шаг 2: Подключение
Соедините контакты Arduino и MPU-6050:
- VCC → VCC
- GND → GND
- Pin 2 → SDA
- Pin 3 → SCL

Шаг 3: 3D-печать (опционально)
Две версии корпуса: прозрачная (без поддержек) и стимпанк (требует поддержек, лучше смотрится покрашенной). Печатать нужно с выступами вниз.


Шаг 4: Сборка
С корпусом: вставьте MPU-6050 в верхнюю полость, провода — в нижнюю.
Без корпуса: закрепите датчик на последней фаланге пальца скотчем или резинкой.
Шаг 5: Код и калибровка
Установите библиотеки: Wire.h, I2Cdev.h, MPU6050.h, Mouse.h.
Сначала загрузите код калибровки, откройте Serial Monitor (Ctrl+Shift+M). Вы увидите строки вида:
right | gx = 3165 gy = 469 gz = -1055 | ax = 15232 ay = 2064 az = -4496
Направление (right/left/up/down) и сырые данные. Измените значения в строках, помеченных // calibration line, чтобы направление совпадало с реальным движением. После каждого изменения перезагружайте скетч.
Пример: если монитор показывает «left», а код ждёт ax >= 15000 для «right», измените порог на 5000 (так как текущий ax=5232).
Когда калибровка готова, перенесите значения в основной код и загрузите его.
Шаг 6: Завершение
Наденьте наперсток и управляйте курсором движениями пальца!
Исходный код
Основной скетч (Arduino)
// Code to control the mouse pointer through the movement of a finger
// To calibrate run "ThimbleKrox calibration code" and follow tutorial at hackster.io
// Lines to change for calibration marked "//calibration line"
// code write by 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; // Чувствительность
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) { while (1); }
}
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
// Клики (в разработке)
/* if (gy >= 20000) { Mouse.click(MOUSE_RIGHT); delay(100); }
if (gy <= -20000) { Mouse.click(MOUSE_LEFT); delay(100); } */
delay(10);
}
Код калибровки (Arduino)
// Code to calibrate the ThimbleKrox
// Lines to change marked "//calibration line"
// code write by 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);
}
Репозиторий: GitHub
3D-модели
Файлы на Thingiverse: ThimbleKrox 3D printable model (поддержки не требуются для прозрачной версии).
Схема

Производственный процесс
- Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
- Управление потолочным вентилятором через Alexa: пошаговое руководство
- Умная копилка: управление монетоприёмником на Arduino Nano
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
- Управление светодиодом Arduino через Cortana по Bluetooth в Windows 10
- Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
- Управление 4-пиновым PWM-вентилятором 25 кГц на Arduino Uno — Сборка, код и тесты