
隔空翻页PPT
简介
使用STM32 F407内置USB外设、外部手势识别传感器,实现电脑PPT、网页隔空翻页
简介:使用STM32 F407内置USB外设、外部手势识别传感器,实现电脑PPT、网页隔空翻页开源协议
:GPL 3.0
描述
视频链接:
项目简介
本项目为基于立创天空星开发板制作的一款隔空翻页PPT电子应用,主要使用的电路模块为立创天空星开发板、外部手势识别传感器电路、OLED屏幕,其中OLED屏幕用于显示手势识别的手势类型/翻页动作类型。
项目功能
本设计采用立创天空星开发板作为主控板,主控板MCU采集手势识别传感器数据后,根据解析的手势类型向PC机发送相应HID指令完成PPT翻页切换。
1.使用嘉立创EDA完成扩展电路板设计,根据手势传感器IC的参考应用电路重新设计一版手势识别模块电路,模块通信接口为IIC,该IC同时引出了SPI通信接口,因此扩展板也相应引出SPI通信引脚,为之后驱动PAJ7620也可使用SPI通信。PCB版本1为扩展板设计,PCB版本2为手势识别模块独立设计
2.完成PC端PPT翻页需要使用STM32 F407内置USB外设通过USB数据线与PC端通信,在通信过程中可以使用相应的USB协议分析工具进行通信数据解析,测试数据解析正确说明USB通信正常
项目参数
- 本设计采用PAJ7620手势识别传感器,具有精确的手势识别能力;
- 本设计采用STM3F407系列主控MCU,具有USB通信接口,同时具备高速总线通信、高速数据处理能力;
- 本设计采用0.96inch OLED模块,屏幕驱动IC为ssd1306,常见的一款单片机屏幕模块,具有驱动简单、图像阵列数据量小等优点
原理解析(硬件说明)
PAJ7620 IC内部结构图
传感器简介:
PAJ7620U2 芯片是原相科技(PixArt)公司推出的一款光学数组式传感器,芯片内置集成光源和环境光抑制滤波的 LED、镜头和手势识别传感器,能在黑暗或低光环境下工作,同时内置了支持九种手势的手势识别和物体接近检测功能。手势识别模块使用II2C接口,使用相应的库函数即可编程控制,手势识别模块返回的信号可用作为机器人接收的控制信号,从而实现对机器人的控制。内置的识别算法相当智能,能够把双手从生硬的按键中解放出来。手势识别传感器可用于非接触式控制场景如非接触式鼠标,智能家居,汽车点击设备控制,机器人交互等。
可识别的手势类型如下图所示:
示例图1--PAJ7620参考设计电路:
软件程序采取硬件IIC、软件IIC驱动方式,软件IIC可以灵活切换驱动引脚,但屏幕刷新速率不如硬件IIC快。以上两种驱动方式可在main.h头文件中通过一宏定义标志一键切换
硬件IIC连接引脚为:
VCC<->V33
GND<->GND
SCL<->PB8
SDA<->PB7
软件IIC连接引脚为:
VCC<->V33
GND<->GND
SCL<->PD10
SDA<->PD12
所用器件、编程工具:
1.
STM32CubeMX 版本6.12.0
MDK Keil 版本 5.38.0
2.
立创天空星开发板 主控型号 STM32F407VGT6
手势识别模块 IC型号 PAJ7620
OLED屏幕 IC型号 SSD1306
DapLink调试器 版本 daplink_V1.0
软件代码
示例代码
enum keycode{ //键盘功能码枚举
pageUp=0x4B, //向上翻页
pageDown=0x4E, //向下翻页
pageHome=0x4A, //跳转首页
pageEnd=0x4D //跳转尾页
};
void keyboard_code(uint8_t kc){ //键盘HID报告描述符
uint8_t HID_Buffer[8] = {0}; //键盘发送数据缓存大小为8,鼠标为4
uint8_t HID_Buffer_clean[8] = {0};
HID_Buffer[0] = 0x00;
HID_Buffer[1] = 0x00;
HID_Buffer[2] = kc;
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, sizeof(HID_Buffer));
HAL_Delay(200);
USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer_clean, sizeof(HID_Buffer_clean));
HAL_Delay(200);
paj_update_flag=0;
}
if(Gesture_Data !=0)
{
paj_update_flag=1;
switch (Gesture_Data)
{
case PAJ_UP:
printf("Up\r\n"); //注意USB连接PC
//k_code=pageUp;
keyboard_code(0x4B);
ssd1306_SetCursor(2, 8);
screenClear();
drawPicture(image_c,0);
ssd1306_WriteString("Page Up", Font_7x10, White);
break;
case PAJ_DOWN:
printf("Down\r\n");
//k_code=pageDown;
keyboard_code(0x4E);
ssd1306_SetCursor(2, 8);
screenClear();
drawPicture(image_d,0);
ssd1306_WriteString("Page Down", Font_7x10, White);
break;
case PAJ_LEFT:
printf("Left\r\n");
k_code=pageHome;
keyboard_code(0x4A);
ssd1306_SetCursor(2, 8);
screenClear();
drawPicture(image_aaa,0);
ssd1306_WriteString("Page Home", Font_7x10, White);
}
本工程已经开源并上传到gitee,链接如下(https://gitee.com/quansirx/gesture-for-page-flip)
USB HID协议简介
HID(Human Interface Device,人机接口设备)是USB设备中常用的设备类型,是直接与人交互的USB设备,例如键盘、鼠标与游戏杆等。在USB设备中,HID设备的成本较低。另外,HID设备并不一定要有人机交互功能,只要符合HID类别规范的设备都是HID设备。
Wndows操作系统最先支持的HID设备。在windows 98以及后来的版本中内置有 HID设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个USB接口的计算机外部设备时,如果HID类型的设备可以满足需要,可以将其设计为HID类型设备,这样可以省去比较复杂的USB驱动程序的编写,直接利用Windows操作系统对标准的HID类型USB设备的支持。
HID设备的特点
交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持HlD报表的格式。主机通过控制和中断传输中的传送和请求报表来传送和接收数据。报表的格式非常灵活。
每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8B,一个报表可以使用多笔事务。
全速设备每一笔事务最大是64B
高速设备每一笔事务最大是1024B。
HID设备除了传送数据给主机外,它也会从主机接收数据。只要能够符合HlD类别规范的设备都可以是HID设备。设备除了HlD接口之外,它可能同时还包含有其他的USB接口。例如影像显示设备可能使用HID接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。USB扩音器可以使用实时传输来播放语音,同时使用HID接口来控制音量、低音等。
注意事项
以下为设计制作时需重点关注的点或是易错的地方,
- 驱动USB HID与电脑建立通信时,注意HID报告描述符的设置;
- 电路板设计过程中注意上拉IIC总线,因为IIC设备输出为开漏;
- 驱动OLED屏幕注意先清屏,再绘制文本、图片内容
组装流程
实物框架图
图1:实物组装图
图2:运行效果图(软件IIC)
图3:运行效果图(硬件IIC)
图4:运行效果图
图5:运行效果图
最后做个简单总结,一开始考虑到PAJ7620引出了一路SPI接口,于是使用嘉立创EDA重新设计一版PAJ7620电路并引出SPI通信接口是可行的。由于PAJ7620物料处于缺货状态,因此只打样了扩展电路板,扩展板的VCC和GND与开发板的排针没有对应上,于是采取“飞线大法”在扩展板挖出一小块覆铜区域焊接一排母GND,最后排母接入开发板的GND,解决了扩展板与开发板插槽不对称的问题。缺点是GND覆铜面积过大造成刮铜区域很难上锡,最后是烙铁持续往刮铜区域加热一会锡终于黏上去了
电路设计在嘉立创开源硬件平台已开源,源码程序也上传到Gitee码云仓库,感兴趣的电子朋友们可以来了解下。
设计图

BOM


评论