STM32萌新学习笔记 您所在的位置:网站首页 红外和超声波避障 STM32萌新学习笔记

STM32萌新学习笔记

2024-05-05 17:18| 来源: 网络整理| 查看: 265

       本次笔记内容为小车避障实验,包含舵机、红外避障、超声波避障三个模块的使用。这次的实验真的把我整吐了,模块原理很简单,但实际的避障效果并未达到令我满意的程度,这几天尝试了数种写法,各种改参数,我的感受就和这张图一样_(:з」∠)_ :

       最终感觉只能从硬件上改善才有可能达到我理想中的效果,目前由于个人能力不足,只能做到简单的避障。实验效果参考视频《小车避障实验》。

一、舵机使用讲解

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 实验室设备网 版权所有