基于Arduino与PWM调光的可遥控环形LED灯DIY全攻略

发布时间:2026/7/28 3:52:55
基于Arduino与PWM调光的可遥控环形LED灯DIY全攻略 1. 项目概述从想法到可遥控的环形光最近在工作室折腾一个需要氛围照明的角落总觉得市面上现成的灯要么太亮太刺眼要么调节模式单一要么就是价格不菲的“智能”产品用起来反而束手束脚。于是萌生了自己动手做一个环形照明灯的想法核心诉求很简单光线要柔和、亮度要能无极渐变、最好还能躺在床上用遥控器控制开关和明暗。这不一个结合了Arduino、红外遥控、PWM调光和3D打印外壳的“自制可遥控环形渐进式照明灯”项目就诞生了。这个项目非常适合有一定动手能力的电子爱好者或创客新手入门。它涉及了单片机基础控制、红外信号解码、MOSFET功率驱动、PWM调光原理以及简单的3D建模与打印算是一个综合性很强的练手项目。最终成品是一个直径约20厘米的环形灯你可以通过一个普通的家电红外遥控器比如闲置的电视或空调遥控器来控制它短按开关键实现开关长按音量键实现亮度的平滑增加或减少。整个过程从电路设计、编程调试到外壳制作充满了DIY的乐趣和成就感。下面我就把从零开始制作这个灯的全过程、踩过的坑以及积累的经验毫无保留地分享出来。2. 核心思路与方案选型制作一个可遥控调光的环形灯核心需要解决几个问题用什么控制核心、如何接收遥控信号、如何驱动LED灯带并实现渐变调光、以及如何为这一切做一个美观实用的外壳。围绕这些点我进行了如下方案选型。2.1 控制核心为什么是Arduino Uno在众多微控制器中我选择了经典的Arduino Uno R3开发板。原因有几个首先它的生态极其丰富关于红外接收、PWM输出的教程和库文件多如牛毛社区支持强大遇到问题几乎都能找到答案。其次对于本项目来说它的性能绰绰有余——我们只需要解码红外信号、输出几路PWM、进行一些简单的逻辑判断ATmega328P芯片完全能胜任。最后Arduino Uno引脚布局规整方便在面包板上搭建原型也易于后续焊接转接。虽然像ESP8266/ESP32这类带Wi-Fi的板子更“智能”但本项目核心是红外遥控无线功能并非必需Arduino Uno的简单可靠反而成了优势。2.2 调光驱动MOSFET与PWM的黄金组合环形灯的光源我选用的是常见的5V WS2812B RGB LED灯带。但注意本项目我们只使用它的白光或单色光模式通过PWM调光来实现亮度渐变。直接使用Arduino的IO口驱动LED灯带是绝对不行的因为IO口的驱动电流通常20mA左右远远不足以点亮整圈灯带可能高达数百mA到上安培。因此必须使用功率开关器件。这里我选择了MOSFET金属-氧化物半导体场效应晶体管具体型号是IRF520 N沟道MOSFET模块。为什么是MOSFET而不是三极管或继电器因为PWM调光需要器件高速开关频率通常在几百Hz到几KHzMOSFET的开关速度极快导通内阻Rds(on)小自身功耗低非常适合这种场景。PWM脉冲宽度调制原理很简单通过快速开关比如每秒500次电源通过改变一个周期内“开”的时间占比占空比来等效控制平均电压从而无级调节LED的亮度。Arduino的数字引脚可以通过analogWrite()函数直接输出PWM信号在指定引脚上非常方便。2.3 信号接收通用红外遥控解码为了实现遥控需要一个红外接收头。我选用的是VS1838B这是一种很常见的38kHz载波红外接收模块。它内部集成了接收管、放大器、解调器可以直接输出被解调后的数字信号给Arduino。几乎所有的家电红外遥控器都使用38kHz载波所以我们可以用家里的旧遥控器来控制我们的灯无需专门购买。Arduino社区有非常成熟的IRremote库可以轻松解码市面上绝大多数遥控器的编码协议如NEC、Sony、RC5等极大简化了开发难度。2.4 外观与结构3D打印定制化外壳为了让作品看起来更精致而不是一堆飞线的“电工作品”一个定制的外壳必不可少。我使用Fusion 360进行三维建模设计了一个两件式的环形外壳底壳用于固定Arduino Uno、MOSFET模块和红外接收头并提供走线槽面壳则是一个乳白色的匀光罩将LED灯带发出的点状光扩散成均匀柔和的环形面光。外壳通过3D打印机FDM类型使用白色PLA材料打印而成。这种方式的优势是成本低、可完全自定义形状和结构并且能够完美贴合内部元器件。注意在方案设计阶段务必确认LED灯带的工作电压和电流。本项目使用5V WS2812B灯带其每颗LED在全白光亮时电流约60mA。如果灯环由60颗LED组成最大电流可能达到3.6A这对电源和MOSFET都是考验。实际使用时我们很少会让所有LED全白最高亮但电源如5V/4A的开关电源和导线的选型必须留有余量。3. 核心硬件解析与电路搭建确定了方案接下来就要深入每个硬件的细节并把它们正确地连接起来。这部分是项目的基石任何一个连接错误都可能导致失败甚至损坏器件。3.1 Arduino Uno引脚功能分配首先规划好Arduino Uno的引脚用途清晰的规划能让后续编程和调试更顺利。数字引脚 D3: 连接红外接收模块VS1838B的信号输出端OUT。选择D3是因为IRremote库常用且稳定的中断引脚就是D2和D3这能确保红外解码的实时性。数字引脚 D9: 输出PWM信号连接到MOSFET模块的信号输入IN端。选择D9或D10, D11是因为在Arduino Uno上这些引脚由16位定时器1驱动可以产生频率和分辨率都更稳定的PWM信号适合驱动需要平滑调光的LED。虽然D3, D5, D6, D9, D10, D11都支持PWM但不同引脚背后的定时器不同在需要更精细控制时有所区别。电源引脚 5V 和 GND: 为红外接收模块和MOSFET模块如果模块逻辑部分需要供电提供5V电源。注意LED灯带的电源不从Arduino取电必须外接独立电源。3.2 MOSFET驱动模块详解与接线我使用的是集成了IRF520 MOSFET和驱动电路的模块它简化了使用方式。模块通常有三个接口VCC、GND、IN信号输入以及三个大电流端子电源、电源-、负载输出。接线步骤控制端连接模块的VCC接Arduino的5VGND接Arduino的GNDIN接Arduino的D9。功率端连接这是关键务必仔细。模块的电源-或GND与外接的5V开关电源的负极-直接相连。模块的负载输出连接到LED灯带的正极输入线。LED灯带的负极-直接连接到5V开关电源的负极-。5V开关电源的正极连接到模块的电源。重要提示务必确保Arduino的GND和外部5V开关电源的GND连接在一起即“共地”。这是整个电路正常工作的前提否则控制信号无法形成回路。我建议在电源负极处用一个接线端子将所有的GNDArduino、MOSFET模块、电源拧在一起。工作原理当Arduino的D9引脚输出PWM高电平时MOSFET模块导通外部5V电源的正极通过模块流向LED灯带正极灯带点亮。当D9输出低电平时MOSFET关闭电路断开灯带熄灭。通过高速切换这个状态就实现了调光。3.3 红外接收模块连接VS1838B模块通常有三个引脚VCC、GND、OUT。VCC- Arduino5VGND- ArduinoGNDOUT- ArduinoD3接线非常简单。为了减少干扰最好在模块的VCC和GND之间并联一个10uF~100uF的电解电容。3.4 电源系统设计电源是稳定运行的保障。我选择了一个输出为5V/4A20W的开关电源适配器。它需要同时为Arduino通过DC插口或VIN引脚供电和LED灯带供电。将电源的5V接到MOSFET模块的电源。将电源的GND-与MOSFET模块的电源-、Arduino的GND、LED灯带的GND全部连接在一起共地。Arduino的供电可以通过其DC插口直接插入该电源如果电压匹配或者将电源的5V和GND接到Arduino的VIN和GND引脚注意接VIN时输入电压需7-12V5V直接接VIN可能无法工作稳妥起见用DC口。4. 软件编程与逻辑实现硬件连接好后大脑程序是关键。我们需要编写Arduino程序实现红外解码、亮度控制、渐变逻辑等功能。4.1 开发环境与库安装首先确保安装了Arduino IDE1.8.x或2.0版本均可。然后需要安装两个核心库IRremote库用于红外解码。在Arduino IDE的“工具”-“管理库...”中搜索“IRremote”选择由Arduino-IRremote或shirriff维护的版本进行安装。FastLED库可选但推荐虽然我们直接用PWM驱动灯带电源但WS2812B灯带本身是智能灯带如果需要未来扩展RGB色彩控制这个库是神器。在本项目中我们主要用它来方便地测试灯带是否完好。可以通过库管理器搜索“FastLED”安装。4.2 核心程序逻辑剖析下面是一个简化但功能完整的程序框架包含了开关、亮度加减、平滑渐变的核心逻辑。#include IRremote.h // 引入红外库 // 引脚定义 const int RECV_PIN 3; // 红外接收引脚 const int PWM_PIN 9; // PWM输出引脚 // 红外接收对象 IRrecv irrecv(RECV_PIN); decode_results results; // 用于存储解码结果 // 亮度控制变量 int brightness 0; // 当前亮度值 (0-255) bool powerOn false; // 电源开关状态 const int fadeStep 5; // 每次亮度变化的步长 const unsigned long holdDelay 200; // 长按判断延时毫秒 unsigned long lastPressTime 0; // 上次按键时间 bool isHolding false; // 是否处于长按状态 // 遥控器按键编码定义需要根据你的遥控器实际解码值修改 #define IR_POWER 0xFFA25D // 示例电源键的十六进制编码 #define IR_VOL_UP 0xFF629D // 音量编码 #define IR_VOL_DOWN 0xFFA857 // 音量-编码 void setup() { Serial.begin(115200); // 开启串口调试便于查看红外码 irrecv.enableIRIn(); // 启动红外接收 pinMode(PWM_PIN, OUTPUT); analogWrite(PWM_PIN, 0); // 初始状态灯带关闭 Serial.println(环形灯控制器就绪...); } void loop() { // 1. 检查是否收到红外信号 if (irrecv.decode(results)) { unsigned long irValue results.value; Serial.print(收到红外码: 0x); Serial.println(irValue, HEX); // 打印十六进制码 // 2. 处理按键事件 handleIRButton(irValue); irrecv.resume(); // 接收下一个信号 } // 3. 其他后台任务如根据状态更新亮度可以放在这里 // 本例中亮度更新在handleIRButton中直接完成 } void handleIRButton(unsigned long buttonCode) { unsigned long currentTime millis(); // 判断按键类型 switch(buttonCode) { case IR_POWER: // 短按开关 powerOn !powerOn; // 切换开关状态 if (!powerOn) { brightness 0; // 关闭时亮度归零 } else { // 开启时恢复到上次亮度或默认亮度 brightness (brightness 0) ? 100 : brightness; } updateBrightness(); // 立即更新PWM输出 lastPressTime currentTime; isHolding false; Serial.println(powerOn ? 打开 : 关闭); break; case IR_VOL_UP: if (powerOn) { if (currentTime - lastPressTime holdDelay) { // 长按处理持续增加亮度 isHolding true; brightness min(brightness fadeStep, 255); // 限制最大值255 } else { // 短按处理单步增加 brightness min(brightness 20, 255); } updateBrightness(); Serial.print(亮度 - ); Serial.println(brightness); } lastPressTime currentTime; break; case IR_VOL_DOWN: if (powerOn) { if (currentTime - lastPressTime holdDelay) { // 长按处理持续减少亮度 isHolding true; brightness max(brightness - fadeStep, 0); // 限制最小值0 } else { // 短按处理单步减少 brightness max(brightness - 20, 0); } updateBrightness(); Serial.print(亮度- - ); Serial.println(brightness); } lastPressTime currentTime; break; default: // 其他未定义的按键码 Serial.println(未知按键); break; } } // 更新PWM输出到LED灯带 void updateBrightness() { analogWrite(PWM_PIN, brightness); }程序逻辑详解初始化在setup()中初始化串口用于调试、红外接收、PWM引脚。主循环loop()不断检查是否收到红外信号。一旦收到就解码并调用handleIRButton处理。按键处理电源键短按切换powerOn状态。开灯时如果当前亮度为0则设为一个默认值100关灯时亮度归零。音量/-键实现了短按和长按双重功能。通过millis()函数计时如果两次接收到相同按键信号的时间间隔小于holdDelay如200ms则认为是长按进行连续渐变调节fadeStep步长否则为短按进行较大步长的跳跃调节。min()和max()函数用于将亮度限制在0-255之间。亮度更新任何亮度变化最终都调用updateBrightness()通过analogWrite()函数将0-255的亮度值映射为0%-100%的PWM占空比输出到D9引脚。实操心得获取你的遥控器编码上面的IR_POWER等编码是示例你的遥控器按键编码大概率不同。为了获取正确的编码你可以先上传一个简单的红外解码程序IRremote库示例中有打开串口监视器然后按下遥控器按键串口会打印出对应的十六进制数值。把这些数值记录下来替换掉程序中的#define语句即可。这是项目调试的第一步也是必须的一步。4.3 实现平滑渐变的技巧上面的程序实现了基本的亮度控制但长按时的亮度变化可能还不够“平滑”感觉是一档一档地跳变。为了实现更丝滑的渐变我们可以引入“缓动Easing”函数或使用更精细的时间控制。一个简单的改进方法是在长按期间不是每次循环都固定增加fadeStep而是根据长按的时间来动态计算增量或者使用微小的步长配合延时。但要注意loop()循环不能有长的delay()否则会无法及时响应红外信号。另一种更优雅的方式是利用millis()实现非阻塞的渐变动画。例如当检测到长按音量时设置一个目标亮度如255然后在不阻塞主循环的前提下每几毫秒将当前亮度向目标亮度逼近一点直到松开按键或达到目标。这需要更复杂的状态机管理但效果最佳。5. 3D建模与打印实战电路和程序都调试成功后就该为它们打造一个“家”了。3D打印外壳不仅能提升美观度更能保护内部元件方便安装。5.1 建模思路与要点我使用Fusion 360进行建模主要分为底壳和面罩两部分。底壳设计要点尺寸定位首先测量Arduino Uno、MOSFET模块、红外接收头的实际尺寸以及计划使用的环形灯带的内外径。我的灯带内径约18cm外径20cm。结构设计主板位设计一个凹陷的卡槽刚好能放入Arduino Uno四周有立柱用于螺丝固定对应Uno板上的安装孔。模块位为MOSFET模块和红外接收头设计对应的卡槽或支柱。走线槽设计通道让杜邦线、电源线能规整地布设避免杂乱。电源接口开孔在侧面开一个DC插座孔方便连接外部5V电源。红外接收窗在前面板位置开一个小孔让红外接收头能“看到”外部并用透红外线的深色亚克力片或直接从旧遥控器上拆下来的接收窗遮挡。安装柱设计几个螺丝柱用于和面罩固定。散热考虑MOSFET在工作时可能会有轻微发热底壳对应位置可以设计一些通风栅格。面罩匀光罩设计要点形状一个环形的盖子内径略小于灯带内径外径略大于灯带外径以便扣在底壳上。厚度与材质厚度建议2-3mm。太薄容易透出LED颗粒光点太厚则影响出光效率。打印材料选择白色或乳白色的PLA这种材料能很好地扩散光线。固定方式设计卡扣或螺丝孔位与底壳的安装柱对应实现无损拆装。表面处理模型表面可以添加一些细微的纹理如磨砂、条纹来进一步增强光的均匀度。5.2 打印设置与后处理切片设置建议以PLA材料为例层高0.2mm在打印质量和时间间取得平衡。填充密度15%-20%。对于外壳不需要太高填充。支撑底壳内部如果有悬空结构如卡槽上方的部分需要生成支撑。面罩如果是一个平坦的环形则可能不需要支撑。打印速度50-60mm/s保证细节。** brim 或 raft**为了防止翘边可以在底壳这类大面积打印件底部添加一圈brim裙边。打印后处理去除支撑小心地移除所有支撑材料。打磨对于有毛刺或粗糙的接合面可以用细砂纸轻轻打磨确保底壳和面罩能平整结合。测试装配在装入电子元件前先试装一下外壳检查孔位是否对齐空间是否足够。透光测试将打印好的白色面罩盖在点亮的灯带上观察匀光效果。如果还能明显看到LED颗粒可以考虑在面罩内侧再贴一层薄的白纸或专用的匀光膜如硫酸纸。避坑指南红外接收窗的讲究红外接收头前方的开孔不能直接用透明塑料遮挡因为很多透明塑料会阻挡或减弱红外信号。最佳实践是使用从废旧遥控器上拆下来的那个深色通常是黑色或深紫色的小塑料片它就是专业的红外滤光片。如果没有可以用一小片深色的胶片如旧的胶卷底片代替。开孔大小只需比接收头略大即可避免杂光干扰。6. 系统集成、调试与问题排查将所有部分组装起来并进行最终调试是项目从模块走向成品的最后一步也是最容易遇到问题的一步。6.1 集成组装步骤固定电路将Arduino Uno、MOSFET模块、红外接收头用螺丝或热熔胶固定在底壳的对应位置。确保牢固且不会短路。焊接与连接将LED灯带的电源正极导线焊接或压接到MOSFET模块的负载输出端子上。将LED灯带的电源负极-导线与外部5V电源的负极、Arduino的GND在电源负极接线端子上可靠连接。用杜邦线连接Arduino与各模块的控制信号线和电源线5V, GND。建议使用不同颜色的线区分。布线与理线将电源线、信号线沿着底壳的走线槽布置并用扎带或胶带固定确保内部整洁没有导线被挤压或可能被螺丝刺破的风险。安装灯带将LED灯带沿着底壳边缘的环形槽粘贴好。如果灯带是裸板无防水胶注意背胶的粘性必要时用一点胶水辅助固定。合盖将匀光面罩对准底壳用螺丝或卡扣固定。注意不要压到内部的电线。连接电源将5V/4A电源适配器插入底壳的DC插座。6.2 上电调试流程首次上电检查连接电源前再次用万用表通断档检查所有电源连接确保正负极没有接反、没有短路。然后接通电源观察Arduino板上的电源指示灯是否亮起各模块有无异常发热或冒烟如有立即断电。程序上传与监控通过USB线将Arduino连接至电脑上传之前写好的程序。打开串口监视器设置波特率为115200。你应该能看到“环形灯控制器就绪...”的提示。红外学习测试用遥控器对准红外接收窗按下按键。在串口监视器中你应该能看到对应的十六进制码被打印出来。记录下电源、音量、音量-的编码并更新到程序中重新上传。功能测试短按电源键灯带应点亮/熄灭。短按音量/-亮度应有明显跳变。长按音量/-亮度应能平滑地持续增加或减少。压力与稳定性测试让灯在最高亮度下持续工作10-15分钟用手触摸MOSFET模块和电源适配器感受温升。微热是正常的但如果烫手说明散热不足或负载过重需要检查。6.3 常见问题与排查技巧实录即使按照步骤操作也难免会遇到问题。下面是我在制作和帮助他人时遇到的一些典型问题及解决方法。问题现象可能原因排查步骤与解决方案上电后Arduino灯亮但灯带完全不亮遥控无反应。1. 主电源未接通或损坏。2. MOSFET模块接线错误或损坏。3. Arduino程序未运行或PWM引脚错误。1. 用万用表测量外部5V电源输出是否正常。2. 检查MOSFET模块的功率端接线电源→模块输入模块输出→灯带灯带-和电源-共地。务必共地3. 写一个简单的测试程序让PWM引脚输出固定值如analogWrite(9, 100)用万用表电压档测D9引脚对GND电压应有约1V左右100/255*5V≈1.96V。若无检查程序或引脚定义。灯带常亮不受PWM控制或亮度不可调。1. MOSFET模块可能已击穿常通。2. PWM信号未成功连接到MOSFET的IN端。3. 外部电源直接接到了灯带上未经过MOSFET。1. 断开Arduino与MOSFET IN端的连接灯应熄灭。如果还亮说明MOSFET可能损坏。2. 用示波器或万用表交流档或频率档测量MOSFET IN端是否有变化的电压PWM信号。3. 仔细检查电路确保灯带正极只连接到了MOSFET的输出端。红外遥控不灵敏或完全无效。1. 红外接收头引脚接错。2. 遥控器电池没电。3. 红外接收窗材料不透红外光。4.IRremote库引脚定义冲突。1. 确认VS1838B的OUT脚接在了Arduino的D2或D3取决于库和程序。2. 更换遥控器电池。3. 移除面罩或更换接收窗材料为深色红外透光塑料。4. 某些型号Arduino板如Nano的D3引脚可能与定时器冲突尝试换到D11等其他支持中断的引脚并修改库的引脚定义。亮度调节时灯带有闪烁感。1. PWM频率过低。2. 电源功率不足导致在PWM高电平时电压被拉低。3. 程序逻辑问题更新亮度太慢。1. Arduino默认PWM频率约490HzD5, D6和980HzD3, D9, D10, D11。对于LED调光980Hz通常足够。可尝试更换到D9/D10引脚。2. 检查电源额定电流是否足够。在灯带最亮时测量电源输出电压如果低于4.8V说明电源带载能力不足需更换更大功率电源。3. 检查程序中updateBrightness是否被及时调用长按逻辑中的fadeStep是否太小导致亮度变化肉眼可见。长按亮度增减不流畅有卡顿。1. 红外解码占用了过多时间影响了主循环。2. 亮度更新逻辑有阻塞如用了delay。3. 串口打印调试信息过于频繁拖慢速度。1. 确保使用irrecv.resume()及时释放解码器。2. 将亮度渐变逻辑改为基于millis()的非阻塞方式避免任何delay()。3. 在最终版本中移除或减少Serial.print语句它们非常耗时。MOSFET模块发热严重。1. LED灯带电流过大超过MOSFET额定电流。2. MOSFET导通内阻Rds(on)较大或散热不良。3. PWM频率过高导致开关损耗增大。1. 计算或测量灯带最大工作电流。IRF520的连续漏极电流可达9.6A一般够用。如果电流真的很大考虑换用导通电阻更低的MOSFET如IRFZ44N或加装散热片。2. 确保MOSFET模块的GND已良好连接驱动电压足够5V。3. Arduino默认PWM频率不高开关损耗通常不是主因。重点检查电流和散热。一个高级调试技巧使用手机摄像头检测红外信号如果你怀疑遥控器或接收头有问题有一个简单方法打开手机的摄像头用遥控器发射头对准手机镜头并按按键。在手机屏幕上你应该能看到遥控器发射头发出微弱的紫色或白色闪烁光因为手机CMOS能感应到红外光。这能快速判断遥控器是否在工作。7. 项目优化与扩展思路基础功能实现后这个项目还有很大的优化和扩展空间可以让你的灯变得更智能、更个性。7.1 硬件优化增加电容滤波在外部5V电源接入点并联一个大的电解电容如470uF/16V和一个小的陶瓷电容0.1uF可以有效地平滑电源减少因PWM快速开关引起的电压波动让灯光更稳定特别是低亮度时避免闪烁。改进散热如果MOSFET模块温热可以在其金属散热片上贴一个小型散热片。如果灯带功率很大可以考虑将MOSFET更换为TO-220封装的独立器件然后安装在更大的散热片上。增加物理开关在外壳上增加一个船型开关串联在总电源回路中实现物理断电更安全方便。升级无线控制将Arduino Uno替换为ESP8266如NodeMCU或ESP32利用其Wi-Fi功能接入家庭局域网。你可以编写一个简单的Web服务器页面用手机浏览器就能控制灯光或者接入Home Assistant、米家等智能家居平台需额外开发实现语音控制、定时开关、与其他设备联动等高级功能。7.2 软件功能扩展记忆功能利用Arduino的EEPROM电可擦可编程只读存储器在每次调整亮度后将当前的亮度值和开关状态保存起来。这样即使断电再上电灯也能恢复到上次关闭时的状态。更多灯光模式目前只用了WS2812B的白光。你可以修改程序使用FastLED库让灯带呈现出彩虹渐变、色彩循环、音乐频谱可视化等炫酷的RGB效果。遥控器上的其他按键如数字键可以定义为不同模式的切换。平滑呼吸灯效果不通过遥控器让灯自动实现缓慢的明暗呼吸效果。这只需要在loop()中增加一段正弦波或三角波算法来周期性改变brightness值即可。光敏自动控制添加一个光敏电阻模块检测环境光照强度。当环境光变暗时自动开启小夜灯模式当环境光变亮时自动关闭。实现真正的自动化。7.3 结构与应用场景拓展尺寸与形状变化你可以设计不同直径、甚至椭圆、心形的灯环。灯带可以剪裁和焊接非常灵活。安装方式在底壳背面增加标准相机三脚架的螺丝孔1/4英寸就可以把它装在三脚架或支架上作为摄影补光灯或直播氛围灯。也可以设计壁挂或吊装的卡扣。多灯联动使用一个红外接收头但控制多个相同的灯需要每个灯有自己的Arduino和驱动可以实现组开关和同步调光。或者使用ESP32的蓝牙Mesh或Wi-Fi实现多灯分组和独立控制。这个项目就像一颗种子基本的遥控调光环形灯是它的主干。当你掌握了这些核心技能——单片机控制、电路驱动、3D建模打印和编程逻辑后就可以根据自己的想象力和需求让它生长出各种不同的枝叶创造出独一无二、真正贴合你心意的智能照明作品。从按下遥控器看到灯光如你所愿般缓缓亮起的那一刻所有的折腾都值了。