❶ 尋跡避障智能小車的組裝問題
你好,我看你的小車,和我們隊之前做的一樣。
現在我把我們的組裝經驗分享一下:我們組裝時候買了很多固定用的螺絲,比較長,所以適用各個模塊的組裝如果各個模塊全都做出來了,就自己布局下,先考慮功能是否受影響,再考慮美觀,一步一步,不行則改,這樣很快就能組裝好。
然後我們的建議是,這個小車底盤不適用於像電子設計競賽之類,因為它左右兩輪直流電機減速機構阻力差別較大,而且小車的橡膠輪做工不是很好,不是一個相對的圓形,用PID很難控制它們速度一致,使其走直線或者轉精確角度。不知兄弟是如何解決的。
❷ 我做了一個單片機智能避障小車
改用鎳氫充電電池吧,輸出功率會大一些。
電池輸出本來就是直流,後面不用整流模塊,用個穩壓模塊就可以了。
4節5號電池串聯時額定電壓是6V,但接上負載後肯定達不到6V,穩壓模塊還要有壓降,所以很難保證5V的輸出,先計算一下後面負載需要的功率,根據負載功率設計電源。
❸ 智能尋跡避障小車
我做小車用的就是這個程序,好使,選為最佳答案就是。多謝
#include "reg52.h"
#define det_Dist 2.55 //單個脈沖對應的小車行走距離,其值為車輪周長/4
#define RD 9 //小車對角軸長度
#define PI 3.1415926
#define ANG_90 90
#define ANG_90_T 102
#define ANG_180 189
/*============================全局變數定義區============================*/
sbit P10=P1^0; //控制繼電器的開閉
sbit P11=P1^1; //控制金屬接近開關
sbit P12=P1^2; //控制顏色感測器的開閉
sbit P07=P0^7; //控制聲光信號的開啟
sbit P26=P2^6; //接收顏色感測器的信號,白為0,黑為1
sbit P24=P2^4; //左
sbit P25=P2^5; //右 接收左右光感測器的信號,有光為0
unsigned char mType=0; //設置運動的方式,0 向前 1 向左 2 向後 3 向右
unsigned char Direction=0; //小車的即時朝向 0 朝上 1 朝左 2 朝下 3 朝右
unsigned sX=50; unsigned char sY=0; //小車的相對右下角的坐標 CM(sX,sY)
unsigned char StartTask=0; //獲得鐵片後開始執行返回卸貨任務,StartTask置一
unsigned char Inter_EX0=0; // 完成一個完整的任務期間只能有一次外部中斷
// Inter_EX0記錄外部中斷0的中斷狀態
// 0 動作最近的前一次未中斷過,
// 1 動作最近的前一次中斷過
unsigned char cntIorn=0; //鐵片數
unsigned char bkAim=2; //回程目的地,0為A倉庫,1為B倉庫,2為停車場,
//(在MAIN中接受鐵片顏色判斷感測器的信號來賦值)
unsigned char Light_Flag=0;//進入光引導區的標志(1)
unsigned int cntTime_5Min=0;//時間周期數,用於 T0 精確定時
unsigned int cntTime_Plues=0; //霍爾開關產生的脈沖數
/*============================全局變數定義區============================*/
/*------------------------------------------------*/
/*-----------------通用延遲程序-------------------*/
/*------------------------------------------------*/
void delay(unsigned int time) // time*0.5ms延時
{
unsigned int i,j;
for(j=0;j<time;j++)
{
for(i=0;i<60;i++)
{;}
}
}
/*-----------------------------------------------*/
/*-------------------顯示控制模塊----------------*/
/*-----------------------------------------------*/
/*數碼管顯示,顯示鐵片的數目(設接在P0,共陰)*/
void Display(unsigned char n)
{
char Numb[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77};
P0=Numb[n];
}
/*-----------------------------------------------*/
/*-------------------感測器模塊------------------*/
/*-----------------------------------------------*/
/*光源檢測程序: */
/*用於糾正小車運行路線的正確性*/
unsigned char LightSeek()
{ void Display(unsigned char);
bit l,r;
l=P24;
r=P25;
if(l==0&&r==1)
{
//Display(1);
return (3); //偏左,向右開
}
if(r==0&&l==1)
{
//Display(3);
return(1); //偏右,向左開
}
if((l==1&&r==1)||(l==0&&r==0))
{//Display(9);
return(0); //沒有偏離,前進
}
}
/*鐵片檢測程序: */
/*判斷鐵片的顏色,設定bkAim,0為A倉庫,1為B倉庫,2為停車場*/
void IornColor()
{
delay(4000);
bkAim=(int)(P26);
Display((int)(P26)+2);
}
/*-----------------------------------------------*/
/*------------------運動控制模塊-----------------*/
/*-----------------------------------------------*/
/*====基本動作層:完成基本運動動作的程序集====*/
/*運動調整程序: */
/*對小車的運動進行微調*/
void ctrMotor_Adjust(unsigned char t)
{
if(t==0)
{
P2=P2&240|11; //用來解決兩電機不對稱的問題
delay(6);
}
if(t==3)
{
P2=P2&250; //向左走
delay(1);
}
if(t==1)
{
P2=(P2&245);
delay(1); //向右走
}
P2=((P2&240)|15);
delay(10);
}
/*直走程序: */
/*控制小車運動距離,dist為運動距離(cm),type為運動方式(0 2)*/
/*只改變小車sX 和 sY的值而不改變Direction的值. */
void ctrMotor_Dist(float dist,unsigned char type)
{unsigned char t=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)(dist/det_Dist);
while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(Light_Flag==1) t=LightSeek();
if(type==0) //向前走
{
P2=P2&249;
delay(40);
ctrMotor_Adjust(t);
}
if(type==2) //向後退
{
P2=P2&246;
delay(50);
ctrMotor_Adjust(t);
}
P2=((P2&240)|15);
if(mType==2) delay(60);//剎車制動 0.5ms
else delay(75);
}
}
/*拐彎程序: */
/*控制小車運動角度,type為運動方式(1 3) */
/*只改變小車Direction的值而不改變sX 和 sY的值*/
void ctrMotor_Ang(unsigned char ang,unsigned char type,unsigned char dir)
{
unsigned char i=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)((PI*RD*90/(180*det_Dist)*1.2)*ang/90);
while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(type==1) //向左走
{
P2=P2&250;
delay(100);
ctrMotor_Adjust(0);
}
if(type==3) //向右走
{
P2=P2&245;
delay(100);
ctrMotor_Adjust(0);
}
P2=((P2&240)|15);
delay(50);//剎車制動 0.5ms
}
if(!(Inter_EX0==1&&StartTask==0))
{
Direction=dir;
}
}
/*====基本路線層:描述小車基本運動路線的程序集====*/
/*當小車到達倉庫或停車場時,放下鐵片或停車(0,1為倉庫,2為停車場)*/
void rchPlace()
{unsigned int time,b,s,g;
time=(int)(cntTime_5Min*0.065535);//只有一個數碼管時,輪流顯示全過程秒數 個 十 百
b=time%100;
s=(time-b*100)%100;
g=(time-b*100-s*10)%10;
if(bkAim==2)
{
//到達停車場了,停車
EA=0;
P2=((P2&240)|15);
while(1)
{
Display(10); //N
delay(2000);
Display(cntIorn);
delay(2000);
Display(11);//A
delay(2000);
Display(b);
delay(2000);
Display(s);
delay(2000);
Display(g);
delay(2000);
}
}
else
{
if(Inter_EX0==1&&StartTask==1)P10=0; //到達倉庫,卸下鐵片
}
}
/*無任務模式: */
/*設置小車的固定運動路線,未發現鐵片時的運動路線*/
void BasicRoute()
{ //Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_90,1,1);
ctrMotor_Dist(100-sX,0);
ctrMotor_Dist(125,2);
ctrMotor_Dist(73,0);
ctrMotor_Ang(ANG_90,1,2);
//Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_180,1,0);
rchPlace();
}
/*任務模式: */
/*設置小車的發現鐵片後的運動路線*/
void TaskRoute()
{
//基本運行路線表,記載拐彎 0 向前 1 左拐 2 向後 3 右拐,正讀去A區;反讀去B區
StartTask=1;
ctrMotor_Ang(ANG_90_T,1,2);
if(bkAim==1) //倉庫A
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,2);
ctrMotor_Ang(ANG_90_T,1,2);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
// ctrMotor_Ang(208,1,0);
}
else if(bkAim==0) //倉庫B
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,0);
ctrMotor_Ang(ANG_90_T,1,0);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
//ctrMotor_Ang(208,1,0);
}
delay(5000);
rchPlace();
}
/*---------------------------------------------*/
/*-------------------主程序段------------------*/
/*---------------------------------------------*/
void main()
{
delay(4000);
P2=0xff; //初始化埠
P07=0;
P1=0;
TMOD=0x01; //初始化定時器0/1 及其中斷
TL0=0;
TH0=0;
TR0=1;
ET0=1;
ET1=1;
IT0=1; //初始化外部中斷
EX0=1;
IT1=1;
EX1=1;
EA=1;
P11=1;
while(1)
{
Display(cntIorn);
bkAim=2;
BasicRoute();
if(Inter_EX0==1)
{
TaskRoute();//按獲得鐵片後的路線運動
IE0=0;
EX0=1;
}
Inter_EX0=0;
}
}
/*----------------------------------------------------*/
/*----------------------中斷程序段--------------------*/
/*----------------------------------------------------*/
/*定時器0中斷程序: */
/*當時間過了5分鍾,則就地停車並進入休眠狀態*/
void tmOver(void) interrupt 1
{
cntTime_5Min++;
TL0=0;
TH0=0;
if(cntTime_5Min>=4520)
{
Display(5);
P2=((P2&240)|15);
EA=0; //停車程序
P07=1;
delay(4000);
PCON=0X00;
while(1);
}
}
/*外部中斷0中斷程序: */
/*發現鐵片,發出聲光信號並將鐵片吸起,發光二極體和蜂鳴器*/
/*並聯在一起(設接在P07). 0為A倉庫,1為B倉庫,2為停車場*/
void fndIorn(void) interrupt 0
{
unsigned char i;
P10=1;
P2=((P2&240)|15); //停車
P07=1;
delay(1000);//剎車制動 0.5ms
P07=0;
Inter_EX0=1;
cntIorn++;
Display(cntIorn);
for(i=0;i<40;i++)
{
P2=P2&249;
delay(2);
P2=((P2&240)|15);
delay(2);
}
P2=P2&249;
delay(100);
P2=((P2&240)|15); //停車
IornColor(); //判斷鐵片黑白,設置bkAim
for(i=0;i<95;i++)
{
P2=P2&249;
delay(3);
P2=((P2&240)|15);
delay(2);
}
P2=((P2&240)|15); //停車
delay(4000); //把鐵片吸起來
EX0=0;
}
/*外部中斷1中斷程序: */
/*對霍爾開關的脈沖記數,對小車的位置進行記錄,以便對小車進行定位*/
void stpMove(void) interrupt 2
{
cntTime_Plues--;
if(Direction==0) //向上
{
if(mType==0) sY+=det_Dist;
else if(mType==2)
sY-=det_Dist;
}
else if(Direction==1) //向左
{
if(mType==0) sX+=det_Dist;
else if(mType==2)
sX-=det_Dist;
}
else if(Direction==2) //向下
{
if(mType==0) sY-=det_Dist;
else if(mType==2)
sY+=det_Dist;
}
else if(Direction==3) //向右
{
if(mType==0) sX-=det_Dist;
else if(mType==2)
sX+=det_Dist;
}
❹ 我想做智能避障小車,還學什麼
你先試著做小車,碰到什麼不會就學什麼,我就是這么過來的,不然盲目的學意義不大
❺ 做一個智能避障小車需要哪些元件誰教教我謝謝啦^_^
單片機最小外圍電路(單片機+晶振+若干電容)
紅外對管+比較器電路(LM339之類的)
電源穩壓(7805之類的)
以上只是避障
要控制車還要電機驅動電路(L298N之類的)
電機供電還要大功率電池
❻ 避障小車原理
避障小車原理:
一、運動機理:
控制前面兩個輪子的轉動方向就可以控制整個機器人行進的方向:
1、左右兩個前輪都向前轉,則機器人向「正前方」直線前進;
2、左右兩個前輪都向後轉,則機器人向「正後方」直線倒退;
3、左前輪向後轉,右前輪向前轉,則機器人將以後輪為軸心逆時針轉動,即實現向「右後方」轉彎倒退;
4、左前輪向前轉,右前輪向後轉,則機器人將以後輪為軸心順時針轉動,即實現向「左後方」轉彎倒退。
二、控制原理
在機器人的頭部用鋼絲做兩根觸須,一左一右各連接到一個碰撞開關,分別控制兩個前輪的旋轉方向。
特別注意,左右觸須與對應控制的電機是交叉過來的,即:左邊的觸須連接右邊的碰撞開關,控制右邊的電機;右邊的觸須連接左邊的碰撞開關,控制左邊的電機。
(1)無障礙物
當前方都沒有障礙物,左右兩個輪子都向前正轉,則機器人向「前方」直線前進。
(2)左前方有障礙物
當左前方有障礙物,在左邊觸須碰到障礙物時,控制右邊的輪子反轉,則機器人向「左後方」倒退並轉彎,即方向轉向了障礙物的右邊,從而避開了左邊的障礙物。
向後倒退轉彎會持續一會,在完成轉彎之後,左邊觸須不再碰到障礙物,則兩個輪子都正轉,機器人繼續向新的沒有障礙物的「前方」直線前進。
(3)右前方有障礙物
當右前方有障礙物,在右邊觸須碰到障礙物時,控制左邊的輪子反轉,則機器人向「右後方」倒退並轉彎,即方向轉向了障礙物的左邊,從而避開了右邊的障礙物。
向後倒退轉彎會持續一會,在完成轉彎之後,右邊觸須不再碰到障礙物,則兩個輪子都正轉,機器人繼續向新的沒有障礙物的「前方」直線前進。
(4)正前方有障礙物
當正前方有障礙物,左右兩邊的觸須都會碰到障礙物,控制左右兩邊的輪子都反轉,則機器人向「正後方」倒退,從而避開障礙物。
在直線倒退持續了一會後,左右兩邊的觸須都不再碰到障礙物,則兩個輪子都正轉又變成直線前進;然後又會遇到正前方的障礙物又會直線倒退,再直線前進……如此反復變成一個死循環。
三、電路原理
機器人頭部有兩根鋼絲作的觸須,觸須分別連接在兩個碰撞開關上(注意兩根鋼絲對應的碰撞開關是交叉的,即:「左—右」鋼絲,對應「右—左」碰撞開關)。
(1)沒有障礙物時,觸須沒有被擠壓,不觸發碰撞開關,碰撞開關默認的通路,給電機供給一個「正方向」的電流,電機於是「順時針方向」旋轉。
(2)有障礙物時,觸須被擠壓,觸發碰撞開關,碰撞開關斷開默認通路,連接另外的一組通路,給電機供一個「反方向」的電流,電機於是「逆時針方向」旋轉。
❼ 關於智能紅外避障循跡小車作品起個好聽到名字
我發給你吧 剛翻譯的.但是只有一篇誒,因為這個英文文獻確實很少.
❽ 我想做個pLC自動避障小車,請問需要什麼配件
PLC,電源,3-4個光纖感測器加放大器,如果小車是步進電機的話要配套驅動器