请让我安利你一个好玩实用的遥控工具!
这,是一个无线万能遥控!结合了空中鼠标+键盘+语音输入功能!有点类似于激光翻页笔的升级!
演示一下!
原理:即通过发送端的MPU6050将人手部的动作转换为屏幕上光标的动作。

动图展示的是空中鼠标功能
及使用旋转编码器模拟鼠标滚轮
原理:发送端通过识别发送端按键的动作并将其发送给接收端,接收端将其编码为对应的鼠标或键盘上的USB的HID值发送到电脑端实现按键功能。

动图展示的是将按键设置为截屏键
配合空中鼠标功能实现图片内容标记
实现了语音打字!
原理:通过按键输入并利用电脑端输入法的快捷键功能实现语音输入功能开启,此时发送端再利用无线音频传输(OPUS编解码)将数据发送至接收端,进而上传至电脑端用于语音输入的识别。关闭时再由发送端使用按键输入功能将电脑端的语音输入功能关闭即可。

动图展示的是语音输入
使用的是windows自带的语音识别
(开启方式:windows徽标键+H)
原理:通过LVGL搭配外部FLASH实现按键对应键盘的键值可以自定义并且支持掉电不丢失,此外也支持电量显示、充电提示、充电完成提示、低电量提醒。

动图展示的是电量显示以及键值自定义操作
原理:使用TP4056实现锂电池充电以及为充电提示、充电完成提示提供依据;使用电源切换电路实现USB电源与电池电源自动切换;采用电池电量芯片获得电池的相对充电状态为电量显示与低电量提醒提供依据。
动图展示的是充电状态
(屏幕显示+LED 1S间隔闪烁(充满电变常亮))
它是怎么设计出来的呢?DIY成本是多少?
由于本作品的无线传输使用2.4G模块实现,所以在硬件上分为发送端(即手持端)与接收端(即插在电脑USB端口上)。
接收端原理图

接收端PCB图

发送端原理图

发送端PCB图

电源管理原理图
电源管理PCB图
发送端装配爆炸图
接收端装配爆炸图

软件采用hal库进行开发。
由于软件中涉及到的空中飞鼠功能以及无线音频传输,计算量大且对实时性要求较高,并且整体任务不多所以采用裸机编程的形式。
为了让软件各部分功能分配更加明确,运行更加有序。故将软件分为工作模式、设置模式、显示模式、休眠模式共四种模式。以工作模式为主进行模式切换,若要进入设置模式和显示模式则应等待工作模式完成所有任务进入空闲状态。
模式切换框图▼
以下是四种模式的具体运行框图+说明
1.工作模式
1.1 空中鼠标运行框图
1.2 语音输入运行框图
2.设置模式运行框图
1.此时编码器以及编码器按键均用于LVGL输入,编码器数值读取依赖于按键扫描定时器。
2.由于LVGL使用的字体等数据放置在外部闪存通过QSPI的内存映射模式读取,所以将用户自定义数据存储到外部FLASH时要先关闭内存映射再写入然后再打开内存映射。
3. 显示模式运行框图
1.读取电量计测量的电池电量,通过TP4056的充电指示引脚获取当前充电状态。
2.期间产生的编码器数值变化全部忽略,仅检测退出动作相关。
4. 休眠模式
软件采用HAL库进行开发。
主要任务就是将发送端发送过来的数据,解析为对应的鼠标和键盘数据以及音频数据,通过USB上传至电脑。
运行框图如下▼

鼠标以及键盘相关的HID数据参照USB的HID数据格式进行发送。
//数据包总长小于等于32字节
无线数据包格式:
-
数据包ID+(数据长度)+数据...+ 数据包ID+(数据长度)+数据 .....一包数据可以有多个数据包,但是如果是音频数据则不再添加HID数据
鼠标//数据长度固定为4,所以不再发送数据包长度
数据包ID: 1 //0000 0001
自定义控制:
-
报告ID的前六位用来指示鼠标左键分别是单击/双击/长按
例如:
-
数据包ID等于0000 0001 则若数据中出现鼠标左键按键按下/抬起,则代表长按/抬起;
-
数据包ID等于0100 0001 则若数据中出现鼠标左键按键按下,则代表单击;
-
数据包ID等于1000 0001 则若数据中出现鼠标左键按键按下,则代表双击。
键盘//数据长度固定为3,所以不再发送数据包长度//键盘数据均认为是对应按键单击//第二个字节为保留字节无意义所以不通过无线通信进行传输
数据包ID: 2// //0000 0010
编码音频流
数据包ID: 3// //0000 0011
数据长度:
-
不定长,但需要限制为可以单次传输完成
作者公布的DIY成本为
120元
本项目已开源!
——想复刻?想给作者点赞?可复制开源网址 前往原文。
开源网址:
https://oshwhub.com/zz56464123455/ji-yu-guan-xing-ce-liang-dan-yuan-de-zhi-xiang-xing-wu-xian-yan-shi-qi-she-ji
