Ubuntu Weekly Recipe

第606回 オープンソースな多機能測定器Pocket Science LabをUbuntuで使う

この記事を読むのに必要な時間:およそ 4 分

LXDの中からホストのUSBデバイスを見えるようにする

前述の手順でPSLabを起動した場合,画面右下に「Device not connected」と表示され,右上のUSBマークもバツ印になっていると思います。

図2 このマークの時はPSLabを認識できていない

画像

これはLXDコンテナを作っただけだと,ホスト上のUSBデバイスが見えないからです。そこでUSBデバイスをコンテナから見えるようにしましょう。

まずはUSBデバイスのIDを調べます。PSLabをホスト上に接続することで,/dev以下に新しいttyXXXなファイルが登場するはずです。一般的なPCなら/dev/ttyACM0ができていることでしょう。このファイル名を元にUSBの情報を取得します。

$ udevadm test-builtin usb_id /sys/class/tty/ttyACM0
calling: test-builtin
Load module index
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9:1.0: if_class 2 protocol 0
ID_VENDOR=Microchip_Technology_Inc.
ID_VENDOR_ENC=Microchip\x20Technology\x20Inc.
ID_VENDOR_ID=04d8
ID_MODEL=MCP2200_USB_Serial_Port_Emulator
ID_MODEL_ENC=MCP2200\x20USB\x20Serial\x20Port\x20Emulator
ID_MODEL_ID=00df
ID_REVISION=0101
ID_SERIAL=Microchip_Technology_Inc._MCP2200_USB_Serial_Port_Emulator_0003077351
ID_SERIAL_SHORT=0003077351
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:020201:0a0000:030000:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=cdc_acm
Unload module index
Unloaded link configuration context.

もしくはsudo udevadm monitor -eを実行してからPSLabを接続する方法でもかまいません。このあたりに関しては,第559回「デバイスの認識をモニタリング・コントロールできる『udevadm⁠⁠」を参照してください。

今回必要なのはID_VENDOR_ID/ID_MODEL_ID/ID_SERIAL_SHORTです。この特定のデバイスが接続されたら,/dev/PSLabという/dev/ttyACMxへのシンボリックリンクファイルを作成しましょう。これにより複数のPSLabが接続されたり,既に/dev/ttyACM0が存在する場合も,PSLabのデバイスファイル名を固定できます。シンボリックリンクファイルの作成にはudevのルールを利用します。以下のコマンドをホスト上で実行してください。

$ cat <<EOF | sudo tee -a /etc/udev/rules.d/68-pslab.rules
## For PSLab
ACTION=="add", SUBSYSTEM=="tty", \\
    ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00df", \\
    ATTRS{serial}=="0003077351", MODE="666", SYMLINK+="ttyPSLab"
EOF

PSLabを接続し直すと,次のようなファイルが作成されているはずです。

$ ls -l /dev/ttyPSLab
lrwxrwxrwx 1 root root 7  2月  8 16:02 /dev/ttyPSLab -> ttyACM0

次にこのファイルをコンテナの中からアクセスできるようにします。

$ lxc config device add pslab ttyPSLab unix-char \
  source=/dev/ttyPSLab path=/dev/ttyACM0 \
  required=false uid=1000 gid=1000
Device ttyPSLab added to pslab

require=falseを指定しておかないと,PSLabが接続されていない状態ではpslabコンテナを起動できません。言い換えると,特定のデバイスが存在しない限りコンテナを起動できるようにするには,この設定を変更してください。

コンテナの中を確認すると,新しいシリアルデバイスが作られているはずです。

$ lxc exec pslab -- ls -l /dev/ttyACM0
crw-rw---- 1 ubuntu ubuntu 166, 0 Feb  6 07:07 /dev/ttyACM0

ちなみにPSLabはデバイスファイルがttyUSBxttyACMxになる前提で作られています。よってこれら以外の名前を付けるとやはり「Device not connected」と表示されるので注意しましょう。

PSLabの使い方

デスクトップアプリケーション版のPSLabの作りはとてもシンプルです。よっていろいろ触ってみればすぐに使い方がわかることでしょう。

PSLabには信号生成機とオシロスコープの両方が備わっているので,PSLab単体でも動作確認可能です。たとえば信号生成器から正弦波を出力し,それをオシロスコープで観測してみましょう。

まずピンの配置を確認します。PSLabのトップ画面の右上のハンバーガーメニューをクリックすると,ボードの全面と背面の画像を確認できます。

図3 ピンを接続するFront Layout

画像

図4 Back Layoutにはより詳しい説明が書いてある

画像

このうちBack Layoutの「Sine Wave 1」「Sine Wave 2」が正弦波を出力できるピンです。Front Layoutだと小さく「SI1」⁠SI2」と書いてあります。オシロスコープの端子は「CH1」⁠CH2」⁠CH3」⁠MIC」です。⁠MIC」はマイクロフォンですが,オシロスコープの端子としても使えます。

とりあえずは「SI1」「CH1」を繋いでみましょう。PSLabのトップ画面から「Wave Generator」を選択します。⁠WAVE1」をクリックして,画面下部のバーで周波数を調整します。最後に「FREQ」ボタンを押して信号生成を開始しておきましょう。

図5 とりあえず500Hzで。PhaseはWave2のみ設定できる模様

画像

ちなみに「DIGITAL」をクリックすると「Square Wave」など矩形波用の端子を操作する画面になります。ただANALOGとDIGITALは共用できないようです。

トップ画面に戻ったら「Oscilloscope」を選んでください。何がしかの波が流れているのが見えるはずです。とりあえず止めたければ「Trigger」にチェックを入れます。

図6 あらきれいな正弦波

画像

これはつまりCH1が「Voltage=0」になったタイミングをトリガーとして止めています。TimeBaseをいじると解像度を変更できます。現在「0.5ms/div」ということは1目盛が0.5msということです。500Hzの正弦波なので,1周期が2msです。目盛と正弦波の位置が期待通りになっていることがわかりますね。

このようにPSLabを使えば安価にオシロスコープを含むさまざまな計測器を実現できます。もちろん値段相応の精度・性能ではありますが,ホビー用途でいろいろ調べてみたいものの,わざわざWindowsを立ち上げたくない人にはうってつけのツールではないでしょうか。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。