2016年12月1日 星期四

Arduino Otto 跳舞機器人 ( Otto Dancing Robot )

Otto為可用Android手機中的Zowi App來控制動作的3D列印機器人,筆者手上的一台是由雲林自造教育中心提供的。本文將分享一些研究此程式碼的心得與如何測試Otto

建議DIY步驟如下:
0. Otto 3D 列印
Otto 3D模型檔案網址:http://www.thingiverse.com/thing:1568652

1. 設定藍牙模組
藍芽的名稱為Zowi開頭,例如ZowiOne;Baudrate115200;配對密碼1234。指令部分,HC-05請參考[1],HC-06請參考[2]

此外,HC-06也可用Arduino Nano搭配下面程式來做自動設定的動作。
https://github.com/G4lile0/Bobwi/blob/master/code/v2/arduino/code/hc06_bt_config/hc06_bt_config.ino
記得更新Arduino Nano板子程式後,才接上HC-06。

HC-06與Arduino Nano接線方式如下:
HC-06 GND --> Nano GND Pin
HC-06 VCC (5V) ---> Nano 5V
HC-06 TX --> Nano RX
HC-06 RX --> Nano TX

2. SG90伺服馬達校正
方法一(用Otto內建的程式指令,建議用此方法):
使用筆者的程式來校正Servo Motor SG90,下載處在此:https://goo.gl/JKp72E解壓縮後將Otto所用到的 libraries

複製到 Arduino IDE 下的 libraries

接著開啟OTTO_ServoHome.ino 檔案

選擇Arduino Nano板

燒錄完後,斷電,再將將四組伺服馬達接上NANO感測器擴充板上的2, 3, 4, 5數位腳位,接好腳位後上電,此時四組伺服馬達會自動移到Otto機器人立正時的角度。


方法二(用Zowi的程式指令):
使用https://github.com/G4lile0/Bobwi/blob/master/code/v1/arduino/v1/calibration/calibration.ino程式來校正Servo Motor SG90,請將四組伺服馬達接上NANO感測器擴充板上的6, 3, 4, 5數位腳位做校正。

補充:因為calibration.ino程式有用到Zowi的函式庫,若有遇到無法編譯calibration.ino時,請至https://github.com/G4lile0/Bobwi下載專案壓縮檔,先按下右方的Clone or download,在按下 Download ZIP

再將解壓縮後的Zowi資料夾

放到Arduino IDE 的libraries資料夾內

重新編譯即可。

3. 組裝(先不接上藍牙模組)
組裝手冊:OTTO_InstructionManual_V04
(下圖取自OTTO_InstructionManual_V04)
上圖中的紅色矩形是藍牙模組接線的位置。

注意:在燒錄程式時,藍牙模組不能接上板子,建議測試完程式功能後在接上藍牙模組。
藍牙模組接線:
HC-05 GND --> Nano GND Pin
HC-05 VCC (5V) ---> Nano 5V
HC-05 TX --> Nano RX
HC-05 RX --> Nano TX

4. 燒錄Otto Arduino Nano程式
Otto的Arduino Source Code網址:https://github.com/OttoDIY/OttoDIY
不過本文所用的程式碼為筆者修改過的,下載處在此:https://goo.gl/JKp72E解壓縮後將Otto所用到的 libraries

複製到 Arduino IDE 下的 libraries

接著開啟 OTTO_BT.ino 檔案

選擇Arduino Nano板

燒錄好之後,可先用序列埠監控視窗測試指令,記得要選 CR(Carriage return),115200的baudrate。最好接上外接電源到板子上來避免USB供電不足


控制前後左右的指令如下:
前進 ==> M 1
後退 ==> M 2
向左 ==> M 3
向右 ==> M 4

M 與數字之間有一個空白鍵
蜂鳴器指令(Tone)為 T 頻率 毫秒時間
例如:
T 323 500
T 232 1000

以上的指令是Trace Code而來的,Otto所用到的函示庫是由https://github.com/scogswell/ArduinoSerialCommand修改而來的。在程式碼中可看到如下片段程式碼:

例如在序列埠監控視窗輸入B這個字母,從電腦傳送到Arduino Nano時,Nano會執行requestBattery函式(Function),內容如下:

接著看一下移動相關的指令 SCmd.addCommand("M", receiveMovement);
 
對照 receiveMovement 函式內容,筆者得到控制前後左右的指令如下:
前進 ==> M 1
後退 ==> M 2
向左 ==> M 3
向右 ==> M 4

M 與數字之間有一個空白鍵

在此步驟可用電腦正常控制的話,恭喜你可接上藍牙模組,開始使用Zowi App來控制Otto Robot。

5. 使用Zowi App控制
Zowi App下載:https://play.google.com/store/apps/details?id=com.bq.zowi&hl=zh_TW
此程式已內建自動配對與尋找Zowi Robot的功能(尋找藍芽名稱以Zowi開頭的裝置),

影片:
設定Otto一連串動作後,Action!


控制前後左右等動作。


記憶遊戲:請記下Otto的動作,並依序回答。

參考資料:
[1] http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/
[2] http://www.instructables.com/id/Tutorial-Using-HC06-Bluetooth-to-Serial-Wireless-U/
[3] http://www.instructables.com/id/Otto-Build-You-Own-Robot-in-Two-Hours/