http://playground.arduino.cc/Main/MPU-6050
The InvenSense MPU-6050 sensor contains
a MEMS accelerometer and a MEMS gyro in a single chip.
이 MPU-6050 센서는 포함한다.
a MEMs 가속도 센서 and MEMS 자이로 in a 싱글 칩에.
It is very accurate, as it contains
16-bits analog to digital conversion hardware
for each channel.
이건 매우 정확하다, as 그게 포함하면서
16비트 아날로그 to 디지털 변환 하드웨어
for 각 채널을 위해.
Therefor it captures the x, y, and z channel
at the same time.
따라서 이건 캡쳐한다. the x,y, and z 채널
at the 동시에.
The sensor uses the I2C-bus to interface
with the Arduino.
The MPU-6050 is not expensive,
especially given the fact that it combines
both an accelerometer and a gyro.
센서는 사용한다. the I2C버스 to 인터페이스하기위해
with the 아두이노.
The MPU-6050는 비싸지않다,
특히 주어져있다. the face가 that 그게 조합하는
both an 가속도 and a 자이로 둘다.
Also note that Invensense has combined the MPU-6050
with a magnetometer (compass)
in a single chip called MPU-9150.
또한 note that Invensense는 이미 조합했다. the MPU-6050
with a 자력계 (컴퍼스)
in a 싱글칩 불리는 MP-9150으로.
.
.
.
Short example sketch
The short example sketch is a very short sketch
and it shows all the raw values
(accelerometer, gyro and temperature).
It should work on Arduino Uno, Nano, Leonardo, and also Due.
짧은 예제 sketch는 매우 짧다.
and 이건 보여준다. all the raw 값들을
(가속도센서, 자이로 and 온도).
이건 should 작업해야한다. on Arduino Uno, Nano, Leonardo, and also Due에서.
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
// MPU-6050 Short Example Sketch
// By Arduino User JohnChi
// August 17, 2014
// Public Domain
#include<Wire.h>
const int MPU_addr=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup()
{
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
}
void loop()
{
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true);
// request a total of 14 registers
AcX=Wire.read()<<8|Wire.read();
// 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read();
// 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read();
// 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read();
// 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read();
// 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read();
// 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read();
// 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);
//equation for temperature in degrees C from datasheet
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
delay(333);
}
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
칼만필더란 ::: 평균치를 어림짐작해서 값을 산출하는것이다. 이때 위 아래로 튀는 값을 Noise로 간주한다. 크진않지만 평균치에 소폭 영향을 미치기도 한다.
#include<math.h>
#include<Wire.h>
struct GyroKalman
{
float x_angle, x_bias;
float p_00, p_01, p_10, p_11;
float Q_angle, Q_gyro;
float R_angle;
};
struct GyroKalman accX;
float accelAngleX = 0;
float accelAngleY = 0;
float accelAngleZ = 0;
byte buf[6];
int cnt = 0;
unsigned long lastread = 0;
static const float R_angle = 0.5; //.3 default
static const float Q_angle = 0.01; //0.01 (Kalman)
static const float Q_gyro = 0.04; //0.04 (Kalman)
const int lowW = -215;
const int highX = 221;
const int lowY = -215;
const int highY = 221;
const int lowZ = -215;
const int highZ = 255;
지진감지센서 (EarthQuake Click)
▼출처
https://www.mikroe.com/earthquake-click
SM-24 Geophone Element
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Accelerometers/SM-24%20Brochure.pdf
http://www.meoworkshop.org/seismic-sundays-1-hello-world/
Ardu-base 지진감지센서 (=SM-24)
블로그내 검색으로 "지진감지" 타이핑
http://www.instructables.com/id/Arduino-Frequency-Detection/
주파수 감지
보통은 Freqency를 내보내지만 여기선 입력으로 들어갔을때의 경우를 다룬다.