Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose22:flipperpublic:start

Dokumentation

von Cynthia Gaertner

Einleitung

Unser Robotik-Projekt ist an das Windows98 Pinballspiel angelehnt. Dabei handelt es sich um ein elektronisch unterstütztes Spiel, bei dem eine Kugel im Spielfeld mit Hilfe von Flipperarmen bewegt wird. Auf dem Spielfeld befinden sich verschiedene Sensoren und Hindernisse, die nicht nur die Bewegung der Kugel beeinflussen, sondern auch bei Berührung Licht-und Soundeffekte auslösen. Einige Sensoren lösen ergänzend dazu Spezialeffekte, wie in etwa das Blockieren oder Vertauschen der Flipperarme, sowie das Drehen des beweglichen Spielfeldteils, aus.

Das Ziel des Spieles ist es die Kugel solange wie möglich im Spielfeld zu behalten, und somit zu verhindern, dass sie hinter die Flipperarme fällt. Dabei sollen so viele Punkte wie möglich durch Berührung der Kugel mit den Hindernissen auf dem Spielfeld erzielt werden. Während des gesamten Spieles wird die aktuelle Punktzahl berechnet und auf einem LCD-Display ausgegeben.

Abbildung links: Spielfeld von vorne, Abbildung rechts: Spielfeld von oben

Aufbau

Das Grundgerüst

Der Flipper ist überwiegend aus Holz gefertigt. Er besteht aus einem Holzkasten mit einem angeschrägten Spielfeld. Auf dem Spielfeld befinden sich verschieden Hindernisse, auf die weiter unten näher eingegangen wird.

Die Flipperarme

Die Flipperarme sind im 3D-Druck entstanden. Sie werden durch zwei Taster, je einer links und rechts am Grundgerüst, angesteuert und mit Hilfe von Servo-Motoren nach oben bzw. unten bewegt.

Die elektronische Startvorrichtung

Die elektronische Startvorrichtung sorgt dafür, dass die Kugel nachdem sie hinter die Flipperarme gefallen ist zurück in die manuelle Startvorrichtung gelangt. Auch sie wird mit Hilfe eines Servo-Motors bewegt.

Die manuelle Startvorrichtung

Die manuelle Startvorrichtung besteht aus einer Feder. Wird diese durch Ziehen an der Vorrichtung gespannt und im Anschluss entspannt, so wird Energie von der Feder auf die Kugel übertragen und die Kugel nach oben ins Spielfeld gebracht.

Der Münzeinwurf

Der Münzeinwurf befindet sich seitlich am Grundgerüst. Er besteht aus einer LED und einem Fototransistor. Wird eine Münze über einen kleinen Spalt eingeworfen, so fällt diese zwischen LED und Fototransistor, sodass am Fototransistor eine Helligkeitsdifferenz entsteht. Diese wird vom Arduino registriert und der Start eingeleitet.

Zur Vereinfachung des Projektes wurde auf eine genaue Münzerkennung verzichtet.

Die Fototransistoren

Auf dem Spielfeld befinden sich mehrere Fototransistoren. Rollt eine Kugel über sie drüber, so entsteht auch hier eine Helligkeitsdifferenz. Auch diese wird vom Arduino erfasst. Es werden Punkte vergeben und Licht- und Soundeffekte erzeugt.

Eine Besonderheit stellt dabei der Fototransistor hinter den Flipperarmen dar. Wird dieser überrollt, so werden zwar auch Licht- und Soundeffekte erzeugt, aber auch der aktuelle Spieldurchlauf abgebrochen und ggf. der neue Spieldurchlauf eingeleitet oder das Spiel beendet.

Die Berührungssensoren

Die Berührungssensoren bestehen aus Aluminiumfolie und funktionieren ähnlich wie ein Plattenkondensator. Wird der Berührungssensor von der Kugel berührt, so treffen beide Aluminiumfolien aufeinander und es kommt zur Spannungsentladung. Diese wird vom Arduino registriert. Es werden Punkte vergeben und Licht- und Soundeffekte, sowie Spezieleffekte (wie z.B. das Blockieren bzw. Vertauschen der Flipperarme oder das Drehen des beweglichen Spielfeldteils) erzeugt.

Der Kreisel (beweglicher Spielfeldteil)

Der Kreisel wird mit Hilfe eines Servo-Motors gedreht. Wird der entsprechende Berührungssensor von der Kugel berührt, so wird ein Signal an den Servo-Motor gesendet, sodass dieser den Kreisel um 120° dreht.

Die Bande

Auf dem Spielfeld befindet sich eine kleine Bande. Diese besteht aus einem Gummiband und verändert die Bewegungsrichtung der Kugel. Ansonsten hat sie im Gegensatz zu den anderen Hindernissen keine weiteren Effekte.

Lichts-und Soundeffekte (Display, LEDs und Lautsprecher)

Für die Licht- und Soundeffekte haben wir mehrere LEDs und einen Lautsprecher im Flipper verbaut. Sobald Punkte erzielt werden leuchten die LEDs auf und das Mario Coin Theme wird gespielt. Aber auch zwei weitere Lieder haben wir in unseren Flipper integriert: Das Super Mario Theme, welches am Ende eines jeden Spieldurchlaufes gespielt wird, und das Tetris Theme, welches ertönt wenn ein neuer Highscore aufgestellt wurde. Wie das aussieht wird weiter unten unter Demonstration gezeigt.

Wir haben uns dazu entschieden, keinen SD-Kartenleser zum Auslesen von Musikdateien zu verwenden, stattdessen haben wir die Melodien selbst für den Arduino arrangiert und jeden Ton einzeln ins Programm eingebettet.

Ergänzt werden die Licht- und Soundeffekte durch den LCD-Display, der den Punktestand, aber auch einige Spielanweisungen ausgibt.

Der Arduino Nano

Um einen reibungslosen Spielablauf zu gewährleisten, ist der Arduino Nano ausschließlich für die Ansteuerung der Flipperarme zuständig. Er kontrolliert in Form einer sogenannten Schleife, ob einer der beiden Taster an den Außenseiten des Grundgerüstes gedrückt wurde. Wenn ja, so bewegt er den dazugehörigen Flipperarm nach oben. Falls nicht, so wird der Flipperarm in seine Ausgangsposition zurückgebracht.

Außerdem hat er zwei Kommunikationsschnittstellen mit dem Arduino Mega zum Auslösen der oben beschriebenen Spezialeffekte.

Der Arduino Mega

Der Arduino Mega stellt das Herzstück unseres Flippers dar. Er liest die Sensoren (Fototransistoren und Berührungssensoren) aus und steuert das gesamte Spiel. Des weiteren ist er für die Ermittlung des Punktestandes verantwortlich und speichert den bisher erzielten Highscore (Solange bis der Arduino Mega neu gestartet wird).

Elektronische Komponenten

Bauteile

Folgende Bauteile wurden im Flipper verbaut:

  • 4 Servo-Motoren
  • 2 Taster
  • 3 Berührungssensoren (Aluminiumfolie)
  • 5 Fototransistoren
  • 17 LEDs
  • 9 Widerstände
  • 1 Lautsprecher
  • 1 LCD-Display inkl. Adapter

Schaltpläne

Abb.: Verschaltung am Arduino Mega

Abb.: Verschaltung am Arduino Nano

Abb.: Kommunikation zwischen den beiden Arduinos

Spielablauf

Bevor das eigentliche Spiel beginnt, werden die einzelnen Komponenten des Flippers in ihre Ausgangsposition gebracht. Im Anschluss wird gewartet, bis eine Münze im Münzeinwurf erkannt wird. Erst dann wird die Kugel über die elektronische Startvorrichtung zur manuellen Startvorrichtung gebracht und kann mit Hilfe dieser ins Spielfeld gebracht werden.

Erst jetzt beginnt das eigentliche Spiel. Dieses ist in Form von zwei Schleifen aufgebaut. Die erste Schleife wird über den Arduino Nano gesteuert und überprüft kontinuierlich ob die Taster zum Bewegen der Flipperarme gedrückt werden. Wenn dies der Falls ist, werden die Flipperarme nach oben bewegt bzw. in dieser Position gehalten bis der Taster losgelassen wird.

Die zweite Schleife wird vom Arduino Mega gesteuert. Hier werden sämtliche Sensoren auf Aktivität geprüft. Findet eine Aktivität statt, d.h. wurde einer der Sensoren von der Kugel berührt, so werden Punkte dem aktuellen Punktestand hinzugefügt, der Punktestand wird auf dem Display ausgegeben und es werden Licht-und Soundeffekte erzeugt.

Eine Besonderheit stellen dabei die Erschütterungs- bzw. Berührungssensoren dar. Wird ein Berührungssensor von der Kugel ausgelöst, so wird einer der 3 Spezialeffekte eingeleitet: Blockieren bzw. Vertauschen der Flipperarme, sowie Drehen des beweglichen Spielfeldteils.

Eine weitere Besonderheit stellt der Fototransistor hinter den Flipperarmen dar. Wird dieser überrollt, so wird der aktuelle Spieldurchlauf beendet. Insgesamt hat man 3 Spieldurchläufe um so viele Punkte wie möglich zu erzielen. Wird der Fototransistor hinter den Flipperarmen dann zum dritten mal überrollt, so wird das Spiel beendet.

Dies wird noch einmal in folgendem Fließdiagramm verdeutlicht:

Demonstration

Die einzelnen Komponenten des Flippers sollen im Folgenden mit Hilfe von kurzen Videoaufnahmen kurz demonstriert werden.

Die Flipperarme

Die Arme können einzeln aber auch zusammen bewegt werden.

Die elektronische Startvorrichtung

Die Kugel wird zur manuellen Startvorrichtung transportiert.

Die manuelle Startvorrichtung

Die Feder wird manuell gespannt und wieder entspannt, sodass die Kugel ins Spielfeld gebracht wird.

Mario Coin Theme (Licht-und Soundeffekte)

Diese Melodie wird gespielt, sobald Punkte der aktuellen Punktzahl hinzugefügt werden.

Super Mario Theme (Licht-und Soundeffekte)

Diese Melodie wird gespielt, sobald einer der drei Spieldurchgänge beendet wurde.

Tetris Theme (Licht-und Soundeffekte)

Diese Melodie wird gespielt, wenn am Ende des Spiels die erzielte Punktzahl höher ist als der bisherige Highscore.

Technische Herausforderungen

Allgemein

Während der Projektarbeit mussten wir uns verschiedenen Herausforderungen stellen. Auf die wichtigsten Probleme soll an dieser Stelle noch einmal eingegangen werden. Dazu zählen:

  • Stärke der Flipperarme
  • Kommunikation der Arduinos
  • Erschütterungssensoren
  • Fototransistoren
  • Spielgenauigkeit/ Schnelligkeit der Arduinos

Stärke der Flipperarme

Normallerweise wird zum Bewegen der Flipperarme ein Flipperassembly genutzt, das ähnlich wie eine elektromagnetische Spule funktioniert. Da diese jedoch den finanziellen Rahmen gesprengt hätten, haben wir versucht die Flipperarme mit Hilfe von Servo-Motoren zu steuern. Die Servo-Motoren die uns zur Verfügung standen, waren leider nicht stark genug, um die Flipperarme schnell genug zu bewegen. Um die Schnelligkeit zu erhöhen haben wir deshalb versucht eine Zahnradübersetzung zu machen, aber auch diese ist leider nicht ausreichend. Ergänzend dazu haben wir mit der Neigung des Spielfeldes experimentiert, da dieses geneigt werden muss, damit die Kugel immer wieder nach unten rollt, jedoch nicht zu stark geneigt sein darf, damit die Flipperarme die Kugel nach oben bekommen.

Kommunikation der Arduinos

Für die Kommunikation zwischen mehreren Arduinos gibt es speziell dafür vorgesehene PINs. Da wir genau diese PINs jedoch für den LCD-Display benötigt haben, war eine direkte Kommunikation zwischen den Arduinos nicht möglich. Stattdessen haben wir uns ein anderes Konstrukt auf dem Breadboard einfallen lassen: Der Arduino Mega hat an dem von uns definierten Kommunikations-PIN ein Stromkreis mit einem Widerstand angeschlossen. Während der Arduino Nano die Spannung am Widerstand misst. Verändert sich nun die Gesamtspannung des Stromkreises, so verändert sich auch die Spannung am Widerstand, was von dem Arduino Nano erfasst wird, so dass dieser zwischen 2 Zuständen (ja und nein) unterscheiden kann.

Erschütterungssensoren

Die Erschütterungssensoren aus dem Labor wurden leider nicht durch die Berührung mit der Kugel ausgelöst. Stattdessen mussten wir uns eigene Erschütterungssensoren einfallen lassen. Mit Hilfe des Internets sind wir dann auf die Möglichkeit gestoßen, Berührungssensoren mit Hilfe von Aluminiumfolie herzustellen. Diese funktionieren ähnlich wie ein Plattenkondensator (siehe oben) und lösen bei Kontakt mit der Kugel aus. Das Problem an den Berührungssensoren ist, dass sie sehr empfindlich sind. Nicht jedes Mal gehen die Platten in ihre Ausgangsposition nach Kontakt mit der Kugel zurück, sodass weiterhin Punkte den Score hinzugefügt werden, bis sie mit der Hand nachjustiert wurden. Auch der entgegengesetzte Effekt, dass die Sensoren manchmal nicht auslösen obwohl ein Kontakt zur Kugel bestand, tritt von Zeit zur Zeit noch auf. Auch dies lässt sich damit erklären, dass die Platten nicht in ihre angestrebte Position finden. Da dies jedoch ein wenig dem Zufall überlassen ist, steigert dies nur die Schwierigkeit des Flipperns und mindert nicht unbedingt den Spielspaß.

Fototransistoren

Auch die Fototransistoren laufen manchmal noch nicht ganz fehlerfrei. Sie sind von der Umgebungshelligkeit abhängig. Je dunkler der Raum, desto schwerer lösen sie aus. Um dem entgegen zu wirken, haben wir ein LED-Lichtband am Flipper befestigt, sodass die Fehlerhäufigkeit deutlich reduziert werden konnte. Für noch genauere Werte wäre es möglich, die Fototransistoren in Tunneln anzubringen, sodass sie unabhängig von der Umgebungshelligkeit funktionieren (ähnlich wie beim Münzeinwurf). Auch Schatten können die Funktion der Fototransistoren beeinflussen. Ist ein Spieler stark über das Spielfeld gebeugt, so kann es passieren, dass der Fototransistor hinter den Flipperarmen auslöst, obwohl keine Kugel über ihn hinweg gerollt ist. Durch das LED-Lichtband tritt aber auch dieser Effekt deutlich seltener auf.

Spielgenauigkeit/ Schnelligkeit der Arduinos

Eins der wichtigsten Probleme für uns war die Schnelligkeit der Arduinos. Da die Sensoren in Form von Schleifen auf Aktivität geprüft werden, hatten wir zunächst bedenken, dass die einzelnen Schritte zu langsam ablaufen und dadurch die Ansteuerung der Flipperarme nicht schnell genug erfolgen kann. Um dies entgegen zu wirken, haben wir uns dazu entschlossen, die Ansteuerung der Flipperarme über einen zweiten Arduino laufen zu lassen, was sehr gut funktioniert.

Zeitweise hatten wir noch überlegt die Schleifendauer mit Hilfe von Interrupt-Funktionen zu verkürzen. Da wir jedoch überwiegend analoge Inputs haben, Interrupt-Funktionen jedoch nur für digitale Inputs ausgelegt sind (sie können nur zwischen zwei Zuständen - an und aus - unterscheiden), haben wir auf Interrupts verzichtet. Aber auch ohne Interrupts ist die Schleifendauer so gering, dass das Spielvergnügen nicht gehemmt wird.

Fazit

Das wichtigste vorweg: Der Flipper funktioniert. Zwischenzeitlich hatten wir daran schon nicht mehr geglaubt, da das Projekt doch viel mehr Arbeit gemacht hat als gedacht und viele Probleme aufgetreten sind, mit denen wir nicht gerechnet haben.

Der Flipper hat noch einige Macken, wie zum Beispiel dass einige Sensoren manchmal auslösen wie sie wollen und nicht wie sie sollen. Nichts desto trotz hat sowohl das Projekt an sich, als auch das anschließende Flippern mit dem fertigen Projekt viel Spaß bereitet.

Ausblick

Für den Ausbau des Flippers gibt es noch einige Ideen unsererseits, für dessen Umsetzung uns schlichtweg die Zeit gefehlt hat.

Konstruktion der Flipperarme

Da die eigentlichen Bauteile für die Flipperarme sehr teuer sind, haben wir versucht die Flipperarme mit Hilfe von Servo-Motoren zu bewegen. Wie oben beschrieben hat dies einige Probleme nach sich gezogen, so dass man versuchen könnte die eigentlichen Bauteile (Elektromagnetische Spule) kostengünstiger nachzubauen.

Neue Hindernisse und Sensoren

Es sind noch eine Vielzahl neuer Hindernisse denkbar, wie zum Beispiel Kupferdrähte, andere Berührungssensoren, Tunnel, Lifts etc. die Spielraum zum Erweitern des Flippers lassen.

Münzerkennung

Auch eine Münzerkennung wäre denkbar, zum Beispiel mittels einer Gewichtserkennung.

vollständig elektronische Startvorrichtung

In Zukunft könnte auch das Spannen und Entspannen der Feder vollkommen elektronisch gesteuert sein, sodass auf ein manuelles Eingreifen verzichtet werden kann.

Code

projektesose22/flipperpublic/start.txt · Zuletzt geändert: 2022/08/29 21:49 von d.golovko