从PCB设计到发光徽章:基于Attiny13A的DIY电子制作全流程
1. 项目概述:当PCB不再是电路板,而是你的个性徽章
几年前,当我第一次把一块画着复杂图案的PCB别在背包上,引来朋友追问“这是什么芯片”时,我意识到,印刷电路板(PCB)的玩法远不止于机箱里的绿色底板。它可以是承载创意的画布,是融合电子与艺术的媒介。今天分享的这个“调查兵团徽章”项目,正是这种思路的一次具体实践——用标准的PCB工艺,制作一个能发光、可佩戴的动漫主题徽章。
这个项目的核心目标很明确:制作一个基于《进击的巨人》中“驻扎兵团”徽章图案的、自带发光效果的PCB徽章。它不仅仅是一个装饰品,更是一个完整的电子系统:由Attiny13A微控制器驱动,通过MOSFET控制15颗并联的0603封装红色LED,实现呼吸灯效果,并由一枚CR2032纽扣电池供电。整个过程涉及从图像处理到PCB设计,从SMD(表面贴装)焊接再到单片机编程的全流程。无论你是想为自己喜欢的IP制作一个独特的周边,还是想深入学习从电路设计到实物制作的全套技能,这个项目都能提供一条清晰的路径。接下来,我将拆解每个环节的技术细节与实操心得。
2. 核心设计思路:为什么是PCB,而不是3D打印?
在开始画图之前,一个根本性的选择摆在面前:用什么作为徽章的基底?常见的思路可能是3D打印一个外壳,再把电路板塞进去。但我最终选择了将PCB本身作为主体结构,这背后有几个关键的工程考量。
2.1 结构一体化的优势与实现
首先,是重量和厚度的极致优化。一个典型的3D打印外壳加上内部的PCB、电池盒,其厚度往往超过5mm,重量也随之增加。而将PCB作为承载所有元件的基板,其厚度可以控制在1.6mm(标准FR4板材厚度),加上背面的电池座和开关,总厚度也能控制在3-4mm左右,佩戴起来更轻便、贴服。更重要的是,它实现了结构的一体化。PCB上的铜层和丝印层直接构成了徽章的图案和文字,无需额外的面板或贴纸,图案精度由制板厂的光绘工艺保证,边缘清晰锐利,且永不磨损。
为了实现“发光徽章”的效果,我采用了“背光穿透”的设计。徽章正面的玫瑰图案是丝印层(通常是白色油墨)。为了让背面的LED光能透到正面,需要在对应图案区域的阻焊层(Soldermask)开窗。阻焊层是PCB上那层绿色的(或其他颜色的)油漆,它绝缘并保护走线。开窗就是把这层油漆去掉,露出下面的FR4玻璃纤维基板。FR4本身是半透明的,尤其在薄层区域,光线可以穿透。因此,我在PCB背面对应玫瑰图案的区域,做了一个大的阻焊层开窗;在正面图案区域,则做了许多不规则形状的小开窗。这样,背面LED的光线就能穿过FR4基板,从正面的开窗处透出,形成图案发光的效果。
注意:FR4的透光性很弱,且呈黄绿色。如果希望正面发光更均匀、明亮,可以考虑使用白色阻焊油墨(能反射更多光),或者选择透光性更好的基板材料(如聚酰亚胺,但成本高)。本项目因图案精细且LED数量有限,追求的是若隐若现的暗红色辉光,与“驻扎兵团”的沉稳气质相符,因此标准FR4的微弱透光性反而成了优点。
2.2 电路方案的取舍:简约与可控的平衡
电路的核心需求是驱动15颗LED并实现动态效果(如呼吸、闪烁)。最粗暴的方案是将LED直接接上电池和开关,但这样只能常亮。为了控制,需要一个微控制器(MCU)。对于这种低复杂度控制,Attiny13A是性价比极高的选择。它仅有8个引脚,1KB的Flash内存,但足以运行一个PWM(脉冲宽度调制)呼吸灯程序。
然而,Attiny13A的单个IO口驱动能力有限(典型值20mA),无法直接驱动15颗并联的LED(总电流可能超过100mA)。因此,我引入了AO3400 N沟道MOSFET作为开关管。MCU的PWM信号控制MOSFET的栅极(Gate),MOSFET的漏极(Drain)连接LED串的阴极,源极(Source)接地。这样,MCU只提供控制信号,大电流由MOSFET承担,实现了“小马拉大车”。
在原理图中,我特意设计了一个“直通”选项。通过一个0欧姆电阻(R6)的焊盘,可以选择短接它,从而绕过MCU和MOSFET,将LED直接连接到电池。同时,另一个电阻(R7)的焊盘用于连接MCU控制通路。这个设计提供了灵活性:如果只想做一个简单的常亮徽章,可以省去编程步骤,简化制作;如果想升级效果,随时可以焊上MCU部分。这种“可扩展性”设计在DIY项目中非常实用,能适应不同制作者的需求和技能水平。
3. PCB设计实战:从图片到可生产的Gerber文件
将一张动漫徽章的图片变成可以下单生产的PCB文件,这个过程是创意落地的关键一步,充满了细节和技巧。
3.1 图像处理与导入
首先,需要找到一张高对比度、清晰的黑白徽章矢量图或位图。我使用的是驻扎兵团的玫瑰图案。由于我的PCB设计软件(这里以常用的KiCad为例,原作者用的OrCad原理类似)通常只支持位图格式(如BMP)作为图形导入,所以需要先将图片转换为BMP。如果原图是彩色的,需要在图像处理软件(如Photoshop、GIMP)中将其转换为纯黑白(1位色深),并确保线条清晰,没有杂点。
在KiCad中,导入图片的步骤是:在PCB编辑器中,选择“文件” -> “导入” -> “图形”。将图片导入到丝印层(F.Silkscreen)。丝印层是印制在PCB表面的白色(或其他颜色)油墨层,用于标注元件位号、版本号或装饰图案。导入后,图片会作为一个矢量图形集合(由许多线段和填充区域构成)存在。你需要仔细检查,确保图形的边界闭合、无断点,这关系到后续阻焊开窗的准确性。
3.2 阻焊层开窗的艺术
这是实现背光效果的核心操作。我们需要在正反两面的阻焊层上“挖洞”。
- 正面(Top Soldermask):在导入的玫瑰图案内部,使用“填充区域(Fill Zone)”或“图形填充”工具,沿着图案边缘绘制出一个个不规则形状的填充区。关键是将这些填充区的图层属性设置为“顶层阻焊(F.Mask)”。在PCB制造中,“阻焊层”文件默认是定义“哪里需要覆盖阻焊油墨”。因此,在这里绘制图形,意思就是“在这些图形区域,不要覆盖油墨”,即开窗。正面开窗要精细,遵循图案本身的纹理,这样光才能从特定的形状中透出。
- 背面(Bottom Soldermask):在背面对应整个玫瑰图案的大致区域,绘制一个大的、覆盖所有LED安装位置的填充区域,同样将其图层属性设置为“底层阻焊(B.Mask)”。背面开窗面积大,是为了让LED发出的光有足够的区域进入FR4基板。
实操心得:在绘制阻焊开窗图形时,务必与实际的LED焊盘位置对齐。最好在PCB设计初期就先大致放置好LED的封装,确保开窗区域能完全覆盖LED的出光面。可以使用设计软件的“3D视图”功能反复检查各层的叠加效果。
3.3 布局、走线与设计检查
元件布局需要综合考虑电气性能、焊接难度和美观。我将Attiny13A、MOSFET、电阻等小信号器件放在背面中央区域。15颗0603 LED则以玫瑰图案为中心,呈放射状或阵列排列在背面开窗区域内,确保光线能均匀向上照射。CR2032电池座和滑动开关作为较大的通孔元件(THT),也安排在背面边缘,以降低整体厚度。
走线方面,LED全部并联,并通过一条较宽的走线(比如20mil)连接到MOSFET的漏极,另一条宽走线连接所有LED的阳极到电源正极,以减少线路阻抗和压降。MCU的编程接口(VCC, GND, RESET, SCK, MISO, MOSI)引出了一组焊盘,方便后续用烧录夹子连接。
设计完成后,必须运行电气规则检查(ERC)和设计规则检查(DRC)。重点检查:
- 所有网络是否连接正确,有无短路或断路。
- 阻焊层开窗图形是否与焊盘重叠(应避免,否则可能导致焊接不良)。
- 丝印层文字是否清晰,且未与焊盘重叠。
- 生成Gerber文件时,务必包含以下层:顶层铜(F.Cu)、底层铜(B.Cu)、顶层阻焊(F.Mask)、底层阻焊(B.Mask)、顶层丝印(F.Silkscreen)、边框层(Edge.Cuts)。向PCB制板厂(如文中提到的PCBWAY)提交时,通常需要将这些Gerber文件打包成ZIP。
4. 焊接组装全流程:从SMD到THT的手工技巧
收到打样回来的红色阻焊PCB后,真正的挑战开始了。手工焊接如此多的0603封装元件,需要耐心和正确的工具方法。
4.1 锡膏涂布与贴片元件焊接
对于背面的小尺寸SMD元件(Attiny13A、AO3400、0603电阻),使用锡膏和热风枪或加热板进行回流焊接是最高效、最可靠的方法。
- 锡膏涂布:我使用的是针管装的中温含铅锡膏(Sn63/Pb37)。将少量锡膏挤到干净的平面上,用细头镊子或牙签,蘸取微量锡膏,仔细地涂到每个元件的焊盘上。量宁少勿多,过多的锡膏在熔化后容易导致元件移位或桥连。
- 贴片:使用防静电镊子,将元件逐一精准地放到对应的焊盘上。对于SOIC-8封装的Attiny13A,要特别注意方向(芯片上的凹点或斜角对应丝印框的标记)。贴片过程要稳,避免触碰已经涂好锡膏的其他焊盘。
- 回流焊接:我使用了一个自制的恒温加热板。将PCB背面朝下,轻轻放置在已预热到约150°C的加热板上。然后缓慢升温至锡膏熔点(183°C左右)以上,约200-220°C。此时可以看到锡膏瞬间熔化,变成光亮的银白色,元件会在表面张力作用下自动对齐(此现象称为“自对中效应”)。保持峰值温度10-20秒后,关闭加热,让PCB在加热板上自然冷却至室温,或用镊子移至散热架上冷却。
关键技巧:加热和冷却过程切忌震动工作台。熔融的焊锡表面张力是元件归位的唯一力量,震动会导致元件漂移。自制加热板务必注意温控均匀性,中心与边缘温差过大会导致局部焊接不良。
4.2 0603 LED的手工焊接要点
15颗0603 LED需要在回流焊之后,单独进行手工焊接。这是因为LED需要以“倒装”形式焊接——即发光面朝向PCB板子,让光线射向FR4基板。标准回流焊无法实现这种定向。
- 定位与固定:先用烙铁在一个焊盘上上少量锡。然后用镊子夹起LED,将其侧立,将一端引脚对准已上锡的焊盘,用烙铁加热焊盘使锡熔化,同时将LED引脚插入,移开烙铁,锡凝固后LED即被固定在一侧。这个过程要快,避免过热。
- 完成焊接:固定一侧后,再焊接LED的另一只引脚。0603封装非常小,烙铁头建议使用尖头或刀头,温度设置在300-320°C之间。焊接时间控制在2-3秒内,点到即止。完成后,用放大镜检查焊点是否饱满、光亮,有无桥连。
- 极性检查:0603 LED通常有一个绿色或黑色的标记代表阴极(负极)。在PCB设计时,焊盘也需要做极性标记(如方形焊盘为阳极,圆形为阴极)。焊接前务必核对,一旦焊反,LED不会发光。
4.3 通孔元件焊接与整体测试
最后焊接通孔元件:CR2032电池座和滑动开关。
- 电池座焊接:将电池座引脚穿过PCB孔位,从背面焊接。焊接时要确保电池座与PCB板面贴合平整。焊点要饱满,因为这里需要承受电池更换时的机械应力。
- 开关焊接:同样注意安装平整度。焊接后,可以滴一滴热熔胶或UV胶在开关壳体与PCB的接触边缘,增强固定,防止频繁拨动导致焊盘脱落。
- 通电测试:在装入电池和MCU前,先进行基础测试。将万用表调到二极管测试档,表笔接触LED焊盘的阴阳极(注意,此时电路是并联的,测试任意一组都应能使所有LED微亮)。如果某颗LED不亮,检查其是否焊反、虚焊或损坏。确认所有LED通路正常后,再安装已编程的MCU。
5. 软件与烧录:让Attiny13A“呼吸”起来
硬件组装完成,但徽章还没有“灵魂”。我们需要给Attiny13A编写并烧录程序。
5.1 开发环境搭建与程序解析
Attiny13A并非Arduino IDE默认支持的芯片,需要安装第三方开发板支持包。我使用的是MicroCore,它支持Attiny13系列。
- 安装MicroCore:在Arduino IDE的“首选项”->“附加开发板管理器网址”中添加
https://mcudude.github.io/MicroCore/package_MCUdude_index.json。然后在“工具”->“开发板”->“开发板管理器”中搜索并安装MicroCore。 - 程序代码解析:实现呼吸灯效果的核心是模拟PWM。Attiny13A硬件上支持PWM的引脚有限,但我们可以通过软件模拟。以下是一个简单的呼吸灯程序,其原理是不断改变一个周期内高电平的时间比例(占空比):
这段代码会让LED亮度从0到255逐渐增加,到达顶点后再逐渐减小,如此循环,形成呼吸效果。// 定义连接MOSFET栅极的引脚(使用PB0,即Arduino引脚0) int ledPin = 0; int brightness = 0; // 当前亮度值 int fadeAmount = 5; // 每次亮度变化量 void setup() { pinMode(ledPin, OUTPUT); } void loop() { // 使用analogWrite函数输出PWM。Attiny13A在MicroCore支持下,可以在指定引脚模拟PWM。 analogWrite(ledPin, brightness); // 更新亮度值 brightness = brightness + fadeAmount; // 当亮度达到上限或下限时,反转变化方向 if (brightness <= 0 || brightness >= 255) { fadeAmount = -fadeAmount; } // 控制变化速度,delay(30)会得到较快的呼吸效果,delay(100)则较慢。 delay(100); }fadeAmount和delay的值可以调整呼吸的节奏和步进细腻度。
5.2 使用Arduino作为ISP编程器
Attiny13A需要一个编程器来烧录固件。最经济的方式是将一块Arduino Uno/Nano变成ISP(在线系统编程)烧录器。
- 配置编程器:在Arduino IDE中打开示例代码
File -> Examples -> 11.ArduinoISP -> ArduinoISP。将其上传到你的Arduino Uno板上。上传后,在“工具”菜单中,“编程器”一项选择“Arduino as ISP”。 - 硬件连接:按照下表连接Arduino Uno与Attiny13A(需先将Attiny13A焊接到徽章PCB上,或通过SOIC8测试夹连接):
Arduino Uno引脚 Attiny13A引脚 功能 5V VCC (Pin 8) 电源 GND GND (Pin 4) 地 D10 RESET (Pin 1) 复位 D11 MOSI (Pin 5) 主出从入 D12 MISO (Pin 6) 主入从出 D13 SCK (Pin 7) 时钟 重要:在完成ArduinoISP程序上传后,需要在Arduino Uno的RESET引脚和GND之间焊接一个10μF的电解电容(负极接GND)。这是为了在给目标芯片(Attiny)编程时,防止Arduino Uno自身复位。 - 烧录引导程序与程序:在“工具”菜单中,选择正确的开发板(Attiny13)、时钟(内部9.6 MHz)等选项。然后点击“烧录引导程序”。成功后,再点击“通过编程器上传”来上传你的呼吸灯程序。
避坑指南:烧录失败最常见的原因是接线错误或接触不良。务必反复核对引脚定义。对于已焊接在复杂PCB上的MCU,使用SOIC8烧录夹是救星,它能通过弹簧针与芯片引脚接触,无需焊接飞线。此外,确保给Attiny13A供电的电压稳定(5V),不稳定的电源可能导致烧录过程出错。
6. 调试、优化与项目总结
完成所有步骤后,装上电池,拨动开关,玫瑰图案应该会缓缓亮起又暗下,呼吸效果就此呈现。如果效果不理想,可以从以下几个方面排查:
6.1 常见问题与解决方案速查表
| 现象 | 可能原因 | 排查与解决方法 |
|---|---|---|
| 所有LED都不亮 | 1. 电池没电或装反。 2. 电源开关损坏或未接通。 3. MOSFET(AO3400)损坏或焊接错误(如D、S极接反)。 4. Attiny13A未工作或程序错误。 | 1. 用万用表测电池电压,应高于2.8V。 2. 用万用表通断档检查开关。 3. 检查MOSFET型号及焊接,确认栅极(G)受MCU控制。 4. 用编程器重新烧录一个简单的“常亮”测试程序。 |
| 部分LED不亮 | 1. 个别LED焊反、虚焊或损坏。 2. 对应支路的PCB走线断裂。 | 1. 用万用表二极管档单独测试不亮的LED。 2. 用放大镜或万用表检查LED两焊盘间的PCB走线是否连通。 |
| LED亮度不均或闪烁 | 1. 电池电量不足,带载电压下降。 2. 并联的LED未串联均流电阻(本项目未使用)。 3. PWM控制信号不稳定。 | 1. 更换新电池。 2. 对于要求高的场合,建议每颗LED串联一个10-22欧姆的小电阻。 3. 检查MCU供电是否稳定,程序逻辑是否正确。 |
| 呼吸灯效果不流畅 | 1. 程序中的delay()时间过长或过短。2. fadeAmount值设置过大,导致亮度阶梯感强。 | 1. 调整delay()值,如从100改为30,加快循环。2. 减小 fadeAmount值,如从5改为1,使亮度变化更平滑。 |
| MCU无法烧录程序 | 1. ISP接线错误或接触不良。 2. Arduino作为ISP时,未在RESET与GND间加10μF电容。 3. Attiny13A芯片损坏。 | 1. 双重检查接线,使用烧录夹确保接触良好。 2. 补上电容。 3. 更换芯片尝试。 |
6.2 项目优化与扩展思路
这个基础项目有很多可以玩出花样的扩展方向:
- 色彩升级:将单色0603 LED换成RGB LED(如WS2812B迷你封装)。但这需要升级MCU,Attiny13A资源不足以驱动复杂的NeoPixel库,可以换用Attiny85或ESP8266(如ESP-01S),实现流光溢彩的动态效果。
- 交互增强:增加一个微型振动传感器或光敏电阻。当检测到佩戴者运动或环境光变暗时,自动点亮徽章,更智能节能。
- 结构改进:在PCB正面透光区域,覆盖一层半透明的彩色亚克力或扩散膜,可以使发光更均匀,并赋予颜色。背面可以用3D打印一个超薄的保护盖,既美观又能保护元件。
- 供电优化:CR2032电池容量有限。如果追求更长续航,可以考虑使用更小的可充电锂电池(如LIR2032)配合微型充电模块,做成可重复充电的版本。
回顾整个项目,从一张图片到一枚会呼吸的徽章,最大的成就感来自于跨越了软件、硬件、设计、工艺多个环节,亲手将想法变为现实。PCB制造工艺的精度和可靠性,为电子艺术创作提供了坚实的基石。过程中最深的体会是“细节决定成败”:阻焊开窗的准确性、锡膏量的控制、焊接温度和时间,每一个微小的操作都直接影响最终效果。对于想入门硬件DIY的朋友,这类项目是一个绝佳的起点,它涵盖了电子制作的核心流程,复杂度适中,成果又足够酷炫。下次,或许可以试试把喜欢的游戏Logo、乐队标志也变成这样一个独一无二的发光徽章。
