|
与RGB LED的颜色混合今天是没有问题的。 随着PWM通道,而现在几乎所有处理器简单组合的RGB颜色分量影响冰找到帮助。 直接功率控制的RGB渠道比较混乱,所以建议使用HSV(色调,饱和度,亮度)到RGB的转换,这是接近人类的色觉。 此外,描述建筑灯具使用的转换。
有一点数学
单纯疱疹病毒或HSB模式
zkratka缩写
| anglický název英文名称
| český název捷克名称
| Rozsah hodnot值的范围
| H H
| hue色调
| odstín阴
| <0,360°> <0.360 °>
| S S
| saturation饱和
| sytost深入
| <0,1> nebo <0,100%> <0,1>或<0.100%>
| V,B V,B
| value, brightness值,亮度
| jas亮度
| <0,1> nebo <0,100%> <0,1>或<0.100%>
|
随着色调,亮度和饱和度(H,S,V)指定的值我们可以计算出RGB值使用下列关系:
图形显示的色调和饱和度
表1 - 一些输入值结果
barva 的颜色
| H H
| S S
| V 在
| R ř
| G 摹
| B 乙
| bílá 白色的
| - -
| 0 0
| 1 1
| 1 1
| 1 1
| 1 1
| červená 红
| 0° 0 °
| 1 1
| 1 1
| 1 1
| 0 0
| 0 0
| žlutá 黄
| 60° 60 °
| 1 1
| 1 1
| 1 1
| 1 1
| 0 0
| zelená 绿
| 120° 120 °
| 1 1
| 1 1
| 0 0
| 1 1
| 0 0
| světle modrá 浅蓝
| 180° 180 °
| 1 1
| 1 1
| 0 0
| 1 1
| 1 1
| modrá 蓝
| 240° 240 °
| 1 1
| 1 1
| 0 0
| 0 0
| 1 1
| purpurová 品红
| 300° 300 °
| 1 1
| 1 1
| 1 1
| 0 0
| 1 1
| červená 红
| 360° 360 °
| 1 1
| 1 1
| 1 1
| 0 0
| 0 0
|
建设
施工方便,可以省略的参与和与阻塞电容晶体将被设置如果内部振荡器。 整个电路是由在SMD封装ATmega8的。 LED是通过连接到处理器的PWM通道BC337晶体管。 灯泡是由一个红外遥控器是用来解码SFH5110接收器连接到外部中断处理器。 电源电路为9V,如果我们选择了不同的需要重新计算的阻力和动力方面的电阻R1 - R3。 PCB设计允许您连接到我的情况下LED 8RGB仅用于第四
该计划涉及
PCB设计和人员
为确保颜色的搭配是用在普通的抽动盘片盒一次obmotaná描图纸,并在LED上安装。 可能会增加光衰减但颜色是干净多了。 PCB是在牛奶放在玻璃灯,透过玻璃的红外线光束穿过没有任何问题。
列表组件
C1,C2,C3,C8 | 100nF的 |
| C6
| 100uF的 |
| C7
| 10uF的 |
| IC1
| 7805或78L05 | 5V的稳定剂 | IC2 | SFH - 5110 | 红外解调器 | IC3 | ATmega8的- 16AU | TQFP 32房屋 | J1 | PSH02 - 02P | 连接器的电源 | J2 | 打破栏2x3pin | 通过SPI编程 | L1 |
| 100UH
| LED1 - LED8 | RGB LED | 5MM,4000mcd,40 °,共阳极 | Q1 - Q3 | BC337 |
| R1 - R3
| 82R/1W为4LED |
|
| 62R/1W为6LED |
|
| 39R/1W为8LED |
| R4 - R6
| 1K | SMD1206 | R7 | 100R |
| R8
| 10K [/td]
[/tr][/tr] |
C4,C5,XTAL1不得使用,如果你设置内部振荡器。
R1 - R3是计算电源电压9V
软件
这是没有意义的解码算法,发布的远程控制,因为这问题已经发表过很多次。 所以我决定给这里只直接控制功能,RGB的LED。 他们都写在C语言编程
要调整色调,饱和度和亮度是一个功能HSVtoRGB如介绍所述。 该函数存储到PWM通道的比较寄存器的计算RGB值。 为了节省空间,在数据存储和计算CPU时间,我们使用真实的数字,但整体。 然后计算算法如下所示:
变量/ /可能的值:H = <0.360>,S = <0.255>,V = <0.255> / / RGB是比较PWM通道#寄存器ř OCR1A定义的#define#定义克OCR2 OCR1B B / / ----- ---------------------- HSV到RGB的转换----------------- HSVtoRGB无效(无符号整数H,无符号字符S,无符号字符V){长Q,T,P,F,无符号字符我;如果(a = 0){R = G = B = V;返回;} I = H / 60架F = H 60%,P =((V *(255 - S))/ 255)Q =((V *(15049 - S * F))/ 15049)= T((V *(15049 - S *(59 - F)))/ 15049),开关(I){案件0:R = V G = T B = P;突破,个案1:R = Q G = V B = P;突破;案例2 R = P G = V B = T;突破,个案3:R = P G = Q B = V;突破,个案4:R = T G = P B = V;突破;默认R = V G = P B = Q;打破;}}
亮度线性化
另一个有用的功能,可使用的线性亮度。 因为人眼感知的亮度对数,线性化提供我们的情况下指数函数,一个破碎的曲线,如图所示。
255亮度值分为四个部分,其中的直线职能不同坡度。
亮度的步骤数,然后从256降低到32,这是相当足够了。 如果我们进入了一个比31更大的数字输入功能,返回值255
残破的亮度线性化曲线
/ /函数进行线性化------------- -------------亮度
/ / X = <0.31>
无符号字符linear_value(无符号字符X)
{
如果(x> 31)
返回255;
开关(X / 8){
案件0:X = X * 2 +2;突破;
案例1:X = X * 6-26;突破;
例2:X = X * 8-56;突破;
案例3:X = X * 16-241;突破;
默认:突破;
}
返回X;
}
一些颜色的例子
#定义红色0
#定义黄色60
#定义绿色120
#定义light_blue 180
#定义蓝240
#定义洋红300
/ /红色,饱和度和亮度最大
HSVtoRGB(红,255255);
/ /红色,最大饱和度,具有更小的特征“linear_value”亮度
HSVtoRGB(红,255,linear_value(20));
/ /蓝色,最大深度,最大亮度
HSVtoRGB(蓝色,255,linear_value(31));
/ /蓝色,半饱和度,亮度最大
HSVtoRGB(蓝色,128,linear_value(50));
照片从表率
结论
灯泡是作为一个例子适合女性的礼物。 本文的主要目的是勾勒出HSV到RGB的转换。 除调整色调,饱和度和亮度可以进行编程,如一个阴影频谱自动扫描等功能,具有自动关机休眠一段时间,迪斯科效果等
适用灯将被连接到PC串行端口和程序的管理应用。
|
|