Quantcast
Viewing all articles
Browse latest Browse all 682

[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目前有兩種版本,一個是7x版,另一個3.x版,2.7x版python是比較舊的版本,同時官方也有發出聲明將不會在繼續更新了,而本篇的範例使用的是新版3.x的python,所以請讀者注意一下不要選錯囉。

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

命令提示字元(command prompt)

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

2.Arduino 環境準備

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

 

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>或者是如下圖點選上傳的箭頭來上傳程式碼。

Image may be NSFW.
Clik here to view.

打開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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

Image may be NSFW.
Clik here to view.

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

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

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

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

Image may be NSFW.
Clik here to view.

電路接線圖

Image may be NSFW.
Clik here to view.

LattePanda腳位圖

 

Image may be NSFW.
Clik here to view.

完成圖

Image may be NSFW.
Clik here to view.

上視圖

 

相關文章:

 


Viewing all articles
Browse latest Browse all 682

Trending Articles