构建一款由蓝牙控制器控制的机械臂
扫描二维码
随时随地手机看文章
Bracc.ino是一个简单的关节臂,由6个伺服马达组成,通过Arduino手柄通过蓝牙控制。它是作为一个学校项目诞生的,它的目的是模拟一个工业机器人。经过不同的尝试,我们可以找到正确的方法,我们可以移动一个机器人。
为了创建最终的原型,我们使用了不同的生产方法,比如使用激光切割机制作结构,使用3D打印机制作别针、夹具和底座。
手臂的运动由Arduino板控制。我们可以通过AT两个板之间的蓝牙通信来发送关于要做哪个动作的信息。我们决定使用HC-05传感器来做这件事。
蓝牙通信
蓝牙通信包括通过无线电频率发送和接收信息。它可以AT不需要电线的情况下发送数据。所以我们决定想办法为我们的机械臂制作一个手柄。我们发现使用Arduino是可以实现的。使用蓝牙模块HC-05,我们可以通过一个设备接收数据,但通过对传感器进行编程,我们也可以将数据发送到另一个HC-05。因此,我们找到了一种编程和改变模块配置的方法。发送数据给另一方的模块称为MASTER,而接收方则称为SLAVE。所以这两种构型有点不同,但是有一些共同点。基本上主要的观点是:
将两个Arduino与HC-05传感器连接,用5V为EN引脚(或密钥)供电。然后上传一个空草图并打开串行通信。为了简化程序,我们可以同时连接两个板,使用两个不同的Arduino IDE窗口。
现ATAT串行监视器上写一些字,我们可以改变蓝牙配置。
•写“AT”,直到回复为“OK”。
•+ UART = 38400。它设置波特率,对于蓝牙是38400波特。
•AT+角色= 0。将HC-05设置为从机模式。
•AT+ CMODE = 0。它只用于连接配对设备
•+ PSWD = 1234。设置密码。对于主传感器使用相同的方法也是很重要的。
主配置:串行监控序列
•写“AT”,直到回复为“OK”。
•+ UART = 38400。它设置波特率,对于蓝牙是38400波特。
•AT= 1 +的作用。将HC-05设置为主模式。
•AT+ RMAAD。清除先前配对的设备。
•AT+重置。复位模块。
•AT+ CMODE = 0。
•At + inqm = 0,5,9。
•AT+ INIT。
•AT+ INQ。最后三个命令帮助我们搜索从模块。最后一个命令返回模块附近设备的地址。
•现在我们要复制正确的地址。如果我们有多个,我们可以控制右边的设备粘贴地址AT“AT+RNAME=”之后。用逗号代替冒号是很重要的。
•找到正确的设备,写入“AT+PAIR=”9”
•AT+BIND=<address>
•AT+CMODE=1.
•AT+LINK=<address>
•如果我们收到“OK”的回复,我们已经成功配对了两个蓝牙模块。
结构描述
学校给了我们很多机会学习如何使用激光切割和3D打印技术。所以我们能够创建一个手臂结构,开始AT3D软件上绘制它,比如“SolidWorks”。然后,出于美观的考虑,我们选择使用激光切割机生产结构部分,使用3D打印机生产夹具和底座。此外,操纵杆是由3d打印机创建的。
手柄
伺服
手臂的关节是用伺服马达移动的。它们很容易使用,有Arduino库,我们可以很容易地控制电机的角度。但对于结构的升力,我们必须使用一些不同的伺服,具有更高的失速扭矩。伺服MG996R,帮助我们抬起所有的手臂。此外,这种伺服是数字型的,也就是说,他们比普通的更准确。我们还必须使用库而不是普通的库。前一个有更多的功能,帮助我们模拟一个更流畅的运动。它还具有控制伺服速度和以异步方式移动它们的功能。
爪
机械臂工具现AT是一个简单的抓手,可以悬挂小物体并移动它们。它是由我们设计并通过3d打印机实现的。SG90伺服电机旋转一个齿轮,带动另一个齿轮打开或关闭爪。
基地轴承
另一个有用的部件是基础轴承。它就像一个assial滚珠轴承,但它是完全3D打印的。它有两个环,里面有一些滚子,它们有特定的形状,可以滑动而不会出现问题。主要功能是帮助底座旋转,避免AT木盘上爬行。
命令块-基础
AT手臂下面有一个块,里面有机器人的所有电路和电池。它包含Arduino板,PCB和充电电池。这个底座可以从地面拆卸,并且可以模块化安装到其他设备上。
电路:手臂
手臂电路由蓝牙线路与HC-05组成,并将每个伺服连接到GND, 6V和PWM引脚。伺服有不同的电源线,因为他们有更高的扭矩与更高的供应。
电路:手柄
操纵杆电路由相同的蓝牙线路组成,加上两个操纵杆,两个按钮和一个LCD。
操纵杆由两个微调器组成,每个微调器的数值由模拟输入管脚读取。按钮也是如此,但我们必须使用数字引脚来读取它是高(按下)还是低(未按下)。
液晶显示器,我们连接到I2C模块,减少连接的数量,打印我们是如何移动的伺服和他们的角度。
印刷电路板
针对飞线和电路不清晰的问题,我们想画一个PCB电路,像屏蔽一样连接到Arduino板上。我们使用“EasyDA”网站绘制它们,并通过JLC网站订购零件。这样,电路更清晰,更小,使用起来更舒适。
代码功能
对于编程,我们使用Arduino IDE软件,它使用了一种非常简单的编程语言。我们有两个不同的代码,一个用于Arduino的操纵杆,另一个用于手臂运动。
为了便于理解,代码的主要功能和动作AT后续的流程图中进行了说明。
手柄
为了发送命令,我们创建了一个代码列表,由不同的字母组成,这意味着不同的事情。每个代码都与一个字母或数字相匹配,通过蓝牙通信发送到手臂上。
AT这两个代码中都有一个“限制()”空白,用于控制伺服角度。如果值大于最大值或小于最小值,则角度返回到限制值。最大值和最小值是AT第一次装配时测试伺服电机时设置的,它们可以很容易地改变,修改代码开头的变量。
手臂
AT代码开始时,蓝牙模块搜索数据,如果收到信息,则修改接收字母中的“reads”变量,对应一个动作。
此外,这个代码有一个控制伺服角度的“限制空白”。
AT代码的末尾有一个moveAll() void。我们选择使用这个函数,而不是ATif函数中更新伺服角度,因为这样每次循环开始/结束时,伺服角度都会更新,电机保持张力。
手臂有两种模式;正向模式是一个一个移动电机,逆模式是移动所有的伺服,从一个点坐标开始计算角度。
点保存功能
一个有趣的功能是点保存方法。它可以保存手臂位置并按顺序回放。AT正态模式下,代码记忆所有伺服器的角度值,而AT逆态模式下,代码记忆一个点的坐标。
操纵杆ATLCD上打印保存的点,并AT达到最大点数时发出警报(实际上是五个,最后加上home点),当它重置内存时。
逆运动学模式
该方法采用基于逆运动学的算法求出所有伺服角度,而不是直接求出。这个计算从坐标位置(x,y)和夹持点的方向开始。对于这个计算,我们使用几何方法。事实上,它是基于三角形的构造与余弦和正弦函数,我们可以计算出所有的角度,并将这个值转化为伺服角度。
1- G点的平移
首先我们要把G点平移到G'点来简化逆计算。G点的y也要向上平移93,因为原点与第一个关节重合。
2-直线和斜率
现AT我们可以计算从直角原点到G点的直线的斜率m。
3-圆交叉
然后我们可以画一个圆心为G'的圆,半径等于连杆3的长度。我们知道圆的方程,所以我们可以求直线的交点,ATB点。
对这两个方程进行化简,可以用二次解的方法求出Xb方程。我们可以通过对圆和直线方程的化简和集合来求出a b c的值。
现AT解二阶方程我们要取离原点最近的次值。我们用Yb值代替直线方程中的Xb。
然后用毕达哥拉斯公式计算原点b的线长。
4-三角形角
现AT我们可以画一个三角形,我们知道三角形的三条边,分别是“r”的长度,连杆1的长度和连杆2的长度。知道了这三条边,我们就可以用SSS(边对边)公式求出角度值。
5-Deltoid角度
然后我们要找到最后一个角,画出三角线就能找到最后一个角。
三角线由两条相等的三角形组成,我们知道这两条三角形的两条边(连杆2和连杆3)和邻角“delta”。计算对角线长度,我们可以计算A角我们就完成了第二个关节角。
6 .寻找关节角
为了AT一个伺服值中平移角度,我们必须减去和我们的角度。
•对于Θ1,我们将斜率的角度加上c^。
•对于Θ2,我们添加“a^”角和a^角,并减去90°,以找到垂直于link1和link2之间的角度。
•Θ3等于90°与角的相减。
•Θ4是角度和“伽马”角之和的减法,等于270°。
7-Servo转换
现AT我们必须直接ATservo2和4上写角度Θ2和Θ4,而对于伺服1和3,我们必须减去计算的角度为180°,因为伺服的方向相反。
使用该算法,我们可以改变x, y和握把角度值来移动手臂。所以手臂创造了一个垂直的直角平面,但是现AT还没有一个三维坐标空间,所以Z轴是基础伺服的旋转。
本文编译自hackster.io





