Ruby + dino で、RubyからArduinoを制御してみた

昨年末にArduino買ってちょくちょく遊んでます。オープンソースの基板で、デジタル入力14点(うち6点は出力として使用可)、アナログ入力6点を持ち、3000円未満と遊ぶにはちょうどいい金額と機能。

ただ、これCによく似たArduino言語でコード書くんですよね。当然、軟弱者の私としましては慣れ親しんだRubyでコードかけないかなって思って調べてみました。

まっさきに調べたのは組み込み向けのRuby、mrubyでいけないかってことでしたが手元にあるArduino Unoではリソース的に厳しそうです(てか実際やってみましたが、リソース以前にコンパイル通らず。

ちなみにUnoよりリソースに余裕のあるArduino DueとChipKit32ではmrubyが動いてるらしく、mrubyのリポジトリにそれ向けのビルドセッティングが入ってたりします。
https://github.com/mruby/mruby/tree/master/examples/targets

で、じゃあArduinoは入出力として使って、BeagleboardとかRaspberryPiとかと組み合わせ使うのはどうなんだろうってまた調べてたらdinoというありがたいgemがありました。

のでそれ使ってみます。

Arduinoの用意

Arduinoの基板はスイッチサイエンスでLEDやジャンパと一緒に4000円ほどで売ってます。
もっとも標準的なUnoでデジタルが14点、アナログが6点あります。

ArduinoIDEがまだ落としてない場合はこれを落としておきます。
Arduino-Software


Arduinoへスケッチをアップロード

dinoのリポジトリにあるdu.inoをダウンロードして、適当なところに保存。Arduino IDEで開きます。
Arduino IDEでdu.inoをコンパイル・基板にアップロードします。

以上でArduino側の用意は終わりです。ここまでやったらArduino IDEは終了してかまいません。

dinoライブラリの準備

dinoはgemにありますので、これをインストールします。

$ sudo gem install dino

Rubyからarduinoを制御してみる

とりあえず、ためしにLEDのチカチカやってみます。
これまた親切丁寧に配線図?があるのでこのとおりにLEDをさします。

試しにirbから制御してみます。

require "dino"
=> true

board = Dino::Board.new(Dino::TxRx.new)
=> #<Dino::Board:0x.....

led = Dino::Components::Led.new(pin: 13, board: board)
=> #<Dino::Components::Led:0x.....

ここまでで13番のデジタル入出力を制御する準備ができました。
では13番にデジタル出力してLEDを光らせてみます。

led.send :on


おお〜(ざわざわ

では消してみます。

led.send :off


消えましたw

とりあえず今回はここまでですが、他にもいろいろとできそうなので、調べてみます。できたらZigBeeと組み合わせてセンサーネットワークとか作ってみたい。