北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

リニアイメージセンサを使った分光器(まつLab)

リニアイメージセンサにも、分光器にも昔から興味があったのですが、遊ぶ機会はあまりありませんでした。

仙台マイクロメイカーフェアに分光器を出展されていた「まつラボ」さんにお願いして借用する機会をいただきました。

機材の詳細は下記URLから確認ください。

https://mseimitsu.thebase.in/items/15204838 

 

USBシリアルでリニアイメージセンサの画素データ(0-4095)を数値文字列でどんどん送ってくるようで、画素データが終わる区切りとして"0"をくれます。文字区切りは標準的なLFでした。

 

これはとりあえず「LabVIEW Community Editionでプログラミングを楽しもう」の第7章の”7-3_max30102Chart.vi”で様子を見ようかと思いましたが、かなりの確率で"-1073807253"エラーで止まってしまいます。

 

良くはわからないのですが、

昔、長縄とびでうまく入れなかった事を思い出しました。

 

添付されているVIではエラーなしで入れるのがちょっと不思議。

寒色、中間色、暖色が選べるLED照明の出力を見てみました。

 

寒色光.png中間色.png暖色光.png

 

なんか、色の違いがグラフに表れています。

夕暮れ時のマジックアワーの分光分布が見てみたいとか、一家に一台欲しいかも。

 

何回か続きます。

 

メッセージ1/7
3,012件の閲覧回数

おもしろい機材ですね。縄跳びの件、笑っちゃいました

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ2/7
2,983件の閲覧回数

コメントありがとうございます。以下のような情報もあります。

https://m-seimitsu.com/wp/2021/06/maker-faire-tokyo-2021-へ向けて。出展申請の準備編/ 

 

分光器は仕事柄使わないという方は、センサーと基板を購入して、レーザーポインターなどを使った高精度な位置決めに、というのはいかがでしょうか?スキャンが遅いので用途は限定されるとは思いますが、、。

 

さて、「LabVIEW Community Editionでプログラミングを楽しもう」の第7章の”7-3_max30102Chart.vi”を改造してデータの全体像を見てみます。

エラー-1073807253.png

 

接続直後の"-1073807253"エラーを回避して、読み取りループの5msec待ちもやめます。

ダイアグラム2か所変更.png

 

これでちゃんと動くようになります。

NoError.png

 

チャートのデフォルトのリストリー長では波形の全体像が見えないので、20000に変更します。

チャートヒストリー長.png20000に変更.png

 

これで送られてくるデータ全体を見ることができます。

データの全体像.png

 

スキャンとスキャンの間は0が送られてきます。それを目印に切り出せばOKなはずです。

 

次回は切り出しとスキャンn回の移動平均を取ってみます。

 

 

 

 

 

 

0 件の賞賛
メッセージ3/7
2,974件の閲覧回数

手軽でいいですね。

1ピクセルずつ読み込んで間に合うということから察するにスキャンレートはかなり遅いと見ました。センサー自体はMHzオーダーまで大丈夫なはずなので基板に何か隠しスイッチないのかしら(^_^;)

 

RS-232Cケーブルをつないだまま、しばらくVIを実行しないでいると、初期化されていないポートが垂れ流しデータであふれてフレーミングエラーになることがありますね。エラー回避コードは適切だと思います。

0 件の賞賛
メッセージ4/7
2,950件の閲覧回数

用途に合えばピクセルデータを受け取るだけなので手軽ですね。分光した光は微弱になるので、1秒ぐらい露光しているようです。その辺も後で調べてみます。

 

さて、1スキャン分のデータの区切りは数値の0になっています。この装置の場合はデータが0になることがないので区切りに使っているのでしょう。

区切りデータを使って1スキャン分を1次元配列に切り出すプログラムです。

 

MP00P.pngMP00D.pngMP00DCase.png

ピクセルデータを書き込む配列を用意して順次データを書き込んでいきます。データが"0"のときに配列が初期化され、書き込む指標も0にします。1スキャン分のグラフを書き終わるとすぐに次のスキャンを書き始めるのでこのままではあまり実用性はありません。

 

次にスキャンデータのノイズを低減するためにn回のスキャンデータでピクセルごとに平均化します。突発的なでかいノイズをはじくために最大値と最小値を除いて平均化したいと思います。正式な名前は分かりませんがエクセルではTrimMeanという同じ機能の関数がありますので、TrimMeanと書くことにします。

MP01P.pngMP01D.pngMP01DCase.png

n回のTrimMeanでは3648xnの2次元配列を用意して、スキャンが終わるごとに更新していきます。更新のたびにピクセルごとのTrimMeanを計算してグラフを作成します。

TrimMeanはデータをソートして指標1からn-2個の部分配列をとって平均しています。

ときどき大きなスパイク上のノイズが入りますが、TrimMeanしているので影響を受けません。

 

次回は保存ボタンを押すとcsv形式でデータが保存されるようにしてみます。

 

 

メッセージ5/7
2,939件の閲覧回数

Saveボタンが押されたらデータをタブ区切りテキストで保存します。

この分光器では”+"あるいは"-"を送ると10msec単位でゲート時間を増減できるので、あとで増減ボタンも追加したいと思います。その時のためにイベントストラクチャーを使います。

 

ここではSave ButtonとStopのイベントを作ります。

 

MP02D.pngMP02Dsub.png

データの保存のボタンを押すとダイアログウィンドウが表示されるのでファイル名を指定します。ストップボタンのメカニカルアクションが"Latch When Released"でしたが、Local変数で使うために"Switch When Released"に変更します。VIが停止したときにボタンが押された状態になっているので、次にスタートするときのためにOFFにしておきます。

ついでにシリアル設定用の制御器などを定数に変えてフロントパネルは以下のようになります。

 

MP02P.png

 

テキストファイルをメモ帳で開いたり、リブレオフィスのCalcで開いたりできます。

テキストファイル.pngリブレオフィス.png

 

次回はゲート時間の制御を追加します。

 

 

0 件の賞賛
メッセージ6/7
2,908件の閲覧回数

ゲート時間の制御は次回以降に回すことにして、分光器の波長の簡易校正を行いました。

棚に入っているLEDで発光波長が分かるものを探してみるとOSTA5131Aがありました。B(470nm), G(525nm), R(635nm)のLEDが1個の砲弾型LEDに組み込まれています。375nmの紫外LEDと850nmの赤外LEDがあれば最高なのですが、送料の方が高くなるのでやめました。

MP03P.pngMP03D.png

 

グラフはXYグラフに変更して、"校正初期値"としてリニアイメージセンサの0番ピクセルの波長と、"校正傾き"としてピクセル間の波長の差分から各ピクセルの波長を求めます。

 

保存するファイルは1列目がピクセル番号、2列目がピクセルの波長(nm)、3列目が各ピクセルの光量データとしました。

 

長くなりましたので、ここで一区切りとして”SpectrometerMP03.vi”を添付します。

校正用のプログラムは別スレッドで作成します。

0 件の賞賛
メッセージ7/7
2,882件の閲覧回数