OpenEL 対応 MultiThread BASIC | たけおか ぼちぼち日記

たけおか ぼちぼち日記

思いついたらメモ

OpenEL というものがあり…
OpenELの概要
OpenELの概要 2

OpenELというのは、 JASA((社)組込みシステム技術協会) などが絶賛 推進中の規格で、
ロボット用ハードウェアの下まわりを抽象化するレイヤ。
ROSやRTミドルウェアの下位の層を抽象化して、ミドルウェアやアプリケーションの移植性を高める。

あたくしは、JASAの役員などを拝命しており、OpenELのユーザとしてぼちぼちと遊んでいる。


あたくしは、かねてより、 Multi ThreadなBASICインタープリタを作っている。
これは、裸のマイコンに入れて、対話的にI/Oを叩いたり、
マルチ・スレッドで、多数のI/Oを制御するプログラムを簡単に書けるようにするプログラミング言語である。

この MultiThread BASICに、DCモータ制御のプリミティブを追加した。
そのプリミティブは、OpenEL の DCモータ・コンポーネントを介し、DCモータの制御を行う。
OpenELのDCモータの初期化などは、暗黙のうちにBASIC処理系がやってしまう。
よって、追加したのは、

oeltrq ポート,トルク値

だけである。
内部では、OpenELの
elMotorSetTorque_I32(ポート, トルク値 );
を呼び出している。
トルク値が 0~33で逆転、34~66で停止、67~100で正転。
模型用のDCモータは単純な制御しかできませんから。(電圧を変えるとか、パルスで制御とかもできるでしょうが)
BASICインタープリタはC言語で書いてあり、移植性は高い。
DCモータ制御もOpenELを通している。
よって、OpenELをサポートしたプラットフォームならば、
すぐにMultiThread BASICを移植し、BASICからDCモータを制御することが可能である。


せっかくなので、応用例として、
フォトダイオードで、黒い線を読み取って、走る
ライントレーサを作った。
ライントレーサwith BASIC+OpenEL


土台は、タミヤの、壁づたいに走るネズミ。
オリジナルは、メカのタッチセンサで、右に走るか、左に走るかを決める。
タミヤのネズミ

上記を、光センサとマイコン(BASIC+OpenEL)で作り直して、
黒い線を中心に左右に振りながら、進むようにする。簡単。


あたくしは、1970年代前半の小学校の時に、NHK教育TVの「みんなの科学」でライントレーサをみて、
「マイキット150」の CDS とリレーで、作った。
まだ、マイクロ・プロセッサもなければ、デジタルIC TTL 74シリーズも、アマチュアにはほとんど知られていない頃の話だ。
「マイキット150」は、部品取りになった側面もあるが、楽しいオモチャだった。
あたくしは、「電子ブロック」よりも、圧倒的に「マイキット」派である。
「マイキット150」の太陽電池は、今でも大切に取ってある。


ライントレーサは、極めて簡易な装置なので、BASICのプログラムも簡単である。

-- ライントレーサのBASICソース
5 'PIC32 OpenEL Motor ADC
6 'oeltrq 0,50:oeltrq 1,50
10 do
20 if &@<40 oeltrq 0,1:oeltrq 1,50:goto 50
30 oeltrq 0,50:oeltrq 1,1:goto 50
50 while 1
-- EOF

上記中の "&@"は、フォト・ダイオードを接続したADコンバータからの入力を読み込む引数なし関数である。


MultiThreadBASIC+OpenELが動いているチップは、
PIC32MX250 (MIPSコア@50MHz、ROM128KB, RAM32KB)
秋月で360円

である。

PIC32MX220 (MIPSコア@40MHz、ROM32KB, RAM8KB)
秋月で250円

は、残念ながらROMが足りないので、
マルチ・スレッドではない普通のTiny BASICにOpenELをつないで動かしている。
ライントレーサは、このPIC32MX220のシングル・スレッドBASICでも動く。





回路図
回路図(2014/OCT/11追記)