MPU-6050 II. - Erschütterungssensor

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.

Verwendete Bauteile

Aufbau

Aufbau der Schaltung auf dem Breadboard

Sketch

#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.

Echtzeit-Anzeige der Werte mit SerialPortPlotter
Abb.: Echtzeit-Anzeige der Werte mit SerialPortPlotter
zurück