「Gainer」を購入したはいいが、前回はProcessingでHello,worldを表示しただけで、肝心のGainerはまだ登場していない。動作テストとして、本体と一緒に買ってきた赤外線センサの値を取得 / 表示してみる。

●ドライバ類の準備

今回買ってきたのは「Gainer mini」。秋葉原のアールティで購入してきた。ドライバやライブラリはmini専用のものなので注意しよう。

ダウンロードページから「USBドライバ for windows」と「ソフトウェアライブラリ」をダウンロードして解凍する。インストール方法の詳細なチュートリアル(ドライバ / Processingライブラリ)があるので、手順どおり行えば問題はないだろう。

インストールが完了したら最低でもexamples/Gainermini/buttonぐらいは動作確認しておこう。

●Gainerにセンサを接続

Gainerと一緒に購入してきたセンサはSHARP製GP2D12というもの。「+Gainer」 p.100からのサンプルと同じものである。リード線つきのコネクタが同梱されているので、先端の被覆を5mmほどはがし、より線をねじっておく。何度も抜き差しするようであればハンダメッキぐらいはしておこう。抵抗の足などをハンダづけして接合部分に熱収縮チューブでかぶせるとちょっとプロっぽい。

090113_0020{.mb}


リード線は赤が+5V、黒がGND、白が出力となっている。ブレッドボードに差し込んだGainerに、間違えないよう接続していく。

●センサの値を取得

前回のHelloWorldを修正して、赤外線センサの値を取得 / 表示するようにしてみる。いきなりソースコード。

import processing.gainer.* ;

Gainer gainer ;
PFont myFont ;
MovingAverageFilter maFilter ;

void setup()
{
    size(400, 240) ;
    myFont = loadFont("Eureka-90.vlw") ;
    textFont(myFont, 32) ;

    // gainerオブジェクトの準備
    gainer = new Gainer(this) ;
    // 移動平均フィルタ
    maFilter = new MovingAverageFilter(16) ;
}

void draw()
{
    // gainerのアナログ入力を取得
    gainer.peekAnalogInput() ;
    // 現在の生データ
    int rawData = gainer.analogInput[] ;
    // フィルタ後のデータ
    int aveData = maFilter.processSample(rawData) ;

    // 背面を塗りつぶす
    background(120) ;

    // Hello,worldの表示
    fill(255) ;                 // フォントの色指定
    text("Hello, world", 24, 32) ;

    // 入力データの表示
    text("input:", 24, 72) ;
    // 生データ
    fill(  ,   , 255) ;
    text("raw: " + rawData, 48, 110) ;
    rect(48, 120, rawData, 24) ;
    // フィルタ後のデータ
    fill(255,   ,   ) ;
    text("ave: " + aveData, 48, 170) ;
    rect(48, 180, aveData, 24) ;
}

しれっと使っているMovingAverageFilterクラスは、+Gainer p.104の移動平均フィルタクラス。入力値に対して単純移動平均(直近のn個のデータの重み付けのない単純な平均 via Wikipedia)を返す。

drawメソッドの後半はひたすら色指定 -> テキストや矩形の描画を繰り返している。

値が増減していれば無事動作確認完了である。つい嬉しくて動画を載せてみた。移動平均フィルタを通した値は滑らかに増減しているのが…この動画じゃちょっとわからないか。