Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Das i2c I2C Interface wurde ursprünglich von Phillips entwickelt um eine Kommunikation von einzelnen Komponenten zu ermöglichen. Manche Hersteller verwenden auch die Bezeichnung TWI Interface (Two-Wired-Interface). Wie der Name schon verrät nutzt das i2c Interface I2C Interface zwei Signalleitungen um mit der Peripherie zu kommunizieren. Eine Leitung ist dabei die Taktleitung (SCL) und die andere die Datenleitung (SDA). Beide Leitungen liegen mit einem Pullup Widerstand an VCC.

In letzter Zeit sind vermehrt Sensoren auf den Markt gekommen, welche das i2c I2C Interface nutzen. Vor allem Beschleunigungssensoren und Sensoren zur Abstandsmessung gehören dazu. Hier eine kleine Übersicht.

Beispiel

1x Arduino
1x MMA7455
2x Widerstand 4.7k

...

Der MMA7455L ist ein sehr günstiger Beschleunigungssensor von Freescale. Er wird über das i2c Interface I2C Interface angesprochen und kann auf drei verschiedenen Stufen (2g, 4g, 8g) betrieben werden. Um die Handhabung so einfach wie möglich zu machen existiert eine Library für Arduino und der Sensor kommt auf einem Breakout-Board.

Der Anscluss des Beschleunigungssensors (MMA 7455L) ist relativ einfach. Die i2c Schnittstelle verlangt lediglich zwei Leitungen (Analog4/SCL und Analog5/SDA) wovon eine die Clock bedient und eine die Daten. Um die Kommunikation zu gewährleisten müssen zusätzlich an die SCL und SDA Leitung jeweils ein Pullup Widerstand zu VCC (3.3V) eingefügt werden. Der Sensor läuft mit 2.4–3.7V weshalb wir ihn an dem 3.3V Ausgang des Arduino betreiben. GND wird wie gewohnt mit dem GND des Arduino verbunden.

Funktionen

MMA_7455
Diese Funktion instanziert die MMA_7455 Library und aktiviert die Wire Library, welche für die Kommunikation über i2c gebraucht I2C gebraucht wird.

initSensitivity(int)
Hier wird festgelegt, wie sensibel der Sensor reagieren soll. Dies hängt stark von der Nutzung des Sensors ab. Über die Variable kann die Sensibilität angegeben werden. Dabei gilt: 2=2g, 4=4g und 8=8g.

...

readAxis(char)
Hier wird der Sensor ausgelesen. Durch die Übergabe des entsprechenden Parameters (‘x’, ‘y’ oder ‘z’) wird die gewünschte Achse angesprochen.

Code Block
languagejavacpp
titleBeispiel MMA7455
collapsetrue
#include <Wire.h> //Include the Wire library
#include <MMA_7455.h> //Include the MMA_7455 library

MMA_7455 mySensor = MMA_7455(); //Make an instance of MMA_7455
char xVal, yVal, zVal; //Variables for the values from the sensor

void setup()
{
  Serial.begin(9600);
  // Set the sensitivity you want to use
  // 2 = 2g, 4 = 4g, 8 = 8g
  mySensor.initSensitivity(2);
  // Calibrate the Offset, that values corespond in
  // flat position to: xVal = -30, yVal = -20, zVal = +20
  // !!!Activate this after having the first values read out!!!
  //mySensor.calibrateOffset(5, 20, -68);
}

void loop()
{
  xVal = mySensor.readAxis(‘x’); //Read out the ‘x’ Axis
  yVal = mySensor.readAxis(‘y’); //Read out the ‘y’ Axis
  zVal = mySensor.readAxis(‘z’); //Read out the ‘z’ Axis
  Serial.print(xVal, DEC);
  Serial.print("\t");
  Serial.print(yVal, DEC);
  Serial.print("\t");
  Serial.println(zVal, DEC);
}

...