发作品签到
专业版

#第九届立创电赛#USB小键盘

工程标签

262
0
0
1

简介

一个使用屏幕提示按键排列的迷你USB键盘

简介:一个使用屏幕提示按键排列的迷你USB键盘
复刻成本:80

开源协议

MIT License

创建时间:2024-10-08 22:50:33更新时间:2024-10-16 09:18:34

描述

注:* 为必填项

请在报名阶段填写 ↓

 

* 1、项目功能介绍


生活中不时需要用到外接键盘,但常规外接键盘往往体积较大,携带也不方便。于是我萌生了自己做一个小键盘的想法,通过软件定义按键功能,使用屏幕显示当前键盘的按键配列,从而实现体积小、按键全、易用、触感好的需求。

手上刚好有esp32s2开发板支持硬件USB,搞起!

 

*2、项目属性


原创,首次公开

 

 

* 3、开源协议


MIT

 

请在竞赛阶段填写 ↓

 

*4、硬件部分


一、主体电路

  1. 由于开发板的USB仅能用于烧录和供电,不能用于USB hid通讯,因此需引出USB d+ d-到pcb外侧;
  2. 为方便调试及后续扩展,使用多排排针引出开发板全部io,并为串口、spi、I2C引出专门的排针组;除满足键盘基本功能外,也方便直接使用开发板的资源做其他工作。
  3. 由于制作小键盘按键数量少,为实现全部按键的功能,需要使用软件实现按键功能切换(即换层);传统键盘换层依靠人本身的记忆,有学习和使用门槛;本设计使用屏幕来提示当前按键布局。
  4. esp32s2虽然io资源非常多,但是为了实验键盘矩阵(使用二极管防鬼影、掩蔽),使用2*5矩阵设计电路;为充分利用手头余料,二极管设计了两种焊盘尺寸,择一焊接即可。
 
 

二、定位板。

定位板是机械键盘的重要组成部分,定位板可以对按键支撑固定,让按键更加稳定。

直接沿轴体安装区域绘制外形框并阵列,添加板框,以pcb外形层的方式完成定位板的绘制。

 

(实物为早期版本,原定通过螺丝进行定位,实际发现并没有安装螺丝的必要)

 

三、外壳绘制。

1. 由于按键区域需要裸露在外,开发板和屏幕所在区域需要使用外壳保护,使用立创eda绘制这样的外壳存在一定难度。

本案使用上下盖的方式绘制方盒,对按键区域进行整体挖槽,按键和开发板之间添加实体(需准确计算实体和上下盖的高度)实现外壳基本结构

2. 为了让按键得到足够的支撑力,下压的确定感更清晰,相邻按键之间全部添加螺柱(但是实际不拧螺丝)作为结构上的支撑柱

组装后实物(使用了无刻键帽垃圾包搭配的渐变色)

3. OLED区域上盖开窗,并绘制盖板(使用透明材质加工或者打印),也可以使用正面面板取代。

 

*5、软件部分


由于esp32有乐鑫官方支持arduino环境,本项目使用arduino ide开发。烧录也非常简单,通过主板上引出的串口连接到电脑,或者通过开发板上的USB连接电脑USB即可,然后通过上电前按下boot按键(pin 0)进入烧录模式即可串口烧录。

代码主要分以下几个部分:

1. 矩阵按键扫描。针对矩阵按键进行了编程实验,最终选择了调用更为简洁的Adafruit_Keypad库。

2. USB键盘设备功能实现。乐鑫官方库已经提供了USBHIDKeyboard类,根据范例初始化USB功能、发送按键事件即可。需要注意的是此库调用的参数并非hid协议定义的keycode,再叠加方便自定义的因素,需要重新对键盘事件函数进行重新包装,才能方便直观地把配置转换为实际调用的参数。

3. 按键功能定义、换层功能。通过实际测试,最终决定使用二维数组存储按键定义,按下右下方按键进入换层模式,如此时按下其他按键则切换到对应层,如未按下其他按键触发右下方按键自生功能,如按下当前层对应的按键则无事发生。

按键二维数组:

short keySets[layerNum][10] = {

  { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' },
  { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' },
  { 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't' },
  { 'u', 'v', 'w', ',', KEY_BACKSPACE, 'x', 'y', 'z', '.', KEY_RETURN },
  { '+', '-', '*', '/', '\\', ' ', '.', ';', '\'', '=' },
  { KEY_PAGE_UP, KEY_UP_ARROW, KEY_PAGE_DOWN, KEY_TAB, KEY_ESC, KEY_LEFT_ARROW, KEY_DOWN_ARROW, KEY_RIGHT_ARROW, KEY_RETURN, KEY_HOME },
  { KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10 },
  { KEY_F11, KEY_F12, KEY_F13, KEY_F14, KEY_F15, KEY_F16, KEY_F17, KEY_F18, KEY_F19, KEY_F20 },
  // {KEY_APPLICATION, KEY_MENU, KEY_HELP, KEY_SELECT,KEY_STOP,KEY_CANNEL, KEY_CLEAR,KEY_RETURN, KEY_PRINTSCREEN,KEY_PAUSE}
  { KEY_APPLICATION, CONSUMER_CONTROL_HOME + 1000, CONSUMER_CONTROL_BACK + 1000, KEY_PRINTSCREEN, '#',
    CONSUMER_CONTROL_SEARCH + 1000, KEY_BACKSPACE, KEY_RETURN, KEY_TAB, '3' }
};

 

4. OLED屏幕驱动和内容模板。

OLED屏幕使用Adafruit_GFX库驱动,但是需要针对显示内容进行重新包装。

显示内容始终为4行文本,其中1/2行对应两排实体按键的功能。第3行提示按键状态(编号几的按键按下或者放开),仅供调试和演示动画。第四行反色提示当前功能(键盘/换层)

显示的内容使用字符串数组保存,通过当前功能(键盘/换层)、所在层、按键状态决定渲染的字符串。

5. 考虑OLED屏幕寿命和老化,一定时间无操作则关闭OLED,有操作时再唤醒屏幕。

 

*6、BOM清单


BOM见自动生成的bom,需要注意需额外购买:

  1. 0.96英寸I2C协议的OLED屏幕 * 1 (这个应该人人有吧,如果没有建议淘宝购买)
  2. esp32-s2-salola * 1 
  3. 按键键帽 * 10  (建议淘宝购买无刻键帽垃圾包)
  4. M3 螺丝 * 4
  5. USB数据线  * 1 (一端为)

BOM中以下器件根据实际需求准备:

  1. USB插座可以不准备,使用排针-排母的方式插接USB线,或者直接焊接USB线到pcb
  2. 排针排母可以根据实际需求酌情焊接
  3. D1-D10,以及D11-D20是为兼容不同封装尺寸二极管而绘制的两组焊盘,可以根据手头的零件选择其中一组焊接
  4. 轴体根据个人喜好购买,注意引脚需要与PCB匹配(凯华2脚)

 

*7、大赛LOGO验证


* 8、演示您的项目并录制成视频上传


 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
code.zip
0
2
立创电赛:USB小键盘-功能演示.mp4
0
3
立创电赛:USB小键盘-功能演示(1).mp4
0
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航