Macはすでに、デジタルカメラ、ビデオカメラ、プリンター、外付けディスクドライブ、携帯電話、他のコンピュータなど、あらゆる種類の電子機器と通信できます。しかし、モーター、ロボット、外付けLCDディスプレイ、各種センサーなど、Macが通信できない機器も数多くあります。
Macがこれらのデバイスと通信するには、翻訳機のような役割を持つものが必要です。その役割を担うのがマイクロコントローラです。プログラム可能なコンピュータオンボード(CoB)をMacのUSBポートに接続すると、外部デバイスをボードに接続し、そのデバイスに動作を指示するプログラムを作成できます。
マイクロコントローラとMacで何ができるかをお見せするために、「BreakTimer」というデモプロジェクトを考案しました。このシステムにより、Macはユーザーが椅子に座っているかどうかを検知し、長時間座っている場合は立ち上がって休憩を取るタイミングを知らせてくれます。
部品を組み立てる
Mac 用のマイクロコントローラ システムには、マイクロコントローラ ボード、OS X ソフトウェア、マイクロコントローラに接続するハードウェアという 3 つのコンポーネントがあります。
Mac対応のマイクロコントローラボードとして最も人気があるのはArduinoです。オープンソース(回路図を入手して自分で組み立てることも可能)で、非常に手頃な価格(組み立て済みボードで35ドル)で、Mac OS Xでも問題なく動作します。Arduinoボード自体は複数の販売元から入手可能ですが、Diecimila製の新しいモデルを購入することをお勧めします。
ボードを入手したら、付属のソフトウェアが必要です。こちらのサイトにアクセスし、Mac OS Xのリンクをクリックしてダウンロードしたファイルを解凍し、できたフォルダをアプリケーションフォルダにドラッグしてください。次に、ボードのドライバをインストールします。最新のドライバソフトウェアも入手可能です。お使いのMacに適したバージョンを入手してください。
ハードウェアを接続する
さあ、私のBreakTimerプロジェクトに挑戦するなら、シートセンサーをArduinoボードに接続する準備は万端です。いくつかのサプライヤーと部品番号を提示しましたが、私の説明に合致する限り、ハードウェアはどこからでも入手できます。また、ワイヤーラッピングの手順に慣れていない場合は、始める前にオンラインチュートリアル(代替)をご覧ください。
材料を揃えたら、Macから椅子まで届く長さのワイヤーを2本切ります。ワイヤーラッピングツールに付属のワイヤーストリッパーを使って、各ワイヤーの端から2.5cmほど剥がします。次に、ワイヤーラッピングツールを使って、センサーの各ピンにワイヤーを1本ずつ巻き付けます。
次に、各電線のもう一方の端から2.5cmほど被覆を剥がします。電線ラッピングツールを使って、電線の1本を抵抗器のリード線に巻き付けます。できるだけリード線の高い位置に巻き付けます。カッターを使って、オスのヘッダーピンの列から1本のピンを外します。もう一方の電線の端を、そのピンの短い方の端に巻き付けます。

さあ、すべてを接続しましょう。センサーピンに接続されている抵抗器の端を、Arduinoボードの「Analog In 0」と書かれた穴に差し込みます。もう一方のセンサーピンに接続されているオスのヘッダーピンを、「5V」と書かれた穴に差し込みます。抵抗器の何も接続されていない端は、「Gnd」と書かれた2つのコネクタのいずれかに差し込みます。(ボードは右図のようになります。)Gndと5Vのハードウェアが接触していないことを確認してください。接触するとショートする可能性があります。
最後に、標準の USB A-B ケーブルを使用して Arduino ボードを Mac に接続します。USB ハブの使用は避けてください。
ソフトウェアをプログラムする
ハードウェアを接続したら、Arduinoアプリケーションを起動します。「ツール」メニューを開き、「ボード」サブメニューからボードを選択します。次に、「シリアルポート」サブメニューを開き、「/dev/tty.usbserial-A4001LBP」のようなエントリを探します。そのようなエントリが1つだけある場合は、それを選択します。複数ある場合は、Arduinoプログラムを終了し、不要なUSB機器をすべて取り外します。アプリケーションを再起動すると、「/dev/tty.usbserial」で始まるエントリが1つだけ表示されるはずです。
これでArduinoをプログラムする準備が整いました。Arduinoは比較的簡単なプログラミング言語を使用しているので、プログラミングやスクリプトを少しでも使ったことがある方なら、すぐに理解できるはずです。(分かりやすいリファレンスガイドもご用意しています。)
このデモンストレーションでは、センサーを使用して座っている時間を検出するプログラム ( Arduino の略語ではスケッチ) を作成しました。
まず、Arduinoソフトウェアで「ファイル」→「新規」を選択します。上部にタブのあるウィンドウが表示されます。ウィンドウの右上隅にある右向きの矢印をクリックし、名前(私の例ではBreakTimer)を入力して「OK」をクリックします。このコードをコピーして、コードウィンドウに貼り付けます。
次に、「ファイル」→「I/Oボードにアップロード」を選択します。Arduinoボード上のいくつかのライト(「TX」と「RX」のラベル)が点滅します。アップロードが完了すると、Arduinoプログラムの出力ペインに「バイナリスケッチのサイズ:3046バイト(最大14336バイト)」のようなメッセージが表示されます。
さあ、センサーをテストしてみましょう。私のBreakTimerプロジェクトに挑戦している方は、Arduinoのシリアルモニターアイコンをクリックし、センサーに圧力をかけてください。ArduinoのステータスウィンドウにDの文字が表示されます。圧力を離すとUが表示されます。15分間(テストのために短い間隔に調整できます)圧力をかけるとBが表示されます。シリアルモニターアイコンをもう一度クリックして、これらのメッセージの監視を停止してください。

センサーがArduinoボードを介してMacと正常に通信できるようになったので、Macに応答方法を伝える必要があります。一つの方法は、Massimo Banzi氏による無料のASProxyを使うことです。ASProxyはシリアルポートで1文字のメッセージを監視し、それらのメッセージに基づいてAppleScriptのアクションをトリガーします(右のスクリーンショットに例を示します)。
または、AppleScriptアドイン「SerialPort X」をダウンロードすることもできます。ユーザーフォルダ「/Library/Scripting Additions」にコピーすれば、スクリプトエディタでシリアルポートへの入力を監視し、特定のアクションをトリガーするAppleScriptを作成できます。スクリプトはアプリケーションとして保存し、「Stay Open」を選択してください。(BreakTimerのスクリプト例は、ダウンロードしてご覧ください。)
最後の言葉
このプロジェクトは、Macに接続したマイクロコントローラーでできることのほんの一例です。Arduinoボードは、SparkFun ElectronicsやTrossen Roboticsなどのメーカーから販売されている様々なセンサーやその他のデバイスと通信できます。さらに詳しいアイデアについては、Arduinoのサイト、特にPlaygroundとExhibitionエリアをご覧ください。
[ブライアン・ジェプソンは、 Makeマガジンの書籍シリーズの編集長であり、 『Making Things Talk』(Make Books、2007 年)の編集者です。 ]