自制 15 美元墙绘机:基于 Arduino 的超低成本 DIY
组件与物料清单
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| 28BYJ-48 步进电机带驱动板 | 2 | 超便宜 |
| TSOP 4838 红外接收模块 | 1 | 遥控用 |
| SPI 接口 Micro SD 卡读取器 | 1 | 存放绘图文件 |
| SG90 微型舵机 | 1 | 抬笔/落笔 |
所需工具
- 3D 打印机(通用)
- 电烙铁(通用)
应用与在线服务
- Arduino IDE
项目简介
背景
大概 1999 年左右,我和一个痴迷机器人和电子的朋友讨论过在白板上画画的机器人。当然当时没时间认真搞,爱好者单片机生态远不如今天。
2002 年朋友给我看了 Jürg Lehni 和 Uli Franke 的 Hektor 作品。看到梦想中的墙绘机真的被造出来并分享给世界,我感到欣慰。
后来我向别人展示 Hektor 网站,开始关注细节,发现它缺少我最初设想的一个特性:我希望墙绘机是自包含的,所有东西集成在一个单元里,只用绳子连接墙面。当时查了步进电机重量,觉得这主意不现实。
时光流转,爱好者机器人领域发生了很多事。2014 年我已用 Arduino 和 RC 舵机做各种相机控制项目,有 3D 打印资源,竟然还有空闲时间!偶然发现超便宜的 28BYJ-48 步进电机,瞬间知道要造什么:最便宜的极简墙绘机。
第一次尝试
等了漫长五周从中国买到零件,开始制作。试图做尽可能紧凑的骨架装下 Arduino Uno、步进电机、舵机和电池。在 OpenSCAD 里画了多少个“愚蠢”(不那么聪明)的设计我都记不清了,直到灵光一现:绳子必须交叉!

交叉几何结构极大地帮助保持墙面上正确位置。缺点是绕垂直轴旋转的稳定性变差。通过在绘图仪四角加扎带防止旋转来补救。
第一代绘图仪 硬件如下图。为追求最低成本,我用缝纫线做导向和重力抵消。线在 3D 打印底盘顶部的小孔处交叉。几乎看不出线从笔尖引出并整齐排布(图中缺少 Arduino 到右侧步进驱动的线,显得没那么乱)。笔由 RC 舵机推动整个绘图仪远离墙面来抬笔。

第一代绘图仪在 Arduino 上硬编码设计。设置方法:两侧各放 1 米线,锚点间距 1 米。上电时绘图仪知道坐标系,即可开始绘制内存中的路径。能动,但用起来麻烦:换设计得重新烧录 Arduino;固定 1 米锚距也很受限。不过它是理解问题空间的好平台。几个快速教训:
- 步进电机扭矩不大 —— 线轴太大。
- 笔尖与绳子交叉点有偏移 —— 剧烈晃动
好在这些问题迫使我实现了合理的加减速控制……
演进
第二代绘图仪(封面图白色那台)改进:
- 更小的线轴。
- 线轴移至笔上方,优化走线,减少摆动。
- 电子元件更易访问。
- 加 SD 卡存储绘图文件。
- 新设置流程,支持可变锚点距离。
- 加红外接收,可用遥控器控制一切。
加 SD 卡和红外接收比预想容易得多,属于“为什么不一开始就加”的时刻。新设置流程很棒,灵活支持大小尺寸绘图。目前最大绘图宽约 2.5 米。

设置过程:用遥控器导航绘图仪。先标记位置 A,移动到位置 B 标记。我在左右缝纫线上贴 20 cm 标记,避免手动测量。距离 m 通过左步进电机从 A 移动到 B 的步数得知。绘图仪知道 d 且当前位于 B,即可在锚点间及下方任意位置移动绘图。
第三代绘图仪(视频中橙色那台)与前代相似,微调:
- 所有电子元件做成 Arduino 扩展板。
- 电池电量看门狗,支持“暂停-换电池-继续”。
初衷虽好,但把步进驱动 IC 直接焊在扩展板上,省去了随电机附带的驱动板,导致没有了闪烁 LED。看着超无聊。Arduino 自带 LED 被扩展板挡住,看不见红外接收时的方便闪烁,搞不清校准按钮有没按下。电池监测虽好,但长时间绘图我还是接电源线。
第四代绘图仪(那台绝世美机!)作为生日礼物送给弟弟。外观最漂亮,采用扩展板式电子布局,但特意让闪烁的驱动板露在外面炫耀。注意线材故意留长纯粹为美观!

第五代绘图仪(麦高芬版)纯粹为写这个项目描述而做的概念验证。我想证明不用花哨工具也能造这类绘图仪。我在车库环顾四周找材料:扎线(绑钢筋用的软铁丝)是首选。找扎线时发现一卷管带,觉得更省事稳定。扎带和胶带也备着但没用。唯一麻烦是怎么不费劲做好线轴。回屋拿咖啡,发现牛奶盒盖子!诚实说,造第五代框架的时间比 3D 打印原版设计还短。效果和之前那些差不多(几乎)。






第六代绘图仪
等等,又造了一台?忍不住。有几个困扰已久的问题想解决,也采纳了一些评论建议。
- 3D 打印件太大太慢。
- 移动笔而不是整个绘图仪似乎值得一试。
- 将舵机和红外接收移到“模拟”引脚,腾出数字引脚 0-1 用于串口调试!(感谢 jrcTexas 指出)
结果如下:





新版本优缺点并存。整体手感不错,但有一个问题:笔不固定在框架上,绘图时会轻微晃动,精度不如上一代。巨大优势是释放了数字 IO 引脚 0-1 可用于调试,开发体验大幅提升!
我也对步进电机做了压力测试,研究如何不丢步:

测试结论:需降低速度以保证扭矩。还计算了绘图仪在墙面不同位置时绳子受力:
也许以后继续测试不同步进序列和电压的影响。
使用绘图仪
我拍了视频展示真实环境下的设置和绘图过程。视频可见设置简单快捷。典型难点是找好锚点。白板上我多用小吸盘,粘一圈缝纫线,再用回形针挂绘图仪。锚点关键是让绳子尽可能贴近墙面,以获得更好的笔尖压力。
另一个注意点:宽幅绘图时靠上方位置需要更大扭矩拉线,步进电机会开始丢步,导致绘图仪丢失精确位置(无编码器辅助)。建议:锚点挂高,绘图区域靠低。






绘图仪硬件
制作绘图仪很直观,像大多数 Arduino 项目:一块 Arduino Uno、一些元件、一堆连线。原理图可见你会用到几乎所有数字引脚,若想监测电池电量可能还需模拟引脚。有个坑:会用到引脚 0-1,它们复用为 TX/RX。**为避免烧坏东西,烧录 Arduino 时必须断开连在那里的东西!** 这也是我后期做成扩展板的原因,烧录时直接拔掉扩展板。
RC 舵机几乎任何尺寸都行,只要想办法安装使它能推动绘图仪远离/贴近墙面。步进电机和驱动板理论上可换其他型号,但 28BYJ-48 太方便了。虽扭矩不大,但我以后想造更快的绘图仪。电机标称 5V,我无视这点给 5-9V 都没烧过,虽发热但尚可。Micro SD 卡模块直连 Arduino SPI 引脚或数字引脚 10-13 都行。TSOP 4838 红外接收也直接连 Arduino 即可。
我第三、四代有电池电量看门狗,用分压电阻接模拟输入。还想给步进电机加温度监测,建议:别折腾了,直接省略。

强烈建议**逐个构建和测试**。别一次性组装全套、存好图形文件就指望直接画。建议步骤:
- 先测红外接收。用 IRRemote 库自带的 IRRecvDump 例程。反正你需要它录制遥控器按键码。
- 测舵机。用 Servo 库的 Sweep 例程。
- 测 SD 卡。玩 SD 库例程。
- 测控制步进电机。玩 Stepper 库例程。
- 对上述都熟悉后,烧录绘图仪程序,**再**连接所有元件(别急着组装成型)。
- 上电观察。若一切正常,舵机上电后会小幅扫动一下。
- 用遥控器控制步进电机。搞清哪个是左/右电机。确保“收线”按钮真收线而不是放线。我给你 50% 概率需要在软件或硬件上翻转引脚顺序。(别纠结,拔掉插头反过来插就行。信任但要验证!)
- 确信以上都正常后,再组装成绘图仪形态挂墙试用!
不提供超详细组装说明。最好你自己探索硬件、找到适合你的方案。参考上面“麦高芬版”,保持简单。以后随时可以精致化。下面有个不太连贯的视频我聊一些硬件细节。还需熟悉软件和制作绘图文件,见下文。
绘图仪软件
所有软件在 GitHub。代码非常乱,抱歉。也许我会抽时间整理,但大概率你会在整理前看到。对不起。
绘图仪软件主要做两件事:
- 允许遥控器导航和设置
- 绘制 SD 卡中存储的 .svg 文件内容
Arduino Uno 程序存储空间有限,为塞进代码用了很多丑陋技巧。首代无 SD 卡、图形也要硬编码进 Arduino 时尤甚。SVG 解析极其有限:仅支持直线路径(无曲线),要求特定 SVG 方言(我用 Inkscape 输出)。
SVG 文件放在 SD 卡根目录,命名为 1.svg、2.svg 等。遥控器按对应数字键选择绘制哪个文件。这样我可以预存几个常用图案,快速在别人白板上“创作”。
用 Arduino IDE 编译烧录。唯一额外库是 IRRemote (by shirriff)。
制作可绘制文件
能生成可绘制 SVG 的方法可能有几百种,这里只描述一种:
- 用 Inkscape
- 画好后转为路径 “Path → Object to path”
- 选 “Edit paths by nodes (F2)”
- 全选所有路径和节点。Ctrl+A **两次**
- 用 “Extensions → Modify Path → Flatten Beziers” 转为直线段
- 另存为 “Inkscape SVG”
- 在模拟器中运行,见下文
模拟器
还有一个模拟器。**任何想绘制的图案强制要求先在模拟器跑一遍**,因为 SVG 解析太烂,极大概率绘图仪会误解析。
模拟器原理:将绘图仪代码编译为 macOS/Linux 可执行文件,把 `digitalWrite` 调用替换为向 stdout 打印 (时间戳, 引脚, 状态),再管道传给可视化 UI。
写模拟器是因为有次 Bug 导致 2 小时绘图在 95% 处惨败。我完全不知所措,意识到需要调试手段。结果是浮点数解析 Bug:SVG 中某个数字小数位荒谬地多。(因库函数装不下程序空间,我自己写解析器)。这 Bug 逼出了模拟器,真香。
开发时用模拟器帮助巨大。可比实时快许多倍运行,极其方便。还能输出实时运行耗时。模拟器代码旁边有 README 说明用法。
未来改进
脑海中的改进清单:
- 绘图仪端别解析 SVG,电脑端用完善解析器生成绘图仪友好格式。
- 更好的前瞻刹车,现软件只看一段线,急转弯时不够。
- 加编码器或反馈机制防丢步迷路。
- 写像样的干净代码。
- 用 WiFi 控制器,手机代替遥控器。
结束语
你大概明白了,我在这个项目上花了不少时间,主要是很久以前。我觉得还挺好玩,有无数改进点子、新变体、新墙面等着装饰。但实在没时间,家庭、工作、其他项目太多。
真心希望你们这些互联网上的朋友能从中获得灵感,启发自己的项目。如果有人造出自己的绘图仪并跑通,我会很开心!
虽然我觉得实现了极简绘图仪,但没达成 10 美元成本目标。不过零件越来越便宜,或许过一两年就能做到了……
哦,别因为面条代码想杀我。代码从来不是写给人看的,我当时忙着在墙上画画,根本不在乎代码质量。我还是决定分享出来,请为此高兴吧。
Bon Voyage,
Fredrik
代码
Stringent
墙绘机 Stringent 的代码、文档和 CAD 图纸。
https://github.com/snebragd/stringent
自定义零件与外壳
上传了新的底座 STL,旧的有问题。新底座占地更小 → 打印更少。舵机动作改为移动笔而非推动整个绘图仪远离墙面。
原理图
简单电子原理图
制造工艺