课设-基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)

article/2025/6/22 11:32:36

基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)

    • 一、功能
    • 二、模块
      • 2.1、电机驱动模块
      • 2.2、超声波模块
    • 三、程序代码
    • 四、PCB原理图

一、功能

设计一辆利用超声波传感器来实现避障功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。

二、模块

2.1、电机驱动模块

在这里插入图片描述模块原理图:
在这里插入图片描述模块使用说明:
在这里插入图片描述

2.2、超声波模块

在这里插入图片描述工作原理:
在这里插入图片描述
使用说明:
在这里插入图片描述
注意超声波的测量范围是2cm~400cm,精度大约为3mm.

三、程序代码

main.c 文件

#include <reg52.h>	   //52芯片配置文件
#include <intrins.h>   //包含nop等系统函数
#include "bst_car.h"   unsigned char disbuff[4]={0,0,0,0};//用于分别存放距离的值0.1mm、mm、cm和m的值unsigned int  time=0;//用于存放定时器时间值
unsigned long S=0;//用于存放距离的值
bit  flag =0; //量程溢出标志位
char a=0;//延时函数
void delay(unsigned int xms)				
{unsigned int i,j;for(i=xms;i>0;i--)		      //i=xms即延时约xms毫秒for(j=112;j>0;j--);
}void Delay10us(unsigned char i)    	//10us延时函数 启动超声波模块时使用
{ unsigned char j; 
do{ j = 10; do{ _nop_(); }while(--j); 
}while(--i); 
}  void  StartModule() 		         //启动超声波模块
{TX=1;			                     //启动一次模块Delay10us(2);TX=0;
}void Forward(void)//前进
{IN2=1;IN3=1;IN1=0;IN4=0;
}void Stop(void)	//停车
{IN1=0; IN2=0;IN3=0;IN4=0;
}void back(void)	//后退
{IN1=1; IN2=0;IN3=0;IN4=1;
}    
void Turn_Right(void)	 //向右旋转
{IN1=0; IN2=1;IN3=0;IN4=1;}/********距离计算程序***************/
void conut1(void)
{time=TH1*256+TL1;TH1=0;TL1=0;//此时time的时间单位决定于晶振的频率,外接晶振为11.0592MHZ//那么1us声波能走多远的距离呢?1s=1000ms=1000000us // 340/1000000=0.00034米//0.00034米/1000=0.34毫米  也就是1us能走0.34毫米//但是,我们现在计算的是从超声波发射到反射接收的双路程,//所以我们将计算的结果除以2才是实际的路程S=time*0.17+10;	  //此时计算到的结果为毫米,并且是精确到毫米的后两位了,有两个小数点 
}void Conut(void)
{conut1();if((S>=5000)||flag==1) //超出测量范围{a=0;	flag=0;}else{disbuff[0]=S%10;disbuff[1]=S/10%10;disbuff[2]=S/100%10;disbuff[3]=S/1000;}//========避障部分===========================================if(S<=240)	   刹车障碍物距离	跟车速有关 可更改{	a++;if(a>=2){a=0;Stop();back();  //后退缓冲delay(230);//	后退缓冲时间 跟车速有关 可更改B:Turn_Right();delay(50);		  ///  旋转角度 跟环境复杂程度有关 可更改Stop();delay(100);		   旋转顿挫时间 视觉效果 可更改StartModule(); 				while(RX==0);TR1=1;			    //开启计数while(RX);			//当RX为1计数并等待TR1=0;				//关闭计数conut1();if(S>340)	 	 可直行方向无障碍物距离 跟环境有关 可更改{Turn_Right();delay(90);	Stop();				  //微调前进方向 避免车宽对前进影响delay(200);		   Forward();}		else{goto B;				//若没转到空旷方向 回到B点 继续旋转一次}}else{Forward();	//无障碍物 直行}}else{a=0;Forward();	   //无障碍物 直行}//=======================================}/********************************************************/
void zd0() interrupt 3 		 //T0中断用来计数器溢出,超过测距范围
{flag=1;			 //中断溢出标志RX=0;
}/********超声波高电平脉冲宽度计算程序***************/
void Timer_Count(void)
{TR1=1;			    //开启计数while(RX);			//当RX为1计数并等待TR1=0;				//关闭计数Conut();			//计算}
/********************************************************/
void keyscan(void)              //按键扫描函数
{A:    if(K4==0)			//判断是否有按下信号{delay(10);		  //延时10msif(K4==0)			//再次判断是否按下{FM=0;               //蜂鸣器响  		while(K4==0);	//判断是否松开按键FM=1;               //蜂鸣器停止  }else{goto A;        //跳转到A重新检测}}else{goto A;             //跳转到A重新检测}
} 
/********************************************************/ /*************主程序********************/
void main(void)
{unsigned int a;delay(400); //启动等待,等LCM讲入工作状态delay(5);//延时片刻TMOD=TMOD|0x10;//设T0为方式1,GATE=1;EA=1;					   //开启总中断TH1=0;TL1=0;          ET1=1;             //允许T0中断keyscan() ;  //按键扫描while(1){RX=1;StartModule();				 //启动模块for(a=951;a>0;a--){if(RX==1){Timer_Count();		 //超声波高电平脉冲宽度计算函数}}}
} 

bst_car.h 文件

#ifndef __BSTCAR_H__
#define __BSTCAR_H__//小车驱动模块的IO设置
sbit IN1=P2^2;
sbit IN2=P2^3;
sbit IN3=P2^5;
sbit IN4=P2^6;
sbit EN1=P2^4;
sbit EN2=P2^7;//按键IO
sbit K4=P3^4;
sbit K3=P3^6;//蜂鸣器IO
sbit FM=P1^3;//红外循迹IO设置
sbit Left_1_led=P3^3;	 //循迹-左红外IO       
sbit Right_1_led=P3^2;	 //循迹-右红外IO     //红外避障  
sbit Left_2_led=P3^4;	 //避障-左红外IO 
sbit Right_2_led=P3^5;	 //避障-右红外IO //超声波IO定义
sbit TX=P3^0;	   //Trig 控制端
sbit RX=P3^1;	   //Echo 接收端#define Left_moto_go      {IN1=0,IN2=1;}   //左电机向前走
#define Left_moto_back    {IN1=1,IN2=0;}   //右电机向后走
#define Left_moto_Stop    {EN1=0;}         //左电机停止                  
#define Right_moto_go     {IN3=1,IN4=0;}   //右电机向前走
#define Right_moto_back   {IN3=0,IN4=1;}   //右电机向后走
#define Right_moto_Stop   {EN2=0;}	       //右电机停止#endif

四、PCB原理图

4.1、原理图
在这里插入图片描述
4.2、元器件清单:
在这里插入图片描述
如果需要程序工程和仿真文件,可以关注公众号:Kevin的学习站,在后台回复“51避障小车” 即可获取,整理不易,但您的点赞、关注、收藏就是对我最大的鼓励!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/HJtaVamE.shtml

相关文章

基于51单片机的交通灯原理图加代码

花了一个星期制作的交通灯仿真程序原理图&#xff0c;通过数码管显示路口的时间&#xff0c;通过led显示红绿灯。[TOC] #include<reg51.H> // 对单片机的口进行了定义 #define uint unsigned int #define uchar unsigned char uchar code a[10]{0x40,0x79,0x24,0x30,0…

51单片机电路原理图_51单片机玩转物联网基础篇03-独立按键

前言 上一节,我们完成了51单片机控制LED灯,并实现流水灯效果,本节我们学习操作独立按键,并通过两个按键,分别打开和关闭所有LED灯,按键作为输入设备,在系统开发过程中十分常见,一般来说,按键可以设置系统参数、控制系统运行状态。 一、基础知识 1.按键简介 通常的按键…

单片机基础:MCS-51单片机的硬件结构(附硬件结构框图)

单片机硬件结构知识点非常琐碎&#xff0c;通过一次两次的学习是不太可能记住的。想要熟练掌握硬件结构&#xff0c;最好的方法是在实验中练习&#xff0c;通过编程多见多用才能牢固的掌握。 MCS-51单片机硬件结构 1.硬件系统框图2.单片机功能图3.单片机的主要部件4.CPU内部结…

基于51单片机的智能温控风扇(程序+仿真+原理图)

目录 基于51单片机的智能温控风扇1、主要功能2、实验结果3、仿真工程4、原理图5、程序源码6、资源获取 基于51单片机的智能温控风扇 1、主要功能 基于51单片机的智能温控风扇&#xff0c;通过DS180温度传感器采集温度&#xff0c;并通过数码管显示温度&#xff0c;当温度高于…

基于51单片机的温度监测控制系统仿真程序原理图设计

整体方案设计 3.1.1 系统概述 整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,传感器采用DS18B20,负责采集温度数据后发给单片机。显示设备采用4位共阴数码管,显示检测到的温度值。按键…

51单片机电路原理图_51单片机AD转换电路设计实现

51单片机AD转换电路设计实现 关于AD转换的原理,大家在《数字电子技术》中已经学过,这里做过多的介绍,本文介绍一款经典的8位AD转换芯片ADC0804,基于51单片机设计AD转换电路,并完成测量值的转换。 1 芯片引脚介绍 CS:片选信号,低电平有效,即CS=0时候芯片才能正常工作,单…

51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...

设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0~10Kg,重量误差不大于0.005Kg); 2.系统应具备键盘输入单价,显示重量,计算总价的功能; 3.单价和总价金额的单位为元,最大金额数值为999.99元,金额误差不大于0.01元; 4.系统超出最大测量范围10Kg时,具有报警指…

51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)

本设计&#xff1a; 基于51单片机的简易计算器设计&#xff08;仿真程序原理图PCB设计报告&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号S0001 芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯…

51单片机计算机加原理图,MCS-51单片机最小系统的组成部分及电路图介绍

MCS-51单片机概述 MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到…

手把手教你看懂51单片机原理图

最近当了单片机课设的助教,又再次接触了51单片机。发现初学者还看不太原理图&#xff0c;不能理解单片机 led灯&#xff0c;蜂鸣器&#xff0c;数码管是怎么操作的。现在结合原理图讲解一下怎么操作这些外设模块&#xff01;我们就以一些初始化代码进行讲解。 注&#xff1a;这…

51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统

当我们了解了什么是单片机,以及单片机有什么用之后,是否要考虑我们怎么去学习单片机呢?学习单片机其实很简单,需要的起步知识并不需要多少,接下来跟随我的步伐,一步一步的去了解单片机。本文将讲解单片机最小系统和仿真软件以及编程软件的选择。 0. 51单片机最小系统 先来…

理解51单片机最小系统的工作原理

51单片机最小应用系统 概述 要想使用单片机&#xff0c;第一个要搭建的电路就是单片机的最小系统&#xff0c;有了这个最小系统单片机就可以去正常的工作&#xff0c;即使没有其他的外围电路&#xff08;显示器啥的&#xff09;&#xff0c;也可以对单片机进行程序的编写&…

51单片机原理与设计方案(包含原理图与PCB)

一、单片机简介 单片机&#xff1a;在一片集成电路芯片上集成微处理器&#xff08;CPU&#xff09;、存储器&#xff08;ROM和RAM&#xff09;、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机&#xff08;single chip Microcomputer&#xff09;也叫…

如何获得海量的RoboCode代码

原文地址&#xff1a;如何获得海量的RoboCode代码 作者&#xff1a;胡泊1982 很多对人工智能感兴趣的朋友受限于资金和场地的限制&#xff0c;只能转向虚拟平台发展。我们机器人天空网站也曾经做过专门的专题介绍了几种常见的虚拟机器人竞赛平台&#xff08;http://www.robotsk…

Robocode 参数大揭密

Robocode 参数大揭密 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 天翼.李Skyala.Li, 2002 年 12 月 02 日 下面天翼.李(Skyala.Li)就和大家一起来看看Robocode中重要的参数并分析分析…

在IDEA上部署Robocode

Robocode的下载和安装 下载网址&#xff1a;https://robocode.sourceforge.io/ 下载Robocode 解压&#xff0c;点击运行压缩包中的jar包完成安装&#xff0c;安装完成后得到肉搏code的文件夹 在Idea上部署robocode 打开IDEA&#xff0c;新建Java项目&#xff0c;注意项目的…

教你玩Robocode(4)——规则系统

理解Robocode的规则系统&#xff0c;你才能写出更好的坦克。许多规则在Robotcode的Roles类中进行了描述。为了便于大家理解&#xff0c;本文对各种规则参数进行详细叙述。 时间 robocode的时间单位为”轮”(turn)。因此&#xff0c;在描述移动速度时&#xff0c;单位为”像素每…

RoboCode的Intellij环境搭建

2019独角兽企业重金招聘Python工程师标准>>> RoboCode自带的源码编辑器十分不便&#xff0c;本次参考youtube上的教程搭建Intellij的roboCode开发环境&#xff0c;最终实现能够编写、编译、运行、调试机器人。 创建项目 首先&#xff0c;用Intellij IDEA新建一个pro…

利用Jython开发Robocode机器人

&#xff08;转载请注明来源于 金庆的专栏&#xff09;先用Python写个简单的机器人&#xff1a; from robocode import * class SampleBlaze(Robot): def run(self): while 1 : self.ahead( 100 ) self.back( 100 ) 编译为jar包&#xff0c;注意…