3.2 模块介绍
本项目主要包括有线键盘无线化模块、有线音箱无线化模块和人脸跟踪无线化摄像头模块,下面分别给出各模块的功能介绍及相关代码。
3.2.1 有线键盘无线化
本节包括有线键盘无线化模块的工作原理、功能介绍及相关代码。
1.工作原理及功能介绍
1)工作原理
如图3-9所示,通过底层的硬件采集,将键盘的扫描码进行预处理打包,以三个字节封装一个键盘扫描码。由于扫描码分为接通扫描码和断开扫描码,因此,在对键盘数据包预处理的过程中,需要给它们定义不同的识别符,以便在PC中分离数据并进行处理。存放扫描码的缓冲区定义为keybuffer,对于每个keybuffer由三字节构成。若keybuffer[0]=0,表示采集的是断开扫描码;若keybuffer[0]=0xff,表示采集的是接通扫描码。
图3-9 工作原理结构
keybuffer[1]定义为键盘扫描码。keybuffer[2]定义为0,作为扫描码数据包结束的标志在对扫描码转换为系统扫描码后,按照HID规范进行数据封装,软件的具体实现通过调用l2cap.c、sdp.c来进行。如上所述,对于键盘还有字节1、3、4、6被设置为对应的特殊标识值,字节5对应到当前的修饰键(Shift\Ctrl等),字节7~12是实际的数据传输位,可以处理6个按键同时按下而不产生冲突。这样就形成标准HID格式的数据包。数据包通过提供的API函数进行无线发送,在PC接收端进行相同的处理过程,调用相应的协议封装函数进行数据解析,还原系统扫描码。
HID蓝牙键盘模块需要使用AT命令进行参数设置方可使用。模块支持HID协议与具有蓝牙功能的HOST主机(包括Android和iOS设备)通信,或使用SPP透传方式进行原始的数据或命令传输。
引脚连接如图3-10所示,UART_TXD以及RXD负责串口通信、VCC以及GND供电。PIO 0~11是可编程输入/输出口,通过设置引脚电平实现清除记忆、改变工作状态、进入AT工作模式、休眠控制等高级功能。一般初始化配置需要进入模块的AT模式,AT+ RESET复位模块,AT+BAUD设置波特率,AT+DEVTYPE设置服务类型,AT+PSWD设置配对码(默认0000),最后连接单片机通电使用。
图3-10 蓝牙HID模块引脚
2)功能介绍
除了基本的字母、数字输入之外,还对键盘的修饰键、功能键做了处理,使输入的组合键实现用户期望的功能和效果。
2.相关代码
此代码是用Arduino USB Shield获取按键和处理输出。包括键盘初始化配置与获取键盘按键之后,根据大小写切换状态以及修饰键状态向Arduino开发板及蓝牙输出数据。
3.2.2 有线音箱无线化
本节包括有线音箱无线化的功能介绍及相关代码。
1.功能介绍
本部分使用Arduino开发板、蓝牙立体音效模块和红外遥控模块,将原本与手机或者计算机必须有线连接的音箱以及扬声器,实现与上位机的无线连接,变成蓝牙音箱。上位机中的音频数据与控制信号通过蓝牙连接传送到立体音效模块,再通过线路传送到音箱或者扬声器播放。
除了音频数据的无线传输,还对控制信号的解析实现了音频播放的控制功能,并且有两种无线连接控制方式:一种是通过手机或者计算机直接控制;另一种是通过红外遥控器控制。对音频播放的控制包括开始播放、暂停播放、停止播放、下一首、上一首、增大音量、降低音量等操作。
在音频解码与处理方面,采用了XS3868音频模块,它有比较好的音频数据处理功能,可以保证音乐播放时良好的音质与用户体验。而且,对于各式各样的音箱或者耳机,产品也都具有广泛的适用性。
2.相关代码
3.2.3 人脸跟踪无线化摄像头
本节包括有线摄像头转人脸跟踪无线化摄像头的功能介绍及相关代码。
1.功能介绍
1)有线音箱无线化模块
有线音箱无线化模块主要包括Arduino开发板、WR703N路由器、HC-05蓝牙SPP模块、舵机和摄像头。摄像头拍摄视频,通过WiFi将视频流传到上位机,并在上位机的屏幕中显示。上位机对传入的视频流数据进行处理和识别(此过程利用了Adaboost分类器、OpenCV框架和机器学习),检测出视频中的人脸并进行标识,以使用户看到识别的效果。
在实现人脸检测方面,使用的是Adaboost级联分类器,其中正脸识别使用的是Haar特征的级联分类器,侧脸识别使用的是采取LBP特征的级联分类器。我们的人脸识别级联分类器基于OpenCV的框架,经过了大量数据集的训练,对无遮挡人脸检测的稳定性较高。而且,正脸识别与侧脸识别两种方式并行,使得视频中的人脸进行平移或者头部进行较大角度的偏转时仍然可以被检测到。
当视频中的人脸移动时,偏离于窗体的中心人脸,人脸新状态将被实时检测。此时,计算机处理后会识别到人脸的新状态,并得出如何调整摄像头角度和方向,从而使摄像头对准目标人脸,下个状态的视频中,目标人脸将处于视频窗体的中心位置。这个过程的周期是极其短暂的,其延迟时间将忽略不计,因此,摄像头可以完全实时地自动跟踪目标人脸。另外,我们后期又对舵机控制进行了改进,增强了摄像头转向时的连续性,保证了视频的流畅度与稳定性。
在这个模块中,除了视频流传输到上位机的无线化之外,上位机对舵机控制信号的传输也是无线化的,这个环节采用了相对快速低能耗的蓝牙技术。
2)Android手机APP
经过计算机处理与识别视频流数据后,上位机可以产生相应的控制信号传送给舵机,达到自动控制的效果。除了自动控制舵机的方式外,还可以在手机端APP控制舵机的转动。用户在手机端APP按键,将用户的指令转换成控制信号,并通过蓝牙传送给舵机,这样摄像头在舵机的物理支撑下就可以实现根据用户的意愿转动角度的效果。
APP端除了按键控制之外,还可以接收摄像头通过WiFi传入的视频流数据,并展示在手机屏幕上,用户既可以通过PC,也可以在手机APP端观看视频,同时对摄像头角度进行控制。Android手机端APP界面如图3-11所示。
图3-11 Android手机端APP界面
2.相关代码
1)图像处理与人脸识别代码
2)舵机控制摄像头转动代码
3)Android APP代码