personal beat wurde im Rahmen der Vorlesung Pervasive Computing als interdisziplinäres Projekt an der Hochschule Coburg von den Informatikern Michael Koch und Christian Schelter, sowie von den Designerinnen Melanie Wittig und Barbara Märzendorfer umgesetzt. Hierbei war das Augenmerk auf einer App gelegen, welche einen Benutzer beim Sport durch Sensoren überwacht und unterstützt. Aus dieser Anforderung ist eine App entstanden, welche den Puls eines Sporttreibenden überwacht und versucht diesen aufgrund der aktuell spielenden Musik aktiv zu beeinflussen.

Konzept

personal beat Konzept

Die App besteht im Wesentlichen aus zwei Hauptkomponenten, der Activity Program und dem Music Manager. Die Activity Program dient der Datenerfassung und der Interaktion mit dem Benutzer. Wird ein Trainingsprogramm gestartet, so werden kontinuierlich Sensordaten (GPS-Position, Puls und Sauerstoffsättigung) erfasst und in einer Datenbank gespeichert. Das interdisziplinäre Projekt personal beat umfasste auch die Gestaltung eines Pulsoximeters am Handgelenk und eines Kopfhörers (siehe obenstehende Grafik) durch die Designerinnen Melanie Wittig und Barbara Märzendorfer, wobei sich dieser Artikel ausschließlich mit der App personal beat befasst, welche durch die Informatiker Michael Koch und Christian Schelter entwickelt wurde. Die erfassten Sensordaten werden zudem an den Music Manager weitergeleitet, dessen Aufgabe es ist, die passende Trainingsmusik zu spielen. Ist der Puls geringer als der optimale Trainingspuls, wird antreibende Musik gespielt, ist der Puls zu hoch, wird beruhigende Musik gespielt. Die verfügbaren Lieder werden in einer speziell erweiterten XSPF-Wiedergabeliste bereitgestellt (siehe unten). Der optimale Trainingspuls kann entweder in den Einstellungen manuell angegeben oder durch die App berechnet werden. Zudem kann in den Einstellungen festgelegt werden, ob die aktuellen Positionsdaten aufgezeichnet werden sollen, um die gelaufene Strecke mit Hilfe von Google Maps zu visualisieren. Während eines Telefonats wird die Musikwiedergabe automatisch pausiert, bis das Telefonat beendet ist.

Implementierte Funktionen

...

Programmauswahl

Dem Benutzer stehen drei Trainingsprogramme zur Verfügung.

...

Programm: Joggen

Alle Programme sind nach dem gleichen Schema aufgebaut. Die Oberfläche ähnelt einem normalen Musicplayer und zeigt zusätzlich den gemessenen Puls, sowie die Sauerstoffsättigung und den Status der Smartphonebatterie an. Welche Musik gespielt wird kann in einer speziellen Wiedergabeliste festgelegt werden (siehe unten).

...

Historie

Die App speichert automatisch sämtliche Trainingsdaten in chronologischer Reihenfolge ab. Durch einen Klick auf einen Eintrag lassen sich die Details anzeigen.

...

Detailansicht

In der Detailansicht werden die erfassten Daten aus einem Trainingslauf angezeigt. Hat der Benutzer in den Einstellungen zugestimmt, dass die Wegstrecke aufgezeichnet werden soll, wird diese auf einer Landkarte visualisiert.

Relationales Datenmodell

Einstellungen (Preferences)

personal beat Einstellungen

Android stellt für die Speicherung von Anwendungseinstellungen einen eigenen Mechanismus (vgl. Windows Registry) bereit, dessen Einsatz als "guter Stil" nahegelegt wird. Die Verwendung dieser Funktionalität hat für Anwendungsentwickler den Vorteil, dass die komplette Verwaltung, sowie die Visualisierung der Konfigurationsdaten ohne eigenen Programmieraufwand automatisch abgewickelt wird. Aus Benutzersicht ergibt sich der Vorteil, dass die meisten Apps und auch das Betriebssystem diesen Mechanismus einsetzen und somit die Einarbeitung erleichtert wird.

In den Einstellungen werden folgende Werte gespeichert:

  • Diese Tabelle enthält die Grundeinstellungen des Benutzers, wie z.B. dessen Namen, Geschlecht und Alter.
  • Android unterstützt zu einem Zeitpunkt nur eine aktive Benutzersitzung, weshalb Messwerte und Konfigurationsparameter automatisch dem Benutzer zugeordnet werden können, der gerade am Smartphone angemeldet ist.
  • Die Ermittlung des gerade angemeldeten Benutzers erfordert das Privileg GET_ACCOUNTS.
  • Es ist unwahrscheinlich, dass mehr als ein Benutzer die App verwendet, da ein Smartphone in aller Regel genau einem Benutzer fest zugeordnet ist. Das Datenmodell ist aber in dieser Form auch für mehrere Benutzer ausgelegt, falls sich das Nutzungskonzept von Smartphones in den nächsten Jahren ändern sollte.
  • Der Benutzername ist eine Pflichtangabe.

SQLite Datenbank

personal beat Datenbank

Tabelle: TA_RUN

  • Diese Tabelle enthält die Ablaufdaten einer jeden Programmausführung des Benutzers. Es wird der Start- und Endzeitpunkt des Programms (Joggen, Radfahren, etc.) erfasst.
  • Für jede Programmausführung wird eine eindeutige, fortlaufende Identifikationsnummer automatisch beim Anlegen erzeugt, welche den PRIMARY-KEY darstellt.
  • Die Identifikationsnummer des Benutzers ist ein FOREIGN-KEY.
  • Der Programmname ist eine Pflichtangabe.
  • Der Endzeitpunkt muss nach dem startzeitpunkt liegen.

Tabelle: TA_SAMPLE

  • Diese Tabelle enthält die aktuellen Sensormesswerte zu einem bestimmten Zeitpunkt während einer Programmausführung.
  • Für jede Sensorabfrage wird eine eindeutige, fortlaufende Identifikationsnummer automatisch beim Anlegen erzeugt, welche den PRIMARY-KEY darstellt.
  • Die Identifikationsnummer des aktuell ausgeführten Programms ist ein FOREIGN-KEY.
  • Die aktuelle Uhrzeit ist eine Pflichtangabe.
  • Sensordaten können NULL sein, falls ein gewisser Sensor nicht angesprochen werden kann.

Wiedergabeliste

Die App nutzt eine speziell erweiterte XSPF-Wiedergabeliste als Grundlage, um darüber zu entscheiden, welches Lied in welcher Situation gespielt werden soll und wann sich ein flüssiger Übergang zum nächsten Lied anbietet.

Das XSPF-Format wurde deshalb gewählt, weil es von den meisten gängigen Music Playern unterstützt wird und beliebig durch programmspezifische Informationen erweitert werden kann. Somit muss der Anwender nicht exklusiv für personal beat eine Wiedergabeliste definieren und pflegen, sondern kann diese auch mit anderen Playern abspielen.

Spezifikation der Wiedergabeliste (Erweiterung von XSPF Version 1)

Element NS1 Mul. Parse Req.2 Text Value Type Default Description
playlist xspf 1 all yes - (nothing) Read XSPF version 1 specification.
title xspf 0..1 all yes anyURI (emptyString) Read XSPF version 1 specification.
creator xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
annotation xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
info xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
location xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
identifier xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
image xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
date xspf 0..1 all no dateTime (minDate) Read XSPF version 1 specification.
license xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
attribution xspf 0..1 none no - (nothing) Read XSPF version 1 specification.
link xspf 0..* none no - (nothing) Read XSPF version 1 specification.
meta xspf 0..* none no - (nothing) Read XSPF version 1 specification.
extension xspf 0..* none no - (nothing) Read XSPF version 1 specification.
trackList xspf 0..1 all yes - (emptyList) Read XSPF version 1 specification.
track xspf 0..* all yes - (nothing) Read XSPF version 1 specification.
title xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
creator xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
annotation xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
info xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
location xspf 0..* first yes anyURI (emptyString) Read XSPF version 1 specification.
identifier xspf 0..* first no anyURI (emptyString) Read XSPF version 1 specification.
album xspf 0..1 all no anyURI (emptyString) Read XSPF version 1 specification.
trackNum xspf 0..1 all no nonNegativeInteger 0 Read XSPF version 1 specification.
duration xspf 0..1 all no nonNegativeInteger 0 Read XSPF version 1 specification.
link xspf 0..* none no - (nothing) Read XSPF version 1 specification.
meta xspf 0..* none no - (nothing) Read XSPF version 1 specification.
extension xspf 0..* first3 no - (nothing) Read XSPF version 1 specification.
musicClass pb 0..1 all no {FAST,NORMAL,SLOW} NORMAL When shall we play the music?
breakMode pb 0..1 all no {EVER,NEVER,BREAKPOINTS} EVER When shall we stop the music?
breakPoints pb 0..1 all no - (emptyList) When can we stop the music?
breakPoint pb 0..* all no nonNegativeInteger 0 Time in milliseconds after start.

XSPF Version 1 Spezifikation: http://xspf.org/xspf-v1.html

1 XSPF: Namespace-URI: http://xspf.org/ns/0/ Prefix: xspf | personal beat: Namespace-URI: http://koch-coburg.de/projects/pb/v1/ns/ Prefix: pb

2 Für die App personal beat wird mindestens jeweils ein Element benötigt, auch wenn durch die Multiplizität kein Element zwingend vorgeschrieben ist

3 Selektiert nur das erste <extension>-Element mit dem Attributwert "http://koch-coburg.de/projects/pb/v1" für das Attribut "application"

Beispiel einer XSPF-Wiedergabeliste

personal beat XSPF-Wiedergabeliste

Benötigte Zugriffsrechte

Zugriff auf den GPS-Sensor
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
Zugriff auf die Bluetooth-Schnittstelle
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
Aktuellen Benutzernamen ermitteln
android.permission.GET_ACCOUNTS
Zugriff auf Wiedergabelisten und Musikdateien auf der SD-Karte
android.permission.WRITE_EXTERNAL_STORAGE

Publikationen

[LINK] Videobeitrag vom Coburger Hochschulfernsehen

[LINK] Pressemitteilung der Hochschule Coburg

[PDF] Beitrag in affin - Das Forschungsmagazin der Hochschule Coburg 2013 (Seite 66f)

[LINK] Zeitungsartikel der Neuen Presse

[LINK] Veröffentlichung beim Informationsdienst Wissenschaft

[LINK] Veröffentlichung auf netzathleten.de

[LINK] Veröffentlichung auf crn.de

[LINK] Veröffentlichung auf femicare.de

[LINK] Veröffentlichung auf flat-is-smart.de

[LINK] Veröffentlichung auf "Entdecke Deutschland" (Auswärtiges Amt)

[PDF] Veröffentlichung im Newsletter Nr. 20 / 21.03.2013 der Deutschen Botschaft in Sofia (Deutsch)

[PDF] Veröffentlichung im Newsletter Nr. 20 / 21.03.2013 der Deutschen Botschaft in Sofia (Bulgarisch)