智能避障小车试验报告与总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能避障小车试验报告与
总结
专业班级:12自动化-3
******
学号:**********
随着科学技术的发展,机器人的感觉传感器种类越来越多,其中视觉传感器成为自动行走和驾驶的重要部件。视觉的典型应用领域为自主式智能导航系统,对于视觉的各种技术而言图像处理技术已相当发达,而基于图像的理解技术还很落后,机器视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。视觉传感器的核心器件是摄像管或CCD,目前的CCD已能做到自动聚焦。但CCD传感器的价格、体积和使用方式上并不占优势,因此在不要求清晰图像只需要粗略感觉的系统中考虑使用接近觉传感器是一种实用有效的
方法。
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路速10位A/D转换(250K/S),针对电机控制,强干扰场合。我们采用的就是STC12C5A60S2这种单片机。
避障系统可以采用反射式光电开关或者超声波传感器
对前方的障碍物进行检测,前者结构简单,应用方便灵活,但不能获知障碍物与小车间的具体距离;后者结构复杂,但可以测得障碍物与小车间的直线距离。本系统采用反射式光电开关E3F-DS10C4来检测障碍物。E3F-DS10C4是漫反射式光电开关,NPN三线输出方式,三线分别为电源线、输出线、
地线。它的灵敏度也可以调节,检测距离比较远,可以达到20cm。
红外发射管,发射50hz调制的38k信号。当遇到障碍物时,发生漫反射,红外接收头接收到这一信号时,输出端输出50hz的信号。判断这一信号,即可判断,遇到了障碍物。
避障传感器基本原理,利用物体的反射性质。在一定范围内,如果没有障碍物,发射出去红外线,因为传播距离越远而逐渐减弱,最后消失,或者反射回来的光很弱时,输出端呈低电平光电开关的检测不受外界干扰。如果有障碍物,红外线遇到障碍物,被反射到达传感器接收头,则输出端呈高电平。传感器检测到这一信号,就可以确认正前方有障碍物,并送给单片机,单片机进行一系列的处理分析,协调小车两轮工作。红外避障基本原理大致就是如此。
利用红外传感器进行“前进-倒退-转向”避障,在车的头部安装光电开关小车采用左右轮分别驱动小车进入障碍
区后,在距离障碍物10cm到20cm的地方就可以检测到前面有障碍物(改变光电开关的灵敏度可改变最远检测距离),然后小车刹车停止,并调整角度,车头右偏一个角度,其方法是小车在前进制动过程中,先制动右轮,这样左轮转动快,使小车右转,并制动停止,随后小车加速后退,然后制动,在制动过程中,先制动右轮,左边快而使车头左偏,小车再
前进,检测前方是否有障碍物。如此循环,就可以绕开障碍物。前进停止和后退停止之间的距离约为30cm,只要小车前进时刹车行程小于传感器检测到障碍物的最大距离,就可以肯定小车车头碰不到障碍物。调整适当的刹车行程和传感器的灵敏度,便可实现这个条件。
单片机电路:
电机驱动电路:
电源电路:
红外传感电路:
之后附上小车实物照片:
采用二轮驱动,后面一个万向轮方便转向,减少阻力。电源采用3.7v锂电池供电。
至于程序输入,如图电源指示灯旁边有个插口,可以连接数据线,安装的驱动是PL2303Vista_Installer,烧写
软件我采用的是stc-isp-15xx-v6.67D,至于程序则是在同学们的帮助下参考网上的改编的。
程序有如下:
#include"STC12C5A60S2.h"
#include
/*接线定义*/
sbit IN1=P1^5;
sbit IN2=P1^6;
sbit IN3=P1^1;
sbit IN4=P1^0;
sbit EN1=P1^3;
sbit EN2=P1^4;
/*传感器接线定义*/
sbit Left_InSen=P3^3;
sbit Right_InSen=P2^0;
sbit bleft=P2^4;
sbit bright=P2^3;
sbit BUZZ=P1^7;
void delay(unsigned int n)
{
unsigned char i, j,k;
for(k=0;k<=n;k++)
{
_nop_();
_nop_();
i = 20;
j = 10;
do
{
while (--j);
} while (--i);
}
}
void beep(void)
{
unsigned char i;
for(i=0;i<3;i++)
{
BUZZ=~BUZZ;
delay(10);
}
BUZZ=1;
}
void gogogo(void)
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void backbackback(void) {
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void stop(void)
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void turnleft(void)
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void turnright(void)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void main(void)
{
while(1)
{
if(bleft==0&&bright==1) {