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

Arduino - 通过网络控制手臂机器人

组件和用品

Arduino UNO
× 1
适用于 Arduino 的 PHPoC WiFi 扩展板
× 1
6DOF Arm Robot
× 1

关于这个项目

如果您是初学者,我建议您阅读以下教程:

  • Arduino - 电机
  • Arduino - 伺服电机
  • Arduino - 无线网络

1.演示

2. 用户界面

机械臂有6个电机。

  • A区:控制电机2、3、4(控制三个手关节)
  • B 区:控制电机 1(控制底座)
  • C 区:控制电机 5(控制夹具旋转)
  • D 区:控制电机 6(控制夹具)

3. 系统架构

4. 工作流程

客户端 (网络用户界面 - 用 Ja​​vaScript + HTML + CSS 编写)

当用户触摸或扫动手指(或点击或移动鼠标)时,我们可以获得坐标(x,y)。工作流程如下:

在A区的情况下,要计算电机2、3、4的角度,我们需要做一些几何计算 .您可以在本页末尾参考。

服务器端 (Arduino 代码)

收到客户的一组角度后,六个电机逐渐从当前角度移动到新角度。六个电机应同时移动并达到新的角度。在详细介绍如何控制所有电机之前,让我们先看看如何控制单个电机。假设我们要将电机从当前角度(angle)移动到新角度(new_angle)。由于电机速度很高,我们应该放慢速度。 为此,重复以下两个步骤,直到电机达到新的角度:

  • 小步移动电机。
  • 暂停一小段时间,然后再移动一步。

下图说明了当新角度大于当前角度时的上述方案:

Wherestep_num 是电机必须走的步数。 步骤和时间 是预定义的值。后两个决定速度和流畅度。 以上仅针对一台机器人。为了让机器人同时开始移动和到达目的地,我们可以这样做:六个电机走相同的step_num , 但是 step 每个电机的不同。所以我们必须选择step_num 在这个项目中是最大的。

一般来说,Arduino的工作流程如下:

5. 几何计算

让我们将机械臂计算成如下几何问题:

众所周知

  • C 是固定的
  • 一个已知点 - D 是来自用户的输入
  • 一个已知点——CB、BA、AD(分别用b、a、d表示)
  • 每个臂节的长度​​求: 角度 C、B、A 解决方案:
  • 假设角度 B 和 A 相同
  • 添加一些额外的点和线段

计算

  • 我们知道点 C 和 D => 我们可以计算出 DC 的长度(用 c 表示)
  • 我们也可以计算δ
  • 看看三角形 ABE,我们可以推断出 AE =BE 和 ∠E =π - 2α。
  • 所以:
  • 三角形 CDE 中的余弦定律:
  • 将(1)和(2)改为(3),我们有:

简化

  • 简化上述内容:
  • 既然知道了a、b、c、d,求解上面的二次方程,就可以计算出α的值了。 - 并且 β =π - α - 直到现在我们找到了 β,让我们找到 γ - BDC 和 BDA 三角形中的余弦定律:
  • 求解这组方程,我们可以计算出γ。
  • 因此,它们所需的角度为:(δ+γ)、β 和 β。这些分别是电机 2、3 和 4 的角度。

6. 源代码

源代码包含两个文件:

  • RobotArmWeb.ino :Arduino 代码
  • Remote_arm.php :Web 应用程序代码,上传到 PHPoC WiFi Shield 或 PHPoC Shield。 (请参阅本文中的说明。)

您还需要将图像文件 flywheel.png 上传到 PHPoC Shield。

适合初学者的最佳 Arduino 入门套件

如果您正在寻找 Arduino 套件,请参阅适合初学者的最佳 Arduino 套件


函数参考

  • Arduino - 伺服库
  • Servo.attach()
  • Servo.write()
  • Servo.writeMicroseconds()
  • Servo.read()
  • Servo.attached()
  • Servo.detach()
  • Serial.begin()
  • Serial.println()

代码

  • RobotArmWeb
  • remote_arm.php
RobotArmWebArduino
这是 Arduino 代码
#include #include int angle_init[] ={90, 101, 165, 153, 90, 120}; // 当电机直立时。 web中,电机直立时的角度为{0, 90, 130, 180, 0, 0};int angle_offset[] ={0, 11, -15, -27, 0, 137}; // 真实伺服电机和 webint cur_angles[] ={90, 101, 165, 153, 90, 120} 上的角度之间的偏移; // 六个电机的当前角度(度) int dest_angles[] ={0, 0, 0, 0, 0, 0}; // 目标角度int angle_max[] ={180, 180, 160, 120, 180, 137};int angle_min[] ={ 0, 0, 0, 20, 0, 75};int direction[] ={1, 1 , 1, 1, 1 ,-1};int angleSteps[] ={3, 2, 2, 2, 4 ,4}; //每个电机的移动步数(度)Servoservo1;Servoservo2;Servoservo3;Servoservo4;Servoservo5;Servoservo6;Servoservo[6]={servo1,servo2,servo3,servo4,servo5,servo6};PhpocServer服务器(80);PhpocClient 客户端;int stepNum =0;void setup(){ Serial.begin(9600); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("remote_arm");伺服1.附加(2); // 将引脚 2 上的伺服器连接到伺服器对象servo2.attach(3); // 将引脚 3 上的伺服器连接到伺服器对象servo3.attach(4); // 将引脚 4 上的伺服器连接到伺服器对象servo4.attach(5); // 将引脚 5 上的伺服器连接到伺服器对象servo5.attach(6); // 将引脚 6 上的伺服器连接到伺服器对象servo6.attach(7); // 将引脚 7 上的伺服连接到伺服对象 for(int i =0; i <6; i++)servo[i].write(angle_init[i]);}void loop() { PhpocClient client =server.available (); if(client) { StringangleStr =client.readLine(); if(angleStr) { Serial.println(angleStr); int 逗号Pos1 =-1; int 逗号Pos2; for(int i =0; i <5; i++) {commaPos2 =angleStr.indexOf(',',commaPos1 + 1); intangle =angleStr.substring(commaPos1 + 1,commaPos2).toInt(); dest_angles[i] =角度 * 方向[i] + 角度偏移[i];逗号位置 1 =逗号位置 2; } int angle5 =angleStr.substring(commaPos1 + 1).toInt(); dest_angles[5] =角度5 * 方向[5] + 角度偏移[5];步数 =0; // 分多个小步移动电机,使电机运动平稳,避免电机突然移动。下面是(int i =0; i <6; i++) { int dif =abs(cur_angles[i] - dest_angles[i]); int step =dif / angleSteps[i]; if(stepNum  0) { for(int i =0; i <6; i++) { int angleStepMove =(dest_angles[i] - cur_angles[i]) / stepNum; cur_angles[i] +=angleStepMove; if(cur_angles[i]> angle_max[i]) cur_angles[i] =angle_max[i];否则 if(cur_angles[i]  
remote_arm.phpPHP
此代码是网络应用程序。
Arduino - Arm Robot - Web

Arduino - 通过网络控制手臂机器人

WebSocket :null

示意图

需要为6台电机提供外部电源

制造工艺

  1. 简单的 Pi 机器人
  2. Arduino 控制中心
  3. 使用物联网远程控制机械臂
  4. 带伺服电机的机器人避障
  5. 线跟随机器人
  6. Arduino 加湿器控制
  7. Arduino - 通过串口向 Web 发送温度
  8. Littlearm 2C:构建 3D 打印的 Arduino 机械臂
  9. 自主家庭助理机器人
  10. 通过英特尔居里的运动敏感电路控制
  11. DIY Arduino 机械臂——由手势控制
  12. 超酷室内导航机器人