PTBから外部へTTLレベルのトリガーを出す
PTBから外部の機器(例えば脳波計や、眼球運動計測器、NIRSなど)に対して、刺激を呈示したタイミング等を伝えるために、TTLレベルのトリガーを出す方法についての解説です。
まずは公式のFAQを見てください。
今回、私のほうでFAQに書かれている「USB to Serial Adapters」を試したのでその報告です。
使用したのは、FT232RL USBシリアル変換モジュールです。(リンク先のページが正しく表示されないときは、ページを再読込してください)
かつてのパソコンには、シリアルポート(COMポート)と呼ばれるものが備わっており、それを経由して外部の機器と通信を行っていました。しかし時代の流れとともにCOMポートは姿を消し、USBポートへと取って代わられました。その一方でCOMポートはUSBよりも扱いやすく、いまでも根強い人気があります。USBシリアル変換モジュールを使うことで、USBにつながった機器をあたかもCOMポートにつながっているものとして操作することができるようになります。
シリアルポートには9つのピンがありますが、特にDTRとRTSと名前をつけられた2つのピンが、トリガーを出す目的に合っています。この2つのピンについては、好きなタイミングでON、OFFと切り替えることができるためです。つまりUSBシリアル変換モジュールを使って、2種類のトリガーを出すことができます。
USBシリアル変換モジュールを購入したら、FTDIのサイトからドライバーをダウンロードします。VCP Driversというのをダウンロードしてください。ドライバーをダウンロードしなくても、OSに備わったドライバーで認識はするようですが、おそらくPTBからの操作ができません。
PTBからUSBシリアル変換モジュールを使うには、IOPortコマンドを使います。詳しくは
help IOPort
をご覧ください。
私はMacで動作確認をしました。
MacにUSBシリアル変換モジュールを接続し、ターミナルを立ち上げて、
ls /dev/
とします。
表示された結果の中から、usbserial という文字列を含むものを探してください。それがport名になります。
私の場合、
com = IOPort('OpenSerialPort', '/dev/cu.usbserial-A505YYIN');
としました。
Windowsの場合は、仮想ポート番号が割り当てられるはずですので、例えば次のようにします。(未確認です)
com = IOPort('OpenSerialPort', 'COM1');
ここでの注意点として、シリアルポートを開くのには時間がかかります。
ですので、実験プログラムの冒頭で開き、実験の最中には閉じたり開けたりしないようにします。
これでトリガーを出す準備が整いました。
IOPort('ConfigureSerialPort', com, 'DTR=0');
または、
IOPort('ConfigureSerialPort', com, 'DTR=1');
としてください。
このようにしてDTRのピンの状態をON、OFFと切り替えることができ、外部装置へのトリガーとなります。
DTR=1としてトリガーが入った場合には、そのあとしばらくして(機器にもよりますが、50ms程度待って)DTR=0にする必要がある点にご注意ください。要するに元の状態に戻す必要があるという意味です。
なお、実際には以下の図のようにDTRのピンとGNDのピンを外部の機器につながないといけません。簡単な配線でしたら図のようにブレッドボードでも十分かと思います。(図をクリックすると拡大表示されます)
まずはテスターを使って、自分の思い通りにDTRとGNDの間の電圧が変化しているかを確認することをお勧めします。