自転車向け 自作デジタル勾配計① 加速度センサーのテスト

このエントリーをはてなブックマークに追加
2015/10/19 10:22 am
Blog Category / 制作ログ
 

dg1
以前、ロードバイク用のデジタル勾配計が売って無いので欲しいな作りたいな〜と書いていたけど、構想を妄想で終わらせないために加速度センサでのテストを開始する。
新たに購入した部品は、加速度センサAdafruit MMA8451 Accelerometer Breakout、arduinoの互換機Adafruit Metro Mini 328の2つ。どちらもスイッチサイエンスで購入した。これに加え、自宅に在庫してあるAdafruit Mini 8×8 LED Matrixとタクトスイッチを使用する予定。毎度Adafruitの製品を選んでいるのは、本家WEBでのチュートリアルが充実している、ライブラリの解説が見やすく、丁寧で理解しやすい。I2C通信により配線が簡単。などの理由から。
Adafruit商品ページ
配線図
dg3
Arduinoと加速度センサの図と名前が一致していないけど気にしないでね
現状はまだマトリクスLEDやスイッチを繋げていないけど、最終的には上記のようにする予定。加速度センサの配線は5V,GND,I2cのSDA,SCLのみで単純。僕みたいなアホにとってはこの簡単さが、凄くたすかる。
電源は単3電池2本をDC-DCコンバータで5Vに昇圧して…など色々考えたけど、以前の妄想編で書いた通り単純にモバイルバッテリーを使用する。
ライブラリのインストール
dg2
上記のスクリーンショットは目的の数値をシリアルモニタに表示しているもの。
まずArduinoに加速度センサのライブラリをインストールする必要がある。Adafruitの解説ページにダウンロードリンクが掲載されているのでダウンロード。Arduino IDEメニューの[スケッチ]-[Include Library]-[Add .ZIP Library]でダウンロードしたZIPファイルを指定すればいい。
コーディング
サンプルソースを実行してみると、シリアルモニタにX,Y,Z軸の移動量、加速度、センサの傾き判定が表示された。
mma.read();
で3軸の数値を計測できる。
mma.x
で計測した値を取出す。xの部分をy、zに置き換えれば各軸に応じた数値を得られる。
サンプルコードそのままの状態ではセンサはループ毎に移動量を計測しているため、数値の変化が敏感すぎて自転車の振動を拾い、まともに計測できなくなる事が想像できる。なので、2000回センサ値を読み取って、その平均値をシリアルモニタへ出力してみると、随分と変化が滑らかになった。
そして肝心の角度取得。センサを-90度〜+90度と傾けてシリアルモニタの数値を見てみると、-2000〜+2000の間で値が変化した。計4000の範囲で数値が変化するので、計測範囲180度とかんがえると、4000 / 180 = 22.22。この数値を係数として、センサの移動量を係数で割ってあげれば角度が計算できる。
最終的には角度を道路勾配に変換したいので、角度をラジアンに変換。角度 * 3.14 / 180 でラジアンに。
三角関数を使って tan(ラジアン)*100 で道路勾配となる。たぶん。もっとスマートな計算方法にしたいところだけど、残念ながら頭の出来がわるいのでこれが限界。
次回の予定
以上、基本となるコードができたので、次はマトリクスLEDを繋げて数字を出力したいと思う。Adafruits製マトリクスLEDの扱いは、DIY HUDの制作でノウハウを得ることができているので問題無く進行できるはず。
追記
書いてから気付いた。そもそも加速度センサだと、自転車につけて加速したら水平方向の加速度が加算されて角度が測れないじゃね?おれアホやん。


  • 最近の投稿
  • 最近の特集
  • 人気の記事
  • アーカイブ
  • カテゴリー
  • タグクラウド