自転車向け 自作デジタル勾配計② ディスプレイの実装と計測テスト

このエントリーをはてなブックマークに追加
2015/10/20 10:23 am
Blog Category / 日記
 

dgl1
照度が高すぎて写真で見ても眩しい。
前回加速度センサを実装し、次はディスプレイとなるマトリクスLEDを。使用したのはAdafruit Mini 8×8 LED Matrix。自作HUDで使用したLEDに比べて一回り小さい。写真のように白色LEDは照度が高くてムスカになってしまいそうだね。照度調整必須。
失敗に気付く
前回の記事に追記したけど、机の上で加速度センサを傾けると正しく計測されるのは当然として、自転車にのせて水平方向に加速したら水平Gが加算されて正しい角度が計測できなくなるんじゃね?と気付いた。当たり前だろう、のりものは加速するものだから。加速度センサなんだから。
雲行きが怪しくなってきた。
取り敢えず棚上げしてテスト続行
dgl2
自作HUDと同じく、数値を桁ごとに分解してディスプレイに表示させるコードを書いた。照度は最低でもまだ眩しいくらいなので、3Dプリンタでケースを作った際にハーフミラーやスモークアクリルで更に照度を落としたいところ。
同時に、キャリブレーションスイッチも実装した。スイッチを押した時点でのセンサーの角度を基準とし、その後計測した角度に補正をかけるようにしたので、自転車につけた際には面倒な角度調整が不要となる。
これで当初構想した仕組みは実現できた。机上では完璧に動作しているけど、いちおう車にでも持ち込んでテストしてみよう。
車載テスト
dgl3

まぁそりゃ失敗だよな。

停止時は正確に道路勾配が計測できているが、少しでも加速、減速Gが加わると数値が激しく増加してしまう。
角度を図る部品 = スマホなんかに入ってる = 加速度センサだな。という短絡的思考から部品を選んだ自分に説教をしたいところだけど、これで加速度センサの性質を多少なりとも理解できたので結果良し。ということにしておこう。
しかしね、一定速度で巡航している時はちゃんとした数値が出ているんだ。サンプリング回数を増やして平均値を元に角度計算した効果もあり、振動に影響して数字が乱れる事は無かった。これで諦めるのは惜しい。
dgl4
というわけで、次はジャイロセンサを試してみます。

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

このエントリーをはてなブックマークに追加
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の制作でノウハウを得ることができているので問題無く進行できるはず。
追記
書いてから気付いた。そもそも加速度センサだと、自転車につけて加速したら水平方向の加速度が加算されて角度が測れないじゃね?おれアホやん。

  • 人気の記事
  • アーカイブ
  • カテゴリー
  • タグクラウド