標題:
51單片機超聲波搖頭避障小車源碼
[打印本頁]
作者:
keil
時間:
2016-12-10 20:12
標題:
51單片機超聲波搖頭避障小車源碼
最初是在arduino的論壇看到的,覺得很好玩,就有了用51做的想法。從硬件搭建到程序編寫都是我一個人完成的(當(dāng)時單片機啥都不懂
)
用了一兩個月,現(xiàn)在終于做好了。現(xiàn)在拿出來給大家參考,希望對大家能有所幫助。如果大家有什么好的意見和想法,歡迎在下面留言
0.png
(75.26 KB, 下載次數(shù): 113)
下載附件
2017-1-7 15:24 上傳
全部源碼下載:
超聲波搖頭避障小車.zip
(48.74 KB, 下載次數(shù): 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(); //測得前方有障礙,舵機向左旋轉(zhuǎn)90°
dianji_delayms(100);
}
/************舵機左轉(zhuǎn)90°后測距************/
get_wave();
left_distance=get_distance();
if(left_distance<=8)
{
flag_left=1;
}
duoji_negative_90degree(); //舵機向右旋轉(zhuǎn)180°
dianji_delayms(100);
/************舵機右轉(zhuǎn)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();
}
}
復(fù)制代碼
作者:
admin
時間:
2017-1-7 15:27
好資料,
51黑有你更精彩!!
作者:
bbq123bbq
時間:
2017-2-14 15:42
小車速度太快了,有PWM更好
作者:
mokangxin
時間:
2017-12-20 11:14
學(xué)習(xí)參考下~~
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1