カラーセンサ・モジュールを使ってみた?の続きです。
いつものごとく、何を測っているのかさっぱりというとんでもない状態なわけですが、気を取り直して蛍光灯を測ってみました。前回のコメントでのりたんさんから蛍光灯の周波数について教えてもらいました。wikiを見てみると50Hzまたは100Hzということみたいです。
R、G、B、Cの4つを250個(計1000個)、ATMega88のメモリに蓄えて、測定後に一気にPCに送るプログラムを書いてみました。本当は測定値は10bitですが、メモリが1kバイトしかないので下の2ビットは捨てました。
結果のグラフです。横軸が時間で縦軸がセンサーの読み取り値です。




Cは飽和していたのでグラフにしませんでした。うえからR, G, BとRGBを重ねてたグラブです。レベルはGが一番高くてBが一番低いです。
測定毎に反転するポートを作りました。14.4Hzくらいだったのでサンプリングレートは倍の28.8Hzくらいになります。蛍光灯が50Hzだとしてもサンプリングレートが足りていません。
グラフは細かい上下があって大きくうなりみたいなのが見えます。まさにサンプリングレートが足りないときのグラフになっています。
ソースの一部です。
測定したら、データを読み出してメモリに蓄えてを繰り返しています。Nは250です。
ここまで書いて、integration timeのことに気づきました。上の結果はintegration timeが2500のときの結果です(gainは10)。試しにintegration timeを1000にするとサンプリングレートが131Hzまであがりました。
integration time = 500(サンプリングレート167Hz) gain = 2で測定しなおしたデータです。

今度はCも表示しています。
左端の30ポイント分を拡大しました。

なんか、それっぽくなってきました。
まとめ
- カラーセンサーモジュールは蛍光灯を測るのには向いていない
- integration timeとgainをちゃんと調節すること
- 対象の周期の2倍以上のサンプリングレートで測定すること(今回はできてません)
元々、LEDの色とか明るさを測りたいと思って買ったのですが、まだそこまでは到達していません。なんというか、測定したり、グラフを書いたりといった実験ごっこの方が楽しくなっていて、元々何をしたかったかがどうでもよくなってきています。いつものことですね。
いつものごとく、何を測っているのかさっぱりというとんでもない状態なわけですが、気を取り直して蛍光灯を測ってみました。前回のコメントでのりたんさんから蛍光灯の周波数について教えてもらいました。wikiを見てみると50Hzまたは100Hzということみたいです。
R、G、B、Cの4つを250個(計1000個)、ATMega88のメモリに蓄えて、測定後に一気にPCに送るプログラムを書いてみました。本当は測定値は10bitですが、メモリが1kバイトしかないので下の2ビットは捨てました。
結果のグラフです。横軸が時間で縦軸がセンサーの読み取り値です。




Cは飽和していたのでグラフにしませんでした。うえからR, G, BとRGBを重ねてたグラブです。レベルはGが一番高くてBが一番低いです。
測定毎に反転するポートを作りました。14.4Hzくらいだったのでサンプリングレートは倍の28.8Hzくらいになります。蛍光灯が50Hzだとしてもサンプリングレートが足りていません。
グラフは細かい上下があって大きくうなりみたいなのが見えます。まさにサンプリングレートが足りないときのグラフになっています。
ソースの一部です。
for(i = 0; i < N; i++){
write(CTRL, 0x01); // 測定開始
while(read(CTRL)) ; // 測定完了待ち
// RED読み取り
x = read(DATA_RED_HI) << 8 | read(DATA_RED_LO);
rr[i] = x >> 2;
// GREEN読み取り
x = read(DATA_GREEN_HI) << 8 | read(DATA_GREEN_LO);
gg[i] = x >> 2;
// BLUE読み取り
x = read(DATA_BLUE_HI) << 8 | read(DATA_BLUE_LO);
bb[i] = x >> 2;
// CLEAR読み取り
x = read(DATA_CLEAR_HI) << 8 | read(DATA_CLEAR_LO);
cc[i] = x >> 2;
}
for(i = 0; i < N; i++){
sio_hex2(rr[i]);
putch(' ');
sio_hex2(gg[i]);
putch(' ');
sio_hex2(bb[i]);
putch(' ');
sio_hex2(cc[i]);
putch(0x0d);
putch(0x0a);
}
測定したら、データを読み出してメモリに蓄えてを繰り返しています。Nは250です。
ここまで書いて、integration timeのことに気づきました。上の結果はintegration timeが2500のときの結果です(gainは10)。試しにintegration timeを1000にするとサンプリングレートが131Hzまであがりました。
integration time = 500(サンプリングレート167Hz) gain = 2で測定しなおしたデータです。

今度はCも表示しています。
左端の30ポイント分を拡大しました。

なんか、それっぽくなってきました。
まとめ
- カラーセンサーモジュールは蛍光灯を測るのには向いていない
- integration timeとgainをちゃんと調節すること
- 対象の周期の2倍以上のサンプリングレートで測定すること(今回はできてません)
元々、LEDの色とか明るさを測りたいと思って買ったのですが、まだそこまでは到達していません。なんというか、測定したり、グラフを書いたりといった実験ごっこの方が楽しくなっていて、元々何をしたかったかがどうでもよくなってきています。いつものことですね。



























