×

Bracc.ino机械臂开源分享

消耗积分:0 | 格式:zip | 大小:0.04 MB | 2023-06-30

刘勇

分享资料个

描述

描述

Bracc.ino 是一个简单的关节臂,由 6 个伺服电机组成,由 Arduino 手柄通过蓝牙控制。它是作为一个学校项目诞生的,其目的是模拟工业机器人。经过不同的尝试,我们可以找到正确的前进方式,我们可以移动机器人。

为了创建最终原型,我们使用不同的生产方法,例如使用激光切割机制作结构,使用 3D 打印机制作销钉、夹具和底座。

手臂运动由 Arduino 板控制。我们可以使用两个板之间的蓝牙通信发送有关要执行哪个动作的信息。我们决定使用传感器 HC-05 来执行此操作。

 
 
poYBAGN-0cSARfv4AAJTjuk7B90132.jpg
 
1 / 3激光切割原型
 

蓝牙通讯

蓝牙通信包括通过射频发送和接收信息。在不需要电线的情况下发送数据可能很有用。所以我们决定找到一种方法来为我们的机械臂创建一个游戏手柄。我们发现使用 Arduino 是可能的。使用蓝牙模块 HC-05,我们可以通过设备接收数据,但是,对传感器进行编程,我们也可以将数据发送到另一个 HC-05。所以我们找到了一种方法来编程和更改模块配置。向对方发送数据的模块称为 MASTER,而接收器则称为 SLAVE。所以这两种配置有些不同,但有一些共同点。基本上,要点是:

  • 将两个 Arduino 与 HC-05 传感器连接,为 EN 引脚(或键)供电 5V。然后上传一个空草图并打开串行通信。为了简化程序,我们可以使用两个不同的 Arduino IDE 窗口同时连接两个板。
  • 现在在串口监视器上写一些文字,我们可以更改蓝牙配置。
 
 
 
pYYBAGN-0caAEaRNAABXgnuduO4582.jpg
 
1 / 2HC-05:蓝牙模块
 
从配置:serialmonitorsequence
  • 写“AT” ,直到回复“OK”。
  • AT+UART=38400。它设置波特率,蓝牙为 38400 波特。
  • AT+角色=0。将 HC-05 设置为从属模式。
  • AT+CMODE=0。它仅用于连接配对设备
  • AT+PSWD=1234。设置密码。对主传感器也使用相同的方法很重要。
主机配置:串口监控序列
  • 写“AT”,直到回复“OK”。
  • AT+UART=38400。它设置波特率,蓝牙为 38400 波特。
  • AT+角色=1。将 HC-05 设置为主模式。
  • AT+RMAAD。清除之前配对的设备。
  • AT+复位。重置模块。
  • AT+CMODE=0。
  • AT+INQM=0、5、9。
  • AT+初始化。
  • AT+查询。最后三个命令帮助我们搜索从模块。最后一条命令返回模块附近设备的地址。
  • 现在我们必须复制正确的地址。如果我们有多个,我们可以控制正确的设备在“AT+RNAME=<地址>之后粘贴地址。使用逗号而不是冒号很重要。
  • 找到正确的设备,写“AT+PAIR=
    , 9”
  • AT+BIND=<地址>。
  • AT+CMODE=1。
  • AT+LINK=<地址>
  • 如果我们收到“OK”的回复,我们就成功配对了两个蓝牙模块。

有关配对过程的更多信息,请访问链接:

http://www.martyncurrey.com/connecting-2-arduinos-by-bluetooth-using-a-hc-05-and-a-hc-06-pair-bind-and-link/

结构说明

学校给了我们很多机会来学习如何使用激光切割和 3D 打印技术。所以我们能够创建一个手臂结构,开始在 3D 软件上绘制它,比如“SolidWorks”。然后,出于美观的原因,我们选择使用激光切割机生产结构部件,并使用 3D 打印机制作夹具和底座。操纵杆也是由 3d 打印机创建的。

3D 文件可以在 GrabCAD 平台上的链接中轻松找到:

https://grabcad.com/library/bracc-ino-1

 
 
 
poYBAGN-0ciAJWMuAACPnkuaSWM579.png
 
1 / 2臂组件
 

手柄

pYYBAGN-0c6AFpndAAHeWksTRm8552.jpg
手柄
 

伺服

使用伺服电机移动手臂的关节。它们易于使用,带有 Arduino 库,我们可以非常轻松地控制电机角度。但是为了提升结构,我们必须使用一些不同的伺服,具有更高的失速扭矩。伺服MG996R,帮助我们抬起所有的手臂。此外,这种伺服是数字类型的,也就是说它们比普通的更准确。我们还必须使用 库而不是普通的 库。前一个有更多的功能,可以帮助我们模拟更流畅的动作。它还具有控制舵机速度和以异步方式移动它们的功能。

该库可以在以下链接中找到:

https://github.com/netlabtoolkit/VarSpeedServo

 
 
 
poYBAGN-0dCAAAS3AABFF4FBflg089.jpg
 
1 / 2伺服MG996R
 

抓手

机器人手臂工具现在是一个简单的抓手,可以悬挂小物体并移动它们。它由我们设计并由 3d 打印机实现。SG90 伺服电机旋转一个齿轮,该齿轮移动另一个并打开或关闭爪子。

 
 
 
pYYBAGN-0dKAdh5NAAB7CAufHkA975.png
 
1 / 2装配夹具
 

基础轴承

另一个有用的组件是基础轴承。它就像一个辅助滚珠轴承,但它是完全 3D 打印的。它有两个圆环,里面有一些滚子,它们具有特殊的形状,可以毫无问题地滑动。主要功能是帮助底座旋转,避免在木盘上爬行。

 
 
 
pYYBAGN-0dWATvlmAABsnJZD13k083.png
 
1 / 2底座轴承组件
 

命令块-基础

在手臂下方有一个块,里面有机器人的所有电路和电池。它包含 Arduino 板、PCB 和充电电池。该底座手杖可以从地面拆卸,并且可以作为模块化安装到其他设备上。

 
 
 
pYYBAGN-0deABx9tAAB18vql6Cs678.png
 
1 / 2接地组件
 

电路:手臂

poYBAGN-0d2AcpazAAQ34xd5pkQ669.jpg
臂电路
 

手臂电路由与HC-05的 bluettorh 接线组成,并将每个 Servo 连接到 GND、6V 和 PWM 引脚。伺服系统具有不同的电源线,因为它们具有更高的扭矩和更高的供应。

电路:手柄

poYBAGN-0eGAC3JAAAVHCpLhJ9U971.jpg
手柄电路
 

操纵杆电路由相同的蓝牙接线组成,增加了两个操纵杆、两个按钮和一个LCD。

操纵杆由两个微调器组成,每个微调器的值由模拟 IN 引脚读取。按钮也是如此,但我们必须使用数字引脚来读取它是 HIGH(按下)还是 LOW(未按下)。

我们连接到 I2C 模块的 LCD 显示器减少了连接数量,打印了我们移动的伺服方式及其角度。为了使用它,我们找到了一个名为 的特定库,可以在此处下载:

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

印刷电路板

由于飞线和电路不清晰的问题,我们想画一个PCB电路,像屏蔽一样连接到Arduino Board。我们使用“EasyDA”网站绘制它们,并通过 JLC 网站订购零件。这样,电路更清晰,更小,使用更舒适。

 
 
 
pYYBAGN-0eOAQDvdAACEavVptRg350.png
 
1 / 2操纵杆 PCB
 

代码功能

对于编程,我们使用 Arduino IDE 软件,它使用一种非常简单的编程语言。我们有两种不同的代码,一种用于操纵杆 Arduino,另一种用于 Arm 运动。

代码的主要功能和动作在后续流程图中进行了说明,以便于理解。

手柄

poYBAGN-0eeAG7wuAAA3y5gnlDQ515.png
操纵杆流程图
 

对于发送命令,我们创建了一个代码列表,由不同的字母组成,表示不同的东西。每个代码都与一个字母或数字相匹配,通过蓝牙通信发送到手臂。

在这两个代码中都有一个“limit()”空白,用于控制伺服角度。如果值大于最大值或小于最小值,则角度返回极限值。最大值和最小值是在第一次装配时设置测试伺服电机的,它们可以很容易地改变,修改代码开头的变量。

手臂

poYBAGN-0emADIBIAAA7vlQ6QM0446.png
手臂流程图
 

在代码的开头,蓝牙模块搜索数据,如果收到信息,它会修改接收到的字母中的“读取”变量,对应一个动作。

此代码还具有用于控制伺服角度的“限制无效”。

在代码的 and 处有一个 moveAll() void。我们选择使用这个函数而不是在“if”函数中更新伺服角度,因为这样每次循环开始/结束时,伺服角度都会更新并且电机保持张力。

手臂有两种模式;正向模式,逐个移动电机,反向模式,移动所有舵机,计算从点坐标开始的角度。

积分保存功能

手臂有趣功能是积分保存方法。它可以保存手臂位置并按顺序回放。在正向模式下,代码会记住所有舵机的角度值,而在反向模式下,它会记住一个点的坐标。

操纵杆在 LCD 上打印保存了哪个点,并在达到最大点数(实际上是五个,最后加上原点)以及重置内存时发出警报。

反向运动模式

逆模式,而不是直接模式,使用基于逆运动学的算法来查找所有伺服角度。该计算从坐标位置 (x,y) 和夹具点的方向开始。对于这个计算,我们使用几何方法。事实上,它是基于用 cosin 和 sin 函数构造三角形,我们可以计算所有角度,并将这些值转换为伺服角度。

poYBAGN-0eyAD3iBAAAqWBNkUO8517.png
要解决的角度
 

1- G'点翻译

首先,我们必须将 G 点转换为 G' 点以简化逆计算。G 点的 y 也是向上平移 93,以使原点与第一个关节重合。

 
 
 
pYYBAGN-0e6AJW28AAAiJPDAf1M598.png
 
1 / 2G' 翻译
 

2-直线斜率_

现在我们可以计算从笛卡尔原点到 G' 点的直线的斜率“m”。

 
 
 
pYYBAGN-0fCAcTowAAAg-zRepfs318.png
 
1 / 2图形
 

3-圆形交叉口

之后,我们可以画一个圆心在 G' 和半径等于链接 3 长度的圆。我们知道圆方程,所以我们可以找到直线之间的交点,在 B 点。

简化这两个方程,我们可以使用二阶求解方法找到 Xb 方程。我们可以通过对圆和直线方程的简化和收集来找到a、b和c的值。

现在求解二次方程,我们必须取最接近原点的次要值。我们在直线方程中计算 Yb 值代替 Xb。

与使用毕达哥拉斯公式相比,我们计算了原点-B 线的长度。

 
 
 
pYYBAGN-0fKAdkFtAAA2AWjxN6g523.png
 
1 / 2图形
 

4-三角

现在我们可以画一个三角形,我们知道它的三个边,分别是“r”长度、链接 1 长度和链接 2 长度。知道三个边后,我们可以使用 SSS(side side side)公式找到角度值。

 
 
 
poYBAGN-0feAbaZSAAAlYJ7XIwA802.png
 
1 / 2图形
 

5-三角肌

之后,我们必须找到最后一个角度,并绘制一个三角形,我们可以找到最后一个。

三角肌由两个相等的三角形组成,我们知道它们的两条边(连杆 2 和连杆 3)和垂直角“delta”。所以计算对角线长度,我们可以计算出A角,我们将完成第二个关节角。

 
 
 
pYYBAGN-0fmAJhgOAAAmaFBg00w202.png
 
1 / 2图形
 

6-查找关节角度

为了将我们的角度转换为伺服值,我们必须减去和求和我们的角度。

  • 对于 Θ1,我们将斜率的角度添加到“c^”角度。
  • 对于 Θ2,我们添加“a^”角和 A^ 角并减去 90° 以找到链接 1 和链接 2 的垂线之间的角度。
  • Θ3 是 90° 减去 delta 角。
  • Θ4 是角度和“伽马”角减去 270°。
 
 
 
pYYBAGN-0fyAO2tCAAApi9BuA6c782.png
 
1 / 2图形
 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !