Ⅰ 用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;
}