INFO
Categories

流光溢彩Ambilight

初代流光溢彩由飞利浦于2002年提供专利,2004提供量产电视,若干年后参加工作,LED洗墙灯

2021.6.18买了飞利浦的B97回音壁后,又动了流光溢彩电视的想法。果然JD上有HUE的套装,都进入了购物车,等待降价或双11入手

方案对比
序号方案优缺点
0屏幕摄像头几钱都唔得肯定不准,另有延迟,否决
1飞利浦HUE TV有45°辐射角
昂贵,可能影响HDMI其他的
只有 HDMI 端口2和4是全速带宽
不适用于内置智能电视应用
长度严格限制
2飞利浦HUE 笔记本有45°辐射角
需要装录屏程序软件采集
3仿飞利浦(Lightpack本尊)
4YEELIGHT?
5小米追光
6思码光带磨砂透光板,且有45°辐射角
7自制
历史

据传说,氛围灯最早是一圈白光(Bias Light)用于背景衬托屏幕,伴随电视诞生(相当于周边衍生品),主要目的在于黑暗中降低整体对比度,从而保护视力(不要在黑暗中看手机)。

留意中间灰条,左边貌似比右边亮,实际完全相同

2002年,飞利浦研发并申请专利(集成到电视机上)
2004年量产Ambilight——42/50PF9966/等离子/1366*768/HDMI,当时使用的发光体是CCFL冷阴极荧光灯
2005年,给电视机顶部添上炫彩
2006年,全面改用LED。2007年期间推出过一款外圈边框都能变色的Aurea,但后来随着技术提升内框越做越窄,外框这多此一举的炫技也就不复存在了。最终,以2006年LED为蓝本的方案流传至今。

与此同时,0506年就有神秘大神开始自研开源版本,SMD尚未完全成熟且昂贵,所以采用了最传统的LED单色灯炮作为光源。

采购清单
序号设备参数
1WS2812B60 dots/m,60mA、0.3W/dot,5m一卷
2Aduino NanoAmtel 328P
3明纬40W电源5V8A,电流有点高噢
纵观所有教程,都没有用这种专业开关电源的,拜LED灯、屏工程经验所赐
4辅材导线、胶布、轧带
5工具斜口剪刀、烙铁
采购清单
问题

2812用的好像是5050的灯珠,亮度如何(有空研究他的调光方式,如PWMM脉冲暂停比),角度如何,与几个竞品的对比如何?
这种平射的角度确实需要与墙壁保持一定距离,以便Wash Wall
相邻之间的光染色? (某论坛说不会有)
电源有杂音

实现——硬件连接

0、思考电源及开发板的位置:NUC的经验说应该吊于显示器VESA卡扣的中间偏下,考虑到低压大电流压降问题,电源线适宜从中间往两边分(网络上独家),电源线越短越好,以上两点,都指出电源及开发板应定于显示器屏幕中心偏下
1、贴灯带:由显示器下边沿的中点开始,沿边贴一圈。相对于很多博主“内敛”的贴法,我认为沿边贴有两个好处:A. 容纳更多灯珠,过渡效果更自然细腻;B. 氛围的范围更亮、更广、更远。(往中间缩小周长=缩小范围,使眼睛更聚焦于显示器屏内内容,但实际眼睛距离显示器较近,视野自身就有所局限)。在边角时,我选择了最简单粗暴也是灯珠/像素损失最小的“灯间带直角∟弯折法”,另有A. 灯间带45°角x2弯折法 及 B. 现成直角连接件 两法可选。(如灯带故障,则换为B. 法较好,一次只换一个边的灯带即可)。贴完后,刚好上下两边各49颗,左右两边各22颗,共142颗灯珠均匀对称布置。
2、连接电源线:
2.1电源线由下沿灯带中间往两边分,每边一条,其中一条为自带
2.2另一条需要从金属连接点上焊接杜邦引线接至电源的直流输出口。灯带上沿的电源连接点别忘了给挖开断掉(工程经验)。
3、连接信号线:灯带原有的三色连接线(分别为红色电源+5V、绿色数据Din、白色地线GND)
3.0有说这里加一个330Ω?470 Ω 的电阻,暂未明所以
3.1插头处去掉红色电源线(因为灯带另由专用5V电源供电)
3.2插入Arduino开发板的D2及挨着的GND针脚
3.3最后把输入电源线及开发板的USB线(包含供电及数据)插入相应插座,齐活!

增加照片,并且把步骤按顺序分类

实现——代码、软件

1、安装USB转串口芯片驱动,WCH-CH341SER(Ft232RL改为CH340G),没问题
2、安装Arduino IDE开发程序,选择好COM口、设备Arduino Nano、CPU啥的,等待下载N久的基础包文件
3、下载FastLED库,用于驱动灯带
4、粘贴以下代码,这一步有两个小问题卡了很久,在编译器提示的情况下得以解决:
4.1 提示neopixel未定义,我不知道基础包里特别是FastLED.h里有无相关定义,百度未果,后面粘贴了另一段代码提示正常,经对比发现,应 用大写模式NEOPIXEL
4.2 缺少一个“}”号,凭借代码经验,在最后一行加入此符号解决
5、验证成功→上传,成功后灯带依次闪烁红绿蓝,我想这下混出成千上万种颜色应该不成问题了
6、在Prismatik中设置灯珠的区域,包括起点、顺序、定位等信息,总之以平均分律为纲领(有空可研究Profile场景文件.ini)
7、一次成形亮灯仪式thumbs up!

/*
* Arduino interface for the use of WS2812 strip LEDs
* Uses Adalight protocol and is compatible with Boblight, Prismatik etc...
* "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum
* @author: Wifsimster <wifsimster@gmail.com>
* @library: FastLED v3.001
* @date: 11/22/2015
*/
#include "FastLED.h"
#define NUM_LEDS 142 //(灯带一共有多少个LED?)
#define DATA_PIN 2 //(绿色的数据线接在arduino几号端口?)
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200
// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
// Initialise LED-array
CRGB leds[NUM_LEDS];
void setup() {
 // Use NEOPIXEL to keep true colors
 FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
 // Initial RGB flash
 LEDS.showColor(CRGB(255, 0, 0));
 delay(500);
 LEDS.showColor(CRGB(0, 255, 0));
 delay(500);
 LEDS.showColor(CRGB(0, 0, 255));
 delay(500);
 LEDS.showColor(CRGB(0, 0, 0));
 Serial.begin(serialRate);
 // Send "Magic Word" string to host
 Serial.print("Ada\n");
}
void loop() {
 // Wait for first byte of Magic Word
 for(i = 0; i < sizeof prefix; ++i) {
 waitLoop: while (!Serial.available()) ;;
 // Check next byte in Magic Word
 if(prefix[i] == Serial.read()) continue;
 // otherwise, start over
 i = 0;
 goto waitLoop;
 }
 // Hi, Lo, Checksum
 while (!Serial.available()) ;;
 hi=Serial.read();
 while (!Serial.available()) ;;
 lo=Serial.read();
 while (!Serial.available()) ;;
 chk=Serial.read();
 // If checksum does not match go back to wait
 if (chk != (hi ^ lo ^ 0x55)) {
 i=0;
 goto waitLoop;
 }
 memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
 // Read the transmission data and set LED values
 for (uint8_t i = 0; i < NUM_LEDS; i++) {
 byte r, g, b;
 while(!Serial.available());
 r = Serial.read();
 while(!Serial.available());
 g = Serial.read();
 while(!Serial.available());
 b = Serial.read();
 leds[i].r = r;
 leds[i].g = g;
 leds[i].b = b;
 }
 // Shows new values
 FastLED.show();
}
这一步非常考验耐心,也反映软件优化不足。
同类软件进化路线:AmbiBOX<<<Prismatik<<<Hyperion
远期规划
1直角用成品对插
2使用Hyperion?USB串行通信?USB转网口?
3电视机用PHILIPS,花小钱省大心
4(新房)PHILIPS成套灯带 或 输出接口,现在已有普通灯带接入桥接器的方案
5等厂家更新统一技术
6离线运行的彩虹跑马灯(已KO,参见前传)
7接入触电开关切换程序及开关
8Chip on Board灯带
So Ambition!

7、采用WIFI控制板,自己开发APK程序控制,结合HomeAssistant。