用Arduino驅動開源MOVEO大型機械手臂

作者:Felix Lin、Kevin Chiu

本文介紹如何用Arduino控制單顆及多顆步進馬達來操控開源MOVEO大型機器手臂。

在開始介紹手臂控制前,我們一定得先認識一下 MOVEO 手臂的動力來源「步進馬達」。由於傳統馬達,無法得知馬達轉動的位置狀況,因此無法應用在機械手臂上;步進馬達顧名思義,便是將傳統馬達改為一步步前進的馬達,每次動作只會轉動一點角度(通常為 1.8 度),但由於它本身沒有回饋訊號,所以如果過載(負載太大),就會造成步進馬達失步,也就是會與我們預期的位置不一樣,因此它並非最常用在機械手臂的馬達,會將它應用在 MOVEO 是由於它符合需求且價格實惠。

步進馬達內部構造(圖片來源:步進馬達維基百科

步進馬達驅動器

通常使用步進馬達都會搭配使用步進馬達驅動器(Driver),這麼做不只是因為懶得將兩相線圈交替輸出,以達到一步一步動作,而是大部分的驅動器都能將這一個步驟再細分為多個微步。以常見的 A4988 步進馬達驅動 IC 為例,就能將每 1 步再細分成 16 個微步,以達到更高的解析度,雖然加上驅動器不一定會更精準,但能使運作上更順暢;除此之外使用驅動器的優點還有很多,像是輸出電流、節省布線等。詳細請看下圖步進馬達驅動器運作原理。

步進馬達驅動器運作原理(圖片來源:hackaday

步進馬達驅動器 TB6560 的接線圖(圖片來源:ROBOKITS INDIA

在開始控制馬達前,要注意運作電流(Running Current),如下圖。依照筆者的實務經驗,可以將 Running Current 設定為一顆馬達額定電流的 80%為原則,以調整適當的電流。雖然電流越大可以讓馬達產生越大的扭力,但同時也容易造成馬達過熱,若不慎超過馬達額定,就可能會造成馬達不可逆的損傷。

Running Current Table(圖片來源:ROBOKITS INDIA

單顆步進馬達控制

不同馬達驅動器的控制方式不一定相同,但幾乎都大同小異,不過使用前建議還是要看一下使用手冊。以 MOVEO 手臂所建議使用的 TB6560 而言,每隻接腳的功能如下圖:

步進馬達驅動器接腳功能(圖片來源:ROBOKITS INDIA

看不懂英文也沒關係,可以直接試試程式。我們使用的主板是 Arduino Mega2560,首先必須先到 Arduino 官網下載新的 IDE(如下圖所示),點選你的電腦系統,它便會引導你安裝,以 Windows 來說,點選 Windows Installer 這個選項,即可下載安裝檔進行安裝。

Arduino IDE 下載(圖片來源:Arduino 官方網站

完成後開啟 Arduino IDE 出現如下圖的視窗就代表安裝成功了。

Arduino IDE 介面

Arduino IDE 安裝完成後,請選擇我們的開發版 Mega2560,輸入下圖的程式碼(單一馬達控制),點選上傳就可以看到 X 軸來回轉動了喔!(注意:在步進馬達激磁前,記得將手臂復歸到原點的位置,讓每一軸箭頭都對齊即可,手臂便會呈現直立一直線的狀態。)

單一馬達控制(圖片來源:ROBOKITS INDIA

了解運作的基礎後,我們來介紹一個專門拿來做步進馬達控制的程式庫,叫做 AccelStepper:library for Arduino,它整合了我們做馬達控制會用到的功能,像是加速度、定位、多顆同時控制等,如下圖程式(單一馬達 acc 控制),一樣讓 X 軸來回轉動。

單一馬達 acc 控制

多顆步進馬達控制

用 AccelStepper 來做多顆步進馬達控制,會很輕鬆,它有另一個程式庫叫 MultiStepper,是運用 AccelStepper 延伸拿來做多顆步進馬達控制的,直接輸入下圖程式試試看吧!

所需要的程式

Main.h中的設定組態參考

Main.cpp

RobotControl_acc.ino

輸入完程式打開監控視窗(右上角類似放大鏡的按鈕),會看到下圖介面(監控視窗),用串列傳輸的方式與微處理機做溝通,調整視窗下發輸入設定及通訊協定,與下圖設定一樣後,試著輸入"30 0 0 0 0"如下圖(輸入位置),就可以讓手臂X軸轉動至30度角,到達指定位置後會在出現"======MoveFinish====="的字樣如下圖(移動完成),告訴我們手臂已經到達指令位置,可以再輸入下一個位置以此類推來控制每一軸。

Arduino 序列埠監控視窗

輸入位置

移動完成

手臂控制

當然每次都要打數字來移動實在很麻煩,所以可以自行撰寫一個GUI的介面來幫助我們試機,以python來說,可以使用pyserial這個程式庫,來代替Arduino IDE的監控視窗與微處理機溝通的角色,設計出下圖的介面化程式,也可以拿國外類似程式來修改如圖(AsgardGUI)

筆者自行撰寫的測試用GUI

AsgardGUI(source: AngelLM)

就這樣調整到我們要的位置,自動執行就可以完成手臂控制了,眼尖的讀者可能會發現,為甚麼在做手臂控制都用角度來操作呢?除了比較直觀之外,也是為了方便座標的運算,在做比較複雜的控制時就會用到,相關控制原理如下圖。

控制原理(source:蕭俊祥

小結

進行這此就完成我們的手臂控制啦!Moveo官方也有自己的手臂控制的程式,位址在Github repo中的FIRMWARE資料夾。是由Marlin(經常用於3DP的韌體)做修改完成的,但還有許多參數需要適當的修改才能運用,如果不是很熟悉可能會要花更多的時間。

此外也有一些第三方韌體可以做選擇,如grbl-Mega-5X相對在設定上有簡單許多,或是對ROS有興趣的讀者也可以嘗試Moveo with ROS來做研究。希望大家可以一起享受到機械手臂的樂趣,並且玩出自己的心得!

作者介紹

Kevin Chiu

高雄科技大學學學生,喜歡動手做,擅長於工業控制、四軸飛行器與3D列印。曾獲得全國工科技藝競賽第二名、技藝優良市長獎等,目前研究標的為機械手臂。

Felix Lin

自造者社群創客閣樓召集人、亞堤教育創辦人。韌體工程師出身,熱衷於參與自造活動與專案,近期專注在物聯網與AI相關領域。

Lin Felix

Lin Felix

長期出沒在南部地區的Maker社群,致力於推廣從實作中學習的精神。熱愛胡搞瞎搞,喜歡嘗試新事物。現職為亞堤教育團隊講師與創客閣樓召集人。
Lin Felix

Author: Lin Felix

長期出沒在南部地區的Maker社群,致力於推廣從實作中學習的精神。熱愛胡搞瞎搞,喜歡嘗試新事物。現職為亞堤教育團隊講師與創客閣樓召集人。

Share This Post On
468 ad

Submit a Comment

你的電子郵件位址並不會被公開。 必要欄位標記為 *