控制重点
- 使用物联网开发工具 Smart 连接机械臂,使用 Modbus TCP 通讯协议,利用网络发送指令给 Arduino mega2560 开发板
- 使用开源的 Modbus TCP 程序库,串接 Arduino mega2560、CNC Shield V3、A4988,并以此控制 42 步进马达。
- 连接电脑上的摄象头,直接拍摄平移式机械臂,即时运动影象。
运行展示
运行视频请点击下方链接查看。
https://www.ixigua.com/7133447547426701831
使用控制设备
序号 | 零件名称 | 数量 |
---|---|---|
1 | Arduino Mega 2560 开发板 | 2 |
2 | 42 步进电机 | 4 |
3 | 270° 舵机 | 1 |
4 | CNC Shield V3 | 2 |
5 | A4988 步进电机驱动器 | 4 |
6 | W5100 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 项目中获取下载链接:
-
物联网开发工具 Smart 产品介绍:https://www.isoface.cn/isoface/production/software/smart
-
物联网开发工具 Smart 产品说明:https://www.isoface.cn/isoface/doc/smart/main/