跳转到内容

手势

每个手势都是同样的双机协作:X/Y 机械臂 把触控笔驱动到 bbox 中心,然后一个 电磁铁(solenoid) 让笔尖落到玻璃上再抬起。Z 轴 不是 伺服,也没有深度需要校准——笔尖停在固定高度, 唯一变化的是 时序。让一次 tap 成为 tap、让一次 long-press 成为长按的,是线圈保持通电的时长。

触控笔的笔尖由一个接到 GRBL 主轴 PWM 引脚的电磁铁向下推动,所以它用主轴 G-code 驱动: M3 S<duty>01000 刻度上的某个 PWM 占空比给线圈通电,M5 释放它。线圈断电时一根回位弹簧抬起笔尖。 电磁铁若以满电流保持通电会烧坏线圈,所以 PhysiClaw 采用 击打并保持(hit-and-keep) 的曲线: 先猛击把铁芯吸入,然后降到较低的保持电流以维持吸合状态。

常量取值含义
HIT_S1000击打占空比——把铁芯吸入(仅短暂使用)
HOLD_S750保持占空比——可安全 持续 维持(long-press、swipe 滑动)
SETTLE_MS80ms击打后、降到保持电平前的停留时间
RELEASE_MS200msM5 之后、任何 XY 移动之前的弹簧回弹停留时间
DOUBLE_TAP_GAP_MS100ms双击两次击打之间的短暂抬起

每次 M5 之后,PhysiClaw 会停留 RELEASE_MS,让弹簧在下一次 XY 移动开始前把笔尖完全抬离—— 否则笔尖会在屏幕上拖出一条线。

一次瞬时按压:以 HIT_S 击打,保持 tap 时长(80ms),然后释放。这次按压足够短, 所以不需要降低的保持电流——S1000 持续 80ms 就能给出清脆的接触,又不会烧坏线圈。

G-code
G0 X.. Y.. ; arm moves to the bbox center
M3 S1000 ; strike (stylus down)
G4 P0.08 ; hold 80 ms
M5 ; release
G4 P0.2 ; spring-rebound dwell (tip clears the glass)

两次击打之间只隔一次短暂的断触抬起——不是 完整的弹簧抬离停留。整对动作作为一个手势运行, 所以”按下到按下”的间隔远低于 iOS 约 300ms 的双击窗口;而把两次独立的 tap(各带 200ms 释放)串起来 会把它推到约 280ms,时序抖动随即会把这个手势拆成两次单击。

G-code
M3 S1000 ; strike 1
G4 P0.08 ; hold 80 ms
M5 ; lift briefly…
G4 P0.1 ; …100 ms, just enough to break contact
M3 S1000 ; strike 2
G4 P0.08 ; hold 80 ms
M5 ; release
G4 P0.2 ; spring-rebound dwell

这里”击打并保持”的曲线名副其实:击打、稳定、降到保持电流,并在抬起前把笔尖保持吸合整个 long-press 时长(1.2s)。iOS/Android 在约 500ms 处识别长按;1.2s 留出了充裕的余量。

G-code
G0 X.. Y.. ; arm moves to the bbox center
M3 S1000 ; strike
G4 P0.08 ; settle 80 ms
M3 S750 ; drop to hold current
G4 P1.2 ; hold 1.2 s
M5 ; release
G4 P0.2 ; spring-rebound dwell

swipe 会先按压,然后 带载移动。整个滑动过程中笔尖以 HOLD_S 保持按下,机械臂从起点到终点 运行一段受控的 G1 移动(不是快速的 G0),然后抬起。行程长度来自 size 参数; speed 参数设定 G1 进给速率:

speed进给手感
slowF3000谨慎滚动 / 拖动
mediumF6000普通 swipe(约 100 mm/s)
fastF10000快速甩动、翻页
G-code
G0 X.. Y.. ; arm moves to the start
M3 S1000 ; strike
G4 P0.08 ; settle 80 ms
M3 S750 ; drop to hold current (tip stays down for the slide)
G1 X.. Y.. F6000 ; drag to the endpoint at the chosen feed
M5 ; release
G4 P0.2 ; spring-rebound dwell
手势按下保持移动抬起
TapS100080msM5 + 200ms 停留
Double-tapS1000 ×2各 80ms,间隔 100msM5 + 200ms 停留
Long-pressS1000S7501.2sM5 + 200ms 停留
SwipeS1000S750滑动期间G1F3000/6000/10000M5 + 200ms 停留