NucleoとmbedのWeb IDEと加速度計で傾きアラームをつくる
メイカーの趣味を実生活に役立てるため、傾きに応じてブザーがなる装置をつくることになりました。以下が、ブレッドボードでプロトタイピングしたものの動作イメージ。
使用した部品
以下の部品を使用します。マイコン制御が必要なときにいつも使っているNucleo + mbedの組み合わせです。
- Nucleo-L432KC (ブレッドボードにさせるCortex-M4マイコンモジュール)
- 加速度計 LIS3DH(秋月電子のDIPモジュールAE-LIS3DH)
- この加速度計をI2Cで読み出すためのライブラリはすでにを使うと一瞬です。
- 3軸の加速度情報がfloat[3]で取得できます。
- 裏面のサーフェスジャンパを3個ともはんだ付けして、I2Cで読み出せる設定にします。このモジュールのI2Cのアドレスは0x30になります(あとでライブラリのコンストラクタに渡すときに使います)。
- ブザー (発振回路内蔵で電圧をかけるだけで音がでるもの; 秋月で100円のPB03SD12を使用)
- NucleoのGPIOピンの出力を直接接続。
配線
ブレッドボードにならべて、以下のようにピンを接続します。
プログラム開発の手順
- mbedのウェブ上のIDEで、Nucleo-L432KCをプラットフォームとして追加し、新規プロジェクトを作成。テンプレートは"Display a message on PC using UART"等でOKです。
- メニューバーのImportボタン→ 検索フィールドからLIS3DHを検索。Kenji AraiさんのLIS3DHライブラリを選択して、ありがたく使わせてもらいます。
- main.cppを開いて、以下のようなソースコードを入力します。
- Compileをクリック。コンパイルが成功すると、生成された実行形式がダウンロードされる。
- NucleoとMacをUSBケーブルで接続。USBディスクとしてマウントされたディスクに、ダウンロードしたバイナリをドラッグドロップすると、バイナリが内蔵ROMに書き込まれ、自動的に実行開始される。
- ボードを傾けていき、80度(プログラム内で指定しているthreshold)を超える傾きになると、ブザーがなります。
- screenコマンドでシリアルコンソールに接続すると、以下のように計測値がダンプされます(引数のusbmodemNNNNのところは、環境ごとに変わるので、適宜ls等で確認して指定)。「傾き(off angle)」は、(0, 0, 1)というベクトルと、加速度の計測値の内積のarccosで計算しています。浮動小数点演算も三角関数も普通のC++として簡単に記述できて、期待通り動いてくれるのがmbedのいいところですよね。 ```shell screen /dev/tty.usbmodem1413 LIS3DH Ready = 1 X = 9.3359 Y = 0.1961 Z = 2.4320 Off angle 75.4 deg LIS3DH Ready = 1 X = 9.4928 Y = 0.3530 Z = 1.4122 Off angle 81.5 deg LIS3DH Ready = 1 X = 9.2575 Y = 0.1569 Z = 2.9420 Off angle 72.4 deg (screenコマンドの終了はCtrl+A → Ctrl+K → Yを続けて入力) ```
- 今回使用したブザーはNucleoのGPIOの3.3Vでならすとちょうどよいくらい(うるさすぎず、でもちゃんと聞こえる)の音量でした。
PCB化とケーシング
- Eagleのライセンスを買ってしまったので、PCBのデザインをしてみました。
- 2017年06月03日にElecrowに5枚発注(4.9ドル/送料別)したので、届いたら組み上げて、電池での動作などを試験します。シンガポールへの送料は$14.99なので、送料のほうが高い・・・。
- ちなみにElecrowの中国→日本と、中国→シンガポールの送料は以下のような感じ(2017年6月5日時点)。日本向けのEMS($12.21)のほうがHong Kong DHL($14.99)より2.5ドル安いですね。Registered AirmailはAliexpressでの買い物のときによく使うのですが、届くまで3週間くらいかかる(ほとんど通関手続きを待つところで時間をくっているみたい)のと、1度$50くらいの買い物が途中で無くなったことがあったので、今回はDHLにしました。
- ケースは3Dプリンタで作って、服にとめて使えるようにしたいと思っています。