Freescale 社の3軸デジタル加速度センサ MMA7660FC を使ってみた。以前に使用した同社の MMA7260QT アナログ出力だったのに対してこちらはデジタル(I2C)で、データ変更や製品方向の検知、割込みピンを通じたジェスチャ検知が可能である。写真は mbed につないで方向と XYZ 値を表示してみたところ。
センサ本体は DIP 変換基板に載った 3mm 角の DFN パッケージで、リードなしの 0.5mm ピッチで、まずはこれの半田付けが難関だ。当初、半田付け不良を見逃していて信号を取得できなかった。
もうひとつ、mbed I2C 複数バイトの R/W API では動作せず、シングルバイトのものを使ってようやく動作した。mbed のkライブラリはソースコードが非公開であるため、このような場合の問題解決に手間取ってしまう。急遽、簡易 I2C バスアナライザ (コメを噛め / V850付録基板でI2Cバスアナライザもどき)を作ってみたものの、やはりロジックアナライザが欲しいところではある。
ようやく動かせたところでアプリケーションノート AN3837 の "Setting up the MMA7660FC for Orientation, Shake, Auto-Wake/Sleep and Tap Detection" に倣って方向検出を試してみる。割り込み設定レジスタ(INTSU)でFBINT(Front/Back割り込み)とPLINT(Up/Down/Right/Left割り込み)を有効にし、割り込み処理で方向状態レジスタ(TILT)を読み取る。大雑把にはこんな手順だ。
上記の表が XYZ 値による割り込み発生条件だ(MMA7660FC Data Sheet から引用)。
TILT での方向状態値もこの割り込みがトリガになっているようで、条件が解消されても別の条件による変更がない限りは前の値が維持される。
XY による方向状態値(TILT:Pola)と Z のそれ(TILT:BaFro)は独立した値となっているために連続動作では現在の方向がTILTだけでは特定できないことになる。
これを解決するには状態を検出した後に一旦スタンバイモードにすれば良い。
スタンバイモードからアクティブモードになった時点で上記の条件を満たさない場合には TILT:Pola および TILT:BaFro は不定を示す値となる。
[2012.07.03 追記]
最近になって mbed コミュニティのコードに MMA7660FC 用のライブラリがアップされた。これを見るとやはり同様にシングルバイトの i2c API を使用している。
[2013.03.20 追記]
今更ながらコードを公開。http://mbed.org/users/masato/code/MMA7660/
おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。