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

使用 DIY Arduino SCARA 机器人进行激光雕刻

在本教程中,我将向您展示如何将我在之前的一个视频中构建的 DIY 3D 打印 SCARA 机械臂转换为激光雕刻机。您可以观看视频后面的视频或阅读下面的文章。

项目概览

SCARA 机器人有 4 个自由度,由 4 个 NEMA 17 步进电机驱动,并使用 Arduino 板进行控制。在原始视频中,我将 Arduino UNO 板与 CNC Shield 结合使用,但现在我们将 Arduino MEGA 板与 RAMPs 板结合使用。我们需要这种组合,因为我们将使用 Marlin 3D 打印机固件来控制机器人。

至于机械部分,我只需要用激光模块更换夹持机构。在这种情况下,我使用的是 5.5W 激光模块,足以进行雕刻。

这个 SCARA 机器人设置的一个很酷的功能是我们可以有更大范围的 Z 轴运动,因此我们可以激光雕刻更高的物体。

此外,考虑到机器人的占地面积小,工作区域非常令人印象深刻。它可以使用它前面的区域以及两侧的区域。我们实际上可以将其设置为使用机器人周围几乎整个 360 度作为工作区域。得益于开源 Marling 3D 打印机固件,我们可以做到这一点,该固件具有激光雕刻和 SCARA 机器人设置选项。

为了生成 G 代码,我使用了另一个开源软件 Inkscape 和一个名为 Inkscape-Lasertools 的插件。我们可以仅生成带有轮廓的 G 代码,也可以从同一矢量图像生成带有轮廓和填充的 G 代码,并且我们有各种选项,例如调整激光束、行进速度、填充速度、周长速度、激光开关命令,包括 PWM 控制激光等。

不过,现在我将引导您完成设置 SCARA 机器人作为激光雕刻机的整个过程。我们将看一下这款 SCARA 机器人的设计,如何根据我们的机器安装和配置 Marlin 固件,以及如何准备图纸和用于雕刻的 G 代码。那么,让我们开始吧。

设计和 3D 模型

下面是这个 SCARA 机器人的 3D 模型的快速浏览,如果您还没有看过我详细解释我如何构建它的原始教程,那么您可以了解它是如何工作的。

该机器人的设计方式使大部分零件都可以轻松进行 3D 打印。关节由 NEMA 17 步进电机驱动,在 GT2 皮带和一些合适的 3D 打印 GT2 滑轮的帮助下降低速度。机器人有4个自由度,但在这种情况下,我们只需要3个自由度,2个旋转到达工作区域的任意点,1个直线运动来调整激光的高度。

不会使用旋转末端执行器的第 4 个关节,但会连接激光模块。我制作了激光支架,使激光束位于第 4 轴的旋转中心,因此即使轴旋转也不会影响最终位置。

您可以找到并下载此 3D 模型,也可以在 Thangs 上的浏览​​器中进行探索:

从 Thangs 下载装配 3D 模型。

感谢 Thangs 对本教程的支持。

用于 3D 打印的 STL 文件:

赞助


我使用 3DEXPERIENCE SOLIDWORKS for Makers 设计了这个 SCARA 机器人,这也是该视频的赞助商。是的,你没听错。借助面向创客的 3DEXPERIENCE SOLIDWORKS,SOLIDWORKS 终于以极低的价格将其行业领先的设计工具带给了各类创客。

创客现在只需每年 99 美元即可使用最好的 SOLIDWORKS 设计工具,但对于我的观众,SOLIDWORKS 提供限时优惠,让您以更便宜的价格获得这些工具!

这是正确的。对于该视频的观看者,您可以立即以 20% 的优惠价格获得此捆绑包,其中包括 SOLIDWORKS 的云连接版本,以及基于浏览器的设计工具,如 3D Creator 和 3D Sculptor,售完即止!

您所要做的就是单击我的以下链接并创建您的免费 3DEXPERIENCE ID,这将允许您访问这个特别的 20% 折扣优惠 - 因此您可以从今天开始制作最好的。非常感谢 SOLIDWORKS 赞助和支持此类教育内容。

查看面向创客的 SOLIDWORKS

面向创客的 SOLIDWORKS 20% 折扣


安装激光模块

首先,我从用四个螺栓固定到位的机器人上拆下夹持机构。

用于控制夹持器伺服的线现在将用于控制激光模块。

我拥有的特定激光模块在 12V 下工作,并且可以使用 PWM 信号进行控制,只需两根线,接地和 VCC。为了连接激光器,我使用了模块附带的连接器,一个有 3 个引脚的连接器。左边的黑线是接地,中间是白线,在我的情况下是 VCC。我将两个公跳线连接器焊接到这些电线上,这样我就可以轻松地将它们连接到末端执行器的电线上。

然后我只需将连接器安装到位,将电线穿过支架的一个开口,并用两个 M3 螺栓固定激光模块。我使用四个 M4 螺栓将激光模块固定到机器人上。

接下来,正如我之前提到的,不是我在原始视频中用于控制机器人的 Arduino UNO 板,现在我们需要一个 Arduino MEGA 板并与 RAMPS 板组合。

首先,我们需要选择驱动程序的步进分辨率。当然,为了更平滑的运动,我们应该通过为每个步进驱动器添加三个跳线来选择尽可能高的分辨率。我用的是 A4988 步进驱动器,它有 16 步分辨率,但我们也可以使用 DRV8825 步进驱动器,它有 1/32 步分辨率。

然后我们可以将所有电线连接到位。我所有的电线都做了标记,所以我不会把它们弄乱。

SCARA 机器人激光雕刻机电路图

这是所有需要如何连接的电路图。

步进电机位于驱动器的正上方,用两条线常闭的限位开关分别位于每个轴的终点 S 和 - 引脚上。

为了控制激光模块,我们将使用在 3D 打印机设置中用于控制风扇的引脚 D9。该引脚具有 PWM 功能,因此我们可以用它来控制激光的强度。为了给所有东西供电,我们需要 12V 电源,最小电流为 3A。

您可以通过以下链接获取本项目所需的组件:

  • 步进电机 – NEMA 17………………
  • A4988 步进驱动器……………………..……
  • RAMPS 1.6 板…………………………..……
  • Arduino MEGA…………………….……..…………
  • 限位开关……………………………………。 亚马逊棒棒哒  / 速卖通
  • 直流电源…………………………. 亚马逊 / 棒棒哒  / 速卖通
  • 激光模块…………………………………… 亚马逊 / 棒棒哒 / 全球速卖通
  • 激光护目镜…………………….. 亚马逊 / 棒棒哒 / 全球速卖通

至于机械部件,可以查看原文。

一旦我按照说明连接了所有东西,我挤压了一点电线并覆盖了电子设备,这样一切看起来都很好而且干净。

完成组装

我还需要在我的 SCARA 机器人上更改一件事,以使其正常工作,那就是更改触发第二个手臂限位开关的时间。由于 SCARA 机器人将设置为右手工作,因此第二臂的归位需要处于 0 度,或与第一臂一致,同时能够向左旋转。为此,我简单地将一小块粘在臂关节上,以便在所述位置触发限位开关。

实际上,还有一个小细节我需要更改。原来的限位开关触发器干扰了手臂底部的一个螺母,因此手臂无法完全运动。

我只是简单地卸下了那个螺母,用螺纹插件替换它,这样当将零件固定到位时它就不会伸出。

就是这样。 SCARA 机器人现在可以作为激光雕刻机工作了,当然,首先我们需要将固件安装到 Arduino 板上。

另请参阅:带智能手机控制的 DIY Arduino 机械臂

使用 SCARA 机器人进行激光雕刻的 Marlin 固件

正如我所说,我将使用 Marlin 固件,它是 3D 打印机使用最广泛的开源固件之一,它还具有激光雕刻和 SCARA 机器人设置的选项。我们可以从其官网或 Github.com 下载 Marlin 固件。

要将 Marlin 固件安装到 Arduino MEGA 板上,我们将使用 PlatformIO IDE 而不是 Arduino IDE。由于 Marlin 固件庞大且复杂,Arduino IDE 有时可能会报错而无法编译。

PlarformIO 构建在 Visual Studio Code 编辑器之上,可以作为扩展安装。这意味着,首先我们需要安装 Visual Studio Code,然后在扩展管理器中搜索 PlatformIO 并从那里安装。

安装完成后,我们可以点击 Open Project 按钮,导航到我们下载并解压缩的 Marlin 文件夹,然后点击“Open Marlin”。

这会将所有 Marlin 文件加载到编辑器中,因此我们可以打开和编辑它们。我们根据机器设置进行所有调整的两个主要文件是 Configuration.h 和 Configuration_adv.h 文件。

实际上,在我们打开 Marlin 文件夹之前,我们应该先去 Github.com 上的配置存储库,从那里我们可以下载一些适合我们的预测试配置文件。在“Examples”文件夹中,我们应该转到“SCARA”文件夹,将这两个配置文件复制并粘贴到我们的 Marlin 文件夹中。

另请参阅:如何设置 GRBL &用 Arduino 控制数控机床

配置 Marlin 固件

因此,一旦我们用“SCARA”配置文件重新打开 Marlin 文件夹,我们就可以打开 Configuration.h 文件并根据我们的机器编辑一些参数。这里首先要选择我们拥有的SCARA机器人的类型。

/**
 * MORGAN_SCARA was developed by QHARLEY in South Africa in 2012-2013.
 * Implemented and slightly reworked by JCERNY in June, 2014.
 */
//#define MORGAN_SCARA

/**
 * Mostly Printed SCARA is an open source design by Tyler Williams. See:
 *   https://www.thingiverse.com/thing:2487048
 *   https://www.thingiverse.com/thing:1241491
 */
#define MP_SCARA

#if EITHER(MORGAN_SCARA, MP_SCARA)
  // If movement is choppy try lowering this value
  #define SCARA_SEGMENTS_PER_SECOND 100

  // Length of inner and outer support arms. Measure arm lengths precisely.
  #define SCARA_LINKAGE_1  228.15  // Arm 1 lenght - 228(mm)
  #define SCARA_LINKAGE_2 136.2    // Arm 2 lenght - 136.5(mm)

  // SCARA tower offset (position of Tower relative to bed zero position)
  // This needs to be reasonably accurate as it defines the printbed position in the SCARA space.
  #define SCARA_OFFSET_X    300       // (mm)
  #define SCARA_OFFSET_Y    150       // (mm)Code language: Arduino (arduino)

“MORGAN_SCARA”用于并行 SCARA 机器人,“MP_SCARA”用于串行 SCARA 机器人,就像我们现有的一样。这是基于 Tyler Williams 的开源设计,该设计在为正常笛卡尔系统生成的 G 代码上实现逆运动学。

在我之前的教程中,我已经解释了什么是反向运动学以及它如何与这个 SCARA 机器人一起工作,因此有关更多详细信息,您可以查看该教程。简而言之,通过逆运动学,我们计算了两个臂应该以什么角度定位以达到给定的 X、Y 坐标。逆运动学背后的数学是基于三角学的,其结果仅取决于两个臂的长度。

话虽如此,在这里我们需要输入机器人手臂的长度,在这种情况下,第一臂为 228 毫米,第二臂为 136.5 毫米。我们需要设置的下一个参数是工作台的零位。该值与 SCARA_OFFSET_X 和 Y 值一起输入,它是从塔或第一个关节相对于床零位置的距离。

还有一组参数需要根据我们的机器进行调整,那就是 X 和 Y 的 MANUAL_X_HOME_POS。这些值是机器人手臂末端执行器或激光在原始位置时的 X 和 Y 距离,相对到我们之前设置的床零位。为了得到这些值,我在 SOLIDWORKS 中做了一个简单的草图,两条线代表 SCARA 机器人的两条手臂。

从这里可以设置所需的床零位,并获取 MANUAL_X_HOME_POS 变量的值。

接下来,我们需要定义 endstop 连接器。在我们的例子中,我们为每个轴设置了一个挡块,它位于最小位置。

#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUGCode language: Arduino (arduino)

除此之外,我们还需要将 X_HOME_DIR 定义为 –1,这表示归位时止动点的方向。

// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1Code language: Arduino (arduino)

在这里,我们还应该检查是否所有 __MIN_ENDSTOP_INVERTING 变量都设置为“FALSE”。

然后我们需要调整 DEFAULT_AXIS_STEPS_PER_UNIT 值以匹配我们的机器。

#define DEFAULT_AXIS_STEPS_PER_UNIT   { 177.7777777, 142.2222222, 400, 93 }Code language: Arduino (arduino)

这些值表示程序应该向步进驱动器发送多少步以使电机移动一个单元,在这种情况下是关节旋转一度。以下是我为 SCARA 机器人计算这些值的方法。

NEMA 17 步进电机需要 200 步才能完全旋转,但由于我们使用的是第 16 步分辨率,这意味着我们需要向驱动器发送 3200 步才能使电机完成 360 度旋转。除此之外,对于第一个关节,我们有 20:1 的减速,这意味着我们需要 64000 步才能完全旋转。如果我们将此值除以 360,我们将得到数字 177.777,这实际上是程序需要发送给驱动程序以将关节旋转一单位或一度的步数。

第二个臂的减速比为 16:1,因此该值为 142.222。对于 Z 轴,我们有一个螺距为 8 毫米的丝杠,这意味着电机旋转一整圈将产生 8 毫米的线性监控。这里的一个单位是一毫米,所以我们需要将 3200 步除以 8,所以我们得到 400 的值,即 Z 轴移动一个单位或一毫米所需的步数。这里的第四个值是用于挤出机步进的,但由于我们这里没有任何挤出机,我们不必更改它。

步进电机的方向取决于我们连接电线的方式。如果我们弄错了,我们可以通过将 INVERT_X_DIR 变量设置为 TRUE 来反转线路或在软件中更改它。

// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR falseCode language: Arduino (arduino)

为了让这个 Marlin 固件正常工作,我们应该再做一些更改。由于 Marlin 主要是经典笛卡尔式打印机的固件,它的 SCARA 模式有一些小错误,在我制作这个项目时还没有解决。以下是我为使其正常工作所做的更改。

在 scara.cpp 的第 75 行,我将 MORGAN_SCARA 替换为 MP_SCARA。在 motion.cpp 中,我不得不注释第 1716 和 1717 行,在 cofiguration.h 中注释 VALIDATE_HOMING_ENDSTOPS,在 configuration_adv.h 中取消注释 QUICK_HOME。

实际上,即使进行了这些更改,归位仍然无法 100% 正常工作,但我将解释我用来使其工作的解决方法。

尽管如此,现在我们可以单击位于编辑器左下方的上传按钮,Marlin 固件将安装到 Arduino 板上。您可以下载这个特殊的 Marlin 固件,其中包含我为在下面使用这个 SCARA 机器人所做的所有更改,或者当然,您可以从 Github.com 下载原始 Marlin 固件,并按照我的说明自行进行所有更改。

控制软件 - Rapetier-host

好的,所以一旦我们安装了 Marlin 固件,现在我们需要一个用于控制机器人并向其发送 G 代码的计算机程序。有很多选择,但我选择使用流行的 3D 打印软件 Rapetier-host。我们可以免费下载和使用这个软件。安装完成后,我们可以进入 Config> Printer Settings 并在此处调整几项内容。

我们应该选择我们的 Arduino 连接到的 COM 端口,并选择我们在 Marlin 固件中设置的波特率。在打印机形状选项卡中,我们应该设置 X 和 Y 最大值以及打印机区域。

应用这些设置后,我们可以单击“连接”按钮,软件应连接到我们的 SCARA 机器人。然后我们可以进入手动控制点击,从这里尝试移动打印机。

请注意,当按下 X 或 Y 箭头时,机器人可能会表现得很奇怪,因为它会立即执行逆运动学,并且即使只按下一个箭头也可能会移动双臂。

然而,为了让机器人工作,我们应该先回家。在我们点击主页按钮之前,我们应该手动将关节靠近限位开关。

当我们单击主页按钮时,机器人应该开始向限位开关移动。实际上,第二个臂将开始向其限位开关移动,而第一个臂应该向相反方向移动。一旦第二个臂或 Y 轴到达其限位开关,第一个臂或 X 轴也将开始向其限位开关移动。到达 X 限位开关后,机器人将前往 Z 限位开关。

因此,归位完成后,我们应该能够开始雕刻或手动移动机器人在其工作区域周围。但是,如果我们立即尝试做任何事情,由于某种原因,机器人会行为不端并且会做出奇怪的动作。为了避免这种奇怪的行为,在归位后我们只需断开机器人与软件的连接,然后重新连接 .

现在我们可以手动移动或雕刻,机器人将正常工作。这可能是 Marlin 固件中的一个错误,它存在是因为此固件中的 SCARA 模式没有得到很好的支持,没有太多的兴趣。

不过,如果我们发送 G 代码命令 G00 X0 Y0,机器人应该会回到零位,即我们在 Marlin Configuration.h 文件中设置的位置。

然后我们可以通过发送 M106 S10 命令来激活激光。 S 后面的值可以是 0 到 255,实际上是 PWM 控制激光功率从 0 到 100%。因此,我们在这里使用 S10 的值,这样它就不会燃烧任何东西,但它会可见,这样我们就可以看到零位并调整激光的焦点。

可以通过旋转底部的激光透镜手动调节焦点,同时它取决于它与工件之间的距离。建议设置 5cm 左右的距离并调整焦距,直到得到尽可能小的点。

使用 SCARA 机器人进行激光雕刻

为了校准机器,最好先雕刻一个简单的方形,这样我们就可以看到它是否正常工作。

在我的第一次尝试中,正方形的位置和方向不正确,这是因为我为 MANUAL_X_HOME_POS 变量设置了错误的值。一旦我纠正它,方形就接近它应该的样子了。

所以,我加载了我的标志的 G 代码,并设置机器人来雕刻它。

老实说,看着这个 SCARA 机器人充当激光雕刻机真是太酷了,但请注意,我们必须使用激光护目镜 这将保护我们的眼睛免受激光紫外线的伤害,因为它非常危险。另外,我们应该使用安全呼吸器面罩 并且在开放空间或通风良好的房间内工作,因为激光雕刻时产生的烟雾也对我们的健康有害。

尽管如此,徽标雕刻效果很好,但我注意到它并不完全是方形的。

因此,我重新开始雕刻简单的方形,以找出导致问题的原因。我意识到问题在于手臂长度的尺寸。由于机器人不是那么僵硬,当手臂伸展时,手臂本身的重量会使机器人向前倾斜一点。这会导致手臂的实际尺寸或位置有点偏离。

在进行了数十次测试后,我最终将第一臂的长度值从 228 调整到 228.15 毫米,将第二臂的长度值从 136.5 调整到 136.2 毫米。这给了我最准确的结果,现在方形是正确的。但是,根据打印的位置,手臂是否完全伸展,精度仍然会有所不同。

为激光雕刻生成 G 代码

最后,让我向您展示我是如何准备图纸并生成用于激光雕刻的 G 代码的。为此,我使用了 Inkscape,它是一款开源矢量图形软件。

这里首先我们需要将页面大小设置为我们工作区域的大小。例如,我将向您展示我是如何为激光雕刻准备 Arduino 徽标的。

我下载了 Arduino 徽标的图像并导入到 Inkscape。使用 Trace Bitmap 功能,首先我们需要将图像转换为矢量格式。我们只能从矢量形状生成 G 代码,为此我使用了一个名为 Inkscape-Lasertools 的插件。我们可以从 Github.com 下载这个插件,我们可以通过从 zip 文件中复制文件并将它们粘贴到 Inkscape 扩展目录中来安装它。

所以,一旦我们安装了插件,我们可以去 Extensions>Lasertools 打开它并使用它来生成一个 G 代码。使用此插件可以设置和调整几个选项。当我们将激光器连接到用于控制风扇的 D9 引脚时,我们可以通过发送 M106 命令来激活激光器。

我们可以选择 G 代码是否只包含形状的轮廓或闭合循环上的填充。我们可以设置激光行进速度、激光填充速度和周边速度。

在选择填充时,如果我们想降低填充区域的激光强度,可以在 M106 命令中添加 PWM 值来设置激光强度,例如 M106 S128 为 50% 的激光功率。如果我们将激光功率保持在 100%,但增加填充区域的行进速度,我们可以达到类似的效果。所以,这些实际上是我们应该玩的设置,看看什么最适合我们。

在 Preferences 点击我们可以选择“Remove tiny infill paths”,在 Bounding Box 选项卡中我们可以选择“Generate G-Code for bounding box preview”。此功能非常有用,因为它会生成将要进行绘图的区域的预览 G 代码,因此我们可以精确定位我们的工件。

好的,一旦我们生成了 G 代码,我们就可以将它加载到 Repetier-Host 程序中。由于这不是 3D 打印,而只是旅行动作,我们应该选中“显示旅行动作”复选框来预览我们的 G 代码。

我们终于可以点击“打印”按钮,我们的 SCARA 机器人将激光雕刻工件。我已经说过了,看着这台 SCARA 机器人激光雕刻很满足,我们可以用它激光雕刻很多东西。

A good feature is that it has adjustable Z-axis which means we can laser engrave taller objects, like for example, this wooden box for my Forstner bits. I engraved my logo on the front, and a text “Forstner bits” on the back of the box.

Here’s an example of engraving the same vector shape, a batman silhouette in this case, with just contours and with infill on closed loops.

Of course, when engraving with infill the time needed to finish the job is much longer but also the final appearance is much better. 

Finally, let me show you how I engraved this huge drawing with area of 600x450mm with this SCARA robot.

I placed the robot on top of the work piece so it can reach the front and the two sides. I manually adjusted the work piece and the robot to be in middle and parallel to each other.

In the Marlin firmware I set the zero position to be at the bottom left corner of the work piece, which is 300mm away from the robot in X direction and 150mm in Y direction. We should mind the signs when defining these values. According to this I also changed the MANUAL_X and Y_HOME_POS variables.

After uploading the firmware with these new values, I homed the robot as explained earlier and send the laser to zero position. Then I activated the laser, so I can further adjust the work price orientation of needed.

By sending G01 commands, which do straight lines I could check and adjust the work piece to be position properly. 

Now as for preparing the G-code for this engraving I made a template of with this configuration of the work piece and the robot in Inscape. From here I can see where the robot can reach with the laser and according to it modify the drawing.

For the drawing, I downloaded an image and converted to vector image by using the Trace Bitmap tool.

Then I rescaled and position the image as I wanted, and using the Erase tool I deleted the areas where the robot is and the area which is outside the robot reach.

Then I generated the G-code let the machine do its job. It took 4 hours to laser engrave this drawing.

 

Once it finished, I wanted to fill the empty area where the robot was. For that purpose, I reposition the robot and the work piece, as well as changed the Marlin parameters so that the new work area of the robot is this empty space on the work piece.

Overall, this method requires some work for setting it up, but still it works great. I really like how this engraving turned out. 

Wrap up

To wrap up, although there were some problems with the firmware, I managed to find workarounds to them get this SCARA robot working as laser engraver. If we take a closer look to the engraving, we can see that it’s far from perfect.

The robot is not that rigid and has some backlash, and therefore we cannot get precise and smooth movements. However, the things we learned in this tutorial can be implemented in any SCARA robot so you can definitely get better results. 

I hope you enjoyed this tutorial and learned something new. Feel free to ask any question in the comments section below and check my Arduino Projects Collection.


制造工艺

  1. DIY 最简单的 IV9 Numitron 时钟与 Arduino
  2. 带伺服电机的机器人避障
  3. 使用 Arduino 和 Android 设备控制 Roomba 机器人
  4. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  5. MobBob:由 Android 智能手机控制的 DIY Arduino 机器人
  6. 带旋转编码器的DIY简易测量轮
  7. 带夏普 GP2Y1010AU0F 传感器的 DIY 空气质量监测仪
  8. 带 WS2812 LED 灯条的 DIY Arduino 1D 乒乓球游戏
  9. DIY Arduino 机械臂——由手势控制
  10. 使用 Android 应用程序控制 Arduino 机械臂
  11. 用 Arduino Nano 制作吃饭机器人 |金螺丝
  12. HID-Compliant UPS with Arduino