最近用到了PLCC 包裝的RGB 全彩LED做跑馬燈。
板子上共放了20顆LED, 當使用328P + GY9221 使用PWN (RGB=FF-FF-55)點亮時,發現每一顆LED都會有色差,有的偏紅,有的偏綠。
根據廠商的說法,使因為製程關係,每一顆都會有色偏,而且大多數都是偏紅,也就是紅色,綠色在相同的duty cycle下,紅色會特別亮。
所以當使用到白光時,都會看到偏紅的現象。
根據廠商提供的SPEC, 加上自己沒經驗,不知道RGB LED其中的眉角,走了一些冤枉路。
下圖是LED SPEC, 有發現什麼異狀嗎嗎? 有沒有注意到nm跟mcd數值跟海邊一樣,很寬廣,一望無際呢
廠商的回覆是PLCC難以控色,每一批做出來都不一樣,同料號下,他們還以一個較細微的BIN code控制。
但是這個BIN code呢,居然每一批都會不同。
所以SPEC上就出現了這種怪現象。
雖然知道原因,但是每一顆都不一樣,實在很頭痛,加上測試LED光譜的機器很昂貴,所以google了一下有沒有相關感測元件可以使用,目的只是為了用相對值來比較每一顆的顏色。
最後,google到了 TSC3200這一顆便宜的SENSOR.
網路資料也是很多,話不多說,直接看一下成果。
這一張圖是感測器正面,中間有一顆圓型塑膠環將感測器包起來,這樣可以避免被旁邊的LED干擾到
這張圖是線材連接好的全貌。
我是使用便宜的Arduino pro來連接
這一張圖是測試A4白紙得到的頻率。
大家都知道,理論上白色是由等量RGB三色混光而成,但是實務上應用應該是 R=G>B才對。
由這一個測試白紙的結果看來,其實TSC3200測試滿準確的。
R=6xx, G-6xx, B=5xx , 其實也差不多跟實務應用差不多
再來,我們來看一下測量鈔票的結果
得到的頻率是 1040, 2224,1810 , 雖然有上下誤差,但實際上都還算穩定,沒有飛天遁地的數據出現。
But, But, TSC3200可以直接測試LED燈嗎? 這個才是我要的重點
下圖是測量紅色LED得到的頻率,在這邊我們可以發現,其實TSC3200是可以直接測量光線的。
但是有一個重點是,如果LED燈是使用PWM控制的話,因為頻率在變化,所以會得到多組的數值,這部分需要自己測試過,才能得出判斷經驗值。
下圖是Arduino pro 板上的紅色LED
測量LED必需關掉板子上的白光,然˙後要直接將黑色塑膠環蓋住LED, 避免其他顏色干擾。
因為LED燈是由3.3V 直流直接點亮,所以數據很穩定。 也確定了TS3200可以測量LED
以下是網路上直接找到的程式碼,有興趣的朋友,可以直接複製測試。
TSC3200模組與ARduino 連接時,要注意硬體對應位置需跟程式一樣。
可以軟體或硬體互相配合。
===========================================
/* Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0,LOW);
digitalWrite(S1,HIGH);
Serial.begin(9600);
}
void loop() {
// Setting red filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("R= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Green filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("G= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Blue filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(100);
// Setting Green filtered photodiodes to be no filter
digitalWrite(S2,HIGH);
digitalWrite(S3,LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("NO= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(500);
}
=======================================
這個測試程式,雖然沒有作白平衡,但是在相同的測試環境下,已經可以做比較了。
例如 LED1(RED) 與 LED2(RED)得到的頻率,如果接近的話,就可以確定這兩顆燈色差不多,相反的話就是顏色有差異。
如果只是跟菜不切一樣,只是想簡單的比對各LED 差異,只要用這程式為基礎再做變化就可以了,沒有必要轉換成正確的RGB或是CMYK,或是使用白平衡。
有問題可以提出一起研究喔
留言列表