振動検知の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は一回の振動が来た時、入になります。
Post a Comment