Serial CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Serial CHOP のシリアル通信機能を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – シリアル通信入出力

Serial CHOPは、シリアルポート(COM)を介して外部デバイスと双方向通信し、受信値と送信スクリプトをチャンネルとして扱う CHOPです。ボーレート・データビット・パリティ等の通信パラメータを設定し、Arduino やセンサーモジュールとのデータ送受信を 1 オペレータで完結します。

主な用途 🎯

  • Arduino / マイコンとの双方向シリアル通信(センサー値受信・コマンド送信)
  • COM ポート経由のハードウェア入力(圧力センサー・ロータリーエンコーダ等)の取り込み
  • チャンネル変化イベントに連動した制御コマンドの送出(オン / オフ / 値変化トリガー)
  • ボーレート・データビット・パリティ・ストップビットの細かい通信設定
  • Callback スクリプトでの受信データのカスタム解析・整形

データフロー 🔄

入力: COM ポート経由のシリアルデータ

State 監視(チャンネル変化検出)

Script 配列に応じた送信 / Callback で受信処理

出力: チャンネル値とコマンド送出

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Port Page 📋

Active .active 🔌

Active .active
– シリアル接続を有効化するトグル
– オフの間は COM ポートを占有せず通信を停止

State .state 🎛️

監視する入力チャンネルの遷移タイプを決定するメニューパラメータ

項目 内部名 説明
Off to On .offtoon チャンネルがオフからオンに切り替わったタイミングで送信
While On .on チャンネルがオンの間、毎フレーム送信
On to Off .ontooff チャンネルがオンからオフに切り替わったタイミングで送信
While Off .off チャンネルがオフの間、毎フレーム送信
Value Change .valuechange チャンネルの値が変化したタイミングで送信

Port .port 🔢

シリアル接続に使用する COM ポートの選択

項目 内部名 説明
COM3 .com3 システムで認識されている COM ポート(環境に応じて COM1 / COM4 等が選択肢として出現)

Baud Rate .baudrate

Baud Rate .baudrate
– コントロールビットを含み、1 秒あたりに伝送される最大ビット数
– 入力デバイス側のデフォルト値を確認して合わせる

Baud Rate Menu .baudmenu 📜

代表的なボーレートをメニューから選択して Baud Rate に反映するためのプリセット

項目 内部名 説明
1200 .1200 1200 bps
2400 .2400 2400 bps
9600 .9600 9600 bps(Arduino デフォルト)
19200 .19200 19200 bps
38400 .38400 38400 bps
57600 .57600 57600 bps
115200 .115200 115200 bps(高速通信の標準値)
230400 .230400 230400 bps
460800 .460800 460800 bps
921600 .921600 921600 bps
1382400 .1382400 1382400 bps

Data Bits .databits 🔠

1 フレームあたりに送信されるデータビット数を決定するメニュー

項目 内部名 説明
6 .6 6 ビット
7 .7 7 ビット
8 .8 8 ビット(最も一般的)
9 .9 9 ビット

※ 注意: データビットは LSB(最下位ビット)から MSB(最上位ビット)の順に「逆向き」に送信されます。受信側で値を解釈する際は右から左に読む点に注意してください。

引用元: 公式 docs

Parity .parity 🧮

データビットに付加されるエラー検出用パリティビットの種類

項目 内部名 説明
Even .even データビットとパリティビットの 1 の数が偶数になるよう設定
Odd .odd データビットとパリティビットの 1 の数が奇数になるよう設定
None .none パリティビットなし(エラー検出機能を使わない)

Stop Bits .stopbits 🛑

1 フレーム送信の終端に付加されるストップビット数

項目 内部名 説明
1 .1 ストップビット 1 個(標準)
2 .2 ストップビット 2 個

Scripts Page 📝

Script .script 📤

Script .script 📤
– 入力チャンネルに対応する送信文字列のシーケンス
– 例: Script 2 は 3 番目の入力チャンネルが State 条件を満たした時に送信される
<CR> / \n(キャリッジリターン)、\r(ラインフィード)等のエスケープシーケンスを自動変換

Callback .script0callback 🔁

Callback .script0callback 🔁
– Script 0 として送信されるスクリプト文字列を直接入力する欄
– 受信側のカスタム解析ロジックの起点として使用


Common Page 🔧

Time Slice .timeslice ⏱️

Time Slice モードの強制設定:

  • オン: チャンネルを「タイムスライス」モードに強制
  • タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間

Scope .scope 🎯

影響を受けるチャンネルの絞り込み:

  • Scope 文字列: 影響を受けるチャンネルを指定する文字列
  • パターンマッチング: *[1-10] 等のパターンが使用可能

Sample Rate Match .srselect

複数の入力 CHOP のサンプルレートが異なる場合の処理方法

項目 内部名 説明
Resample At First Input’s Rate .first 最初の入力のレートで他をリサンプル
Resample At Maximum Rate .max 最高サンプルレートでリサンプル
Resample At Minimum Rate .min 最低サンプルレートでリサンプル
Error If Rates Differ .err レート不一致でエラー

Export Method .exportmethod 📤

CHOP チャンネルをパラメータに接続する方法

項目 内部名 説明
DAT Table by Index .datindex DAT テーブルのインデックスでチャンネルとパラメータを対応付け
DAT Table by Name .datname DAT テーブルの行名でチャンネルとパラメータを対応付け
Channel Name is Path:Parameter .autoname チャンネル名を `path:parameter` 形式で記述し直接対応付け

Export Root .autoexportroot 🌳

Channel Name is Path:Parameter モード時のパス基点:

  • Export Root パス: autoname モードでチャンネル名のパス部分を相対化する基点 OP のパス

Export Table .exporttable 📋

DAT Table エクスポート方式での参照 DAT:

  • Export Table DAT: datindex / datname モード時に参照する DAT のパス

Rename from .commonrenamefrom 🔤

リネーム対象チャンネルのパターン:

  • Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列

Rename to .commonrenameto 🔁

リネーム後の置換パターン:

  • Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)

実践アイデア 💡

Example 1: Arduino からセンサー値を受信して映像制御 🎵

Arduino → Serial CHOP (COM3, 9600bps) → Math CHOP (Range) → TOP Parameter
  1. Arduino 側で Serial.begin(9600) + Serial.println(analogRead(A0)) を実装
  2. Serial CHOP の Port を Arduino が接続された COM ポートに設定、Baud Rate Menu を 9600 に
  3. 受信したアナログ値(0〜1023)を Math CHOP で 0〜1 に正規化
  4. 正規化値を TOP の Level / Blur などのパラメータに Export してリアルタイム制御

Example 2: ロータリーエンコーダの回転検出で UI 切替 📊

Rotary Encoder → Serial CHOP (State: Value Change) → Logic CHOP → Switch TOP
  1. ロータリーエンコーダの値を Arduino 経由でシリアル送信
  2. Serial CHOP の State を「Value Change」に設定して値変化のみ検出
  3. Logic CHOP で増減方向を判定し UI のページインデックスを更新
  4. Switch TOP で表示パネルを切り替えるインタラクティブ UI を構築

Example 3: TouchDesigner からデバイスへコマンド送信 🎮

Trigger CHOP → Constant CHOP (チャンネル切替) → Serial CHOP (Script 配列) → 外部マイコン
  1. Serial CHOP の Script 0〜N に送信したいコマンド文字列を記述(\n 等のエスケープ可)
  2. 入力チャンネルの状態を State で監視(例: Off to On)
  3. Trigger CHOP / Constant CHOP で入力チャンネルを切り替えコマンドを発火
  4. 受信側マイコンでコマンドを解釈し LED や モーターを駆動

Example 4: Callback スクリプトでカスタムパース 🔄

External Device → Serial CHOP (Callback) → Custom Python Parsing → DAT Table
  • 受信文字列に CSV / JSON 等の独自フォーマットが含まれる場合、Callback に Python スクリプトを記述
  • Callback 内でデリミタ分割やバイト解析を行いチャンネル値に変換
  • DAT Table に書き出して後段の CHOP / TOP で使用
  • 通信プロトコル固有の処理を Serial CHOP 内に閉じ込めて再利用性を向上

関連オペレータ 🔗

類似機能OP 🔍

  • Serial DAT — シリアル通信を DAT 側で扱う場合の選択肢(文字列・テーブル中心の処理)
  • OSC In CHOP — ネットワーク経由の制御信号を受信する CHOP(用途が近い)

組み合わせ推奨OP 🔄

  • Math CHOP — 受信生値を正規化・スケーリング
  • Filter CHOP — ノイズの多いシリアル入力を平滑化
  • Logic CHOP — 受信値を閾値判定してオン / オフ信号に変換
  • Trigger CHOP — 送信タイミングのエンベロープ制御
  • Analyze CHOP — 受信ストリームのピーク検出や統計値抽出

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Serial CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: COM ポートに接続できない / 警告が発生する
✅ Solution:

  • 他のアプリケーション(Arduino IDE のシリアルモニタ等)が同じ COM ポートを占有していないか確認
  • Active をオフにしてから別のポートに切り替え、再度 Active をオンにする
  • デバイスマネージャで実際に割り当てられている COM 番号を確認し Port パラメータと一致させる

❌ Problem: 受信データが文字化けする / 値が想定外
✅ Solution:

  • 送信側と Baud Rate / Data Bits / Parity / Stop Bits が完全一致しているか確認
  • Baud Rate Menu のプリセット値を使い独自値の入力ミスを排除
  • 受信側でデータビットが LSB→MSB の順に届く点を考慮し、必要なら後段でビット反転処理

❌ Problem: 送信タイミングが意図通りにならない
✅ Solution:

  • State パラメータの選択が用途と合っているか確認(Off to On / While On / Value Change 等)
  • 前段に Logic CHOP を入れて条件を明示化
  • Script 配列のインデックスと入力チャンネル順序が対応しているか確認

❌ Problem: ノイズが多くて値が安定しない
✅ Solution:

  • 後段に Filter CHOP を入れて時間方向にスムージング
  • 送信側マイコンで複数回サンプリングして平均化してから送信する
  • ケーブル長を短くし、グラウンド共通化やシールド線を使用してハードウェア起因のノイズを抑える

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました