Header Ads

振動検知の3軸加速度センサADXL-345の使い方


Arduinoで3軸加速度センサーを使ってみましょう。振動検知の3軸加速度センサ、ADXL-345です。3軸の加速度を取り出すのは元より動かされたり、衝撃を受けたことを0,1で取り出すことができます。つまり、衝撃を受けた、受けてないがはっきりわかるわけです。











動作の様子



#0:ライブラリの導入

(androcitiさんよりhttp://goo.gl/hfJzg3)ADXL-345ライブラリを解凍して、ArduinoIDEのあるlibraryフォルダに入れる。

#1:配線を繋ぐ

I2C通信を使っていますので、必ずSCLはアナログ5番ピン、SDAはアナログ4番ピンに繋ぎます。他のアナログピンではダメです。また、5V、GNDはそのまま繋ぎます。


#2:ブロックを積む

コードブロックを使っていますので、ファイル(ADXL345.adp)を参照してください。


コードブロックは次のようになっています。

先にやっておく
  • [head] #include <Wire.h>
  • [head] #include <ADXL345.h>
  • [head] ADXL345 adxl;
  • [先にやっておく] Serial.begin(9600);   adxl.powerOn();    adxl.setActivityThreshold(75);   adxl.setInactivityThreshold(75);   adxl.setTimeInactivity(10);   adxl.setActivityX(1);   adxl.setActivityY(1);   adxl.setActivityZ(1);   adxl.setInactivityX(1);   adxl.setInactivityY(1);   adxl.setInactivityZ(1);   adxl.setTapDetectionOnX(0);   adxl.setTapDetectionOnY(0);   adxl.setTapDetectionOnZ(1);   adxl.setTapThreshold(50);   adxl.setTapDuration(15);   adxl.setDoubleTapLatency(80);   adxl.setDoubleTapWindow(200);   adxl.setFreeFallThreshold(7);   adxl.setFreeFallDuration(45);     adxl.setInterruptMapping( ADXL345_INT_SINGLE_TAP_BIT,   ADXL345_INT1_PIN );   adxl.setInterruptMapping( ADXL345_INT_DOUBLE_TAP_BIT,   ADXL345_INT1_PIN );   adxl.setInterruptMapping( ADXL345_INT_FREE_FALL_BIT,    ADXL345_INT1_PIN );   adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );   adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );     adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);   adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);   adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT,  1);   adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   1);   adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);
くりかえす
  • [ずっと] int x,y,z; adxl.readAccel(&x, &y, &z);  byte interrupts = adxl.getInterruptSource();
  • [ずっと] _ABVAR_1_Activity = adxl.triggered(interrupts, ADXL345_ACTIVITY) ;    _ABVAR_2_InActivity = adxl.triggered(interrupts, ADXL345_INACTIVITY) ;    _ABVAR_3_SingleTap = adxl.triggered(interrupts, ADXL345_SINGLE_TAP) ;    _ABVAR_4_DoubleTap = adxl.triggered(interrupts, ADXL345_DOUBLE_TAP) ;    _ABVAR_5_FreeFall = adxl.triggered(interrupts, ADXL345_FREE_FALL) ;

後は、振動が来た時にはActivityが入になります。InActivityは振動が止まった時、SingleTapは一回の振動が来た時、入になります。







Powered by Blogger.