[AVR][Gainer]小型Gainer互換機pepperを作って遊んでみた
AVR ATtiny45/85を使ったGainer互換機、pepperを作って遊んでみた。
morecat lab.さんでは、このほかATmega88Pを使ったginger、ATmega644Pを使ったsugarなどのGainer互換機を作られているが、その小ささに惚れ、Pepper-MIDIというインターフェースを接続すると学研の付録シンセ、SX-150をMIDI化できるということもあって、pepperを選択した。
とりあえず部品のレイアウトは公式のプリント基板と同じにして、ジャンパを飛ばしまくってつじつまを合わせてみた。
▲所定のサイズの基板で作らないと価値半減なので、ユニバーサル基板からの切り出しをがんばった。
▲手のひらでコロコロともてあそべるサイズ。
▲USBに直結可能。通常この手のものに必要な、12MHzのクリスタルさえ省略した作りになっている。
▲CdSを接続してみた。pepperが小さいので、USBケーブルの先に、センサなどを直結できる感覚。
▲学研の付録シンセ、SX-150を接続するインターフェース、Pepper-MIDI。
▲Pepper-MIDIを介してSX-150を接続。
Processingからのアクセス(Mac OS X)
pepperはGainerとして機能するので、pepperをProcessingで使うには、Gainer用のライブラリをProcessingにインストールすればいい。 Gainerの公式ページには、Mac OS Xでは「/Applications/Processing/libraries/serial/macosx_setup.command」を実行しろ、という説明があるが、これは古い手順で、そのようなファイルは無い。
現在は、「/Applications/Processing/Contents/Resources/Java/Libraries/serial/library/RXTXcomm.jar」を、「/Applications/Processing/Contents/Resources/Java/Libraries/gainer/library/RXTXcomm.jar」へコピー、というのが正しい手順となる。
pepperのピン配列は以下の通り。
+5V ai0 ao1 ao0 ai1 GND
アナログ入力二つがアナログ出力二つを囲むような形になっている。 また、Processingからpepperの各ポートへのアクセスは、以下のようなコードでできる。
//出力 //2番目の引数は0〜255の整数 //ao0 gainer.analogOutput(0, 0); //ao1 gainer.analogOutput(1, 255); //入力 int res0, res1; gainer.peekAnalogInput(); //ai0 res0 = gainer.analogInput[0]; //ai1 res1 = gainer.analogInput[1];
※「gainer.peekAnalogInput()」を実行しないと、値が取得できないので注意。
デフォルトのCONFIGURATION_1にはデジタルI/Oが無いので、四つあるポートはすべてアナログ系の関数でアクセスする。








Comments
素敵なレポートとデモありがとうございます。
無事動いている姿を見て、感動しています。
ところで、pepper-MIDIの制御プログラムは何をお使いでしょうか?もしかして、Gainerのプログラムをそのまま使っていますか?ファームを書き換えるとMIDI経由で制御できるので、MIDIシーケンサからコントロールすると面白いですよ。
Posted by: もあ | 2008.11.17 at 10:27 PM
もあさんコメントありがとうございます。
親指大のGainer互換デバイスって、とてもユニークですね。
思わずいろいろな角度から眺めてしまいます。
素敵なものを作っていただいて、こちらこそありがとうございます。
エレキジャックの連載中の記載によると、メカロボショップでpepperの組み立てキットも発売されるようですね。
それを知っていれば、そっちを選んだかもしれません(笑)。
pepper-MIDIの件はもちろん承知していますが、今GarageBandという外部MIDI機器を操作できないソフトウェアしか入っていないもので、まだ試していません。
Gainer互換のFirmwareの方を入れたまま試してみたら、結構面白かったのでそれを掲載した次第です。
ちなみに、回路図のPIN名称が間違っていませんか?
本来……
1: PB5
2: PB3
3: PB4
という並びのところ、
1: PB5
2: PB4
3: PB3
と記載されています。エレキジャックの連載にある写真のプリントパターンを凝視し、どちらが本当か確認した次第です。
http://web.mac.com/kuwatay/morecat_lab./Download_files/pepper-schematic.png
ちょっとトラブルっぽいことに遭遇しているので、報告致します。
デフォルトのCONFIGURATION_1時のanalogOutput0の挙動が少しし変で、analogOutput0を0にしても、接続したLEDが消灯せず、少し光り続けるのです。(以下写真参照: 写真右端がanalogOutput0、その左隣がanalogOutput1。analogOutput1の方は消灯状態)
http://moyashi.air-nifty.com/pepper-trouble1.jpg
http://moyashi.air-nifty.com/pepper-trouble2.jpg
↓写真の状態を撮影したときに実行したコード
import processing.gainer.*;
Gainer gainer;
void setup(){
gainer = new Gainer(this);
size(250, 300);
}
void draw(){
gainer.analogOutput(0, 0);
gainer.analogOutput(1, 0);
}
Processingは0156 BETA を使っています。
テスターで短絡などが無いこと、また回路図通り配線されていること、analogOutput0とanalogOutput1とが、電気的に等しいこと(VCCとの間1.4kΩ、GNDとの間1.2kΩ)を確認しています。
また、USBに接続直後はanalogOutput0、analogOutput1、共に薄くLEDが光った状態で、Processingやgainer-rubyでインスタンスを生成後に、analogOutput0のみ写真の状態になることから、ソフトウェア的な問題ではないかと思っています。一度この状態になってから、再度Processingやrubyでgainerのインスタンスを生成してpepperの初期化処理をさせると、一度LEDが消灯して、初期化処理後にまたこの状態になります。
心当たりはございますでしょうか?
gainer.jar、RXTXcomm.jarは、以下のものと差し替えています。
http://gainer.svn.sourceforge.net/viewvc/gainer/trunk/gainer/libraries/processing/libraries/gainer/library/
ginger / pepper向けのGainer.javaへのパッチが出ていますが、scmリポジトリにも10月4日のタイムスタンプのソースを見つけられなかったので適用していません。10月1日のものに手動でパッチを当てたのですが、結局コンパイルの方法が分からなかったので未遂です。
http://gainer.cc/forum/index.php?topic=293.0
gainer-rubyでも同様の症状が出るので、ライブラリの方ではないのかなと思っていますが。
Posted by: moyashi | 2008.11.18 at 04:30 AM
コメントありがとうございます。
・Garage BandでMIDIをコントロールするには、midiOというソフトをインストールしてください。実はわたしもGarageBandしか持っていません。
(参考 http://www.garagers.net/tips.php?story=15)
・回路図の誤りの指摘ありがとうございます。回路図と基板パタンの作成にEagleを使っているのですが、そのライブラリが誤っているようですね。次の機会に修正します。
・アナログポートの件はこちらで確認してみます。rubyのライブラリでも同じ症状だとすると、pepperのファームウエアのバグの可能性が高いのではないかと思います。
・ライブラリですが、ginger用にパッチを当てたバージョンを、当面メインラインと別にリリースする予定です。私の使ってものをそのままリリースしても良いのですが、Windowsでのテストがまだですので、少々お待ち下さい。
Posted by: もあ | 2008.11.18 at 06:52 AM