用乐高与Crickit自制谐波绘图机:从利萨如图形到创意艺术
2026/5/16 2:50:02 网站建设 项目流程

1. 项目概述:当乐高遇上微控制器,一台能画画的机器

如果你对物理、数学和艺术之间的交叉点着迷,同时又是个喜欢动手的创客,那么谐波绘图机绝对是一个能让你玩上好几个周末的完美项目。它本质上是一台由两个电机驱动的机械臂,通过精密的几何约束,将电机的旋转运动转化为纸面上复杂而优美的曲线。这些曲线在数学上被称为利萨如图形,是谐波运动的直观体现。几年前,当我第一次在博物馆看到类似的机械绘图装置时,就被它那种将抽象数学转化为永恒艺术的过程深深吸引。现在,借助像Adafruit Crickit和Circuit Playground Express这样易用的开源硬件,以及几乎人人家里都有的乐高积木,我们完全可以在自家工作台上复现甚至改进这种迷人的机器。

这个项目的核心价值在于它的跨学科性。它不仅仅是一个“玩具”或简单的组装套件。从工程角度看,你需要考虑机械结构的稳定性、电机的同步控制、传动系统的减速与扭矩;从软件角度看,你需要编写代码来精确控制两个电机的转速和方向;从数学和物理角度看,你最终绘制出的每一个图案,都是两个简谐运动方程合成的直接结果。对于STEAM教育而言,这是一个无可挑剔的实践案例,它能将课本上枯燥的正弦波公式,变成眼前不断生长、变幻的美丽图案。而对于艺术家或设计师,它则是一个充满随机性与可控性的创意工具,每一次参数调整都可能带来意想不到的视觉惊喜。

2. 核心原理:从简谐运动到纸上曲线

要真正玩转这台机器,而不仅仅是依葫芦画瓢地组装,理解其背后的原理至关重要。这能帮助你在调试和创作时,知道每一个调整动作会带来什么结果。

2.1 利萨如图形与谐波运动

利萨如图形描述的是两个相互垂直的简谐运动叠加后,质点所经过的轨迹。想象一个单摆,它的摆动是左右方向的简谐运动。如果再给它一个前后方向的摆动,这个摆锤在空中的划过的路径,就可能是一个圆形、椭圆,或者更复杂的“8”字形图案。具体形状取决于两个方向摆动的频率比和相位差。

在我们的绘图机中,这两个垂直方向的简谐运动是如何产生的呢?机器有两个旋转的“驱动轴”。每个驱动轴通过一个连杆(臂架)与笔架相连。当驱动轴旋转时,它会推拉连杆,从而给笔架施加一个方向上的往复运动。由于两个驱动轴是独立且成一定角度(通常是直角)布置的,它们就分别提供了X轴和Y轴方向的驱动力。笔尖的最终位置,就是这两个方向运动合成的结果。

注意:这里有一个常见的理解误区。很多人认为驱动轴本身在做简谐运动。实际上,做简谐运动的是笔尖在某个方向上的投影。驱动轴是匀速旋转的,但通过曲柄滑块机构(我们的乐高臂架近似于此),将旋转运动转换成了笔架直线方向上的近似简谐运动。

2.2 机械结构如何实现运动转换

项目的机械核心是一个由乐高Technic零件搭建的“剪刀式”臂架。这个设计非常巧妙:

  1. 两个驱动枢纽:它们是由TT电机通过皮带轮减速后驱动的乐高十字轴。每个枢纽上连接着臂架的一条“腿”。
  2. 臂架:通常由多个乐高连杆和销子组成的平行四边形或X形结构。它有两个输入点(分别连接两个驱动枢纽)和一个输出点(安装笔尖)。
  3. 运动传递:当驱动枢纽旋转时,它会拉动或推动臂架的连接点,导致整个臂架形状发生改变,从而带动末端的笔架在二维平面上运动。

关键在于两个电机的转速有细微差别。如果两个电机转速完全相同且相位固定,笔尖会重复画出一个封闭的、不变的图形。但当它们的转速有微小的、不可公约的差异时(例如,一个70转/分,一个71转/分),两个简谐运动的相位差就会随时间缓慢而连续地变化,笔尖的轨迹就不会重复,而是在一个有限的区域内“编织”出越来越密集、复杂的图案,直到图案趋于饱和。

2.3 电子控制系统的角色

机械结构决定了运动的可能性,而电子控制系统则赋予我们探索这种可能性的能力。本项目的电子部分是一个经典的三层架构:

  • 感知与控制层:Circuit Playground Express。这块板子内置了处理器、按钮和滑动开关。它负责读取用户的输入(如按下按钮调整速度),并执行逻辑判断。
  • 驱动层:Adafruit Crickit。这是一个功能丰富的“翅膀”扩展板,专门为CPX设计。它的核心价值在于提供了大电流的电机驱动电路。TT电机启动和堵转时电流较大,CPX的GPIO口无法直接驱动,Crickit的电机驱动芯片则能轻松应对,并提供正反转、调速功能。
  • 执行层:两个TT减速电机。它们接收来自Crickit的PWM信号,将电信号转化为精确的转速。

通过MakeCode图形化编程,我们可以轻松设定两个电机的初始速度,并创建交互:例如,按A键降低电机1速度,按B键增加速度,同时按下AB键反转方向。这种实时交互性,让探索过程从“设定并等待”变成了“动态调整与观察”,极大地增强了项目的趣味性和实验性。

3. 硬件搭建:从零件到稳固的机械平台

原教程给出了一个可行的搭建方案,但其中有许多细节和替代选择值得深入探讨。以下是我在多次搭建和调试后总结的要点。

3.1 乐高结构搭建的要点与变通

原教程的BOM清单是很好的起点,但你完全不必被它限制。乐高的魅力在于其灵活性。搭建的核心目标是:构建一个稳固的基座,并确保两个驱动轴平行、水平,且与基座平面垂直。

  • 基座稳定性:基座不一定要用大底板。你可以用Technic梁搭建一个坚固的“井”字形框架,这样更省零件,且能从下方固定电机。关键是确保结构在电机运转时不发生摇晃或共振。
  • 减速机构:TT电机200RPM的转速对于绘图来说太快了,必须减速。教程使用了皮带轮进行一级减速。这里有个关键技巧:减速比不宜过大也不宜过小。经过实测,使用乐高滑轮实现一个大约1:4到1:6的减速比是比较合适的。太大则绘图速度太慢,完成一幅画需要极长时间;太小则图形会因速度过快而模糊不清。你可以通过选择不同齿数的滑轮来调整减速比。
  • 臂架设计:教程中的剪刀式臂架效果很好。但臂架的长度和铰接点的位置是重要的可调参数。更长的臂架会产生振幅更大的图形(画幅更大),而改变笔尖在臂架上的安装位置(即笔尖到两个驱动点的距离比),会从根本上改变图形的“风格”。这部分我们会在后面艺术创作章节详细实验。

实操心得:在搭建乐高机械部分时,不要一次性把所有零件锁死。先搭建主体框架,将电机和驱动轴临时固定,手动转动电机轴,观察臂架运动是否顺畅、有无卡滞。确认无误后,再逐步加固关键连接点。乐高销子有紧有松,在需要承受较大力的地方(如驱动轴与臂架的连接处),务必使用摩擦力更大的“摩擦销”。

3.2 电机与乐高的“跨界”连接

这是项目中最具“破坏性”但也最关键的一步:将TT电机固定到乐高砖上。

  • 粘接的可靠性:教程建议使用强力胶(CA胶)。我强烈推荐使用环氧树脂AB胶或专用于塑料的乐泰胶。相比瞬间胶,AB胶固化后形成一层韧性较好的胶层,能更好地抵抗电机震动产生的剪切力。粘接前,务必用酒精或砂纸仔细清洁电机外壳和乐高砖的粘接面,去除油污和脱模剂。
  • 电机定位:TT电机的外壳并非完全对称,有一面是平的。粘接时,必须确保电机轴与乐高砖平面平行,且轴心高度与你设计的驱动轴高度匹配。你可以先用几块乐高砖在基座上模拟出最终电机的位置,做好标记,再进行粘接。
  • 轴适配器:Adafruit的LEGO适配器(产品号3810)是完美选择。它是压入式设计,安装时一定要垂直用力,确保安装到底。如果感觉特别松,可以在电机轴上缠绕一层极薄的胶带(如电工胶带)增加摩擦力,但切忌过厚导致适配器开裂。

3.3 电路连接与供电安全

电路连接本身很简单,但安全与稳定性不容忽视。

  1. 电机连接:将两个TT电机的线缆分别插入Crickit的Motor 1和Motor 2端口。正反极暂时不用管,后续可在软件中调整方向。务必确保线缆插到底,接触良好。松动的连接会导致电机时转时停,绘图线条中断。
  2. Crickit固定:3D打印的固定板是最优雅的方案。如果没有3D打印机,可以用尼龙扎带将Crickit稳妥地捆绑在乐高结构上,确保所有电子部分与金属电机外壳或可能移动的部件绝缘
  3. 供电:必须使用5V 2A或以上的直流电源适配器。TT电机在启动和堵转时瞬时电流可能超过1A,两个电机同时工作,加上Crickit和CPX本身的功耗,1A的电源可能会过载导致电压下降,系统不稳定。一个优质的开关电源是系统长时间稳定运行的保障。
  4. 上电顺序:建议先连接USB数据线到电脑进行编程和调试,然后再接入5V电源。调试完毕后,可以仅使用5V电源独立运行。

4. 软件编程:用MakeCode赋予机器灵魂

MakeCode的图形化编程让控制逻辑一目了然。我们不仅要实现功能,还要让交互直观。

4.1 MakeCode项目设置与Crickit扩展

首先,访问MakeCode for Adafruit网站,新建一个针对Circuit Playground Express的项目。在“扩展”中搜索“crickit”并添加。添加后,你会看到多出一个“Crickit”的代码块抽屉。

注意:确保你添加的是“Crickit”扩展,而不是其他类似的电机驱动库。这个扩展是Adafruit官方维护的,与硬件兼容性最好。

4.2 核心控制逻辑代码详解

教程提供的代码框架很棒,我们来逐块分析并理解其意图,这样你才能根据自己的需求修改:

// 当开机时 设置 Crickit 的 motor1 速度为 70% 设置 Crickit 的 motor2 速度为 70% 设置 变量 speed 为 70 设置 所有像素 颜色为 关闭
  • 开机初始化:将两个电机速度都设为70%(这是一个经验值,速度适中,图形生成速度可观)。创建一个变量speed来跟踪电机1的当前速度。关闭所有NeoPixel灯,准备后续指示。
// 永久循环 将 motor1 速度设置为 speed % 根据 speed 值,设置环形像素颜色(例如,0-100映射到彩虹色)
  • 主循环:不断将变量speed的值应用到电机1。同时,根据speed值改变CPX板载的NeoPixel圆环颜色,提供视觉反馈。例如,你可以用将颜色HSV设为 速度 * 2, 100, 50来实现速度越大,色调越偏蓝/紫。
// 当按钮A被点击 将变量 speed 增加 -10 如果 speed < 10 那么 设置 speed 为 10
  • 按钮A(减速):每次点击,将电机1的目标速度降低10%。并设置一个下限(如10%),防止速度过低导致电机停转或失步。
// 当按钮B被点击 将变量 speed 增加 10 如果 speed > 100 那么 设置 speed 为 100
  • 按钮B(加速):每次点击,增加10%速度,并设置上限为100%。
// 当按钮A+B被点击 设置 Crickit 的 motor1 方向为 反向 设置 Crickit 的 motor2 方向为 反向 设置 Crickit 的 signal1 上的NeoPixel颜色为 红色(指示反向) 暂停 500 ms 设置 Crickit 的 signal1 上的NeoPixel颜色为 关闭
  • 按钮A+B同时按(反转):这是一个非常实用的安全功能。同时反转两个电机,可以快速“撤销”笔尖的当前运动趋势,或者用于创造对称图形。用Crickit板载的NeoPixel闪一下红光作为提示。
// 当开关被拨到左 设置 Crickit 的 motor1 速度为 0% 设置 Crickit 的 motor2 速度为 0% // 当开关被拨到右 设置 Crickit 的 motor1 速度为 speed % 设置 Crickit 的 motor2 速度为 70%
  • 滑动开关(暂停/继续):向左拨动开关,立即停止所有电机,笔尖抬起(如果你安装了舵机抬笔机构,这里可以联动)。向右拨动,恢复之前的运行状态。这是控制绘图开始和结束最物理、最直接的方式。

4.3 高级功能拓展思路

基础功能实现后,你可以尝试以下进阶玩法:

  • 随机模式:在代码中加入“当摇晃CPX时”,随机设置两个电机的速度和方向,创造完全不可预测的图案。
  • 图案预设:利用CPX的多个按键(A、B、A+B等)来切换几组预设的电机速度对(如 70/71, 80/83, 65/68),快速切换不同风格的图形。
  • 速度平滑变化:不要让速度阶跃式变化(如直接+10%),而是让speed变量缓慢地自动递增或递减,这样画出的图形过渡会更平滑,产生螺旋渐变的效果。
  • 添加声音反馈:用CPX的蜂鸣器,在速度改变或方向反转时发出不同的音调,让操作更有沉浸感。

5. 调试与优化:让机器运行如丝般顺滑

组装完成,代码上传,第一次通电运行时,很可能会遇到各种小问题。别担心,这是正常过程。

5.1 机械系统调试

  1. 电机不转或抖动

    • 检查电源:首先确认5V电源适配器已正确插入Crickit,且电压足够。用万用表测量Crickit电源输入端电压,应在4.8V-5.2V之间。
    • 检查连接:确认电机线缆已完全插入Crickit的Motor端口,且没有松动。
    • 检查负载:先不要安装皮带和负载,让电机空转。如果空转正常,但装上负载后抖动或停转,说明机械阻力太大。检查皮带是否过紧、臂架运动是否卡涩、各轴是否平行。适当放松皮带张力,在所有旋转轴孔处添加一点润滑脂(如白色锂基脂)。
  2. 绘图线条断断续续或不圆滑

    • 传动打滑:这是最常见的问题。乐高橡皮筋或皮带在长时间运行后可能会拉伸或打滑。解决方案是使用专用的乐高Technic履带或橡胶传动带,它们的抗拉伸性和摩擦力更好。也可以在驱动轮和从动轮上缠绕几圈增加包角。
    • 结构刚性不足:如果基座或臂架在运动中有明显晃动,会导致笔尖轨迹漂移。用更多的梁和三角结构加固关键部位。确保所有销子、轴套都安装到位。
    • 笔尖压力不均:笔尖与纸面的压力要适中且恒定。压力太轻会画不出线,太重则阻力过大导致机构变形。可以设计一个简单的弹簧或橡皮筋悬挂系统,让笔架有一定浮动空间,自动适应纸面不平。

5.2 电气与软件调试

  1. 电机发热严重

    • 长时间在低速(如低于30%)下运行,PWM驱动方式可能导致电机线圈电流不连续,效率低,发热大。如果发现电机外壳烫手,尝试将最低速度限制提高到40%,或者让电机间歇性运行(画一段时间,停一段时间)。
    • 检查电机是否被机械卡死,堵转电流极大导致发热。
  2. 速度控制不线性

    • MakeCode中设置的“速度百分比”是一个占空比概念,并非真实转速。不同电机、不同负载、不同电压下,同一百分比对应的实际转速可能不同。如果你需要精确的频率比(例如严格的71:70),需要通过实验校准。可以在电机轴上贴一个反光片,用光电传感器实测转速,然后在代码中建立一个“百分比-实际转速”的查找表进行补偿。
  3. 干扰与复位

    • 电机启停时会产生较大的电流噪声,可能引起微控制器复位。确保Crickit的5V电源线尽量短而粗,并在Crickit的电源输入端并联一个100μF以上的电解电容,可以很好地吸收电压尖峰。

6. 艺术创作:探索参数空间的无限可能

当机器稳定运行后,真正的乐趣——艺术创作——就开始了。这台机器的魅力在于,几个简单参数的微小变化,就能产生截然不同的视觉效果。

6.1 核心可调参数及其影响

你可以建立一个实验记录表,系统性地探索以下参数:

参数调整方法对图形的主要影响创作建议
速度比 (Motor1 : Motor2)通过代码按钮调整Motor1速度图形的复杂度和密度。速度比越接近简单整数比(如1:1, 2:3),图形越简单、对称、重复快。速度比越接近无理数或复杂比例,图形越复杂、填充越慢、细节越多。从70:71开始,这是经典的“近整数比”,能产生缓慢演变的优美图形。尝试80:83, 55:57等。
相对相位在代码初始化时,让一个电机延迟启动几毫秒图形的初始旋转角度和对称性。改变两个电机运动的起始点关系。很难软件精确控制,但可以通过手动在开始时轻微拨动一个驱动轴来随机获得不同相位,每次都有新惊喜。
臂架几何(振幅)改变驱动轴与臂架连接点的位置(使用乐高梁上不同的孔位)图形的大小和“胖瘦”。连接点离驱动轴中心越远,该方向上的运动幅度越大,图形在该方向上被拉伸。准备几根不同长度的乐高梁,快速更换测试。记录下每个孔位对应的图形特征。
笔尖偏移改变笔尖在笔架上的安装位置,使其不在臂架末端正下方图形的旋转与偏移。笔尖偏离理论中心点,会给图形带来一种“离心”或“螺旋”感,打破完全的中心对称。这是产生独特艺术效果的关键。尝试将笔安装在臂架侧面,甚至用一根长梁延伸出去。
纸张与笔更换不同纸张(光滑、粗糙)和笔(圆珠笔、针管笔、毛笔)线条的质感和颜色。光滑纸+圆珠笔线条流畅;水彩纸+毛笔会有晕染效果。大胆尝试非传统工具,如蘸水笔、色粉笔。甚至可以在笔尖绑上两个不同颜色的笔,同时作画。

6.2 创作流程与技巧

  1. 构思与预设:在开始前,想好你想要的大致效果。是密集复杂的曼陀罗,还是疏朗优雅的曲线?根据目标,预设一组参数(如速度比75:76,长臂架,中心笔位)。
  2. 启动与微调:放好纸,启动机器。在图形生成的初期(前几十秒),密切观察其发展趋势。如果觉得图形太“扁”,可以暂停,微调一下臂架连接点。如果填充太慢,按B键稍微加速电机1。
  3. 分层与色彩:单一线条看久了会腻。尝试分层绘制:用黑色笔画完一个基础图形后,暂停,轻微调整一个参数(比如速度+1%),换一支红色笔,在原来的图形上继续绘制。两种颜色的线条交织,会产生惊人的深度感。
  4. 利用“错误”:皮带偶尔打滑、电机瞬间失步,这些“错误”有时会产生意想不到的跳变或重叠,反而增加了作品的有机感和随机性。不必追求绝对的机械完美。
  5. 记录与复现:当你创作出一幅特别满意的作品时,一定要拍照并记录下当时的所有参数(速度值、臂架孔位编号、笔尖偏移距离等)。这能帮助你建立自己的“风格库”,并在未来复现或发展某种特定风格。

6.3 从绘图机到动态雕塑

这台机器的潜力不止于平面绘图。你可以将它视为一个二维平面运动平台。把笔换成一个小灯泡,在暗室中长曝光拍摄,就能得到光绘作品。把笔换成一个小激光头(注意安全!),就能在墙上投射出动态的利萨如图形。把平台竖起来,在笔尖挂上一个小沙漏,下面放上流动的沙画板,它就成了一个自动沙画机。

这台由Crickit、乐高和一点代码驱动的谐波绘图机,就像一座连接数字世界与物理世界的桥梁。它让你手中的代码,通过电机和齿轮,最终转化为纸面上有温度、有生命的痕迹。每一次调试,每一次参数调整,都是一次与数学和物理之美的直接对话。希望你在搭建和创作的过程中,不仅能收获一件有趣的作品,更能体会到那种亲手将抽象原理变为具体创造的快乐。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询