シリアルUSBで接続したArduinoから100 msトリガーパルスを発行する

Trigger_arduino 最初のコミット 1 month ago
README.md 最初のコミット 1 month ago
requirements.txt 最初のコミット 1 month ago
trigger.py 最初のコミット 1 month ago
README.md

Serial Trigger

ArduinoへシリアルUSB経由で100 msトリガーパルスを発行するPythonスクリプトです。

概要

trigger.py を実行すると、指定COMポートに接続されたArduinoへ TRIG コマンドを送信します。 ArduinoはACK・DONEを返すことでトリガー完了を通知し、Pythonスクリプトはその応答を確認します。

通信シーケンス

PC (Python)          Arduino
    |                   |
    |--- TRIG\n ------->|
    |                   | (トリガー出力開始)
    |<-- ACK -----------|
    |                   | (100 ms パルス出力)
    |<-- DONE ----------|
    |                   |

要件

  • Python 3.x
  • pyserial

インストール

pip install -r requirements.txt

設定

trigger.py 冒頭の定数を環境に合わせて変更してください。

定数デフォルト値説明
PORTCOM5接続するCOMポート
BAUD_RATE115200ボーレート
RESPONSE_TIMEOUT_SECONDS2.0Arduino応答待ちタイムアウト (秒)

使い方

python trigger.py

実行例:

COM5を開きました。
Arduino: ACK
Arduino: DONE
100 msトリガーが完了しました。

別プログラムへの組み込み手順

main関数の流れは以下の通りです.

  1. シリアルポート接続
  2. 安定化待機
  3. シグナル送信

ここで,1と2までは別プログラムの初期化ルーチンで事前に行ってください.
トリガー信号を出す瞬間に 3 シグナル送信 を実行してください.
このようにせず毎度 1~3 を処理すると,シグナル送信が遅延し,適時にトリガーが出せません.

エラー処理

メッセージ原因
Arduinoは現在トリガー出力中です。Arduino がBUSY状態のため再送が必要
Arduinoからの応答がタイムアウトしました。ケーブル未接続・ボーレート不一致など
シリアルポートエラー: ...COMポートが存在しない・アクセス権なし
シリアル送信タイムアウト: ...書き込みタイムアウト (デフォルト1秒)