描述
<p>注:*为必填项。</p>
<p>【请在报名阶段填写 ↓】
* 简要介绍作品:
19世纪法国著名作家雨果有一次出国旅行, 经过某个国家的边境时, 遇到了负责检查登记的宪兵。宪兵:“姓名?”雨果:“维克多·雨果。”宪兵:“干什么的?”雨果:“写东西的。”宪兵似乎有点儿不解,继续盘问:“靠什么谋生?”雨果答道:“笔杆子。” 宪兵结束了盘问,在登记薄上面写着:姓名:维克多·雨果,职业:笔杆贩子。</p>
<p>如果说笔是作家的谋生工具,那么键盘就是程序员的谋生工具了。随着时代的发展,键盘的接口也经历了大PS2到小PS2接口,然后是USB 甚至是无线还有蓝牙的发展历程。显而易见,蓝牙是方便的接口,能够兼容所有的带有蓝牙Host控制器的设备,甚至可以直接在 iPad 上输入文字。但是对于普通用户来说,蓝牙机械键盘价格昂贵,同时也不一定是手感最好的款式。因此,这里给出了一种能够将USB接口转化为蓝牙的设备。</p>
<p>从原理上说,首先 Arduino 控制 MAX3421 芯片来进行USB 键盘的解析,然后将获得的键盘数据通过串口发送到蓝牙模块上,之后和蓝牙配对的主机设备即可收到按键的信息。</p>
<p>【请在竞赛阶段填写 ↓】</p>
<p>* 一、作品详情;
这是一个能够将有线的USB 键盘转换为蓝牙信号的的设备。</p>
<p>* 二、描述作品所面临的挑战及所解决的问题;
主要挑战:
1.USB 数据的解析,通常的单片机没有USB Host 功能,少数带有USB Host 功能的在使用上也非常复杂。最终,选择用 MAX3421e芯片来完成解析键盘数据的功能。这个芯片是 Arduino USB Host Shield的核心,因此可以直接调用库来完成USB键盘数据的解析;
2.设计转接器就是为了让键盘抛弃连线,因此需要携带电池来保证移动性的要求。出于容量体积和常见性方面的综合考量,最终选择18650电池来做电力存储。此外还需要设计充电放电相关电路,传统设计上这部分会比较复杂,最终参考充电宝设计,选用了充电宝使用的充放电芯片:IP5306。这样方便的解决了充放电还有防止过充过放等等的问题,整体电路也很简单;</p>
<ol>
<li>蓝牙数据的发送。得益于万能的淘宝,直接选择串口蓝牙HID模块。直接通过串口与之通讯就能将按键信息以蓝牙键盘输入的方式发送到电脑或者iPad上。</li>
</ol>
<p>* 三、描述作品硬件、软件部分涉及到的关键点;</p>
<p>硬件部分:四大模块,分别是IP5306充放电管理芯片,主控芯片328P ,蓝牙模块(特别注意要用 蓝牙 HID 模块,通常的蓝牙透传串口模块不行)还有USB Host芯片 MAX4321e。
1.先介绍最简单的部分:充放电芯片 IP5306
<img src="//image.lceda.cn/pullimage/qVRxwj7z7K9ekCEdVNyhyUrrD0oBpt0mOZE19pd0.png" alt="image001.png">
左上角是5V 供电,从这里输入5V能完成供电和充电(板子上一个 MINI USB Port 作为充电输入)。他的下方是4个 LED 用来指示当前电量,这个和常见充电宝所是相同的。右上角BOARD_+5V 是 5V 的输出。实际上主芯片328P 蓝牙和MAX4321e都是使用 3.3V 作为工作电压的。下面是电池接口,连接一个 18650电池。右下角是一个开关和MOSFET。按键的作用是唤醒整个系统,比如,当前系统关机了,通过按下这个按钮让电池开始输出5V电压。另外,PWR_EN 是连接到 328P 的一个 GPIO 上,每隔一段时间会拉低让芯片对应的Pin(Key引脚)拉低一次,这样做的原因是 IP5306上电之后,如果一段时间(20s)输出电流低于100ma会自动切断供电以便达到省电的目的。通过拉低能让 IP5306保持工作,维持系统的电力供应。主控芯片会采用定时拉低这个Pin的方式保持供电。</p>
<p>2.接下来介绍一下解析USB键盘数据的芯片 MAX3421e。虽然这个芯片功能很强大(解析USB协议,有兴趣的朋友可以去看一下笔者使用 USB Host Shield 完成的其他作品。理论上用这个芯片能够解析所有键盘),但是对外连接非常简单:右侧红框指出了和328P通讯的引脚,是标准的 SPI 接口;下面是这个芯片本身的GPIO,因为328P引脚不足,这里用MAX3421e的GPI 连接了4个按钮。
<img src="//image.lceda.cn/pullimage/DEXNaG7ZuEmywHyU2kqKUTljM9e4Aucaz6pYHh4Q.png" alt="image002.png"></p>
<p>3.这是蓝牙HID 模块部分。特别注意,这个模块虽然外观引脚和常见的蓝牙透传模块相同,但是实际上并不通用,它内部使用蓝牙HID 的协议,在Host端看起来是键盘或者鼠标。数据是通过上面的串口进行传递的;此外右侧还有一些用于蓝牙控制的引脚。PAIR 用于切断当前的配对状态以便和其他设备重新配对;STAUS用于反映当前的状态,诸如待机,正在连接或者已经连接;BT_WAKE 可以用于唤醒休眠省电中的模块;此外还有 SCR_LOCK CAP_LOCL 和 NUM_LOCK 用于反应当前的键盘状态,比如:大小写。一个操作系统可以连接很多键盘,但是键盘的状态是同一个。比如,一个键盘切换到大写状态,那么其他的键盘也会收到通知同步切换到大写状态,这个动作是操作系统来完成的。
<img src="//image.lceda.cn/pullimage/BF879Bp9yB5qDk2OY2FyrN2AciJoV8m1II7GzNN3.png" alt="image003.png">
4. 最后介绍一下使用的主控芯片 Atmel 328P。这次的整体设计首先是在 Arduino Uno上验证通过的。所以也选择相同的主控芯片。使用8Mhz 的晶振可以帮助降低整体功耗。为此在第一次上电烧写Bootloader时需要特别注意选择对应的 Pro Mini 8Mhz 设置。之后可以使用Arduino IDE通过额外的USB转串口模块烧写代码。同时Debug 也是通过这个USB串口模块进行的。328P 是通过 Software Serial 和 蓝牙模块进行通讯的。硬串口用于烧写代码。
<img src="//image.lceda.cn/pullimage/UiRFl27DeeRpl4BFZ3xFsb5nQ0m09bwTjfsW8yjo.png" alt="image004.png"></p>
<p>* 四、作品材料清单;</p>
<table>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Item</td>
<td>Quantity</td>
<td>Reference</td>
<td>Part</td>
<td>Package</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>CN1</td>
<td>USB2.0_1X1_4P</td>
<td>USB_TYPEA_RIGHT</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>C1,C28</td>
<td>100uF/25V</td>
<td>ECAP2.5MM</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
<td>C2,C14,C27,C30</td>
<td>10U</td>
<td>CC1206</td>
</tr>
<tr>
<td>4</td>
<td>1</td>
<td>C3</td>
<td>1U</td>
<td>CC0805</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>C4,C5,C15,C19</td>
<td>100n</td>
<td>CC0603</td>
</tr>
<tr>
<td>6</td>
<td>2</td>
<td>C7,C31</td>
<td>22uF/25V</td>
<td>ECAP2.5MM</td>
</tr>
<tr>
<td>7</td>
<td>1</td>
<td>C11</td>
<td>220uF/25V</td>
<td>ECAP2.5MM</td>
</tr>
<tr>
<td>8</td>
<td>2</td>
<td>C12,C13</td>
<td>22P</td>
<td>CC0603</td>
</tr>
<tr>
<td>9</td>
<td>2</td>
<td>C16,C18</td>
<td>0.1uF/25V,X5R</td>
<td>C0402</td>
</tr>
<tr>
<td>10</td>
<td>1</td>
<td>C17</td>
<td>1uF</td>
<td>C0402</td>
</tr>
<tr>
<td>11</td>
<td>2</td>
<td>C20,C21</td>
<td>12P</td>
<td>CC0603</td>
</tr>
<tr>
<td>12</td>
<td>1</td>
<td>C29</td>
<td>10U</td>
<td>CC0805</td>
</tr>
<tr>
<td>13</td>
<td>1</td>
<td>D3</td>
<td>GND_LED</td>
<td>LED0603</td>
</tr>
<tr>
<td>14</td>
<td>8</td>
<td>D4,D6,D7,D8,D9,D11,D12,D13</td>
<td>GRN LED</td>
<td>LED0603</td>
</tr>
<tr>
<td>15</td>
<td>1</td>
<td>D14</td>
<td>RED_LED</td>
<td>LED0603</td>
</tr>
<tr>
<td>16</td>
<td>2</td>
<td>D15,D16</td>
<td>GRN_LED</td>
<td>LED0603</td>
</tr>
<tr>
<td>17</td>
<td>1</td>
<td>J1</td>
<td>CON2_BAT</td>
<td>CON-SIP-2P</td>
</tr>
<tr>
<td>18</td>
<td>2</td>
<td>J2,J3</td>
<td>8 HEADER</td>
<td>SIP-8P</td>
</tr>
<tr>
<td>19</td>
<td>1</td>
<td>J4</td>
<td>USB</td>
<td>USB</td>
</tr>
<tr>
<td>20</td>
<td>1</td>
<td>L1</td>
<td>1uH</td>
<td>NLF2520</td>
</tr>
<tr>
<td>21</td>
<td>1</td>
<td>L2</td>
<td>10uH</td>
<td>NLF2520</td>
</tr>
<tr>
<td>22</td>
<td>1</td>
<td>PS1</td>
<td>PTC_1.5A_1206_SMD</td>
<td>1206</td>
</tr>
<tr>
<td>23</td>
<td>1</td>
<td>Q1</td>
<td>AO3415</td>
<td>SOT-23</td>
</tr>
<tr>
<td>24</td>
<td>2</td>
<td>Q3,Q4</td>
<td>2N7002</td>
<td>SOT-23</td>
</tr>
<tr>
<td>25</td>
<td>1</td>
<td>RN1</td>
<td>10K*4</td>
<td>RC0603RN4</td>
</tr>
<tr>
<td>26</td>
<td>7</td>
<td>R1,R4,R5,R6,R7,R14,R16</td>
<td>10K</td>
<td>RC0603</td>
</tr>
<tr>
<td>27</td>
<td>1</td>
<td>R10</td>
<td>100</td>
<td>R0402</td>
</tr>
<tr>
<td>28</td>
<td>1</td>
<td>R11</td>
<td>1M</td>
<td>RC0603</td>
</tr>
<tr>
<td>29</td>
<td>2</td>
<td>R12,R13</td>
<td>0</td>
<td>RC0603</td>
</tr>
<tr>
<td>30</td>
<td>1</td>
<td>R15</td>
<td>0.5</td>
<td>RC0603</td>
</tr>
<tr>
<td>31</td>
<td>6</td>
<td>SW1,SW2,SW3,SW4,SW5,SW8</td>
<td>SW PUSHBUTTON</td>
<td>TACT-SW</td>
</tr>
<tr>
<td>32</td>
<td>1</td>
<td>U1</td>
<td>IP5306</td>
<td>SO8</td>
</tr>
<tr>
<td>33</td>
<td>1</td>
<td>U2</td>
<td>74LVC245</td>
<td>SO20WB</td>
</tr>
<tr>
<td>34</td>
<td>1</td>
<td>U3</td>
<td>ATMEGA32P</td>
<td>TQFP32</td>
</tr>
<tr>
<td>35</td>
<td>1</td>
<td>U4</td>
<td>MAX3421E</td>
<td>MAX3421</td>
</tr>
<tr>
<td>36</td>
<td>1</td>
<td>U5</td>
<td>HC-06</td>
<td>BT34</td>
</tr>
<tr>
<td>37</td>
<td>1</td>
<td>U7</td>
<td>TPS62203</td>
<td>SOT23-5</td>
</tr>
<tr>
<td>38</td>
<td>1</td>
<td>X1</td>
<td>12MHz</td>
<td>CRYSTAL</td>
</tr>
<tr>
<td>39</td>
<td>1</td>
<td>Y1</td>
<td>16M</td>
<td>crystal</td>
</tr>
</table>
<p>* 五、作品图片上传;(PCB上须有大赛logo标识并拍照上传,若无视为放弃参赛)
正面:
<img src="//image.lceda.cn/pullimage/nwweiBB1EOuxAFPlyAn0GqWX5ZKNzSKR87ZeoB4O.png" alt="image005.png"></p>
<p>背面:
<img src="//image.lceda.cn/pullimage/ekdTNuthAScr7fEKONu4H5XMu1KL5LR2bc6aSIV9.png" alt="image006.png"></p>
<p>* 六、演示您的作品并录制成视频上传;(视频内容须包含:作品介绍;功能演示;性能测试;PCB上大赛logo标识特写镜头,若无视为放弃参赛)
附件中</p>
<p>七、开源文档。
源代码和电路图在附件中</p>
-
配合 Anrdoid.mp4
-
配合 Ipad.mp4
评论(6)