见过LED流水灯,也见过各种RGB灯环,但把90颗LED塞进一块直径只有24mm的PCB里,做成一副可以戴在耳朵上的电子耳环,还是挺有意思的。
最近看到一个国外的开源项目,叫做HALO-90。

整个耳环就是一块圆形PCB,正面排满了红色LED,背面则是单片机、麦克风和纽扣电池。不仅能显示各种灯光效果,还能跟着周围的音乐节奏闪烁。

项目的硬件、固件、PCB和外壳设计资料都已经开源,喜欢折腾的朋友可以自己复刻一套。
90颗LED,10个IO口就能搞定。
HALO-90的正面排列了90颗0402封装的红色LED,每颗间隔4°,刚好组成一个完整的圆环。

这里采用的是Charlieplexing(查理复用)驱动方式,利用GPIO高电平、低电平和高阻态之间的切换,让10根IO线实现90颗LED的独立控制。

当然,这些LED并不是同时持续点亮的,而是通过高速扫描,利用人眼的视觉暂留形成完整的发光效果。
下面所示的函数可以根据 LED 编号获取列和行:
void setLed(uint8_t led);void ledHigh(uint8_t led);void ledLow(uint8_t led);uint8_t col = led / 9;uint8_t topElements = 9 - col;uint8_t row = 9 - (led % 9);if (topElements <= (9 - row)) {row--;}
要关闭 LED 灯,需要将列和行都设置为高阻抗。要打开 LED 灯,需要将列设置为高阻抗,将行设置为低阻抗。
相比给每颗LED单独分配一个GPIO,这种方案省下了大量引脚,也不需要额外增加LED驱动芯片。
灯珠成本对比WS2812便宜很多,不过这个就只能单色了。
不过,驱动程序和PCB布线就没那么简单了。
灯珠用普通0402红色灯珠。

主控选用意法半导体的STM8L151G4,一颗主频16MHz的8位低功耗单片机,后面给它移植到国产MCU上。

为了让灯光能跟着音乐变化,板上还集成了一颗MEMS麦克风,通过ADC采集声音信号,再由程序控制LED显示。麦克风选择了Knowles SPW2430HR5H-B,可以使用Adafruit的扩展板轻松进行测试。

按钮采用超薄微型触觉开关,KXT311LHS,触发力很低,100g,用指甲边缘可以轻松按下。

惯性测量单元也是ST的6 自由度惯性测量单元 (IMU),集成了三轴加速度计和三轴陀螺仪。

板子采用4层PCB设计,厚度只有1mm,背面安装了一颗CR2032纽扣电池,装上电池后,整个耳环重量约5.2g。

目前固件提供了三种灯光模式:
音乐律动模式: 根据麦克风采集到的声音幅度,让LED跟着音乐变化。 HALO光环模式: 通过高速扫描,形成连续发光的圆环效果。 Sparkle闪烁模式: 随机点亮少量LED,看起来就像星星一样闪烁。
几种模式可以通过板上的微型按键切换,长按500ms还可以关闭LED,让单片机进入深度休眠。
一颗纽扣电池,续航能有多久?
90颗LED挤在这么小的PCB上,功耗自然是个需要考虑的问题。
根据作者公布的测试数据,音乐律动模式的平均电流约为11.71mA,HALO光环模式约10.88mA,而Sparkle闪烁模式只有2.01mA。

HALO光环模式


Sparkle闪烁模式
按照220mAh的电池容量计算,Sparkle模式理论续航约109.5小时,也就是4天多。
不过,这只是按照平均电流估算的结果。CR2032的实际可用容量与放电电流、内阻等因素有关,实际续航还得看具体使用情况。
硬件、固件全部开源https://boardrepo.com/openkolibri/halo-90
作者把原理图、PCB、BOM、固件源码以及3D打印外壳等资料都整理出来了,连用于烧录和测试的弹簧针编程夹具也有介绍。






这个项目的硬件并不复杂,但在这么小的空间里完成90颗LED的布线、复用驱动和电池供电,还是有不少值得参考的地方。
尤其是Charlieplexing驱动方式,平时做一些小型LED显示产品,或者GPIO资源比较紧张的项目,也可以考虑借鉴。

当然,如果真打算自己复刻,90颗0402 LED的焊接恐怕是最费眼睛的环节,建议直接安排嘉立创SMT贴片。
最后,耳环钩必须得由纯金的,不然会被女朋友打死!

END

往期精选:

请点下【♡】给小编加鸡腿
