开源改变世界

激光和 grbl 实验 #492

推推 grbl 2年前 (2022-10-30) 377次浏览 0个评论
关闭
alpharesearch 打开了这个问题 on 16 Sep 2014 · 144 条评论
关闭

激光和 grbl 实验第492章

alpharesearch 打开了这个问题 on 16 Sep 2014 · 144 条评论

注释

激光和 grbl 实验 #492
贡献者

阿尔法研究 评论 on 16 Sep 2014

就像这里的大多数评论一样,这不是问题,但我想获得一些意见并提供一些反馈。
为了玩一点,我确实在我的 ShapeOko+grbl 上安装了一个 2W 蓝色激光+MOSFET,它正在工作。
我确实为可变主轴销设置了它,但一开始并没有注意到最小/最大 RPM 设置(我想我应该阅读所有评论)。这会引起一些混乱,因为我期望 8 位作为默认值,而不是 0-1000。
在改变激光强度时我确实注意到了一些停顿,但我想 MINIMUM_JUNCTION_SPEED 应该对此有所帮助(什么值对激光来说是一个好的开始?)。
现在我的主要问题是激光设置还有其他重要的设置吗?

激光和 grbl 实验 #492
成员

尚尼特 评论 on 16 Sep 2014

@alpharesearch: 有很多你必须改变的,它会涉及一些编码。一方面,Grbl 假设您使用的主轴需要在继续之前达到最高速度。因此,改变激光强度时的驻留。更改最小结速度不应该有任何影响。它会一直存在。

制作 LazerBlade 的DarklyLabs人员已经完成了您想要做的事情。他们使用的是 Grbl 的修改版本,但它是通过 MIT 许可证封闭源代码的。要执行此类操作,您基本上必须通过规划器和步进算法保留主轴速度设置。在执行规划器块时,您需要即时更新主轴 PWM。实现起来并不难,但也不是微不足道的。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 on 16 Sep 2014

它已经很好地与 CNC 设置配合使用。此次升级不到 100 美元,安装和调试仅需 2 小时。这是一个有趣的周末项目,它为 ShapeOko 添加了更多选项。
感谢您提供有关 LazerBlade 的提示。至少在他们的 Kickstarter 常见问题解答中,有一个声明说“硬核黑客”将能够编译固件。我猜是因为产品还没有发布固件又名 grbl 还没有发布。
@chamnit:我不想维护自己的版本并且必须向后移植,您是否接受将其添加为编译时间选项但具有在 CNC 和激光模式之间切换选项作为设置的补丁?最后,我希望能够在路由器和激光之间即时切换。

激光和 grbl 实验 #492

@alpharesearch: 您可能对 Shapeoko 论坛中的这个主题感兴趣。
http://www.shapeoko.com/forum/viewtopic.php?f=24&t=4203

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 16 日

@PicEngraver感谢您的链接!这些版画非常漂亮,人们用 ShapeOko 做什么总是让我感到惊讶!
我猜想用这种方法 Z 轴控制激光的功率。新轴会比主轴速度更有意义吗?还是一个 M 命令在真正的 Z 轴和激光之间切换?我想这将允许激光功率的插值,我想这用于雕刻很多?
到目前为止,我只是在测试切割纸和一种塑料“雕刻”,并没有过多考虑将灰度图片雕刻到木头上。
感谢您迄今为止的所有输入!

激光和 grbl 实验 #492

@PicEngraver: 很狡猾!一个问题。您是否观察到 Z 轴移动与特定点的预期激光功率之间的任何滞后?

@alpharesearch:我愿意为 Grbl 添加实时主轴控制,但我认为它会比看起来更复杂。至少做对了。就个人而言,我不喜欢在已发布的命令之外添加新的 g 代码命令。你最终会得到像 Marlin 这样的东西,其中有几十个很难学习的专用 g 代码,你必须为它们定制你的程序。CAM 程序也不知道这些代码是什么,因此您每次都必须手动修改它们。

一个想法是创建一个 Grbl$命令或设置来控制主轴输出状态,或者在每次主轴更改时暂停(也可能是延迟设置),或者在实时更新 PWM 时不暂停。像这样的东西需要进入下一个版本的 Grbl。我对如何实现它有一些想法,但它需要对规划器进行一些重构以及如何处理块。不过,我需要再考虑一下。现在,我可能建议只分叉并编写自己的实现。

激光和 grbl 实验 #492

@alpharesearch: 谢谢!是的,这是我几年前使用连接到 Z 轴的 MA3 磁轴编码器开发的即时可变激光强度 8 位照片雕刻工艺。使用 Z 轴可以让我根据材料高度将激光移动到正确的焦点。

我从使用 Mach3 的 CNC 路由器开始,现在在 Arduino、9g grbl 和 Shapeoko 2 上进行测试。感谢 Sonny 所做的所有开发工作!

我更喜欢使用 MA3,因为它为我提供了 10 位分辨率的变化 0-5 模拟电压到 8 位 Z 轴深度设置中的调制。我用的是Z0。将 PicLaser Lite 或 PicEngrave Pro 5 beta 图像中的 Z-.0256 设置转换为我使用的 gcode 程序。

US Digital 确实制作了这些编码器的 10 位和 12 位 PWM 版本,但我从未尝试过。我觉得模拟是调制驱动器以控制激光二极管的不同强度的最佳方式。

@chamnit:没有我可以检测或观察到的滞后。我必须小心不要过度锐化图像并保持进给率适中(大约 60IPM),这样 Z 轴步进器就不会松动任何步骤。我将所有三个轴上的加速度设置为 1000,毫米/秒,连接偏差设置为 0.010 毫米。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 19 日

我在模拟器中有一些工作,请参阅情节屏幕截图:http ://alpharesearch.de/?p=259
@chamnit我听从了您的建议,并将主轴信息添加到了规划器块中。现在步进准备缓冲功能可以设置主轴。我可以用 $40=0 切换到我们现在拥有的,$40=1 切换到新的激光模式。我确实开始添加编译时#if 语句(请参见链接上的示例)……但我还没有完成那部分。

激光和 grbl 实验 #492

做得很好

激光和 grbl 实验 #492

@alpharesearch: 很好!我很高兴您能够如此快速地运行它并且看起来它正在工作。

不过有几件事:

  • 从技术上讲,准备缓冲区功能不应该设置主轴。步进 ISR 应该作为直接 PWM 时序(OCR?)寄存器更新来执行此操作,但它们之间只有 50 毫秒的差异,所以我认为您在实践中不会真正注意到它。我想在判断之前我必须看看你是如何实现一切的。:)
  • 另一件事是更改所有编译时选项的函数调用的专用#defines 开始变得非常混乱。我认为始终将这些数据、主轴速度和行号传递给 mc_line 和 planner 函数是安全的。相反,定义只启用和禁用内存要求和它用来工作的代码。

否则,看起来不错!

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 20 日

我从谷歌代码中分叉了一个图像雕刻程序,并做了一些改动以将 Z 轴映射到 S 值。这是代码:https ://github.com/alpharesearch/imagetolaser ,这是模拟的屏幕截图:http ://alpharesearch.de/?p=267

@chamnit: 谢谢。是的,对于所有传递这些值的 mc 和 planner 函数,#defines 开始变得越来越大。我不是一个 AVR 人,我不知道节省内存的所有技巧,但如果你认为这会正常工作,那将使代码更具可读性。如果不使用这些值,编译器不应该不小心吗?我想这就是你在暗示的?
我只是使用 prep 缓冲区函数作为概念证明(我没有找到更好的地方),我现在只是调用了现有的主轴函数。但我同意将它尽可能靠近块的开头。

激光和 grbl 实验 #492

PicLaser Lite 将根据图像的色调生成 S 命令 gcode 值,以控制激光雕刻图像的各种 PWM 输出。 http://www.picengrave.com/PicLaser%20Lite.htm

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 20 日

@PicEngraverToo我使用 Linux……但如果你能发布一个邮票大小的雕刻 g 代码文件,我想用新固件对其进行测试。只有 XY 动作和 S0 到 S255 来设置 pwm。谢谢你的帮助。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 on 20 Sep 2014

@PicEngraverToo:谢谢,我确实用 grbl 模拟器对其进行了测试,我可以看到一个戴着帽子的女人。它很小,对吗?

@chamnit:我将它从 ISR 的准备中移出,我可以看到很大的不同。但是我仍然认为还有改进的空间。但至少现在我用新的快速和旧的慢速方法得到了相同的结果。但仍有一个非常小的偏移量。我也需要在真正的微控制器上进行测试。

激光和 grbl 实验 #492

@alpharesearch: 你是对的。尺寸为 12.7 毫米 X 12.7 毫米,X 和 Y 步距为 0.254 毫米。我首先以 25.4mm X 25.4mm 的尺寸生成了它,但有大约 100,000 行代码,我不知道如何附加文件。新手来了 :-) 在我弄清楚这一点后,我可以生成一个更大的文件供您测试。

激光和 grbl 实验 #492

@alpharesearch:好的,这里有一个更大的S命令代码供您测试。它的长度超过 700,000 行。

http://picengrave.com/downloads/MiscDownloads/Transportation680.txt

激光和 grbl 实验 #492

@alpharesearch: 惊人的。这方面进步很大!:)

至于定义,我检查了编译器是否忽略了传递给函数的未使用变量。它没有,但在这一点上,我认为保存每个字节并不重要,因为我们很快就会转向功能更强大的处理器。更重要的是代码库 IMO 的可读性。现在保持原样,但我将开始研究传递 gcode 解析器结构,这将需要对代码进行一些重构。

无论如何,让我们保持在循环中!我很喜欢你如何使用 grbl_sim 来完成这一切,并获得 Grbl 正在做的那些伟大的可视化!

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 21 日

@PicEngraverToo: 现在这个文件运行很慢。是否可以选择仅具有整个 S 值,而不是仅具有 S69.56 的 S69.56。PWM 只有 8 位,我确实将 0 映射到 255,所以任何小数位都不重要。如果 S 值没有变化,则不需要处理。

@chamnit:当我将变量复制并粘贴到所有函数时,我也在考虑一个结构……
这是一张来自一些纸板的照片(看起来纸板烧得太快而且更像是数字 – 剩下的不多了灰度部分):
http ://alpharesearch.de/wp-content/uploads/2014/09/IMG_20140920_121713.jpg
在照片上,左右两边每隔一行都有一些偏移。我不知道为什么,但我确实在模拟器中用主人重新测试了这个,没有我的修改,我可以看到相同的偏移量。我一直认为这是因为我没有在正确的时间更改 S 引起的(在我的代码中,在 IRS 中进行主轴更新之前,这个偏移量更糟)……但是因为这在硬件和模拟器中以及在新旧版本我确定这是代码中的内容,而不是我的机器中的内容。我确实在模拟中看到了同样的情况,只有一种方式(我使用 G0 返回 X0)。这可能与 PWM 的设置/工作方式有关吗?

激光和 grbl 实验 #492

@alpharesearch: 我很快看了你的源代码。如何实现主轴控制并不完全正确,因为您正在调用主轴运行()。该函数执行的许多额外内容与步进 ISR 不兼容。相反,我会创建一个单独的函数,只在 ISR 中设置 PWM OCR 寄存器。执行起来非常快。如果可能的话,应该先验地计算正确的 OCR 值,但现在没有它你可能会很快让它工作。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 21 日

@chamnit感谢您的输入!我能够将 run 函数分开并在 prep 函数中移动计算,并且只在 ISR 中设置位。

这是来自 grbl 模拟器测试的日志,其中只有 ISR 中的 OCR:

# block number 0
   1.002666950225830 0, 0, 0, 0But there are more bits than just OCR...
   ...
   1.760000109672546 182, 0, 0, 0
   1.770000100135803 187, 0, 0, 0
   1.780000090599060 192, 0, 0, 0
   1.786611795425415 195, 0, 0, 0
# block number 1
   1.790000081062317 197, 0, 0, 0
   1.800000071525574 201, 0, 0, 0
   1.810000181198120 206, 0, 0, 0
   1.820000052452087 212, 0, 0, 0
   1.830000042915344 217, 0, 0, 0
   1.840000033378601 222, 0, 0, 128
   1.850000023841858 227, 0, 0, 128
   1.860000014305115 232, 0, 0, 128
   1.870000004768372 238, 0, 0, 128
   1.880000114440918 243, 0, 0, 128
   1.890000104904175 249, 0, 0, 128
   1.900000095367432 254, 0, 0, 128
   1.910000085830688 260, 0, 0, 128
  ...
   2.130000114440918 399, 0, 0, 128
   2.133105516433716 401, 0, 0, 128
# block number 2
   2.140000104904175 406, 0, 0, 128
   2.150000095367432 413, 0, 0, 128
   2.160000085830688 420, 0, 0, 128
   2.170000076293945 427, 0, 0, 128
   2.180000066757202 434, 0, 0, 128
   2.190000057220459 442, 0, 0, 255
   2.200000047683716 449, 0, 0, 255
   2.210000038146973 456, 0, 0, 255
   2.220000028610229 463, 0, 0, 255
   2.230000019073486 470, 0, 0, 255
 ...
   2.490000009536743 633, 0, 0, 255
   2.492191553115845 634, 0, 0, 255
# block number 3
   2.500000000000000 638, 0, 0, 255
   2.510000228881836 643, 0, 0, 255
   2.520000219345093 649, 0, 0, 255
   2.530000209808350 654, 0, 0, 255
   2.540000200271606 659, 0, 0, 0
   2.550000190734863 664, 0, 0, 0
   2.560000181198120 669, 0, 0, 0
   2.570000171661377 674, 0, 0, 0
   2.580000162124634 679, 0, 0, 0

我不确定模拟器中的块编号有多精确,但我猜(或希望)这是真的。当然,我得到的错误越多,进给速度越快。但最让我感到惊讶的是,更新看起来像是落后了。我期待在新区块开始之前更喜欢更新?

这是我用来测试的g代码

G0 X0.00 Y0.00
M3 S0
F4000
G1 X2.50 S0
G1 X5.00 S128
G1 X7.50 S255
G1 X10.0 S0

G0 X0.00 Y1.00
G1 X2.50 S0
G1 X5.00 S128
G1 X7.50 S255
G1 X10.0 S0
...
M5
激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 22 日

@PicEngraverToo:感谢您的文件…如果这是相同的数据,它看起来像剃掉小数位节省了 1.9MB…如果相同的 S 值没有改变,主版本中的 g 代码解析器现在可以跳过. 这使得旧代码中的速度更快,因为 S 中的更改会触发整个缓冲区每次都被清空……

激光和 grbl 实验 #492

嗨,
此信息不适合我!:-(

我的问题与齿隙和车床夹头正时有关。

谢谢特里
_

从三星移动发送

– – – – 原始信息 – – – –
来自:Markus Schulz notifications@github.com
日期:22/09/2014 00:24 (GMT+00:00)
致:grbl/grbl grbl@noreply.github.com
主题:回复:[grbl] 激光和 grbl 实验(#492

@PicEngraverToo:感谢您的文件…如果这是相同的数据,它看起来像剃掉小数位节省了 1.9MB…如果相同的 S 值没有改变,主版本中的 g 代码解析器现在可以跳过. 这使得旧代码中的速度更快,因为 S 中的更改会触发整个缓冲区每次都被清空……


直接回复此邮件或在 GitHub 上查看。

激光和 grbl 实验 #492

@alpharesearch:(如何)根据运动速度调整激光功率?或者假设激光以恒定速度移动是否足够好?S 值不应该调整“每毫米的激光能量输出”和 grbl 管理激光输出的上升/下降与加速/减速和“地速”同步吗?

@chamnit:还记得我们关于“流式 S 值”的讨论吗?我非常喜欢在更新主轴值时不必总是清空缓冲区的想法。对于正常的 cnc 操作,我们必须提供一种方法让机器等待主轴达到所需的转速…可能取决于变化率:如果变化小于 10%,则无需等待,否则每 1000rpm 等待 1 秒…

@PicEngraverToo: 顺便说一句,你不能把“X …”压缩成同样的X值吗?应将数据/文件大小再减少约 40%。

...
X0 Y0 S98
Y0.127 S66
Y0.254 S75
...
Y95.123 S143
X0.127 Y95.123 S103
Y94.996 S46
Y94.869 S58
...
激光和 grbl 实验 #492


,我不明白为什么我会收到这封电子邮件!
一切都非常有趣 :-)
2014 年 9 月 22 日 09:06,“Markus Schorer” notifications@github.com写道:

@alpharesearch https://github.com/alpharesearch:(如何)
根据运动速度调整激光功率?
或者假设激光以恒定速度移动是否足够好?S 值不应该
调整“每毫米的激光能量输出”和 grbl 管理激光输出的上升/下降
与加速/减速和“地速”同步吗?

@chamnit https://github.com/chamnit:还记得我们
关于“流式 S 值”的讨论吗?我非常喜欢
在更新主轴值时不必总是清空缓冲区的想法。对于正常的 cnc 操作
,我们必须提供一种方法让机器等待主轴
达到所需的 rpm,但可能取决于变化率:
如果变化小于 10%,则无需等待,否则每 1000rpm 等待 1 秒…

@PicEngraverToo https://github.com/PicEngraverToo:顺便说一句,你
不能压缩掉“X …”以获得相同的 X 值吗?应将
数据/文件大小再减少约 40%。


X0 Y0 S98
Y0.127 S66
Y0.254 S75

Y95.123 S143
X0.127 Y95.123 S103
Y94.996 S46
Y94.869 S58


直接回复此电子邮件或在 GitHub
#492(评论)上查看。

激光和 grbl 实验 #492

@samsungite:然后停止评论每个帖子并“取消关注”这个项目。

激光和 grbl 实验 #492

嗨,我为我的无知道歉 :-)
它非常有趣,所以我还不会辍学 :-)
2014 年 9 月 22 日 09:58,“Markus Schorer” notifications@github.com写道:

@samsungite https://github.com/samsungite:然后停止评论
每个帖子并“取消关注”这个项目。


直接回复此电子邮件或在 GitHub
#492(评论)上查看。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 22 日

@mschorer:我根本不处理它,现在我只是在新块启动时设置 PWM 寄存器,但根据速度在规划器中处理这些值可能是个好主意。

对于激光雕刻,我的解决方法是在速度加快的区域为图像添加一个白边框。从模拟器看来,之后速度非常一致。

我没有可变主轴,所以我不知道向上或向下倾斜需要多长时间,我只有一个 Dremel。现在,我只是在设置中添加一个布尔值,将其从旧的做事方式转变为新的方式。我想可以将其设为 int 并使用此数字来计算主轴加速加速所需的延迟。有算法吗?我确信我可以想出一些东西,但我不是数学天才。

我猜想使用 CNC 和主轴,最好在提高主轴速度的同时减慢运动速度。但是对于激光,它需要在机器加速时降低激光的功率。有点相同的功能,但仍然有点不同。
激光用例更容易实现,主轴用例添加进给率替代作为一个优点。

@PicEngraverToo:我能够运行你的大文件,并且运行良好,直到我妻子关闭我的电脑 :-)

在 imagetolaster 程序中,我确实压缩了未移动的轴,并且我还压缩了所有具有相同 S 值的线。下一步是删除所有空格字符。

激光和 grbl 实验 #492

@mschorer: 是的,我记得我们的谈话。对于工厂来说,这仍然存在。您必须在恢复之前停止,否则位会中断。对于激光切割机来说,这是一种不同的情况,需要实时更新主轴输出。但是,这必须是仅设置类型的功能,根据速率进行暂停或实时更新仍然会对工厂产生问题,因为您无法可靠地涵盖所有场景。

@alpharesearch:正如我之前所说,安装实时主轴控制并非易事。你需要做更多的事情。一方面,您仍然需要编写一个单独的函数来仅更新主轴 PWM OCR 值,并且其中没有任何计划同步调用(如果您还没有这样做的话)。您还需要更改 g 代码解析器,以防止规划器在S发送新值时进行同步。您可以忽略它的执行阶段,因为您将其向下游推送到步进器 ISR 并且它将在那里正确执行。我认为您需要做的就是在主轴速度更新时注释掉主轴运行()调用。主轴功率在几行下单独处理,并且仍然需要计划同步。

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2014 年 9 月 23 日

@chamnit:关于任何计划同步调用,前面有 IF 函数(但在 #ifdefs 内部,所以你想查看 2 行并注意没有分号),它们只在需要时调用同步。这是在 gcode 解析器中,并在 run 函数中使用,因此不会导致 ISR 出现问题。它是这样工作的,但为了使其更具可读性和可理解性,我开始向主轴控制添加额外的功能。
如果这行 g 代码也不能实时工作(我们在 X0): G1 X10 F100 M3 S256
我认为这行应该打开激光器并将功率输出设置为 256,然后从 X0 移动到 X10,进给速率为100。

激光和 grbl 实验 #492

我不知道 0.8 PWM 功能(我只测试了 0.9),也许更有经验的人可以帮助你。但是您可以发布 GCODE 文件以丢弃文件生成问题。

激光和 grbl 实验 #492

@Dikabro: 那是什么媒介?在图片中它几乎看起来像玻璃纤维或类似的东西?可能只是图片。

一些材料具有非常好的灰度能力……其他材料非常敏感,需要快速进给速度。以杨树为例,我发现很容易获得灰度,尽管更快的进给速度扩大了范围。另一方面,我发现的一些白色木材(不确切知道它们是什么)几乎只是一种 1 位介质,很难获得任何颜色的变化。基本上,一旦它烧了它就烧了。

它可能是介质,也可能只是您需要更快地提高进给速度?

激光和 grbl 实验 #492

@rusirius76 尝试测试 PEP5 和 PicSender 并将您的激光二极管视为油漆和喷雾器,然后将其降低并将其对准您的材料,而不是在空中挥舞它并抱怨它的性能不如您想要的那样。:-D

一位客户的批评不保证改变。;-)

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2015 年 2 月 9 日

@rusirius76看看我的 imagetolaser 项目……也许你可以帮助一些真实世界的数据……我可以制作一个 QT GUI,我们也可以让它在 Windows 上可用,但我需要改进它,但我不确定确切的要求。我只是为了一个快速工具来测试模拟器(或者更好地分叉它),因为我不想花任何钱…… https://github.com/alpharesearch/imagetolaser
但我认为它应该工作很好,它是 foss,我们也可以将它与发件人结合起来。如果我们找到一个 foss 发件人,应该很容易将两者整合或合并。

激光和 grbl 实验 #492
贡献者

福尔特曼 评论 2015 年 2 月 9 日

说到前端和 QT GUI,我也在研究相关的东西——PCB CAM 和 Python GRBL 发送器/前端——https://github.com/kfoltman/wharrgrbl——发送部分还没有功能,但非常接近. 字符计数发件人已经实现,并且似乎可以工作。

所以,很有可能,如果我们结合这些努力,我们最终可能会得到可以做 PCB、激光雕刻图片甚至激光曝光(想想 UV 阻焊膜)并让它直接驱动 GRBL 的东西。由于集成,这提供了一些额外的可能性,例如,自动 Z 探测或根据要求重做蚀刻不足的区域。

激光和 grbl 实验 #492

@rusirius76我不知道我在什么材料上雕刻,但它有点光泽,可能是烤漆的。我会尝试在不同的材料上雕刻,并将结果发布在这里。:)

您是否在较旧的 0,8c 激光模式版本上使用 0,9 grbl 版本?
如果您使用的是 0,9 grbl 版本,那么也许您可以私下将您的代码发送给我?:)
但不要只发送 hex 文件,因为在我的系统中有 Arduino NANO,我需要更改引脚排列..:)

上次当我在我的 NANO 上刷入 0.9g 主版本时 – 我的归位功能不像 0.8c 那样正常工作……

激光和 grbl 实验 #492

@alpharesearch: 非常酷… 很有趣,实际上我这个周末才开始编写一些代码,这将是 FOSS。我正在为 Windows 平台工作,但我正在 Visual Studio 中工作。.NET 已经包含许多用于图像处理的强大功能。从字面上看,我花了大约 10 分钟的时间来获得一些功能正常的“胆量”,这些“胆量”可以让你打开任何图像(.gif、.jpg、.bmp、.wmf、.png 等),将其转换为灰度(平均红色,每个像素的绿色、蓝色分量),然后将这些值重写为该平均值。然后可以根据这些像素的值和位置执行相同的操作来生成 gcode。

在改进它、使其流畅和直观以及添加许多功能方面有很多工作要做,但它确实不应该花费太多的开发时间。

我喜欢我在这里看到的……这正是这个社区所需要的。有很多选项和工具可以使这些项目尽可能容易访问。

我很乐意测试 imagetolaser 并抛出任何出现的想法!

@kfoltman: 这很棒!实际上,我自己有点像电子迷,正在等待一些干燥的紫外线胶片的到来。我想做到这一点,探索PCB制造能力。

@Dikabro: 是的,肯定会改变材料。杨树和桦树对我来说效果很好。我还确保在蚀刻之前打磨表面。通常至少 320 砂砾……通常用大约 600 砂砾打磨。

我使用 0.9 小时。两个都@alpharesearch而且我的版本已经为“实时”主轴控制进行了修改(即通过 S 命令调整激光功率不会减慢速度。)我建议使用他的,因为老实说我不记得了上次我推我的,我一直在努力清理它。

激光和 grbl 实验 #492

@rusirius76. 昨天我开始了一个类似的项目!目前我已经完成了 GUI(非常简单)。我可以将任何图像转换为灰度,通过友好的滑块调整亮度、对比度和伽玛,然后根据所需的分辨率和所需的输出图像尺寸(以毫米为单位)生成正确尺寸的位图我只需要获取每个像素并转换为gcode..也许明天我可以开始生成第一个 gcode。我还计划添加某种类型的配置文件以最小化非线性输出功率。

激光和 grbl 实验 #492

@villamany: 惊人的!我期待着它被冲走时看到它!

激光和 grbl 实验 #492

好的,我在空闲时间做了一些工作来添加一些图像处理。目前它会翻转、旋转、反转(为镜面蚀刻制作负片等)等等……我刚刚完成了抖动程序……我设置它以便可以使用其他方法(它使用一个抖动矩阵,可以根据您希望如何应用错误分布来定义),但老实说,我认为使用 Floyd-Steinberg 可能是最好的(从最终用户的角度来看当然更简单)。以我的经验,它通常会产生最好的结果。

整个概念是让最终用户尽可能简单。他们不必担心图像大小等。只需告诉它您想要的像素大小、您希望完成的 gcode 刻录的高度和宽度等…

激光和 grbl 实验 #492

我正在开始一些图像到 gcode 转换的测试,如果我使用正确的逻辑来最小化 PC-GRBL 之间的数据流,有人可以确认我吗?

– 删除行中的所有空格 –
仅在开始时发送模态 G1 命令,而不是在每一行
– 仅添加 CR 作为行尾,而不是 CR+LF
– 如果自上次更新以来它们不同,则仅发送 X、Y 和 S 值
– 使用格式 0.### 作为坐标

激光和 grbl 实验 #492

@villamany: 对我来说听起来不错!

激光和 grbl 实验 #492

@villamany:另外,您必须小心,以免超出任何限制..但我计划为图像周围的“缓冲区”区域合并一个用户可选择的选项。因此,例如,运动两侧周围有 5 毫米的“空白空间”……这样机器在实际开始燃烧像素时就“加速”了……在燃烧过程中没有加速……

激光和 grbl 实验 #492
贡献者作者

阿尔法研究 评论 2015 年 2 月 10 日

@kfoltman听起来是一个非常有趣的项目,我想我需要重新开始学习 KiCad ……我曾经用它制作了我的小 PC 键盘:http : //alpharesearch.de/?page_id=53 但当时我使用的是 batchPCB。

@rusirius76我喜欢 .net 和 C#,但如果您想支持的不仅仅是 Windows,请确保使其与单声道兼容。

关于 Raspberry Pi 2,它现在快了很多,我确实通过 VNC 使用了最新版本的 UGS,它启动良好,并且可以从我的另一台 PC 访问网页挂件功能。要复制文件,我使用 scp(linux 下的 mc 或 windows 下的 winscp)我认为它现在更有用,我很满意。

如果您从 raspberry pi 网页获取最新的 raspbian 映像,则您已安装 Oracle Java,但您需要获取 rxtx 库以进行串行通信。

sudo apt-get install librxtx-java

现在您可以像这样启动 UGC(将 start.sh 中的 linux 起始行更改为如下所示):

java -Djava.library.path=/usr/lib/jni -cp /usr/share/java/RXTXcomm.jar -jar -Xmx256m $rootdir/UniversalGcodeSender*.jar

PS:下一个测试是看看http://octoprint.org/如何与 grbl 一起工作,或者让它与 grbl 一起工作。

激光和 grbl 实验 #492

很不错的作品!!!简单又好。;)

激光和 grbl 实验 #492

@villamany: 看起来不错!我实际上是在 VB.Net 中编写我的代码。对于我在工作中所做的事情,我最终不得不更多地使用它,所以对我来说,使用它的开发速度要快得多。无论如何,使用 .NET 并没有太大区别!抖动是一个重要方面,但有时图像会通过我发现的抖动“更好”出来,而对于镜子或其他本质上是 1 位的介质,这只是必须的。这是我使用的代码……应该让你的生活更轻松……

        Dim bm As New Bitmap(pbRender.Image)
        Dim X As Integer
        Dim Y As Integer
        Dim clr As Integer
        Dim DitherTable(0, 0) As Byte
        Dim dErrors(0, 0) As Double
        Dim errorVal As Integer
        Dim dDivisor As Integer
        Dim xLeft As Integer, xRight As Integer, yDown As Integer
        Dim QuickX As Integer, QuickY As Integer

        'The core code is run against a "dither table" which contains distribution of the errors.  This way
        'other dither methods can be implemented later by just supplying a different table.
        'First, prepare a Floyd-Steinberg dither table
        ReDim DitherTable(3, 2)
        DitherTable(2, 0) = 7
        DitherTable(0, 1) = 3
        DitherTable(1, 1) = 5
        DitherTable(2, 1) = 1
        dDivisor = 16

        'Second, mark the size of the array in the left, right, and down directions
        xLeft = 0
        xRight = 2
        yDown = 1

        'Redim a dithering table the same size as the image.
        'We could just use a 2 high array instead of the entire image and reset values each time we
        'move to another line, but I think this should be faster, and memory shouldn't be a problem
        'for modern machines.
        ReDim dErrors(pbRender.Image.Width, pbRender.Image.Height)

        'Now loop through the image, calculating errors as we go
        For X = 0 To bm.Width - 1
            frmStatus.pbStatus.Value = X / (bm.Width - 1) * 100
            For Y = 0 To bm.Height - 1
                'When the image is loaded it's converted to grayscale, so R, G, and B are all the
                'same value for a given pixel, so we just use G.
                'Set clr to the original value + any error stored in the error table.
                clr = (CInt(bm.GetPixel(X, Y).G)) + dErrors(X, Y)

                'Now let's figure out if it should be black or white.
                If clr >= 127 Then
                    'We're setting the pixel black, so the error is the difference between original pixel
                    '(plus error applied) and 255.
                    errorVal = clr - 255
                    'now set the pixel black
                    bm.SetPixel(X, Y, Color.FromArgb(255, 255, 255))
                Else
                    'Setting it white.  Error is just the original pixel value + error applied
                    errorVal = clr
                    bm.SetPixel(X, Y, Color.FromArgb(0, 0, 0))
                End If

                'If there is an error, spread it according to the dither table
                If errorVal <> 0 Then

                    'Spread across the relevant pixels according to the dither table formula
                    For i = xLeft To xRight
                        For j = 0 To yDown

                            'ignore already processed pixels
                            If (j = 0) And (i <= 1) Then Continue For

                            'ignore pixels that have a zero in the dither table
                            If DitherTable(i, j) = 0 Then Continue For

                            QuickX = X + i
                            QuickY = Y + j

                            'Next, ignore target pixels that are off the image boundary
                            If QuickX < 0 Then Continue For
                            If QuickX > bm.Width - 1 Then Continue For
                            If QuickY > bm.Height - 1 Then Continue For

                            'Now apply the error here.
                            dErrors(QuickX, QuickY) += (errorVal * (CSng(DitherTable(i, j)) / dDivisor))
                        Next j
                    Next i
                End If
            Next Y
        Next X
        'We've swept the whole image, so let's put it back in the picturebox.
        pbRender.Image = bm
激光和 grbl 实验 #492

好的!我将尝试实施它。

激光和 grbl 实验 #492

好的伙计们。这个话题已经偏离了方向,已经失控了。我正在关闭这个问题。如果您想打开另一个关于 Grbl 激光 GUI 特定主题的文章,请继续。

激光和 grbl 实验 #492

我实际上也在想同样的事情……我继续为这里的每个人创建了一个论坛,讨论几乎与激光雕刻有关的任何事情。它位于http://www.engraving-lasers.com。设置它还有很多工作要做,但至少它在那里,它会让我们在更合适的地方讨论这些东西。抱歉跑过了你的问题线程@chamnit.

@alpharesearch
@villamany
@Dikabro
@EliteEng

激光和 grbl 实验 #492

大家好。我会把我的五枚硬币留在这里 :) 我已经用 villamany 建造了 3dpburner,我很困惑我可以多快调整不同材料的激光功率/进给率。所以我写了自己的应用程序。
激光和 grbl 实验 #492

使用它您可以在雕刻过程中调整参数。应用程序在 2015 年 2 月 4 日使用 AlphaResearch 版本和常规 grbl v0.9i 进行了测试,用于 Z 头模式。希望有人发现这很有用。
https://drive.google.com/open?id=0B_ZjDNHJ9krcZC12bDRfZjFkc0U

激光和 grbl 实验 #492

无法导入8bit图片…

激光和 grbl 实验 #492

应用程序仅接受 8 位 *.BMP。

激光和 grbl 实验 #492

你能做16位修改吗?

激光和 grbl 实验 #492

如果你查看 grbl 源代码(config.h),你会发现下一行

仅由可变主轴输出使用。这些参数设置
最大和最小主轴速度
“S”g 代码值以对应最大和最小引脚电压。在最大和最小主轴速度之间有 256 个离散且均分的电压箱。

所以制作 16 位图像分辨率是没有意义的,因为 16 位意味着
65,535 种灰色,但我们只有 256(8 位)输出。所以这个
修改对雕刻没有影响。

激光和 grbl 实验 #492

我明白那个。但问题是我无法在您的软件上打开任何图像。由于某种原因,它不允许。

激光和 grbl 实验 #492

http://lmgtfy.com/?q=8+bit+grayscale+bmp

2015-10-22 20:56 GMT+03:00 Dikabro通知@github.com :

我明白那个。但问题是我无法在您的
软件上打开任何图像。由于某种原因,它不允许。


直接回复此电子邮件或在 GitHub
#492(评论)上查看。

自由地生活或努力死去

激光和 grbl 实验 #492

@Dikabro.

您必须先单击 GRBL 按钮并连接到 COM 端口。然后单击 GCODE 按钮,打开图像按钮可用。

喜欢 (0)

您必须 登录 才能发表评论!