SnakeTrainer

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Der SnakeTrainer ist ein interaktives Snake-Spiel, das gleichzeitig die Reaktionszeit und den Muskelaufbau fördern soll. Die Steuerung erfolgt über zwei Handtrainer. Die Verarbeitung und das restliche Programm befindet sich auf einem Raspberry Pi 3.


Motivation

Die Motivation für unser Projekt war eine möglichst interessante Interaktion in Verbindung mit einer einfachen Spielidee. Daher haben wir uns auf der einen Seite für die Verwendung von Handtrainern entschieden, da diese eine überspitzte Form der physikalischen Eingabe darstellen. Auf der anderen Seite haben wir uns dafür entschieden eine einfache eigene Implementierung des bekannten Spiels Snake zu verwenden. Wir haben uns für Snake entschieden, da dieses Spiel relativ einfach auf unsere Eingabe anzupassen war und das Spielprinzip selbsterklärend ist.

Planung

Aufteilung des Projektes in einzelne Module: Eingabe, Verarbeitung, Ausgabe. In der Eingabe werden die Analogwerte eingelesen und durch einen ADC in Digitalwerte umgesetzt. Die Verarbeitung analysiert die eingelesenen Daten, normiert sie und übergibt das Ergebnis in Form einer Richtungsänderung der Ausgabe. Die Ausgabe ist das Snake-Spiel. Hier werden die Richtungsänderungen interpretiert.
SnakeTrainer Blockschaltbild.png

Umsetzung

Hardwareentwicklung

Da der Raspberry Pi 3 nicht über einen eigenen Analog-Digital-Wandler verfügt, haben wir uns für einen externen ADC, den MCP3008, entschieden.
Um die Schwierigkeit einstellen zu können verwenden wir ein handelsübliches Potentiometer. Der Analogwert des Potentiometers wird über den dritten Kanal eingelesen, die Werte der Handtrainer über Kanal eins und zwei. Die entwickelte Schaltung wurde auf einer Lochrasterplatine testweise aufgebaut und getestet.
SnakeTrainer Controller.jpg
Handtrainer als Controller

SnakeTrainer Platine oben2.jpg
Platine von oben

SnakeTrainer Platine unten.jpg
Platine von unten

Softwareentwicklung

Die entwickelte Software besteht aus zwei Programmen. Einem in Python programmiertem Tool welches für das Einlesen und Auswerten der Sensoren verantwortlich ist und dem Snakespiel welches in Processing realisiert wurde. Die beiden Programme können unabhängig voneinander laufen und kommunizieren über eine OSC Schnittstelle. Dies ermöglicht es die Eingabe bzw. Ausgabe modular zu wechseln.

Python Tool

Die Verarbeitung des Snake-Trainers wurde in Python implementiert. Eingelesen wurde der ADC über eine hardwareseitige SPI-Schnittstelle, hierbei wurde die Bibliothek “Adafruit_MCP3008” genutzt. In der Verarbeitung wird in regelmäßigen Abständen der aktuelle Widerstand an den drei verbundenen Kanälen abgefragt. Kanal eins und zwei haben aufgrund der eingeschränkten Biegung der Sensoren und dem Aufbau mit einem Spannungsteiler einen Wertebereich von 400 bis 500, der dritte Kanal mit dem Potentiometer hat den vollen Wertebereich von 0 bis 1023. Um die Schwellwertbildung im vollen Biegespektrum der Sensoren zu ermöglichen wird eine Anpassung der Werte des Potentiometers auf die Werte der Biegestreifen gemacht. Bei einer Überschreitung der Schwellwerte wird über OSC eine Nachricht an den Server des Spiels gesendet. Da das Spiel der Verarbeitung Informationen über den aktuellen Spielzustand mitteilt ist in der Verarbeitung ebenfalls ein Server implementiert. Beide Schnittstellen wurden mit der Bibliothek “PythonOSC” realisiert.

Snake Game (Processing)

Processing ist ein Framework mit welchem sich einfach und schnell grafische Anwendungen erstellen lassen. Unter der Webseite https://www.openprocessing.org/ sind etliche Beispiele zu finden. Darunter auch einige Snakespiele. Da unser Snake Spiel im Gegensatz zu den Beispielen aber nur eine Zweidimensionale Steuerung (links, rechts) nutzt und oft weitere Probleme auftraten wurde das Snake Spiel von Grund auf selber implementiert. Als Programmiersprache kommt Java zum Einsatz.

Für die OSC Schnittstelle wurden die Module oscP5 und netP5 eingebunden. Damit lassen sich leicht OSC Nachrichten empfangen und senden. Informationen zu diesem Modul sind unter http://www.sojamo.de/libraries/oscP5/ zu finden.

Das Spiel selber ist relativ simpel gehalten und besteht aus folgenden Komponenten:
SnakeUML.png

OSC Schnittstelle

Um die Kommunikation zwischen den beiden Programmen zu realisieren wurde die Schnittstelle OSC eingesetzt. Dabei wurden folgende zwei Addressen verwendet. \move und \gamestatus. Unter der Adresse move werden die Bewegungen left und right als Werte für die Steuerung vom Python Tool zum Spiel übermittelt. Um einen Befehl zum neustarten des Spiels realisieren zu können wurde der Einfachheit halber der Wert restart auch über die Adresse \move übertragen.

Um der Steuerung die Möglichkeit zu geben auf Situationen im Spiel zu reagieren werden unter der Adresse \gamestatus Informationen wie Verloren oder beenden des Programms vom Processing spiel an die Steuerung übertragen.

Ergebnis

Screenshots

Bildschirmfoto snake lost.png Bildschirmfoto snake play.png

Projektdaten

Materialliste

- Biegesensoren (10 kΩ) x2
- Potentiometer(100 kΩ)
- Lochrasterplatine
- Raspberry PI 3
- SD Karte (>= 8 GB)
- ADC (MCP3008)
- diverse Leitungen und Stecker
- Bildschirm
- Handtrainer x2
- Lochrasterplatine