Mittwoch, 24. Februar 2010

Accelerometer - Beschleunigungsmesser für Handys


Das ist der erste Teil einer fünfteiligen Serie, in der ich euch meine J2ME-Anwendungen für Handys (speziell Sony Ericsson Geräte) vorstellen werde.
Nachdem ich festgestellt hatte, das mein altes Handy (ein Sony Ericsson K850i) Bilder automatisch dreht, wenn ich das Gerät kippe, fragte ich mich wie das genau funktioniert und habe durch Internetrecherche erfahren, dass darin ein Beschleunigungssensor verbaut ist. Dieser liefert Beschleunigungswerte in x-, y-, und z-Richtung, die über eine Java-API (JSR256) ausgelesen werden können. Also fing ich an meine erste J2ME-Anwendung zuschreiben, die zugleich meine erste Java-Anwendung überhaupt war.
Dabei entstand der Accelerometer, ein Beschleunigungsmesser für Handys, der die x-, und y-Komponente der auf das Gerät wirkende Beschleunigung in einem Polarkoordinatensystem darstellt. Oben links werden zusätzlich die Werte in m/s^2 angeeigt. Damit ist es z.B. möglich die Beschleunigung beim Autofahren, beim Start im Flugzeug oder die Erbeschleunigung (in unseren Breiten ca. 9,81 m/s^2) zu messen.
Für die Entwicklung habe ich das Sony Ericsson SDK und die Mobility-Version von Netbeans verwendet.
Hier ist noch eine kurze Video-Demonstration des Accelerometers:

Das Programm funktioniert logischerweise nur auf Handys mit Beschleunigungssensor (heutzutage sind die meisten damit ausgerüstet), auf denen mindestens die Java-Plattform 8 läuft. Speziell das JSR 256 (Mobile Sensor API) muss unterstützt werden. Getestet wurde es mit einem der ersten Sony Ericsson Handys, das diese Bedingungen erfüllt, dem K850i. Außerdem getestet auf dem W980 und C902, mit neueren Geräten sollte es keine Probleme geben.
Wenn euer Handy diese Anforderungen erfüllt, könnt ihr euch die Anwendung hier herunterladen und über Bluetooth oder USB auf das Gerät laden. Viel Spaß damit!

Bei Interesse veröffentliche ich auch gerne Ausschnitte des Java-Quellcodes.

3 Kommentare:

  1. Könntest du bitte den Quellcode für private Entwickler zu Verfügung stellen?
    Würde gerne die ansteuerung des Lagesensors lernen

    AntwortenLöschen
  2. Ich habe vor bald einen Blog-Post zu veröffentlichen, der dieses Thema behandelt. Ist das OK für dich?
    Wenn du's eilig hast, kann ich dir meinen Code auch jetzt schon per E-Mail schicken.
    Ich verwende eine eigene Klasse um eine Verbindung mit dem Sensor aufzubauen, seine Daten auszulesen etc.
    Benutzt wird diese dann so:
    if (AccelerationSensor.isSupported()) {
    sensor = new AccelerationSensor();
    sensor.setCallback(this);
    sensor.setBufferSize(2);
    sensor.setTimeout(20);
    sensor.start();
    }

    Treffen neue Sensordaten ein, wird die Methode public void accelerate(AccelerationSensor sensor) des übergebenen Callback-Objekts (hier: this) aufgerufen und über sensor.getX() etc. die eigentlichen Beschleunigungswerte ausgelsen.

    AntwortenLöschen
  3. Hi Dominique,

    deine Anwendungen sind ziemlich cool. Ich versuche mich auch gerade am accelerometer. Leider habe ich´s noch nicht geschafft den Sensor vom K850i anzusprechen. Könntest du mir evtl. die sourcen von onkidonki schicken (playpolice[at]web.de)?
    Danke schon mal im Vorraus!
    Gruß Micha

    AntwortenLöschen