LoginSignup
6
3

More than 3 years have passed since last update.

1時間でできるEV3RTでmruby

Last updated at Posted at 2018-12-16

ちょっと煽り気味なタイトルですが、要するに開発環境を整える必要もなく、EV3でmrubyを試してみませんかというお話です。

GitHubからコードを取ってきて、SDカードに書き込んだらすぐに動作させることができます。Rubyのコードを編集してSDカードに上書きすればプログラムの修正はOK。ほら、簡単でしょ? :smiley_cat:

この記事の対象は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のコードも入れます。
sdcard.png

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に接続されている必要があります。

main_task.rb
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度きりのサンプルにしました。
モーターの数を増やしたり、回し方を変えたりなど、いろいろ試してみてくださいね。

次は走行体をうごかしてみましょうか(続く)


  1. 本体だけでもできないことはないです  

  2. 後で時間ができたらこっそり増えているかもしれませんが、とりあえずはβ7で試してください 

  3. エラーがうまく表示されない場合はコメント欄で教えてください。 

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3