APP下载

基于STM32与树莓派的视频采集智能车系统设计

2021-01-27孔德肖张晴晖李俊萩邓祥忠秦明明钟丽辉

仪表技术与传感器 2020年12期
关键词:管脚编码器小车

孔德肖,张晴晖,李俊萩,邓祥忠,秦明明,钟丽辉

(西南林业大学大数据与智能工程学院,云南昆明 650224)

0 引言

智能车,也称为轮式机器人,适合应用于人类无法或较困难工作的环境。例如,可应用于无人生产线,灾后救援,无人仓库,地形勘测,服务机器人等领域[1]。选择手机作为智能车的远程控制端是最便捷的[2]。本设计使用Android手机端对智能小车的行驶方向及行进路线进行控制,同时显示小车采集的环境视频。本系统具有很好的便捷性和易用性,在智能家居安防方面具有实用价值[3]。

1 系统总体框架设计

图1 系统总体框架图

图1为本设计的系统总体框架图,由单片机、树莓派和Android手机端组成[4-6]。STM32F103RCT6单片机接收手机端发送的控制指令,处理后对电机驱动板进行控制,从而实现小车的前进后退以及转向;与MPU6050角度传感器模块连接读取出小车姿态的原始数据并进行处理,将处理后的数据加入PID控制以实现小车走直线,同时将每个时刻小车的姿态数据显示在OLED显示器上。树莓派用于在小车行进过程中进行视频拍摄,并将视频数据通过网络传输到Android手机端进行显示。Android手机端程序基于Android Stduio平台进行开发,实现了用户与小车的交互,用户可以通过虚拟按键、语音识别、重力感应方式对小车进行控制,同时查看小车行进过程中采集的视频信息。

2 硬件电路设计

2.1 单片机供电电路设计

图2所示是STM32单片机供电电路,使用LM1117将外部接入的5 V电压转化成为3.3 V的电压给STM32单片机供电。

2.2 电机驱动电路设计

直流电机功率较大,不能直接与单片机进行连接,而且直流电机在转动时存在回流,如果直接与单片机连接会烧坏单片机管脚,严重时还会使整个单片机最小系统都被烧坏。本次设计采用图3所示的直流电机驱动电路,通过单片机管脚输出的PWM信号对电机转速进行控制,可以保证电机工作所需的功率,同时又保护单片机不被损坏。

图2 单片机电源供电电路

图3 电机驱动电路

直流电机驱动电路使用2片IR2104半桥电机驱动芯片,通过74LS08与门芯片根据输入端来控制其中一片IR2104半桥电机驱动工作。当Ctrl-A管脚输入为高电平,Ctrl-B管脚输入为低电平时,PWM信号被送到左侧IR2104电机驱动芯片上,4个MOS管形成的H桥驱动电路中Q2和Q4导通,电机正转;当Ctrl-A管脚输入为低电平,Ctrl-B管脚输入为高电平时,PWM信号被送到右侧IR2104电机驱动芯片上,4个MOS管形成的H桥驱动电路中Q3和Q1导通,电机反转。电机驱动逻辑如表1所示,当PWM输入的占空比为0时,电机处于停止状态[3]。当PWM输入的占空比为0~100之间时,可以使用控制管脚来控制电机正转、反转和停止。

2.3 单片机与硬件模块的连接

图4所示为核心控制器与其他硬件模块的连接图,以STM32F103RCT6作为控制器和数据处理器,外围连接MPU6050模块、OLED显示模块、WiFi模块、E3F-DS30C4测距模块、电机驱动板、摄像头舵机和电机编码器。

MPU6050模块用于测量小车姿态的原始数据;MPU6050模块初始化成功后,OLED显示模块即显示

表1 电机驱动逻辑表

图4 STM32与外围硬件系统连接图

小车每个时刻的姿态数据;WiFi模块实现单片机与Android手机的连接;电机驱动板用于控制电机转速和小车转向;电机编码器用于测量车轮转速和所转圈数;ESF-DS30C4红外测距模块用于实现小车避障;摄像头舵机控制摄像头的转向。

3 系统软件设计

3.1 控制小车走固定距离

手机端可以设置小车自动行走的距离,图5所示是控制小车走固定距离的流程图。通过采集得到车轮旋转圈数乘以车轮周长来控制小车所行走的距离。本设计通过记录电机编码器的值,而后转换得到车轮旋转圈数。经过测量,该系统的小车轮子直径为d=6.5 cm,小车周长为C=3.14d,轮子每转一圈对应780个编码器值,所以计算小车所走距离公式为:X=N/780×C,N为记录的电机编码器值,将计算得到的X和Android手机端设定的距离值进行比较,如果相等,则小车停止,否则定时器继续记录编码器的值直到小车停止。

图5 小车走固定距离流程图

3.2 控制小车走直线

控制小车走直线很有必要,因为若小车电机存在性能差异,会导致小车行走偏离直线。控制小车走直线主要有2种方法:直接使用电机编码器的值进行控制,但是此法在使用PID调节时不稳定,不易实现;另一种方法是通过使用角度传感器获得小车的偏航角,从而控制小车走直线。本系统采用了更易实现PID控制的第2种方法。如图6所示,首先通过MPU6050角度传感器获得小车的初始偏航角,然后使用四元数算法得到小车行走过程中每个时刻的偏航角,再与初始偏航角进行差值计算,放入PID控制器分别对左右两侧电机的转速进行控制,从而实现小车走直线。

图6 小车走直线流程图

四元数的表示式为:

q=[w,x,y,z]T|q|2=w2+x2+y2+z2=1

(1)

式中:w为实数;(x,y,z)为三维空间向量。

通过四元数转化得到欧拉角过程如下:

首先,通过旋转轴和绕该轴旋转的角度可以构造一个四元数,根据旋转角度得到四元数。其中α表示旋转角度,cos(βx)、cos(βy)、cos (βz)表示旋转轴在X、Y、Z方向上的分量,如式(2)所示。

w=cos(α/2),x=cos(βx)·sin(α/2)y=cos(βy)·sin(α/2),z=cos(βz)·sin(α/2)

(2)

然后,将四元数转换成为欧拉角[7-8]。其中Roll、Yaw、Pitch分别表示物体绕x、y、z轴旋转的角度,如式(3)所示。

Roll=atan(2(wx+yz),1-2(x2+y2)) Yaw=arcsin(2(wy-zx)) Pitch=atan(2(wz+xy),1-2(y2+z2))

(3)

3.3 Android手机端软件设计

Android手机端使用Java语言编程,基于Android Studio平台开发[9-10]。用户在手机端首先选择控制模式(分为按键控制、语音控制、重力感应控制),然后控制小车的速度及方向,同时查看小车采集并上传的实时视频。

图7所示为手机端控制界面,虚拟按键模式和重力感应控制模式可以控制小车前进、后退和转向,语音控制模式主要用来控制小车行走固定距离和小车转动固定角度[11]。视频按钮可以加载实时视频画面,2个进度条分别调节摄像头进行水平转动和垂直转动,加速和减速按钮进行速度调节,发送按钮进行控制命令的发送。

图7 Android手机端控制界面

4 系统测试结果

图8 智能小车实物图

本设计的视频采集智能小车实物如图8所示。经测试,该系统性能稳定,用户可以用手机控制小车行走,且在手机端可查看小车采集的现场视频。

4.1 手机端虚拟按键控制测试

手机端虚拟按键模式下可以通过按键来发送指令到单片机,来控制小车转向、后退和前进。当前进按钮或后退按钮一直被按下时,小车前进或后退,当放开按键时,小车停止;当转向按钮被按下时,小车执行转向动作,按下的时间越长,转向的角度越大,放开按键时小车停止转向。

4.2 手机端重力模式控制测试

手机端重力模式下可以通过倾斜手机来控制小车前进、后退和转向。手机前倾时小车前进;手机后仰时,小车后退;手机向左切斜时小车左转,手机向右倾斜时小车右转;手机处于水平状态时小车停止。

4.3 手机端语音模式控制测试

表2是语音识别发送数据表,如果语音识别转换为字符串与已定义的语音数据帧匹配,则调用数据发送线程进行控制命令的发送,如果不匹配则通过语音提醒用户进行重新输入。在该模式下,可以通过语音控制小车行走的固定距离和固定角度,测试结果如表3和表4所示。

表2 语音识别发送数据表

表3 小车走固定距离测试表

表4 小车转固定角度测试表

5 结论

本文设计的智能小车使用STM32单片机作为核心控制器,Android手机端作为用户控制端,树莓派实时拍摄监控视频。经过测试,本系统的硬件部分和软件部分具有良好的协调性,小车能够即时执行Android手机端发送的各种控制指令,实时视频传输具有良好实时性和稳定性。

猜你喜欢

管脚编码器小车
融合CNN和Transformer编码器的变声语音鉴别与还原
面向DSP+FPGA通用处理架构检测的硬件系统设计
大车拉小车
自制小车来比赛
一种异步FIFO的Read/Write Data Flow Through功能测试方法∗
刘老师想开小车
两轮自平衡小车的设计与实现
基于双增量码道的绝对式编码器设计
基于图像处理的异型电子元器件管脚偏移误差检测方法研究
基于数字信号处理的脉冲编码器