Zu den Grundlagen der Verwendung des Moduls siehe den Beitrag 3-Achsen Beschleunigungs- und Lagesensor. In dem folgenden Versuch wird die Library Arduino-MPU6050 verwendet.
#include <LiquidCrystal.h>
#include <Wire.h>
#include <MPU6050.h>
#define PIN_RS 12
#define PIN_EN 11
#define PIN_D4 2
#define PIN_D5 3
#define PIN_D6 4
#define PIN_D7 5
#define PIN_LED 8
#define THRESHOLD_MIN -5
#define THRESHOLD_MAX 1
MPU6050 mpu;
LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_D4, PIN_D5, PIN_D6, PIN_D7);
bool isEarthquake = false;
void setup()
{
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
// Initialize MPU6050
while (!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {
Serial.println("Invalid MPU6050 sensor!");
delay(500);
}
mpu.setThreshold(3);
}
void loop()
{
Vector normGyro = mpu.readNormalizeGyro();
// output data for "SerialPortPlotter"
Serial.print("$");
Serial.print(normGyro.XAxis);
Serial.print(" ");
Serial.print(normGyro.YAxis);
Serial.print(" ");
Serial.print(normGyro.ZAxis);
Serial.print(";");
if (normGyro.XAxis > THRESHOLD_MAX ||
normGyro.XAxis < THRESHOLD_MIN && normGyro.YAxis > THRESHOLD_MAX ||
normGyro.YAxis < THRESHOLD_MIN && normGyro.ZAxis > THRESHOLD_MAX ||
normGyro.ZAxis < THRESHOLD_MIN) {
if (isEarthquake == false) {
isEarthquake = true;
digitalWrite(PIN_LED, HIGH);
lcd.print("EarthQuake!");
}
} else {
if (isEarthquake == true) {
digitalWrite(PIN_LED, LOW);
lcd.clear();
}
isEarthquake = false;
}
delay(10);
}
Die graphische Echtzeit-Auswertung der Daten erfolgt hier mit dem Programm Serial Port Plotter, welches die Daten über den COM-Port empfängt und grafisch anzeigt.
zurück