【小小工程師-程式體驗營】電控車S4A- 紅外線自走車

之前我們已經學會了控制車子的「移動」,

如何讓輪子前進、後退、左轉、右轉。

這篇要教大家如何使用 頭部紅外線 功能,

用S4A做出自走車!

讓車子可以自行判斷距離,

而不會撞到牆喔!

 

趕快看下去吧!

 

(贊助商連結)

 

首先我們來看一下完整的程式要怎麼寫, 

大家可以先挑戰做做看,

或者後面看我們一步步的解說~

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

功能分析

首先來分析一下我們希望的功能:

1. 車子會不斷直走,直到碰到前方障礙。

2. 碰到障礙時,會停下來

3. 停下後,會左右擺頭,判斷距離

4. 判斷完距離後,先後退

5. 若左邊距離比較長,我們就往左轉

6. 若右邊距離比較長,我們就往右轉

7. 重複1-6的動作。

 

根據上面的功能,現在來設計程式。

 

認識車子部位

首先來認識一下所需要用到的【馬達】【感應器】

輪胎連接的 兩顆馬達 ,分別對應到motor4(左輪) motor7(右輪)

為什麼是4號跟7號呢?

是因為左、右輪胎的接線是接到這兩個位置,

若線接不同位置腳位,控制的馬達也會改變喔!

這些之後都會介紹,這邊先略過。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

控制頭部的是motor8(前方藍色馬達)

最後紅外線感應器,對應到的是Analog3 (類比訊號)

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

連線後,若機器人離障礙物越近

Analog3顯示的數字就越大

若離障礙物越遠

Analog3顯示的數字就越小

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

正式開始前我們再做兩件事情

 

1. 頭部位置校正

拉出【motor 8 angle 180】積木:

把angle設為90度。

90度理論上是像著正前方,

若頭歪掉了,請手動幫它轉向正前方。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

接下來也可以試試下面的積木指令:

【motor 8 angle 0】

【motor 8 angle 180】

 

下面是頭部角度示意圖,

大家可以試試看,

機器人的頭會左、右轉喔!

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

2. 讓機器人停下來

再來,我們來作「一鍵停止全部動作」的功能按鍵。

 

拉出【當按下空白鍵】

接上【motor4 off】【motor7 off】【motor8 angle 90】

接上【全部停止】

 

現在無論發生甚麼事,只要按下空白鍵,

就能暫停全部的馬達囉!

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

機器人自走車實作

步驟一、

功能說明:

先點一下綠旗觸發程式

接下來把機器人的頭擺正

最後進入到主程式,不斷地跑我們寫的程式。

 

動手做:

拉出【當綠旗被點一下】

接上【motor 8 angle 90】

接上【重複執行】

 

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟二、

功能說明:

如果 前方出現障礙物,

就停下來做「左右距離」判斷

然後再決定左、右轉。

如果前方沒有障礙物,

就讓機器人一直往前走。

 

我們用Analog3傳回的數值來偵測前方障礙物的距離。

Analog3的數值越大,代表與障礙物的距離越近。

若Analog3的數值大於275,

則停下來做距離判斷。

 

這邊的275參數可以自己調整,

若希望機器人遠一點就作距離判斷,

那就把數值調小,可改成250、225等。

若希望近一點再停下作判斷,

可以把數值調大,如300、325等。

 

動手做:

拉出【如果...否則...】

在【如果】條件內

插入【【value of sensor Analog3】>275】

在【否則】內

插入【motor 4 direction anticlockwise】

接上【motor 7 direction clockwise】

 

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟三、

功能說明:

步驟二的程式嵌入到【重覆執行】中,

讓機器人不斷確認前方距離,

若遇到障礙(Analog3>275)則做距離判斷,

若前方還有空間,則繼續直走。

 

動手做:

把【如果...否則】插入到【重複執行】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟四、

功能說明:

若距離過近(Analog3>275),

先讓車子停下來作距離判斷。

 

動手做:

拉出【motor 4 off】

接上【motor 7 off】

motor4 跟 motor7順序可以相反沒關係。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟五、

功能說明:

嵌入步驟四的程式碼。

讓機器人一旦碰到障礙物,

就先停止動作。

 

動手做:

【如果 【【value of sensor Analog3】>275】】裡面。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟六、

功能說明:

接下來,我們要設計兩個變數,

【Left】跟【Right】。

這兩個變數是用來儲存左邊跟右邊的距離,

 

為什麼需要知道左、右邊的距離呢?

想像自己是一台機器人,

當我們往右看的時候,我們需要一個變數,

讓我們記住右邊看到的距離。

之後往左看,我們需要另外一個變數,

幫助我們記住左邊的距離。

如此,我們就知道兩邊的距離長短,

於是就可以作出左、右轉的決定。

 

所以我們先讓機器人的頭往右轉,

並讓把紅外線的距離數值存到【Right】當中

然後讓機器人的頭往左轉,

把左邊的數值也存入【Left】當中

如此一來,機器人就知道左右邊的距離遠近了!

 

動手做:

左上角點選【變數】

滑鼠點選【產生一個變數】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

動手做:

輸入變數名稱,取名【Left】,

然後選擇【適用所有角色】。

最後按【確定】。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

動手做:

重複上述步驟,

左上角點選【變數】

滑鼠點選【產生一個變數】

輸入變數名稱,取名【Right】,

然後選擇【適用所有角色】。

最後按【確定】。

 

完成後,畫面會跟下面一樣。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

動手做:

拉出【將變數 Left的值設為0】

拉出【value of sensor Analog3】

把【value of sensor Analog3】插入到

【將變數 Left的值設為0】當中

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

動手做:

【Left】變數設定完後,換【Right】。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟七、

功能說明:

接下來,要讓機器人頭往右前方偏,

等待一秒後,

把紅外線偵測到的值儲存進變數【Right】當中。

 

動手做:

拉出【motor 8 angle 180】

把angle180改成45

接上【等待1秒】

接上【將變數Right的值設為【value of senosr Analog3】】

接上【等待1秒】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟八、

功能說明:

接下來,要讓機器人頭往左前方偏,

等待一秒後,

把紅外線偵測到的值儲存進變數【Left】當中。

 

動手做:

拉出【motor 8 angle 180】

把angle180改成135

接上【等待1秒】

接上【將變數Left的值設為【value of senosr Analog3】】

接上【等待1秒】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟九、

功能說明:

把上面的積木合併,

讓機器人先頭往右轉、存入距離數值後,

再往左轉、存入數值。

最後,讓頭朝前。

 

動手做:

拉出【motor 8 angle 180】

把180改成90

連接上面的積木如下圖

最後再接上【motor 8 angle 90】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十、

功能說明:

嵌入上面程式碼,

完成後,機器人就會不斷向前,

若遇到障礙物,會停下來偵測左右距離,

並把偵測到的距離存入到變數【Left】跟【Right】當中。

 

動手做:

嵌入上述程式碼如圖。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十一、

功能說明:

我們現在已經知道左、右邊的距離了,

現在要讓機器人判斷完距離後,左轉或右轉。

這裡要加入一個條件判斷

若【Right】變數大於【Left】,

代表右邊空間小、左邊空間大,

所以先後退,再轉。

否則,代表【Right】小於或等於【Left】,

代表左邊空間小、右邊空間大,

所以先後退,再轉。

 

動手做:

拉出【如果...否則】

插入【【Right】>【Left】】

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十二、

功能說明:

若判斷完,【Right】>【Left】後,

這邊我們希望車子先後退、再左轉,

所以先讓左輪(motor4)順時針轉、

右輪(motor7)逆時針轉。

然後再同時順時針轉,

 

動手做:

拉出【motor4 direction clockwise】

接上【motor7 direction anticlockwise】

接上【等待1秒】

把1秒,改成0.5秒

 

拉出【motor4 direction clockwise】

接上【motor7 direction clockwise】

接上【等待1秒】

把1秒,改成0.4秒

 

連結兩個積木程式。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十三、

功能說明:

判斷完左、右邊的空間距離後,

若【Right】變數沒有大於【Left】變數,

則代表右邊空間比較大(或者相等),

所以我們就寫程式讓車子先後退、再右轉。

 

動手做:

拉出【motor4 direction clockwise】

接上【motor7 direction anticlockwise】

接上【等待1秒】

把1秒,改成0.5秒

 

拉出【motor4 direction anticlockwise】

接上【motor7 direction anticlockwise】

接上【等待1秒】

把1秒,改成0.4秒

 

連結兩個積木程式。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十四、

功能說明:

把左、右轉的積木程式嵌入到判斷式當中。

 

動手做:

左轉程式碼嵌入到 【如果【【Right】>【Left】】】區塊。

右轉程式碼嵌入到【否則】區塊。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十五、

功能說明:

S4A因為圖形化而讓使用者更容易上手,

但也因為這樣,所以相當耗電腦CPU資源,

簡單來說,有時候會當機。

為了避免發生這樣的情況,

讓機器人左、右轉完後,

停一下再前進,

就能降低當機的機率。

 

動手做:

拉出【motor4 off】

接上【motor7 off】

接上【等待0.3秒】

把以上積木接在條件式下面,如下圖。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

步驟十六、

功能說明:

完成我們的機器自走車,

 

動手做:

嵌入上圖程式碼至下圖位置。

 

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

終於完成了,

趕快來看看實際走起來的狀況如何吧!

 

 

是不是很有趣呢?

上面的程式不是唯一的寫法,

很多參數都可以調整,可以試著改改看,

看看有甚麼不一樣的效果喔!

趕快來試試看吧!

 

兒童程式系列課程介紹

【小小工程師-程式體驗營】電控車S4A-  紅外線自走車

 

本文 轉載自 CMoney 網站,原文 於此

喜歡我們的 文章嗎 ?

歡迎關注我們的粉絲團唷→ 親子Fun程式

 

 

 

若無法配合附上以上資訊,請勿轉載文章。​謝謝~

(本文為CMaker專欄作者編寫 ,  歡迎轉載,請同時附上CMoney本站完整名稱與網址。)

 

好文章 分享給好朋友吧~