您有看到自走車前面,有著像瓦力的眼睛的零件嗎?那個叫作超音波測距模組,它是利用發射超音波後到接收到超音波後,其間的時間差,透過聲波的傳遞速度公式為331.5m+0.60714t先求出音速,再利用距離=時間×速度,求出距離。
例如:
所以如果當氣溫為20℃時,請問超音波的速度=
如果當超音波自發射到接收,一共只花費了0.01秒。
請問超音波測距模組到障礙物的距離為多少
不過呢?在Arduino中,想利用超音波測距模組不必這麼麻煩,只需要使用右邊的方塊,就可以直接得到障礙物和超音波測距模組之間的距離,超音波測距模組其中的Trigger是指觸發控制端,Echo是指接收端。就分別鍵入所連接到Arduino的pin即可。
現在我們要透過Arduino的序列埠視窗,讀出超音波測距模組所測得的距離。
不過咧?您會發現這個程式積木並無法和廻圏連接,所以要透過其它積木來使用。
請試著鍵入下列積木,這個是要將超音波感測器所測得的距離,透過序列埠監控視窗來呈現。
現在,您的自走車就可以當作測距儀器來使用了喔!
所以我們要讓自走車能夠把超音波測距模組所測到的障礙物的距離作判斷,我們就借由「set number variable」這個積木,來設定數字變數,取名為 distance,要作為條件判斷使用:
接下來就要告訴您,if(條件) then(動作)這類的結構 -如果符合(條件)就執行(動作):
我們如何要接著進行避障的工作,當自走車在前進時,遇到前方十公分有障礙物時,就會進行閃避的動作。
1.我們在程式一開始,在setup(設定/僅執行一次)這個區塊,就給小車設定為前行。
2.接下來在loop(廻圏/不斷重覆)
但在這程式,您會發現一旦車子停止了,就沒法再動作了。因為小車的前進指令是放在setup區塊內,只能執行一次而已。
所以,我們要改用下列這種if(條件) then(動作1) else(動作2)這類的結構,如果符合(條件)就執行(動作1),否則執行(動作2) ,
會更具彈性。
不過,如同下圖程式流程結構:選擇結構是另一種常見的程式控制流程,以條件滿足與否,選擇接下來要執行的程式區塊。
應用選擇結構的程式碼,寫法可以分為二類,分別為if/elsei或者if,應用如
每次車子一開始就動作,有點困擾,所以我們可以超音波來作一個動作?
不過在告訴您這個方式時,先要告訴你一個程式上,常用的一種程式流程。那就是重複結構也就是所謂的廻圈(Loop),廻圈是常見的程式控制流程,依下列流程圖來看,其流程為如果符合條件時,即執行某些程式區段,當執行完後,會再作一次條件檢核,如果符合的話即重複執行,如果不符合即結束執行。
這個程式的工作原理為:
利用超音波測距來作為while條件式,當測距大於5cm時,程式只會一直在這個廻圏內一直作測距的動作而已,一直到用手擋一下超音波測距模組,while條件式不成立時,程式才會跳出這個的測距程式區塊。
所以當要我們決定不要讓小車動作時?該怎麼呢??那就是按下板子上的RESET鍵,讓程式又跳回到set的程式區塊。小車就不會有動作了。