要用黑膠帶制作一幅迷宮地圖,如圖10-3所示。在迷宮的出口處 用一個障礙物當作“寶藏”。然后,我們機器人的任務就是順利通過迷宮并且停在“寶藏” 前面。這里先來處理一個簡化的問題,假設迷宮的地圖是已知的,也就是說,機器人知道應該向什么方向,轉幾次彎才能走出迷宮。
實 驗 器 材
· 已經組裝好的機器人;
· 計算機及軟件編程環境;
·USB 下載線;
· 主控制器;
· 地面灰度檢測傳感器模塊4塊;
· 紅外避障傳感器1個;
· 黑色膠帶1卷;
· 作為寶箱的淺色立方體1個。
實驗步驟
1.連接機器人
先將機器人、擴展板和地面灰度檢測傳感器模塊連接好。其中,地面灰度檢測傳感 器連接到A0~A3 端口。紅外避障傳感器連接到D3 端口。
2.調試灰度閾值
同樣,像以前一樣通過實驗確定機器人所采用的灰度閾值。因為4個傳感器的電路 和安裝上可能會出現微小的差別,所以這里比較穩妥的處理方式是不要嫌麻煩,為它們每 個都測量一個灰度閾值。
3.編寫程序
假設在已知的地圖中,機器人只要在碰到路口時先進行兩次左轉彎,再進行一次右轉 彎,就能走出迷宮了。用我們剛剛學習過的函數知識,這個程序可以寫成下面示例中的樣 子。同樣,這個示例中與上節課示例程序有很多重合的地方,用省略號將之略去。
函數如何封裝的問題,是沒有一個固定答案的,示例程序中給出的可能也不是Z好的解決方案。總之,良好的函數封裝可以讓你的程序變得更簡潔、更可讀以及更容易維護和 修改,同學們在慢慢積累編程經驗的過程中就會摸索出如何封裝函數的竅門了。
const int InfraPort=3;
int counter=0;
//函數聲明
void turn_left();
void turn_right();
void stop();
void go_straight();
void setup(){
pinMode(InfraPort,INPUT);
} void loop(){
if(digitalRead(InfraPort)==HIGH){ stop();
while(1);
//避障傳感器連接D3 端口
//用于計數通過路口數目的變量
//找到寶藏,停下來
}
if(leftValue
}else if(leftValue>Threshold II rightValue>Threshold){ //遇到路口
if(counter<2){
turn_left();
}else if(counter==2){
turn_right(); }else{
stop();
while(1); }
counter++;
)else if(leftMiddleValue>Threshold){
analogWrite(LeftSpeedPort,TurnHighSpeed);
analogWrite(RightSpeedPort,TurnLowSpeed); )elsef
analogWrite(LeftSpeedPort,TurnLowSpeed);
analogWrite(RightSpeedPort,TurnHighSpeed); }
delay(100);
//前兩次遇到路口左轉
//第3次遇到路口右轉
//再遇到路口就停止,有可能地圖出錯了
//向右轉彎
//向左轉彎
//左轉90°的函數實現
void turn_left(){
digitalWrite(LeftDirPort,LOW);
analogWrite(LeftSpeedPort,Forwardspeed);
analogWrite(RightspeedPort,ForwardSpeed);
delay(DelayTime);
digitalWrite(LeftDirPort,HIGH);
}
//右轉90°的函數實現
void turn_right(){
digitalWrite(RightDirPort,LOW);
analogWrite(RightSpeedPort,ForwardSpeed);
analogWrite(LeftSpeedPort,Forwardspeed);
delay(DelayTime);
digitalWrite(RightDirPort,HIGH); }
//直行函數
void go_straight(){
analogWrite(LeftSpeedPort,ForwardSpeed);
analogWrite(RightSpeedPort,ForwardSpeed); }
//停止函數
void stop(){
analogWrite(LeftSpeedPort,0);
analogWrite(RightSpeedPort,0);
![]() |
| 機器人底盤 Disinfection Robot 消毒機器人 講解機器人 迎賓機器人 移動機器人底盤 商用機器人 智能垃圾站 智能服務機器人 大屏機器人 霧化消毒機器人 展廳機器人 服務機器人底盤 具身智能教育機器人 智能配送機器人 導覽機器人 |