冬營營招生中

2019年7月21日 星期日

[micro:bit x NexusBot] 遙控NexusBot小車:基本款與轉速可調版




若把NexusBot機器人的手臂部分伺服馬達換成兩個DC馬達,並裝上兩個輪子,就成了可愛的二輪小車。本篇便來介紹兩種NexusBot小車的遙控版本(使用另一片Nexus:bit當作遙控器)。



基本款


基本款相當簡單,就是前進、後退、左右轉而已。遙控器傳送的廣播訊號及其意義如下:


  • 1 → 前進
  • 2 → 後退
  • 3 → 左轉
  • 4 → 右轉
  • 0 → 停車


而在Nexus:bit/NexusBot擴展套件積木內,已有控制車子上述動作的功能。

因此遙控器的程式碼如下:









車子程式則如下:









積木中的速度欄位代表車子馬達轉速,範圍0~100,100是最快。但為了避免車子暴衝,所以這裡用預設的50。(當然,若動作設為「停車」,那麼速度設多少都沒有差別。)








雙輪可調速版


使用NexusBot內建積木的缺點,就是車速是事先訂好的。如果想要恣意調整兩邊輪子的轉速,要怎麼做呢?

為了簡化操控,我們改成用遙控器micro:bit本身的A/B鍵來獨立控制兩邊的輪子,而轉速與方向就由micro:bit的俯仰角決定。

來看遙控器的程式:









可以看到馬達(右輪與左輪)的轉速,是由「旋轉感測值─pitch」(micro:bit Y軸的轉動角度)決定。旋轉感測值的範圍是-180~179,所以我們直接把它限制在-100~100,剛好就是馬達的轉速範圍。接著程式會根據使用者是否按下A和/或B鈕,把轉速資料傳給車子。如果沒有按鈕,傳送的轉速就是0,使馬達不會轉動。

不過,這也意味著按住某邊鈕時停車(車速為0)的位置是micro:bit正面水平朝上的位置,但micro:bit可是垂直插在Nexus:bit上的(約-90度位置)!所以「旋轉感測值─pitch」得先減去45或90度,這樣對使用者手持時比較合理。

計算轉速那行的結尾也把值乘上-1,也就是把-100與100之類的值顛倒過來。因為micro:bit往前轉時pitch是負值,往後轉是正值,但馬達往前轉才是正值,反之往後轉是負值。所以若沒這麼做,車輪轉動的方向就會跟micro:bit轉的方向相反了。

這次廣播是以一個字串加一個數字的組合來傳送的,name代表馬達方向(R = 右,L = 左),value則是轉速。



下面是車子的程式:









相較於基本款,進階款的車子程式反而更短。因為它只要直接把收到的轉速資料傳給馬達就行了。

來動手玩玩看吧!







沒有留言:

張貼留言