概要
ADXL345 という加速度センサを Arduino の試してみました
ADXL345 は X, Y, Z 軸方向に対してどれくらい加速しているかを計測するための小型モジュールです
環境
- Arduino IDE 1.6.7
- ADXL345
ADXL345ライブラリ のインストール
http://wiki.androciti.com/download/SNS-1004/Adxl345.rar
からライブラリをダウンロードしてして解凍します
解凍してできた「Adxl345」を /path/to/Arduino/libraries/Adxl345 として配置します
インストールはこれで完了です
配線
Arduino と ADXL345 を配線しましょう
ADXL345 はピンヘッダがハンダづけされていないので、ハンダごてを使ってハンダしてください
配線の全体図は以下の通りです
綺麗に写真が撮れたのでたぶん説明不要だと思いますが
- Arduino Analog5 ピン -> ADXL345 SCL
- Arduino Analog4 ピン -> ADXL345 SDA
- Arduino 3.3V ピン -> ADXL345 VDD
- Arduino GND ピン -> ADXL345 GND
- ADXL345 GND -> ADXL345 SDO
- ADXL345 VDD -> ADXL345 Vs
になります
スケッチ作成
配線できたらスケッチを作成しましょう
今回は ADXL345 ライブラリに付属しているサンプルをそのまま使います
#include <Wire.h>
#include <ADXL345.h>
ADXL345 adxl;
void setup(){
Serial.begin(9600);
adxl.powerOn();
//set activity/ inactivity thresholds (0-255)
adxl.setActivityThreshold(75); //62.5mg per increment
adxl.setInactivityThreshold(75); //62.5mg per increment
adxl.setTimeInactivity(10); // how many seconds of no activity is inactive?
//look of activity movement on this axes - 1 == on; 0 == off
adxl.setActivityX(1);
adxl.setActivityY(1);
adxl.setActivityZ(1);
//look of inactivity movement on this axes - 1 == on; 0 == off
adxl.setInactivityX(1);
adxl.setInactivityY(1);
adxl.setInactivityZ(1);
//look of tap movement on this axes - 1 == on; 0 == off
adxl.setTapDetectionOnX(0);
adxl.setTapDetectionOnY(0);
adxl.setTapDetectionOnZ(1);
//set values for what is a tap, and what is a double tap (0-255)
adxl.setTapThreshold(50); //62.5mg per increment
adxl.setTapDuration(15); //625μs per increment
adxl.setDoubleTapLatency(80); //1.25ms per increment
adxl.setDoubleTapWindow(200); //1.25ms per increment
//set values for what is considered freefall (0-255)
adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment
adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment
//setting all interupts to take place on int pin 1
//I had issues with int pin 2, was unable to reset it
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 );
//register interupt actions - 1 == on; 0 == off
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);
}
void loop(){
//Boring accelerometer stuff
int x,y,z;
adxl.readAccel(&x, &y, &z); //read the accelerometer values and store them in variables x,y,z
// Output x,y,z values - Commented out
//Serial.print(x);
//Serial.print(y);
//Serial.println(z);
//Fun Stuff!
//read interrupts source and look for triggerd actions
//getInterruptSource clears all triggered actions after returning value
//so do not call again until you need to recheck for triggered actions
byte interrupts = adxl.getInterruptSource();
// freefall
if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
Serial.println("Free-fall detected."); //自由落下を検出しました。
//add code here to do when freefall is sensed
}
//inactivity
if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){
Serial.println("No motion detected."); //動きを検出しなかった。
//add code here to do when inactivity is sensed
}
//activity
if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
Serial.println("Motion detected."); //動きを検出しました。
//add code here to do when activity is sensed
}
//double tap
if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){
Serial.println("Double tap detected."); //ダブルタップを検出しました。
//add code here to do when a 2X tap is sensed
}
//tap
if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
Serial.println("Single tap detected."); //シングルタップを検出しました。
//add code here to do when a tap is sensed
}
}
ファイル -> スケッチの例 -> Adxl345 -> ADXL345_Example
にあるものをそのまま使っています
不要なコメントは削除しています
あとはコンパイルして Arduino に書き込みましょう
動作確認
シリアルモニタを開いてスケッチを書き込みましょう
ブレッドボードを持ち上げて動かしてみると以下のような感じでシリアルモニタに表示されると思います
Single tap, Double tap はブレッドボードをコンコンと叩けば検出されます
Motion detected と No Motion detected はどの方向でもいいので動かしたり止めたりすれば簡単に出ると思います
一番出すのが難しいのが Free-fall detected. でした
ADXL345 のボード上に軸の方向が書いているのですが、 Y 軸方向に勢いよく加速すると発生させることができます
読んで字のごとく自由落下を検知しているかどうかなので、配線している Arduino とブレッドボードがある状態だと中々に難しいです
最後に
加速度センサを Arduino で試してみました
同じように角速度センサ(ジャイロセンサ)も試してみたいなと思っています
0 件のコメント:
コメントを投稿