SpectraProをMac(PC)で制御する(2025/04/11)(更新2025/04/11)
Player One CMOSカメラを取り付けたSpectraPro 300i分光器。スリット前もソーラボのケージが使えるように改造しています。
経緯
SpectraProはActon社の分光器で、研究室には古い500i, 300i, 150があります(現在はSpectraPro HRというのがこれらの後継機のようです)。500iは488 nm顕微ラマン分光器で使っていて、Princeton Instruments(現在Teledyne)のLightFieldソフトを使い、それでSpectraPro 500iと冷却CCDを制御しています。そちらはそれで問題ないのですが、LightFieldはライセンスがあって1台のPCでしか使えません。他の分光器300iと150を使う時には困ります。300iは今785 nmラマンで使っているのですが、使う時はLightFieldを使っているPCを300iに繋ぎかえて使う必要がありました。しかしそれも面倒なのでpythonで制御してみることにしました。
Pythonで制御してみる
SpectraProはRS232Cで制御できるので、pythonライブラリのpyserialが使えます。これはpipやcondaでインストールする必要があります。マニュアルによると通信設定は9600 baud, 8bit data, 1 stop bit, no parityとのこと。Macで使う場合はUSBシリアル変換ケーブルを使います。ドライバーのインストールが必要な場合があります。
SpectraProのコマンドは色々あるのですが、私の目的ではspectrographとして使うので(スキャンしながらの測定はしません)、そちらで主に使うものだけを紹介します。
- GOTO:これは指定された波長へ移動するコマンド。指定する波長は小数点3桁まで。e.g., 500.00 GOTO
- GRATING:これは使う回折格子を指定するコマンドです。数字で指定します。e.g., 1 GRATING
- ?GRATINGS:設置されている回折格子を返します。複数行になるので全部読み込まないといけません(OKが最後にくるのでそれが最後と判断できる)。現在選択されているものは最初に印がつきます(マニュアルでは>となっているが、実際は横棒?)。e.g., ?GRATING
- ?NM:現在の波長位置を返します。nm単位。e.g., ?NM
なおコマンドを送る時は最後にCR(キャリッジリターン)を付けます。送ったコマンドの返事には送ったコマンドのエコーとOKが送られてきて、さらにCR+LFが付いてます。返すデータがある時はそのデータが最初に来ます。
簡単な制御プログラムを作りました。次のリンクでダウンロードできます。 download テキストファイルですが、改行がMac/Linux形式なのでWindowsの方は直す必要があるかもしれません。
このプログラムはterminalで動かします。動かすとキーボードからキー入力でコマンドを実行します。終了する時はqキーを押して下さい。コマンドによってはさらに値の入力を要求します。最初に場合は最初のlで回折格子のリストを出させて、gで使う回折格子を選択(回折格子を変えているモーターの音がします)。それでmで指定の波長(nm単位)へ移動します(これもモーターの音がします)。rだと相対波数で指定できます。使うレーザー波長をlaser_wlに書いておきます。timeもインポートしてますが、今は使ってないので外してもいいです。
Macの場合、先頭行のpythonの場所を正しい場所へ変更します。そしてserial.Serialで指定するデバイス名"/dev/cu.*"は、ターミナルからls /dev/cu.*と入力して、出てくるリストから見つけます。USBシリアル変換ケーブルを繋ぐ前と繋いだ後で1つデバイスが増えているはずです。それがこの変換ケーブルに対応するデバイス名になりますので、それで書き換えてください。Windowsの場合はその次の行を有効にしてCOM?の?部分を直して下さい(最初の行もいらない)。
一応このプログラムでSpectraPro 150と300iが動くことを確認しました。