06-30-2022 04:18 AM
リニアイメージセンサにも、分光器にも昔から興味があったのですが、遊ぶ機会はあまりありませんでした。
仙台マイクロメイカーフェアに分光器を出展されていた「まつラボ」さんにお願いして借用する機会をいただきました。
機材の詳細は下記URLから確認ください。
https://mseimitsu.thebase.in/items/15204838
USBシリアルでリニアイメージセンサの画素データ(0-4095)を数値文字列でどんどん送ってくるようで、画素データが終わる区切りとして"0"をくれます。文字区切りは標準的なLFでした。
これはとりあえず「LabVIEW Community Editionでプログラミングを楽しもう」の第7章の”7-3_max30102Chart.vi”で様子を見ようかと思いましたが、かなりの確率で"-1073807253"エラーで止まってしまいます。
良くはわからないのですが、
昔、長縄とびでうまく入れなかった事を思い出しました。
添付されているVIではエラーなしで入れるのがちょっと不思議。
寒色、中間色、暖色が選べるLED照明の出力を見てみました。
なんか、色の違いがグラフに表れています。
夕暮れ時のマジックアワーの分光分布が見てみたいとか、一家に一台欲しいかも。
何回か続きます。
06-30-2022 07:08 PM
06-30-2022 08:25 PM
コメントありがとうございます。以下のような情報もあります。
https://m-seimitsu.com/wp/2021/06/maker-faire-tokyo-2021-へ向けて。出展申請の準備編/
分光器は仕事柄使わないという方は、センサーと基板を購入して、レーザーポインターなどを使った高精度な位置決めに、というのはいかがでしょうか?スキャンが遅いので用途は限定されるとは思いますが、、。
さて、「LabVIEW Community Editionでプログラミングを楽しもう」の第7章の”7-3_max30102Chart.vi”を改造してデータの全体像を見てみます。
接続直後の"-1073807253"エラーを回避して、読み取りループの5msec待ちもやめます。
これでちゃんと動くようになります。
チャートのデフォルトのリストリー長では波形の全体像が見えないので、20000に変更します。
これで送られてくるデータ全体を見ることができます。
スキャンとスキャンの間は0が送られてきます。それを目印に切り出せばOKなはずです。
次回は切り出しとスキャンn回の移動平均を取ってみます。
06-30-2022 09:46 PM
手軽でいいですね。
1ピクセルずつ読み込んで間に合うということから察するにスキャンレートはかなり遅いと見ました。センサー自体はMHzオーダーまで大丈夫なはずなので基板に何か隠しスイッチないのかしら(^_^;)
RS-232Cケーブルをつないだまま、しばらくVIを実行しないでいると、初期化されていないポートが垂れ流しデータであふれてフレーミングエラーになることがありますね。エラー回避コードは適切だと思います。
07-01-2022 07:31 AM - 編集済み 07-01-2022 07:39 AM
用途に合えばピクセルデータを受け取るだけなので手軽ですね。分光した光は微弱になるので、1秒ぐらい露光しているようです。その辺も後で調べてみます。
さて、1スキャン分のデータの区切りは数値の0になっています。この装置の場合はデータが0になることがないので区切りに使っているのでしょう。
区切りデータを使って1スキャン分を1次元配列に切り出すプログラムです。
ピクセルデータを書き込む配列を用意して順次データを書き込んでいきます。データが"0"のときに配列が初期化され、書き込む指標も0にします。1スキャン分のグラフを書き終わるとすぐに次のスキャンを書き始めるのでこのままではあまり実用性はありません。
次にスキャンデータのノイズを低減するためにn回のスキャンデータでピクセルごとに平均化します。突発的なでかいノイズをはじくために最大値と最小値を除いて平均化したいと思います。正式な名前は分かりませんがエクセルではTrimMeanという同じ機能の関数がありますので、TrimMeanと書くことにします。
n回のTrimMeanでは3648xnの2次元配列を用意して、スキャンが終わるごとに更新していきます。更新のたびにピクセルごとのTrimMeanを計算してグラフを作成します。
TrimMeanはデータをソートして指標1からn-2個の部分配列をとって平均しています。
ときどき大きなスパイク上のノイズが入りますが、TrimMeanしているので影響を受けません。
次回は保存ボタンを押すとcsv形式でデータが保存されるようにしてみます。
07-06-2022 04:06 AM
Saveボタンが押されたらデータをタブ区切りテキストで保存します。
この分光器では”+"あるいは"-"を送ると10msec単位でゲート時間を増減できるので、あとで増減ボタンも追加したいと思います。その時のためにイベントストラクチャーを使います。
ここではSave ButtonとStopのイベントを作ります。
データの保存のボタンを押すとダイアログウィンドウが表示されるのでファイル名を指定します。ストップボタンのメカニカルアクションが"Latch When Released"でしたが、Local変数で使うために"Switch When Released"に変更します。VIが停止したときにボタンが押された状態になっているので、次にスタートするときのためにOFFにしておきます。
ついでにシリアル設定用の制御器などを定数に変えてフロントパネルは以下のようになります。
テキストファイルをメモ帳で開いたり、リブレオフィスのCalcで開いたりできます。
次回はゲート時間の制御を追加します。
07-10-2022 01:17 AM
ゲート時間の制御は次回以降に回すことにして、分光器の波長の簡易校正を行いました。
棚に入っているLEDで発光波長が分かるものを探してみるとOSTA5131Aがありました。B(470nm), G(525nm), R(635nm)のLEDが1個の砲弾型LEDに組み込まれています。375nmの紫外LEDと850nmの赤外LEDがあれば最高なのですが、送料の方が高くなるのでやめました。
グラフはXYグラフに変更して、"校正初期値"としてリニアイメージセンサの0番ピクセルの波長と、"校正傾き"としてピクセル間の波長の差分から各ピクセルの波長を求めます。
保存するファイルは1列目がピクセル番号、2列目がピクセルの波長(nm)、3列目が各ピクセルの光量データとしました。
長くなりましたので、ここで一区切りとして”SpectrometerMP03.vi”を添付します。
校正用のプログラムは別スレッドで作成します。