[LattePanda] 從零開始教學,在LattePanda上使用Python與Arduino來控制meArm機械手臂

本文章將帶領讀者從基礎開始,到學會用在LattePanda上面使用Python跟內建的Arduino Leonardo來控制機械手臂,想學習Python圖控界面,與Arduino的Serial溝通,或者是機械手臂的介紹的朋友不妨來看看本篇教學文喔!

作者/攝影  袁佑緣
時間   3小時
成本   約1,850(不含LattePanda)
難度   * * * * *
材料表

1.Python的環境安裝

首先請到python的官網(https://www.python.org/downloads/windows/)下載最新版的安裝檔,在這邊要提醒一下python目前有兩種版本,一個是2.7x版,另一個3.x版,2.7x版python是比較舊的版本,同時官方也有發出聲明將不會在繼續更新了,而本篇的範例使用的是新版3.x的python,所以請讀者注意一下不要選錯囉。

以筆者為例,最新的Python版本是3.6.1,以及LattePanda是64bit版本的,所以點選Windowsx86-64-excutable installer,如下圖。

接下來請記得在安裝python的時候將下方”Add Python 3.6 to PATH”勾選起來,意思是要把python加入windows的環境變數內。

安裝完後,為了測試我們的電腦是否能正常呼叫python,請呼叫您電腦的終端機,windows的使用者請按下快捷鍵”win+R”便會在左下角顯示執行視窗,接著輸入”cmd”,這樣一來就會叫出windows的命令提示字元,如下圖。

命令提示字元(command prompt)

接下來請輸入”pip install matplotlib”,使用python的套件管理員pip來安裝matplotlib這個套件。

接下來請輸入”pip install pyserial”,使用python的套件管理員pip來安裝pyserial這個套件。

接下來為了要讓讀者方便開發python的程式,請到以下的網站(http://thonny.org/)下載並安裝Thonny這個python IDE。

2.Arduino 環境準備

請到官網下載最新板的Arduino IDE,下載網址請點這裡。以筆者為例,最新版本的Arduino IDE為8.2板,因為LattePanda上面運行的Windows10,所以請記得點選windows版的IDE來下載,另外為了不覆蓋到LattePanda系統原本舊版的Arduino,請點選”Windows ZIP file for non admin install”。

想直接下載的話請點選JUST DOWNLOAD,當然如果行有餘力的話也可以給予Arduino一些贊助喔!

最後解壓縮完成之後,點開Ardunio的資料夾執行IDE的程式即可。

另外,為了要控制LattePanda內建的Arduino Leonardo,必須將控制板選為Arduino Leonardo。

Arduino IDE在上傳程式碼的時候,需要選擇對應的port(連接埠)才能上傳到控制板上,如下圖,請選擇有Arduino Leonardo的COM port。

 

3.執行本專案的程式碼

請在Arduino IDE 上面完成以下的程式碼。

#include <Servo.h> // 引入Arduino控制伺服馬達的函式庫

Servo s[4]; // 建立一個長度為4的servo物件

// 宣告收到Serial的訊息與長度
int  data;
size_t data_size = sizeof(data_size);

void setup()
{
    Serial.begin(115200); // 將Serial的鮑率設定為115200
    
    // 將4個servo對應到以下4個Arduino腳位
    s[0].attach(7); 
    s[1].attach(8);
    s[2].attach(9);
    s[3].attach(10);
}


void loop()
{
    // 如果從Python圖控界面收到的資訊是s開頭,則檢視下一個字元
    // 是指定哪一個伺服馬達(0~3號)
    // 最後再接收一4個bytes的整數,作為馬達要轉到的角度(0~180度)
    if(Serial.available())
        if(Serial.read() == 's')
        {
            int servo_number = Serial.read() - '0';
            if(servo_number < 4 && servo_number >= 0)
            {
                Serial.print("Servo number: ");
                Serial.println(servo_number);

                while(Serial.available() < data_size);
                Serial.readBytes((char*)&data, data_size);
                Serial.println(data);
                s[servo_number].write(data);
            }
        }
}

上傳Arduino程式碼

請先確認您的Arduino IDE是否有按照2. Arduino環境設定,將Arduino Leonardo的板子與連接埠都選擇正確,並按下快捷鍵<Ctrl+U>或者是如下圖點選上傳的箭頭來上傳程式碼。

打開Thonny,完成以下的Python程式碼。

# matplotlib是用來顯示GUI的函式庫
# serial則是用來跟Arduino溝通的函式庫
# struct跟pack則是在Serial傳輸資料時,打包資訊會用到的工具
from matplotlib.widgets import Slider 
import matplotlib.pyplot as plt
import serial
from struct import pack

# 在連接埠COM8建立一個鮑率為115200的Serial
# 這裡要提醒讀者,記得要把COM8改成您LattePanda上的COM port
ser = serial.Serial('COM8', 115200, timeout=0)

# 定義一個函式,將會根據i(馬達/拉桿編號),回傳指定的函式
def send_ith(i):
    def send(val): # 定義一個函式,用來送出控制馬達角度的訊號
        data_header = bytes('s' + str(i), 'UTF8')
        data = int(val)
        ser.write(pack('<2si', data_header, data))
    return send


# 初始化伺服馬達控制拉桿的圖形化界面以及其對應的函式
a = []
s = []
for i in range(4):
    a.append(plt.axes([0.2, 0.2*(4 - i), 0.6, 0.07]))
    s.append(Slider(a[i], 'Servo' + str(i+1) + ' ', 0, 180, valfmt = '%d', valinit = 90))
    s[i].on_changed(send_ith(i))

plt.show()

執行Python程式

請在Thonny IDE上,按下快捷鍵<F5>或者是點選下圖中的播放鍵來執行Python

如果在執行Python時遇到如下的錯誤,那有可能是您的COM port沒有設定正確,請回去看一下2. Arduino 環境設定那一步中的COM port,並把正確的port輸入上面Python程式碼中。

成功執行後,就可以看到一個簡單的Python互動界面,讀者可以透過上面的拉桿來操控四個伺服馬達各別的角度。

4.接上機械手臂,來動手玩玩看吧

完成上述的步驟後,我們就可以來執行最後的實做部份了,本次範例所使用的機械手臂是有名的開源機械手臂meArm,上面有4個伺服馬達,一共有四個自由度,然後因為特殊的平行連桿機構,最尾端的夾爪會一直保持水平,方便機器夾取物件,加上使用壓克力平板與螺絲螺帽就能輕易組裝,是一個相當好入門的教育套件,接下來我們就來看一下要如何完成電路的連接吧。

LattePanda與機械手臂的接線如下圖,由於本範例所使用的Arduino腳位是7, 8, 9, 10,所以請按照官方給的腳位圖接上去(紅圈的部份)。

特別注意,為了保護馬達與電路系統,電源的部份請最後再接上去。

電路接線圖

LattePanda腳位圖

 

完成圖

上視圖

 

相關文章:

 

Leave a comment

Your email address will not be published.


*