基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)
一、功能
设计一辆利用超声波传感器来实现避障功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。
二、模块
2.1、电机驱动模块
模块原理图:
模块使用说明:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712232807776.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzA1NDg4,size_16,color_FFFFFF,t_70#pic_center)
2.2、超声波模块
工作原理:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712232320978.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzA1NDg4,size_16,color_FFFFFF,t_70#pic_center)
使用说明:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712232159516.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzA1NDg4,size_16,color_FFFFFF,t_70#pic_center)
注意超声波的测量范围是2cm~400cm,精度大约为3mm.
三、程序代码
main.c 文件
#include <reg52.h>
#include <intrins.h>
#include "bst_car.h"
unsigned char disbuff[4]={0,0,0,0};
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--)
for(j=112;j>0;j--);
}
void Delay10us(unsigned char i)
{
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;
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);
TR1=0;
conut1();
if(S>340)
{
Turn_Right();
delay(90);
Stop();
delay(200);
Forward();
}
else
{
goto B;
}
}
else
{
Forward();
}
}
else
{
a=0;
Forward();
}
}
void zd0() interrupt 3
{
flag=1;
RX=0;
}
void Timer_Count(void)
{
TR1=1;
while(RX);
TR1=0;
Conut();
}
void keyscan(void)
{
A: if(K4==0)
{
delay(10);
if(K4==0)
{
FM=0;
while(K4==0);
FM=1;
}
else
{
goto A;
}
}
else
{
goto A;
}
}
void main(void)
{
unsigned int a;
delay(400);
delay(5);
TMOD=TMOD|0x10;
EA=1;
TH1=0;
TL1=0;
ET1=1;
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__
sbit IN1=P2^2;
sbit IN2=P2^3;
sbit IN3=P2^5;
sbit IN4=P2^6;
sbit EN1=P2^4;
sbit EN2=P2^7;
sbit K4=P3^4;
sbit K3=P3^6;
sbit FM=P1^3;
sbit Left_1_led=P3^3;
sbit Right_1_led=P3^2;
sbit Left_2_led=P3^4;
sbit Right_2_led=P3^5;
sbit TX=P3^0;
sbit RX=P3^1;
#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、原理图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712230910102.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzA1NDg4,size_16,color_FFFFFF,t_70#pic_center)
4.2、元器件清单:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210712230909380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzA1NDg4,size_16,color_FFFFFF,t_70#pic_center)
如果需要程序工程和仿真文件,可以关注公众号:Kevin的学习站,在后台回复“51避障小车” 即可获取,整理不易,但您的点赞、关注、收藏就是对我最大的鼓励!
![在这里插入图片描述](https://img-blog.csdnimg.cn/c46fa06c67744602ba799f0c4259ac9e.gif#pic_center)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)