Color sensor
カラーセンサ モジュール(ADJD-S371-QR999)

ADJD-S371-QR999
Arduino を使ったRGB値の取得
- Arduino を使っての制御は、MAKE: Japan: 物体 to HTMLカラーネームコンバータの記事からのコードをちょっと書き換えるだけで可能になりました。
Processing : キャリブレーション

キャリブレーションの設定
- PCCSカラーカードRGB&CMYK対応表を参考にさせてもらい、上の写真の自作の器具を使って取得したRGB値と理想値の差を算出するなど、プログラムでキャリブレーションを自動化するアルゴリズムを考えました。
- 例えば、左の2列目の数値を理想値として、右の4列に並ぶ数字がカラーセンサが出力した数値。
理想値に補正する割合をオレンジ色の数値として算出し、アルゴリズムを考えた。
Processing : RGB to HSB
- Arduino を使って取得したカラー値を、Processing で RGB から HSB へ変換しました。AS3でRGBとHSBを相互変換するを参考にさせていただきました。
[java]
/** RGB to HSB
* @param r (0 255)
* @param g (0 255)
* @param b (0 255)
* @return HSB([0]=hue, [1]=saturation, [2]=brightness)
*/
float[] RGBtoHSB(int r, int g, int b){
float cmax = max(r, g, b);
float cmin = min(r, g, b);
//println(“cmax:”+cmax+”, cmin:”+cmin);
float brightness = cmax / 255.0;
float hue = 0;
/*float saturation;
if(cmax != 0) {
saturation = (cmax – cmin) / cmax;
println(saturation);
}
else saturation = 0;*/
float saturation = (cmax != 0) ? (cmax – cmin) / cmax : 0;
//println(saturation);
if (saturation != 0) {
float redc = (cmax – r) / (cmax – cmin);
float greenc = (cmax – g) / (cmax – cmin);
float bluec = (cmax – b) / (cmax – cmin);
if (r == cmax) {
hue = bluec – greenc;
}
else if (g == cmax) {
hue = 2.0 + redc – bluec;
}
else {
hue = 4.0 + greenc – redc;
}
hue = hue / 6.0;
if (hue < 0) {
hue = hue + 1.0;
}
}
float[] hsb = {hue, saturation, brightness};
//println(hsb);
return hsb;
}
[/java]
- – - -
システムソフトウェアでキャリブレーション、HSB に変換したあと、下の写真のように出力し、アプリケーションソフトウェアに使っている。

システムソフトウェアでの確認


