EASY84シリーズその6「プロジェクト・アームジョー」(PICソフト編)(2003)

EASY84シリーズとは、PIC16F84を使って簡単な電子工作を楽しもうという企画である。


今回は、「プロジェクト・アームジョー」(ハード編)のつづきで、PICソ フト編である。 (というか単なるつづきの内容になってしまいました。)

アームジョーには、
1.待ち受けモード
2.データ転送モード
3.オート動作モード
の3つの動作モードがある。

1.待ち受けモード
電源ONの後、このモードとなり、コンピュータからのコマンドを待つ。
コンピュータからのコマンドとデータ値の対応は次のようである。

データ値 D3 D2 D1 D0 コマンド
全停止
モータ1正回転開始
モータ2正回転開始
モータ3正回転開始
モータ4正回転開始
モータ5正回転開始
転送開始
モータ1逆回転開始
10 モータ2逆回転開始
11 モータ3逆回転開始
12 モータ4逆回転開始
13 モータ5逆回転開始

D2〜D0がモータ番号を表し、D3が回転方向を表すようになっている。
ハード編では11通り区別できればよいといったが、転送開始コマンド追加で12通りである。

例えばコンピュータからアームジョーにデータ値3が送信されると、アームジョーは、モータ3の正回転を開始するといった具合である。

2.データ転送モード
待ち受けモードで、転送開始コマンド(データ値6)を受信すると、アームジョーはデータ転送モードに変化する。

データ転送モードになると、アームジョーは、コンピュータから送信されるデータは、コマンドデータではなくシーケンスデータとみなして、メモリに保存する 動作をする。

送信終了データを受信すると、待ち受けモードにもどる。

3.オート動作モード
オート動作スタートボタンが押されると、オート動作モードになり、メモリに保存された シーケンスデータを解釈し自動で動作する。終了後、待ち受けモードにもどる。


シーケンスデータの保存フォーマット
オート動作に必要なシーケンスデータは、どのモータを、どちら向きに、どれくらい(動作時間)動かすかの情報が必要である。
これらの情報をまとめて、1バイト(8ビット)の中に次のように格納することにする。

D7 D6 D5 D4 D3 D2 D1 D0
向き モータ指定
または終了コード
動作時間
0=正
1=逆
001〜101=モータ番号
111=終了コード
0000〜1111
(0.5秒単位)

なお、データ転送時には、コンピュータからは一度に4ビットしか送信できないので、上位と下位の4ビットずつに分けて転送する。

LED表示
モードが外から見てわかるように、本体LEDの表示をモードによって変えるようにする。

モード LED表示
待ち受けモード 消灯
データ転送モード 点灯
オート動作モード 点滅

PICのプログラム
PICのプログラムもモードにより3部構成になっている。おおまかな動作を説明しよう。

まず待ち受けモードでスタートする。
・待ち受けモード
@待ち受けモードでは、データ受信とオート動作スタートボタン入力を監視する。
Aデータ受信があれば、データ値により上記待ち受けモード時の表に従った動作をする。
 データ値6の場合は、データ転送モードに移行する。
Bオート動作スタートボタンが押されたら、オート動作モードに移行する。
C最初にもどる。

・データ転送モード
@データ受信を待つ。
A2データ受信したら1つにしてEEPROMに書きこむ。
Bデータ値を調べ、終了コードであれば、待ち受けモードにもどる。
C最初にもどる。

・オート動作モード
@EEPROMからデータを読む。
Aデータ値を元にモータを動作させ、またタイマをセットする。
 または、データ値が終了コードであれば、待ち受けモードにもどる。
Bタイマが0になったら、最初にもどる。

・タイマ処理
タイマ割り込み処理では、データ受信、LED点灯、オート動作モードのタイマ減算を行っている。

細かいことを言うと、実際の動作とは異なる部分はあるが、ざっとこんなところである。


次回PCソフト編へつづく。(えっ!まだ終わりじゃないの? はい。)

ロボットアームのお求めは
ロボットアーム MR-999ロボットアーム MR-999