使用物联网开发工具Smart 制作Arduino机械臂控制程序

控制重点

  1. 使用物联网开发工具 Smart 连接机械臂,使用 Modbus TCP 通讯协议,利用网络发送指令给 Arduino mega2560 开发板
  2. 使用开源的 Modbus TCP 程序库,串接 Arduino mega2560、CNC Shield V3、A4988,并以此控制 42 步进马达。
  3. 连接电脑上的摄象头,直接拍摄平移式机械臂,即时运动影象。

运行展示

运行视频请点击下方链接查看。
https://www.ixigua.com/7133447547426701831

使用控制设备

序号零件名称数量
1Arduino Mega 2560 开发板2
242 步进电机4
3270° 舵机1
4CNC Shield V32
5A4988 步进电机驱动器4
6W5100 EtherNet 网络扩展板2
7网络摄像头(罗技C270i)1

使用工业通讯协定

  Modbus TCP,可换用 Modbus RTU、OPC UA、MQTT、RestAPI、WebSocket。

使用开发软体

  Smart物联网的精灵。软件控制的设计方案是出自于此。
在这里插入图片描述

零件连线

  基本的零件连线示意图如下。由于一块CNC Shield 最多支持三块A4988的独立驱动,故此处使用两块板来实现相应的功能。舵机用于控制爪子的开合,其余的步进马达分别控制四轴方向上的运动。

在这里插入图片描述

外壳打印

  使用3D打印制作外壳的材料。所需的素材文件会在下方的链接中提供。外壳打印完成后进行组装。

在这里插入图片描述
在这里插入图片描述

部分Arduino代码

#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
// 配合单轴采用之程序 以补足 CNC Shiel 只能支持 3轴的问题
// 采用 MyArduinoProjects Modbus TCP 程序库
// http://myarduinoprojects.com/modbus.html

#include "MgsModbus.h"
MgsModbus Mb;

// 设置网络IP位址 (网络扩充卡 MAC 可自行修改 +1 避免冲突)
byte mac[] = {0x90, 0xA2, 0xDA, 0x0E, 0x94, 0xB6 };     
IPAddress ip(192, 168, 3, 162);
IPAddress gateway(192, 168, 3, 1);
IPAddress subnet(255, 255, 255, 0);

int pos = 0;              // 设置 Servo 位置的变量
Servo myservo;            // 定义舵机变量
unsigned char i=0;

#define EN        8       // 步进电机使能端,低电平有效
#define X_DIR     5       // A轴 步进电机方向控制
#define X_STP     2       //  A 轴 步进控制

int arma=0;               // A轴行程 150mm 水平前进初始位置 所以最大可以走 600步 ,初始值取原点,也就是爪子最接近马达处
int larma=0;


// #include <Stepper.h>
#define STEPS 200  //定义步进马达每圈的步数

//steps:代表马达转完一圈需要多少步数。如果马达上有标示每步的度数,
//将360除以这个角度,就可以得到所需要的步数(例如:360/1.8=200)。
//螺杆行程是 2mm 代表转一圈 移动的距离 


/*
//函数:step    功能:控制步进电机方向,步数。
//参数:dir 方向控制, dirPin对应步进电机的DIR引脚,stepperPin 对应步进电机的step引脚, steps 步进的步数
//无返回值
*/
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
   digitalWrite(dirPin, dir);
   delay(50);
   for (int i = 0; i < steps; i++) {
      digitalWrite(stepperPin, HIGH);
      delayMicroseconds(1500);  
      digitalWrite(stepperPin, LOW);
      delayMicroseconds(1350);  
  }
}

void stepZ(boolean dir, byte dirPin, byte stepperPin, int steps)           // 转盘转动速度太快会抖动 所以放慢速度 用单独的函数
{
   digitalWrite(dirPin, dir);
   delay(50);
   for (int i = 0; i < steps; i++) {
      digitalWrite(stepperPin, HIGH);
      delayMicroseconds(12000);  
      digitalWrite(stepperPin, LOW);
      delayMicroseconds(10800);  
   }
}

void setup(){
   Serial.begin(9600);
   Ethernet.begin(mac, ip, gateway, subnet);                //启动网络
   Serial.println("网络已经开通"); 

   //设置要使用的寄存器位址
   //0 1 2 3 4 是 Holding 寄存器的顺序,其位址分别是10000,10001,10002,10003,10004
   // 添加寄存器   mb.MbData(i);   
  
   Mb.MbData[0] = 0;                                      // A轴行程 160mm 水平前进初始位置 转 200步移动 2mm 取中间值 

   pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);          //将步进电机用到的 IO 脚位设置成输出

   pinMode(EN, OUTPUT);
   digitalWrite(EN, LOW);                                   // 开启 CNC 开发板的马达启动功能
}
void loop(){
   // 读取数位寄存器的数值,
   arma=Mb.MbData[0];                                       // A轴 数值变大 爪子往前

   if (arma!=larma){
      if (arma<larma){
         step(true, X_DIR, X_STP, (larma-arma));            // A轴电机往后
      }
      else {
         step(false, X_DIR, X_STP, (arma-larma));           // A轴电机往前
      }
      larma=arma;
   }


   Mb.MbsRun();                                             //调用 Modbus      
}

参考资料

  上述提到所需的相关文件已放在Gitee:

  其中有包含一个后缀名为 sdb 的文件,这个文件是软件控制方案的工程文件。需使用物联网开发工具 Smart 打开。可在Gitee 项目中获取下载链接:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值