ちょっと煽り気味なタイトルですが、要するに開発環境を整える必要もなく、EV3でmrubyを試してみませんかというお話です。
GitHubからコードを取ってきて、SDカードに書き込んだらすぐに動作させることができます。Rubyのコードを編集してSDカードに上書きすればプログラムの修正はOK。ほら、簡単でしょ?
この記事の対象はETロボコン参加者に限っていませんが、EV3RTの基本的な操作は知っている方とします。
なぜ開発環境不要なの?
既にmrubyをご存知の方には、「ちょっと待って!バイトコードはどうやって作るの?」と思われたかもしれません。ふふふ、バイトコードにしなくてもRubyのコードを読み込んで実行することもできるのです。
バイトコードにする場合は、Rubyのコードを修正するたびにビルドし直す必要があります。しかし、Rubyのコードをそのまま実行する場合は、Rubyのコードを書き換えるだけでビルドする必要がありません。
この記事で紹介するアプリを使えばRubyのコードを書くだけでよいのです。
上級者向け補足
ビルドしなくてよいのは、あらかじめEV3RTのタスクの数や設定と各タスクで読み込むRubyのファイル名を決めてビルドしたいわゆる「app」を私の方で用意したものを使用してもらうからです。
ご自身でappを作成する場合は、C言語レベルでのタスクの数や設定、Rubyのファイル名を変更した場合はappをビルドし直す必要があります。
準備するもの
特に何か新しく用意する必要はありません。これまで使ってきたPCとEV3があればOK。
EV3は走行体の形をしていなくてもかまいません。できればセンサーかモーターを1つ以上用意してください。1
セットアップ
コードの取得
この記事で使用するものはGitHubにあります。
EV3RT β版用
git clone https://github.com/yamanekko/app_1task
EV3RT 1.0用
git clone https://github.com/yamanekko/app_1task4ev3rt-v1
EV3RTの準備
動的ローディング形式を使用します。
EV3RT 1.0用の場合
先ほどcloneしてきたリポジトリから app_1task4ev3rt-v1/bin/ev3rt-v1/の中身をSDカードにコピーしてください。
EV3RTβ版の場合
この記事は β7 用です。β7-1など違うバージョンには対応していません。2
先ほどcloneしてきたリポジトリの中にあるSDCardディレクトリ以下をSDカードにコピーしてください。
(β7用のSDカードをお持ちの場合はそれを使用してもよいです。中身はev3rt-beta7-release.zipのsdcardディレクトリと同一です)
SDカードの中身はこんな感じになっています。この「apps」フォルダにappもRubyのコードも入れます。
appをSDカードにコピー
SDカードのev3rt/appsフォルダの中にcloneしてきたリポジトリのbinディレクトリに入っている起動用アプリをコピーします。
今回は「app_1task」を使用しましょう。
以降は、β版も1.0も同じです。
Rubyのコードを作成してSDカードにコピーする
今回使用する「app_1task」アプリは、Rubyのファイル名が「main_task.rb」と決められています。他の名前では動きません。
ここではひとまずサンプルコードを動かしてみることにします。
SDカードのev3rt/appsフォルダの中にcloneしてきたリポジトリのmain_task.rbをコピーしてください。
SDカードのev3rt/appsフォルダの中にはapp_taskとmain_task.rbが入っていますね。
EV3RTはUSBで接続したままだとアプリが起動できないので、USBケーブルは外しておきましょう。
参考)SDカードに書き込む際はUSB経由がおすすめ
SDカードを都度抜き挿しして書き直すのは手間だし、EV3本体のSDカードスロットを痛める原因にもなります。そこでSDカードはEV3本体に挿しっぱなしにしておき、USBケーブルを使用してファイルをコピーすることをおすすめします。
USBケーブルを使ってファイルを書く方法はTOPPERSのサイトにあるSDカード+USBケーブルによるアプリケーションのロード方法を参考にしてください。
動かしてみよう
準備ができたので、早速動かしてみましょう。
超音波センサーのポートを確認
超音波センサーがポート2に接続されていることを確認してください。
アプリを起動する
ふつうにEV3RTでアプリを動かす時と同じです。
本体中央にある濃いグレーのボタンを押して起動します。SDCard->app_1taskを選択してください。
このサンプルは、超音波センサーが30cm以内に障害物を検知している間、LEDが緑色に光り、検出しなくなると消灯します。
Rubyを使ったことがなくてもコードを見れば、どんな動きをするプログラムかわかるのではないでしょうか。
サンプルコードを変更してみよう
まずは、
- 検出する距離
@sonar_sensor.distance <= 30
- LEDの色
@led.on(EV3RT::LED_GREEN)
- Sleepの時間
EV3RT::Task.sleep(1000)
などを変えてみるとよいでしょう。
エラーになった場合はLCD(EV3本体の液晶)にエラー内容が表示されます。3
LEDの色は
EV3RT::LED_RED
EV3RT::LED_GREEN
EV3RT::LED_ORANGE
の3種類があります。
消す場合は
EV3RT::LED_OFF
です。
他のセンサーやモーターも使ってみよう
使えるRubyのAPIはyamanekko版mruby-ev3rtのAPIリファレンスを参照してください。
モーターを回してみる
参考例としてモーターを動かしてみることにしましょう。
main_task.rbの中身を以下のように変えて、実行してみてください。
モーターはポートBに接続されている必要があります。
class MotorControler
def initialize
@motor = EV3RT::Motor.new(EV3RT::PORT_B, EV3RT::LARGE_MOTOR)
end
def drive
@motor.power = 50
EV3RT::Task.sleep(1000)
@motor.power = 0
end
end
class MainTask
def self.execute
self.new.execute
end
def initialize
@motor_controler = MotorControler.new()
end
def execute
@motor_controler.drive
end
end
MainTask.execute
モーターが1秒回って止まったらOKです。
ずっと回ってたらうるさいので1度きりのサンプルにしました。
モーターの数を増やしたり、回し方を変えたりなど、いろいろ試してみてくださいね。
次は走行体をうごかしてみましょうか(続く)