一昨日発売の加速度センサを使ってみた。計測範囲を±6Gか±1.5Gか選択できる。450円。
3軸加速度センサモジュール MMA7361: センサ一般 秋月電子通商 電子部品 ネット通販

ピンだけ自分ではんだづけする必要がある。
秋月の通販ページにデータシートもある。


今まで日本でよく使っていたKXM52という加速度センサが1000円に値上げされて後継のKXR94が同じ850円で入ってきて、秋月から私達に「もうKXM52オワコンだから新しいのに移行してね」というシグナルが送られてきている。

MMA7361はKXR94のさらに半額で安いし、出力も安定してて良いと思う。


回路

マイコンは千石で買ったArduino Micro。
x,y,zをアナログ出力する3軸加速度センサなので、analog input 0,1,2に接続した。
MMA7361+ArduinoMicro


加速度センサ MMA7361の各ピンの役割



VDDピン
3Vを入れる

GNDピン
0Vに接続

gSピン
g-selectピン。計測範囲を±6Gか±1.5Gか選択できる。LOWかオープン状態で高感度な±1.5G、HIGH(3Vでいい)を入れるとレンジの広い±6Gになる。

0gピン
重力ゼロ、つまり自由落下している時にHIGHを出力するらしい。デフォルトでLOW。今回は試していない。

STピン
平らな場所に置いてHIGHにするとx=0, y=0, z=1Gとして自動キャリブレーションしてくれるらしい。今回は試していない。

SLピン
sleepピン。HIGHの時にスリープ解除なので、使うときは3Vを入れるか、Arduinoからdigital writeを入れてやる必要がある。LOWかオープン状態でsleepモードになる。
名前からしてHIGHにしたらsleepになると思って、30分ぐらい悩んだけどデータシート読み直したらHIGHでスリープ解除って書いてあった。そういう機能ならenableとかwakeupとかONとかdisable sleepって名前にしろよと思った。


加速度センサとArduinoの動作電圧

動作電圧は2.2~3.6Vまで。!!!5Vを入れてはならない!!! Arduinoには3V出力ピンがあるのでそれを加速度センサの電源電圧として使う。

Arduinoで3Vのセンサーを使う時は、3Vピンと隣のRFピンを接続しておかないと正しいアナログ入力値が計測ができない。
RFはAVRマイコンのAREFピン(アナログ変換器基準電圧ピン)で、これに入っている電圧を最大値1023として、6つのanalog inputピンの電圧が計測される。

この部分



プログラム

例によってArduino Firmata on Rubyを使った。

% gem install arduino_firmata

arduino_accel.rb
#usr/bin/env ruby
require 'rubygems'
require 'arduino_firmata'

arduino = ArduinoFirmata.connect

loop do
acc = {
:x => arduino.analog_read(0), # x,y,z軸
:y => arduino.analog_read(1),
:z => arduino.analog_read(2)
}
p acc
arduino.digital_write(12, acc[:z] > 512 ) # 表の時にLED点灯、裏返した時は消灯
sleep 0.1
end


実行。センサはgSピンをオープンにして±1.5Gの高感度モードにした。
% ruby arduino_accel.rb
{:x=>525, :y=>531, :z=>714}
{:x=>527, :y=>534, :z=>712}
{:x=>528, :y=>533, :z=>712}
{:x=>527, :y=>532, :z=>710}
{:x=>525, :y=>532, :z=>713}
{:x=>528, :y=>532, :z=>711}
{:x=>525, :y=>533, :z=>711}
{:x=>526, :y=>531, :z=>713}
{:x=>525, :y=>534, :z=>714}
z軸だけ多いのは重力加速度。約180(約0.58V)ぐらいGで増える。基盤を裏返したらz = 350ぐらいになった。