Pocket Science Lab(PSLab)はオシロスコープやマルチメーター、ロジックアナライザー、シグナルジェネレーターなど多くの機能を備えた、スマートフォンからも操作できるシングルボードコンピューターです。今回はこのPSLabをUbuntuから操作してみましょう。
オープソースハードウェア「Pocket Science Lab」
Pocket Science Lab(PSLab)の最大の特徴のひとつが「オープンソースハードウェア」を謳っていることです。つまりソフトウェアだけでなくハードウェアやファームウェアの仕様やコードも公開されているため、ユーザーが必要に応じて改造・拡張しやすい作りになっているのです。
機能としてはオシロスコープやマルチメーターだけでなく、ロジックアナライザーやシグナルジェネレーター、電源などとして利用できますし、I2C/SPI/UARTの口もあるのでそれらのバスにつながった外部デバイスの制御もできます。Pythonライブラリが公開されているので、USBに接続したシリアルコンソール経由でプログラマブルに操作することも可能です。
さらに「Pocket」の名前のとおり、ハードウェアそのもののサイズはRaspberry Piよりも一回り小さく作られています。ディスプレイと操作はスマートフォンを、電源はUSBケーブルを利用できるため、ハードウェア自体はとても小さくて済むのです。
つまり最低限必要なのはプローブ用のピンヘッダーに接続するケーブル類とAndroidベースのスマートフォンもしくはPCだけです。なお、スマートフォンに接続する場合は、USB-OTGケーブルである必要があります。いわゆるスマートフォンにマウスやUSBメモリーのようなUSBデバイスを接続して動かせるようになるケーブルです。
デスクトップ向けアプリケーションのインストール
PSLabにはAndroid向けのアプリケーションとは別に「Windows/Linux向けのデスクトップアプリケーション」が用意されています。実体はElectronベースのアプリケーションではあるものの、デバイスとの通信はPythonを用いています。言い方を変えれば、これらが動く環境であればOS・ディストリビューションを問わず動作する見込みです。
ただしAndroid版に比べると、照度計・圧力計・加速度計・角速度計・方位計・温度計・ガスセンサーなどの情報取得機能や、Andorid版程度の使いやすいUIが不足しているという印象です。OTGケーブルが入手できなかったり、Androidに余計なアプリを入れたくなかったり、どうしてもデスクトップLinuxを使いたい場合でない限りは、Android版をおすすめします。
ちなみに各種センサーは、PSLabで直接計測できるわけではなく、Android版は接続したスマートフォンのデバイスから情報を取得しているようです。しかしI2C/SPI/UARTのデータバスを持っているため、自分でセンサー系ICを接続し、Pythonスクリプトを記述すれば、情報を取得することが可能になるはずです。具体的な実装例はPSLabのPythonライブラリを参照してください。
それでは実際に、Ubuntu 18.04 LTSにデスクトップアプリケーション版のPSLabをインストールしましょう。選択肢は次の3つです。
- 公式が配布する安定版のdebファイルをインストールする
- 公式が配布する開発版のdebファイルをインストールする
- GitHubからソースコード一式をインストールする
このうち安定版についてはCI/CDの問題かGitHub LFSの問題かは不明ですが、パッケージファイルをダウンロードできません。よって一番簡単なのは開発版のdebファイルをダウンロード・インストールする方法です。
debファイルはフロントエンドの、つまりはElectronアプリケーションを動かすための依存関係は記述されていますが、バックエンドのPythonライブラリについては記述されていません。よってバックエンド部分は別途自分でインストールしなければなりません。
第589回「M5StickVの開発用にMaixPy IDEをUbuntuで動かす」のように、LXD上でPSLabデスクトップアプリケーションを動かす方法もあります。とりあえずデスクトップアプリケーション専用のコンテナを作ってしまいましょう。LXDを使わない場合は以下のコマンドはスキップしてください。
ここから先の手順は、LXDを使う場合はコンテナの中で、使わない場合はホスト上で実行するものとします。
まずはフロントエンドのパッケージをダウンロード・インストールします。
次にバックエンドを動かすに当たって足りない依存関係およびバックエンドそのものをインストールします。
バックエンドはPython 3のスクリプトです。そこで上記ではこのスクリプトが利用するNumPy・PySerialと、バックエンドビルド時に利用するであろうpip、ビルドツール一式をインストールしています。NumPyとPySerialはpipからインストールしてもかまいません。
最後の2行はPSLabのバックエンドをクローンし、ビルド・インストールしているだけです。
これでデスクトップアプリケーションであるPSLabを起動する準備が整いました。アプリケーションは次のコマンドで起動できます。
LXDの中にインストールした場合は、ホスト側からだと次のように実行します。
LXDの中からホストのUSBデバイスを見えるようにする
前述の手順でPSLabを起動した場合、画面右下に「Device not connected」と表示され、右上のUSBマークもバツ印になっていると思います。
これはLXDコンテナを作っただけだと、ホスト上のUSBデバイスが見えないからです。そこでUSBデバイスをコンテナから見えるようにしましょう。
まずはUSBデバイスのIDを調べます。PSLabをホスト上に接続することで、/dev
以下に新しい「ttyXXX
」なファイルが登場するはずです。一般的なPCなら「/dev/ttyACM0
」ができていることでしょう。このファイル名を元にUSBの情報を取得します。
もしくは「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のルールを利用します。以下のコマンドをホスト上で実行してください。
PSLabを接続し直すと、次のようなファイルが作成されているはずです。
次にこのファイルをコンテナの中からアクセスできるようにします。
「require=false
」を指定しておかないと、PSLabが接続されていない状態ではpslabコンテナを起動できません。言い換えると、特定のデバイスが存在しない限りコンテナを起動できるようにするには、この設定を変更してください。
コンテナの中を確認すると、新しいシリアルデバイスが作られているはずです。
ちなみにPSLabはデバイスファイルが「ttyUSBx
」か「ttyACMx
」になる前提で作られています。よってこれら以外の名前を付けるとやはり「Device not connected」と表示されるので注意しましょう。
PSLabの使い方
デスクトップアプリケーション版のPSLabの作りはとてもシンプルです。よっていろいろ触ってみればすぐに使い方がわかることでしょう。
PSLabには信号生成機とオシロスコープの両方が備わっているので、PSLab単体でも動作確認可能です。たとえば信号生成器から正弦波を出力し、それをオシロスコープで観測してみましょう。
まずピンの配置を確認します。PSLabのトップ画面の右上のハンバーガーメニューをクリックすると、ボードの全面と背面の画像を確認できます。
このうちBack Layoutの「Sine Wave 1」と「Sine Wave 2」が正弦波を出力できるピンです。Front Layoutだと小さく「SI1」「SI2」と書いてあります。オシロスコープの端子は「CH1」「CH2」「CH3」「MIC」です。「MIC」はマイクロフォンですが、オシロスコープの端子としても使えます。
とりあえずは「SI1」と「CH1」を繋いでみましょう。PSLabのトップ画面から「Wave Generator」を選択します。「WAVE1」をクリックして、画面下部のバーで周波数を調整します。最後に「FREQ」ボタンを押して信号生成を開始しておきましょう。
ちなみに「DIGITAL」をクリックすると「Square Wave」など矩形波用の端子を操作する画面になります。ただANALOGとDIGITALは共用できないようです。
トップ画面に戻ったら「Oscilloscope」を選んでください。何がしかの波が流れているのが見えるはずです。とりあえず止めたければ「Trigger」にチェックを入れます。
これはつまりCH1が「Voltage=0」になったタイミングをトリガーとして止めています。TimeBaseをいじると解像度を変更できます。現在「0.5ms/div」ということは1目盛が0.5msということです。500Hzの正弦波なので、1周期が2msです。目盛と正弦波の位置が期待通りになっていることがわかりますね。
このようにPSLabを使えば安価にオシロスコープを含むさまざまな計測器を実現できます。もちろん値段相応の精度・性能ではありますが、ホビー用途でいろいろ調べてみたいものの、わざわざWindowsを立ち上げたくない人にはうってつけのツールではないでしょうか。