【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は次のようになっています。
16行のturnOnLED()という関数は基板上のLEDを点灯し、20行目もturnOffLED()は消灯します。それぞれマウスのボタンが押された、離されたときに呼ばれる関数に入っていますので,マウス・ボタンを押している時間だけLEDが点灯します。
【Gingerでナイトライダー】
Pepperに比べてGingerのメリットは、なんと言ってもたくさんの入出力が使えることです。
そこで、LEDをたくさん使う事例として、「ナイトライダー」を紹介します(ナイトライダー由来については、省略)。
LEDを8個横一列に並べて、端から順番に一個ずつ点灯していきます。端まで点灯が終われば、逆方向に点灯していきます。
回路図を示します。制限抵抗とLEDを並べただけの回路ですが、Gingerの向かって左側のA-INとD-INを使っています。MODE_6を使う場合にはこちら側が下位のビットになります。

実装方法として、LED小基板を紹介します。5×4の大きさに切り出した片面のユニバーサル基板に、チップ部品を使って、LEDと抵抗器を各4個実装します。基板の端には、5ピンのピン・ヘッダを付けておけばブレッドボードにそのまま差し込んで利用できます。このような部品を作っておくと実験が楽に行えます。
今回はLEDが4個載った基板を2枚使いました。
チップ部品でなくても、LEDの足に抵抗をはんだ付けしたものでも問題ありません。取り扱いが多少面倒になりますが、ショートしないように注意すれば十分実用になります。
次にプログラムを示します。
モード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のときと同様にブレッドボードに実装して、実行してみてください。

連載の最初に少し触れましたが、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が点灯します。
Pepperに比べてGingerのメリットは、なんと言ってもたくさんの入出力が使えることです。
そこで、LEDをたくさん使う事例として、「ナイトライダー」を紹介します(ナイトライダー由来については、省略)。
LEDを8個横一列に並べて、端から順番に一個ずつ点灯していきます。端まで点灯が終われば、逆方向に点灯していきます。
回路図を示します。制限抵抗とLEDを並べただけの回路ですが、Gingerの向かって左側のA-INとD-INを使っています。MODE_6を使う場合にはこちら側が下位のビットになります。
実装方法として、LED小基板を紹介します。5×4の大きさに切り出した片面のユニバーサル基板に、チップ部品を使って、LEDと抵抗器を各4個実装します。基板の端には、5ピンのピン・ヘッダを付けておけばブレッドボードにそのまま差し込んで利用できます。このような部品を作っておくと実験が楽に行えます。
今回はLEDが4個載った基板を2枚使いました。
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のときと同様にブレッドボードに実装して、実行してみてください。
桑田喜隆
編集からのお知らせ:今回で連載はもうすぐ終わりますが、加筆した形で書籍化を計画しています。説明を加えてほしいとか、ご要望がありましたら、お寄せください。よろしくお願いいたします。


コメントする