Gainer楽しいかも

Gainerが到着したので早速いじってみた。ちなみに電子工作は初めて。配線とか色とかわかってませんが。とりあえずチュートリアルの通りに挿す。

1204453679 おっと、LEDが点灯してますよー!

1204453696 しかもUSBの電力で。

ProductName +GAINER―PHYSICAL COMPUTING WITH GAINER
GainerBook Labo,くるくる研究室
九天社 / ¥ 3,780 ()


Gainerの本も面白いですよ。FlashからLEDを点滅させるっていうサンプルとかはすぐ試せてよかった。

で、週末はこれをPythonから制御する技を伝授されてくるわけです。

processing + jythonでGainerを制御する

processing使ってGainerにアクセスするjythonスクリプト。gainer.jarだけではなく、serialフォルダのRXTXcomm.jarにもclasspathを通しておく。

ボタンを押すと白黒するサンプルを書いてみた。

コード

from javax.swing import JFrame
from processing.core import PApplet
from processing.gainer import *

class Sketch(PApplet):
    def __init__(self):
        pass

    def setup(self):
        self.size(200, 200)
        self.gainer = Gainer(self,'COM8')

    def getField(self, name):
        return self.class.superclass.getDeclaredField(name).get(self)

    def draw(self):
        self.background(0)
        if(self.gainer.buttonPressed):
            self.background(255)

def run(applet):
    frame = JFrame(title="Processing",
                   resizable = 1,
                   defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
    frame.contentPane.add(applet)
    applet.init()
    frame.pack()
    frame.visible = 1

if __name__ == '__main__':
    run(Sketch())

Identipong

IPアドレスに応じて色を変えられるのであれば、アクセスログをLEDで光らせればいいんではなかろうか?と思ったので。

参考

Gainerのほうは秋月で買ったカソードのフルカラーLEDを刺した。抵抗は全て330Ω(それしかなかった)でピンポン球はダイソーかどっかで買った6個入り100円のヤツを錐とドライバーでぐりぐりした。

1223800515

という単純な配線。

アクセスログは自宅サーバーに直接アクセスしてIPアドレスを返すようなCGIを用意した。 今回初めてPyGainerを使ってみた。

import sha,struct,urllib2,time,sys
from time import sleep
from PyGainer import PyGainer
#from random import randint

p = '/dev/cu.usbserial-A2002mCa'
g = PyGainer()
config = { 'baudrate' : 38400, 'timeout' : 5 }

#def rand_rgb():
#    return(randint(0,255),randint(0,255),randint(0,255))

def get_rgb():
    ip = urllib2.urlopen('http://myserver/taillog.cgi').read()

    print ''.join(ip.split('.'))

    s = sha.new(ip).digest()
    code = struct.unpack('5L',s)[0]

    blue  = int((code >> 6) & 0x0ff)
    green = int((code >> 15) & 0x0ff)
    red   = int((code >> 24) & 0x0ff)

    return (blue,green,red)

if g.open(p, config) == 0:
    if g.reset() == True:
        print "RESET"
    else:
        print "ERROR"

    sleep(0.1)
    g.version()
    g.configuration(1)

    sleep(0.1)

    for i in range(100):
        (blue,green,red) = get_rgb()
        g.set_specified_analog_output_port(0, green)     # G
        g.set_specified_analog_output_port(1, blue )     # B
        g.set_specified_analog_output_port(3, red  )     # R
        sleep(3)

    g.set_specified_analog_output_port(0,0)
    g.set_specified_analog_output_port(1,0)
    g.set_specified_analog_output_port(3,0)

    g.close()

動かした。うしろでカチャカチャうるさいのは犬が晩ご飯を催促している音。

Identiconでいうところのパターンのようなものの表現は点滅で実装しようかと思ったが、それって分かりにくいよなと。もう少し面白そうなデバイスはなかろうか。

Chuckで遊んでみた

朝からChucKで遊ぶ。

編集した結果をリアル気味に反映させたくなったのでperlで書いた(loop.pl)。

use Path::Class;

my $file = $ARGV[0] || die "filename not found";

my $t = file($file)->stat->mtime;

system "chuck", "+", $file;

while(1){
  sleep 1;
  unless ($t == file($file)->stat->mtime) {
    system "chuck", "=", "1", $file;
    $t = file($file)->stat->mtime;
  }
}

あとはChuckのサンプル(test.pl)

SinOsc s => JCRev r => dac;

.5 => s.gain;
.2 => r.mix;

[ 1, 3, 5, 7 ] @=> int note[];

while( true )
{
    Std.mtof(Std.rand2(1,3)*12 + 48 + note[Std.rand2(0,note.cap()-1)] ) => s.freq;
    140::ms => now;
}

これで、chuckのほうをサバクラにするために

chuck --loop

で動かしておいて、別の端末から

perl loop.pl test.ck

これで、test.ckをエディタで編集して保存すると反映される。

Arduinoとかで制御すればもっと面白くなりそう。CdSセンサとかで変化するようなのをつくってみてもいいし、ChucKをネットワーク越しに制御できるので音サーバーというのも面白いかもしれませんな。

ProductName Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン / ¥ 3,990 ()
在庫あり。

Arduino PIC AVR

当方、電子工作歴0年くらいですが、Gainer,Arduinoには興味があるので、図書館でPICの本を借りてきて読んでみたりとかしてます。

ProductName わかるPICマイコン製作集―16F84プログラミングの世界へ
遠藤 敏夫
誠文堂新光社 / ¥ 2,100 ()
在庫あり。

で、検索エンジンなどもかましつついろいろ見てたら、いますぐPICをやめてAVRに移行すべき10の理由というエントリを見つけた。

たしか、ArduinoってAVRマイコンが乗ってたよなぁ。だからArduinoでいろいろやってみてさらに掘っていきたくなったらAVRマイコンそのものをいじれば良いのかなぁと。

とか思ったら、ArduinoとかGainerってLLみたいなものなのかと思った。LLを通って低レベルに向かうみたいな感じで進めばよいのかなと。そして、Arduino用のCPANなみたいなものができても良かろうと。仮にそういうものがあったらコードだけじゃなくて部品の販売サイトへのリンクとかがセットになったものなんだろうなぁと。物理的なものへの参照も含めてコミュニティベースで成長していくモデルってのは面白いかも。

ProductName パソコンを隠せ、アナログ発想でいこう!―複雑さに別れを告げ、“情報アプライアンス”へ
ドナルド・A. ノーマン,安村 通晃,岡本 明,伊賀 聡一郎,Donald A. Norman
新曜社 / ¥ 3,465 ()
在庫あり。

Gainerでピンポン玉ディフューザー

とりあえずprocessingでいじる。マウスの位置に応じて色が変化するように。

コードは単純なので色もあんまり出なかった。

import processing.gainer.*;

Gainer gainer;
void setup(){
  gainer = new Gainer(this);
}

void draw(){
  background(0);
}

void mouseMoved(){

  float rx = (float)mouseX / width;
  float ry = (float)mouseY / height;
  int v0 = int(255*ry);
  int v1 = int(255*rx);

  gainer.analogOutput(0, v0);
  gainer.analogOutput(1, max(v1-v0,0));
  gainer.analogOutput(3, max(v0-v1,0));
}

参考

秋月電子に行ってきた

超久しぶり。

1223294418

赤外線LEDとフルカラーLEDを購入。

ほらーWiimote Whiteboardとかやりたいもんね。

いまさらだけど。

MASHUP++注文した

出版元があやしいらしいので。

ProductName MASHUP++
さうなまん
九天社 / ¥ 3,360 ()
通常24時間以内に発送

あとR関連の書籍も結構失われてしまうのだろうか?

YAPC::Asia 2008 一日目

ラリーウォールのトークにちょっと遅れた。 午前中は講堂。午後はArcheType Roomにいた。

  • perl5.10使おうと思った。
  • Atomとかそっちの話は面白い。
  • String::TTいいかも
  • Gainerでperlを使う場合はoutにGainerもってく場合がよい
  • Gainer over HTTPは楽しそう。
  • Danさんのcontext oriented languageはなるほどと思った。

したはメモ(内容はいい加減がところがあるかも)。あと、いつものようにmarkdownでメモを取っておけばよかった。

2008-05-15  kzfm  <kerolinq@gmail.com>

* YAPC2008: LT
- jrockway
String::TT
strip

- wakapon
すべてperlで
perlapi,XSUB
最終兵器

- cho45
Text::MicroMason
埋め込みのテンプレートエンジン

- clkao
prototype::signature

* YAPC2008: Yusuke Kawasaki
Gainerの話
DOM manipulation
三連星

wiimote over HTTP

wiimote in
Gainer  out

* YAPC2008: Kazutake Hiramatsu
Parrot compiler Tools
PCT
RkudoはPCTを使って実装
PCTを使えばParrotで動く俺言語を作れる

Register based VM
Register (In, Nn, Sn, Pn)
PIR
PASM

#30日OS入門をやる

I0 // Integer #0
PIRはPASMの構文糖衣

PGE,PAST,POST,NQP

svn co
cd parrot
perl Configure.pl
make
make test

perl tools/dev/mk_language_shell

NQP は Perl6を書くために必要なちっちゃいPerl6のようなもの
四則演算と括弧ができるやつはyaccを使うよりも短く出来る。

#parrotでschemeってのがあるのであとでみる

* YAPC2008: Takeru Inoue
Practical AtomPub Servers

AtomPub RFC5023
mixi station API

Collections and Members
Entry and Meta Resouces

強い権限
作ろうとするサービスがRESTに適しているか
データモデル

#AtomPubとS3の対比が分かりやすい。

methodのoverrideでuriを変えられる。

* YAPC2008; No REST for the Wicked
DTRT
X-Your-Header
Pretty URI not equal REST
pretty for computer not for you

Catalyst::Action::REST
Catalyst::Controller::REST::DBIC::Item
Use Case
example: soccer game 

my $data = $c->req->data;とかやれる
Catalyst::Controller::REST::DBIC::Itemを使うと
CUIで簡単に制御できる。

##コレクションのまとまり->controller
##Action->Chainedにすることでcontrollerと似たことが出来る。

* YAPC2008: dan kogai
perl as a second language
autobox
組み込みでないことを利点にするならば。
オブジェクト=自分が何をするか知っているデータ。
構文糖衣
context oriented language
printはリストコンテキスト

B::Deparseで空気を読む
DWIM = Do What I Mean

* YAPC2008: tokuhirom
5.10
Switch
~~
regexp: named captures
perl -E

かかかかかかーめー(死亡)

家にサウンドロップが幾つかあったので、Gainerから鳴らしてみるという。事前の調査で要は3Vにすればいいんでしょ?と軽い気持ちでチャレンジ。

今回分解されたのはこのカメハメ波。

1206255937

カバーをはずすと基盤。

1206255926

上の方にある基盤のショートをさせる位置で鳴る音が変わるらしい。これをGainerと対応付けてキーボードかなんかで制御してやるのがゴール。 が、ハンダとか工具がないので、とりあえずは、USBの電源から音が鳴るようにすればいい。Gainerの出力が5Vだから、200kの抵抗を間にかませばいいと思うんだけど丁度いいのがないから320kの抵抗かましてつないだら音がなったけどなんか変。

か か か かめ かめ

とか断続的に音は鳴るんだけど、、、

とかいいながらいじってたらそのうち音が鳴らなくなってしまった。

いろいろ調べたらコンデンサをかますらしいんだけど、よくわかりませぬ。ブックオフか図書館でもいって電子工作関係の本を漁る必要があるな。

あと、みのむしクリップとかもないと配線できなくて困るなぁ