« 今日の作業 2 | トップページ | 半田付け »

2006年5月14日 (日)

入力デバイス

今回のマウスでは、プッシュSWを2個(もしくは3個)取り付ける予定。

元祖BasicMouseもプッシュSW3個の構成だけれど、正直パラメータが増えてくると、操作がめんどくさい。
長押しを組み合わせて見たりするけれど、やはり本番の大会を考えると操作性の良いものを作っておきたい。

駆動輪についているエンコーダも、入力デバイスとして使うようにしてみる。
以前のBasicMouse/DCでもやっていたのだけれど、今回のマウスでも実装してみる。

単純に手でホイールを回し、エンコーダカウントを読むだけだと、いまひとつ節度感に欠ける。
LEDとかで視覚的にもフィードバックもするのだけれど、モーターをコントロールして、擬似的なクリック感を作ってやるといい感じになる。

コードはシンプル。こんな感じ

i = ((int)(signed short)(MTU1.TCNT));
if (i > 100){
  ucMode++;
  MTU1.TCNT = 0;
}
else if (i < -100){
  ucMode--;
  MTU1.TCNT = 0;
}

if ( i < -50 ) i += 50;
else if ( i > 50 ) i -= 50;
else i = 0;
sMotorDutyR = i * 6;

このルーチンは、インターバルタイマーで呼ばれている。
sMotorDutyRはモーターのデューティ。符号付きで、プラスマイナスで正逆転。
MTU1.TCNTは、エンコーダーをカウント。最初にゼロクリアしておく。

エンコーダーのカウント0に対して、比例項のみで位置サーボがかかっている。
カウントがプラスマイナス各々一定値(100)を超えると、カウンタがリセットされ、そこが新たな原点になる。
ちょうど手回しエンコーダーのような操作感だけれど機械的なものではないので、ミスカウントは無い。

ソースコードで、プラスマイナス50している部分は、不感帯を作っている。
モーターの消費電流低減が狙い。
手で回してみると、ちょうど遊びのように感じる。
フィーリングと消費電流を見ながら、いいところを探す...

------

DCマウスは、いろいろ遊べて面白いです。

|

« 今日の作業 2 | トップページ | 半田付け »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 入力デバイス:

« 今日の作業 2 | トップページ | 半田付け »