标题:
51单片机超声波摇头避障小车源码
[打印本页]
作者:
keil
时间:
2016-12-10 20:12
标题:
51单片机超声波摇头避障小车源码
最初是在arduino的论坛看到的,觉得很好玩,就有了用51做的想法。从硬件搭建到程序编写都是我一个人完成的(当时单片机啥都不懂
)
用了一两个月,现在终于做好了。现在拿出来给大家参考,希望对大家能有所帮助。如果大家有什么好的意见和想法,欢迎在下面留言
0.png
(75.26 KB, 下载次数: 113)
下载附件
2017-1-7 15:24 上传
全部源码下载:
超声波摇头避障小车.zip
(48.74 KB, 下载次数: 87)
2016-12-10 20:02 上传
点击文件名下载附件
下载积分: 黑币 -5
部分单片机源程序:
#include<reg52.h>
#include<intrins.h>
#include"duoji.h"
#include"ultrasonic.h"
#include"serial_port.h"
uint flag_front,flag_left,flag_right,left_distance,right_distance;
/******定义电机控制接口********/
sbit in1=P1^4;
sbit in2=P1^5;
sbit in3=P1^6;
sbit in4=P1^7;
sbit ENA=P1^0;
sbit ENB=P1^1;
/**************小车运动控制****************/
void forward(void)
{
in1=0;
in2=1;
in3=0;
in4=1;
}
void backward(void)
{
in1=1;
in2=0;
in3=1;
in4=0;
}
void turn_left(void)
{
in1=1;
in2=1;
in3=0;
in4=1;
}
void turn_right(void)
{
in1=0;
in2=1;
in3=1;
in4=1;
}
void stop(void)
{
in1=1;
in2=1;
in3=1;
in4=1;
}
/*******************延时(单位1ms)*******************/
void dianji_delayms(unsigned int ms)
{
unsigned int a,b;
for(b=ms;b>0;b--)
for(a=110;a>0;a--);
}
/**************云台控制****************/
void yuntai_control()
{
/************舵机摆正后测距************/
get_wave();
if(get_distance()<=16)
{
stop();
dianji_delayms(400);
get_wave();
if(get_distance()<=16)
{
flag_front=1;
if(get_distance()<=4)
{
backward();
dianji_delayms(300);
stop();
}
dianji_delayms(1000);
duoji_positive_90degree(); //测得前方有障碍,舵机向左旋转90°
dianji_delayms(100);
}
/************舵机左转90°后测距************/
get_wave();
left_distance=get_distance();
if(left_distance<=8)
{
flag_left=1;
}
duoji_negative_90degree(); //舵机向右旋转180°
dianji_delayms(100);
/************舵机右转180°后测距************/
get_wave();
right_distance=get_distance();
if(right_distance<=8)
{
flag_right=1;
}
duoji_zero_degree(); //舵机摆正
dianji_delayms(100);
}
}
/**************电机控制****************/
void car_operational_control()
{
yuntai_control();
if(1==flag_front)
{
if(1==flag_front&&1==flag_left&&0==flag_right)
{
flag_front=0;
flag_left=0;
flag_right=0;
turn_right();
dianji_delayms(500);
stop();
}
else if(1==flag_front&&0==flag_left&&1==flag_right)
{
flag_front=0;
flag_left=0;
flag_right=0;
turn_left();
dianji_delayms(500);
stop();
}
else if(1==flag_front&&0==flag_left&&0==flag_right)
{
flag_front=0;
flag_left=0;
flag_right=0;
turn_right();
dianji_delayms(500);
stop();
}
else if(1==flag_front&&1==flag_left&&1==flag_right)
{
flag_front=0;
flag_left=0;
flag_right=0;
if(left_distance<=right_distance)
{
turn_right();
dianji_delayms(250);
}
else
{
turn_left();
dianji_delayms(250);
}
}
}
else
{
forward();
}
}
复制代码
作者:
admin
时间:
2017-1-7 15:27
好资料,
51黑有你更精彩!!!
作者:
bbq123bbq
时间:
2017-2-14 15:42
小车速度太快了,有PWM更好
作者:
mokangxin
时间:
2017-12-20 11:14
学习参考下~~
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1