Heim Der Blog Blog Details

Wie benutzt man Beschleunigungsmesser mit Arduino?

August 19 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Hier ist eine praktische, flufflose Anleitung zur Verwendung von Beschleunigungsmessern mit Arduino, die sowohl analoge (z. B. ADXL335) als auch digitale I²C-Sensoren (z. B. MPU-6050, ADXL345) abdeckt.

Hier ist eine praktische, flufflose Anleitung zur Verwendung von Beschleunigungsmessern mit Arduino, die sowohl analoge (z. B. ADXL335) als auch digitale I²C-Sensoren (z. B. MPU-6050, ADXL345) abdeckt.

Wie benutzt man Beschleunigungsmesser mit Arduino?

1) Sensor auswählen

  • Analog: ADXL335 (±3 g). Vorteil: einfache Verdrahtung. Nachteil: erfordert Kalibrierung & ADC-Berechnungen.

  • Digital (I²C):

    • MPU-6050 (Beschleunigung ±2/4/8/16 g + Gyro). Sehr verbreitet, viele Bibliotheken.

    • ADXL345 (nur Beschleunigung, ±2/4/8/16 g). Unterstützt Tap/Doppeltap, Aktivitäts-Interrupts.

Tipp: Falls später Neigung/IMU gebraucht wird → MPU-6050 nehmen (oder neuer ICM-20948).


2) Verdrahtung

Analog (ADXL335)

  • VCC → 3,3 V (manche Breakouts akzeptieren 3,3–5 V → Datenblatt prüfen)

  • GND → GND

  • X → A0, Y → A1, Z → A2

  • Optional: 0,1 µF Kondensator zwischen VCC und GND.

I²C (MPU-6050 / ADXL345)

  • VCC → 3,3 V oder 5 V (je nach Breakout mit Regler)

  • GND → GND

  • SDA → A4 (Uno/Nano), D20 (Mega)

  • SCL → A5 (Uno/Nano), D21 (Mega)

  • Viele Breakouts haben bereits Pull-Ups.


3) Arduino-Code

A) Analog (ADXL335) – Rohwerte in g

Einlesen über analogRead() auf A0/A1/A2, dann Offset & Skalierung berechnen (±1 g Kalibrierung).


B) I²C MPU-6050 – Beispiel

 

#include <Wire.h>

const uint8_t MPU = 0x68;

int16_t ax, ay, az;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1
  Wire.write(0);     // Wecken
  Wire.endTransmission();
}

void loop() {
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // ACCEL_XOUT_H
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 6, true);

  ax = Wire.read() << 8 | Wire.read();
  ay = Wire.read() << 8 | Wire.read();
  az = Wire.read() << 8 | Wire.read();

  float gx = ax / 16384.0;
  float gy = ay / 16384.0;
  float gz = az / 16384.0;

  Serial.print("g = [");
  Serial.print(gx, 3); Serial.print(", ");
  Serial.print(gy, 3); Serial.print(", ");
  Serial.print(gz, 3); Serial.println("]");

  delay(20);
}


C) I²C ADXL345 mit Adafruit-Bibliothek

 

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>

Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified();

void setup() {
  Serial.begin(115200);
  if(!accel.begin()){
    Serial.println("ADXL345 nicht gefunden");
    while(1);
  }
  accel.setRange(ADXL345_RANGE_2_G);
}

void loop() {
  sensors_event_t event;
  accel.getEvent(&event);

  float gx = event.acceleration.x / 9.80665;
  float gy = event.acceleration.y / 9.80665;
  float gz = event.acceleration.z / 9.80665;

  Serial.print("g = [");
  Serial.print(gx, 3); Serial.print(", ");
  Serial.print(gy, 3); Serial.print(", ");
  Serial.print(gz, 3); Serial.println("]");

  delay(20);
}


4) Neigungswinkel (Pitch/Roll)

 
float pitch = atan2(-gx, sqrt(gy*gy + gz*gz)) * 180.0 / PI;
float roll  = atan2( gy,  gz) * 180.0 / PI;

5) Tipps

  • Filterung: Gleitender Mittelwert (5–10 Samples) glättet Rauschen.

  • Abtastrate: 50–200 Hz für normale Bewegungen.

  • Kalibrierung: Sensor still auf Tisch legen → Null-Offsets messen. Jede Achse +1 g / −1 g messen → Skalierung berechnen.

Ampheo