單晶片魔法車07-紅外線循跡車
上一個實驗,我們終於讓魔法車左右輪可以獨立控制,擁有左右轉向的能力。但是光用聲音來控制魔法車,仍然需要我們操控,無法獨立運作 。所以,接下來的實驗我們要讓魔法車更上一層樓囉!我們要給魔法車自行判斷環境的能力囉!https://www.youtube.com/watch?v=6AItagCimo8
實驗七:紅外線循跡車
實驗內容:我們要讓魔法車依循地面黑色軌道前進。
使用材料:實驗六的材料,紅外線發射、接收器*2組,4069反相器*1
電阻:6.2MΩ+150Ω各2個。
電路照片:
接上紅外線模組前:我們用反相器把紅外線的信號的訊號數位化
接上紅外線模組後
超酷的魔法車-右側
超酷的魔法車-左側
程式分析:
/*實驗七:紅外線循跡車*/
#include <AT89x051.h>
void delay(unsigned int tmp); //宣告延時函數
void Go_F();
void Go_B();
void Go_R();
void Go_L();
void main(void) //主程式開始
{
P3_2=1; //啟始左側紅外線輸入功能
P3_3=1; //啟始右側紅外線輸入功能
while(1){
while(P3_3==1 && P3_2==1){ //當車體在軌道中時
Go_F(); //前進
}
while(P3_3==0){ //當右側紅外線偵測到黑線時
Go_R(); //左轉...直到回到軌道中
}
while(P3_2==0){ //當左側紅外線偵測到黑線時
Go_L(); //右轉...直到回到軌道中
}
}
}
/* 副程式區 */
void Go_F()
{
P1_2=0;
P1_3=0;
delay(50);
}
void Go_B()
{
P1_2=1;
P1_3=1;
delay(500);
}
void Go_R()
{
P1_2=0;
P1_3=1;
delay(50);
}
void Go_L()
{
P1_2=1;
P1_3=0;
delay(50);
}
void delay(unsigned int tmp) //延時函數
{ //改變參數大小,可調整時間
unsigned char i,j; //宣告使用到的變數
i=tmp; //把呼叫程式式中的參數100指定給變數i
while(i) //只要i不為0,
{ //就執行{...}中的指令
i--; //把i值減1
j=255; // <-+
while(j) // |
{ // 用j值讓程式執行256次的迴圈,到延時效果
j--; // |
} // <-+
}
}
是不是超級簡單!來編譯好的程式在這裏囉!
gensly123 發表於 2012-9-2 02:20 static/image/common/back.gif
我發現影片中的魔法車,紅外線並非在車頭魔鬼粘位置,好像是車身左右兩測,或車底 ...
沒錯!你的觀察力很好。我這麼做是因為魔法車車身長但左右輪距短,感測器如果離轉向軸心太遠,當遇到小彎道就容易讓後輪走到黑線之外,你可以試試看哦! 我發現影片中的魔法車,紅外線並非在車頭魔鬼粘位置,好像是車身左右兩測,或車底 想請問一下,此一紅外線感測距離地面應該多少?? gensly123 發表於 2012-7-31 16:02 static/image/common/back.gif
想請問一下,此一紅外線感測距離地面應該多少??
要看地面材質對紅外線的反射率,再去調整感測器最佳的高度。所以我們用魔鬼粘,讓學生依不同的地板,來調整感測器的位置。 好期待能做出來。 本帖最後由 ssktowtw 於 2014-4-5 17:32 編輯
老師~可不可以po出接線圖~我也要來做一個
另外接上紅外線模組那張圖怎麼把它變成可以插上麵包板的樣子
頁:
[1]