この記事では、USB接続のデジタル出力基板「TDFA50507」と「TDFA50607」を使って、Raspberry Piから7接点の出力をON/OFFしてみます。
TDFA50507とTDFA50607は、どちらもUSB経由でデジタル出力を制御できる基板です。コマンドから set 1 のように数値を指定するだけで、接点1をONにできます。USB側と出力側は絶縁されているので、外部機器の信号線を扱う実験にも使いやすい構成です。
この記事では、まず外部機器は接続せず、基板上のLEDで接点のON/OFFを確認します。最後に参考情報として、外部機器を接続する場合の基本的な配線方法も紹介します。
TDFA50507とTDFA50607の違い
TDFA50507とTDFA50607は、コマンドでの操作方法はほぼ同じです。大きく違うのは出力方式です。
| 製品 | 出力方式 | 最大出力電流 | TD-USBのモデル名 |
|---|---|---|---|
| TDFA50507 | 電流シンク出力 | 80mA/接点 | tdfa50507 |
| TDFA50607 | 電流ソース出力 | 100mA/接点 | tdfa50607 |
電流シンク出力のTDFA50507は、外部機器のマイナス側をON/OFFするイメージです。
電流ソース出力のTDFA50607は、外部機器のプラス側へ電圧を出すイメージです。
外部機器をつなぐ場合の配線は異なりますが、Raspberry Piからの操作は同じ考え方で進められます。
用意するもの
| アイテム | 説明 |
|---|---|
| Raspberry Pi(OSインストール済み) | Raspberry Pi OSが入っていて、ターミナル操作できるもの |
| TDFA50507 または TDFA50607 | 7接点のUSBデジタル出力基板です |
| USBケーブル TDAC-USB2B1M5 | Raspberry Piと基板を接続します |
| インターネット | ツールのインストールやソースの取得で使います |
| 12~24Vの外部電源 | 出力側の確認や、外部機器へ実際に信号を出す場合に使います |
| 配線材 | 外部電源や外部機器を接続する場合に使います |
この記事の基本手順では、外部機器は接続せず、基板上のLEDで出力状態を確認します。外部機器を使った配線は、記事の後半で扱います。
ツールを準備しよう
Raspberry Pi のソフトをアップデートしてから、必要な開発ツールやライブラリをインストールします。
sudo apt update && sudo apt upgrade -y
sudo apt install -y git build-essential libusb-dev python3
USBの権限を設定する
TDFA50507/TDFA50607を一般ユーザーから使えるように、USBのアクセス権限を設定します。
以下のコマンドで「udev」ルールを作ります。32ee は東京デバイセズ製品のベンダーIDです。1771 はTDFA50507、1784 はTDFA50607のプロダクトIDです。
sudo tee /etc/udev/rules.d/99-usb-tokyodevices.rules <<EOF
SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="1771", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="32ee", ATTR{idProduct}=="1784", MODE="0666"
EOF
変更を反映します。
sudo udevadm control --reload-rules
sudo udevadm trigger
ここまでできたら、USBケーブルでRaspberry PiとTDFA50507/TDFA50607を接続します。すでに接続していた場合は、一度抜き差ししてください。
TD-USBツールをインストールしよう
TDFA50507/TDFA50607を操作するには、「TD-USB」という公式のコマンドラインツールを使います。GitHubからソースコードを取得してビルドします。
git clone https://github.com/tokyodevices/td-usb.git
cd td-usb
make
ちゃんと動くか試してみましょう。
./td-usb
# → バージョン情報が表示されれば成功!
接続されている基板が見えているか確認します。使っている製品に合わせて、どちらか一方を実行してください。
TDFA50507の場合:
./td-usb tdfa50507 list
XXXXXXXXXXXXXX
TDFA50607の場合:
./td-usb tdfa50607 list
XXXXXXXXXXXXXX
シリアル番号が表示されれば、Raspberry Piから基板が見えています。
LED確認用に出力側の電源を準備する
基板上のLEDで出力状態を確認する場合も、出力側には12~24Vの外部電源を接続します。ここでは外部機器はまだ接続しません。
TDFA50507の場合は、外部電源を次のように接続します。
外部電源の + → TDFA50507の Common Plus
外部電源の - → TDFA50507の Common Minus
TDFA50607の場合は、外部電源のプラス側をCommon Plusに接続します。
外部電源の + → TDFA50607の Common Plus
TDFA50607にはCommon Minus端子がありません。外部機器を接続しないLED確認では、外部電源のマイナス側は基板には接続しません。外部機器を接続する場合のマイナス側のつなぎ方は、記事の後半で説明します。
接点1をON/OFFしてみよう
まずはコマンドだけで、接点1をON/OFFしてみます。外部機器はまだ接続しません。基板上のLEDを見ながら確認します。
TDFA50507の場合:
./td-usb tdfa50507 set 0
./td-usb tdfa50507 set 1
./td-usb tdfa50507 get
1
./td-usb tdfa50507 set 0
TDFA50607の場合:
./td-usb tdfa50607 set 0
./td-usb tdfa50607 set 1
./td-usb tdfa50607 get
1
./td-usb tdfa50607 set 0
set 1 を実行すると接点1がONになります。基板上の接点1に対応するLEDが点灯すれば成功です。最後に set 0 を実行すると、すべての接点がOFFになります。
数値と接点の関係を見てみよう
TDFA50507/TDFA50607では、7個の接点状態を1つの数値で指定します。
| 出力状態 | 2進数でのイメージ | 指定する値 |
|---|---|---|
| すべてOFF | 0000000 | 0 |
| 接点1だけON | 0000001 | 1 |
| 接点2だけON | 0000010 | 2 |
| 接点1と接点2をON | 0000011 | 3 |
| 接点3だけON | 0000100 | 4 |
| 接点7だけON | 1000000 | 64 |
| すべてON | 1111111 | 127 |
たとえば、接点1と接点2を同時にONにしたい場合は 3 を指定します。
TDFA50507の場合:
./td-usb tdfa50507 set 3
./td-usb tdfa50507 get
3
./td-usb tdfa50507 set 0
TDFA50607の場合:
./td-usb tdfa50607 set 3
./td-usb tdfa50607 get
3
./td-usb tdfa50607 set 0
set 0 を実行すると、すべての接点がOFFに戻ります。
Pythonで点滅させてみよう
次に、Pythonから td-usb を呼び出して、接点1を1秒ごとにON/OFFしてみます。
td-usb フォルダの中で、blink_output.py というファイルを作成してください。使う製品に合わせて、MODEL の行を1つだけ有効にします。
#!/usr/bin/env python3
import subprocess
import time
# 使う製品に合わせて、どちらか1行だけ有効にしてください。
MODEL = 'tdfa50507' # TDFA50507
# MODEL = 'tdfa50607' # TDFA50607
def set_outputs(value):
subprocess.run(['./td-usb', MODEL, 'set', str(value)], check=True)
print('接点1のON/OFFを開始します。終了するにはCtrl+Cを押してください。')
try:
while True:
set_outputs(1)
print('接点1: ON')
time.sleep(1)
set_outputs(0)
print('接点1: OFF')
time.sleep(1)
except KeyboardInterrupt:
set_outputs(0)
print('\nすべてOFFにして終了しました。')
実行してみよう
python3 blink_output.py
接点1のON/OFFを開始します。終了するにはCtrl+Cを押してください。
接点1: ON
接点1: OFF
接点1: ON
接点1: OFF
基板上の接点1のLEDが1秒ごとに点灯・消灯すれば成功です。終了するときは Ctrl+C を押してください。スクリプト終了時には set 0 を実行して、すべての接点をOFFに戻します。
外部機器を接続する場合
ここからは参考情報です。実際に外部機器へ信号を出す場合は、基板の出力側に12~24Vの外部電源が必要です。USBからの電源だけでは、外部機器へ信号を出力できません。
配線するときは、Raspberry Piや外部電源を切った状態で作業してください。また、TDFA50507/TDFA50607はリレー接点ではなくトランジスタ出力です。接点1個あたりの最大出力電流を超える負荷や、モーターなどの大きな負荷を直接接続しないでください。
TDFA50507の場合
TDFA50507は電流シンク出力です。外部機器のマイナス側をTDFA50507がON/OFFします。
接点1に外部機器をつなぐ場合は、次のように配線します。
外部電源の + → TDFA50507の Common Plus
外部電源の - → TDFA50507の Common Minus
外部電源の + → 外部機器の + 側
外部機器の - 側 → TDFA50507の接点1
この配線で ./td-usb tdfa50507 set 1 を実行すると、接点1がONになり、外部機器に電流が流れます。
TDFA50607の場合
TDFA50607は電流ソース出力です。TDFA50607の接点から外部機器のプラス側へ電圧を出します。信号電源は12~24Vです。
接点1に外部機器をつなぐ場合は、次のように配線します。
外部電源の + → TDFA50607の Common Plus
TDFA50607の接点1 → 外部機器の + 側
外部機器の - 側 → 外部電源の - 側
この配線で ./td-usb tdfa50607 set 1 を実行すると、接点1から外部機器のプラス側へ信号が出力されます。
どちらの製品でも、使わない端子や No Connection とされている端子には何も接続しないでください。
おわりに
この記事では、TDFA50507/TDFA50607とRaspberry Piを使って、7接点のデジタル出力をコマンドとPythonからON/OFFするところまで試しました。
基板上のLEDで動きが確認できたら、次は外部機器を接続して、実際の信号出力に進めます。TDFA50507は電流シンク、TDFA50607は電流ソースなので、外部機器を接続するときは配線の向きに注意してください。



