亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

智能手机蓝牙鼠标:自制虚拟摇杆控制电脑光标

项目背景

本项目实现一个基于手机 App 的虚拟触控板/鼠标:手机端通过 MIT App Inventor 开发的 App,经由蓝牙(HC-05)将双摇杆坐标、点击、滚轮状态发送给 Arduino Uno,Arduino 解析后经串口输出格式化数据,PC 端 Python 脚本(mouse + pyserial)读取并模拟系统鼠标动作。适合演示、投影控制、躺床上操作电脑等场景。

硬件清单

软件环境

通信协议设计

App → Arduino(蓝牙,每 20ms 一帧)

帧格式:[0xFF] [JoyX] [JoyY] [BtnFlags]
- 0xFF (255)  : 帧头,用于同步
- JoyX (0-255): 左摇杆 X 轴(中心 ~128)
- JoyY (0-255): 左摇杆 Y 轴
- BtnFlags   : 位域
    bit0=1 左键按下, bit1=1 右键按下, bit2=1 滚轮向下, bit3=1 滚轮向上

Arduino → PC(USB 串口,115200/9600 波特率)

输出格式:X:Y:Click\n
- X (0-1279) : 目标屏幕 X 坐标(假设 1280×800 分辨率)
- Y (0-799)  : 目标屏幕 Y 坐标
- Click      : 0=无动作, 1=左键, 2=右键, 3=滚轮下, 4=滚轮上
示例:640:400:0  (移动到中心)  640:400:1  (左键点击)

Arduino 固件逻辑


// 关键参数
int sensitivity = 20;   // 像素/帧 最大位移
int width = 0, height = 0; // 当前光标坐标
int l_prev = 0, r_prev = 0; // 按键边沿检测

void loop() {
  if (Serial.available()) {
    in_byte = Serial.read();
    if (in_byte == 255) array_index = 0; // 帧头同步
    datareceived[array_index++] = in_byte;
    if (array_index == 4) { // 收满 4 字节
      // 映射摇杆到位移
      if (data[1] >= 110) xpos = map(data[1], 110, 172, 0, sensitivity);
      else if (data[1] <= 70) xpos = map(data[1], 60, 1, 0, -sensitivity);
      // Y 轴同理...
      // 按键边沿检测
      if (data[3]==1 && l_prev==0) clicks=1;
      else if (data[3]==2 && r_prev==0) clicks=2;
      else if (data[3]==3 || data[3]==4) clicks=data[3];
      l_prev = r_prev = data[3];
      // 限幅并发送
      width = constrain(width + xpos, 0, 1279);
      height = constrain(height + ypos, 0, 799);
      if (xpos||ypos||clicks) {
        Serial.print(width); Serial.print(":");
        Serial.print(height); Serial.print(":");
        Serial.println(clicks);
      }
    }
  }
}

Python 主机端脚本

import mouse, serial, time
ArduinoSerial = serial.Serial('COM3', 9600)  # 修改为实际端口
time.sleep(1)
mouse.FAILSAFE = False
while True:
    line = ArduinoSerial.readline().decode('ascii').strip()
    if not line: continue
    x, y, z = line.split(':')
    x, y = int(x), int(y)
    mouse.move(x, y)
    if '1' in z: mouse.click('left')
    elif '2' in z: mouse.click('right')
    elif '3' in z: mouse.wheel(-1)
    elif '4' in z: mouse.wheel(1)

部署步骤

  1. 按原理图接线:HC-05 VCC→5V, GND→GND, TX→D0(RX), RX→D1(TX) 经分压(或用 SoftwareSerial 避开硬件串口)。
  2. 上传 Arduino 代码,打开串口监视器确认波特率 9600。
  3. 安装 Python 3,命令行执行:
    pip install --upgrade pip
    pip install mouse pyserial
    
  4. 修改 Python 脚本中 COM3 为实际端口,保存为 mouse_control.py。
  5. 手机安装 APK,打开蓝牙配对 HC-05(默认密码 1234/0000)。
  6. 运行 Python 脚本(IDLE 或命令行 python mouse_control.py)。
  7. App 连接蓝牙,即可用虚拟摇杆控制鼠标。

常见问题排查

扩展思路

制造工艺

  1. 蓝牙控制树莓派机器人:语音反馈功能构建指南
  2. 手势控制 RGB 台灯 —— 交互式免手操作照明
  3. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  4. 通过树莓派用 Alexa 控制 LED - 简单分步指南
  5. 废旧遥控车改装:Arduino + USB Host Shield 实现 Xbox 手柄无线控制
  6. Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
  7. Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
  8. Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
  9. MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
  10. 语音控制家电:Google Assistant + 蓝牙 + Arduino UNO
  11. PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲
  12. 蓝牙遥控避障机器人:打造智能远程操控小车