blog.migiue.jp

GAINERと加速度センサとFunnelでKeynoteのスライドをめくる

1000speakers:7@仙台#1ではコミュニティー枠で東北のコミュニティーの紹介を話したんですが、それだけでは技術的な話がないので、GAINER加速度センサFunnelとRubyで、Keynote.appのスライドをめくるというのをデモしました。

GAINERのボタンを押すときに、加速度センサが載っているブレッドボードを

  • 向こうに傾けると:スライドがスタート
  • 手前に傾けると :スライドがストップ
  • 右に傾けると  :スライドが次へ
  • 左に傾けると  :スライドが戻る

という仕組みです。

Gainerと加速度センサーをブレッドボードを使って組みました。加速度センサーの説明書や「+GAINER」のP.110を参考にしました。

Gainer

もっと長さのちょうど良いジャンプワイヤーを使えば、見栄の良い回路を組むこともできます。もちろんブレッドボードが無ければ、直接半田付けをすれば良いのですが、次回の使い回しが大変になりますね。

Gainer

加速度センサーのアップ写真。このセンサーがX軸Y軸Z軸の加速度を出力してくれます。かわいいですね♪

そしてFunnel Serverを立ち上げて、Gainerを認識していることを確認します。

Keynoteでプレゼンしたいスライドを開いておいて、以下のプログラムをターミナル等から実行すると動作すると思います。

#!/usr/bin/ruby

$LOAD_PATH.push('lib')
require 'funnel'
include Funnel

gio = Gainer.new
gio.button.on RISING_EDGE do
  ain0 = gio.ain(0).value
  ain1 = gio.ain(1).value  
  if ain1 > 0.7
    slide('show next')
  elsif ain1 < 0.3
    slide('show previous')
  elsif ain0 < 0.3
    slide('start')
  elsif ain0 > 0.7
    slide('stop slideshow')
  end
end

def slide(appscript)
    <<-`EOC`
    osascript -e '
    tell application "Keynote"
        #{appscript}
    end tell'
    EOC
end
sleep(60*15)

まず、FunnelのRuby用ライブラリを読み込みます。今回はプログラムファイルと同階層にlibフォルダを作って置きました。

次にGAINERの基板に付いているボタンが押された事(RISING_EDGE)をトリガーにして、アナログ入力の値を読み込みます。Funnelを使うことによって、すごく簡単に書くことができます。

今回使ったのは3軸加速度センサなのでX軸Y軸Z軸の3つの出力があります。アナログ入力0、アナログ入力1、アナログ入力2にそれぞれのピンが接続されているのですが、今回はX軸とY軸だけを見ればよいので、X軸が接続されているain(0)と、Y軸が接続されているain(1)の値を得ています。

そして、それぞれの値によって、スライドをnext/prev/start/stopしています。

Keynote.appを動かすにはAppleScriptを作ってMacのosascriptコマンドを実行しています。

次のスライドに進む時は

tell application "Keynote"
    show next
end tell'

というAppleEventをosascriptコマンドでKeynoteに送ってあげると、スライドが1枚めくれます。

osascriptは、シェル等からAppleScriptを実行するためのコマンドです。詳しくは
$man osascript にて。

コメントを書く :