Processingでパソコンと連動

[ホーム]

Processingとは

Processingとは、MITのメディアラボで、電子アートとビジュアルデザインで 使うためのプログラミング原語であり、統合開発環境です。 視覚的なグラフィックスが簡単に使えるため、初心者がプログラミングを 学習するのに適しています。 基本は Java であり、簡単な命令で使えるように統合環境が作られたものです。

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

最近の組込み系では、パソコンと連携させたフィジカルコンピューティング という言葉を聞く機会が増えてきました。 これは、教育プログラムの一環として、エレクトロニクスを使って デザインやアーティストのための新しい素材を生み出そうという考えで、 センサーから読み取った情報を元に、人間とのインタラクティブな ソフトウェアをつくろうとする試みです。

フィジカルコンピューティングでは、身の回りの物理現象の情報を読み出すための コンピュータとして Arduino などのコントローラは注目されています。 他に有名な物として、GainerFunnelWiringなどが有名です。 Gainer などはパソコンと接続が原則なのに対して、 Arduino は、スタンドアロンでも使える点では汎用性があります。

Firmata は、Arduino でフィジカルコンピューティングするために よく使われています。


FirmataをArduinoに書き込む

Firmata とは、Processing と Arduino をシリアル通信で接続し、 Processing からの命令に応じて入出力を行います。 このため、あらかじめ Firmata を Processing に書き込んでおく必要があります。

Arduino 開発環境を起動し、 [開く]-[Firmata]-[StandardFirmata] を選んでください。 次に、今までの Arduino のプログラム書き込みと同じように [検証]-[マイコンボードに書き込む] にて、Firmata を Arduino に書き込んでください。

Firmata を使うのであれば、最初にこの書き込みさえすれば、 あとはパソコンのプログラムを変更するだけで、Arduino のポートを プログラムで簡単に操作できます。

ProcessingからArduinoを触る

以下のプログラムでは、Processingの画面で、マウスを押すたびに、 LEDが点いたり消えたりします。

プログラムを見ると、setup() などは、Arduino と同じような使い方です。 常に実行される loop() なども、同じように使えます。 一方、グラフィックスの言語なので、画面を描画するために、 draw() という関数が用意されており、描画処理はこの中に記載します。

Java はオブジェクト指向のプログラム言語なので、 Arduino を使う場合は、クラス名"Arduino"のオブジェクトを作り、 そのオブジェクトに対して、digitalWrite()などの関数を適用します。

  Arduino arduino ;
  int     led = 13 ;

  void setup() {
     arduino = new Arduino( ...略... ) ;
     arduino.pinMode( led , Arduino.OUTPUT ) ;
  }
  void loop() {
     arduino.digitalWrite( led , Arduino.HIGH ) ;
     delay( 1000 ) ;
     arduino.digitalWrite( led , Arduino.LOW ) ;
     delay( 1000 ) ;
  }

Processingのサンプルプログラム

// ProcessingでArduinoを使うためのライブラリの読み込み
import processing.serial.* ;
import cc.arduino.* ;

// arduinoを使うためのオブジェクト
Arduino arduino ;

// D13 を LED 点滅に使う。
int led = 13 ;
boolean value = false ;

// Processingの初期化関数
void setup() {
   // グラフィック画面の大きさ
   size( 200 , 200 ) ;
   // 複数のシリアルポートがある場合、先頭の1つを使う
   //   ProcessingとArduinoの通信は 57600bps
   println( Arduino.list() ) ;
   arduino = new Arduino( this , Arduino.list()[0] , 57600 ) ;
   // D13 は出力用
   arduino.pinMode( led , Arduino.OUTPUT ) ; 
}

// 画面への描画処理(画面の更新が必要な時に自動的に呼ばれる)
void draw() {
   if ( value ) {    // value の値に応じて
      background( 0 ) ;   // 背景を黒
   } else {
      background( 255 ) ; // 背景を白
   }
}

// 画面の中でマウスボタンが押された時に呼ばれる関数
void mousePressed() {
   // ボタンが押される度に反転し、LEDに出力
   value = !value ;
   arduino.digitalWrite( led , value ? 1 : 0 ) ;
   // 画面の更新(必要に応じてdraw()などの関数を呼び出し)
   redraw() ;
}