ThimbleKrox:基于 Arduino Micro 与 MPU-6050 的指戴式鼠标控制器
组件与物料清单
| 组件 | 数量 |
|---|---|
| Arduino Micro | 1 |
| MPU-6050 六轴加速度计/陀螺仪模块 | 1 |
所需工具
- 3D 打印机(可选)
软件工具
- Arduino IDE
项目简介
ThimbleKrox 是一个指戴式设备,通过手指动作控制鼠标指针。这是我的首个项目,旨在提供一种直观的无接触鼠标交互方式。
第一步:材料与工具准备
材料:
- Arduino Micro
- MPU-6050 模块
- Micro USB 数据线
- 杜邦线(连接 Arduino 与 MPU-6050)
- 松紧带(用于固定 Arduino 于手背)
工具:
- 安装有 Arduino IDE 的电脑
- 电烙铁(若 Arduino 未预焊排针)
- 3D 打印机(可选,用于打印指戴外壳)
第二步:电路连接
Arduino Micro 与 MPU-6050 引脚对应连接:
- VCC → VCC
- GND → GND
- Pin 2 (SDA) → SDA
- Pin 3 (SCL) → SCL
第三步:3D 打印外壳(可选)
提供两款外壳模型:
- 透明简约版:无需支撑结构,体积较小
- 蒸汽朋克风格版:需支撑结构,体积稍大,建议上色(PLA 材料适合用丙烯颜料)
两款模型均需将带有两个内凸起的一面朝下打印。
第四步:组装
使用 3D 打印外壳: 连接完成后,将 MPU-6050 放入外壳上部腔体,导线置于下部腔体。
不使用外壳: 将 MPU-6050 固定在手指末节,用胶带或松紧带绑定。
第五步:代码烧录与校准
需安装库:Wire.h、I2Cdev.h、MPU6050.h、Mouse.h。
校准流程:
- 上传校准代码,佩戴指戴,打开串口监视器
- 观察输出格式:
right | gx=3165 gy=469 gz=-1055 | ax=15232 ay=2064 az=-4496 - 根据串口输出修正代码中标记
// calibration line的阈值 - 将校准后的阈值同步至主程序代码
- 上传主程序代码
校准示例: 若串口显示 "left" 但代码判定为 right,需调整对应轴的阈值使判定方向一致。
第六步:完成项目
佩戴指戴即可体验手指控制鼠标的乐趣!
核心代码
主程序
// 通过手指动作控制鼠标指针
// 校准方法请运行 "ThimbleKrox calibration code" 并参考教程
// 需校准的行标记为 "//calibration line"
// 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);
}
校准程序
// ThimbleKrox 校准程序
// 运行此代码并参考教程进行校准
// 需校准的行标记为 "//calibration line"
// 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);
}
3D 打印模型
Thingiverse 模型地址:ThimbleKrox 3D 打印模型
原理图
电路连接图请参考项目附件。
制造工艺
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 用 Alexa 控制吊扇:分步指南
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
- Windows 10 Cortana 蓝牙控制 Arduino LED:UWP 应用开发全流程
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- 1Sheeld + Arduino 手机无线控制家庭灯光系统
- DIY Arduino 蟑螂控制系统 —— 30 美元以内自制指南
- Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试