Arduino步进电机驱动机械指针温湿度监测站制作全攻略
1. 项目概述一个会动的桌面天气艺术品如果你和我一样对桌面上那些既有科技感又有机械美的小玩意儿毫无抵抗力那么这个项目绝对会让你心动。这不是一个简单的数字温湿度计而是一个用齿轮和指针来“说话”的天气监测站。当温度或湿度变化时你会亲眼看到两个精致的齿轮缓缓转动带动指针指向新的刻度整个过程安静而充满仪式感。这个项目的核心是用最经典的创客三件套——Arduino、DHT11传感器和28BYJ-48步进电机——驱动一套由CNC激光切割的MDF中密度纤维板齿轮组成的机械显示系统。它解决的问题不仅仅是“显示温湿度”更是如何将无形的数据转化为有形的、可视化的机械运动为枯燥的数据监控增添一份趣味和观赏性。无论你是刚接触Arduino的新手想找一个综合性的项目来练手还是有一定经验的爱好者希望探索机电一体化的乐趣这个项目都提供了一个绝佳的实践平台。你会涉及到电路搭建、嵌入式编程、简单的机械结构组装甚至是一点点激光切割文件处理的知识。整个过程就像在组装一个精密的机械钟表但它的“心脏”是代码和传感器。2. 核心思路与方案选型解析2.1 为什么选择“机械指针”而非数码管或屏幕在万物皆可数字显示的今天为什么还要大费周章地做一套机械指针系统这背后有几个关键的考量。首先是直观性与沉浸感。数字跳变是瞬间的、抽象的而齿轮的转动是连续的、具象的。你能清晰地观察到指针从当前位置“走”到新位置的过程这种缓慢的变化更能让你感知到环境参数的渐变而不是一个冷冰冰的数字结果。它更像一个传统的模拟仪表提供了数字显示无法替代的物理反馈。其次是极低的待机功耗与常显特性。一旦步进电机驱动指针到达指定位置它就可以完全断电保持在该位置无需消耗任何能量来维持显示。这与需要持续供电的LCD或LED屏幕形成鲜明对比。对于这样一个可能长期插电运行在桌面上的设备节能和零光污染是一个不小的优点。最后是项目本身的复合价值。这个项目不仅仅是一个工具更是一个融合了电子、编程和机械的“作品”。它的制作过程和最终形态所带来的成就感和装饰性远超过一个现成的模块。它考验的是你将不同领域知识串联起来解决一个具体问题的能力。2.2 核心组件选型背后的逻辑主控Arduino Pro Micro原项目选择了Arduino Pro Micro这是一个非常精明的选择。相较于经典的UnoPro Micro体积更小巧非常适合嵌入到这种结构紧凑的作品中。其核心ATmega32U4芯片自带USB功能使得它可以被电脑识别为串口设备编程和调试非常方便。更重要的是它提供了足够的数字I/O引脚本项目需要至少10个8个用于控制两个步进电机驱动器1个用于DHT11数据线外加电源和地且价格相对低廉。如果你手头有Arduino Nano也是完美的替代品它们引脚兼容且体积类似。传感器DHT11温湿度传感器DHT11是入门级环境传感器的代名词价格极其低廉使用单总线通信只需要一个数字引脚就能同时读取温度和湿度。虽然它的精度温度±2°C湿度±5%RH和响应速度不如更高级的DHT22或SHT系列但对于室内环境监测、尤其是这样一个侧重于展示和体验的项目来说完全够用。它的普及性也意味着有大量成熟的Arduino库支持极大降低了开发门槛。执行器28BYJ-48步进电机与ULN2003驱动板这是本项目机械部分的心脏。28BYJ-48是一种廉价的5线4相永磁式减速步进电机。选择它主要基于以下几点扭矩足够经过内部齿轮减速通常减速比为1:64它能在低速下输出较大的扭矩足以平稳驱动激光切割的MDF齿轮和指针。控制简单配合ULN2003达林顿晶体管阵列驱动板只需要Arduino的4个数字引脚每个电机输出特定的脉冲序列就能实现精确的角度控制无需复杂的PID算法。定位精准步进电机的特性是“走一步转一个固定角度”。虽然28BYJ-48的单步步距角因为减速比的存在而很小通常为5.625°/64 ≈ 0.088°但这恰恰提供了极高的分辨率可以实现非常平滑和精确的指针定位。断电自锁永磁式步进电机在不通电时转子会因为磁力保持在一个固定位置这正好满足了指针位置保持的需求。机械结构CNC激光切割MDFMDF中密度纤维板是激光切割的绝佳材料。它成本低、易于切割、边缘光滑且具有一定的强度和刚度。通过激光切割可以以极高的精度和可重复性制作出复杂的齿轮和结构件这是手工难以实现的。齿轮传动将电机轴的旋转运动转化为指针的旋转运动传动比的设计直接决定了指针的移动范围与灵敏度。原设计已经考虑了全量程湿度0-100%温度可扩展至负值的齿轮行程这是一个非常周全的设计。注意关于电源的争议。原项目评论中有资深玩家指出驱动两个步进电机可能从Arduino的USB口汲取较大电流存在风险。这是一个非常中肯的意见。虽然在小幅度、间歇性转动下USB口500mA可能勉强够用但为了系统长期稳定运行强烈建议使用一个外部5V/2A的电源适配器通过Arduino的VIN引脚或驱动板的电源接口供电USB口仅用于编程。这能有效保护你的Arduino主板。3. 硬件准备与机械组装详解3.1 材料清单与工具准备在开始动手前请确保你备齐了所有“食材”。以下清单在原作基础上做了优化和补充核心电子部件Arduino Pro Micro 或 Nano * 128BYJ-48 步进电机 * 2ULN2003 步进电机驱动板 * 2DHT11 温湿度传感器模块 * 1建议直接使用集成了上拉电阻的模块省事4x6 cm 万用板洞洞板* 12.54mm间距排针公头、母头若干Dupont线杜邦线母对母、公对母若干用于连接10kΩ电阻 * 1如果使用单独的DHT11传感器元件则需要模块则不需要机械与结构部件3mm厚 MDF板 * 1张A4大小足够M3 x 10mm 螺丝螺母 * 4套用于固定步进电机木工胶或快干胶如401胶水垫片可用小号平垫或自制MDF小圆片* 2个工具CNC激光切割机或使用在线激光切割服务电烙铁、焊锡、助焊剂热熔胶枪及胶棒螺丝刀镊子剥线钳设计文件与代码你需要从原项目地址或根据提供的关键词在开源平台搜索“Hanging Gear Weather Station”下载两个关键文件1激光切割用的矢量文件通常是SVG或DXF格式2Arduino代码文件.ino。3.2 激光切割文件的处理与加工拿到SVG/DXF文件后不要直接扔给激光切割机。你需要根据自己激光切割机的加工幅面和处理软件进行预处理。文件检查与分层用Inkscape或Adobe Illustrator等矢量软件打开文件。你会看到所有零件都排列在一张板上。仔细检查每个零件特别是齿轮的齿有没有破损的路径。原文件可能将所有零件放在一个图层为了分别进行雕刻和切割你需要将不同的部分分到不同图层。例如将需要雕刻的刻度、文字放到“雕刻层”将需要切透的外轮廓放到“切割层”。排版与优化如果你的激光机工作台面小于设计图尺寸就需要合理拆分零件分多次切割。利用软件工具排列零件尽量减少材料浪费。确保零件之间留有至少2-3mm的间隙防止切割时过热导致边缘烧焦粘连。加工参数设置这是成功的关键。对于3mm MDF切割功率约80-85%速度约8-15mm/s取决于机器功率频率要够高通常5000Hz左右一般需要1-2次走刀才能切透。务必先在小块废料上测试雕刻功率较低30-50%速度较快100-200mm/s进行单次扫描。雕刻前在MDF表面贴上 masking tape美纹纸胶带这能有效防止激光烟尘熏黑板材表面完成后撕掉胶带下面就是干净的木色。切割后处理小心地从机器上取下板材轻轻将零件从废料框中取出。撕掉表面的美纹纸胶带。用细砂纸轻轻打磨切割边缘去除轻微的毛刺和焦痕使手感更光滑。实操心得如果你没有激光切割机现在很多在线定制服务如“激光侠”、“爱激光”等平台都非常方便。你只需上传设计文件选择材料和厚度在线支付后几天内就能收到切割好的零件包。这比自己购买机器和维护要省心得多特别适合一次性项目。3.3 机械结构组装步骤机械组装是整个项目的骨架精度直接影响最终运行的顺滑度和显示准确性。步骤一安装步进电机找到前面板有齿轮窗口和刻度的大板和两个步进电机。将步进电机的轴从前面板的背面无刻度的一面穿过对应的安装孔。从正面有刻度的一面将M3螺丝穿过电机的固定耳和面板在背面用螺母拧紧。不要一次性拧死先稍微固定确保电机轴与面板垂直且电机壳体紧贴面板背面然后再完全拧紧。两个电机都如此操作。步骤二粘合支撑板找到那个带有电机轴孔和方形缺口的支撑板。在支撑板边缘涂抹木工胶少量均匀。将其对齐粘贴到前面板的背面确保电机轴能从孔中露出且电机主体位于方形缺口内。用重物压住等待胶水干固。这一步的目的是加强整体结构防止前面板在长期受力下变形。步骤三组装驱动齿轮组这是最需要耐心和细心的一步。每个电机的输出轴上需要安装一个复合齿轮。识别零件找到小的圆形驱动齿轮与电机轴直接连接和大的带指针的显示齿轮。还有小的圆形垫片和装饰性圆盘。组装驱动轮在电机轴上先套上那个中心有孔的小圆盘起装饰和限位作用。然后在圆盘上涂一点胶水将小驱动齿轮对准粘上去。关键一步来了在齿轮的齿面上再放一个垫片原作用的是平垫圈你也可以用一小片切割剩余的MDF。这个垫片的作用是创造轴向间隙防止大齿轮装上后与驱动齿轮或前面板摩擦导致转动不畅。组装显示齿轮将大显示齿轮与它的指针背板对齐用木工胶粘合。确保指针背板上的指针与齿轮上的参考标记对齐例如指向0刻度位置。啮合与测试将组装好的大齿轮套到前面板的固定轴上然后让其与电机轴上的小驱动齿轮啮合。用手轻轻转动电机轴检查大齿轮是否能平滑、无卡顿地转动一整圈。如果感觉阻力很大或有跳动检查a) 齿轮啮合深度是否太深b) 垫片间隙是否足够c) 齿轮孔与轴之间是否有毛刺打磨调整直至运转顺滑。定位与固定在电机轴和小驱动齿轮的接触面上点一滴可拆卸的胶水如蓝丁胶或少量热熔胶。将齿轮调整到一个预设的初始位置例如让指针指向25°C和50%RH。等待胶水固化。这里使用可拆卸胶是为了后期校准方便。4. 电路设计与焊接实操4.1 电路原理深度解析别看元件不多但理解电路原理是避免接线错误和调试抓狂的基础。整个系统的电路可以分为三个部分电源、传感器接口、电机驱动。电源部分 整个系统需要5V直流电。最稳妥的方案是使用一个5V/2A的直流电源适配器。电源正极5V同时连接到Arduino Pro Micro的RAW或VCC引脚注意查看板子标识有些板子RAW是接7-12VVCC接5V。两个ULN2003驱动板的或VCC引脚。DHT11传感器模块的VCC引脚。 电源负极GND则连接到所有模块的GND引脚形成共地。这就是评论中强调的外部供电方案能提供充足且稳定的电流。DHT11传感器连接 如果使用模块非常简单VCC - 5V,GND - GND,DATA - Arduino Digital Pin 10。如果使用单独的DHT11元件则需要在数据线Pin 2和电源VCC之间连接一个10kΩ的上拉电阻以确保数据线在空闲时处于高电平。ULN2003驱动板连接 每个28BYJ-48电机有5根线红色公共正极橙、黄、粉、蓝对应4相线圈。通常直接插到ULN2003驱动板的输出插座上即可顺序固定。 驱动板的控制端有4个输入引脚IN1-IN4它们需要连接到Arduino的4个数字引脚。以控制温度齿轮的电机A为例IN1 - D2IN2 - D3IN3 - D4IN4 - D5同理控制湿度齿轮的电机B连接至D6, D7, D8, D9。 驱动板的电源输入端,-接入系统的5V和GND。4.2 万用板集成焊接为了整洁和可靠不建议直接用一堆杜邦线飞线。按照原方案在4x6cm万用板上搭建一个简单的母板是最佳选择。规划布局将万用板横放或竖放在脑中规划一下区域。通常一侧放置Arduino的排母中间走电源总线另一侧放置传感器和连接驱动板的排针。焊接排母焊接一组能够插下Arduino Pro Micro的排母或排针取决于你想把Arduino焊死还是可插拔。确保方向正确USB口朝外便于连接。建立电源轨道用焊锡和导线在板子背面或利用板子正面的铜箔条连接出一条5V总线和一条GND总线。这两条总线要足够“粗”可以用多股线或镀锡铜线以承载电流。焊接接口在5V和GND总线上引出几组焊盘用于后续连接。焊接一个3针排针或排母用于连接DHT11分别连接到5V,GND, 以及一条飞线到Arduino的D10。焊接两个4针排针分别对应电机A和电机B的控制信号。每个排针的4个孔通过飞线分别连接到Arduino的D2-D5和D6-D9。务必做好标记可以用标签纸写上“MotorA”和“MotorB”。焊接一个2针排针作为外部电源的输入接口连接到板子的5V和GND总线。焊接连接线用杜邦线或导线将Arduino上对应的引脚D2-D9,D10,5V,GND焊接到你刚才在万用板上制作的对应焊盘或排针上。检查与测试焊接完成后先不要接电机和传感器。用万用表通断档仔细检查5V总线对GND是否短路每个控制引脚到Arduino对应引脚是否连通DHT11数据线是否有连接到D104.3 整机布线与固定固定主控板用热熔胶将焊接好的万用板连同Arduino粘贴到天气站的后背板内侧。务必注意方向确保Arduino的Micro USB口朝向底座开口方向否则后续无法插线。固定驱动板将两个ULN2003驱动板用热熔胶分别固定在两侧的立柱内侧。连接电机将两个步进电机的5Pin线缆分别插到对应的ULN2003驱动板输出插座上。连接信号与电源用杜邦线母对母或公对母将驱动板的控制输入端IN1-IN4连接到万用板上对应的4针排针。同样用杜邦线连接DHT11传感器到万用板上的3针接口。连接电源将外部5V电源适配器的输出线焊上一个合适的接头如DC插头插到万用板上的电源输入排针。理线与收纳用扎带或胶布将过长的线缆捆扎整齐紧贴背板内侧避免线材散乱影响美观或阻碍齿轮运动。确保所有线缆不会与齿轮机构发生干涉。5. 软件编程与核心算法剖析5.1 代码框架与库依赖Arduino代码是整个项目的大脑。你需要安装两个必要的库DHT sensor library用于读取DHT11的数据。可以通过Arduino IDE的库管理器直接搜索“DHT”安装。Stepper库Arduino内置的标准库用于控制步进电机。但针对28BYJ-48和ULN2003我们通常使用更优化的AccelStepper库它支持加减速运动更平滑。也可以通过库管理器安装。代码的主要结构如下#include DHT.h #include AccelStepper.h // 引脚定义 #define DHTPIN 10 #define DHTTYPE DHT11 // 步进电机引脚定义 (IN1, IN3, IN2, IN4) - 注意这个顺序很重要 #define motorAPin1 2 #define motorAPin2 3 #define motorAPin3 4 #define motorAPin4 5 #define motorBPin1 6 #define motorBPin2 7 #define motorBPin3 8 #define motorBPin4 9 // 创建对象 DHT dht(DHTPIN, DHTTYPE); AccelStepper stepperA(AccelStepper::HALF4WIRE, motorAPin1, motorAPin3, motorAPin2, motorAPin4); AccelStepper stepperB(AccelStepper::HALF4WIRE, motorBPin1, motorBPin3, motorBPin2, motorBPin4); // 全局变量 float currentTemp 25.0; // 假设初始温度 float currentHum 50.0; // 假设初始湿度 float targetTemp, targetHum; const int stepsPerRevolution 4096; // 28BYJ-48全步模式下的步数64步/转 * 64减速比 4096 const float tempScaleFactor 100.0; // 温度量程例如0-100°C const float humScaleFactor 100.0; // 湿度量程0-100% void setup() { Serial.begin(9600); dht.begin(); // 设置步进电机速度步/秒 stepperA.setMaxSpeed(500.0); stepperA.setAcceleration(200.0); stepperB.setMaxSpeed(500.0); stepperB.setAcceleration(200.0); // 假设初始位置是0步对应0°C或0%RH stepperA.setCurrentPosition(mapFloat(currentTemp, 0, tempScaleFactor, 0, stepsPerRevolution)); stepperB.setCurrentPosition(mapFloat(currentHum, 0, humScaleFactor, 0, stepsPerRevolution)); } void loop() { // 读取传感器 float newTemp dht.readTemperature(); float newHum dht.readHumidity(); if (isnan(newTemp) || isnan(newHum)) { Serial.println(读取DHT11失败); return; } targetTemp newTemp; targetHum newHum; // 计算目标步数 long targetStepsA mapFloat(targetTemp, 0, tempScaleFactor, 0, stepsPerRevolution); long targetStepsB mapFloat(targetHum, 0, humScaleFactor, 0, stepsPerRevolution); // 移动电机到目标位置 stepperA.moveTo(targetStepsA); stepperB.moveTo(targetStepsB); while (stepperA.isRunning() || stepperB.isRunning()) { stepperA.run(); stepperB.run(); } // 更新当前值并等待 currentTemp targetTemp; currentHum targetHum; Serial.print(温度: ); Serial.print(currentTemp); Serial.print( °C, ); Serial.print(湿度: ); Serial.print(currentHum); Serial.println( %); delay(5000); // 每5秒读取一次 } // 一个浮点数版本的map函数 long mapFloat(float x, float in_min, float in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) out_min; }5.2 关键算法从数据到步数的映射代码中最核心的部分是mapFloat函数以及如何设置stepsPerRevolution和ScaleFactor。步进电机分辨率stepsPerRevolution 4096。这个数字怎么来的28BYJ-48在半步驱动模式下更平滑每转需要64步脉冲。其内部齿轮减速比为64:1。所以电机输出轴转一整圈需要64步/转 * 64减速比 4096步。这意味着理论上我们可以将一圈360°分成4096个位置分辨率极高。量程映射tempScaleFactor和humScaleFactor定义了你的显示量程。例如温度你想显示0-50°C那么tempScaleFactor 50.0。湿度显示0-100%RH那么humScaleFactor 100.0。 映射公式是目标步数 (当前测量值 / 量程) * 总步数。 通过mapFloat函数实现targetStepsA mapFloat(targetTemp, 0, 50.0, 0, 4096);如果当前温度是25°C那么目标步数就是(25/50)*4096 2048步正好是半圈的位置。初始位置校准在setup()函数中我们通过stepper.setCurrentPosition()设定了电机的“逻辑位置”。这个位置必须和物理上指针的实际位置严格对应这就是为什么在组装齿轮时我们要把指针手动调到初始刻度如25°C, 50%RH然后在代码里将这两个值映射为步数并设置为当前位置。只有这样代码才知道“零点”在哪里。注意事项AccelStepper库的HALF4WIRE驱动模式顺序可能与你的接线顺序不同。如果电机转动方向不对或抖动最常见的解决方法就是调整AccelStepper构造函数中4个引脚参数的顺序。原代码中使用的顺序(pin1, pin3, pin2, pin4)是一种常见的有效顺序如果不工作可以尝试(pin1, pin2, pin3, pin4)或其他排列。5.3 运动控制优化与节能策略原项目的代码逻辑是“读取-移动-等待5秒-循环”。这里有几个可以优化的点加入死区环境温湿度变化很慢。如果每次读数有0.1°C或1%RH的微小波动就让电机动作会显得很“神经质”也浪费能量。可以设置一个死区阈值例如if (abs(targetTemp - currentTemp) 0.5) { // 温度变化超过0.5°C才动作 // 执行移动... }实现非阻塞延迟使用millis()函数进行定时而不是delay(5000)。这样在等待期间Arduino可以处理其他任务虽然本项目没有代码结构也更优雅。睡眠模式高级正如评论中所建议的Arduino可以在两次读数之间进入深度睡眠以极大降低功耗。这需要用到低功耗库并可能涉及外部中断唤醒。对于插电设备这不是必须的但对于电池供电的版本是终极省电方案。6. 系统校准、调试与问题排查6.1 上电前最终检查在接通电源前请进行“三检”电路检查再次用万用表确认5V与GND无短路。确认所有电源线、信号线连接正确且牢固。机械检查用手轻轻拨动两个大齿轮确保它们能360度自由旋转无任何卡滞或摩擦异响。检查所有螺丝、胶合处是否牢固。初始位置检查确保两个指针都手动调整到了你代码中设定的初始位置如25°C和50%RH。6.2 首次上电与校准流程将外部5V电源连接到万用板暂时不要连接USB数据线。观察电路板有无芯片异常发热、冒烟希望没有。步进电机可能会发出轻微的“锁止”声这是正常的。打开Arduino IDE选择正确的板卡Arduino Micro和端口。现在将Micro USB线连接到电脑和Arduino。上传你准备好的代码。上传完成后打开串口监视器设置波特率为9600。你应该能看到类似“读取DHT11失败”或初始温湿度值的输出。观察齿轮。它们应该开始从初始位置25, 50向传感器读出的实际位置缓慢转动。转动应该平稳无失步跳动或回弹。校准的核心步骤方向校准如果齿轮转向反了比如温度升高指针却往低温转有两种修改方法一是在代码中交换电机某两个相线的引脚定义顺序二是在计算目标步数时取反例如targetStepsA stepsPerRevolution - mapFloat(...)。量程校准这是最关键的。用另一个你认为准确的温湿度计或手机App作为参考。比较串口输出的值和你参考设备的读数。如果存在固定偏差可以在代码中加上一个偏移量进行修正例如float adjustedTemp dht.readTemperature() 1.5;。终点校准让传感器处于一个已知环境比如用嘴哈气提高湿度或用手握住传感器提高温度。观察指针最终停止的位置是否与串口显示的值匹配。如果不匹配说明stepsPerRevolution或ScaleFactor不准确。你需要调整ScaleFactor。例如指针转到了80%的位置但串口显示湿度是70%。那么你的实际humScaleFactor应该是(70 / 80) * 100 87.5。将这个值更新到代码中重新上传测试。6.3 常见问题与解决方案速查表问题现象可能原因排查与解决方案上电后无任何反应1. 电源未接通或损坏。2. Arduino未正确供电或损坏。3. 代码未上传成功。1. 检查电源适配器输出电压是否为5V插头是否接触良好。2. 检查Arduino板上电源指示灯是否亮起。尝试通过USB单独供电测试。3. 检查IDE中板卡和端口选择是否正确重新上传Blink示例程序测试。串口监视器输出“读取DHT11失败”1. DHT11接线错误或接触不良。2. DHT11传感器损坏。3. 缺少上拉电阻仅限元件版。4. 读取间隔太短。1. 检查VCC, GND, DATA三根线是否接对、接牢。2. 更换一个DHT11模块测试。3. 如果是元件确认在DATA和VCC间接了10kΩ电阻。4. DHT11两次读取间隔需大于2秒检查代码中delay是否足够。步进电机剧烈振动但不转动1. 电机相序接错。2. 驱动板供电不足。3. 电机损坏。1.这是最常见原因检查电机5Pin线是否完全插入驱动板。尝试在代码中调整AccelStepper引脚顺序如(pin1, pin2, pin3, pin4)。2. 使用外部5V/2A电源确保驱动板VCC和GND接好。3. 单独测试电机依次给驱动板IN1-IN4高电平看电机是否一步步微动。电机转动方向错误电机相序部分错误。在代码中交换AccelStepper构造函数中任意两个相邻的引脚顺序例如将(pin1, pin3, pin2, pin4)改为(pin4, pin3, pin2, pin1)。指针位置不准确或抖动1. 齿轮啮合过紧或过松有回差。2. 步进电机失步。3. 初始位置 (setCurrentPosition) 设置错误。4.stepsPerRevolution或ScaleFactor计算错误。1. 调整齿轮间隙确保顺滑无晃动。2. 降低电机速度 (setMaxSpeed) 和加速度 (setAcceleration)。3. 确保物理指针初始位置与代码中setCurrentPosition映射的值严格对应。4. 参考“终点校准”步骤重新计算并修正比例因子。齿轮转动时有异响或卡顿1. 齿轮轴孔或电机轴有毛刺。2. 齿轮间有异物。3. 垫片间隙不足齿轮侧面摩擦。1. 用细砂纸打磨所有轴孔和电机轴。2. 清理齿轮齿间的MDF粉末或胶水残渣。3. 增加垫片厚度确保齿轮轴向有微小活动间隙。系统工作一段时间后复位或失灵1. 电源功率不足带载后电压下降。2. 电机堵转导致电流激增触发保护或损坏驱动。3. 芯片过热。1.务必使用推荐的外部5V/2A电源避免仅靠USB供电。2. 检查机械部分是否卡死。确保电机在手动转动时非常轻松。3. 确保设备通风良好驱动芯片可适当添加小型散热片。完成所有校准和测试后你可以用之前切割剩下的那个小方块从支撑板上切下来的作为盖板用一点可拆卸的胶粘在背板顶部让整个作品看起来更完整。现在将这个充满机械美感的天气监测站放在你的书桌或架子上静静欣赏齿轮随着室内气候缓缓转动的优雅画面吧。它不仅是一个工具更是你亲手打造的一件动态雕塑。