- Bei der Suche nach einer App für die Teilnahme an der „100 Push-ups am Tag Challenge“ des UK Cancer Centre entstand die Idee, selbst etwas Spannendes zu bauen, das Liegestütze zählt
- Erkundung des Core Motion Frameworks von iOS
- Bei der Suche nach einer Möglichkeit, Sensordaten zu nutzen, fiel die Entscheidung auf
CMHeadphoneMotionManager, um Bewegungsdaten der AirPods zu verwenden
- Core Motion liefert Daten von Beschleunigungsmesser, Gyroskop und Magnetometer
- Es ist nützlich für genaue und zuverlässige Messungen von Bewegung und Ausrichtung
- Für den Zugriff auf die Daten sind aus Datenschutzgründen Benutzerberechtigungen erforderlich
- Überlegungen zum Einsatz von AI
- Es gibt bereits viele Apps, die Frameworks wie ARKit verwenden
- Stattdessen wurde entschieden, dass AI bei der Umsetzung der Idee helfen könnte
- Ein auf Core Motion trainiertes GPT wurde genutzt, um Fragen in natürlicher Sprache zu stellen und Lösungen zu erhalten
- Entwurf der App-Architektur
- Motion Manager: streamt Sensordaten und verarbeitet Sensor-Updates des Geräts
- Pushups Detector: analysiert die gestreamten Daten, erkennt Liegestütze anhand vordefinierter Schwellenwerte und zählt sie
- SwiftUI View: bietet eine reaktive UI, die sich in Echtzeit aktualisiert, während der Nutzer Liegestütze macht
- Implementierung des Motion Managers
- Über das Delegate-Pattern wird auf aktualisierte Werte zugegriffen
CMHeadphoneMotionManager wird verwendet, um Device-Motion-Daten abzurufen
- Mit
startUpdates() und stopUpdates() werden Sensor-Updates gestartet und gestoppt
- Aktualisiert
pitch und accelerationY und benachrichtigt das Delegate
- Implementierung des Pushups Detector
- Einführung des Konzepts einer „Session“, um die Analyse des Datenstroms zu starten und zu stoppen
- Rohdaten werden interpretiert, um die Haltung des Nutzers und das Vorliegen eines Liegestützes zu bestimmen
- Schwellenwerte werden verwendet, um die Abwärts- und Aufwärtsbewegung eines Liegestützes zu erkennen und den Zähler zu erhöhen
- Implementiert
MotionManagerDelegate, um Änderungen bei Beschleunigung und Pitch zu verarbeiten
- Einfache View mit SwiftUI implementieren
- Besteht aus Start-/Stopp-Buttons für die Session und einer großen Zahl zur Anzeige der Liegestütz-Anzahl
- Zusätzlich wurde Text eingefügt, der anzeigt, ob die Haltung des Nutzers korrekt ist
- Datenanalyse und Visualisierung
- Mit Swift Charts wurden rohe Sensordaten visualisiert und Muster identifiziert
- In der Beschleunigung auf der Y-Achse wurden die Muster für die Abwärtsbewegung (-1.0) und Aufwärtsbewegung (+0.5) eines Liegestützes erkannt
- Durch praktische Tests wurden die Schwellenwerte angepasst, um die Genauigkeit zu verbessern (+0.4, -0.7)
- Der Reiz von Echtzeit-Tracking
- Wenn man die AirPods trägt und auf Start drückt, wird die Anzahl der Liegestütze automatisch aktualisiert
- Funktioniert ohne Interaktion des Nutzers
- Was aus dem Projekt gelernt wurde
- Die Bedeutung früher Validierung und iterativer Verbesserungen wurde erneut bestätigt
- Es zeigte sich, wie viel Spaß und Zufriedenheit es bringt, etwas Sinnvolles zu bauen
- Es gibt noch Verbesserungsmöglichkeiten, etwa bei der UI und beim Zählen von Liegestützen über mehrere Tage hinweg
- Durch Audio-Feedback über die AirPods wurde die User Experience zusätzlich zur visuellen Oberfläche verbessert
- Fazit
- Durch die Kombination von Core Motion, SwiftUI und AI wurde innerhalb von 24 Stunden eine App entwickelt, die Fitness-Tracking eine neue Dimension verleiht
- Wichtig ist die Herausforderung, neue Technologien auf Alltagsprobleme anzuwenden
2 Kommentare
Da merkt man wieder, wie großartig die Galaxy Watch ist, die sogar die Wiederholungen bei den drei Grundübungen zählt.
Vor ein paar Jahren hatte ich mal eine Push-up-Challenge-App namens Thirty entwickelt, die den Näherungssensor des iPhones nutzt – offenbar geht das auch mit AirPods. Seit der Einführung der Dynamic Island scheint die Genauigkeit des Näherungssensors allerdings etwas nachgelassen zu haben ;_;