为台式机设计的USB重力6D传感器
简介
想必大家都有台式机没有重力感应的烦恼,这款为主机设计的USB加速度和陀螺仪传感器能帮你解决问题!
简介:想必大家都有台式机没有重力感应的烦恼,这款为主机设计的USB加速度和陀螺仪传感器能帮你解决问题!开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
USB加速度陀螺仪传感器
想必大家都有台式机没有重力感应的烦恼,这款为主机设计的USB加速度和陀螺仪传感器能帮你解决问题!
插在机箱后置的USB就有了:
- 自动旋转:翻转机箱时自动旋转屏幕;
- 自由落体检测:检测到机箱坠落时自动销毁数据,无后顾之忧;
- 识别机箱摔倒:你的主机似乎摔倒了,需要帮您联系维修吗?
- 地震报告:当发生七级以上地震时延后两秒通知您及时处理;
为了防止吃灰,为它增加了一些额外功能,可以当做USB开发板:
- 串口UART:线序参考了USB转串口设备,写入USB-CDC固件可以当做USB转串口;
- RGB指示灯:好看,没用;
- 两个按键:默认是调试用途,可以配置成通用按键;
- SD卡槽:可以当做速度极慢的USB读卡器使用;
手写上述功能代码就学习了:USB-HID,USB-CDC,USB大容量储存设备。
后面还附上了(有代码):
- 空中鼠标:重力检测映射到鼠标,指针随设备方向移动;
- 接入游戏引擎:实时控制3D物体;
操作鼠标和操作游戏的部分看看下面的视频吧。
硬件设计
基于比较便宜的stc8h8k64u单片机,和lsm6ds3tr传感器。立创BOM约14¥,某宝约10¥。
使用通用U盘板型,可以使用普通U盘外壳。
正面放了SD卡槽,与按键和指示灯有冲突,所以按键在背面。
硬件注意事项:
1. P54(NRST)引脚做复位脚时内置4.1K上拉,不需要外部上拉,做普通IO时开启内部上拉即可,省略了外部上拉电阻;
2. 为了保证单片机复位时SD卡不会出现误动作,SD卡所有引脚都加了47K上拉电阻,软复位和重启进入ISP模式时保持高电平;
3. RGB指示灯加了比较大的限流电阻(10K因为我嫌它太亮),可以适当减小,否则可能偏暗;
PCB渲染
实拍
可以使用通用U盘外壳!
软件包含
附件里的代码可能不会更新,软件部分:
请访问github:https://github.com/lzyor/oshw-usb-gyro
- firmware-gyro-hid:固件代码实现hid
- py-air-mouse:python读取数据和模拟鼠标
- rs-bevy-3d-view:rust实现简单滤波和3D界面演示
截图
操作平衡器游戏,模拟鼠标
接入3D游戏引擎,计算空间角度
固件代码 firmware-gyro-hid
简单实现 usb-hid
免驱设备,请自行修改描述符文件。
基于sdcc4.4编译器,移植到keil请注意语法和字节序问题。
包含usb-hid代码和lsm6ds3tr驱动。外设和引脚配置请参考 bsp.c
和 bsp.h
文件。
# 清理
make clean
# 编译
make
# 输出位于 bin/main.ihx
默认工作在 24MHz
,复位脚用作复位。固件代码检测 DL
按钮,按下时自动复位到 usb-isp
下载模式。两个按键可以配置成普通通用用途。
模拟鼠标 py-air-mouse
样例代码,无滤波,python访问设备并读取传感器值,并模拟鼠标操作实现“空中鼠标”功能。显然,也可以修改固件实现硬件鼠标,这里的代码是软件模拟鼠标。
基于 hid
包,模拟鼠标基于 pyautogui
包。
# pip install hid
# pip install pyautogui
./main.py
演示3D模型 rs-bevy-3d-view
样例代码,用rust读取传感器值并简单滤波,bevy 3D引擎把设备的旋转角度用3D模型还原出来。
角度映射和滤波非常简陋,实际应用需要修改。
素材文件夹里保存了PCB的3D模型。
# rust最低版本1.75
cargo run
---
更新了B站视频: https://www.bilibili.com/video/BV1uM4m1R7bB/
评论