用3D打印机写明信片
摘要
作者描述了如何将笔固定在3D打印机上用于书写明信片,包括在OpenSCAD中设计笔适配器,以及使用Inkscape和svg2gcode生成G代码。该项目通过自定义控制软件解决了归零安全问题。
暂无内容
查看缓存全文
缓存时间: 2026/06/22 13:33
# 用3D打印机写明信片
来源:https://severinbucher.com/posts/writing-postcards-with-a-3d-printer/
前段时间我读了Amy Goodchild关于用JavaScript数字化自己笔迹的博客文章(https://www.amygoodchild.com/blog/cursive-handwriting-in-javascript),一直念念不忘。虽然最终我没有数字化自己的笔迹,但这件事启发了我一个更小的想法:把圆珠笔夹到3D打印机上,让它帮我写明信片。
这篇文章讲述了我实现这一想法的过程,包括打印机差点把笔直接戳穿打印床的那一幕。
## 笔适配器
我有一台Elegoo Neptune 4 Plus。第一步是在挤出机上安装笔,因此我在OpenSCAD中设计了一个适配器,并用PLA打印出来。它由三个部件组成。
OpenSCAD中主适配器主体的剖面图,显示了笔芯通道和弹簧
主适配器主体在OpenSCAD中剖开的样子。通道用于放置笔芯,弹簧位于其上方。
主要部件包裹着挤出机,内部容纳圆珠笔芯和一根弹簧。弹簧的重要性超乎我的预期——它能让笔稍微压入纸张,即使表面不完全水平也能提供足够的书写压力。
第二个部件是一个小型U形件,压在挤出机顶部。如果没有它,固定所有部件的螺丝会直接压在挤出机上,我可不想冒这个风险。
第三个部件是一个小夹具,用于固定笔芯弹簧。
圆珠笔芯旁边是用于固定其弹簧的打印夹具
圆珠笔芯和用于固定弹簧的小夹具。
这些零件都不需要高精度。PLA就足够了,我猜几乎任何耗材都能用。如果你想自己打印,STL文件在Thingiverse上(https://www.thingiverse.com/thing:7371691)。
组装好的适配器安装在打印机挤出机上,准备书写。
## 第一次测试
在尝试任何复杂操作之前,我只想验证这个概念是否可行。我装好适配器,用打印机的手动控制将笔压到一张纸上,然后手动移动各轴。
结果能写字,而且很清晰。这就足够了,于是继续推进。
## 软件
为了生成要写的内容,我使用了Inkscape。较新版本内置了一个Hershey Text扩展,可以将文本转换为单笔划SVG路径——这正是笔式绘图机所需要的。我输入了一些文字并进行转换。
然后我把这个SVG导入svg2gcode(https://sameer.github.io/svg2gcode/),这是一个将SVG转换为G代码的网页工具。设置过程有点手动:我用手把笔移到纸张下边缘以设定X和Y原点,然后降低Z轴直到笔尖刚好接触表面,用这个高度作为落笔指令。
对于我的机器,落笔指令是:
```
G1 Z10 F100
```
抬笔指令是:
```
G1 Z15 F100
```
## 第二次测试(失败的那次)
我的计划很简单:把生成的G代码像正常打印一样发送给打印机,然后看着它写字。
但它没写出来。打印机在开始打印前有一个安全程序,会归零所有轴。归零X和Y没问题,但归零Z是个麻烦——因为笔和适配器比挤出机正常位置更低。带着笔归零Z意味着把笔尖戳向打印床。
这次测试我用了很低的速度,所以没有损坏任何东西,笔芯弹簧吸收了接触力。但无论我尝试什么方法,都无法禁用强制归零。是时候换个思路了。
## 自定义软件
第一次测试已经给了我出路:使用手动控制驱动打印机时,不会触发归零循环。所以如果我能逐条发送手动移动指令,就能完全避开归零问题。
经过一番查找,我发现Neptune运行Moonraker(https://moonraker.readthedocs.io/en/latest/),它提供了与打印机通信的REST和WebSocket API。这正是我缺失的关键。
于是我写了一个小工具,它读取G代码文件,通过WebSocket连接逐行发送到打印机。这个工具很简单,代码在GitHub上(https://github.com/richi0/g-code-streamer)。
## 第三次测试
工作流程和之前一样:Inkscape制作SVG,svg2gcode生成G代码,然后用我的流式工具发送给打印机。我保持低速,并在第一次运行时设置一个较高的Z值,这样笔会在纸张上方空气中画出所有轨迹。这让我可以在实际下笔前确认运动轨迹是否正确。确认无误后,把Z值降下来真正书写。
成功了。
## 设置一个新的书写项目
供我自己参考,以下是在新纸张上书写的完整流程:
1. *在*安装适配器*之前*启动打印机并归零所有轴,让打印机知道自己的位置。
2. 将适配器安装在挤出机上。
3. 将纸张或明信片放在打印床上,使其下边缘与床的前边缘平行。
4. 用几块磁铁固定纸张。
5. 手动移动到纸张左下角,降低Z轴直到笔尖接触纸张。
6. 记下X、Y、Z坐标值。
7. 在Inkscape中创建SVG,并将文档尺寸设置为与纸张一致。
8. 在svg2gcode中,将X和Y原点设置为记下的值,并将Z值用于落笔指令。
9. 用g-code-streamer将G代码流式发送到打印机。
10. 如果需要书写多张相同的纸张,留下两块磁铁作为限位挡块,以便下一张纸落在同一位置。
## 总结
这是一个有趣的周末项目,看着机器工作有种奇妙的放松感。由于它可以在任何SVG上书写,绘画和文字一样自如,这让我多年来第一次给朋友和家人寄出了真正的明信片。下面是一段绘图机工作的短视频。
您的浏览器不支持视频标签。
绘图机正在写明信片。
相似文章
绘图机艺术实验
一篇个人博客文章,详细介绍了使用改装的3D打印机作为绘图机以及Inkscape和Python脚本等工具进行生成艺术的实验。
用笔式绘图机制作全息图
一篇博客文章,解释了如何使用笔式绘图仪制作全息图,利用油脂污迹和直观的光学原理来控制反射高光。
如何打造一个牛逼的打印机
Nishant Joshi 详细介绍了如何将 Xteink X3 电子墨水显示屏改造为功能打印机,通过实现 Internet Printing Protocol 并优化 ESP32-C3 微控制器上的内存限制。
自己动手将 Super 8 胶片数字化
一篇博客文章,详细介绍了使用3D打印扫描仪、步进电机、树莓派和廉价显微镜镜头来数字化 Super 8 胶片的DIY方法,并参考了一个开源的GitHub项目。
Printytron – 输入即现,3D打印
Printytron是一款基于网络的工具,利用人工智能将纯英文描述转换为可3D打印的STL文件,省去了使用CAD软件的需求。