標(biāo)題:
簡(jiǎn)單紅外避障小車(chē)單片機(jī)程序
[打印本頁(yè)]
作者:
123wer煩
時(shí)間:
2019-6-2 14:35
標(biāo)題:
簡(jiǎn)單紅外避障小車(chē)單片機(jī)程序
這次的紅外避障實(shí)驗(yàn)小車(chē)程序適合于初學(xué)者。
注意:每個(gè)小車(chē)轉(zhuǎn)速等特性都會(huì)不同,具體的轉(zhuǎn)向避障程序塊兒可以自己試著調(diào)試
要有耐心。
e63512d79d322af9daf0d26d92bdbf7.jpg
(85.21 KB, 下載次數(shù): 80)
下載附件
實(shí)驗(yàn)照片
2019-6-2 14:33 上傳
單片機(jī)源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define Left_moto2_pwm qy_enb
#define Right_moto2_pwm qz_ena
#define Left_moto_pwm hy_enb
#define Right_moto_pwm hz_ena
void delay(uint i)
{
uint j,k;
for(j=i;j>0;j--)
for(k=114;k>0;k--);
}
sbit out_left=P2^0;
sbit out_right=P2^1;
//定義電機(jī)IO口
sbit qz_ena=P1^0;
sbit qz_in1=P1^1;
sbit qz_in2=P1^2;
sbit qy_enb=P1^3;
sbit qy_in3=P1^4;
sbit qy_in4=P1^5;
sbit hz_ena=P1^6;
sbit hz_in1=P1^7;
sbit hz_in2=P2^2;
sbit hy_enb=P2^6;
sbit hy_in3=P2^4;
sbit hy_in4=P2^5;
//定義數(shù)據(jù)部分
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;
int pwm=3;
unsigned char pwm_val_left =0;//變量定義
unsigned char push_val_left =0;// 左電機(jī)占空比N/10
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右電機(jī)占空比N/10
/************************************************************************/
void run(void) //pwm調(diào)速函數(shù)
{
push_val_left =pwm; //PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個(gè)值可以改變其速度
push_val_right =pwm; //PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個(gè)值可以改變其速度
if(pwm==10) pwm=0;
if(pwm==0&&pwm<0) pwm=0;
}
/************************************************************************/
/* PWM調(diào)制電機(jī)轉(zhuǎn)速 */
/************************************************************************/
/* 左側(cè)電機(jī)調(diào)速 */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{ Left_moto_pwm=1;
Left_moto2_pwm=1; }
else
{ Left_moto_pwm=0;Left_moto2_pwm=0; }
if(pwm_val_left>=10)
pwm_val_left=0;
}
else { Left_moto_pwm=0;Left_moto2_pwm=0; }
}
/******************************************************************/
/* 右側(cè)電機(jī)調(diào)速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{ Right_moto_pwm=1;
Right_moto2_pwm=1; }
else
{Right_moto_pwm=0;
Right_moto2_pwm=0;}
if(pwm_val_right>=10)
pwm_val_right=0;
}
else {Right_moto_pwm=0;Right_moto2_pwm=0; }
}
/***************************************************************************/
void Forward(void)//前進(jìn)
{
ET0=1;
run();
qz_in1=0;//右后輪
qz_in2=1;
qy_in3=1;//后坐
qy_in4=0;
hz_in1=1; //前右
hz_in2=0;
hy_in3=1; //前左
hy_in4=0;
}
void Stop(void) //停車(chē)
{
qz_in1=0;
qz_in2=0;
qy_in3=0;
qy_in4=0;
hz_in1=0;
hz_in2=0;
hy_in3=0;
hy_in4=0;
}
void back(void) //后退
{
ET0=1;
run();
qz_in1=1;
qz_in2=0;
qy_in3=0;
qy_in4=1;
hz_in1=0;
hz_in2=1;
hy_in3=0;
hy_in4=1;
}
void Turn_Right(void) //向右旋轉(zhuǎn)
{
ET0=1;
run();
qz_in1=0;
qz_in2=0;
qy_in3=1;
qy_in4=0;
hz_in1=1;
hz_in2=0;
hy_in3=0;
hy_in4=0;
}
void Turn_Left()
{
ET0=1;
run();
qz_in1=0;
qz_in2=1;
qy_in3=0;
qy_in4=0;
hz_in1=0;
hz_in2=0;
hy_in3=1;
hy_in4=0;
}
void main()
{
//用于初始化pwm調(diào)速
TMOD=0X01;
TH0= 0XF8; //1ms定時(shí)
TL0= 0X30;
TR0= 1;
ET0= 1;
EA = 1;
while(1)
{
//有信號(hào)為0 沒(méi)有信號(hào)為1
if(out_left==1&&out_right==1)
{
pwm=3;
Forward(); //調(diào)用前進(jìn)函數(shù)
}
if(out_left==1&&out_right==0) //右邊檢測(cè)到障礙物
{
pwm=5;
back();
delay(300);
Turn_Left; //調(diào)用小車(chē)左轉(zhuǎn)函數(shù)
delay(500);
}
if(out_left==0&&out_right==1 ) //左邊檢測(cè)到障礙物
{
pwm=5;
back();
delay(300);
Turn_Right(); //調(diào)用小車(chē)右轉(zhuǎn)函數(shù)
delay(500);
}
if(out_left==0&&out_right==0 ) //左邊檢測(cè)到障礙物
{
pwm=3;
back(); //調(diào)用小車(chē)右轉(zhuǎn)函數(shù)
}
}
}
///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
void timer0()interrupt 1 using 2
{
TH0=0XF8; //1Ms定時(shí)
TL0=0X30;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/* if(out==0) //距離在范圍內(nèi)0 快要撞了
{
Stop();
back();
delay(1000);
}
else //距離超出定值1 離墻還遠(yuǎn)
{
Stop();
Forward();
}*/
復(fù)制代碼
所有資料51hei提供下載:
紅外避障.zip
(22.3 KB, 下載次數(shù): 140)
2019-6-2 14:32 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
ysn123
時(shí)間:
2020-6-19 10:13
謝謝樓主分享
作者:
呂小布不
時(shí)間:
2021-6-4 22:51
代碼很好,很適合初學(xué)者
作者:
xuxuxuxuxuxuxu
時(shí)間:
2021-7-7 15:41
代碼不錯(cuò),值得學(xué)習(xí)
謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1