智能循线避障小车
LM393运算放大器 ST168光电对管 ARM7芯片 L293D 150Ω电阻 5.1KΩ电阻 1KΩ电阻 LED灯 104μF电容 10KΩ可变电阻 玩具小车 万向轮 5. 制作过程简介 5.1 制作简介
2 4 1 1 若干 若干 若干 3 若干 3 1 1 我们用了1块电路板,通过将上面的各个模块进行分块设计,以达到系统的最简化和最优化设计。
首先,要在面包板上把各个电路调通。在调试循线电路时遇到了很大的问题。出现的问题主要有发射管功率不够、接收管不工作、比较器不工作。我们通过测量各个点的电位判断出错的环节。然后通过改变各个元件的参数,最后调通电路。
在电路调试过程中,我们会遇到很多元器件原理不清楚的情况。如果原理不清楚,我们就无法初步判断我们所用的电路图是否正确,所接的管脚是否正确。因此,我们需要查询各个集成电路的原理,分析其工作状态,然后对电路进行验证。当遇到电路调不通的时候,需要重新分析电路的工作状态,然后适当的调整元件参数。
其中有一个问题。我们最初的电路用的是LM311,但是不工作,所以我们打算换LM393。但是这两个集成电路的区别我们不清楚,在使用中就出现了管脚使用错误的情况。LM393集成电路要比LM311高级,LM393内含两个独立的比较器,可以同时给两个电路使用,因此,LM393的管脚设置与LM311是完全不同的。而我们是按照LM311的管脚设置来调试电路的。
在所有电路都调通的情况下,我们开始对实验板进行排线,对各个模块的位置和内部布线进行设计,尽量利用空间,减少电路板的数量。
然后,组装各个电路,进行机械部分的设计。
5.2 调试中遇到的问题
1. 开始避障原理采用的是一个555发射电路,通过发射38K赫兹的方波,然后由
HS0038接收器接收并输入给单片机。但是在前期调试中,发现接收电路中HS0038的管脚图错误,因此我通过查找HS0038的说明书重新修正了接收电路。不过最后还是没有调试成功,所有的电路都是导通,但是发射管没有信号,换了发射管后还是没有反应。最后,我通过循迹电路的比较器原理,采用灵敏度高的TCRT5000的发射管重新设计搭建了一个电路,这次成功了。后面一次成功的主要原因是发射管和接受管是成对配置,保证管子的对口。 2. 由于小车的实际是一个复杂的工程,在现阶段的调试和制作中,尚难实现小车完全
自主循线,这主要存在于两方面:首先,车身的长度设计是否合理;其次,传感器接受的信息是否充分完备,可能需要增加额外的传感器,提高控制的精确性;最后,调试过程中采用白纸,可能会导致车轮打滑,从而引起传感器误判。
16
智能循线避障小车
6. 改进与提高
鉴于现阶段理论限制,传感器的设置尚不完善。下面将从三方面简要介绍可行的改进措施。
1) 加装测距码盘。由于两个直流电动机即便在相同的工作电压和工作环境下,也很难
达到同步转动,通过增加码盘,测量电动机运行的距离,根据距离误差大小实施反馈调节,可以达到更好的控制效果。
2) 改进电机控制结构。本次设计中,只采用了开环的PWM控制技术。下一步设计中
可以通过DSP芯片处理,构造合适的闭环控制结构,到达优化的控制目标。 3) 增加传感器数目、合理设置安放位置。综合考虑小车的运行,应当增加传感器数目,
以达到更准确的判断周围情况,能够有效防止误判的出现。
7. 总结
1.
在本次课程设计中我们收获很多,遇到挫折不少,感想也很多。
前期的准备还是不充分,导致中间遇到很多问题,做了很多重复的工作,同时也浪费了大量的时间。设计起初,没有认真仔细的分析提交的各个功能原理和电路原理,导致在后来的实际试验中,由于原理的不可实现或是电路图的错误更换了部分电路。
自己的独立研究能力有了很大的提高。在实际的调试过程中遇到很多意想不到的问题,有时候是器件本身损坏,有时候是电路搭错,有时候是电路图中参数设置错误。因此,自己花很多时间在实验室调试测试。特别是当电路图错误时,我必须自己去查相应的器件说明书,检测电路图。 在机械结构的设计中,我在结构外观设计上花了很多时间,我们一直在思考如何将各个模块组装搭建在一起。最后我们跑遍草场坡和轻工市场,买了一个简易的玩具车,他只有一个车架、一个外壳和四个轮子,同时我们又买了一个万向轮实现后轴转向。然后现有的车型基础上用螺丝、捆绑、焊接、卡槽等方式固定我们的各个模块,既综合利用了产品,也实现了外观的美化和简化。
由于很多原因导致浪费很严重,最后试验结束后,我们还有很多器件都没用。
2.
3.
4. 5.
8. 程序调式方法
#include \#include \
UART LCD(0,2400);//实现利用LCD板调试各路传感器 IO io;
int ABS(int value) { if(value<0) return -value; return value; }
int main() { LCD.PRINT(3); LCD.LCD_PRINT(\主控芯片初始化 io.OPEN(1,16);
17
智能循线避障小车
io.NDIR(1,16); io.OPEN(1,17); io.NDIR(1,17); io.OPEN(1,18); io.NDIR(1,18); io.OPEN(1,19); io.NDIR(1,19); io.OPEN(1,20); io.NDIR(1,20); io.OPEN(1,21); io.NDIR(1,21); io.OPEN(1,22); io.NDIR(1,22); io.OPEN(0,12); io.DIR(0,12); io.OPEN(0,13); io.DIR(0,13); io.OPEN(0,7); io.DIR(0,7); io.OPEN(0,21); io.DIR(0,21); io.SET(0,13); io.SET(0,12); io.SET(0,7);
io.SET(0,21);//设置端口信息 while(1) { LCD.PRINT(5); LCD.PRINT(0x10); //D0 探测右侧避障传感器是否探测到障碍物 if(io.OUT(1,16)!=0) LCD.LCD_PRINT(\未探测到障碍物则为0 else LCD.LCD_PRINT(\探测到障碍物则为1 //D1 探测前侧避障传感器是否探测到障碍物 if(io.OUT(1,17)!=0) LCD.LCD_PRINT(\未探测到障碍物则为0 else LCD.LCD_PRINT(\探测到障碍物则为1 //D2 探测左侧避障传感器是否探测到障碍物
18
智能循线避障小车
if(io.OUT(1,18)!=0)
LCD.LCD_PRINT(\未探测到障碍物则为0 else LCD.LCD_PRINT(\探测到障碍物则为1 //D3 探测A循线传感器是否探测到黑线 if(io.OUT(1,19)!=0) LCD.LCD_PRINT(\未探测到黑线则为0 else LCD.LCD_PRINT(\探测到黑线则为1 //D4 探测C循线传感器是否探测到黑线 if(io.OUT(1,20)!=0) LCD.LCD_PRINT(\未探测到黑线则为0 else LCD.LCD_PRINT(\探测到黑线则为1 //D5 探测B循线传感器是否探测到黑线 if(io.OUT(1,21)!=0) { LCD.LCD_PRINT(\未探测到黑线则为0 io.SET(0,13); io.SET(0,12); } else { LCD.LCD_PRINT(\探测到黑线则为1 io.CLR(0,13); io.CLR(0,12); } //D6 探测D循线传感器是否探测到黑线 if(io.OUT(1,22)!=0) LCD.LCD_PRINT(\未探测到黑线则为0 else LCD.LCD_PRINT(\探测到黑线则为1 } }
19