Gainerが到着したので早速いじってみた。ちなみに電子工作は初めて。配線とか色とかわかってませんが。とりあえずチュートリアルの通りに挿す。
おっと、LEDが点灯してますよー!
しかもUSBの電力で。
Gainerの本も面白いですよ。FlashからLEDを点滅させるっていうサンプルとかはすぐ試せてよかった。
で、週末はこれをPythonから制御する技を伝授されてくるわけです。
Gainerが到着したので早速いじってみた。ちなみに電子工作は初めて。配線とか色とかわかってませんが。とりあえずチュートリアルの通りに挿す。
おっと、LEDが点灯してますよー!
しかもUSBの電力で。
Gainerの本も面白いですよ。FlashからLEDを点滅させるっていうサンプルとかはすぐ試せてよかった。
で、週末はこれをPythonから制御する技を伝授されてくるわけです。
12012010 Python Gainer jython processing
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())
IPアドレスに応じて色を変えられるのであれば、アクセスログをLEDで光らせればいいんではなかろうか?と思ったので。
参考
Gainerのほうは秋月で買ったカソードのフルカラーLEDを刺した。抵抗は全て330Ω(それしかなかった)でピンポン球はダイソーかどっかで買った6個入り100円のヤツを錐とドライバーでぐりぐりした。
という単純な配線。
アクセスログは自宅サーバーに直接アクセスして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で遊ぶ。
編集した結果をリアル気味に反映させたくなったので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をネットワーク越しに制御できるので音サーバーというのも面白いかもしれませんな。
当方、電子工作歴0年くらいですが、Gainer,Arduinoには興味があるので、図書館でPICの本を借りてきて読んでみたりとかしてます。
で、検索エンジンなどもかましつついろいろ見てたら、いますぐPICをやめてAVRに移行すべき10の理由というエントリを見つけた。
たしか、ArduinoってAVRマイコンが乗ってたよなぁ。だからArduinoでいろいろやってみてさらに掘っていきたくなったらAVRマイコンそのものをいじれば良いのかなぁと。
とか思ったら、ArduinoとかGainerってLLみたいなものなのかと思った。LLを通って低レベルに向かうみたいな感じで進めばよいのかなと。そして、Arduino用のCPANなみたいなものができても良かろうと。仮にそういうものがあったらコードだけじゃなくて部品の販売サイトへのリンクとかがセットになったものなんだろうなぁと。物理的なものへの参照も含めてコミュニティベースで成長していくモデルってのは面白いかも。
07102008 電子工作 Gainer processing
とりあえず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));
}
参考
超久しぶり。
赤外線LEDとフルカラーLEDを購入。
ほらーWiimote Whiteboardとかやりたいもんね。
いまさらだけど。
10062008 Gainer
15052008 perl Gainer yapcasia2008
ラリーウォールのトークにちょっと遅れた。 午前中は講堂。午後はArcheType Roomにいた。
したはメモ(内容はいい加減がところがあるかも)。あと、いつものように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にすればいいんでしょ?と軽い気持ちでチャレンジ。
今回分解されたのはこのカメハメ波。
カバーをはずすと基盤。
上の方にある基盤のショートをさせる位置で鳴る音が変わるらしい。これをGainerと対応付けてキーボードかなんかで制御してやるのがゴール。 が、ハンダとか工具がないので、とりあえずは、USBの電源から音が鳴るようにすればいい。Gainerの出力が5Vだから、200kの抵抗を間にかませばいいと思うんだけど丁度いいのがないから320kの抵抗かましてつないだら音がなったけどなんか変。
か か か かめ かめ
とか断続的に音は鳴るんだけど、、、
とかいいながらいじってたらそのうち音が鳴らなくなってしまった。
いろいろ調べたらコンデンサをかますらしいんだけど、よくわかりませぬ。ブックオフか図書館でもいって電子工作関係の本を漁る必要があるな。
あと、みのむしクリップとかもないと配線できなくて困るなぁ