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

基于 Web 界面的 6 自由度机械臂远程控制:Arduino + PHPoC WiFi Shield

元件清单

元件数量
Arduino UNO1
PHPoC WiFi Shield for Arduino1
6 DOF 机械臂(6 个舵机)1
外部舵机电源(5V/6V,≥3A)1

系统架构

Web 界面交互设计

逆运动学几何计算(区域 A)

已知:基座固定点 C,用户目标点 D,连杆长 b=CB, a=BA, d=AD。假设 ∠B = ∠A = α,引入辅助点 E,推导二次方程求 α,再由余弦定理求 γ,最终得电机角度:

电机2角度 = δ + γ
电机3角度 = β = 180° - α
电机4角度 = β

详细推导见文中图示与公式。

Arduino 平滑运动算法

为使 6 个舵机同步到达,采用定步数插值:

stepNum = max_i(|cur[i] - dest[i]| / stepSize[i]);
每 20 ms 循环:
  for i=0..5:
    cur[i] += (dest[i] - cur[i]) / stepNum;
    限幅后 servo[i].write(cur[i]);
  stepNum--;

stepSize[] 为各电机单步角度(度),决定速度与平滑度。

核心代码

Arduino 端(RobotArmWeb.ino)

#include <Phpoc.h>
#include <Servo.h>

int angle_init[]   = {90, 101, 165, 153, 90, 120};
int angle_offset[] = {0, 11, -15, -27, 0, 137};
int cur_angles[6], dest_angles[6];
int angle_max[] = {180,180,160,120,180,137};
int angle_min[] = {0,0,0,20,0,75};
int dir[] = {1,1,1,1,1,-1};
int stepSize[] = {3,2,2,2,4,4};

Servo servo[6];
PhpocServer server(80);
int stepNum = 0;

void setup() {
  Serial.begin(9600);
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
  server.beginWebSocket("remote_arm");
  for(int i=0;i<6;i++) {
    servo[i].attach(i+2); // D2-D7
    servo[i].write(angle_init[i]);
    cur_angles[i] = angle_init[i];
  }
}

void loop() {
  PhpocClient client = server.available();
  if(client) {
    String line = client.readLine();
    if(line.length()) {
      // 解析 "a1,a2,a3,a4,a5,a6"
      int p1=-1, p2;
      for(int i=0;i<5;i++) {
        p2 = line.indexOf(',', p1+1);
        int ang = line.substring(p1+1, p2).toInt();
        dest_angles[i] = ang * dir[i] + angle_offset[i];
        p1 = p2;
      }
      dest_angles[5] = line.substring(p1+1).toInt() * dir[5] + angle_offset[5];
      // 计算步数
      stepNum = 0;
      for(int i=0;i<6;i++) {
        int dif = abs(cur_angles[i] - dest_angles[i]);
        int steps = dif / stepSize[i];
        if(stepNum < steps) stepNum = steps;
      }
    }
  }
  // 插值运动
  if(stepNum > 0) {
    for(int i=0;i<6;i++) {
      int delta = (dest_angles[i] - cur_angles[i]) / stepNum;
      cur_angles[i] += delta;
      cur_angles[i] = constrain(cur_angles[i], angle_min[i], angle_max[i]);
      servo[i].write(cur_angles[i]);
    }
    stepNum--;
    delay(20);
  }
}

Web 端(remote_arm.php)

包含 HTML5 Canvas 绘制机械臂实时姿态、触摸/鼠标事件处理、逆运动学解算、WebSocket 通信。完整代码约 400 行,关键函数:geometric_calculation()、event_handler()、update_view()、angles_change_notice()。需将 flywheel.png 上传至 PHPoC Shield 文件系统。

原理图

基于 Web 界面的 6 自由度机械臂远程控制:Arduino + PHPoC WiFi Shield需外接舵机电源,共地。

扩展建议

制造工艺

  1. Simple Pi Robot:用树莓派打造 2WD 自主巡航车
  2. Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
  3. 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
  4. 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
  5. Arduino UNO 自制循迹小车:从零构建自主巡线机器人
  6. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  7. Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
  8. LittleArm 2C:3D 打印 Arduino 机械臂 - STEM 教学专用,坚固易装
  9. 自主家庭助理机器人 O'nine - ROS + Alexa 语音控制 + 机械臂 + 麦克纳姆轮全向移动
  10. Intel Curie 加速度计驱动的体感触发灯光系统
  11. DIY 手势控制机械臂:基于 Arduino + 柔性传感器 + IMU + 蓝牙的六自由度仿生臂
  12. 适用于 Arduino 项目的智能室内导航机器人套件