STM32萌新学习笔记 | 您所在的位置:网站首页 › 红外和超声波避障 › STM32萌新学习笔记 |
本次笔记内容为小车避障实验,包含舵机、红外避障、超声波避障三个模块的使用。这次的实验真的把我整吐了,模块原理很简单,但实际的避障效果并未达到令我满意的程度,这几天尝试了数种写法,各种改参数,我的感受就和这张图一样_(:з」∠)_ : 最终感觉只能从硬件上改善才有可能达到我理想中的效果,目前由于个人能力不足,只能做到简单的避障。实验效果参考视频《小车避障实验》。 一、舵机使用讲解 180度舵机: 180度舵机是一种位置伺服驱动器,转动范围不能超过180度,常用于机器人关节等。 舵机图片: 天猫搜索“TS舵机”输入线含义: 棕:负极线 红:正极线 橙:信号线 电源说明: 电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些。 控制信号: 舵机的控制信号为周期20ms的PWM信号。脉冲宽度从0.5-2.5ms,对应舵盘位置-90-90度(0-180度),呈线性变化。它的输出轴会保持一定对应角度,直到提供另一个宽度的脉冲信号。 二、超声波模块使用讲解 HC-SR04超声波测距模块: 可提供2cm-400cm的非接触式距离感测功能,测距精度可达3mm。 产品图片: 天猫搜索“HC-SR04”工作原理: 1.给Trig引脚最少10us的高电平脉冲可触发超声波测距。 2.模块自动发送8个40kHz的方波,自动检测是否有信号返回 。 3.有信号返回,则Echo引脚输出一个高电平。高电平的持续时长就是超声波从发射到返回的时间,测试距离=高电平时间*声速/2。 使用说明: 1.建议两次测量的时间间隔在60ms以上,以防止发射信号对回响信号的影响。 2.此模块不宜带电连接(通电时插拔),若要带电连接,则先让模块的GND端连接,否则会影响模块的正常工作。 3.测距时,被测物体面积不少于0.5平方米且平面尽量平整,否则影响测量结果。 三、红外避障模块使用讲解 产品图片: 天猫搜索“泽杰红外避障模块”接口说明: VCC:外接3.3V-5V电压 GND:外接GND OUT:数字量输出接口 工作原理: 当模块检测到前方障碍物信号时,电路板指示灯会亮,同时OUT端口持续输出低电平,未检测到障碍物信号时则相反。 使用说明: 探测范围2-30cm,检测角度35度,传感器的探测距离可通过电位器调节(蓝色凸起)。 四、实验程序 (一)舵机模块 PA0(TIM5_CH1) 1.舵机控制初始化函数 利用定时器的PWM输出实现对舵机的控制,关于定时器PWM的详细说明在笔记DAY17中有。 TIM5_Init(): TIM5_PWM_OC1Init(): 2.舵机角度设置函数 TIM5_PWM_OC1Set(): (二)超声波模块
1.超声波初始化函数 利用外部中断和定时器实现对回响信号高电平时间的测量。 2.中断服务函数 3.距离测量函数 (三)红外避障模块 红外避障的实现就是检测对应引脚的高低电平即可。 (四)主函数 实物位置: 代码部分: 小车前进时,超声波测距检测前方距离,两个红外避障检测两侧距离,当前方距离小于一定值或触发红外避障信号,则小车后退一段距离后,用超声波检测左右两边距离,哪边距离远则向哪边转向,当检测到前方无障碍时继续向前行驶。 电机控制说明参考前面的笔记,此处添加了两个函数: 关于转向控制函数需要说明的是: 1.内部必须先设置方向再设置速度 2.mode用于选择左右电机一起转还是只有一边转(0/1) 3.当mode为1时,speed的正负表示向前转还是向后转 另外,此处还对延时函数进行了更改,延时函数的实现参考笔记DAY9。按照之前的实现方式,若在执行延时函数的期间触发中断,而中断中也有延时函数,则中断的延时在执行结束后会关闭SYSTICK定时器,从而导致中断现场的延时失效,所以此处进行了如下更改: 五、存在问题 1.使用红外避障时有可能出现闪烁,从而导致小车进入避障处理后又立刻退出,最终不断进行避障判断而无法前行,所以在最后do{}while()的判断添加了红外消抖。 2.使用超声波测距时,有可能出现测量距离与设定的间隔距离差距过小,从而导致小车细微动作便会影响避障处理的判断,最终造成和红外避障闪烁时同样的效果,所以最后do{}while()的判断是以2*min为标准而非min,目的是给小车能够前行的距离。 3.超声波测距也并非完全准确,当测量的障碍物呈斜线放置,周围还有其他障碍物时有可能出现因反射造成的巨大误差,从而影响避障判断。 4.该程序下,小车转向时无法进行避障。 5.该程序没有小车无法前进或不能动时的处理。 6.避障效果除了受代码影响,还需要调整红外避障位置及检测距离。 ......
|
CopyRight 2018-2019 实验室设备网 版权所有 |