win8 发表于 2020-4-16 01:38

手搓surface dial!

本帖最后由 win8 于 2020-6-17 22:50 编辑

更新:
感谢3L@jiangming1399提供的信息,我使用微软提供的hid范例和github现成的轮子魔改了一下,用Android安装一个app,通过蓝牙链接pc,把手机模拟为一个dial设备。无需在pc上安装软件就实现了Windows转盘设备的基本功能。

下载链接   https://github.com/tumuyan/Kontr ... 0.2/app-release.apk
应用已经上传酷安,但是迟迟没有审核通过,我也莫得办法。后边会上传小米市场,其他市场就因为需要软著之类的资料,懒得折腾就不上传了。
使用前提:手机系统Android9以上。(硬性要求)电脑需要运行Windows 10 周年更新或更高版本并且具有蓝牙 4.0 LE。(这是微软官网要求,别问我周年更新是啥,我也不懂。)蓝牙4.0实际上是非必须的,我的笔记本的蓝牙网卡坏掉了,插了一个2.1的适配器,也能正常工作使用方法:
从电脑上删除手机和电脑的蓝牙配对在手机上打开APP用电脑搜索手机并配对。在APP的顶部弹出配对请求时,点击同意(很重要,如果顶部没有弹出请求而是底部直接弹出,操作就失败了)配对完成,在选项中为auto pair打勾通过点击图标中央,或者在环状区域滑动,可以实现surface dial的操作及功能。点击键盘图标,可以用此APP模拟蓝牙键盘(只能用键盘输入英文和数字符号,不可拼音打字)

因为是开源项目魔改,因此公开代码: https://github.com/tumuyan/Kontroller
能力实在有限,凑凑乎乎可以用没有明显bug,但是代码绝对不漂亮。如果有人看不下去不要喷,动手改代码就是了。

做了一个介绍的视频
https://www.bilibili.com/video/BV1tV411k73h/
--------------------------------------------------------

原帖:


surface dial自从发售就相当吸引我。几个方面的因素:1 效率。实体机械外设操作精准,对一部分人的效率加成
2 简洁。通过“一个大按钮”可以完成快捷操作
3 生态。Windows10 已经内置了对dial外设的支持。很多设计工具也增加了dial的原生支持。也可以通过系统设置做自定义设置。

然而dial售价还是很贵。并且实际上手之后,发现按压操作并不太跟手——当然也可能试用的时间太短了。在与studio的配合中,由于铰链提供的支撑力不足,而dial下压操作需要太大的力,也并不很美。
然后我关注了很多类似的产品,发现最棒的是 3dconnexion——在3d软件中可以很直感地调整三轴,然而更贵了

所以我打算手搓一个,并且行动了。这是我的半成品的视频https://www.bilibili.com/video/BV16s411G7bE
并且买了一个PS2的DJ打碟机外设做硬件迭代(成熟产品的手感比凑数编码盘好太多了)但是玩着玩着打碟机玩挂了。后来因为一些其他的因素,我也没有继续开发。
http://i02.c.aliimg.com/img/ibank/2011/836/056/338650638_1799394484.jpg

时隔一段时间,我又用Android手机写APP在模拟dial+快捷按钮+语音助手+按键精灵,没错 这里有很多产品的影子。github上也有现成的轮子,改一改已经实现了不少功能——但是后来还是咕咕咕了。

今天晚上在b站看视频居然发现有人手搓usb dial成功了!up在闲鱼卖成品二手,价格略贵。(当然这东西造出来成本的确低不到哪里去)至于怎么做呢?up秘而不宣,说什么有朋友的代码朋友无意开源云云...
然而实际上,在github就有成品代码,恐怕up也只是个二道贩子罢了。https://github.com/ahmsville/Ahmsville-Dialhttps://blog.tindie.com/2019/07/ahmsville-dial-diy-take-microsofts-surface-dial-controller/
考虑到令我不爽了,所以也就不放他的视频/闲鱼链接了。口头上感谢一下up吧。

从介绍的视频(需要爬墙),除去目前是有线的,已经非常精致完美了。只是我有一个疑惑,为什么要使用霍尔元件和震动马达,而不是直接使用有机械感的编码器?


benjin 发表于 2020-4-16 05:00

这个有意思啊

jiangming1399 发表于 2020-4-16 08:49

https://docs.microsoft.com/zh-cn/windows-hardware/design/component-guidelines/radial-controller-sample-report-descriptors

其实微软早就公开了Surface Dial的协议,自己根据蓝牙或者USB HID实现一个就行。
不用编码器的原因大概是因为编码器旋转步进太高,一个大概20度左右,而Surface Dial协议里面的旋转角度步进是0.1度,这可能会导致操控不精确的问题(这段是我瞎说的)
震动马达在协议里面是选配,协议要求只要上报一个角度和一个按下事件就可以。。

win8 发表于 2020-4-16 10:07

jiangming1399 发表于 2020-4-16 08:49
https://docs.microsoft.com/zh-cn/windows-hardware/design/component-guidelines/radial-controller-samp ...

感谢!很有道理。我自己手搓的时候,因为编码器count只有24?计算了编码器的旋转速度,当速度较高时,进入快速模式(实际发送指令是count的2x   3x   5x),当滚动速度变慢时进入精准模式

win8 发表于 2020-6-17 22:52

已经做出来了,更新一下。感兴趣可以安装试用:
https://github.com/tumuyan/Kontroller/releases/download/0.2/app-release.apk

拯救节操希灵宅 发表于 2020-6-17 23:48

楼主,你google play上的版本还没更新。

win8 发表于 2020-6-18 00:48

拯救节操希灵宅 发表于 2020-6-17 23:48
楼主,你google play上的版本还没更新。

play是别人做好的,现在我fork后修改功能并且改了包名
页: [1]
查看完整版本: 手搓surface dial!