
1. 项目概述从废料到艺术一台简易转盘绘图机的诞生手边总有些用不上的废木料、闲置的Arduino开发板和几个舵机与其让它们在角落里吃灰不如动手把它们变成一件有趣的创作工具。今天要分享的就是如何利用这些唾手可得的材料制作一台能够自动绘制独特图案的简易转盘绘图机。这个项目的核心是利用Arduino的PWM信号精准控制一个伺服电机驱动一个自制转盘旋转再配合一个简单的手动绘图臂让机器与人的随机干预相结合创造出充满不确定性的机械艺术画作。这台转盘绘图机的运作原理非常直观Arduino作为大脑持续生成随机指令通过PWM波驱动舵机让转盘以不可预测的节奏和角度间歇性旋转。与此同时你将一支笔固定在可手动摆动的绘图臂上笔尖轻触转盘上的画纸。转盘的旋转与手臂的移动相互叠加每一笔都融合了机器的规律与人的即兴最终生成的图案既有机器的几何感又带有人手的温度。这个项目非常适合电子制作新手、艺术爱好者或是任何想给周末找点创意消遣的朋友。它不要求高深的编程或精密的加工重点在于理解PWM控制的基本逻辑和享受从零搭建一个物理交互装置的乐趣。接下来我会带你从材料准备开始一步步走到最终“开箱即画”的完整过程并分享我在制作中踩过的坑和总结出的实用技巧。2. 核心思路与方案选型解析2.1 为什么选择PWM与伺服电机方案在决定让一个转盘动起来时你有多种选择比如直流电机加齿轮组或者步进电机。我最终选择了标准舵机核心原因在于其“开箱即用”的简易性和PWM控制的精准性。对于这个艺术创作导向的项目我们不需要电机连续旋转那是直流电机的领域也不需要极其精确的分步控制那是步进电机的强项。我们需要的是让转盘能够快速、安静地转动到一个随机角度并停下等待下一次指令。标准舵机如SG90完美契合这个需求。它内部集成了控制电路、减速齿轮和电位器反馈形成一个闭环系统。你只需要从Arduino发送一个特定宽度的PWM脉冲信号它就会自动旋转并锁定在对应的角度上。这个PWM信号的周期通常是20ms50Hz而脉冲的高电平宽度在0.5ms到2.5ms之间变化对应着舵机0到180度的角度。Arduino的Servo库帮我们抽象了底层时序你只需调用myservo.write(angle)剩下的它全包了。这种“指哪打哪”的特性让我们能把精力集中在更高层的逻辑——如何生成有趣的、随机的转动序列——而不是底层电机驱动上。注意市面上还有一种“连续旋转舵机”它解除了角度限制可以像直流电机一样连续转但速度由PWM控制。我们这个项目需要的是精准的“角度定位”功能所以务必确认你购买的是标准位置舵机而非连续旋转型号。2.2 机械结构设计的权衡简易、稳固与可调机械部分的设计哲学是“在稳固的前提下尽可能简化”。整个机器可以分解为三个核心模块底座、绘图臂和转盘组件。底座与支脚底座承担着安装舵机、支撑绘图臂转轴的重任必须稳固。使用厚度足够的废木料建议≥18mm是关键。增加两个支脚并非只为抬高机器好看更重要的是形成稳定的三角支撑防止在手动移动绘图臂时整个机器摇晃或滑动。我选择螺丝固定而非胶水是为了方便后期拆解调整或维修。绘图臂设计绘图臂是本项目“人机交互”的关键。它被设计成可绕固定转轴木销自由摆动其末端的笔孔高度决定了笔尖与纸面的接触压力。这里采用“盲孔通孔”的组合盲孔用于与转轴配合提供稳定的旋转支点通孔用于插笔其直径需要根据你常用的笔杆粗细来决定最好略小于笔杆直径通过缠绕胶带来微调松紧度实现“既固定又不伤笔”的效果。转盘与舵机连接转盘需要与舵机输出轴牢固连接且保证同心度否则旋转时会抖动。直接使用舵机附带的十字盘或圆盘附件用胶带或热熔胶临时固定是一种快速且可逆的方案。如果追求更稳固可以在转盘中心钻孔用螺丝与舵机附件锁紧。转盘的直径会影响绘图尺度直径越大单次旋转绘制的线条弧长就越长。这种模块化设计的好处是每个部分都可以独立优化。例如你觉得绘图臂太短画不出大圈完全可以单独重做一支更长的臂而无需改动底座。3. 材料与工具清单详述3.1 核心电子部件清单与选型建议电子部分的核心是控制单元和执行单元清单虽短但选对型号很重要。Arduino Uno (1个)项目的主控大脑。选择Uno是因为其普及率高、资料丰富、USB编程供电方便。实际上任何具有PWM输出功能的Arduino兼容板如Nano、Leonardo都可以胜任。我们只需要用到一路PWM信号Pin 9和电源。SG90 9g微型舵机 (1个)项目的执行机构。SG90价格低廉、扭矩适中1.6kg/cm左右足以驱动一个小型转盘。购买时注意选择附带多种舵机盘的套餐方便连接不同结构的转盘。面包板 (1块小型即可)虽然不是必须但强烈建议使用。它作为接线中转站可以让电路更整洁也方便后续扩展比如你想加个按钮或LED指示灯。M-M杜邦线 (6根)用于连接。建议使用不同颜色的线以区分功能红色VCC接5V、棕色或黑色GND接地、橙色或黄色信号线接Pin 9。颜色编码是调试电路时最直观的救命稻草。USB A to B 数据线 (1根)用于给Arduino供电和上传程序。9V电池与电池扣 (可选但推荐)为了实现脱机运行。当你完成编程调试后用9V电池供电就可以让绘图机脱离电脑独立工作真正成为一个独立的艺术装置。3.2 机械结构材料与替代方案机械部分充分体现了“废物利用”的精神几乎所有材料都可以用功能相近的物品替代。基座与支脚木料我用了厚度约19mm的废旧橡木板。关键指标是厚度和强度。厚度要能稳定支撑垂直的木销转轴并且能开出容纳舵机的凹槽。如果你没有这么厚的木料可以将多层薄木板粘合或者使用致密的塑料板、亚克力板。尺寸大约为20cm x 25cm基座和两条20cm x 3cm支脚就足够了。5/16英寸木销 (约8mm直径)作为绘图臂的旋转轴。直径8mm左右的圆木棒、金属杆如自行车辐条、甚至一支粗记号笔的笔杆都可以替代。关键是表面光滑能让绘图臂顺畅转动。转盘材料需要一个直径约9-10cm的圆形硬质薄片。原教程用了激光切割的齿轮极具工业美感。你可以用旧CD/DVD光盘需处理中心孔、结实的塑料瓶盖、层压后的硬纸板或者用小锯子从木板上切一个圆片。厚度建议在2-5mm之间太薄易变形太厚则增加舵机负载。紧固件4颗长度4-5cm的木工螺丝用于将支脚固定到基座。也可以用角码加螺丝或者直接用强力的AB胶粘合但可调性差。绘图工具与耗材Sharpie记号笔是最佳选择因为它出水流畅对垂直压力不敏感。也可以尝试圆珠笔、针管笔甚至蘸水笔但需要更精细的压力控制。画纸推荐使用便利贴Post-it其自带背胶可以牢牢固定在转盘上画完一张撕下换新非常方便。3.3 所需工具与软件加工工具手锯或线锯用于切割木料。有台锯或曲线锯当然更高效。手电钻或台钻这是最重要的工具之一。你需要用它钻各种直径的孔用于木销的约8mm孔用于舵机凹槽的系列大孔约10mm以及用于固定螺丝的导孔约2-3mm。一套多规格的钻头是必需的。尺子、铅笔、直角尺用于测量和划线。砂纸用于打磨切割和钻孔后的毛刺让运动部件更顺滑。软件Arduino IDE从Arduino官网免费下载。这是我们编写、上传控制代码到开发板的唯一环境。确保安装好并安装对应的板卡支持包对于Uno通常是默认就有的。4. 机械结构制作详解4.1 基座与支脚的切割与钻孔机械制作从最基础的基座开始。首先将你的厚木板切割成一大两小三块。基座尺寸约为19cm x 25cm两支脚尺寸约为19cm x 3cm。切割后用砂纸将所有边缘打磨光滑防止木刺扎手。接下来是基座上的关键钻孔。这里有两个孔位至关重要绘图臂转轴孔在基座一侧距离边缘约4-5cm的位置用8mm或与你木销匹配的钻头垂直钻一个通孔。这个孔的精度决定了绘图臂是否晃动。如果手钻难以保持垂直可以先用小钻头如3mm钻一个导孔再慢慢扩孔。舵机安装槽在基座中部偏另一侧的位置需要开一个矩形槽来嵌入舵机。我的做法是先用铅笔画出舵机的外轮廓约22mm x 12mm的矩形加上顶部输出轴凸起部分。然后使用一个接近舵机厚度的钻头例如10mm在轮廓线内紧密地并排钻多个孔就像用圆点画出一个长方形。钻完后用小平口凿或甚至是用钻头本身小心地将孔与孔之间的连接部分捅穿、修整最终形成一个粗糙但能容纳舵机的矩形槽。不必追求完美的直角只要舵机能紧紧卡进去不晃动即可。实操心得开矩形槽时切勿心急用大钻头一次成型极易钻穿或使木板开裂。采用“多孔相连”法虽然费时但对工具和技术要求最低成功率最高。钻完孔后用砂纸卷成条伸入槽内打磨内壁能让舵机安装得更服帖。最后将两支脚用螺丝固定在基座底部两侧。先用2-3mm钻头在支脚和基座的对应位置钻好导孔这能防止直接拧螺丝时木头劈裂。然后用长度足够的木工螺丝螺丝长度需能穿透支脚并深入基座至少1.5cm将三者紧固在一起。至此一个稳固的机器底座就完成了。4.2 绘图臂的制作与关键孔位绘图臂是直接与画笔交互的部件其设计直接影响绘图体验。从剩余木料上切下一块长约20-25cm、宽约3-4cm的木条作为臂身。接下来是臂身上的两个关键孔转轴盲孔A孔在绘图臂一端用8mm钻头钻一个深度约为6-8mm的盲孔。这个孔不需要钻透。它的作用是套在基座的木销转轴上作为绘图臂的旋转支点。深度要足够以保证臂身抬起时不会从转轴上脱出但也不能太深以免摩擦底座。画笔通孔B孔在绘图臂的另一端距离末端2-3cm处钻一个通孔。这个孔的直径取决于你的笔。对于标准的Sharpie其笔杆直径大约在11-12mm。我建议先用一个稍小的钻头如8mm开孔然后将笔塞进去试试。如果太紧就用砂纸裹在笔杆上伸入孔中慢慢打磨扩大如果太松就在笔杆上缠绕几圈电工胶带或纸胶带直到插入孔中能感受到明显的摩擦阻力笔不会因自身重量下落但用手可以轻松拔出和插入。这个“紧配合”是保证笔在绘图过程中不会意外滑动或旋转的关键。将木销插入基座的转轴孔再把绘图臂的盲孔套在木销上。此时你应该能用手轻松地让绘图臂以木销为圆心在一个扇形区域内前后摆动。摆动应顺畅无卡滞同时臂身没有明显的左右晃动。如果晃动太大可能是盲孔直径略大可以在木销上薄薄地缠一两层胶带增加直径。4.3 转盘组件的制作与舵机安装转盘需要与舵机输出轴牢固连接。首先处理转盘本身如果你用的是现成的圆形物体如瓶盖、光盘确保其中心有一个与舵机输出轴匹配的小孔。如果是自制木圆盘在圆心处钻一个约2mm的小孔作为定位孔。取出舵机附带的十字盘或圆盘附件。将附件中心对准转盘背面即将与纸接触的面的反面的中心用铅笔描出轮廓。用热熔胶或双面胶将附件粘在转盘背面。关键点在于对心你可以先将舵机输出轴转到90度中间位置然后将附件按正确方向通常是十字或齿形对齐压入输出轴。接着不取下附件小心地将转盘背面对准附件粘上去。这样能最大程度保证同心度。等待胶水固化后将整个“转盘-附件”组件从舵机轴上轻轻拔下如果是卡扣式。现在将舵机嵌入基座上早已开好的矩形槽中。确保舵机输出轴朝上且舵机外壳被槽壁紧紧卡住不会在槽内旋转或上下跳动。如果有点松可以在舵机侧面塞入一小块木片或泡沫进行固定。最后将转盘组件重新压回舵机输出轴上。确保压到底并且转盘与基座表面基本平行。用手轻轻转动转盘应该能感受到舵机内部齿轮的阻力但转动平滑。至此所有机械部件就组装完毕了。5. 电路连接与系统集成5.1 舵机与Arduino的接线原理电路连接非常简单但理解其原理能避免很多错误。SG90舵机通常有三根线棕色或黑色线接地GND。连接到Arduino的GND引脚。红色线电源正极VCC。连接到Arduino的5V引脚。橙色或黄色线信号线Signal。连接到Arduino的任意一个支持PWM输出的数字引脚在本项目中我们使用Pin 9。为什么是Pin 9在Arduino Uno上数字引脚3, 5, 6, 9, 10, 11旁边带有“~”符号表示它们支持硬件PWM输出能够产生稳定、精确的PWM波形这是驱动舵机所必需的。其他数字引脚只能输出高低电平无法直接用于舵机控制。接线步骤将舵机的棕色线GND插入面包板的负电源轨通常用蓝色线表示然后用一根杜邦线从该电源轨连接到Arduino的任意一个GND引脚。将舵机的红色线VCC插入面包板的正电源轨通常用红色线表示然后用一根杜邦线从该电源轨连接到Arduino的5V引脚。将舵机的橙色线信号插入面包板的一个独立行然后用一根杜邦线从该行连接到Arduino的Pin 9。使用面包板的好处是电源轨可以为多个部件集中供电线路清晰。如果你没有面包板也可以直接将舵机线插到Arduino对应的引脚上注意有些舵机接口可能比较松需要确保接触良好。5.2 供电方案选择USB与电池供电的切换在调试阶段我们通过USB线连接电脑和Arduino。此时电脑的USB端口为整个系统Arduino和舵机提供5V电源。这种方式非常方便因为上传代码和供电可以一线完成。当你希望机器脱离电脑独立运行时就需要外部电源。Arduino Uno有一个专用的直流电源插座DC Jack可以接受7-12V的外部输入。一个标准的9V方块电池配合一个9V电池扣是便携供电的经典选择。切换供电的流程在USB连接状态下完成程序的编写、上传和测试。测试无误后先断开USB线。将9V电池扣的红线正极和黑线负极分别接到9V电池对应的电极上。将电池扣的插头插入Arduino的DC电源插座。此时Arduino板上的电源指示灯会亮起机器将自动运行最后一次上传成功的程序。重要警告绝对不要在Arduino同时连接USB和外部电源尤其是电压不同的电源的情况下操作这可能会损坏Arduino的电压调节芯片。务必遵循“先断后连”或“只连其一”的原则。6. 控制程序编写与深度解析6.1 核心代码逐行解读程序的逻辑是让舵机也就是转盘在0到180度之间随机选择目标角度然后平滑地转动过去停顿一个随机时间后再选择下一个目标角度如此循环。下面是对代码的详细拆解#include Servo.h // 引入舵机控制库。这个库封装了生成PWM信号的所有复杂操作。 Servo myservo; // 创建一个名为myservo的舵机对象用于控制我们的舵机。 int currentPos 90; // 定义一个变量currentPos存储舵机当前角度初始化为90度中间位置。 int targetPos 90; // 定义一个变量targetPos存储舵机目标角度也初始化为90度。 void setup() { Serial.begin(9600); // 初始化串口通信波特率9600。这行主要用于调试可以删除。 myservo.attach(9); // 告诉舵机库我们的舵机信号线连接在数字引脚9上。 } void loop() { // 第一部分生成新的随机目标角度 targetPos random(0, 180); // random(a, b)函数生成一个a到b-1之间的随机整数。这里生成0到179之间的一个数。 // 第二部分平滑移动到目标位置 for (int pos currentPos; pos ! targetPos; pos (targetPos currentPos ? 1 : -1)) { myservo.write(pos); // 将舵机角度设置为pos。 delay(10); // 等待10毫秒。这个值控制移动速度越小移动越快越大移动越慢越平滑。 } // 循环解释从currentPos开始判断targetPos是更大还是更小。 // 如果targetPos更大则每次循环pos加1向右转否则pos减1向左转。 // 循环一直执行直到pos等于targetPos。 // 第三部分更新当前位置并随机暂停 currentPos targetPos; // 移动完成后当前位置更新为目标位置。 delay(random(500, 2000)); // 随机等待500到1999毫秒然后开始下一次循环。 }6.2 代码优化与个性化修改建议上面的基础代码已经能工作了但我们可以让它变得更有趣、更可控。1. 移动模式个性化限制摆动范围如果你不希望转盘转到极限位置0或180度可以修改random函数的参数。例如targetPos random(30, 150);让转盘只在30到150度之间摆动。改变移动速度修改delay(10);中的数值。改成delay(5);会移动得更快更急促改成delay(30);则会慢而沉稳。不同的速度会画出截然不同的线条质感。非匀速移动想让舵机启动和停止更柔和可以尝试更复杂的移动函数比如使用myservo.writeMicroseconds()进行更精细的微秒级控制或者引入加速度算法。但对于艺术创作简单的线性移动往往能产生更“机械”、更纯粹的美感。2. 增加交互性进阶添加物理按钮在面包板上增加一个按钮一端接Pin 2另一端接地。在代码中启用上拉电阻pinMode(2, INPUT_PULLUP);并在loop中检测按钮是否被按下if(digitalRead(2) LOW)。当按钮按下时可以执行一个特殊的绘图序列或者暂停/继续运动。用传感器控制增加一个超声波传感器或光敏电阻。让转盘旋转的角度或速度根据你手部距离的远近或环境光线的明暗而变化创造出人与机器实时交互的绘画体验。这需要你学习如何读取传感器数值并将其映射map函数到舵机的角度或延迟时间上。上传代码用USB线连接Arduino和电脑在Arduino IDE中选择正确的板卡Arduino Uno和端口点击“上传”按钮。上传成功后你应该立刻看到舵机开始随机转动。如果没有请跳到下一章节的故障排查部分。7. 系统调试、问题排查与优化7.1 常见问题速查与解决方案即使按照步骤操作第一次运行时也可能遇到问题。下表列出了最常见的问题及其解决方法问题现象可能原因排查步骤与解决方案舵机完全不转动无声音1. 电源未接通或接反。2. 信号线接触不良或接错引脚。3. 代码未成功上传。1. 检查所有连线特别是红5V、棕GND线是否牢固。用万用表测量舵机接口是否有5V电压。2. 确认信号线橙/黄连接的是Arduino的Pin 9且代码中myservo.attach(9);与之对应。3. 检查Arduino IDE是否显示上传成功板卡和端口选择是否正确。尝试上传一个最简单的“Blink”例程测试Arduino本身是否工作。舵机发出“吱吱”声或抖动但不转动1. 机械阻力过大转盘卡住、绘图臂摩擦底座。2. 电源功率不足。1.立即断电长时间堵转会烧坏舵机。用手轻轻拨动转盘和绘图臂检查是否有地方被木头毛刺卡住或螺丝顶住。确保所有运动部件畅通无阻。2. 舵机在转动瞬间需要较大电流电脑USB口供电可能不稳。尝试使用外部9V电池供电或者使用一个独立的5V/2A的手机充电器通过Arduino的Vin引脚供电。舵机转动角度不准确或乱转1. PWM信号干扰。2. 舵机内部电位器损坏老旧或劣质舵机。3. 代码逻辑问题。1. 尽量缩短信号线长度并远离电源线。尝试在Arduino的5V和GND之间并联一个100uF的电解电容以稳定电源。2. 更换一个已知良好的舵机测试。3. 在代码开头增加Serial.begin(9600);并在循环中用Serial.println(targetPos);打印目标角度通过串口监视器查看指令是否正常。绘图线条断断续续1. 笔尖压力不稳定。2. 转盘转动时纸张打滑。1. 调整绘图臂上笔孔的高度。孔位越高笔尖压力越小甚至可能离开纸面孔位越低压力越大。找到既能画出清晰连续线条又不至于划破纸或阻力过大的平衡点。2. 确保画纸如便利贴牢牢粘在转盘中心没有翘边。可以在贴之前用布清洁转盘表面。机器整体晃动基座和支脚连接不稳固或支脚太轻。检查固定支脚的螺丝是否拧紧。如果支脚是薄木片可以在其底部粘贴一些橡胶垫或防滑毛毡既能防滑又能增加配重。7.2 性能优化与创作技巧当机器能稳定运行后你可以通过一些微调来获得更好的绘图效果和体验。平衡与减震如果转盘尤其是自制的木转盘有轻微的不平衡转动时会产生振动。可以在转盘背面较轻的一侧粘贴一小块橡皮泥或蓝丁胶进行配重平衡这能显著减少振动使线条更平滑。笔触的多样性不要局限于一种笔。尝试不同的绘图工具会带来惊喜Sharpie记号笔线条粗犷、均匀色彩饱和。针管笔线条精细、恒定适合绘制密集的细节。毛笔墨水挑战性极高需要精确控制笔尖压力和墨水含量但能产生极具表现力的枯笔飞白效果。多色笔在绘图臂上固定多支不同颜色的笔或者在绘图过程中手动换笔可以创造出色彩层次。“人机共舞”的节奏这是本项目艺术的精髓。不要试图去精确控制绘图臂来画某个具体形状而是去感受机器转动的节奏。尝试在机器快速旋转时缓慢移动手臂或在机器暂停时快速划过纸面。你的手臂运动与机器旋转的随机性之间的“对话”才是每一幅作品独一无二的原因。你可以设定不同的程序模式比如一段快速密集的随机转动接一段长时间的缓慢移动创造出画面中的“密”与“疏”。最后别忘了享受过程和结果。这个由废料、代码和一点创意组装起来的小机器每一次启动都是一次未知的创作之旅。它画出的不是预设的图案而是时间、随机性和你当下手部运动的共同记录。