手势
每个手势都是同样的双机协作:X/Y 机械臂 把触控笔驱动到 bbox 中心,然后一个 电磁铁(solenoid) 让笔尖落到玻璃上再抬起。Z 轴 不是 伺服,也没有深度需要校准——笔尖停在固定高度, 唯一变化的是 时序。让一次 tap 成为 tap、让一次 long-press 成为长按的,是线圈保持通电的时长。
一段话讲清电磁铁
Section titled “一段话讲清电磁铁”触控笔的笔尖由一个接到 GRBL 主轴 PWM 引脚的电磁铁向下推动,所以它用主轴 G-code 驱动:
M3 S<duty> 以 0–1000 刻度上的某个 PWM 占空比给线圈通电,M5 释放它。线圈断电时一根回位弹簧抬起笔尖。
电磁铁若以满电流保持通电会烧坏线圈,所以 PhysiClaw 采用 击打并保持(hit-and-keep) 的曲线:
先猛击把铁芯吸入,然后降到较低的保持电流以维持吸合状态。
| 常量 | 取值 | 含义 |
|---|---|---|
HIT_S | 1000 | 击打占空比——把铁芯吸入(仅短暂使用) |
HOLD_S | 750 | 保持占空比——可安全 持续 维持(long-press、swipe 滑动) |
SETTLE_MS | 80ms | 击打后、降到保持电平前的停留时间 |
RELEASE_MS | 200ms | M5 之后、任何 XY 移动之前的弹簧回弹停留时间 |
DOUBLE_TAP_GAP_MS | 100ms | 双击两次击打之间的短暂抬起 |
每次 M5 之后,PhysiClaw 会停留 RELEASE_MS,让弹簧在下一次 XY 移动开始前把笔尖完全抬离——
否则笔尖会在屏幕上拖出一条线。
一次瞬时按压:以 HIT_S 击打,保持 tap 时长(80ms),然后释放。这次按压足够短,
所以不需要降低的保持电流——S1000 持续 80ms 就能给出清脆的接触,又不会烧坏线圈。
G0 X.. Y.. ; arm moves to the bbox centerM3 S1000 ; strike (stylus down)G4 P0.08 ; hold 80 msM5 ; releaseG4 P0.2 ; spring-rebound dwell (tip clears the glass)Double-tap
Section titled “Double-tap”两次击打之间只隔一次短暂的断触抬起——不是 完整的弹簧抬离停留。整对动作作为一个手势运行, 所以”按下到按下”的间隔远低于 iOS 约 300ms 的双击窗口;而把两次独立的 tap(各带 200ms 释放)串起来 会把它推到约 280ms,时序抖动随即会把这个手势拆成两次单击。
M3 S1000 ; strike 1G4 P0.08 ; hold 80 msM5 ; lift briefly…G4 P0.1 ; …100 ms, just enough to break contactM3 S1000 ; strike 2G4 P0.08 ; hold 80 msM5 ; releaseG4 P0.2 ; spring-rebound dwellLong-press
Section titled “Long-press”这里”击打并保持”的曲线名副其实:击打、稳定、降到保持电流,并在抬起前把笔尖保持吸合整个 long-press 时长(1.2s)。iOS/Android 在约 500ms 处识别长按;1.2s 留出了充裕的余量。
G0 X.. Y.. ; arm moves to the bbox centerM3 S1000 ; strikeG4 P0.08 ; settle 80 msM3 S750 ; drop to hold currentG4 P1.2 ; hold 1.2 sM5 ; releaseG4 P0.2 ; spring-rebound dwellswipe 会先按压,然后 带载移动。整个滑动过程中笔尖以 HOLD_S 保持按下,机械臂从起点到终点
运行一段受控的 G1 移动(不是快速的 G0),然后抬起。行程长度来自 size 参数;
speed 参数设定 G1 进给速率:
speed | 进给 | 手感 |
|---|---|---|
slow | F3000 | 谨慎滚动 / 拖动 |
medium | F6000 | 普通 swipe(约 100 mm/s) |
fast | F10000 | 快速甩动、翻页 |
G0 X.. Y.. ; arm moves to the startM3 S1000 ; strikeG4 P0.08 ; settle 80 msM3 S750 ; drop to hold current (tip stays down for the slide)G1 X.. Y.. F6000 ; drag to the endpoint at the chosen feedM5 ; releaseG4 P0.2 ; spring-rebound dwell| 手势 | 按下 | 保持 | 移动 | 抬起 |
|---|---|---|---|---|
| Tap | S1000 | 80ms | — | M5 + 200ms 停留 |
| Double-tap | S1000 ×2 | 各 80ms,间隔 100ms | — | M5 + 200ms 停留 |
| Long-press | S1000 → S750 | 1.2s | — | M5 + 200ms 停留 |
| Swipe | S1000 → S750 | 滑动期间 | G1,F3000/6000/10000 | M5 + 200ms 停留 |