課程目錄
剛進入ArduBlock時 ,會出現廻圈的選項 ,請先移除(放回積木箱)
再點選如下圖的積木,其表示的意義如下:
設定:機器的起始狀態的設定,僅執行一次。
loop:重覆執行的程式,會由上而下地不斷的執行。
因為在車子起動時 ,可能會有突波的產生,造成舵機不正常的擺動,所以,最好在車子起動時,就置一個固定角度。
舵機的腳位#設定在D10。
其角度設定在為10~170就好,因為如果設定在0或180 時,可能會成舵機不正常擺動。請注意。
超音波感測器結合serial println指令的應用
注意超音波感測器的腳位要改成
trigger#D2-->A2
echo#D3-->A3
要注意一下,ArduBlock的超音波指令中 ,有一個小錯誤。它在偵測物超過200CM時,會讀到"0".
所以,當讀到"0"時,是表示200CM內無障礙物的意思。
接下來就可以利用serial println來確認超音波感測器是否能正常工作。
點選serial monitor就可以看到所測得超音波和障礙物的距離.
點選Adafruit的選項,一共有三個DC motor的指令,分別為FORWARD(前進)/BACKWARD(後退)/RELEASE(停止)
其中電機頻道:有1~4四個選項,1代表左輪,2代表右輪。
motor speed表示所輸入的動力值,由大到小的動力輸出為255~0,但是RELEASE(停止)時,其motor speed,就沒有用處了。
確定AFmotor.h是否有安裝至Arduino的libraries中,否則會造成如下圖的編譯的錯誤。
因為左右兩輪的馬達動力輸出特性不同,所以當車子在移動時。會發現兩輪會發生速差,所以沒法走直線,所以需透過調整motor speed的大小,來讓二輪的速度儘量一致。
例如:當車子行進時,會往右邊行進,所以可以透過調整(減少)左輪的motor speed。
讓車子往前走1秒 ,隨即停止,從此不動移動。
1.加入delay指令,請注意毫秒(1/1000秒)和微秒(1/1000000秒)的差異
2.請思考放在setup和loop的差異。放在loop中的作法,是不可能達成這個要求的。
讓車子右轉90度
結合motor speed及delay指令不同 ,作出讓車子可以轉90度的動作。
轉法一(以右輪為中心點的轉法):讓右輪停止,左輪前進的轉法。透過delay MILLS時間的長短 ,改變轉彎的角度。
轉法二(以車子為中心點的轉法):左輪前進,右輪後退的轉法。透過delay MILLS時間的長短 ,改變轉彎的角度。
試著比較兩種轉法的差異。
條件判斷的應用:
在條件式中加入變數來作為判斷的依據。
要注意變數及常數的差別。
變數:會變動。顏色較深。
常數:恆定不變,顏色較淺。
所以接下來請把程式完成。
利用超音波感測器來作為車子啓動的開關
do/while這個指令用法是
因為車子走前線會受到馬達特性及輪子磨擦的不同成問題,所以要使用所以回授控制的概念來讓車子來走直線。
如下圖:
一,先將舵機轉向右側,因為各個舵機的特性不同,所以可能加減個幾度,需依個人情況修正。
二,第二個指令,將測得的距離設定為變數distance。
三,使用IF/ELSE指令
四,由條件式中判斷變數distance的大小.
如果符合條件式的話,就執行右轉(右輪減速)
如果不符合條件式的話,就執行左轉(左輪減速)
以此模式,車子就會在距右側牆壁約15CM 處,不斷地靠近及遠離,形成Z字形(搖屁股)的行進方式。
如何讓超音波感測器向右側時,車子前進時,知道什麼時轉頭。
因為t(時間)=s(距離)/v(速度)
在車子起步時,先讓車轉頭看正前方。由超音波感測器取得牆壁的距離。
再自行測試車子的速度。因為電腦教室的地板是60公分見方,所以可讓自走車行走二格地板,取得所需時間後,再求出車子的行走速度。
以下的例子以1.5(cm/msec)的為例子,不同的車子或motor speed,同學需自行計算取得。
由上面二個步驟就可以求出車子的撞牆時間。
do/while這個指令用法是(t_now中的"_"是下底線喔,不可以使用減號喔。)
為提高程式易讀性,可以使用副程式(副函式)的寫法,如下圖:
點選副函式及對映之後,可以修改其名稱(需為英文單字喔)。
當自走車在走迷宮時,為觀察所測得的感測器數值是否正確,可以利用藍芽模組傳回數值,確認是否則正確。
請先下載安裝Bluetooth Graphics APP.
如果要手機APP能夠接收,softwareSerial.print時,在字串前面多一個E字,然後每個數值之間用,相連,最後要斷行.
開啓APP
選擇要連接的藍芽模組(要先配對喔)
可以由終端機模式看到所傳遞的值