第10回 落ち穂拾い その2
-- Gingerも使おう --

 落ち穂拾い その2として、連載中にあまり説明する機会のなかったGinerについて簡単にPepperとの違いを説明します。

ginger-00.jpg

【Ginerを使うメリット】

 連載の最初に少し触れましたが、Pepperと同じGainer互換デバイスとしてGingerとSugarがあります。
 どちらもGainerの互換デバイスですが、主な違いは使えるピンの数だけです。
 GingerはGainerの互換デバイスとして最初に設計したものです。できる限りGainerと同じ仕様にしてあります。一方で、Sugarは最大30本の入出力が取れるため、たくさんの入出力の必要な応用に適します。また小規模な例では、4本の入出力の取れるPepperで足りる場合が多いと思います。
Pepperでは足りないような事例では、Gingerの出番です。多くの用途ではGingerを使えば十分です。Gingerは万能のデバイスともいえます。
 もちろん、連載中に紹介した応用事例は、Gingerを使ってもそのまま動作されることができます。

【GingerでHello World】

 GingerはオリジナルのGainerと同様に、試験用のボタンとLEDが基板上に実装されています。外付けの部品がなくてもLEDの点滅を行うことができます。
 また、ライブラリに専用のプログラムも用意されているので、プログラムも簡単です。Gainerライブラリに付属するExampleのLED.pdeは次のようになっています。

001 /*
002   operate LED on gainer.
003 */
004 import processing.gainer.*;
005
006 Gainer gainer;
007 void setup(){
008   gainer = new Gainer(this);
009 }
010
011 void draw(){
012   background(0);
013 }
014
015 void mousePressed(){
016   gainer.turnOnLED();
017 }
018
019 void mouseReleased(){
020   gainer.turnOffLED();
021 }

 16行のturnOnLED()という関数は基板上のLEDを点灯し、20行目もturnOffLED()は消灯します。それぞれマウスのボタンが押された、離されたときに呼ばれる関数に入っていますので,マウス・ボタンを押している時間だけLEDが点灯します。

ginger-00-1.jpg【Gingerでナイトライダー】
 Pepperに比べてGingerのメリットは、なんと言ってもたくさんの入出力が使えることです。
 そこで、LEDをたくさん使う事例として、「ナイトライダー」を紹介します(ナイトライダー由来については、省略)。
 LEDを8個横一列に並べて、端から順番に一個ずつ点灯していきます。端まで点灯が終われば、逆方向に点灯していきます。

 回路図を示します。制限抵抗とLEDを並べただけの回路ですが、Gingerの向かって左側のA-INとD-INを使っています。MODE_6を使う場合にはこちら側が下位のビットになります。

ginger-knight.png
 実装方法として、LED小基板を紹介します。5×4の大きさに切り出した片面のユニバーサル基板に、チップ部品を使って、LEDと抵抗器を各4個実装します。基板の端には、5ピンのピン・ヘッダを付けておけばブレッドボードにそのまま差し込んで利用できます。このような部品を作っておくと実験が楽に行えます。
 今回はLEDが4個載った基板を2枚使いました。

ginger-03.jpg チップ部品でなくても、LEDの足に抵抗をはんだ付けしたものでも問題ありません。取り扱いが多少面倒になりますが、ショートしないように注意すれば十分実用になります。

ginger-04.jpg 次にプログラムを示します。

001 /*
002   knight rider
003 */
004
005 import processing.gainer.*;
006
007 Gainer gainer;
008 int cnt = 1;
009 int out = 0;
010 int dir = 1;
011
012 void setup(){
013     size(200,200);
014     gainer = new Gainer(this,Gainer.MODE6);
015 }
016
017 void draw(){
018   if (--cnt == 0) {
019     cnt = 3;
020     if (out == 0) {
021       dir = 1;
022     }
023     if (out == 7) {
024       dir = -1;
025     }
026     out += dir;
027     gainer.digitalOutput( 1 << out);
028   }
029 }


 モード6を使っています。14行でGainerオブジェクトを生成するときに、2番目の引数でモード6を指定しています。

 18,19行では、draw関数の中でcntという変数で呼ばれた回数を数えて、点灯中のLEDの移動の速度を制御しています。19行で3を代入しているので、draw()が3回呼ばれると一度点灯を移動します(大きな値にすれば移送速度は下がる)。
 変数out点灯しているLEDのビットを示しています。また、変数dirは点灯位置の移動方向を示しています。LEDの点灯が右端に来た場合にはdirを1にして、増やす方向に(左に)、左端に来た場合にはdirを-1にして減らす方向に(右に)移動させます。実際には26.27行で、点灯位置を計算して、gainer.digitalOutput()という関数を使って、ポートに出力しています。

 Pepperのときと同様にブレッドボードに実装して、実行してみてください。

ginger-02.jpg
桑田喜隆

編集からのお知らせ:今回で連載はもうすぐ終わりますが、加筆した形で書籍化を計画しています。説明を加えてほしいとか、ご要望がありましたら、お寄せください。よろしくお願いいたします。


トラックバック(0)

このブログ記事を参照しているブログ一覧: Ginger/Pepper/Sugarでフィジカル・コンピューティング(20)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/2529

コメントする

カテゴリ

このブログ記事について

このページは、kuwataが2009年2月 5日 13:57に書いたブログ記事です。

ひとつ前のブログ記事は「連載(24)Arduinoで何でも制御 いろんなArduinoがある(6)」です。

次のブログ記事は「連載(1)縫って作るコンピュータ LilyPad Arduino 」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.