2. 系统需求分析:确定触控区域、精度、响应速度等核心指标

做任何系统,第一步都是把需求定死。光学触控听起来很酷,但如果你连「要摸多大地方」「手指动多快能跟上」都没想清楚,后面全是坑。我见过不少团队,一上来就调算法、焊电路,结果发现传感器视场角不够覆盖屏幕——白干。

这一章,我们就来掰扯清楚:触控区域、精度、响应速度,这三个指标到底怎么定。

2.1 触控区域:先画个框

触控区域就是用户能操作的有效范围。说白了,你打算让手指在哪个平面上滑动?

我个人习惯先画一个矩形框,标出四个顶点坐标。比如一个 21.5 寸的屏幕,有效显示区大概是 476mm × 268mm。但注意,光学传感器通常需要留出边缘余量,所以实际检测区域要比显示区大一圈。

经验公式: 检测区域 = 显示区域 + 2 × 传感器盲区(通常每边留 5~10mm)

我在项目中遇到过一个问题:客户要求触控区域覆盖整个屏幕,但摄像头安装在屏幕角落,边缘区域的光线入射角太大,导致手指阴影模糊。后来我们不得不把检测区域缩小 8%,才保证边缘也能稳定识别。

所以,定区域时一定要考虑传感器布局。常见的几种布局方式:

  • 单摄像头 + 反射条:适合小尺寸(≤15寸),检测区域受限
  • 双摄像头 + 反射条:主流方案,覆盖 15~32 寸
  • 四摄像头 + 无反射条:大尺寸(≥32寸),但算法复杂

你想想看,如果选了双摄像头方案,两个摄像头的视场角必须完全覆盖整个矩形区域。我建议用一张表格来对比不同尺寸下的传感器选型:

屏幕尺寸 典型检测区域 (mm) 推荐传感器数量 传感器视场角要求
10.1" 220 × 130 1 ≥ 120°
15.6" 345 × 195 2 ≥ 100°
21.5" 476 × 268 2 ≥ 90°
32" 698 × 393 4 ≥ 80°
小技巧: 用 CAD 或纸板先模拟一下摄像头安装位置,看看光线路径是否被边框遮挡。我吃过这个亏,后来每次画 PCB 前都先做一次光路模拟。

2.2 精度:手指点下去,系统知道在哪

精度就是触控坐标和实际手指位置的偏差。单位是毫米。你玩手机时感觉「指哪打哪」,那是因为手机触控精度能做到 0.5mm 以内。但光学触控嘛……嗯,实话实说,受限于摄像头分辨率和算法,通常只能做到 1~3mm。

精度怎么定?看应用场景:

  • 工业控制面板:按钮大,精度 3mm 就够
  • 交互式白板:需要写字,精度 ≤ 1.5mm
  • 游戏/绘图:精度 ≤ 1mm,否则用户会骂

我曾经做一个教育白板项目,客户要求精度 1mm。我们用了 640×480 分辨率的摄像头,结果发现手指在屏幕边缘的定位误差达到 3mm。为什么?因为摄像头像素有限,边缘区域每个像素对应的物理尺寸变大了。

这里有个核心公式:

物理精度 = 检测区域宽度 / 摄像头水平像素数 × 2(亚像素插值系数)

举个例子,21.5 寸屏幕宽 476mm,用 640 像素的摄像头:

理论精度 = 476 / 640 × 2 ≈ 1.49mm

嗯,勉强够用。但如果用 1280 像素的摄像头:

理论精度 = 476 / 1280 × 2 ≈ 0.74mm

这就舒服多了。所以我的建议是:摄像头分辨率直接决定精度天花板,别指望算法能弥补硬件缺陷。

注意: 精度不是越高越好。精度太高会导致抖动,手指轻微晃动就被识别成多次点击。我一般会在算法里加一个 2~3 像素的死区滤波,牺牲一点点精度换稳定性。

2.3 响应速度:别让用户等

响应速度就是手指按下到系统响应的时间。单位是毫秒。人眼对延迟很敏感——超过 50ms 就能感觉到「卡」,超过 100ms 就会觉得「这破机器真慢」。

光学触控的延迟主要来自三个环节:

  1. 图像采集:摄像头帧率决定,通常 30fps → 33ms,60fps → 16ms
  2. 图像处理:去噪、二值化、找指尖,耗时 5~20ms
  3. 坐标计算与上报:三角定位、滤波、通信,耗时 2~10ms

加起来,总延迟 = 采集 + 处理 + 上报。我建议目标定在 ≤ 30ms,这样用户基本感觉不到延迟。

怎么优化?我分享几个实战经验:

  • 用全局快门摄像头:卷帘快门在手指快速移动时会变形,定位不准
  • 降低图像分辨率:如果精度允许,用 320×240 代替 640×480,处理时间减半
  • 用 DMA + 双缓冲:一边采集下一帧,一边处理当前帧,流水线作业
避坑指南: 我曾经用 USB 摄像头做原型,发现延迟高达 80ms。后来查出来是 USB 驱动缓冲区太大,攒够 3 帧才发一次。换成 SPI 接口的摄像头,延迟直接降到 25ms。所以,接口选型比摄像头本身还重要。

2.4 三个指标的权衡

这三个指标不是独立的。你想想看:

  • 要精度高 → 用高分辨率摄像头 → 图像数据量大 → 处理慢 → 响应延迟增加
  • 要响应快 → 降低分辨率 → 精度下降
  • 要覆盖大区域 → 摄像头离得远 → 每个像素对应的物理尺寸变大 → 精度下降

所以,需求分析的本质就是做 trade-off。我一般按这个优先级排序:

  1. 先定触控区域:这是物理约束,改不了
  2. 再定精度:根据应用场景,定一个最低可接受值
  3. 最后优化响应速度:在满足前两个的前提下,尽量快

下面这张图展示了整个需求分析的流程:

触控系统需求分析流程 触控系统需求分析流程 1. 确定应用场景 2. 触控区域尺寸 3. 确定精度指标 4. 响应速度目标 5. 传感器与算法选型 不满足则迭代 核心权衡 • 区域大 → 精度降 • 精度高 → 响应慢 • 响应快 → 分辨率低

2.5 实战:写一份需求文档

光说不练假把式。我建议你按下面的模板,把本章内容落地成一份需求文档:

# 光学触控系统需求规格(示例)

## 1. 触控区域
- 有效触控尺寸:476mm × 268mm(21.5寸 16:9)
- 传感器安装余量:每边 8mm
- 总检测区域:492mm × 284mm

## 2. 精度要求
- 定位精度:≤ 1.5mm(中心区域)
- 边缘精度:≤ 2.5mm(距边缘 20mm 内)
- 重复精度:≤ 0.5mm

## 3. 响应速度
- 触控延迟:≤ 30ms(从手指接触到底层上报)
- 帧率:≥ 60fps
- 处理时间:≤ 15ms/帧

## 4. 环境要求
- 工作温度:0~50°C
- 抗环境光:≥ 1000 lux(室内正常照明)
我的习惯: 需求文档写完后,先拿给软件团队和结构团队各看一遍。软件说「精度太高,算法跑不动」,结构说「余量太小,边框装不下」——这时候再坐下来谈,比做到一半再改要省事得多。