DIY Arduino USB 触控板 —— 将废旧笔记本触控板改造为现代输入设备
核心物料
| 元器件 | 数量 | 说明 |
|---|---|---|
| Arduino Micro / Pro Micro / Leonardo | 1 | 仅这三款支持原生 USB HID |
| 笔记本触控板 (PS/2 接口) | 1 | 拆机或购买 |
| 细导线 | 若干 | 焊接触控板排线 |
软件环境
- Arduino IDE
- 库文件:
Mouse.h(官方内置) +PS2.h(需另行安装)
原理说明
早期笔记本触控板多采用 PS/2 接口 (Data/Clock 两线),与鼠标协议兼容。Arduino 读取 PS/2 数据,通过原生 USB HID 功能模拟鼠标上报给电脑。新款触控板可能直出 USB,此时只需查阅引脚定义直连即可,无需 Arduino 转换。
接线指南
触控板 FPC/排线上通常标有丝印:
- T10 → Data → Arduino Pin 10
- T11 → Clock → Arduino Pin 9
- T20 → VCC → Arduino 5V
- 大面积裸铜/屏蔽层 → GND → Arduino GND
关键提示: 焊接极细排线极易扯断焊盘!焊好后必须用热熔胶加固卸力,严禁对排线施加任何拉力。
库安装
- 下载
PS2.zip库文件 - Arduino IDE → 草图 → 包含库 → 添加 .ZIP 库
- 官方
Mouse.h无需安装
完整固件代码
#include <Mouse.h>
#include <ps2.h>
#define PS2_DATA 10
#define PS2_CLK 9
PS2 moose(PS2_CLK, PS2_DATA);
byte mstat1, mstat2, mxy, mx, my, mz;
int msval[3];
int repeatCnt = 0;
void setup() {
Mouse.begin();
// PS/2 鼠标初始化序列 (进入远程模式、设置分辨率/采样率等)
moose.write(0xff); moose.read(); moose.read(); moose.read(); // 复位
moose.write(0xf0); moose.read(); delayMicroseconds(100); // 远程模式
moose.write(0xe8); moose.read(); moose.write(0x03); moose.read(); // 分辨率
moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
moose.write(0xe8); moose.read(); moose.write(0x01); moose.read();
moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
moose.write(0xf3); moose.read(); moose.write(0x14); moose.read(); // 采样率 20/s
Serial.begin(9600);
}
void ms_read() {
moose.write(0xeb); moose.read(); // 请求数据包
mstat1 = moose.read();
mxy = moose.read();
mz = moose.read();
mstat2 = moose.read();
mx = moose.read();
my = moose.read();
// 组合有符号位移值 (PS/2 协议特有位操作)
msval[0] = (((mstat2 & 0x10) << 8) | ((mxy & 0x0F) << 8) | mx);
msval[1] = (((mstat2 & 0x20) << 7) | ((mxy & 0xF0) << 4) | my);
msval[2] = int(mz); // 滚轮
}
void loop() {
ms_read();
// 简单去抖动:连续 3 次有效移动才上报
if (msval[0] > 0 && msval[2] > 10) repeatCnt++;
else repeatCnt = 0;
if (repeatCnt > 2) {
// 映射到合理鼠标移动范围
msval[0] = map(msval[0], 580, 5164, -1023, 1023);
msval[1] = map(msval[1], 1120, 5967, 1023, -1023);
Mouse.move(msval[0]/200, msval[1]/200);
}
}
调试与进阶
- 编译报错? 务必在工具 → 开发板中选择 Arduino Micro / Leonardo,Uno/Nano 不支持 HID。
- 无响应? 翻看触控板背面型号,搜“型号 + pinout”确认 T10/T11/T20 位置。
- 自定义体验: 修改
map()参数调整灵敏度;利用Mouse.click()、Mouse.press()实现点击/拖拽;添加滚轮、多指手势逻辑。 - 对比方案: 成品 PS/2 转 USB 转换器便宜但可能兼容性差、无法自定义;Arduino 方案完全可编程。
应用场景
- 树莓派/迷你主机 DIY 笔记本
- 工控机柜面板集成指针设备
- 复古键盘/掌机项目配套触控
- 无障碍辅助输入设备改装
制造工艺
- 蓝牙控制树莓派机器人:语音反馈功能构建指南
- 手势控制 RGB 台灯 —— 交互式免手操作照明
- Android 手势遥控车:Raspberry Pi + Arduino 101 + 电机扩展板,I2T 协同控制
- 通过树莓派用 Alexa 控制 LED - 简单分步指南
- 废旧遥控车改装:Arduino + USB Host Shield 实现 Xbox 手柄无线控制
- Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
- Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
- MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
- 语音控制家电:Google Assistant + 蓝牙 + Arduino UNO
- PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲
- Wi-Servo:基于 ESP8266 的 Wi-Fi 网页端舵机远程控制系统
- Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY