超声波避障小车程序设计培训资料
单片机课程设计——超声波避障小车

课程设计说明书(论文)设计题目:超声波避障小车院系:学院班级:设计者:学号:指导教师:设计时间:8.27~9.10课程设计任务书开题报告绪论课题目的通过上学期单片机课程的学习,我们基本掌握了51单片机的基本使用方法,本学期开学初,单片机课程设计给了我们更大的挑战,课题的目的有以下几点。
●进一步熟练掌握单片机的使用方法、提高程序的编写能力●掌握单片机系统外扩器件的连接与使用●提高器件说明书以及时序过程的阅读、理解能力●掌握软件和硬件调试的基本技巧与方法项目研究背景及意义在当今社会,汽车成为了越来越普遍,人们不可缺少的交通工具。
但汽车的不断增加,随之而来就是越来越多的交通事故。
交通事故成为了现在越来越严重的安全隐患。
所以随着汽车工业的快速发展,我们必须加强对汽车安全性能的考虑。
所以,智能汽车概念应运而生,他既是汽车产业的机遇也是汽车产业的挑战。
汽车的智能化必将是未来汽车产业发展的趋势,在这样的背景下,我们开展了基于超声波的智能小车的避障研究。
超声波作为智能车避障的一种重要手段,以其避障实现方便,计算简单,易于做到实时控制,测量精度也能达到实用的要求,在未来汽车智能化进程中必将得到广泛应用。
我国作为一个世界大国,在高科技领域也必须占据一席之地,未来汽车的智能化是汽车产业发展必然的,在这种情况下研究超声波在智能车避障上的应用具有深远意义,这将对我国未来智能汽车的研究在世界高科技领域占据领先地位具有重要作用。
设计要求采用超声波模块实现小车避障功能,实现小车自动避障任务。
1主要设计内容及方案总体方案设计系统采用51单片机作为核心控制单元用于智能车系统的控制,在超声波检测到障碍物之后,主控芯片根据距离值控制直流电机的转动,在与障碍物距离较大的情况下,快速前进,在与障碍物距离较小但还未到达临界转弯方向值的时候,慢速前进。
在与障碍物距离很近需要转向避障时,方案上将尝试进行转向,来进行避障。
系统总体的设计方框图如图2-1所示。
超声波避障小车实训报告

一、实训目的1. 了解超声波避障的基本原理和应用;2. 掌握超声波传感器的工作原理和操作方法;3. 学会使用单片机控制超声波传感器进行避障;4. 培养动手能力和团队协作能力。
二、实训内容1. 超声波传感器原理及特性;2. 单片机编程及驱动;3. 超声波避障系统设计;4. 小车底盘搭建及驱动;5. 超声波避障系统测试与优化。
三、实训步骤1. 超声波传感器原理及特性学习超声波传感器是一种利用超声波进行测距的传感器,其基本原理是发射超声波,接收反射回来的超声波,通过计算超声波的传播时间来得到距离。
超声波传感器具有非接触、抗干扰能力强、测量范围广等特点。
2. 单片机编程及驱动学习单片机是一种具有微处理器的嵌入式系统,用于控制电子设备。
本实训中,我们使用STC89C51单片机作为控制核心。
通过学习单片机编程,我们可以编写程序控制超声波传感器进行避障。
3. 超声波避障系统设计(1)设计思路本实训中,我们设计一款基于超声波避障的小车。
当小车遇到障碍物时,超声波传感器检测到障碍物,单片机接收到信号后,控制小车进行避障。
(2)系统组成系统主要由以下部分组成:①超声波传感器:用于检测前方障碍物;②单片机:负责处理传感器信号,控制小车行驶;③电机驱动模块:驱动小车前进、后退、左转或右转;④电源系统:为整个系统提供电力支持。
(3)系统原理当超声波传感器发射超声波时,遇到障碍物会反射回来。
单片机接收到反射回来的超声波信号后,根据超声波的传播时间计算出障碍物的距离。
当距离小于预设的安全距离时,单片机控制小车进行避障。
4. 小车底盘搭建及驱动(1)小车底盘搭建小车底盘采用4个轮子,分别连接到两个电机驱动模块上。
在底盘上安装超声波传感器,用于检测前方障碍物。
(2)电机驱动模块本实训中,我们使用L298N电机驱动模块。
该模块可以驱动两个电机,实现小车的运动控制。
5. 超声波避障系统测试与优化(1)测试在搭建好的小车底盘上,安装超声波传感器和电机驱动模块。
超声波测距程序(用于壁障小车的设计)

0x87,0xff,0xef};
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
while(echo) //等待模块echo引脚返回信号,低电平则说明模块收到反射回来的声波信号
{
time=(TH0*256+TL0);
if(time>65530) //实时监测定时器防止TF0置位申请中断
{
TR0=0;
echo=0;
}
};
TR0=0; //停止计数
time=(TH0*256+TL0);//取出定时器的值
dista=((unsigned long)(344)*time)/2000;//测量的结果单位为 mm
if(dista>850||dista<2)
P0=0x7d;
wela=1;
wela=0;
delay(1);
P0=table[A3]; //显示个位
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);
}
uint measure()
sbit wela=P2^7;
sbit trig=P2^2;//模块控制引脚
sbit echo=P2^4; //模块信号引脚
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
电子综合课程设计超声波避障小车资料

扬州大学水利与能源动力工程学院电子技术综合设计题目:智能小车避障控制系统课程:电子技术综合课程设计专业:测控技术与仪器班级:测控1301学号:111703126姓名:潘雪飞指导教师:郑洁完成日期: 2015.9.26总目录第一部分:任务书第二部分:课程设计报告第一部分任务书《电子技术综合课程设计》任务书一、课程设计的目的本课程是在学完《模拟电子技术基础》、《数字电子技术基础》之后,集中两周时间,进行的复杂程度较高、综合性较强的设计课题的实做训练。
主要包括:方案论证、系统电路分析、单元功能电路设计、元器件选择、安装调试、计算机辅助设计、系统综合调试与总结等。
使学生在《模拟电子技术基础》、《数字电子技术基础》基本知识、实践能力和综合素质、创新意识、水平诸方面得到全面提高,为后续课程的学习,为培养应用型工程技术人才打下重要基础。
通过本课程设计可培养和提高学生的科研素质、工程意识和创新精神。
真正实现了理论和实际动手能力相结合的教学改革要求。
二、课程设计的要求1、加强对电子电路的理解,学会查寻资料、方案比较,以及设计计算等环节,进一步提高分析解决实际问题的能力。
2、独立开展电路实验,锻炼综合应用所学电子技术知识,分析、解决电子电路问题的实际本领,真正实现由知识向技能的转化。
3、独立书写课程设计报告,报告应能正确反映设计思路和原理,反映安装、调试中解决各种问题。
三、课程设计进度安排1、方案设计;(1.5天)根据设计任务书给定的技术指导和条件,进行调查研究、查阅参考文献,进行反复比较和可行性论证,确定出方案电路,画出主要单元电路,数据通道,输入、输出及重要控制信号概貌的框图。
2、电路设计:(2天)根据方案设计框图,并画出各单元电路的详细电路图及总体电路图。
3、电路仿真:(2.5天)熟悉EDA工具,在EDA软件平台上修改设计的电路,给出正确的仿真结果。
4、装配图设计:(1天)根据给定的元器件,结合逻辑电路图,设计出电路制作的具体装配图(即绘出组件数量,管脚号以及器件布置的实际位置)。
科技创新实践活动:超声波避障小车

超声波避障小车
超声波避障小车程序
子程序1:急停(fastStop)
子程序2:前进(goForward) 子程序3:左转(turnLeft)
超声波避障小车
超声波避障小车程序
子程序4:右转(turnRight)
超声波测距判断转向思路(waTch)
开始
测距 <40cm
≧40cm
急停 (fastStop)
直行
舵机转20o(左侧) 测距(左侧)
舵机转160o(右侧) 测距(右侧)
舵机转90o(左侧)
判断
右侧≥左侧 右侧<左侧
左转
右转
超声波避障小车
超声波避障小车(fastStop) 子程序2:前进(goForward) 子程序3:左转(turnLeft) 子程序4:右转(turnRight) 子程序5:测距判断转向(waTch)
超声波避障小车
超声波避障小车
项目准备
Mixly编程软件
电脑
Arduino UNO开发板
数据线
L298n电机驱 动模块
面包板
超声波传感器
杜邦线
90g舵机
减速电机
超声波避障小车
认识舵机 (1)舵机的简单介绍
90g舵机
(2)舵机端口接线
超声波避障小车
认识超声波传感器
VCC接+5V trig触发信号输入 echo回响信号输出
子程序5:测距判断转向(waTch)
超声波避障小车
超声波避障小车电路
超声波避障小车
拓展延伸
了解了超声波传感器、L298N电机 驱动模块、舵机等软硬件的综合运 用设计了一个避障小车。大家可以 下去尝试将这个小车制作出来,测 试效果,然后根据测试的结果进行 调试与改进
超声避障小车设计报告

综合能力实训项目设计报告1 避障小车设计说明该设计利用单片机STC89C52RC作为主控芯片,该芯片是一种高速、低功耗、抗干扰能力强的芯片,其最高时钟工作频率为48MHz,用户应用程序空间为8K。
能够满足程序空间需要。
驱动采用L298N驱动芯片,它是一种双全桥步进电机专用芯片,通过对其输入端的控制可以实现小车的启动、转向、停止等动作。
为节省成本,小车由两个直流减速电机加一个万向轮构成,并采用后轮驱动。
系统采用单片机为控制核心,利用自制小车或玩具小车进行小车的模拟,采用超声波避障模块进行障碍物的检测。
单片机控制避障模块发射和接收,通过相应的程序处理,判断障碍物的位置。
根据检测情况单片机控制电机驱动模块,控制小车电机的正反转实现小车的转向,启动等相应动作,来实现避开障碍物。
2 总体设计方案2.1设计要求在小车行驶过程中,50ms启动一次超波模块,对前方路况进行检测,当障碍物小于40cm时,小车自动左转90度,当小车转过90度后,对前方道路再次检测,若无障碍,向前行驶。
如果存在障碍物且小于40cm,小车右转180度,并再次检测前方路况,若无障碍物,向前行驶,有障碍物且距离小于40cm,小车向右转90度并向前行驶。
2.2系统设计方案根据设计要求,为了便于调试和改进,采用模块化设计。
系统可分为:微控制器、避障模块、驱动模块、小车模块。
2.3总体设计基于单片机STC89C52RC设计的智能避障小车,本设计需提供+5V电源,,DC+5CV由蓄电池通过降压模块得到+5V电源,为单片机及其他电路提供工作电压。
超声波避障模块,采用购买的现成的超生波发射接收模块,通过单片机控制超声波模块去小车行驶道路上的障碍物进行检测,然后单片机通过处理反馈的信息,判断障碍物的距离,进而发出指令控制驱动模块,控制小车实现转向,达到避障的目的。
系统框图总体设计框图2.4功能说明本设计主控芯片采用51芯片,负责传感器的状态,并向电机驱动模块发出动作指令。
一种基于超声波的避障小车

摘要随着机器人技术的发展, 自主移动机器人以其活性和智能性等特点, 在人们的生产、生活中的应用来越广泛。
自主移动机器人通过各种传感器系统感知外界环境和自身状态, 在复杂的已知或者未知环境中自主移动并完成相应的任务。
而在多种探测手段中, 超声波传感器系统由于具有成本低, 安装方便, 易受电磁、光线、被测对象颜色、烟雾等影响, 时间信息直观等特点, 对于被测物处于黑暗、有灰尘、烟雾、电磁干扰、有毒等恶劣的环境下有一定的适应能力, 因此在移动机器人领域有着广泛的应用。
针对一种基于光电寻迹、超声波和光电接近开关的避障小车,通过对整体方案、电路、算法、调试、车辆参数的介绍,详尽地阐述移动机器人通过传感器系统感知外界环境和自身状态, 在复杂的环境中自主移动并完成相应的任务。
超声波传感器以其独有的特征而被青睐。
本文利用两个超声波传感器对障碍物进行定位, 从而使机器人顺利到达结构化环境中的目标。
该智能小车系统涉及计算机控制技术、路径识别、传感技术、电子设计、程序设计、机械设计等多个学科,在全国ROBOCUP机器人大赛中取得了优异的成绩,磨练我们的知识融合和实践动手能力的培养。
在此感谢学校学院的大力支持及指导老师悉心的教导。
第一章总体方案本章主要简要地介绍系统总体方案的选定和总体设计思路,在后面的章节中将整个系统分为机械结构、控制模块、控制算法等三部分对智能车控制系统进行深入的介绍分析。
1.1 需求分析设计一种基于光电寻迹的小车移动平台,借助超声波传感器、光电接近开关传感器的使用满足在一定的复杂的环境中自主寻迹移动、避障任务。
1.2 总体设计通过学习和研究相关技术资料了解到,路径识别模块是系统的关键模块之一,路径识别方案的好坏,直接关系到最终性能的优劣,因此确定路径识别模块的类型是决定系统总体方案的关键。
前能够用于智能车辆路径识别的传感器主要有光电传感器和CCD/CMOS传感器。
光电传感器寻迹方案的优点是电路简单、信号处理速度快,但是其前瞻距离有限;CCD摄像头寻迹方案的优点则是可以更远更早地感知赛道的变化,但是信号处理却比较复杂,如何对摄像头记录的图像进行处理和识别,加快处理速度是摄像头方案的难点之一。
超声波避障小车

下载测试
总结
超声波避障小车
1、超声波
超声波指向性强,能量消耗缓慢,在介质中传播的距离 较远,因而超声波经常用于距离的测量,如测距仪和物位测 量仪等都可以通过超声波来实现。利用超声波 检测往往比较 迅速、方便、计算简单、易于做到实时控制,并且在测量精 度方面能达到工业实用的要求。 超声波测距的原理是利用超声波在空气中的传播速度为 已知,测量声波在发射 后遇到障碍物反射回来的时间,根据 发射和接收的时间差计算出发射点到障碍物的 实际距离。由 此可见,超声波测距原理与雷达原理是一样的。
恒云电子工作室
超声波避障小车
2、硬件电路
恒云电子工作室
超声波避障小车
3、软件编程
基本实现步骤: 1、给Trig最少10us 的高电平信号; 2、有信号返回,通过 ECHO 输出一个高电 平,高电平持续的时间 就是超声波从发射到返回的时间。 3、距离 = (高电平时间/2) * 声速。
恒云电子工扰: 声速受当地环境中气温的影响,其中T为环境摄氏温度
恒云电子工作室
超声波避障小车
4、试验
用超声波来检测小车在运行过程中前方障碍物的距离, 从而控制小车电机运动来 避开障碍物。
恒云电子工作室
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
超声波避障小车程序设计/******************************************************************** ***************************************///5路超声波避障实验:51单片机 + HC-SR04超声波 ///******************************************************************** ***************************************/#include <AT89x52.H> //器件配置文件#include <intrins.h> #define RX1 P3_6//小车左侧超声波HC-SR04接收端#define TX1 P1_7 //发送端#define RX2 P3_3 //左前方超声波#define TX2 P0_2#define RX3 P2_4 //正前方超声波#define TX3 P2_5#define RX4 P3_5 //右前方超声波#define TX4 P3_4#define RX5 P3_7 //右侧超声波#define TX5 P1_6#define Left_moto_pwm P1_5 //PWM信号端#define Right_moto_pwm P1_4 //PWM信号端//定义小车驱动模块输入IO口sbit IN1=P1^0;sbit IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;sbit EN1=P1^4;sbit EN2=P1^5;bit Right_moto_stop=1;bit Left_moto_stop =1;#define Left_moto_go {IN1=0,IN2=1,EN1=1;} //左电机向前走#define Left_moto_back {IN1=1,IN2=0,EN1=1;} //左边电机向后走#define Left_moto_Stop {EN1=0;} //左边电机停转#define Right_moto_go {IN3=1,IN4=0,EN2=1;} //右边电机向前走#define Right_moto_back {IN3=0,IN4=1,EN2=1;} //右边电机向后走 #define Right_moto_Stop {EN2=0;} //右边电机停转unsigned char pwm_val_left =0;//变量定义unsigned char push_val_left =0;// 左电机占空比N/20unsigned char pwm_val_right =0;unsigned char push_val_right=0;// 右电机占空比N/20unsigned int time=0;unsigned int timer=0;unsigned long S1=0;unsigned long S2=0;unsigned long S3=0;unsigned long S4=0;unsigned long S5=0;void delay_1ms(unsigned char x) //1ms延时函数,100ms以内可用 { unsigned char i; while(x--) for(i=124;i>0;i--); }/********************************************************/ void Count1() //计算左侧超声波距离的函数{ while(!RX1); //当RX1为零时等待TR0=1; //开启计数while(RX1); //当RX1为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S1=(time*1.7)/100; //算出来是CM }void Count2() //计算函数{ while(!RX2); //当RX2为零时等待TR0=1; //开启计数while(RX2); //当RX2为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S2=(time*1.7)/100; //算出来是CM } void Count3() //计算函数{ while(!RX3); //当RX3为零时等待TR0=1; //开启计数while(RX3); //当RX3为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S3=(time*1.7)/100; //算出来是CM } void Count4() //计算函数{ while(!RX4); //当RX4为零时等待TR0=1; //开启计数while(RX4); //当RX4为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S4=(time*1.7)/100; //算出来是CM } void Count5() //计算函数{while(!RX5); //当RX5为零时等待TR0=1; //开启计数while(RX5); //当RX5为1计数并等待TR0=0; //关闭计数time=TH0*256+TL0;TH0=0;TL0=0;S5=(time*1.7)/100; //算出来是CMvoid leftrun(void) {push_val_left=20;push_val_right=20;Left_moto_back //左电机往后走 Right_moto_go //右电机往前走 }/****************************************************************** ******/ //右转void rightrun(void){push_val_left=20;push_val_right=20;Left_moto_go //左电机往前走 Right_moto_back //右电机往后走 }/****************************************************************** ******/ //停止void stoprun(void){Left_moto_Stop //左电机停 Right_moto_Stop //右电机停 }/****************************************************************** ******/ /* PWM调制电机转速 */ /*********************************************** *************************//* 左电机调速 */ /*调节push_val_left的值改变电机转速,占空比 */void pwm_out_left_moto(void){if(Left_moto_stop){ if(pwm_val_left<=push_val_left){ Left_moto_pwm=1; }else { Left_moto_pwm=0; }if(pwm_val_left>=20)pwm_val_left=0;}else { Left_moto_pwm=0; } }/******************************************************************/ /* 右电机调速 */void pwm_out_right_moto(void){ if(Right_moto_stop){ if(pwm_val_right<=push_val_right){ Right_moto_pwm=1;}else { Right_moto_pwm=0; }if(pwm_val_right>=20) pwm_val_right=0; }else { Right_moto_pwm=0; } }/********************************************************/void timer0() interrupt 1 //T0中断 { }/***************************************************/ ///*TIMER1中断服务子函数产生PWM信号*/void timer1()interrupt 3{ TH1=(65536-1000)/256; //1ms定时 TL1=(65536-1000)%256;timer++;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto(); }/********************************************************* ******** **************************************************/void main(void){TMOD=0x11; //设T0为方式1,GATE=1;TH0=0;TL0=0;TH1=(65536-1000)/256; //1ms定时TL1=(65536-1000)%256;ET0=1; //允许T0中断ET1=1; //允许T1中断TR1=1; //开启定时器EA=1; //开启总中断while(1) {TX1=1; //开启超声波1探测delay_1ms(1);TX1=0;Count1(); //测距TX2=1;delay_1ms(1);TX2=0;Count2();TX3=1;delay_1ms(1);TX3=0;Count3();TX4=1;delay_1ms(1);TX4=0;Count4();TX5=1;delay_1ms(1);TX5=0;Count5();if(S3<20 && S1<20 && S5<20) //进入狭窄通道{ backrun(); //倒车delay_1ms(100);}else if(S3<20 && S1<S5 ) //车子与障碍物90度垂直,左边距离小右转 { rightrun(); }else if(S3<20 && S5<S1 ) //车子与障碍物90度垂直,右边距离小左转 { leftrun(); }else if(S2<20){ rightrun(); //车与障碍物呈45度角时,车的左边比车的右边距离小,右转 }else if(S4<20){ leftrun(); //车与障碍物呈45度角时,车的右边比车的左边距离小,左转 }else { run(); } } }。