■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...

PICと2軸加速度センサ

はじめに

 浅草ギ研ではパルス幅出力タイプの2軸加速度センサを販売していますが、パルス幅の測定という点では前回行いましたラジコン受信機の読み取りと同じ方法が使えます。ここではPICと2軸加速度センサとの接続方法を紹介します。


2軸加速度センサ

 加速度のセンサとは言いますが、ホビーロボット
で使用する場合は主に、
 
 ■ロボットの転倒検知(2軸の場合は倒れた方向も検知可能)

 ■歩行時の制御の補助

 ■衝撃検知

などに使われています。転倒検知は、重力を利用するもので、90°傾いた状態では1Gの力が加わります。
浅草ギ研で販売している2軸加速度センサの商品説明についてはこちらにも掲載されています。

<ピン配列>



※GNDは両方ともGNDにつながなくてはなりません。
<出力波形>



T2=10mSで固定、加速度でT1が変化する。
0G時にはデューティー50%、つまりT1=5mSとなります。

重力と傾き

 地球の重力は垂直方向に1Gです。加速度センサを傾けるとこの重力に反応しますので90°傾けると1Gの力が生じます。 傾きと重力の関係は次の図のようになります。



 
以上から 重力加速度(G) = Sin(傾き角度) と言えます。

 <動作イメージ>の図の公式で重力加速度(G)が計算できますのでアークサイン関数を用いて角度を計算することができます。

角度
Sin
0°
0.0000
10°
0.1736
20°
0.3420
30°
0.5000
40°
0.6428
45°
0.7071
50°
0.7660
60°
0.8660
70°
0.9397
80°
0.9848
90°
1.0000
 マイコンでSinなどの三角関数の計算をするには非常にパワーが必要で、場合によってはメモリが足りなくなる場合があります。このような場合は三角関数のテーブルを作っておき、その値と比較しておおまかに角度を求めるとメモリを消費せずに角度を求めることができます。
 左の表は10°ごとのSinの三角比の表です。上で求めた(G)の値がどの範囲に入っているかをこの表と比較することにより、 10°単位での解像度で角度を求めることができます。

 今、たとえば測定結果から0.7Gとの結果が出たとしますと、左の表から約45°傾いているということがわかります。


回路図




 この回路図については説明するまでもないかと。
 電源回路などについては「PICを使ってみる」を参照願います。
 結果の出力(デバックモニタ)については「PICとPCとの接続」を参照願います。

接続ですが、前回と同様に、PIC基板に出ているヘッダピンを2550コネクタが付いたケーブルで接続します。


こんな感じで数本用意しておくと、実験に便利です。この他にも1x2列や1x3列のものも作ってあります。
ブレッドボードの逆の感じですね。ブレッドボードよりは抜けずらいです。



加速度センサにつないだところ。加速度センサ側にはあらかじめ0.1インチピッチ(普通のDIPと同じピン間隔)でヘッダピンがハンダ付けされています。
30秒で配線が終わりました。



プログラム

プログラムはラジコン受信機との接続のものをほぼ同じです。2軸なのでGP0とGP1の2つのパルス幅を測定しています。
12F675は使い方にコツがありますので、詳しくは前のページを参照願います。

ここでもタイマ0を使ってますが、タイマ0は8ビットカウンタなので分周する必要があります。今回は周期10mSでデューティー50%なので基本的には5mSのHighのパルスが出ます。仕様をみると1Gで12.5%変化するようなので、1G、つまりプラスマイナス90°傾けると4.375〜5.625mS変化するハズです。
内部4MHzクロックを使用しますが、内部クロックの場合はタイマのカウントが1/4になるので、1MHz、つまり1uSで1カウントします。これにより分周した場合のカウント値の表を作ると、下記のようになります。

 
4.375mS
5mS
5.625mS
0分周
4375
5000
5625
8分周
546.88
625
703.13
32分周
136.72
156.25
175.78

タイマ0は8ビット、つまり0〜255までしかカウントできませんので32分周がちょうど良い感じになります。

これにより作成したプログラムが下記のようになりました。




テキストデータはこちら PIC_2Axis.txt
(右クリックで保存)



実行結果


実験の結果、水平にした場合はX,Yとも約154の数値が出力されました。
以下、倒した場合の結果です。

※重ねて書きますが、ハイパーターミナルでの結果の出力(デバックモニタ)については「PICとPCとの接続」に書いてあります。

<向こう側に90°倒した場合>
Yは変化せずに、Xが115ぐらいまで下がっていきます。


<手前側に90°倒した場合>
同じく、Yは変化せずに、Xが192ぐらいまで増加します。


<右に90°倒した場合>
今度はXは変化せずに、Yが192ぐらいまで増加しました。


<左に90°倒した場合>
Xは変化せずに、Yが115ぐらいまで減少しました。


水平位置はほぼ計算通りでしたが、90°の時点の変化率は思ったよりも大きいものとなりました。実際には1Gでの変化率は12.5%ではないのかもしれません。

この水平時と90°時のデータと始めの方で説明したSin関数により「xx°傾いている」、というような計算も可能です。
余裕がある人はプログラムを考えてみてください。(私は余裕が無いのであった。)


2005年8月15日
 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示