在人工短缺的大背景下,機械手正在大顯身手,得到越來越多的應用。今天我們就通過一個便宜的機械手套件來了解其控制的基本原理及電路。我們將試驗用Arduino Nano加PCA9685伺服控制器同時控制5個伺服電機

本文作者:加拿大DroneBotWorkShop 翻譯整理:DIY百事
目錄
1 簡介
2 DFRobot 5 DOF 機械臂套件
3 5 自由度
4 機械臂部分
5 機械臂組裝
6 組裝夾具
6.1所需零件
6.2組裝說明
7 組裝底座電機安裝座
7.1所需零件
7.2組裝說明
8 組裝雙U型支架
8.1所需零件
8.2組裝說明
9 組裝帶支架的彎頭電機安裝座
9.1所需零件
9.2組裝說明
10 組裝腕式電機支架和夾持器支架
10.1所需零件
10.2組裝說明
11 安裝底座電機
11.1所需零件
11.2組裝說明
12 連接底座到雙 U 型支架
12.1所需零件
12.2組裝說明
13 安裝彎頭電機
13.1所需零件
13.2組裝說明
14 將雙 U 型支架連接到帶支架的彎頭安裝座
14.1所需零件
14.2組裝說明
15 安裝手腕電機
15.1所需零件
15.2組裝說明
16 將帶支架的彎頭安裝座連接到手腕馬達安裝座
16.1所需零件
16.2組裝說明
17 安裝夾爪
17.1所需零件
17.2組裝說明
18 Arduino 控制器
18.1 Arduino Nano
18.2控制器接線
18.3 Arduino 代碼
19 測試機械臂
20 展開機械臂
讓我們先看看我們將要構建什麼。
DFRobot 5 DOF 機械臂套件
該DFRobot 5自由度機械手臂套件包括所有的伺服電機,支架,緊固件和其他硬體,你可以用它建立一個小而強大的機械臂及夾持機構。

手臂的支架和支撐件由黑色陽極氧化鋁製成,它提供強大的支撐。
手臂由 5 個伺服電機提供動力,都是標準尺寸:
- 兩個 15Kg/cm 舵機用於底座和肘部
- 一個 5.5 Kg/cm 手腕舵機
- 兩個 4 Kg/cm 伺服器用於夾持機構
舵機、支架和硬體包裝在帶有識別標籤的單獨塑料袋中。除伺服電機外,夾具機構均已組裝。

DFRobot 5 DOF 機械臂套件的完整零件清單如下所示:

組裝臂所需的唯一工具是十字螺絲刀和一套鉗子。
5 個自由度
與大多數機械臂一樣,DFRobot 套件被宣傳為「5 DOF」或 5 自由度機械臂。術語「自由度」究竟是什麼意思?
事實證明,這可能意味著不同的事情,具體取決於您所在的領域。
如果您是一名航空工程師,那麼對您來說,自由度可能由經典的三個維度和物體可以移動的方向表示:
- 前進與後退 Forwards & Backwards
- 上下 Up & Down
- 左右 Left & Right
- 上述三個方向為軸的轉動
然而,在機器人技術中,「自由度」或 DOF 通常被認為表示機構具有的可移動關節的數量。對於機器人手臂,這通常意味著手臂擁有的電機數量。
我們的機械臂有 5 個電機,因此被宣傳為「5 DOF」機械臂。
機械臂部分
伺服電機各自為機械臂的不同部分提供動力,下面的描述中將用為它們提供動力的部分的名稱來表示。
我將手臂部分命名為與人類手臂上的等效部分大致對應,這是我們大多數人應該熟悉的參考點。在某些情況下(在抓手周圍),人類手臂上沒有相應的部分,所以我儘可能描述性地命名這些部分。

各部分如下:
- 底座–機器人手臂的底座,對應於人的肩膀。底座固定到位,至少現在是這樣。
- 肘部–手臂上的第一部分。就像人的肘部一樣,它允許手臂彎曲。
- 手腕–手臂上的第二部分。它允許更好地定位夾具組件。
- 關節–允許夾具向任一方向旋轉 90 度。人的手和手臂沒有這樣的關節,旋轉一隻手是用手臂上的幾塊不同的肌肉來完成的。
- 夾爪 – 夾具機構本身,操作起來很像台鉗或鉗子。
在操作中,手臂的底座需要牢固地固定在堅固的表面上。手臂能夠承受很大的扭矩和動量,因此需要可靠固定。
機械臂組裝
DFRobot 5 DOF 機械臂套件是許多 5 DOF 機械臂的典型代表,因此您可能擁有與之類似的套件。您還可以使用DFRobot 網站上的部件將這個手臂或它的自定義版本拼湊起來。
機器人手臂的組裝將按以下順序進行:
- 組裝夾爪
- 組裝底座電機安裝座
- 組裝雙 U 型支架
- 用支架組裝肘部電機安裝座
- 使用夾持器安裝座組裝腕式電機安裝座
- 安裝底座電機
- 將底座連接到雙 U 型支架
- 安裝肘部電機
- 將雙 U 型支架連接到帶支架的彎頭安裝座
- 安裝手腕電機
- 將帶支架的肘部安裝座連接到手腕馬達安裝座
- 安裝夾爪
- 接線和測試!
以下是每個步驟的詳細信息:
組裝夾爪所需零件


組裝說明
- 將兩個舵機都設置為 0 度位置(完全逆時針)
- 拿起夾具並將其與其中一台電機成 90 度角
- 將伺服軸插入夾具組件背面,與齒輪嚙合。
- 測試對齊是否正確
- 插入並擰緊臂安裝螺釘以將夾具固定回電機軸
- 手動操作夾爪直到它們處於完全打開位置。注意不要超過這個範圍。
- 將伺服電機插入鉗口下方的位置,與齒輪嚙合。
- 測試對齊是否正確
- 插入並擰緊臂安裝螺釘以將夾爪機構固定到電機軸上。
- 測試兩個伺服電機以驗證夾具是否正常運行。
組裝底座電機安裝座所需零件

組裝說明
- 放置舵機安裝支架,使舵機安裝在前面,帶有兩個孔的平板在後面。
- 將人員軸承套件中的螺釘插入伺服支架背面左側的孔中,螺釘頭朝向伺服電機的一側。
- 將人員軸承套件中的軸承插入伺服支架外側的螺釘上。確保軸承的斜面部分與伺服支架齊平。
- 在軸承頂部插入鎖緊墊圈。
- 將螺母擰到螺釘上。
- 擰緊螺釘和鎖緊螺母。
- 確認在擰緊螺釘後軸承仍能自由旋轉。
組裝雙 U 型支架所需零件

組裝說明
- 將兩個 U 型支架對齊,使短節相互壓緊,並對齊安裝孔。如果您有像我這樣預先鑽好的安裝孔,您需要確保它們以相同的方式排列,否則方向無關緊要。
- 使用袋子中的 4 個螺釘和螺母將支架固定在一起。確保將它們牢牢固定。
用支架組裝彎頭電機安裝座所需零件

組裝說明
- 放置舵機安裝支架,使舵機安裝在前面,帶有兩個孔的平板在後面。
- 將人員軸承套件中的螺釘插入伺服支架背面左側的孔中,螺釘頭朝向伺服電機的一側。
- 將人員軸承套件中的軸承插入伺服支架外側的螺釘上。確保軸承的斜面部分與伺服支架齊平。
- 在軸承頂部插入鎖緊墊圈。
- 將螺母擰到螺釘上。
- 擰緊螺釘和鎖緊螺母。
- 確認在擰緊螺釘後軸承仍能自由旋轉。
- 將 L 型支架短邊上的安裝孔與 U 型支架短平底上的安裝孔對齊。L 型支架應與 U 型支架成直角,詳情請參見插圖。
- 使用 L 型支架隨附的螺釘將 L 型支架固定到 U 型支架上。螺釘頭應位於 L 型支架一側。
- 將 L 型支架長邊的安裝孔與舵機安裝支架右下方的安裝孔對齊。
- 使用袋子中的 4 個螺釘和螺母將 L 型支架固定到伺服安裝支架上。螺釘頭應位於 L 型支架一側。
使用夾持器安裝座組裝腕式電機安裝座所需零件

組裝說明
- 放一個舵機安裝支架,舵機安裝在前,兩個孔的平板在後。
- 將人員軸承套件中的螺釘插入伺服支架右後側的孔中,螺釘頭面向伺服電機的一側(請注意,這是之前電機安裝裝配說明中使用的相反側)。
- 將人員軸承套件中的軸承插入伺服支架外側的螺釘上。確保軸承的斜面部分與伺服支架齊平。
- 在軸承頂部插入鎖緊墊圈。
- 將螺母擰到螺釘上。
- 擰緊螺釘和鎖緊螺母。
- 確認在擰緊螺釘後軸承仍能自由旋轉。
- 將第二個伺服安裝支架下方的第二個伺服安裝支架成直角對齊,以便第二個伺服的軸位於組件的右側。對齊安裝孔,有關詳細信息,請參見插圖。
- 用袋子中的 4 個螺釘和螺母固定兩個伺服安裝支架。螺絲頭應面向底部伺服支架。牢固地擰緊。
安裝底座電機所需零件
組裝說明
- 將電機旋轉到 0 度位置(完全逆時針)。
- 安裝電機時軸與背面軸承對齊,使用隨伺服支架提供的 4 個螺釘和螺母將電機緊固。
- 將臂放在電機軸上,暫時留在原處。
其它小部件裝配不再詳述
您現在已經完成了手臂的機械組裝。
重置和運行所有伺服電機以確保一切正常工作並正確對齊是一個好主意。如有必要,通過卸下將伺服臂固定到框架的 4 個螺釘來調整連接點的位置,並根據需要重新定位。
現在讓我們組裝一個簡單的控制器並讓手臂完成它的步伐!
Arduino控制器
我將 PCA9685 16 通道 PWM 控制器直接安裝到我的機械臂上,以便我可以使用 I2C 匯流排控制所有電機。
雖然我現在對機器人手臂有很好的計劃,但我只需要一個簡單的控制器來調整所有五個伺服電機的位置。我是圍繞 Arduino Nano 來設計的。
Arduino Nano
我的 Arduino 項目通常基於 Arduino Uno,它是一種流行且廉價的微控制器板,具有大量輸入和輸出。但有時它不符合要求。這次就是。
我想構建一個具有 5 個電位器的控制器,分別控制每個電機。然後它會通過 I2C 匯流排將信息發送到 PCA9685 以控制伺服系統。我還希望它能夠輕鬆升級為使用 6 個電位計用於 6 DOF 臂(基本上是我的 5 DOF 臂,底部帶有轉盤)。
Arduino Uno 有 6 個模擬輸入,因此乍一看似乎非常適合這項工作。但是有一個問題!在此設計中有兩個模擬輸入不能用。
Arduino Uno 上的模擬輸入 A4 和 A5 作為 I2C 匯流排上的 SDA(數據)和 SCL(時鐘)線執行雙重任務。即使您的 Uno 具有單獨的 SDA 和 SCL 引腳,它們也只是在內部連接到 A4 和 A5。
因此,如果您使用 I2C,那麼您就不能使用模擬引腳 A4 和 A5,它們是共用的。
而Arduino Nano 有八個模擬輸入,比 Uno 多兩個。因此,即使 Nano 用引腳 A4 和 A5 作I2C通訊,它仍然有足夠的剩餘模擬輸入來完成這項工作。
即使我最終添加了第六個電位器!
Nano 在大多數方面與 Uno 一樣易於使用,尤其是當您將其安裝到無焊麵包板上或使用適配器插座時。請記住將 Arduino IDE 中的開發板類型更改為「Arduino Nano」,否則在編譯代碼時會出現錯誤。
為控制器接線
我們簡易型機械臂控制器的接線非常簡單,尤其是當我們使用 PCA9685 進行伺服連接時。
為了減少任何混亂,我在兩個圖表上顯示了接線。這與我將 PCA9685 直接安裝在手臂上的安排相匹配。如果您希望將 PCA9685 安裝在用於 Arduino Nano 的同一塊板或麵包板上,這取決於您。
我喜歡直接安裝在手臂上的 PCA9685,因為我認為它可以減少接線並避免延長任何伺服電機電纜。而且我還打算在我的手臂上安裝其他 I2C 設備,因此為所有這些設備設置一個 I2C 連接是有意義的。

我們接線圖的「Arduino 部分」有 Nano 和 5 個電位器。控制器一側接地,另一側從 Arduino Nano 獲得 5 伏電壓。
每個電位計的輸出連接到 Arduino Nano 上的模擬輸入,如下所示:
- 底座Base – A0
- 肘部Elbow – A1
- 手腕Wrist – A2
- 關節Grip Pivot – A3
- 夾爪Grip Jaws – A6
請注意,A4 和 A5 用於 I2C 連接。
現在讓我們轉到連接的 PCA9685 一側。

I2C 連接到 PCA9685 末端的一個連接器,任一連接器都可以工作。
然後,您需要將 5 個(或 6 個)伺服電機連接到該模塊。確保以正確的方式連接。
最後,您將需要一個具有足夠電流來驅動五個伺服電機的電源。6 伏 2 安電源將是理想的選擇。電源直接連接到 PCA9685 模塊上的連接器。
一旦你把它全部連接起來,就該編寫一些代碼了!
Arduino代碼
此處提供了簡單機械臂控制器的代碼。
該草圖使用了 Adafruit PWM 庫,您需要將其安裝到 Arduino IDE 中。只需在庫管理器中搜索「Adafruit PWM」,它應該是第一個結果。
如果您需要安裝庫的幫助或想了解有關此庫和 PCA9685 的更多信息,請查看我關於使用伺服電機的文章。
/*
Basic Robot Arm Controller
robot-arm-control-basic.ino
Controls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM Controller
Uses Adafruit PWM library
Uses 5 potentiometers for input (can be modified for 6)
DroneBot Workshop 2018
https://dronebotworkshop.com
*/
// Include Wire Library for I2C Communications
#include <Wire.h>
// Include Adafruit PWM Library
#include <Adafruit_PWMServoDriver.h>
#define MIN_PULSE_WIDTH 650
#define MAX_PULSE_WIDTH 2350
#define FREQUENCY 50
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// Define Potentiometer Inputs
int controlBase = A0;
int controlElbow = A1;
int controlWrist = A2;
int controlPivot = A3;
int controlJaws = A6;
// Define Motor Outputs on PCA9685 board
int motorBase = 0;
int motorElbow = 1;
int motorWrist = 2;
int motorPivot = 3;
int motorJaws = 4;
// Define Motor position variables
int mtrDegreeBase;
int mtrDegreeElbow;
int mtrDegreeWrist;
int mtrDegreePivot;
int mtrDegreeJaws;
void setup()
{
// Setup PWM Controller object
pwm.begin();
pwm.setPWMFreq(FREQUENCY);
}
// Function to move motor to specific position
void moveMotorDeg(int moveDegree, int motorOut)
{
int pulse_wide, pulse_width;
// Convert to pulse width
pulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
//Control Motor
pwm.setPWM(motorOut, 0, pulse_width);
}
// Function to convert potentiometer position into servo angle
int getDegree(int controlIn)
{
int potVal,srvDegree;
// Read values from potentiometer
potVal = analogRead(controlIn);
// Calculate angle in degrees
srvDegree = map(potVal, 0, 1023, 0, 180);
// Return angle in degrees
return srvDegree;
}
void loop() {
//Control Base Motor
// Get desired position
mtrDegreeBase = getDegree(controlBase);
// Move motor
moveMotorDeg(mtrDegreeBase,motorBase);
//Control Elbow Motor
// Get desired position
mtrDegreeElbow = getDegree(controlElbow);
// Move motor
moveMotorDeg(mtrDegreeElbow,motorElbow);
//Control Wrist Motor
// Get desired position
mtrDegreeWrist = getDegree(controlWrist);
// Move motor
moveMotorDeg(mtrDegreeWrist,motorWrist);
//Control Pivot Motor
// Get desired position
mtrDegreePivot = getDegree(controlPivot);
// Move motor
moveMotorDeg(mtrDegreePivot,motorPivot);
//Control Jaws Motor
// Get desired position
mtrDegreeJaws = getDegree(controlJaws);
// Move motor
moveMotorDeg(mtrDegreeJaws,motorJaws);
// Add short delay
delay(20);
}
該代碼包括 Adafruit PWM 庫和 Wire 庫,這對於通過 I2C 匯流排進行通信至關重要。
為 PWM 控制器定義了一些常數,PWM 信號的最小和最大脈衝寬度以及信號的頻率。代碼中的值將適用於 DF Robot 5 DOF 機器人手臂套件隨附的電機。
接下來定義了許多變數:
- 「control」變數,代表電位計所連接的模擬埠。
- 「motor” 變數代表 PCA9685 板上 PWM 輸出。
- 「 mtrDegree 」變數表示您希望電機軸定位到的角度(從 0 到 180)。
在設置中,我們只初始化 PWM 對象並將 PWM 振蕩器的頻率設置為 50 Hz,這是模擬伺服電機的標準。
然後我們定義兩個函數:
- moveMotorDeg – 此函數將電機名稱和位置(以度為單位)作為輸入。然後它將請求的電機移動到該位置。
- getDegree – 此函數將電位計名稱作為輸入並以度數輸出位置。
由於我們定義了兩個函數,循環非常簡單。這確實是相同的程序重複五次,每個電機一次。
電位計位置是使用getDegree函數確定的。然後將此信息傳遞給moveMotorDeg函數以將相應的電機移動到所需位置。
在為每個電機執行此常式後,會產生短暫的延遲,然後循環重新開始。結果是伺服電機響應電位計位置而移動。
測試機械臂
將所有東西連接起來並提供合適的電源,然後準備測試您的手臂。
確保將手臂牢固地固定在有足夠質量支撐它的底座上。當你第一次給手臂加電時,不要讓你的手和手指擋住你的手,舵機會立即移動到位,它們不會因為你的手指而停下來!
手臂很結實,能夠舉起合理的重量。如果您使用過像 MeArm 這樣的小型實驗臂,那麼您會發現這是一個顯著的改進。
抓手特別有用,它實際上能夠以可重複的方式拾取小物件。
花幾個小時把玩一下你的新機械手臂,這讓人上癮!
展開機械臂
這樣我們完成了手臂的構建,但還可以做些後續的事情。這實際上只是 DFRobot 5 DOF 機械臂項目的開始,至少對我來說是這樣。
我已經在我的下一批實驗中安裝了一個感測器。這是一個 MPU5060 陀螺儀和高度計設備,我安裝在手臂手腕上以測量位置。它們用 I2C通訊,因此介面很簡單。
攝像頭、距離感測器、限位感測器、力敏電阻器——對於像這樣的堅固機器人手臂可以連接的東西,天空是無限的。
所以我可以保證你會在車間看到更多的手臂。將此文章和視頻視為系列的一部分。
我希望這篇文章能激勵你建造一個像這樣的機械臂。DFRobot 套件價格低廉,並且包含一些可以使用很長時間的高質量部件。
我很想聽聽你的機械臂設計。請在下面的評論中告訴我您的創作以及您在製作手臂時可能遇到的任何問題。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/220806.html
微信掃一掃
支付寶掃一掃