加速度センサで遊んでみよう その1       3/3

4. ファームウェア

    基本的には、加速度センサからX軸の加速度、Y軸の加速度を受け取り、そのデータに応じてLED表示器へX,Yデータを出力してあげます。

    なにも加速度がかかっていないとき、AD出力は2048となっており、加速度を受けるとそれに応じてAD出力の値が増減します。このAD出力の値を7段階に振り分けて、その値をLED表示器へ与えれば、加速度に応じたLEDが点灯するようになります。本ファームウェアでは、車の進行方向をY軸、車の横方向をX軸とし、Y軸は200LSBごとにLEDの点灯位置を変え、X軸は400LSBごとにLEDの表示位置を変えています(図4参照)。この200LSBごととか400LSBごととかいう値が、表示感度となり、値が小さいほど感度が高いということになります。200LSB,400LSBという値は、実際に車にのっけて走行し、カットアンドトライで決めた値です。

    なお、実際には加速度がかかっていないときに確実にAD出力が2048に成るわけではありません。ちょっとでも加速度センサが傾いていれば、AD出力は2048からずれた値となってしまいます。ですから、電源投入時の加速度センサ出力を、加速度がかかっていない状態とし、そこからX軸方向においては400LSBごとにLEDの表示位置を移動するようにし、またY軸方向においては200LSBごとにLEDの表示位置を移動するようにします。

    こうして出来上がったファームウェアがこちらです。なお、このファームは、加速度を受けた方向とLEDの表示が逆になっています。センサをひっくり返して固定しているので頭の中がちょっとこんがらがった為です。まぁわかればいいやとそのままほったらかしにしてあります。

    AD出力を読み取るためのサブルーチンAquitision()と、その値がX軸,Y軸の7段階のどの位置になっているのかを決めるルーチン、そしてLEDを表示させるルーチンがあります。まず、現在のAD出力を読みこみ、その値を中心値ZX,ZYとします。そこからX軸方向には200LSBずれるごとに、Y軸方向には400LSBごとに表示座標を変化させます。X軸の出力はIOポートの0〜2bit、Y軸の出力はIOポートの3〜5bitに割り当てていますX軸、Y軸の値を足してIOポートに出力してあげます。つまりLED表示器におけるX軸の0,1,2,3,4,5,6,7はIOポートにおいて0,1,2,3,4,5,6,7を出力することになり、Y軸における0,1,2,3,4,5,6,7は0,8,16,24,32,40,48になるわけですから、たとえば(4,4)を表示させるためには、4+24=28をIOポートより出力してあげればよいというわけです。

    で、こちらがファームウェアです。使用言語 YC80 (Yellow Soft社)

         gsens1.c    Cソース

         cc0.asm     スタートアップファイル(アセンブラ)

5.出来上がり

    こうして出来上がった完成品が図7です。実際にセンサを傾けたとき、LED表示機がどのように表示をするのかを動画で用意してみました。

    こちらが動画です。   sens1.mpg (120kB)

    加速度表示をするLEDマトリックスにより、どの方向にどれだけ加速度が発生しているのかを知ることができます。なお、ファームの作成においてうっかりして、表示方向が反対になってしまうというミスをしました。右に傾けるとLEDは左に移動しています。

     

図7 全体像

     

     

6.本器を車に乗っけてみました。

    さてこうしてできた加速度センサをつかったお遊び回路、車に乗っけて走ってみると、ただ単に運転していたときはあんまり気づかなかったことがわかってきます。とりわけ、ブレーキやアクセルの扱いに注意するようになりました。ちょっと強めにブレーキを踏んで停止すると、LEDがふらふら動いて、これでは助手席の人に不快感を与えるなとか、自分が考えていた以上に横Gというものがかかるんだなとか。とりあえず、いまは簡単な試作回路ですから、運転中に見やすい位置にLEDディスプレイを固定することができないため、まだまだいろいろいじってみる必要があります。さすがにLEDをじっと見ながらの運転は大変危険ですから、音でも出そうかなと考えています。

7,終わりに、また今後の予定

    そんなわけで結構面白いものができました。今後はセンサの感度を調整できるようにするとか、音を出すとか、表示をリニアスケール以外のものにするとか、アベレージ処理を加えて表示を安定させるとか、AC加速度を測定するモードを追加するとかいろいろやりたいことが出てきました。そのためには車に加速度センサを載せたときの生出力(フィルタなどを通さない値)をすこし解析する必要がありそうです。レコーダでも車にのっけて、データーとりでもやってみたいですね(う〜ん、だんだん本格的になってきた)。

  前のページへ

ホーム          作りながら学ぶ電子回路