Arduinoを繋いでみる

今回は、openFrameworksでArduinoをコントロールしてみます。

Arduinoとは、単純な入出力を備えた基板と Processing/Wiring 言語を実装した開発環境から構成されるシステム、だそうです。要するに、PCとの通信・書き込みもセットになったI/Oボードという事かな。詳しくはWikiで。


■Arduinoの準備

□ハードの準備
 Arduinoはオープンハードウェアなので、仕様をみて作ろうと思えば作れますが(僕には無理ですが)、最近はAmazonでも購入できます。たくさんの種類がありますが、最初は基本的なものを用意するのがいいと思います。その辺の事情はこちらで書かれています。スタパ齋藤の「週刊スタパトロニクスmobile」

 僕が買ったのはこれ。電源をUSB、ACアダプタで供給でき、シールド(拡張ボード)と組み合わせる事もできます。
Arduino Duemilanove 328

 電子工作をやった事が無く、ブレッドボードを持っていなければ、Arduinoをはじめようキットも一緒に買うといいかもしれません。





□ソフトの準備
 Arduino IDE(開発環境)はこちらから自分の環境にあったものをダウンロードしてください。Download the Arduino Software
 解凍したフォルダの中の「FTDIUSBSerialDriver」を実行して、USB-Serialドライバーをインストールします。

□サンプルの実行
 まずは最もシンプルなLEDが点滅するサンプルを動かしてみます。

 下の写真のように13番のOutput PinにLEDを繋ぎ、USBでパソコンに接続します。

 
 次にAruduino IDE を起動し、File > Examples > Digital > Blink を選択すると、以下のようなウィンドウが開きます。

「Upload」のアイコンをクリックすると、Arduinoへプログラムを書き込みを始め、正常に終了するとLEDが1秒ごとに点滅します。IDEに戻り、loop()の中のdelay(1000)をdelay(500)に変えて再度Uploadすると、0.5秒毎の点滅に変わると思います。

 

■サンプルを開く
 Arduinoへの書き込み確認ができたので、いよいよopenFrameworksからコントロールしてみます。そのためには「Firmata」という物を使います。Firmataとは、マイクロコントローラとホストコンピュータ上で通信するための一般的なプロトコル、だそうです。PCからの命令に受け答えるソフトをArduinoに入れ、openFrameworksからはそのソフトが分かるように命令を渡してあげる、という事のようです。なので、Firmataに従っていれば、Processingからコントロールする事もできます。

 まず、Arduinoにfirmataを入れます(こういう言い方でいいのかな?)File > Examples > Firmata > StandardFirmataを開き、Uploadします。

 次にoFのapps/firmataExample/firmataExample.xcodeproj を開きます。まずはそのままビルドしてみてください。下記のようにアプリは起動しますが、Arduinoが接続されていないと表示されます。

 写真に従ってLED, 半固定抵抗を繋ぎます。半固定抵抗は「始めようキット」に入っていないので、別に用意する必要があります。Amazonでは半固定可変抵抗器セットがありますが高いので、千石電商などの電子パーツ屋さんで買うのがよいと思います。

 この状態でビルドしてエラーが出なければ成功です。右上に半固定抵抗の値が表示されます。ちなみに僕はここで躓きました。ビルドでエラーはでませんが、Arduinoが認識されません。試しにProcessingのFirmataサンプル(SketchBook > librarys > arduino > examples > arduino_output)を試したところ、ちゃんと動きました。
 かなり悩んだ結果、ようやく分かったのは、Processingのメッセージでusb serialを探している(?)表示がありますが、この名前とopenFrameworksのfirmataExampleのtestApp.cppで呼び出している名前が違っていました。Processingで表示されている名前に書き換えたところ、ちゃんと動くようになりました。

Processingのarduino_output、実行時のメッセージ
 [0] "/dev/tty.usbserial-A7005OBP"

openFrameworks > firmatExample > testApp.cpp
 ard.connect("/dev/ttyUSB0", 57600);
 ↓
 ard.connect("/dev/tty.usbserial-A7005OBP", 57600);




こんな感じで、ようやくopenFrameworksでArduinoをコントロールできるようになったので、次回はLEDで音量を表示するメーターを作ってみます。

Comments