超声波避障小车程序设计培训资料
单片机课程设计——超声波避障小车
课程设计说明书(论文)设计题目:超声波避障小车院系:学院班级:设计者:学号:指导教师:设计时间: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、试验
用超声波来检测小车在运行过程中前方障碍物的距离, 从而控制小车电机运动来 避开障碍物。
恒云电子工作室
超声波避障智能小车
目录
01 一、研究背景
03 三、设计制作
02 二、技术原理 04 四、实验结果
目录
05 五、实验分析
07 参考内容
06 六、结论
随着科技的不断发展,自动驾驶技术成为了人们的热点。而超声波避障智能 小车,作为自动驾驶技术的一种,具有独特的技术优势和应用前景。本次演示将 介绍超声波避障智能小车的研究背景、技术原理、设计制作、实验结果以及未来 改进方向。
一、系统设计
1、硬件设计
智能小车的硬件主要由以下几个部分组成:单片机、红外线传感器、超声波 传感器、电机驱动、电源和车轮。其中,单片机是整个系统的核心,负责处理传 感器数据和控制电机驱动。红外线传感器和超声波传感器用于感知周围环境中的 障碍物,并将数据传输给单片机。电机驱动部分负责根据单片机的指令来控制小 车的运动。最后,电源为整个系统提供能量,车轮则是小车移动的关键部件。
2、软件设计
智能小车的软件部分同样重要。在单片机上运行的程序需要能够处理传感器 数据、判断是否遇到障碍物、计算路径并控制电机驱动。具体的程序流程包括: 初始化各个模块、读取红外线传感器和超声波传感器的数据、判断是否遇到障碍 物、根据障碍物的位置计算出最佳的避障路径、控制电机驱动等。
二、实验结果与分析
在完成硬件和软件的设计后,我们进行了一系列实验来验证智能小车的性能。 实验结果表明,基于单片机控制的红外线与超声波混合避障智能小车能够在各种 环境下有效地感知障碍物,计算出最佳的避障路径,并成功避开障碍物。
然而,我们也发现了一些问题。例如,红外线传感器的响应速度较慢,可能 会在小车遇到快速移动的障碍物时无法及时反应。此外,超声波传感器的精度受 到环境噪声的影响较大,可能会对避障效果产生一定的影响。针对这些问题,我 们提出了改进方案,包括优化红外线传感器的响应速度和采用更先进的滤波算法 来降低超声波传感器的环境噪声干扰。
超声波避障小车设计
超声波避障小车设计引言:随着科技的不断发展,人们对机器人的需求越来越大。
超声波避障小车是一种能够利用超声波测距技术进行环境感知和避障的智能机器人。
本文将介绍超声波避障小车的设计方案及其原理、实现和应用。
一、设计方案:1.1硬件设计:1.1.1小车平台设计:小车平台应具备良好的稳定性和可扩展性,可以根据需要添加其他传感器或执行器。
常见的平台材料有金属和塑料,可以根据实际需求选择适合的材料。
1.1.2驱动电机选择:驱动电机应具备足够的功率和转速,以保证小车的运动能力。
一般可以选择直流无刷电机或步进电机。
1.1.3超声波传感器安装:超声波传感器通过发射和接收超声波信号,实现对周围环境的测距。
传感器应安装在小车前方,可以通过支架或支架固定在小车上。
1.2软件设计:1.2.1运动控制程序:运动控制程序通过控制驱动电机的转速和方向,实现小车的前进、后退、转弯等运动。
可以使用单片机或开发板来编写控制程序。
1.2.2避障算法:避障算法是超声波避障小车的核心功能。
当超声波传感器检测到前方有障碍物时,小车应能及时做出反应,避免与障碍物碰撞。
常见的避障算法包括简单的停止或转向,以及更复杂的路径规划算法。
二、工作原理:超声波避障小车的工作原理是通过超声波测距模块对周围环境进行测量和感知。
超声波传感器发射超声波信号,当信号遇到障碍物后会反射回传感器,通过测量反射时间可以计算出距离。
根据测得的距离,小车可以判断是否有障碍物,并采取相应的措施进行避障。
三、实现步骤:3.1搭建小车平台:根据设计方案搭建小车平台,安装驱动电机和超声波传感器。
3.2连接电路:将驱动电机和超声波传感器与单片机或开发板连接,建立电路连接。
3.3编写控制程序:利用编程语言编写运动控制程序,实现小车的基本运动功能。
3.4设计避障算法:根据需求设计避障算法,实现小车的避障功能。
3.5调试和测试:对小车进行调试和测试,确保其正常工作。
四、应用领域:超声波避障小车在工业自动化、家庭服务、教育培训等领域具有广泛的应用前景。
超声波避障小车的设计书
超声波避障小车的设计书1.1立项目的(1)设计一辆利用超声波传感器来实现避障功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。
(2)进一步学习单片机原理及其应用,了解超声波传感器的工作原理。
1.2立项意义在科学探索及紧急抢险中经常要对一些危险或人类不能直接到达的地域进行探测,这就需要用机器人来完成。
而机器人在复杂地形行进时自动避障是一项必不可少也是最基本的功能。
因此,自动避障系统的研发也就应运而生。
自动避障小车就是基于这一系统开发而成的。
随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人自动避障功能的研发有了重大意义。
通过对自动避障小车的设计,我们可以将其运用于自动避障小车,以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。
1.3设计要求(1)在车前方没有障碍物时,小车沿直线向前走。
(2)在车前方有障碍物时,小车能避开障碍物,避障方法如下:①先向左边转90度,如果前面没有障碍物,再沿直线向前走;②如果前面仍有障碍物,则向右转180度,如果前面没有障碍物,则直线行走;③如果前面仍有障碍物,则向右90度,然后直线行走2课题设计2.1设计原理该智能车系统可分为四个主要模块:传感器避障模块,单片机主控核心模块,电机驱动模块,USB下载模块。
鉴于电机驱动模块、USB下载模块已经由实验室直接提供了,我们对于传感器避障模块和单片机主控核心模块进行了讨论。
(1)传感器避障模块。
智能车避障系统中的传感器一般分为接触型和非接触型两种,接触型相对比较简单。
这里我们使用了超声波传感器进行测量,也即非接触型传感器。
超声波是一种振动频率高于声波的机械波,由换能晶片在电压的激励下发生震动产生的,在碰到杂质获分界面会产生显著反射从而形成反射回波,超声波传感器就是根据超声波在障碍物界面上的反射来判断检测物体的存在以及距离的。
超声波频率高,波长短,绕射现象小,方向性好,再加上信息处理简单且价格低廉,所以这里我们使用28015-PING-v1.6超声波传感器对小车行进前方路况进行探测以及判断,它能实现从3cm到1.8m距离的测量,从而识别出范围内的障碍物。
4.避障小车
系
学!我这就有个超声波传感器,也就是说我这有个蝙蝠的 课件 PPT)
鼻子和嘴,那我们有了这些,(引导孩子:在上一课制作
的小车的基础上联想……)超声波传感器是利用仿生学原
理,从蝙蝠的生理构造上模仿而来,可以通过声波的往返
来探测出前方的障碍物。
T:好今天我们就来做个能避开障碍物的小车
1. 搭建一个有两个马达的小车(小车后面要用转向轮) 通过小车的搭建来对机
声波有新的认识,并对搭
S:………….
建避开障碍物的小车
T:蝙蝠视力很弱,在寻食、定向和飞行肯定不是靠眼睛 产生兴趣
了对吧!他就是用超声波来控制飞行避开障碍识别物体 (如果孩子们对蝙蝠及
的,(课件:蝙蝠飞行的奥秘)“回声定位”
超声波、雷达所知太少,
联 T:科学家根据蝙蝠的飞行避障的道理发明了雷达,仿生 此处要做简要介绍-结合
建 2. 在小车前安装超声波传感器(传感器要放在小车的前 器人小车搭建有新的掌
构 面,并不能有遮挡物)
握
(让孩子参考搭建图)
反 1.为什么有的小车不能躲避障碍物,
思 2.小车躲避障碍物靠的是什么
延 在课桌上设置障碍物,让小车在障碍物中穿梭,看谁的小
续 车避障能力最强。
照片 记录
问题 及
解决 本节课强调的知识点
乐高教案
活动名称
阳光之旅
日期
教师
活动主题
2 避开障碍
班级
人数
活动目标 活动准备
1、 了解超声波传感器工作原理,学会利用它避开障碍物。
2、 熟练掌握编程或者内置编程
自制障碍物、45544
增删材 料情况
活过程
活动目标及提示
T:课件投影蝙蝠,问:知道蝙蝠为什么能在漆黑的夜晚 通过蝙蝠让孩子们对超
利用超声波实现躲避障碍物——小车(完成品)
五邑大学第十二届科技学术节电子设计大赛技术报告学校:五邑大学队伍名称:Robot L课题名称:躲避障碍物小车参赛队员:刘权超李才海列永光目录第一章绪论1.1 课题设计的目的及意义1.1.1设计的目的1.1.2 课题设计的意义1.2 躲避障碍物小车的设计思路1.2.1 超声波模块的设计原理1.2.2 躲避障碍物小车的原理框图如下图1.3 课题设计的任务及要求1.3.1 设计躲避障碍物小车的任务1.3.2设计躲避障碍物小车的要求第二章小车系统总体方案设计2.1 车模的选择2.2 电机驱动模块的选择2.3 电源模块的选择2.4路况检测模块的选择第三章躲避障碍物小车机械设计第四章躲避障碍物小车硬件电路设计4.1 小车的控制模块51单片机最小系统4.2 电机驱动模块4.3 电源模块的硬件设计4.4 路况检测模块的硬件设计第五章躲避障碍物小车软件设计5.1 主程序流程图5.2 两块超声波模块的发生、接收和计算的设计5.3 主从机串口通信程序设计5.4 直流电机控制程序设计5.5 系统的软硬件的调试第六章总结6.1 创新点6.2 目前尚存在的不足与改进方向致谢参考文献第一章绪论1.1 课题设计的目的及意义1.1.1设计的目的随着科技技术的快速发展,超声波在各个科技领域的应用越来越广,比如说超声波探伤仪、超声波测厚仪、超声波测距仪等等,但在实际生活的应用却不多,人们可以具体利用的超声波技术在实际生活中还十分有限。
因此,这是一个值得开发而又有无限前景的技术及产业领域。
展望未来,超声波作为一种新型的非常重要又有用的技术在生活的各个方面都将有很大的发展空间,它将朝着更加高定位、高精度的方向发展,以满足日益发展的社会需求。
比如超声波清洗仪,超声波作用于液体中时,液体中每个气泡的破裂瞬间会产生能量极大的冲击波,相当于瞬间产生几百度的高温和高达上千个大气压,这种现象被称之为“空化作用”,超声波清洗正是用液体中气泡破裂所产生的冲击波来达到清洗和冲刷工件内外表面的作用……随着超声波的技术发展,超声波将从单纯的科技应用发展到实际生活的应用,最终向全社会普及。
超声波避障小车程序设计
超声波避障小车程序设计/**************************************** ***************************************** **************************///5路超声波避障实验:51单片机+ HC-SR04超声波///**************************************** ***************************************** **************************/#include <AT89x52.H> //器件配置文件#include <intrins.h> #defineRX1 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 //右前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_va l_left<=push_val_left){ Left_mo to_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<=pu sh_val_right){ Right_moto_pwm =1;}else {Right_moto_pwm=0; } if(pwm_val_right>=20)pwm_val_right=0; }else{ Right_moto_p wm=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();} } }。
超声波避障小车编程程序
附录:超声波避障小车程序源代码#include"warterlight.h"#include"steer.h"#include<reg52.h>void delay_ms(unsigned int ms);extern void write_com(unsigned char dat,unsigned char test_flag) ;extern void write_date(unsigned char dat);extern void display(void);extern void init1602() ;extern void forward();extern void stop();extern void turn_left();extern void turn_right();extern void backward();unsigned char distance;sbit so=P3^4;sbit led=P1^5;void display(void){unsigned char ge,shi,bai,d;d=(unsigned char)distance;bai=d/100;ge=d%10;shi=d/10%10;write_com(0x80+0x0b,0);write_date(bai+0x30);write_date(shi+0x30);write_date(ge+0x30);}void main(void){char i;unsigned int k=0,j=0;so=0 ;init1602(); //液晶初始化while(1){k=0;/*产生约5us的脉冲*/so=1;i++;i++;i++;so=0;delay_nus(50); /*延时一段时间,度过不稳定期*/ while(so) // 脉冲来了{k++; // 表征脉冲的宽度}if(k){distance=k/10;display();if(distance>10){led=1;for(j=3;j>0;j--){forward();}}else{led=0;turn_left();}}}}#include"steer.h"#include<reg52.h>sbit P1_0=P1^0;sbit P1_1=P1^1;void delay_nus(unsigned int i){i=i/10;while(--i);}void forward(){P1_0=1;delay_nus(1300);P1_0=0;P1_1=1;delay_nus(1700);P1_1=0;delay_nus(20000);TR1=1;}void stop(){P1_0=1;delay_nus(1500);P1_0=0;P1_1=1;delay_nus(1500);P1_1=0;delay_nus(20000);TR1=1;}void backward(){P1_0=1;delay_nus(1700);P1_0=0;P1_1=1;delay_nus(1300);P1_1=0;delay_nus(20000);}void turn_left(){unsigned int i;for(i=30;i>0;i--){P1_0=1;delay_nus(1300);P1_0=0;P1_1=1;delay_nus(1300);P1_1=0;delay_nus(20000); }}void turn_right(){unsigned int i;for(i=30;i>0;i--){ TR1=0;P1_0=1;delay_nus(1700);P1_0=0;P1_1=1;delay_nus(1700);P1_1=0;delay_nus(20000);TR1=1;}}#include"waterlight.h"#include<reg52.h>#define uint unsigned int#define uchar unsigned charvoid delay_ms(uint ms);void init1602(void);void write_com(uchar dat,uchar test_flag); void write_date(uchar dat);void display(void);void busy(void);sbit Lcd_rs=P2^2;sbit Lcd_rw=P2^1;sbit Lcd_en=P2^0;uchar code TAB1[]=" distance cm"; void delay_ms(uint ms){uint x,y;for(x=ms;x>0;x--)for(y=70;y>0;y--);}void write_com(uchar dat,uchar test_flag) {uchar temp;if(test_flag==1)busy();Lcd_rw=0;Lcd_rs=0;P0=0x0f; //置高temp=0xf0&dat;P0=temp;Lcd_en=1;Lcd_en=1;Lcd_en=0;P0=0x0f;temp=(0x0f&dat)<<4;P0=temp;Lcd_en=1;Lcd_en=1;Lcd_en=0;}void write_date(uchar dat){uchar temp;busy();Lcd_rw=0;Lcd_rs=1;P0=0x0f;temp=0xf0&dat;P0=temp;Lcd_en=1;Lcd_en=1;Lcd_en=0;P0=0x0f;temp=(0x0f&dat)<<4;P0=temp;Lcd_en=1;Lcd_en=1;Lcd_en=0;}void init1602(void){uchar i;Lcd_rw=0;delay_ms(20);Lcd_en=0;write_com(0x28,0);delay_ms(1);write_com(0x28,0);delay_ms(1);write_com(0x28,0);delay_ms(1);write_com(0x28,1);write_com(0x08,1);write_com(0x0c,1);write_com(0x06,1);write_com(0x01,1);write_com(0x80+0x00,0);for(i=0;i<16;i++){write_date(TAB1[i]);//写第一行}}void busy(void){bit flag;uchar a;Lcd_rw=1;Lcd_rs=0;Lcd_en=1;P0=0xff;do{a=P0;a=a&0x80;if(a==0x80)flag=1;elseflag=0;}while(flag);Lcd_en=0; }。
- 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(); } } }。