文章插圖

文章插圖
在人工短缺的大背景下,機械手正在大顯身手,得到越來越多的應用 。今天我們就通過一個便宜的機械手套件來了解其控制的基本原理及電路 。我們將試驗用Arduino Nano加PCA9685伺服控制器同時控制5個伺服電機
目錄
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 Nano18.2控制器接線18.3 Arduino 代碼19 測試機械臂20 展開機械臂
讓我們先看看我們將要構建什么 。
DFRobot 5 DOF 機械臂套件
該DFRobot 5自由度機械手臂套件包括所有的伺服電機,支架,緊固件和其他硬件,你可以用它建立一個小而強大的機械臂及夾持機構 。
手臂由 5 個伺服電機提供動力,都是標準尺寸:
兩個 15Kg/cm 舵機用于底座和肘部一個 5.5 Kg/cm 手腕舵機兩個 4 Kg/cm 伺服器用于夾持機構
舵機、支架和硬件包裝在帶有識別標簽的單獨塑料袋中 。除伺服電機外,夾具機構均已組裝 。
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 型支架連接到帶支架的彎頭安裝座安裝手腕電機將帶支架的肘部安裝座連接到手腕馬達安裝座安裝夾爪接線和測試!
以下是每個步驟的詳細信息:
組裝夾爪所需零件
將兩個 U 型支架對齊,使短節相互壓緊,并對齊安裝孔 。如果您有像我這樣預先鉆好的安裝孔,您需要確保它們以相同的方式排列,否則方向無關緊要 。使用袋子中的 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 上的模擬輸入,如下所示:
底座Base – A0肘部Elbow – A1手腕Wrist – A2關節Grip Pivot – A3夾爪Grip Jaws – A6
請注意,A4 和 A5 用于 I2C 連接 。
現在讓我們轉到連接的 PCA9685 一側 。
然后,您需要將 5 個(或 6 個)伺服電機連接到該模塊 。確保以正確的方式連接 。
最后,您將需要一個具有足夠電流來驅動五個伺服電機的電源 。6 伏 2 安電源將是理想的選擇 。電源直接連接到 PCA9685 模塊上的連接器 。
一旦你把它全部連接起來,就該編寫一些代碼了!
Arduino代碼
此處提供了簡單機械臂控制器的代碼 。
該草圖使用了 Adafruit PWM 庫,您需要將其安裝到 Arduino IDE 中 。只需在庫管理器中搜索“Adafruit PWM”,它應該是第一個結果 。
如果您需要安裝庫的幫助或想了解有關此庫和 PCA9685 的更多信息,請查看我關于使用伺服電機的文章 。
/*Basic Robot Arm Controllerrobot-arm-control-basic.inoControls 5 DOF Robot Arm, uses Arduino Nano and PCA9685 PWM ControllerUses Adafruit PWM libraryUses 5 potentiometers for input (can be modified for 6)DroneBot Workshop 2018https://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 50Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();// Define Potentiometer Inputsint controlBase = A0;int controlElbow = A1;int controlWrist = A2;int controlPivot = A3;int controlJaws = A6;// Define Motor Outputs on PCA9685 boardint motorBase = 0;int motorElbow = 1;int motorWrist = 2;int motorPivot = 3;int motorJaws = 4;// Define Motor position variablesint mtrDegreeBase;int mtrDegreeElbow;int mtrDegreeWrist;int mtrDegreePivot;int mtrDegreeJaws;void setup(){// Setup PWM Controller objectpwm.begin();pwm.setPWMFreq(FREQUENCY);}// Function to move motor to specific positionvoid moveMotorDeg(int moveDegree, int motorOut){int pulse_wide, pulse_width;// Convert to pulse widthpulse_wide = map(moveDegree, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);pulse_width = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);//Control Motorpwm.setPWM(motorOut, 0, pulse_width);}// Function to convert potentiometer position into servo angleint getDegree(int controlIn){int potVal,srvDegree;// Read values from potentiometerpotVal = analogRead(controlIn);// Calculate angle in degreessrvDegree = map(potVal, 0, 1023, 0, 180);// Return angle in degreesreturn srvDegree;}void loop() {//Control Base Motor// Get desired positionmtrDegreeBase = getDegree(controlBase);// Move motormoveMotorDeg(mtrDegreeBase,motorBase);//Control Elbow Motor// Get desired positionmtrDegreeElbow = getDegree(controlElbow);// Move motormoveMotorDeg(mtrDegreeElbow,motorElbow);//Control Wrist Motor// Get desired positionmtrDegreeWrist = getDegree(controlWrist);// Move motormoveMotorDeg(mtrDegreeWrist,motorWrist);//Control Pivot Motor// Get desired positionmtrDegreePivot = getDegree(controlPivot);// Move motormoveMotorDeg(mtrDegreePivot,motorPivot);//Control Jaws Motor// Get desired positionmtrDegreeJaws = getDegree(controlJaws);// Move motormoveMotorDeg(mtrDegreeJaws,motorJaws);// Add short delaydelay(20);}該代碼包括 Adafruit PWM 庫和 Wire 庫,這對于通過 I2C 總線進行通信至關重要 。為 PWM 控制器定義了一些常數,PWM 信號的最小和最大脈沖寬度以及信號的頻率 。代碼中的值將適用于 DF Robot 5 DOF 機器人手臂套件隨附的電機 。
接下來定義了許多變量:
“c
- 局域網管理軟件排行 控制局域網電腦上網軟件
- Arduino舵機控制板 arduino舵機控制函數
- 基于單片機的溫度自動控制系統 基于單片機的溫度控制器
- 遠程控制電腦桌面軟件 最好用的遠程桌面軟件
- nvm express控制器驅動下載 nvme express控制器
- 版本控制工具有哪些 xcode 版本控制工具有哪些類型
- 調風扇轉速軟件 什么軟件可以控制cpu風扇轉速
- 瑞晟藍牙來電語音控制軟件怎么下載 瑞晟藍牙來電語音軟件下載
- 局域網網絡流量監控軟件 電腦流量控制軟件哪個好
- 控制面板 電腦屏幕亮度怎么調
