本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

自动焊接机械臂

发布时间:2022-05-16
分享到:

自动焊接机械臂

发布时间:2022-05-16
分享到:

当我在寻找机械臂的不同能力时,偶然想到了这个项目的想法,然后我发现有几个人的涉及涵盖了这个使用领域(自动焊接和焊接机械臂)。

其实我之前也有过做类似项目的经验,但是这次的项目非常有用和有效。

在决定它的形状之前,我看到了很多应用程序和其他项目,尤其是在工业领域,开源项目帮助我找到了合适的形状。

第 1 步:设计

起初我看到很多专业项目因为太复杂而无法实施,然后我决定让我自己的产品受到其他项目的启发,所以我使用了 Google Sketch up 2017 pro。每个部分都被设计成按特定顺序组装在一起。

在组装之前,首先需要测试零件并选择合适的烙铁,这是通过绘制一个虚拟精加工项目作为我的指导来实现的。

第 2 步:操作和安装

在工作期间,我遇到了一些我们必须宣布的障碍。

第一点是手臂太重,无法被小型步进电机支撑,我们在后续的激光切割打印中修复了这个问题。

第二个问题则是,由于模型是塑料材质的,旋转底座摩擦力大,动作不流畅。

之后我们提出的第一个解决方案是购买更大的步进电机,能够承受重量和摩擦,然后还重新设计了底座以适应更大的步进电机。

然后我采取了彻底改变基础设计的方法,将带有金属齿轮的伺服电机安装在齿轮机构中。

电压

电压方面的话,Arduino 板可以通过 DC 电源插孔 (7 - 12V)、USB 连接器 (5V) 或板的 VIN 引脚 (7-12V) 供电。通过 5V 或 3.3V 引脚提供电压绕过稳压器,我们决定从 PC 或任何电源购买​​支持 5 伏特的特殊 USB 电缆。

因此,步进电机和其他组件只需 5 V即可正常工作,并确保零件免受我们修复降压模块的任何问题。

降压模块是一个降压转换器(降压转换器)是一种 DC-DC 电源转换器,它降低从其输入(电源)到其输出(负载)的电压(同时提高电流)并保持稳定性或电压。

第 3 步:修改

经过一些修改后,我们通过减小臂尺寸改变了模型的设计,并为伺服电机齿轮制作了合适的孔,如图所示。

在测试伺服电机的过程中,它成功地将重物旋转了 180 度,因为它的高扭矩意味着一个机构能够处理更重的负载。伺服机构可以输出多少转动力取决于设计因素——电源电压、轴速等。

使用 i2c 也很好,因为它只使用两个引脚,并且您可以将多个 i2c 设备放在相同的两个引脚上。因此,例如,您最多可以在两个引脚上拥有多达 8 个 LCD 背包+LCD!但前提是您必须使用“硬件”i2c 引脚。

第 4 步:烙铁架或夹持器

夹具我们采用金属齿轮伺服电机固定,以承受烙铁的重量。

起初,我们遇到了一个障碍,那就是电机抖动和振动,直到我们找到了一个代码。因为并非所有伺服系统都具有完整的 180 度旋转,所以我们写了一个测试来确定机械极限在哪里。使用servo.write 微秒而不是servo.write ,因为它可以让你使用1000-2000 作为基本范围。许多伺服系统将支持超出该范围,从 600 到 2400。

servo.attach(9, 1000, 2000);
servo.write (constrain (angle, 10, 160)) ;

所以,我们尝试了不同的值,看看你在哪里得到了告诉你已经达到极限的嗡嗡声。然后只在你写作时保持在这些限制内。您可以在使用servo.attach(pin, min, max) 时设置这些限制

找到真正的运动范围,并确保代码不会试图将其推过终点站,constrain () Arduino 函数对此很有用。

第 5 步:编码

Arduino使用库环境可以通过使用库来扩展,就像大多数编程平台一样。库提供用于草图的额外功能,例如使用硬件或操作数据。在草图中使用库。

#include AccelStepper.h#include MultiStepper.h
#include Servo.h
#include Wire.h 
#include LiquidCrystal_I2C.h

步进电机代码:

#include "AccelStepper.h" 

// AccelStepper Setup
AccelStepper stepperX(1, 2, 3);   // 1 = Easy Driver interface
                                  // UNO Pin 2 connected to STEP pin of Easy Driver
                                  // UNO Pin 3 connected to DIR pin of Easy Driver
                                  
AccelStepper stepperZ(1, 5, 6);   // 1 = Easy Driver interface
                                  // UNO Pin 5 connected to STEP pin of Easy Driver
                                  // UNO Pin 6 connected to DIR pin of Easy Driver


AccelStepper stepperY(7, 8, 9);   // 1 = Easy Driver interface
                                  // UNO Pin 5 connected to STEP pin of Easy Driver
                                  // UNO Pin 6 connected to DIR pin of Easy Driver                                  

// Stepper Travel Variables
long TravelX;  // Used to store the X value entered in the Serial Monitor
long TravelZ;  // Used to store the Z value entered in the Serial Monitor
long TravelY;  // Used to store the Y value entered in the Serial Monitor

int move_finished=1;  // Used to check if move is completed


void setup() {
  
  Serial.begin(9600);  // Start the Serial monitor with speed of 9600 Bauds
  
// Print out Instructions on the Serial Monitor at Start
  Serial.println("Enter Travel distance seperated by a comma: X,Z ");
  Serial.print("Enter Move Values Now: ");

//  Set Max Speed and Acceleration of each Steppers
  stepperX.setMaxSpeed(500.0);      // Set Max Speed of X axis
  stepperX.setAcceleration(500.0);  // Acceleration of X axis

  stepperZ.setMaxSpeed(250.0);      // Set Max Speed of Z axis slower for rotation
  stepperZ.setAcceleration(250.0);  // Acceleration of Z axis

  stepperY.setMaxSpeed(250.0);      // Set Max Speed of Y axis slower for rotation
  stepperY.setAcceleration(250.0);  // Acceleration of Y axis
}


void loop() {

while (Serial.available()>0)  { // Check if values are available in the Serial Buffer

  move_finished=0;  // Set variable for checking move of the Steppers
  
  TravelX= Serial.parseInt();  // Put First numeric value from buffer in TravelX variable
  Serial.print(TravelX);
  Serial.print(" X Travel , ");
  
  TravelZ= Serial.parseInt();  // Put Second numeric value from buffer in TravelZ variable
  Serial.print(TravelZ);  
  Serial.print(" Z Travel , ");

  TravelY= Serial.parseInt();  // Put Second numeric value from buffer in TravelY variable
  Serial.print(TravelY);  
  Serial.println(" Y Travel ");
  
  stepperX.moveTo(TravelX);  // Set new move position for X Stepper
  stepperZ.moveTo(TravelZ);  // Set new move position for Z Stepper
  stepperY.moveTo(TravelY);  // Set new move position for Z Stepper
  
  delay(1000);  // Wait 1 seconds before moving the Steppers
  Serial.print("Moving Steppers into position...");
  }

// Check if the Steppers have reached desired position
  if ((stepperX.distanceToGo() != 0) || (stepperZ.distanceToGo() !=0) || (stepperY.distanceToGo() != 0)) {
    
    stepperX.run();  // Move Stepper X into position
    stepperZ.run();  // Move Stepper Z into position
    stepperY.run();  // Move Stepper y into position
    
  }

// If move is completed display message on Serial Monitor
  if ((move_finished == 0) && (stepperX.distanceToGo() == 0) && (stepperZ.distanceToGo() == 0) && (stepperY.distanceToGo() == 0)) {
    Serial.println("COMPLETED!");
    Serial.println("");
    Serial.println("Enter Next Move Values (0,0,0 for reset): ");  // Get ready for new Serial monitor values
    move_finished=1;  // Reset move variable
  }
}

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:AhmedAzouz,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论