AniMemo

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

AniMemo ist ein interaktives Tier Memory für Kinder welches von Stefanie Steding, Jessica Zaviska und Franziska Bienefeld umgesetzt wurde.

Der Name setzt sich zusammen aus ANImal und MEMOry

Idee

Wir wollten ein alt bekanntes Spiel, ein Tiermemory, für Kinder noch interessanter gestalten und einen zusätzlichen Lerneffekt schaffen. Das heißt wir nehmen die typischen Memory Karten und verbinden diese mit aktueller Technik um ein interaktives Tiermemory zu bauen. Nun brauchen wir ein System, dass die aktuelle Kartenlegung aufnimmt und die Bildinformationen am Laptop verarbeitet, sodass bei einem Tierpärchen der spezifische Sound abgespielt wird. Somit lernt das Kind spielend nicht nur das Erscheinungsbild des Tieres kennen sondern auch seine Geräusche.

Hardware

Für das Spiel benötigen wir zunächst an technischen Geräten einen Rechner, die Lautsprecher des Laptops (für das Abspielen der Tiergeräusche) und eine Kamera mit Stativ, die am Rechner angeschlossen ist. Mithilfe des Stativs wird die Kamera über die Memory-Karten angebracht, so dass sie den Verlauf des Spiels stets aufnehmen und jede Veränderung dem Rechner bzw. der Software übermitteln kann. Desweiteren brauchen wir noch Memory-Karten mit Fiducial Marker, damit die Kamera die Karten eindeutig identifizieren kann.

Strukturdiagramm AniMemo.png Pfeil.png Animemo aufbau.jpg

Kartengestaltung

Entsprechend unserer Idee ein Memory-Spiel mit Tiermotiven umzusetzen, wählten wir folgende sechs Tierpaare: Hund, Katze, Pferd, Huhn, Schwein und Kuh.

Diese zwölf Karten sollten jeweils mittels Marker eindeutig gekennzeichnet werden. Dabei stellte sich die Frage, ob die Marker auf der Vorder- oder Rückseite angebracht werden sollen. Beide Optionen haben wir analysiert und gegenübergestellt, um die beste Lösung finden zu können.

Technisch gesehen hätte beides programmiert werden können, jedoch haben wir beim Testen festgestellt, dass es beim Aufdecken der Karten zu Problemen führt, wenn sich die Marker auf der Rückseite befinden.

Das Prinzip hierbei ist, dass die Software zunächst alle Karten über die Marker auf der Rückseite erkennt und sobald zwei Karten aufgedeckt werden, wird das fehlende Tierpaar identifiziert. Allerdings werden beim Aufdecken der Karten, aufgrund der Armbewegung, auch willkürlich andere Karten verdeckt, so dass die Kamera die falschen Karten als fehlend dem Programm übermittelt. Dies kann folglich zu einem falschen Ergebnis führen. Aus diesem ausschlaggebenden Grund haben wir uns entschieden, die Marker auf die Vorderseite zusammen mit den Tiermotiven anzubringen. Die Marker mussten dementsprechend verkleinert werden, damit sie die Tiermotive optisch nicht allzu sehr stören und den Platz wegnehmen.


Marker auf der Vorderseite:

+ kein Einprägen der Marker möglich

- Tiermotive mit Markern weniger schön


Marker auf der Rückseite:

+ Tiermotive ohne Marker schöner

- Einprägen der Marker möglich

- Probleme beim eindeutigen Erkennen der Marker

Animemo vorderseite.jpg Animemo rueckseite.jpg


Software

Zur Umsetzung unseres Projektes verwendeten wir Processing 3.0.1 (REV 0247), ReacTIVision 1.5, sowie die Minim 2.2.0 Bibliothek.

Bei der Umsetzung haben wir uns zuerst an die Beispiele gehalten, die beim Download von Processing enthalten waren.

So haben wir das Beispiel „Tuio Demo“ für unsere Zwecke umgeschrieben und umgewandelt. Die vorgefertigten Methoden waren dabei durchaus hilfreich, so besteht der Code beim Arbeiten mit ReacTIVision immer aus folgenden Methoden:

  •  void setup()
    hier geschieht das setup des Programms (z.B initialisieren von Variablen)
  •  void draw()
    hier wird alles geschrieben, was später zu sehen sein wird (z.B wenn man ein optisches Feedback haben möchte welche Marker gerade aufgedeckt sind)
  •  void addTuioObject( TuioObject tobj )
    Diese Methode wird immer dann aufgerufen, wenn ein neues Fiducial erkannt wird.
  •  void updateTuioObject (TuioObject tobj)
    Diese Methode wird immer dann aufgerufen, wenn sich ein Fiducial, das bereits erkannt wurde bewegt.
  •  void removeTuioObject (TuioObject tobj)
    Diese Methode wird immer dann aufgerufen, wenn ein Fiducial verschwindet.


Zu den Standard Methoden gehören noch weitere Methoden, die unbedingt enthalten sein müssen, sonst läuft das Programm nicht, allerdings wurden diese für unsere Anwendung nicht benötigt und sind daher weitgehend uninteressant.

Beim Programmieren haben wir zuerst die im Beispiel mitgelieferte Anzeige so umgeschrieben, dass nicht mehr die Marker ID der einzelnen Fiducials, sondern der Name des Tiers angezeigt wird, welches mit dem Fiducial verknüpft wurde.

Die Paar Erkennung geschieht nun folgendermaßen: jedes Mal wenn ein Fiducial umgedreht wird, wird in der addTuioObject() Methode die ID des Markers in eine Variable gespeichert. Sind zwei Karten umgedreht wird in der Methode checkPair() abgeglichen ob die beiden Karten ein Paar bilden oder nicht. Sollten beide Karten zusammengehören wird jeweils das Geräusch des Tieres gespielt. Wird kein Paar aufgedeckt, kommt eine „Verlierer Melodie“

Werden die Karten zurück gedreht, wird die Variable in der ihre ID gespeichert war zurück auf -1 gesetzt, so dass kein Abgleich mehr stattfindet.

Sollten alle 6 Paare gefunden worden sein, so wird durch die Methode checkWinning() eine „Gewinner Melodie“ ausgespielt.

Dazu ist noch zu sagen, dass alle Paare in einem boolean Array der Größe 6 gespeichert sind, dieses wird am Anfang komplett auf false gesetzt. Jedesmal wenn ein Paar umgedreht wird, wird an seiner Stelle im Array der Wert auf true gesetzt, so ist sichergestellt, dass die „Gewinner Melodie“ erst abgespielt wird, wenn tatsächlich sechs verschiedene Paare aufgedeckt wurden. Ist dies geschehen, wird das Array wieder auf false gesetzt, so dass das Spiel sofort von neuem begonnen werden kann.

zum Nachvollziehen bzw nach bauen: Quellcode

Links