イベント概要
自作のプログラミング言語『IRUMA BASIC』を使った、簡単なロボットの制御のデモイベントを古民家レンタルスペース遊~喜で開催しました。
当日の様子は作業配信という形でYouTubeで配信していました。
無編集・実時間のままの動画ですので、要所要所必要な場所だけ見てもらえれば良いと思います。
前日の様子(YouTubeライブ配信)
一旦終わりとしたものの、ちょっと進捗があり・・・
当日の様子(YouTubeライブ配信)
当日は徒歩旅ちゃんで有名なユーザー氏とそのリスナー、リーさんが参加してくださり、開発が進みました。次回開催に向けて、得られた知見を盛り込んでいきます。
使用した部品類の説明
IRUMA.BASICはArduino Nano Every上で動作させています。あらかじめBASICのプログラムを書き込み、電源投入後はそのプログラムに沿って動作します。
マイコン関連
Arduino Uno R3よりも強力で5V対応できる、Arduino Nano Every(ピンヘッダ未実装)をマイコン部分に使用しています。Arduinoのピン配置に揃えるためのボードとして、 PC-NE01 ピン配置変換ボード を使用しています。これによって、Arduinoの拡張ボードの資産が有効活用出来ました。
ロボット部分
市販のキットでボディ、モータ、タイヤのバランスがよく整っており、安価であるためこちらを使用します。
販売サイトリンク:2WD Mini Smart Robot Mobile Platform Kit for education
駆動部分
モータを駆動する部分にはマイコンから直接駆動するのではなく、専用のICを使用します。I2Cで制御出来、半田付け不要な GROVE I2C MINI MOTOR DRIVER を使用しています。
表示・センシング部分
現在の状態の出力や測定した距離を(主にデバッグのために)表示するために、キャラクタLCDを使用します。こちらもはんだ付け不要で取り回しが容易であるという観点で選んでいます。
PLCD1602 1.8V〜5.0V対応I2C接続LCD Rev1.1
衝突(しないように)検知には測距センサを使用します。アナログ出力なので、得られた値を変換して距離に換算しています。
その他
茶筒、ケーブルなど。試作段階なので部品の固定は何度でも貼って剥がせるテープ類を使い、逆にしっかりと固定しない方が良いでしょう。
IRUMA BASICとは?
専用ページを作成しましたので、リンク先をご覧ください。
当日使用したIRUMA BASICのコードとその簡単な解説
ここでは当日のイベントで使用したIRUMA BASICのコードを紹介し、簡単に説明します。
10 DIM A, B
20 CLS
30 LOCATE 0,0
40 LPRINT "NOW LOADING..."
50 WAIT 3000
60 B = 1
65 MOTOR 1, 10
66 MOTOR 2, -10
67 WAIT 100
70 MOTOR 1, 20
73 MOTOR 2, -20
77 WAIT 100
80 MOTOR 1, 30
83 MOTOR 2, -30
87 WAIT 100
100 AIN A
110 CLS
120 LOCATE 0,0
130 LPRINT A
140 IF A < 10 THEN 1000
165 MOTOR 1, 32
170 MOTOR 2, -43
175 WAIT 100
180 GOTO 100
1000 REM JUMP DESTINATION
1010 MOTOR 1, 0
1020 MOTOR 2, 0
1030 LOCATE 0,1
1040 LPRINT "FINISH."
1100 END
- 1
- IRUMA BASICは変数は宣言してからでないと使えません
- 2
- 起動時の液晶画面への文字の出力処理
- 3
- 3秒まってから開始。何か問題があればこの時間に止めるようにしよう!
- 4
- 初期化有無を使う予定が、使わなくなって消し忘れ・・・
- 5
- ソフトスタート処理。これを入れないと起動時にこけてしまう。なお、次の停止処理を入れ損ねているのはご愛敬
- 6
- 距離を測る処理。AIN内にセンサの入力を距離に変換する処理を入れてしまったため、BASICのコードはシンプルになっています(おためし回向けに、シンプルにしました)得られた値をLCDに表示します。距離が規定値以内であれば1000の停止処理へ。そうでなければ次の行へ。
- 7
- まだぶつからないので、モータの速度をあげます。ここで左右の値が異なるのは、機体のそれぞれのモータの特性の差から。ちょっとした値の差で直進したり曲がったりします。難しい。100ミリ秒待って距離を測る処理に戻ります。
- 8
- 停止の処理。MOTOR命令で一度信号を送るとその後ずっと同じ値を出し続けるため、停止のために0を送り、終了したことをLCD上に表示します。
文法はBASICの比較的標準と思われるものに近づけていますが、IRUMA BASIC固有の文法や命令が含まれています。
各命令文
DIM
: 変数を宣言するLOCATE
: キャラクタLCDのカーソルの座標を指定LPRINT
: キャラクタLCDに文字を表示するCLS
: キャラクタLCDの画面をクリア(消去)する。WAIT
: 待ち時間を入れる。単位はミリ秒AIN
: アナログ信号入力を変数に渡す命令。今回は距離を測るセンサを使っていますが、その結果を距離に置き換える処理まで含めています。MOTOR
: モーターを動かす命令。0で停止、正負で方向、数字が出力を示す。向かい合わせに置かれているため、直進でも左右のモータで符号が逆となっている。モーターの特性の違いは与える信号の値で制御。
補足
このように、比較的短いコードですが、
モーターのソフトスタート制御
接近検知の判断
停止の制御
状態のLCDへの表示
と、基本的な制御やプログラムの要素が詰まっています。簡単な文法で、ひとつひとつ考えて書くことで、理解が深まります。