経緯

ハッカソンとかで、複数人で開発を進めようとして、ハードとソフトのつなぎがある場合、

  • ハードウェア
  • インターフェース
  • ソフトウェア

とおおまかに分けられると思う。

で、こういう分け方をした時は、俺がハードウェアとインターフェースを担当して、誰かがソフトウェアをやるという分け方が多い。

俺がインターフェース部分で使うのはいつもopenFrameworksだったり、Processingだったりするが、ソフトウェアを組む人もこれらを使っているとは限らないので、「とりあえず、OSC1で送るから受け取ってね」という風にしたら、完全に疎結合になって役割分担もはっきりして気分がいい。

よくよく考えると同じことを何回も何回も書いている気がするので、いっそ、汎用的なアプリケーション書いてやろうと思ったのが、今回。

ArduinOSCという如何にもな名前をつけてみた。

https://github.com/nmbakfm/arduinosc

今回作ったのはArduinoからの信号をOSCに変換するところだけ。

前提

自分がRubyistということもあって、今回Rubyでやった。

前提としては以下。

  • Ruby 2.2.3がインストールされている
  • BundlerをRuby 2.2.3で利用できる環境である
  • ArduinoにはFirmata Libraryがアップデートされている

ダウンロード

以下のコマンドを実行して、ソースコードをcloneしてくればOK

cd your/app/path
git clone git@github.com:nmbakfm/arduinosc.git
cd arduinosc
bundler install --path=vendor/bundle

使い方

以下のコマンドを実行するだけ。

ruby arduinosc.rb

設定の記述方法

設定は中に入っているsetting.json.templateをコピーしてsetting.jsonを作成します。

例えばこんな感じ。

{
  "osc":{
    "host": "localhost",
    "port": "3333"
  },
  "arduino":{
    "modem": "/dev/cu.usbmodem1d1131",
    "available_pins":{
      "analog": [0,1],
      "digital": [13]
    }
  }
}

意味は大体、分かると思うけど、こんな感じ。

名前 意味
host oscの送り先のホスト
port oscの送り先のポート
modem arduinoが接続されているUSBポート2
analog 値を取得するアナログピンの番号
digital 値を取得するデジタルピンの番号

つまり、上の設定ファイルだと、

“/dev/cu.usbmodem1d1131″に接続されたArduinoの
アナログピンA0,A1とデジタルピン13のデータを
OSCとして”localhost”の3333番ポートにおくる

という感じです。

送られるOSC

┣ /analog
┃  ┣ /pin0
┃  ┗ /pin1
┃
┗ /digital
    ┗ /pin13

デジタルのHIGHかLOWかは1か0かで送られます。
アナログの値は0-1023の1024段階の値が送られます。

まとめ

インストールは面倒くさいけど、思いのほか、便利なので、お試しあれ。


  1. OpenSound Control (http://opensoundcontrol.org/introduction-osc
  2. USBポートはArduino IDEの[ツール]-[ポート]を見ればわかります。