MZ Platformとフィジカルコンピューティング

MZ PlatformとArduinoの接続

ここでは、MZ PlatformとArduinoを接続する方法と、その利用例について説明します。

Arduinoの説明については、本家のサイトまたは 日本語の解説をご覧ください。 安価で購入できる市販のマイコンモジュールで、USB経由でPCと接続してシリアル通信で情報をやり取りすることや、 部品を組み合わせるとXBee経由で無線シリアル通信も可能で、さらにはPCなしで単独で動作する機器を作成することも可能です。 Gainer miniと同様のI/Oモジュールとしての利用はもちろん、より多様な部品を扱えるので、 これを使えばほぼ何でも作れるというぐらい強力な製品です。

MZのユーザから見ての難点としては、 Arduinoの動作を定義する独自のソースコードを書いてプログラミングをする必要があります。

Arduinoでできること

Gainer miniのところで書いたことは、すべてArduinoでも利用できます。 それらに加えて、ArduinoではSPI接続やI2C接続でデータをやりとりするセンサモジュールも利用できます。 いくつか挙げると、下記のような部品が市販されています。

  • 超音波測距センサ
  • 気圧センサ
  • デジタルコンパス(地磁気センサ)

さらに、シールドとよばれる拡張部品が販売されていたり、多数のライブラリが公開されていて、 PCなしでイーサネット経由でLANに接続したり、SDカードにデータを書き込むなども可能です。

Arduino用プログラミング

Arduinoを利用するためには、独自のソフトウェア開発環境を用いたプログラミングが必要です。 その開発ツールは本家のサイトからダウンロードします。 ArduinoをPCと接続する際に、ドライバのインストールが必要となりますが、 ダウンロードした開発ツールの中に含まれているので、そちらを使います。

MZ Platformとの接続では、主にシリアル通信でデータのやりとりをすることになります。 PC側からの指令は独自に決めたコマンド文字列を用いたり、 Arduino側からのデータ送信は固定書式の数値文字列を用いるなどして、 データのやりとりをするのが簡単です。

下図に、PC側からコマンド文字を送信することでフルカラーLEDを点灯させるコード例を示します。 ここで使用したフルカラーLEDがアノードコモンのため、出力ピンをHIGHにすると消灯、 LOWにすると点灯することになります。

下図がArduinoとLEDを接続した様子で、左が初期状態、右が"r"を送信して赤色に点灯させた様子です。

このように、実現したい動作を電子部品とArduinoによる回路として作成し、 その動作を定義するコードをArduinoの開発環境で作成する必要があります。 作成するコードの中に、PC側とのやり取りとしてシリアル通信を利用した制御方法を定義しておきます。

MZアプリの作成

MZ Platformアプリケーションの作成では、シリアル通信コンポーネントを用います。 Arduino用プログラミングで自ら作成したシリアル通信のコマンドや書式を、 MZ側で送受信する処理を作成します。

前述のLEDを点灯させる例を用いて説明します。 下図は、シリアル通信でコマンド文字を送信するMZアプリの表示画面です。 MZアプリでシリアル通信コンポーネントを用いる場合には、 ポート名とその他のパラメータを指定します。ポート名は一般的に環境によって変わるので、 図のようにユーザが選択して接続します。シリアル通信のパラメータはほぼデフォルトのままで良く、 通信速度(ボーレート)をArduinoのコードで指定した値に合わせます。前述の例では9600を指定します。

このアプリケーションでは、接続ボタンを押したときの処理で通信速度を指定して接続を開始しています。

接続を開始してから各点灯ボタンを押すと、 Arduinoのコードで定義した各文字をシリアル通信で送信するように処理を記述しています。

このように、Arduinoを使って作成した独自の電子機器に対して、 MZアプリからシリアル接続でコマンドを送信して制御することが可能です。

利用例

各種センサデータの取得:加速度+方位+気圧+温度

各種センサデータをUSBケーブル経由で取得して、MZアプリで表示する例を示します。

下図が作成したセンサデータ取得機器です。構成は下記になります。 ここではセンサデータを取得してPCにシリアル通信で送るという使い方ですので、 Gainer miniと同様のI/Oモジュール的な使い方になります。 ただし、ここではGainer miniで扱えないセンサモジュールを使用しています。

  • Arduino Nano 3.0:USB mini-Bタイプで接続(図中左)
  • デジタルコンパス(HMC6352):I2C接続、方角を角度として取得(図中下)
  • 気圧センサ(MPL115A1):SPI接続、気圧と温度(図中上)
  • 3軸加速度センサ:XYZ3軸の加速度(図中右)
Arduino側では、各種センサの値を読み取り、 すべての値を半角スペース区切りの一行の文字列として定期的に送信します。

下図がMZアプリの画面になります。 テキストエリアにArduinoから受信した数値データの文字列を表示しています。 詳細は省略しますが、シリアル通信で受信したデータはデータ生成イベントで取得できるので、 それをそのままテキストエリアに出力しています。

さらに、こちらも詳細は省略しますが、受信した文字列を加工してテーブルデータを作成し、 時系列のグラフを表示できます。

このように、独自のデータ取得機器を作成して、そのデータをMZアプリで取り込むことが可能です。 Gainer miniでできることであればそちらの方がプログラミングの手間が減りますが、 Arduinoの方ができることの範囲が広いので、目的に応じて使い分けると良いと思います。

センサデータとWeb情報の統合:気圧+温度

(2013/10/11追記)

上記のセンサデータ取得機器を利用して作成した、センサデータとWeb情報を統合したアプリ例を紹介します。 ここでは、気圧と温度のデータのみを対象とします。気圧と温度を対象にしたWeb情報の取得については、 こちらをご覧ください。

下図が、作成したアプリの実行画面です。上側にWebから取得した気圧と気温の情報を表示し、 下側にセンサデータを表示しています。また、センサデータの比較対象として、 Webから取得した気圧と温度の値を示しています。

作成日 2013-04-03

最終更新日 2013-10-11