[ホーム]
Processingとは、MITのメディアラボで、電子アートとビジュアルデザインで 使うためのプログラミング原語であり、統合開発環境です。 視覚的なグラフィックスが簡単に使えるため、初心者がプログラミングを 学習するのに適しています。 基本は Java であり、簡単な命令で使えるように統合環境が作られたものです。
最近の組込み系では、パソコンと連携させたフィジカルコンピューティング という言葉を聞く機会が増えてきました。 これは、教育プログラムの一環として、エレクトロニクスを使って デザインやアーティストのための新しい素材を生み出そうという考えで、 センサーから読み取った情報を元に、人間とのインタラクティブな ソフトウェアをつくろうとする試みです。
フィジカルコンピューティングでは、身の回りの物理現象の情報を読み出すための コンピュータとして Arduino などのコントローラは注目されています。 他に有名な物として、Gainerや Funnelや Wiringなどが有名です。 Gainer などはパソコンと接続が原則なのに対して、 Arduino は、スタンドアロンでも使える点では汎用性があります。
Firmata は、Arduino でフィジカルコンピューティングするために よく使われています。
Firmata とは、Processing と Arduino をシリアル通信で接続し、 Processing からの命令に応じて入出力を行います。 このため、あらかじめ Firmata を Processing に書き込んでおく必要があります。
Arduino 開発環境を起動し、 [開く]-[Firmata]-[StandardFirmata] を選んでください。 次に、今までの Arduino のプログラム書き込みと同じように [検証]-[マイコンボードに書き込む] にて、Firmata を Arduino に書き込んでください。
Firmata を使うのであれば、最初にこの書き込みさえすれば、 あとはパソコンのプログラムを変更するだけで、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で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() ;
}