Ⅰ 用labview編程智能循跡小車的程序思路
膠帶的寬度一定的話:
四個感測器一字排列的情況最簡單:
按1234號感測器命名,照在膠帶上狀態位為A,否則為a.
直線正常行走時,23號持續為A,14號持續為a.
分析開始右轉的邏輯:
2號變a,繼續直線行走,直到4號變A,根據24號間的距離和小車在這段時間內行駛的距離計算出轉動角度(這就是動態平面幾何問題了,自己畫圖解一下,注意轉彎時候前後中心點的軌跡,膠帶寬度是關鍵,得到的角度不會也不必太精確。這里我只討論邏輯),然後以比計算結果稍大(目的是確保能讓2恢復狀態A)的轉動角度開始轉彎,等到2和3都恢復狀態A,小車變回直線行走,等到2號重新變a,小車再恢復到原先的轉動角度……後面一直循環就行了
直線上如果車子前進方向傾斜,和轉彎一樣,下面以車子向右傾斜為例分析:
會出現3號變a的情況,繼續保持直線行走,直到1號變A,計算出小車在這個過程中行進距離,結合膠帶寬度,1和3號間的距離,就可以算出偏離的角度然後決定轉動角度。後面具體調整和過彎道一樣。
然後我來吐槽為什麼要用labview,你是想著拿著筆記本進行無線操控么 - -,嵌入式的labview編程現在還不成熟好吧~
Ⅱ tcrt5000鐨勫皬杞﹀驚榪規ā鍧楁庝箞鐢51鍗曠墖鏈虹紪紼嬨
鎴戠敤鍗佷笁涓瀵圭★紝鑸墊満鎺у埗杞鍚戱紝鍏涓瀵圭$殑璇濈姸鎬佹敼涓嬪氨琛岋紝緇欎綘鍙傝冧笅錛屼笉鏄庣櫧鍙浠ヨ拷闂鎴戱紝qq 181325995
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint i,count;
uchar pro; //*椹卞姩鐢墊満璋冮*//
uchar finish=0;//鍋滆濺鏍囧織
sbit le1=P1^0; //*宸﹁竟浼犳劅鍣*//
sbit le2=P1^1;
sbit le3=P1^2;
sbit le4=P1^3;
sbit le5=P1^4;
sbit le6=P1^5;
sbit mid=P1^6;//*涓闂翠紶鎰熷櫒*//
sbit ri6=P1^7;
sbit ri5=P2^3;
sbit ri4=P2^4;
sbit ri3=P2^5;
sbit ri2=P2^6;
sbit ri1=P2^7;//*鍙寵竟浼犳劅鍣*//
sbit ENA=P2^0; //椹卞姩鐢墊満pwm//
sbit moto1=P2^1; //鐢墊満鎺у埗//
sbit moto2=P2^2;
sbit PWM=P3^5; //鑸墊満pwm//
sbit bz=P3^7;//钄介殰綆
init()
{
TMOD=0x11;//璁懼畾鍙屽畾鏃跺櫒
EA=1;
TR0=1;
TR1=1;
TH0 = 0x0B1;//璁懼畾瀹氭椂鍒濆嬪礆紝鍙鍘諱笅杞戒釜瀹氭椂鍣ㄨ$畻杞浠訛紝
TL0 = 0x0E0;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
ET0=1;
ET1=1;
ENA=1;
}
void delay(uint n)//寤舵椂鍑芥暟
{
uchar a,b,c;
for(c=1;c>0;c--)
for(b=n;b>0;b--)
for(a=2;a>0;a--);
}
void delay2(uint z)
{
uchar a,b,c;
for(a=2;a>0;a--)
for(b=100;b>0;b--)
for(c=z;c>0;c--);
}
void qctyp(void) //鍏夌數綆″叏鏃犵姸鎬佹椂錛堣劚紱昏建閬擄級錛岃誨彇鍓嶆$姸鎬
{
le1=P1^0;
le2=P1^1;
le3=P1^2;
le4=P1^3;
le5=P1^4;
le6=P1^5;
mid=P1^6;
ri6=P1^7;
ri5=P2^3;
ri4=P2^4;
ri3=P2^5;
ri2=P2^6;
ri1=P2^7;
}
void hhig(uint y)//鍓嶈繘鍑芥暟
{
pro=y;//鍙橀噺y鏄鏀瑰彉灝忚濺閫熷害榪欓噷鑼冨洿鏄0--39
moto1=1;
moto2=0;
}
void back(uint z)//鍚庨鍑芥暟
{
pro=z;//鏀瑰彉z 鍙鏀瑰彉琛岄┒閫熷害
moto1=0;
moto2=1;
}
void dj(uint m) //鑸墊満鎺у埗
{
PWM=1;
delay(m); //鏀瑰彉m鍙鏀瑰彉鑸墊満杞鍚戣掑害錛
PWM=0;
}