はじめに
皆さん、こんにちは! 突然ですが、組込み機器におけるソフトウェア開発(以下、組込みソフト開発)には、どんな開発言語を使用していると思いますか? そうです、一番多いのがC言語です。その他、C++やアセンブリ言語なども使用されています。
ところで、Javaでも組込みソフトの開発ができることをご存知でしょうか? Javaを搭載したデジタル機器・家電製品には、コピーやFAXなどの複合機、携帯電話、カーナビなどがあります。Javaの開発と言うとWebアプリケーションが多いですが、組込みソフトはどのように開発していくのでしょうか……。
ここではレゴロボット「教育用レゴ マインドストームRCX」を使って、組込みソフト開発の入り口を一緒に体験してみましょう!
レゴロボットについて
今回はこのレゴロボットを使用します。
ここがレゴロボットの頭脳にあたる部分で、RCXと言います。
RCXには8ビットのマイコンが内蔵されています。メモリは16KbyteのROMと32KbyteのRAMを搭載していて、実際にユーザープログラムが使用できるのは、11Kbyteです。組込み機器はメモリが少ないです。入力ポートや出力ポートもあり、入力ポートには外部から情報を受け取る光センサーやタッチセンサーなどを接続し、出力ポートにはモーターやランプなどを接続します。
レゴロボットの制御プログラムは、「LeJOS」というプログラミング環境を使用し、PC上で開発します。コンパイルしてできあがったクラスファイルは、PCに接続しているIRタワーから赤外線通信でRCXに転送します(RCXは前面の黒い部分が赤外線ポートになっています)。組込みソフト開発では、このように開発環境と実行環境が異なる「クロス開発」が一般的です。
簡単なプログラムでコンパイルから実行まで体験してみる!
まずは簡単なプログラムで、一通りの流れを体験してみましょう。
2秒前進し、2秒後退するプログラムです。
1: import josx.platform.rcx.*; ←(1) 2: 3: /**
4: * ForwardBack.java
5: *
6: * 2秒前進し、2秒後退する
7: *
8: */ 9: 10: public class ForwardBack { 11: public static void main(String[] args) { 12: 13: //前進 14: Motor.A.forward(); ←(2) 15: Motor.C.forward(); 16: 17: try { ←(3) 18: Thread.sleep(2000); 19: } catch(InterruptedException e) { 20: } 21: 22: //後退 23: Motor.A.backward(); ←(4) 24: Motor.C.backward(); 25: 26: try { ←(5) 27: Thread.sleep(2000); 28: } catch(InterruptedException e) { 29: } 30: 31: //止まる 32: Motor.A.stop(); ←(6) 33: Motor.C.stop(); 34: 35: } 36: }
- 1行目:
- 14~15行目:
- 17~20行目:
- 23~24行目:
- 26~29行目:
- 32~33行目:
Motor.A.forward()
で左のタイヤを動かすモーターを順回転させ、Motor.C.forward()
で右のタイヤを動かすモーターを順回転させます。結果として前進します。sleep()
は、InterruputedException
の例外がスローされる可能性があるので、try~catch文を記述します。backward()
で逆回転させる事で後退します。stop()
させることにより止まります。プログラムの実行
では、コンパイルしてみましょう。「lejosc」というコマンドでコンパイルします。
C:\>lejosc ForwardBack.java
無事にコンパイルが終わったら、クラスファイルをRCXに転送します。赤いボタンを押して電源を入れ、RCXの赤外線ポートとIRタワーを向かい合わせ、「lejos」コマンドで転送します。
C:\>lejos ForwardBack 100%
100%と表示されて、RCXからBeep音が聞こえたら転送完了です。
いよいよ実行です! 思い通りに動くのかドキドキします。緑のボタンを押して実行してみましょう。
おぉ、動きましたーーーっ!!
筆者は初めてレゴロボットが思い通りに動いた時、おもわず顔がニヤけてしまいました……。
次回は光センサーを使ったプログラムを作ります。