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

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


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

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

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

データ値 D3 D2 D1 D0 コマンド
0 0 0 0 0 全停止
1 0 0 0 1 モータ1正回転開始
2 0 0 1 0 モータ2正回転開始
3 0 0 1 1 モータ3正回転開始
4 0 1 0 0 モータ4正回転開始
5 0 1 0 1 モータ5正回転開始
6 0 1 1 0 転送開始
9 1 0 0 1 モータ1逆回転開始
10 1 0 1 0 モータ2逆回転開始
11 1 0 1 1 モータ3逆回転開始
12 1 1 0 0 モータ4逆回転開始
13 1 1 0 1 モータ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