日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

智能小车-红外循迹篇

發(fā)布時間:2023/12/31 编程问答 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 智能小车-红外循迹篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Record:2021/5/12日學(xué)院舉辦的智能小車比賽落下帷幕,特地將比賽出現(xiàn)的問題和經(jīng)歷總結(jié)一下,以表紀(jì)念。

比賽要求藍(lán)牙模板和超聲波,測距,目標(biāo)跟蹤四個功能整合在一個程序上,另一項(xiàng)就是紅外循跡加避障(不是繞礙,不過也不難)。

我先將記憶深刻的紅外循跡避障程序記錄下來:

首先直接上代碼:

* 晶振:11.0592MHZZYWIFI0939WIFI控制智能機(jī)器人杜邦線接線方法,請一定照做,否則可能不工作,并燒毀小車。J3 接到實(shí)驗(yàn)板 P4 J4 接實(shí)驗(yàn)板 P7接口 IN1--接到--實(shí)驗(yàn)板上的P1.2 IN5--接到--實(shí)驗(yàn)板上的P2.1IN2--接到--實(shí)驗(yàn)板上的P1.3 IN6--接到--實(shí)驗(yàn)板上的P2.0EN1--接到--實(shí)驗(yàn)板上的P1.4EN2--接到--實(shí)驗(yàn)板上的P1.5IN3--接到--實(shí)驗(yàn)板上的P1.6IN4--接到--實(shí)驗(yàn)板上的P1.7J5 接實(shí)驗(yàn)班P3接口OUT1--接到--實(shí)驗(yàn)板上的P3.2 OUT3--接到--實(shí)驗(yàn)板上的P3.4OUT2--接到--實(shí)驗(yàn)板上的P3.3 OUT4--接到--實(shí)驗(yàn)板上的P3.5VCC-- 接到--實(shí)驗(yàn)班上的VCC GND--接到--實(shí)驗(yàn)板上的GND******************************************************************/ #ifndef _LED_H_ #define _LED_H_//定義小車驅(qū)動模塊輸入IO口 sbit L293D_IN1=P1^2; sbit L293D_IN2=P1^3;sbit L293D_IN3=P1^4;sbit L293D_IN4=P1^5;sbit L293D_EN1=P1^6;sbit L293D_EN2=P1^7;/***蜂鳴器接線定義*****/sbit BUZZ=P2^3;#define Left_1_led P3_7 //左傳感器 #define Right_1_led P3_6 //右傳感器 #define mid_1_led P0^0 //中間循跡#define Left_2_led P3_4 //左避障傳感器 #define Right_2_led P3_5 //右避障傳感器 #define Left_moto_pwm P1_6 //PWM信號端#define Right_moto_pwm P1_7 //PWM信號端#define Left_moto_go {P1_2=1,P1_3=0;} //左電機(jī)向前走#define Left_moto_back {P1_2=0,P1_3=1;} //左邊電機(jī)向后轉(zhuǎn)#define Left_moto_Stop {P1_2=0,P1_3=0;} //左邊電機(jī)停轉(zhuǎn) #define Right_moto_go {P1_4=1,P1_5=0;} //右邊電機(jī)向前走#define Right_moto_back {P1_4=0,P1_5=1;} //右邊電機(jī)向后走#define Right_moto_Stop {P1_4=0,P1_5=0;} //右邊電機(jī)停轉(zhuǎn) unsigned char pwm_val_left =0;//變量定義unsigned char push_val_left =0;// 左電機(jī)占空比N/20unsigned char pwm_val_right =0;unsigned char push_val_right=0;// 右電機(jī)占空比N/20bit Right_moto_stop=1;bit Left_moto_stop =1;unsigned int time=0;/************************************************************************/ //延時函數(shù) void delay(unsigned int k) { unsigned int x,y;for(x=0;x<k;x++) for(y=0;y<200;y++); } /************************************************************************/ //前速前進(jìn)void run(void) {push_val_left=20; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大push_val_right=20;Left_moto_go ; //左電機(jī)往前走Right_moto_go ; //右電機(jī)往前走 }//后退函數(shù) void backrun(void) {push_val_left=12; //速度調(diào)節(jié)變量 0-20。。。0最小,20最大push_val_right=12;Left_moto_back; //左電機(jī)往后走Right_moto_back; //右電機(jī)往后走 }//左轉(zhuǎn)void leftrun(void) { push_val_left=14;push_val_right=20;Right_moto_go ; //右電機(jī)往前走Left_moto_go ; //左電機(jī)后走 }//急左轉(zhuǎn)void moreleft(void) { push_val_left=15;push_val_right=15;Right_moto_go ; //右電機(jī)往前走Left_moto_back ; //左電機(jī)后走 }//右轉(zhuǎn)void rightrun(void) { push_val_left=20;push_val_right=14;Left_moto_go ; //左電機(jī)往前走Right_moto_go ; //右電機(jī)往后走 } //急右轉(zhuǎn)void moreright(void) { push_val_left=16;push_val_right=16;Left_moto_go ; //左電機(jī)往前走Right_moto_back ; //右電機(jī)往后走 }//停止void stop(void) { Right_moto_Stop ; //右電機(jī)停止Left_moto_Stop ; //左電機(jī)停止 }/************************************************************************/ /* PWM調(diào)制電機(jī)轉(zhuǎn)速 */ /************************************************************************/ /* 左電機(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_moto_pwm1=1; }else {Left_moto_pwm=0; // Left_moto_pwm1=0; }if(pwm_val_left>=20)pwm_val_left=0;}else {Left_moto_pwm=0; // Left_moto_pwm1=0; } } /******************************************************************/ /* 右電機(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_moto_pwm1=1; }else {Right_moto_pwm=0; // Right_moto_pwm1=0; }if(pwm_val_right>=20)pwm_val_right=0;}else {Right_moto_pwm=0; // Right_moto_pwm1=0; } }/***************************************************/ ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號*/void timer0()interrupt 1 using 2 {TH0=0XFc; //1Ms定時TL0=0X18;time++;pwm_val_left++;pwm_val_right++;pwm_out_left_moto();pwm_out_right_moto();} /*********************************************************************/ #endif #include<AT89X52.H> //包含51單片機(jī)頭文件,內(nèi)部有各種寄存器定義#include<ZY-4WD_PWM.H> //包含HL-1藍(lán)牙智能小車驅(qū)動IO口定義等函數(shù)//主函數(shù)void main(void) { unsigned char i;unsigned char flag; // 標(biāo)記點(diǎn)P1=0X00; //關(guān)電機(jī) TMOD=0X01;TH0= 0XFc; //1ms定時TL0= 0X18;TR0= 1;ET0= 1;EA = 1; //開總中斷while(1) //無限循環(huán){ if(Left_2_led==0 || Right_2_led==0) //遇到障礙物{ backrun();delay(1);stop();}//有信號為0 沒有信號為1if(Left_1_led==1&&mid_1_led==1&&Right_1_led==1)//亮的時候?yàn)?,1才檢測到黑線{ run();}if(Left_1_led==1&&mid_1_led==1&&Right_1_led==0) {leftrun();flag=0;delay(1); }if(Left_1_led==0&&mid_1_led==1&&Right_1_led==1) { rightrun();flag=1; delay(1); }if(Right_1_led==1&&Left_1_led==1) { run(); }if(Left_1_led==0&&mid_1_led==0&&Right_1_led==0)//亮的時候?yàn)?,1才檢測到黑線{ //跑出賽道if(flag==1) { //右急轉(zhuǎn)moreright();} if(flag==0) { //左急轉(zhuǎn)moreleft();} }} }

我們在基礎(chǔ)的代碼上進(jìn)行的修改,讓它的速度盡量發(fā)揮到極致,這個小車在淘寶上買的,大概兩百多,感興趣的話可以買一輛挺好玩的。

根據(jù)小車傳感器原理圖我們可以知道P3.6,P3.7,P0.0為三個紅外循跡傳感器,P3.4,P3.5為左右避障傳感器大家要根據(jù)原理圖進(jìn)行更改,需要原理圖的可以私聊我,在調(diào)試小車時,就因?yàn)闆]有認(rèn)真看原理圖在代碼編寫的時候一直出問題,還有一定一定一定要將代碼放在準(zhǔn)確的文件夾里,我好多次就是改代碼改了一下午沒找到錯誤,后來才發(fā)現(xiàn)代碼寫到另一個備份的文件夾里,白白浪費(fèi)一個下午的時間。

代碼部分,我們在原代碼的基礎(chǔ)上增加了flag函數(shù),這是為了在速度極高的情況之下,小車就有跑出賽道的可能卻依然能跑回賽道(這也就意味著沒檢測到黑線小車就會跑了)。正是這個flag函數(shù)的存在使得可以將小車的硬件發(fā)揮到極致,所以我們把PWM調(diào)速調(diào)到最高小車也不會跑離賽道太多(會有一丟丟的跑出去),避障的話我加了一個后退的函數(shù),避免速度太快直接撞上。至少電機(jī)反轉(zhuǎn)減速倒退然后保持一定距離。?

下面就是測試哪個速度能將跑出最快的成績了,我們用黑色膠帶在宿舍自己搞了一個賽道然后測試時間:

最左邊是前進(jìn)速度左右電機(jī)都為20,左右電機(jī)在轉(zhuǎn)向的時候都是向前走,依靠兩邊的速度差進(jìn)行轉(zhuǎn)向(測試過一邊電機(jī)向后一邊向前轉(zhuǎn),不過速度不太理想);后面最好速度為一圈11.3秒,可能存在一些偶然誤差,不過這確實(shí)是比較理想的數(shù)據(jù)了。

然后靜靜等待比賽結(jié)果了,不管怎樣這五天和同學(xué)一起研究挺開心的,不論結(jié)果如何不斷沖刺吧!

我們的目標(biāo)可是不斷超越!

總結(jié)

以上是生活随笔為你收集整理的智能小车-红外循迹篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。