描述
<p>【请在报名阶段填写 ↓】
<em> 1、自我/团队介绍
本人是Arduino爱好者,个人网站 www.lab-z.com, 一直在使用 Arduino 制作各种有趣的设备 .
</em> 2、简要介绍项目
去年的时候,阿米洛推出一款名为“计算器”的机械键盘,键盘右侧的显示屏和小键盘区域可以组成计算器来使用。这次,我通过 Arduino 制作一个设备来实现将普通USB键盘变成带有计算器功能的键盘。
<img src="//image.lceda.cn/pullimage/FGzcHzMDqltbfqgPd05uiGiNI0lsFqXn37iVVbms.jpeg" alt="tmp1.jpg">
【请在竞赛阶段填写 ↓】
* 1、描述项目详情
我们的目标是通过设计一个设备,让普通键盘也有计算器的功能,此外我们还额外加入语音播报。</p>
<p>* 2、描述项目所面临的挑战及所解决的问题
设计思路是在键盘和PC之间插入我们的计算器设备,将所有的按键信息原封不动的发送给主机,另外如果发现有小键盘按下时将按键信息解析给计算9器使用。</p>
<p>* 3、描述项目硬件、软件部分涉及到的关键点
硬件的设计上使用了 Arduino Pro Micro 3.3V 版和 USB Host Mini Shield。电路图如下:
<img src="//image.lceda.cn/pullimage/QLHOscEpFA9y24MI99EfmJC20HOkKi4zyFdSZwTM.png" alt="tmp2.png">
PCB 设计如下:
<img src="//image.lceda.cn/pullimage/ElJeB9moKiLulFIJoHt2fMV1UJBm9sDiwUZY63QO.png" alt="tmp3.png">
3D预览如下:
<img src="//image.lceda.cn/pullimage/WFkr17cNlqKGBx8Mvh3r0yHvIcEDxDj9hnigzpUI.png" alt="tmp4.png"></p>
<p>硬件设计完成后就要开始软件设计了。
1. 因为计算机计算范围可能超过Arduino 的整数范围,所以需要选择一个“大数库”,最终实验确定使用 nickgammon编写的BigNumber
Library【参考1】;
2. 我们使用 USB Host Shield Library来完成 USB 键盘按键信息的解析;通过实验确定的小键盘区键值如下:
<img src="//image.lceda.cn/pullimage/PsrrFzRA2cFXqTgguxxBzwYgssfD4mfKd0oIllMa.png" alt="tmp5.jpg">
3. 有了上面两步,就可以进行计算的设计了。 设计上使用状态机的描述,这是一种程序设计的常用方法,能够让帮助代码设计结构清晰,封装性好(多说一句,很多年前我差点该行去做软件。有一段时间,我所在的工厂传说要把主板生产线搬迁到广东东莞,当时的东莞号称“十大暴力城市”之首,坊间也充满各种砍手抢手机的新闻。为了提前做准备,我和另外一个同事联系了软件组,希望转过去写软件不用跟着搬迁。面试的一道题目是如何用一个按键设计自动控制电动门。最终的面试结果是对方的老板没收我们,不过他在讲解面试题目解析的时候顺便给我们讲了一下状态机的设计方法,让我茅塞顿开受益匪浅。所以,开卷有益,多多跳槽也是很有益处的)。下面这个图的意思是这样的:上电之后,程序处于 Status0,收到NUM(数字)按键后会转移到 Status1中(这也意味着只接收数字键);之后如果再收到 NUM,那么仍然维持在 Status1(第一个运算数变大),如果收到 DOT(小数点),那么转移到Status2;如果收到 OP(运算符),那么转移到 Status3…… 下面 NUM 表示 0-9 的数字;DOT 表示 “.” 这个小数点;OP 表示“+-*/”运算符; ENTER 作为 “=”。从这里也能看出来,如果没有对应文档的话,直接查看代码简直是一场噩梦。
<img src="//image.lceda.cn/pullimage/jaP3xTYZNnwF8I4VvM2wqls44yB6h7zLScZYlXrK.png" alt="tmp6.png">
6. 为了更加接近普通计算器,特别加入了语音功能。播放语音是通过 SYN6288语音模块来实现的。Arduino 将命令和文字的 Unicode 编码后发送到模块的串口即可【参考2】。</p>
<p>* 4、项目材料清单展示</p>
<table>
<tr>
<th></th>
<th></th>
</tr>
<tr>
<td>元件</td>
<td>用途</td>
</tr>
<tr>
<td>Arduino Pro Micro 3.3V</td>
<td>工作在 3.3V下面的 32U4 可以直接和 USB Host Shield直接通讯(常见的是5V 的,不能直接通讯)</td>
</tr>
<tr>
<td>USB Host Shield Mini</td>
<td>用来解析 USB 数据</td>
</tr>
<tr>
<td>SYN6288语音模块</td>
<td>串口接收数据,用来播放语音</td>
</tr>
<tr>
<td>1602 LCD</td>
<td>1602 液晶,I2C 接口</td>
</tr>
</table>
<p>* 5、项目图片上传
5.1、PCB上印制大赛logo图片,若无视为放弃参赛
<img src="//image.lceda.cn/pullimage/Elgmli8OrjlngF4uD9HQ6BZF5Nj1pu7l64X8xotE.jpeg" alt="IMG_20200911_084344.jpg"></p>
<p>5.2、项目其它图片
<img src="//image.lceda.cn/pullimage/MxiZOOt37svYabSV8lqA9nYZMsVi23MxC81eOhUi.jpeg" alt="IMG_20200911_082628.jpg">
* 6、演示您的项目并录制成视频上传
6.1、视频上传大赛官网
6.2、B站视频标题和链接
视频可以在 <a href="https://www.bilibili.com/video/bv1q54y1C7VL" target="_blank">https://www.bilibili.com/video/bv1q54y1C7VL</a> 看到</p>
<p>* 7、是否首次公开发布
7.1、首次发表
7.2、首次制作</p>
<p>* 8、开源文档
具体代码和使用的库文件可以在附件中看到。</p>
<p>* 9、参考文献
1. <a href="https://github.com/nickgammon/BigNumber" target="_blank">https://github.com/nickgammon/BigNumber</a>
2. <a href="http://www.lab-z.com/ttssyn/" target="_blank">http://www.lab-z.com/ttssyn/</a></p>
评论(1)