亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

本地和远程可编程机械臂

组件和用品

Arduino Mega 2560
× 1
SainSmart DIY 3轴控制码垛机械臂模型,适用于Arduino UNO MEGA2560
× 1
MeArm DIY 机械臂套件
× 1
Adafruit RGB 背光 LCD - 16x2
× 1
Android 设备
× 1
旋转电位器(通用)
10Kohm
× 4
SparkFun 按钮开关 12mm
× 3
LED(通用)
红色、蓝色、绿色、黄色
× 4

应用和在线服务

Arduino IDE
MIT App Inventor 2

关于这个项目

本教程的目的是分步开发一个机器人手臂的控制和编程项目,模拟工业机器人的基本功能。

第 1 步:规格

机器人有两个基本功能:

  • 计划 :三个维度记录手臂位置(每条记录是一个“步”)
  • 运行 :依次执行“程序”中记录的位置。机器人将运行程序,直到使用命令“ABORT”。

主要特点:

  • 该项目可用于控制具有 3 或 4 DOF(“自由度”)的机器人。
  • 可以在“LOCAL”和“REMOTE”模式下控制机器人(最后一个通过 Android 设备)
  • 在程序阶段,用户可以将控制模式从“本地”更改为“远程”,反之亦然。
  • 将通过彩色 LED、2 行 LED 显示屏和声音(蜂鸣器)向用户提供信息。
  • 还可以远程触发声音警报。

第 2 步: 项目

上一步的框图显示了将在该项目中使用的“物料清单”。

我选择了 Arduino MEGA,以免担心可用 Arduino 端口 (I/O) 的数量。例如,UNO 可以正常工作,但应使用端口扩展方法。在 Internet 上可以轻松找到多种选项,例如 74138 解码器。

在这里,第一个原型正在“本地模式”下编程。

蓝牙网络使用HC-06。

用于“远程模式”的 Android 应用 ”,是使用 MIT Appinventor2 工具开发的,该工具是基于 Android 设备的此类应用的强大单一平台。该应用可在 Google 商店免费下载:MJRoBot Arduino Robot Arm Control。

下面的视频可以让您了解远程编程的最终项目应该是什么:

第 3 步:项目开发

机械臂可以根据它们拥有的“关节”或“自由度”(DOF)的数量进行分类。

  • 基地 ", 或 "腰部 ",通常可以将手臂转动 180o 或 360o,具体取决于所使用的伺服类型(在本项目中,使用了 180o 伺服)。
  • 肩膀 ", 负责垂直“升高或降低”手臂。
  • 肘部 " 将使手臂“向前或向后”。
  • 爪子 " 或 "夹持器 “通过打开或关闭来“抓取东西”。

第 4 步: 电路

伺服电机将用于驱动关节,直接连接到 Arduino。请注意,在底座上使用“步进电机”以获得更大的扭矩和精度并不少见。舵机的正确选择非常重要(有便宜的中国舵机,结构很差,例如MG995,不幸的是我的SanSmart 3DOF AARM附带的舵机)。但是对于这个项目的提议工作正常。

舵机的直流电源应与 Arduino 和其他组件分开。 5 或 6V 的外部电源应该可以正常工作(检查伺服器的数据表以验证正确的电压范围)。通常的做法是在 VCC 和 GND 之间使用 470uF 电容器,以最大限度地减少伺服器内部直流电机产生的噪声。请务必连接所有“接地”(外部电源与 Arduino GND 引脚)。

如果伺服系统出现问题并且振动很大,请根据代码的“延迟”进行调整。在接收新命令之前,伺服系统有时间到达某个点是很重要的。同样值得检查一下伺服是数字的还是模拟的,就好像它们在机械上相似,数字的工作频率为 300Hz,而模拟的频率为 50Hz。标准 Arduino 库“Servo.h " 是为模拟舵机开发的,如有必要,可以进行修改,以便更好地与数字舵机配合使用。

上图为完整电路。

第 5 步: 代码

项目并不复杂,但变数很多。最谨慎的做法是明确定义它们并将注释留在一个唯一的文件中:

ArmDefine.h

该文件还应设置最小、最大和初始伺服角度。本教程中包含的代码,有两组参数,用于我在项目中测试的机械臂(当然只能使用一组常量):

// MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87#define midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define maxElbw 0 midGrip 100#define midBase 90#define midShou 90#define midElbw 0 */ 

每种类型的手臂都有一组不同的参数,找到适合自己的手臂很重要。我的建议是,最初电位器(电位器)保持在中点,PWM 输出的映射设置为默认值:Max =255 , Min =0Mid =126 ( "#defines " 以上。然后,开始改变电位器(一个接一个)并在串行监视器(或 LCD)中跟踪手臂正常工作的最小值和最大值应该是什么。这些将是用于测试的最终值设置(在 ArmDefine.h 中更改我的原始值) .

为了“记录”机器人应该玩的坐标集(或步数),我将使用数据数组:

int GripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // 用于记录任务的位置数组的索引 

请注意,我没有保留“存储”位置,并且在“机器人”程序结束时,索引回到零,机器人将等待新序列的记录(程序丢失)。或者,您可以将这些数据数组保存在 Arduino EEPROM 中,例如。这样做,程序将被再次执行,甚至您可能有多个存储的程序。

第 6 步: 程序逻辑

主要块(“循环”)真的很简单:

检查是否使用了执行“程序”(步骤序列)的命令。

  • 如果是,请运行它。
  • 否则,“程序”是不完整的,仍然必须编写新的步骤。
  • 如果定义了“新职位”,请将其添加到程序中。
  • 首先,检查从 Android 设备到达串行缓冲区的消息。
  • 接下来,验证控制模式是“本地”还是“远程”(默认为本地)。
  • 回到开头并再次执行第 1 步。
void loop(){ checkBTcmd();定义本地远程(); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH command =="runon") { RunProgram (); } else recArmPosition();命令 ="";} 

函数 checkBTcmd() 使用来自 BT 模块的单个字符组合一个字符串。这个字符串被传递给变量“command ”.

函数 defineLocalRemote() 考虑变量“command 》 检查是否接收到一个改变模式为远程的命令,反之亦然。报警命令也在这里分析。对于程序逻辑,如果在Android设备中触发了“报警”,则手臂必须转到远程模式。

函数 RunProgram() 执行准备工作,打开/关闭 LED 等,尤其是调用函数:ExecuteTask() .后者是包含步骤序列执行逻辑的函数。该函数增加了“positionIndex " 使用工具将位置数据一一发送到手臂:armPosition(grip, base,肩膀,肘部) .

最后,真正控制舵机并写入“步骤”的函数是 recArmPosition() .根据接收到的 Android 命令,此函数将定义可以通过锅或通过 Android 应用程序的“滑块”的舵机的定位。随着每个位置的变化,此函数使用 armPosition 将坐标发送到舵机 功能(握把、底座、肩部、肘部)。在触发“保存”或“程序”命令时,会读取电位器或滑块的实际位置并相应激活伺服系统。此时,数组的位置索引递增并存储步骤。

为便于理解,所有代码均基于其特定功能。 “设置 ", "循环 " 并且上述功能几乎都在文件中:MJRoBot_Arm_Robot_Task_Prgm.ino

更通用的函数如读取 BT 命令:void checkBTcmd() ;声音发生器:空蜂鸣声(int pin,int freq,long ms) 和去抖动:布尔去抖动(int pin) ;存档:General_Functions.ino

一个重要的事实:由于 Arduino 基于 16Mhz 的时钟执行指令,预计控制按钮每秒读取数百甚至数千次,因此制作一个“去抖动”按钮来设置记录步骤很重要.

第四个也是最后一个文件是:Arm_Ctrl_and_Display.ino

在这个文件中是电位计的读数函数:bool readPotenciometers() ;读取 Android 滑块:bool readSliders() ;舵机的放置:void armPosition(int grip,int basee,int肩膀,肘部 int) .文件中包含的其他功能是用于在 LCD 上显示数据、串行监视器、警报等。

该视频显示了通过 Android 应用程序远程编程的机械臂 4DOF“meArm” .

可以在 GITHUB 找到该项目的完整源代码:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

或在这里:

F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

第 7 步:结论

一如既往,我希望这个项目可以帮助其他人在激动人心的电子、机器人和物联网世界中找到自己的出路!更多项目请访问我的博客:MJRoBot.org

来自世界南方的问候!我们下个教程见!

谢谢

马塞洛

代码

  • 代码片段 #1
  • 代码片段#2
  • 代码片段 #3
代码片段 #1Arduino
// MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87#定义midShou 138#define midElbw 100/* SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define midGrip 100定义midBase 90#define midShou 90#define midElbw 0 */
代码片段 #2Arduino
int GripPosition[100];int basePosition[100];int shouPosition[100];int elbwPosition[100];int positionIndex =0; // 用于记录任务的位置数组的索引
代码片段 #3Arduino
void loop(){ checkBTcmd();定义本地远程(); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH command =="runon") { RunProgram (); } else recArmPosition();命令 ="";}
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

示意图

机械臂
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

制造工艺

  1. 使用 Arduino、1Sheeld 和 Android 的通用远程控制
  2. 制造中的机械臂及其优势
  3. 机器人机械手和机械臂的区别
  4. LCD 动画和游戏
  5. 使用 Arduino 和智能手机的 DIY 电压表
  6. 使用物联网远程控制机械臂
  7. Arduino 3D 打印机械臂
  8. Nunchuk 控制机械臂(使用 Arduino)
  9. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  10. 使用 Arduino 的简单智能机械臂
  11. Python3 和 Arduino 通信
  12. Arduino PowerPoint 指针