FunnelつかえばGainerをrubyから扱えるそうなので試してみた。
今回はActionScriptでなくrubyからやってみる。
ちなみにFunnelについては
http://funnel.cc/
今回は、加速度センサーの値をrubyから取得してみる。
上の写真に写ってるやつが加速度センサー
まずは
http://code.google.com/p/funnel/downloads/list
からFunnelをダウンロード。
今回は build 006 でやりました。
リストの中に「wcan_mini_vol5_workshop.zip」というのがあるけど、これは前回のWCAN mini でつかったサンプルが入ってます。
次にFunnelをrubyで扱うにはOCSのライブラリが必要なので、そちらをインストール。
ちなみに、OCSとは「Open Sound Control」の略で、ソフトウェアとハードウェアの通信規格だそうです。Soundとなってますが、音以外のデータでもおkみたいです。
RAA - osc
http://raa.ruby-lang.org/project/osc/
上記サイトからtar.gzをダウンロードしてきて解凍後
$ ruby install.rb config
$ ruby install.rb setup
$ ruby install.rb install
でインストールできます。
次にGainerに加速度センサーを取り付けます。
配線は
YAPAN.org: WCAN mini ActionScript Vol.5
http://www.yapan.org/main/2008/03/wcan-mini-actio.html
のスライド107ページ目を参考にしてます。
配線ができたら、USBケーブルをさして、Funnelサーバーを起動します。
rubyのスクリプトはダウンロードしてきたfunnel_006のlibrariesのrubyのexamplesにある「gainer.rb」を参考に以下のようにしてみました。
require 'funnel'
module Funnel
gio = Gainer.new(Gainer::MODE1)
gio.ain(0).on PortEvent::CHANGE do |event|
puts "ain 0: #{event.target.last_value} > #{event.target.value}"
end
gio.ain(1).on PortEvent::CHANGE do |event|
puts "ain 1: #{event.target.last_value} > #{event.target.value}"
end
gio.ain(2).on PortEvent::CHANGE do |event|
puts "ain 2: #{event.target.last_value} > #{event.target.value}"
end
sleep()
end
アナログインプットの値をそれぞれ取得してます。
値が変化したらイベントが発生するって解釈でいいのかな?
sleepでとめてるんだけど、こんなやり方でええんだろうか?
これをFunnelサーバー起動した状態で実行すると。
ruby mortion01.rb
こんな感じの出力になります。
ain 0: 0.521568655967712 > 0.494117647409439
ain 1: 0.494117647409439 > 0.486274510622025
ain 2: 0.678431391716003 > 0.764705896377563
続く・・・・
なんかたまに
command port: localhost, 64178
notification port: localhost, 64179
notification port: EOF error
というのが表示されるけどなんだろ。
とりあえずrubyからfunnelでGainerにつけた加速度センサーの値をゲットできました。
なんかつくってみよー