Flippi

Aus HRW FabLab MediaWiki
Version vom 2. Mai 2018, 15:45 Uhr von Stefan Werntges (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Bei Flippi handelt es sich um einen Modularen Flipper, welcher in Form, Größe und Schwierigkeit skalierbar ist. Hierzu lassen sich verschiedene Bauteile Erstellen und über einen zentralen Mikrocontroller steuern.

Ideenentwicklung[Bearbeiten]

Zu Beginn stand die Überlegung, was man cooles mit einem Mikrocontroller machen könnte. Einerseits sollte es nicht nur um des Projektes willen entwickelt werden, andererseits sollte es auch nicht nur für die Gruppe selbst interessant sein. Aus diesem Grund wurde eine alte Kindheitserinnerung zum Leben erweckt, der Pinball Table (dt. Flippertisch). Früher einmal weit verbreitet, findet man diese tische heute nur noch selten und zumeist nur in Antiquariaten, meist mit entsprechend alter Hardware. Neu entwickelte Modelle sind Einzelanfertigungen und haben hohe Preise für Hard- und Software.

Flippi setzt genau hier an. Die Idee ist es, günstige Hardware mit Teilen aus der Industrie 4.0 zu verbinden und so Flippertische günstig selber zu bauen. Hierbei ist zu beachten, dass nicht jeder genug Platz für einen kompletten Tisch hat, weswegen die Dimensionen Variabel sind. Selbiges gilt für die Verwendung weiterer Technik.

Konzeptionierung[Bearbeiten]

Um dieses Ziel zu erreichen, ist es einerseits notwendig einen zentralen Controller zu haben, welcher alle wichtigen Eigenschaften koordiniert. Andererseits ist es Sinnvoll die Hardware auch Menschen ohne Programmiererfahrung zugänglich zu machen, weswegen bestimmte Teile aus der Zentralen Einheit herausgelöst werden müssen. Als Grundlage hierfür wurde das EVA-Prinzip herangezogen, nach welchem Eingabe, Verarbeitung und Ausgabe getrennt zu betrachten sind.

Eingabe: Die Eingabe besteht im minimalen System aus den beiden Schlägern, der Startrampe für die Kugel, sowie allen elektrischen Elementen zum Punkte zählen. Verarbeitung: Mindestens das errechnen der Punkte, sowie das Auswerten der Spielelogik. Ausgabe: Minimal das Anzeigen der Punkte

Um der Modulbeschreibung zu entsprechen, wird die Anzeige der Punkte auf einem Smartphone möglich sein.

Des weiteren soll das Projekt die Möglichkeit der späteren Erweiterung besitzen. Hierzu wird die Möglichkeit offen gehalten neben weiteren Modulen auch Beleuchtung, Bestenliste und weiterer Features einzubauen. Auch diese sollten Menschen ohne Programmiererfahrung offen stehen, siehe Ausblick.

Erste Schritte[Bearbeiten]

Um die minimalen Anforderungen umzusetzen und sowohl Modularität als auch Einfachheit zu gewährleisten, sind mindestens 3 Mikrocontroller notwendig.

Punkteeingabe[Bearbeiten]

Die Eingabe wird durch einen einfachen Arduino Uno Mikrocontroller geregelt. Dieser muss einerseits einfache Signale mit festen Punktewerten lesen können, andererseits sollen diese Punkte auch an die Zentrale Steuereinheit weiter gegeben werden. Optional sind Module mit eigenem Controller, welche ebenfalls mit eingebunden werden müssen.

Hierzu wird eine serielle Verbindung zwischen der Zentralen Steuereinheit und dem Eingabe Arduino Uno mit einer Baudrate von 115200 hergestellt, über welche Punkte Werte und eventuelle Multiplikatoren ausgetauscht werden können.

Feste Punktewerte werden über einen Interrupt in Verbindung mit gesetzten Jumpern Binär errechnet. Hierbei können bis zu 1023 über die Pins 4 bis 13 eingelesen werden.

über I2C können zudem weitere Controller angeschlossen werden, welche eigene Punktewerte errechnen. Hiebei ist der Arduino Uno als Master festgelegt und fragt die I2C Module ab, wenn ein Interrupt an Pin 3 ausgelöst wird.

Alle Interrupts reagieren auf eine Rising Edge.

Zentrale Steuereinheit[Bearbeiten]

Um Genug Leistung und Verbindungen für einen weiteren Ausbau zu Gewährleisten ist ein Arduino Mega die Wahl als Zentrale Steuereinheit. Mit seinen 4 Seriellen Anschlüssen, bleibt der USB Anschluss zum einstellen und für spätere Computer gebundene Features offen.

Anschluss Verwendung Status
Serial0 USB Kommunikation / Debug Debug implementiert
Serial1 Kommunikation mit Punkteeingabe implementiert
Serial2 Kommunikation mit Schlägern / Startrampe Zukünftiges Feature
Seial3 Verwendung für addOns Zukünftiges Feature
Software Serial0 Punkteausgabe Implementiert(nur senden)
Software Serial1 Ausgabe an Lichtsteuerung Zukünftiges Feature (nur senden)
Software Serial2 Verwendung für weitere addOns Zukünftiges Feature
SPI Verwendung für weitere addOns Zukünftiges Feature
I2C Verwendung für weitere addOns Zukünftiges Feature
Sonstige Pins Verwendung für weitere Software Serials Zukünftige Features

Punkteanzeige[Bearbeiten]

Um ein Mindestmaß an App Einsatz zu gewährleisten ist eine NodeMCU der Controller für das Anzeigen der Punkte. Dieser erhält die berechneten Punkte über Software Serial0 von der zentralen Steuereinheit. Da die NodeMCU lediglich über einen einzelnen Seriellen Anschluss verfügt, wird diese hierfür verwendet.

Zur Kommunikation mit einem Endgerät wird ein eigenes Netzwerk mit SSID und Passwort angelegt. Diese können später via App festgelegt werden.

Entwicklung des Prototypen[Bearbeiten]

Elektronik[Bearbeiten]

Der Großteil der verwendeten Elektronik ist bereits in den ersten Schritten erklärt. Weswegen an dieser Stelle eine genauere Erläuterung folgt.

Eingabe[Bearbeiten]

Ein Arduino Uno welcher die Punkte berechnet und weiter gibt.

Pin Verwendung
0/1 Serielle Kommunikation
2 Interrupt zum Punkteberechnen
3 Interrupt zum I2C Aufruf
4-13 Binäres Punkte Berechnen (4=1, 13=512)
A4,A5 I2C Bus

Bei Kontakt mit einem einfachen Punkte Modul wird ein Stromkreis geschlossen, welcher 5V an die Pins anlegt, welche die Punkte ergeben. Weiterhin wird der Stromkreis zu Pin 2 geschlossen, um den Interrupt auszulösen. Hierbei entsprechen einfache Module einem Taster, welche den Stromkreis Manuell schließen. Desweiteren werden Dioden verwendet um ein Fehlauslösen zu vermeiden, sowie ein 10k Ohm Widerstand zum entprellen des Tasters.

ToDo: Bild

Desweiteren ist ein Attiny85 als I2C slave an den Arduino verbunden, welche Punkte anhand einer Drehtür vergibt. Hierzu wird ein Zahnrad an dieser Tür verwendet, welches eine Lichtschranke unterbricht. Bei jeder Unterbrechung wird ein Counter im Attiny85 erhöht.

Verarbeitung[Bearbeiten]

Der Arduino Mega im verarbeitenden Teil hat keine weitere Hardware angeschlossen und dient lediglich zur zentralen Kommunikation. Diese ist in 3.2 zentrale Steuereinheit gelistet.


Ausgabe[Bearbeiten]

Bei der Ausgabe Elektronik wird neben der Übertragung auf ein mobiles Endgerät per WLAN (NodeMCU) dieses auch auf einem ST7735 TFT-Display dargestellt. Dieses hat alle benötigten Bauteile auf einer fertigen Platine.

Module[Bearbeiten]

Die STL Dateien der bereits fertig gestellten Modelle befinden sich auf Github.

Eingabe[Bearbeiten]

Die meisten Module sind Eingabe Module. Diese haben eine Basisgröße von 5x5 CM. Dabei können einzelne Module auch 1x2 (5x10 CM) oder sonstige vielfache Größen haben. einfachen Punkte Module sind direkt an die Pins des Arduinos angeschlossen (z.B.Bumper). Bei diesen Modulen muss dafür gesorgt werden, dass es keine Fehlauslösungen gibt (Siehe Elektronik Eingabe).

I2C Punkte Module berechnen ihren Punktewert selbstständig in einem eigenen Controller. Sobald der Wert angerechnet werden soll, wird ein Signal an den Pin 3 des Eingabe Arduino Unos gegeben, welcher darauf hin alle I2C Module abfragt. I2C Module benötigen einen internen Mechanismus um nicht immer ihren letzten Punktewert weiter zu geben.

Leere Module sind einfache freie Flächen welche keine Punkte geben.

Reaktive Module (in Planung) sind Module mit einem eigenen Controller, welche eine direkte Reaktion am eigenen Modul bewirken. Diese stehen außerhalb des Eva Prinzips da die Ausgabe vor der eigentliche Verarbeitung stattfindet. Hierzu zählen zum Beispiel Bumper, welche die Kugel aktiv abstoßen. Zu diesem Modulen werden auch Module gezählt, welche einen Controller verwenden, der nicht zur Punkteberechnung dient.

Verarbeitung[Bearbeiten]

Bei der Verarbeitung gibt es ein primäres Modul, welches die zentrale Steuereinheit und die anderen Controller beherbergt. Dieses Modul hat keinen direkten Einfluss auf das Spiel und kann auch Außerhalb gelagert werden.

Sowohl I2C Punkte Module als auch Reaktive Module können hier zudem gelistet werden, da in beiden eine eigene Verarbeitung stattfindet.

Ausgabe[Bearbeiten]

Ausgabemodule sollten generell keinen Einfluss auf das Spielgeschehen haben. Neben der Ausgabe von Punkten (Controller im zentralen Modul) können z.B. alle Module optional mit Beleuchtung versehen werden. Dieses Feature ist derzeit lediglich in Planung.

Software[Bearbeiten]

Der Quellcode des Projektes findet sich auf Github. Der Teil welcher am 02.05.2018 Präsentiert wird findet sich gesondert im Abgabe Ordner und ist eine Schlankere Variante des vollständigen Codes. Im WIP Bereich findet sich der Code welcher die nächste Version vorbereitet.

Eingabe[Bearbeiten]

Die Eingabe wird durch einen Arduino geregelt, welcher einerseits über I2C andererseits aber auch über Pins Punkte berechnen kann. Über I2C werden die Punkte dabei vom Arduino abgefragt, bei einfacher Eingabe wird an den Pins 4 bis 13 (1-512) ein Binärer Wert angelegt und zudem ein Interrupt an Pin 2 ausgelöst. I2C wird ebenfalls nur abgefragt, wenn ein Interrupt (an Pin 3) ausgelöst wurde.

Nach dem berechnen der neuen Punkte werden diese in einem 20 Zeichen langen Kommando an die zentrale Steuereinheit gesendet.

Funktion Verwendung
I2CInterrupt Setzt eine Flagge zum Abfragen der I2C Geräte
pointInterrupt Setzt eine Flagge zum ausgeben der Punkte, sofern diese nicht schon gesetzt wurde. Die Punkte werden beim Interrupt zusammengezählt
initI2C Initialisiert die I2C Kommunikation
initCustomI2C Initialisierung von nachträglich eingefügten I2C Befehlen
handlePoints Übergibt die Punkte als Kommando in String Format an die Zentrale Steuereinheit
handleI2C Behandelt die Punkte, welche über I2C eingelesen werden
handleCustomI2C Behandelt nachträglich eingefügte I2C Bauteile

Verarbeitung[Bearbeiten]

Bei der Verarbeitung handelt es sich um einen Arduino, welcher die Kommunikation zwischen allen Modulen regelt und die eigentlichen Werte vorhält. Die Grundliegenden Funktionen sind folgende:

Funktion Verwendung
customLoadTime Stellt ein was während des Startvorgangs passieren soll
initBus Stellt alle Seriellen und sonstigen Kommunikationswege ein
initCustomBus Einstellung von Kommunikationswegen, welche nicht von vorne herein vorgesehen waren
initMain Alle Einstellungen des Hauptprogramms, z.B. das laden der Bestenliste und zurücksetzen der Punkte
customInit Alles was nachträglich noch initialisiert werden muss
customLoadFinish Aufruf wenn das Laden abgeschlossen ist
pointCommand Bearbeitung von Kommandos für eingehende Punkte
debugCommand Bearbeitung von Kommandos über USB
hitterCommand Bearbeitung von Kommandos der Schläger und Startrampen Steuerung
addOnCommand Bearbeitung von Kommandos von addOns
RXTXCommand Bearbeitung von Kommandos über den Softwareserial Eingang
usbCommandsCustom Nachträglich eingefügte USB Kommandos
pointCommandsCustom Nachträglich eingefügte Kommandos für Punkte
addOnCommandsCustom Nachträglich eingefügte Kommandos für addOns
customRXTX Nachträglich eingefügte Kommandos für Softwareserial
serialEvent(0-3) Interrupts für angeschlossene Serial Geräte
RXTXCommand Interrupt für Softwareserial
updateOut Sendet den aktuellen Punktewert an die Ausgabe
addPoints Fügt Punkte hinzu
subPoints Zieht Punkte ab

Hierbei ist zu beachten das erst bei der Komplementierung einer Eingabe dieser in ein Kommando umgewandelt wird. Aktuell ist ein Kommando 20 Zeichen lang, weswegen solange serielle Eingaben gesammelt werden, bis 20 Zeichen im InputString gespeichert sind. Anschließend wird dieser in ein Kommando umgewandelt und eine entsprechende Flagge im Programm gesetzt (StringComplete).

Sofern eine Flagge gesetzt wurde, wird im loop der entsprechende Handle Befehl aufgerufen. In diesem wird das Kommando verarbeitet und eine entsprechende Ausgabe getätigt.

Hierbei hat auch die Ausgabe eine feste Länge des Kommandos (ebenfalls 20 Zeichen).

Ausgabe[Bearbeiten]

Die Ausgabe ist aufgeteilt in die Anzeige auf einem ST7735 und die Ausgabe auf ein mobiles Endgerät via App.

Funktion Verwendung
initDisplay Vorbereitung des Displays auf spätere Eingaben
handlePoints Befehl beim Aufrufen des Webservers unter 192.168.4.1/Point
serialHandler Auswertung eingehender Serieller Kommunikation und Vorbereitung von Kommandos
commandHandler Auswertung von Kommandos
pointCall Abgewandelter Setter für den Punktewert
updateDisplay Kombination aus Punkteanzeige und Anzeige der Eigenen Display Inhalte
showPoints Anzeige der Punkte in updateDisplay
readWlanconfig Liest die WLAN Konfiguration aus dem EEPROM aus und stellt diese zur Verfügung
B34 Temporärer Befehl zum Konfigurieren des EEPROMs
customCommands Wertet zusätzliche Kommandos aus, welche durch Erweiterungen zur Verfügung gestellt werden
customDisplay Stellt eigene Inhalte auf dem Display da

Hierbei werden im ersten Schritt loop die Clients des Servers abgearbeitet. Anschließend werden eingehende serielle Befehle entgegen genommen. Falls die Serielle Kommunikation lang genug für ein Kommando ist, wird dieses ausgewertet. Anschließend wird das Display neu geladen und der loop beginnt von vorne.

Kommandos haben dabei eine im Programm vordefinierte Länge (hier 20 Zeichen) und sind einfache Strings welche auf bestimmte Eigenschaften untersucht werden müssen.

Ein String welcher mit gp: beginnt wird Beispielsweise als Kommando für das updaten der Game Points verwendet. Nach dem Doppelpunkt können hierbei noch 17 Zeichen folgen, um den Zahlenwert darzustellen. Hierbei ist die Begrenzung nicht die Länge eines Datentyps, da die Punkte Ebenfalls als String gespeichert werden. Dies kann in anderen Modulen anders geregelt werden.

APP[Bearbeiten]

Eingabe[Bearbeiten]

Durch die Modularität des Systems soll es in Zukunft Möglich sein, bestimmte Eingaben über eine App zu regeln. Weitere Infos finden sich im Ausblick.

Verarbeitung[Bearbeiten]

Die Verarbeitung wird zentral geregelt. Der Austausch des Controllers ist nicht vorgesehen, dennoch kann in Zukunft über Zusatzmodule auf die Verarbeitung zugegriffen werden. Weitere Infos im Ausblick.

Ausgabe[Bearbeiten]

Die App in ihrer einfachsten Form soll die durch eine NodeMCU empfangenen Daten aufbereitet darstellen. Hierzu stellt die NodeMCU einen Webserver bereit, auf welchem die Punkte angezeigt werden. ToDo:

Gewährleistung der Erweiterbarkeit[Bearbeiten]

Zum Erstellen eigener Module siehe Abschnitt Module Erstellen.

Eingabe[Bearbeiten]

Durch die Verwendung von Modulen einer festen Größe können Module beliebig erweitert oder ausgetauscht werden.

Hierzu sollten alle Module eine dicke von 3 MM haben, wodurch Sie Formstabil bleiben, unabhängig des Fertigungsverfahrens. Alle Eingabemodule entsprechen zudem einen 5x5 Raster. Der Aufbau auf dem Modul, sowie dessen Oberflächenbeschaffenheit kann durch Herstellungsprozess und Hersteller Variieren. Durch die festen Größen sind dennoch alle Module untereinander Kompatibel.

Verarbeitung[Bearbeiten]

Die Erweiterung der Verarbeitung ist durch das einfügen von addOns gewährleistet. Zum entwickeln von addOns werden Programmierkenntnisse vorausgesetzt, da Schnittstellen zwar vorhanden sind, aber keine vorgefertigten Funktionen beinhalten. Entsprechend können über addOns allerdings auch komplexere Verarbeitungen, zum Beispiel für Mehrspieler ermöglichen.

Das einfügen neuer addOns ist im Gegensatz zum entwickeln einfach.

Ausgabe[Bearbeiten]

Die Ausgabe kann ausgetauscht werden, um je nach Wunsch ein LCD, TFT, OLED oder sonstiges Display zu verwenden, auch die Verwendung komplexerer Apps ist möglich. Desweiteren können auch Module für andere Ausgaben (z.B. Beleuchtung, Ton oder Bestenlisten) eingebaut werden. Alle Ausgaben sind optional.

Module Erstellen[Bearbeiten]

Der Generelle Aufbau von Flippi besteht aus verschiedenen Schichten, auf welchen sich Module befinden können.

Spielfläche[Bearbeiten]

Die Spielfläche ist die oberste Schicht und hat ein 50x50 mm Raster. Damit eine Kompatibilität gewährleistet wird, ist die Grundplatte aller Module des Spielfelds 3 mm dick. Größenangaben werden im Raster angegeben: 1x1 für 50x50 mm 2x1 für 100x50 mm. Am Rand jedes Rasters ist ein Viertelkreis mit 5mm Radius ausgeschnitten und 1mm Höhe. ein 2x2 Modul hat entsprecht an jeder Ecke einen Viertelkreis, einen Halbkreis in der Mitte jeder Seite und einen vollen Kreis in der Mitte. Diese Säulen sollen das verrutschen auf dem Raster verhindern.

FlippiRaster.png

Bauelemente können unterschiedliche Größen haben, sollten aber mindestens 30 mm zusätzliche Höhe haben. Eine Maximalhöhe ist nicht vorgegeben. Desweiteren sollte kein Element die Kugel dauerhaft festhalten können, sofern dies nicht Teil eines addOns ist.

Wichtige Angaben für Module sind in diesem Beispiel zu finden:

Eigenschaft Wert Anmerkung
Größe 1x1 entspricht 50x50 mm
Höhe 30mm Die Dicke der Bodenplatte wird nicht mit berücksichtigt.
Anschluss EPM Einfaches Punkte Modul / Easy Point Module
Benötigte addOns keins optionale Angabe, falls ein addOn benötigt wird
Beleuchtung Nein optionale Angabe, falls Beleuchtung verfügbar ist wird ein Modul angegeben.
Punktewert Variabel Entsteht durch Verdrahtung mit einem Bus, bei I2C Modulen wird deren Berechnung angegeben.
FlippiBumper.PNG

Die Steuerelektronik muss dabei nicht auf das Modul gebaut werden, sondern kann darunter befestigt werden. Unter einem Modul sind mindestens 30 mm Platz für Elektronik, Allerdings fallen dabei 7.5 mm von jedem Rand weg, was zu einem Platz von 35x35 mm unter dem Modul führt.

Bei Modulen die mehr als 30 mm Platz nach unten benötigen, muss diese Eigenschaft mit in die Beschreibung des Moduls.

Bus Bereich[Bearbeiten]

Der Busbereich befindet sich unterhalb der eigentlichen Spielfläche und bietet Platz für die Verbindung zu den Modulen der Spielfläche.

Dieser muss mindestens 50 mm hoch sein, um Modulen mit Steuerelektronik und EPMs genug Platz zu bieten. Hierbei müssen genug Säulen und / oder Wände die Spielfläche stützen. Jedes Modul der Spielfläche muss Ausreichend gestützt werden. Optimal wäre ein volles Raster aus Halbkreisen. mindestens ein volles Raster zum einschieben der Module ist Pflicht.

Die Höhe des Bus Bereichs sowie die Anzahl der Möglichen Raster sollte angegeben werden. Zudem ist eine Angabe wichtig, ob es sich um ein Raster mit einem vorgegeben Winkel handelt oder ob es ein gerades Raster ist (Beispiel):

Eigenschaft Angabe Anmerkung
Größe 3x4 Angabe in 50x50 mm
Höhe 100 mm
Bauart Schräge Fläche mit Säulen Beschreibung des Modulrasters
Erweiterbar Ja Angabe ob weitere Raster hinzugefügt werden können
Platz für Controller Nein Angabe ob Controller im Busbereich eingebunden werden können
FlippiRasterScreen.PNG

Software Modifizierung[Bearbeiten]

Die Software aller Module lässt sich über die custom Datei in der Arduino IDE schnell modifizieren, ohne im eigentliche Code Änderungen vornehmen zu müssen.

Dies ermöglicht eine Modifizierung über eine weitere Datei, welche einfach in das Projekt verschoben und über die custom Datei aufgerufen wird.

In der custom Datei werden zudem andere Veränderbare Eigenschaften des Modules bereitgestellt.

Planung für die Zukunft[Bearbeiten]

Folgende Features sind für die Zukunft angedacht:

Mehr Module[Bearbeiten]

Zurzeit gibt es nur wenige Beispielmodule. Auf lange Sicht ist es Sinnvoll mehr Module zu erstellen. Anregungen finden sich bei alten Flippertischen. Hierbei können auch größere Module entstehen, welche dann je nach Status mehr Punkte geben (Siehe Full Tilt! Pinball für Beispiele).

Auch andere Module werden in diesem Abschnitt später noch angesprochen.

Platzierung der Controller Module[Bearbeiten]

Die Controller liegen in der aktuellen Version noch neben dem eigentlichen Spielfeld. In späteren Versionen ist es vorgesehen eigene Platinen zu verwenden um Platz zu sparen. Durch die Verkleinerung der zentralen Steuereinheit ist es möglich diese im Bus Bereich unter dem Spielfeld anzubringen. Hierdurch kann die Optik des späteren Produktes Anspruchsvoller gehalten werden.

Automatisierter Neustart[Bearbeiten]

Durch den manuellen Einwurf und Auswurf der Kugel ist in der ersten Version ein automatischer Programmneustart technisch zwar Umsetzbar, aber nicht Sinnvoll. Hierbei ist eine Erkennung unterhalb der Schläger nötig, welche nicht gefangene Bälle berechnet und je nach Einstellung automatisch zur Startrampe zurück führt. Im Geiste der Modularisierung ist dieses Schritt allerdings zurückgestellt, bis wichtigere Punkte abgearbeitet wurden.

Einheitliche Größe[Bearbeiten]

Derzeit ist die Kugel nicht genormt, die Verwendung einer alten Kugelmaus Kugel ist zwar ein Anfang aber auch ein Provisorium. Kugeln sind nur schwer zu drucken und nicht mit einem Laser Cutter herstellbar. Hier wird nach Optionen für Individuelle Kugeln gesucht.

Bestenliste[Bearbeiten]

Sobald das Spiel ein automatisiertes Ende berechnen kann, ist es auch möglich eine Bestenliste im EEPROM des Arduino Megas abzulegen. Diese ist lediglich für den lokalen Flipper verwendbar und benötigt zudem eine elektronische Eingabe, welche an die zentrale Steuereinheit weitergegeben werden muss. Zudem ist ein Ausgabefeedback nötig.

Der Code für die Eingabesteuerung muss auf dem zentralen Controller laufen, beim Umstieg müssen auch Ausgabegeräte ein Update erhalten, um entsprechende Texte anzeigen zu können.

Elektronische Schläger[Bearbeiten]

Die Schläger sind aktuell kein Teil der Eingabe. Dies liegt in erster Linie am Preis des Prototypen. Die Entwicklung eines eigenen Schlägers ist daher nicht Teil des eigentlichen Projektes. In späteren Versionen werden simpele Befehle standardmäßig unterstützt. Hierfür werden mindestens 2 Taster an einem Controller angeschlossen, welcher die Eingabe des Schlägers regelt. Die Ausgabe wird über die zentrale Steuereinheit geregelt. Hierdurch können weitere Features in der Verarbeitung des Schlages aufgerufen werden, bevor dieser Ausgeführt (Ausgabe) wird.

Für die Ausgabe wird neben dem eigentlichen Mikrocontroller ein starker Magnet oder eine andere Vorrichtung zum ausführen des Schlages benötigt. Hierzu wird zudem ein höherer Strom benötigt, um genug Leistung für einen wirksamen Schlag aufzubringen.

Zudem können sind auch Kombinationen aus elektronischem und analogem Schläger denkbar.

Diese Kombi Schläger benötigen keine Elektronik zum ausführen von Schlägen, bieten aber dennoch die Möglichkeit den Status des Schlägers einzulesen. Hierzu kann Beispielsweise eine Lichtschranke verwendet werden.

FLippi Kombi Image.png

Elektronische Startrampe[Bearbeiten]

Mit einer elektronisch gesteuerten Startrampe kann die Energie des Starts vorher genau angepasst werden (vorherige Angabe). Auch kann ein Rückfall der Kugel in die Rampe durch Elektronik verhindert werden. Bei kombinierten Modulen aus Startrampe und Schlägern kann zudem über eine automatische Rückführung nachgefacht werden, was Spiele aus mehreren Runden erleichtert.

App Steuerung der Eingabe[Bearbeiten]

Eine erweiterte App kann die Funktionen der Schlägereingabe, Punkteausgabe, Bestenliste und weiterer Features zusammenfassen. Da es sich hier allerdings um ein Mikrocontroller Projekt handelt, ist die Entwicklung einer App nebensächlich.

Auch weitere addOns können in einer App mit eingebunden werden, sofern dies gewünscht wird.

Beleuchtung[Bearbeiten]

Bunte blinkende Lichter sind Teil des alten Spielhallen Flairs. Diese werden von den Maschinen Event bedingt gesteuert. Das Ansteuern der Beleuchtung ist eingeplant, allerdings ist die Beleuchtung nicht Relevant für das Spiel. Aus diesem Grund wurde die Beleuchtung auf einen spätere Version verschoben.

AddOns[Bearbeiten]

AddOns sind Controller, welche zusätzliche Funktionen ermöglichen sollen. Die hier genannten addOns sind lediglich Beispiele für Möglichkeiten. Auch weitere addOns sind möglich.

Punkte Modifizierung[Bearbeiten]

Die Punkte Modifiezierung soll das Spiel erleichtern oder erschweren. Hierfür ist ein Multiplikator vorgesehen, welcher auf die Punkte angewendet wird. Zudem ist ein Zeitgesteuerter Wert möglich, welcher die Punkte über Zeit erhöht oder senkt. Die Verwendung elektrischer Schläger kann zudem belohnt oder bestraft werden. Allgemein würde diese Modul eine Einstellung des Schwierigkeitsgrads darstellen.

Multiplayer[Bearbeiten]

Über eine Serielle Verbindung zu einem anderen Flippi könnten diese in einen Multiplayer Modus mit- oder gegeneinander antreten. Durch die Verwendung eines Controllers als Broker könnten zudem mehr als 2 Spieler gleichzeitig antreten. Gegebenenfalls kann hierfür SPI oder I2C verwendet werden. Dabei wäre jeder Spieler ein Slave im System, der Host wäre der Master und würde das Spiel kontrollieren.

Externe Speicherstände[Bearbeiten]

Durch die Verwendung von SD-Karten können Speicherstände außerhalb des EEPROMs der zentralen Steuereinheit gespeichert werden. Durch einen Flexiblen Zugriff könnte ein System ein Spiel zudem pausieren und abspeichern, sobald ein Ball zu ende gespielt wurde und der nächste Einwurf bevor steht (Fixpunkt im Spielablauf). Die Verwendung einer SD Karte ermöglicht zudem das Abspeichern von Mini Spielen welche Bonuspunkte bringen können und in einer App gelöst werden müssen. Hierbei sind besonders Lern oder Geschicklichkeitsspiele denkbar.

USB Anschluss[Bearbeiten]

Die Verwendung eines Computers für Erweiterungen steht durch das Freihalten eines Anschlusses für USB / Debugging offen.

Online Features[Bearbeiten]

Die Verwendung einer Online Rangliste macht keinen Sinn. Dennoch wäre es möglich Serverbasiert Events ausführen zu lassen. Ähnlich Phänomenen wie Twitch Plays Pokemon oder salty bet kann dabei eine Community oder auch Einzelpersonen Events auslösen.

Zusatz Module[Bearbeiten]

Module der Spielfläche sind derzeit auf direkte Eingabe (EPM) oder vorherige Berechnung (I2C) beschränkt. AddOns könnten diese Berechnung erweitern. Auch könnten Leere Module mit technischen Eigenschaften versehen werden. Zum Beispiel dem Auswurf der Kugel in eine zufällige Richtung. Hier müssten weitere Möglichkeiten geprüft werden.

Ausblick[Bearbeiten]

Menschen welche sich für Retro interessieren können mit diesem Projekt an Grundlagen der Informatik herangeführt werden. Durch die Möglichkeit eigene Module zu entwickeln bietet sich die Chance aus einem Konsumverhalten auszubrechen und selber an der Gestaltung teilzuhaben. Hierbei ist die Programmierung unabhängig vom eigentlichen Modul möglich. Durch diese Trennung ist der Einstieg speziell für Menschen ohne Programmiererfahrung kaum erschwert.

Einfache Module können selbst von Kindern unter Verwendung von Software wie tinkerCAD gestaltet und unter Aufsicht verdrahtet werden.

Für komplexere Module kann auch ein simpler Controller wie micro:bit oder Calliope verwendet werden. Diese ermöglichen das verwenden von I2C in Blocksprache und senken die Voraussetzung für die Programmierung weiter ab.

Über diesen leichten Zugang können bereits Kinder an das Modellieren und Programmieren herangeführt werden und haben zum Schluss ein ansprechendes Ergebnis.

Verwendete Software und Bibliotheken[Bearbeiten]

Arduino IDE zur Programmierung der Mikrocontroller.

Adafruit GFX Library Bibliothek für Grafiken auf Displays mit dem Arduino.

Adafruit ST7735 Library Bibliothek zur Verwendung von ST7735 Displays mit dem Arduino.

ESP8266 Arduino Paket Zum programmieren der NodeMCU mit der Arduino IDE.

Slic3r Prusa Edition Slicer für 3D Modelle.

TinkerCAD Web basierte 3D Modellierung.

Adobe Photoshop CS6 Anlegen von Skizzen.

Hardcopy Anwendung für Screenshots.

GitHub Versionierung und Beeitstellung von Quellcode.

Schwierigkeiten bei der Umsetzung, eine Tragödie in drei Schwerpunkten[Bearbeiten]

Dieser Abschnitt ist nicht nur zum Teil ernst zunehmen und entspricht eher einer persönlichen Therapie, als einer wissenschaftlichen Arbeit.

Zum Glück gibt es Technik[Bearbeiten]

Eine erste Schwierigkeit, beim entwickeln von neuem, ist das fehlen von Beispielen.

Flipper sind keine neue Erfindung, dennoch sind sie ein selten vertretendes und hoch spezialisiertes Produkt. Daher finden sich zwar Schaltpläne für einfache Bauteile, aber kaum Anleitungen zur Digitalisierung der meist Analogen Bauteile. Ein fertiger Tisch welcher modernisiert ist, kostet auf dem deutschen Markt (sofern Funktionsfähig) rund 5000€ (Pinball Universe), was für ein Referenz Modell den Finanziellen Rahmen des Projektes überzieht.

Nachdem also einzelne Funktionen getestet wurden, fanden sich einige Schwierigkeiten, welche sich technisch nicht im Rahmen der legalen Anwendungen im Labor hätten umsetzen lassen:

Hubmagnete, welche eine entsprechende Leistung schnell genug Umsetzen, benötigen eine zu hohe Leistung und sind bei 12 Volt nicht schnell genug, um die Kugel zu Beschleunigen. Weswegen nach anderen Lösungen gesucht wurde. Hydraulikpumpen welche genug Kraft umsetzen könnten, würden das Budget des Projektes übersteigen. Jede einzelne der 3 benötigten. Entsprechend wurde hier zu guter letzt die Lösung der Kombischläger erdacht, bei welchen die Kraft Analog über einen Hebel kommt, durch eine Lichtschranke allerdings dennoch ein technisches einlesen Möglich ist. Hier wird weiter nach Möglichkeiten gesucht. Zumal es uns nicht gelungen ist, eine sauber rollende Kugel mit einem anständigen Gewicht herzustellen oder zur organisieren.

Einen Rahmen herzustellen ist technisch gesehen keine hohe Kunst, sofern die dafür benötigten Werkzeuge dann funktionieren wenn man sie braucht. Leider ist dies bei einem gewissen Laser gestütztem Schneidegerät häufig nicht der Fall.

Und dann ist auch immer gut einen Controller zum testen im Labor zu haben, wenn man erwartet dass im Labor Controller für Projekte verwendet werden. Leider bringen Controller im Labor nur dann etwas, wenn diese Fehlerfrei funktionieren.

Bis zu diesem Punkt wären viele Probleme über das Budget regelbar gewesen, wenn das "Team" nicht ein Mitspracherecht hätte.

Im Team ist alles besser[Bearbeiten]

Leider war die Kommunikation innerhalb des Teams, bestenfalls gering.

So wurde das Budget für Materialien verwendet, welche eindeutig zu teuer sind. Zu schwache Hubmagnete sind ebenso vorhanden wir Material für einen viel zu großen Rahmen. Leider fehlt das Budget für Nebensächlichkeiten wie Controller, elektrische Bauteile und Stromversorgung. Ja, Hubmagnete welche Strom brauchen, haben weder ein Steuereinheit, noch eine Stromquelle und vielen damit auch wieder aus.

Das Ding mit der Arbeit[Bearbeiten]

Leider gibt es neben mangelnder Kommunikation auch einen Engpass an Gruppenmitgliedern. Da sich ein Teil der Gruppe nach dem Einkauf nicht mehr zum Projekt äußern wollte. Aus diesem Grund blieb ein Großteil der Arbeit an einer Einzelperson hängen, welche den Quellcode für eine Präsentation zusammengestrichen hat, damit dieser zumindest funktioniert. Eine Einzelperson hat sich dann noch einen Wiki Eintrag aus den Fingern gezogen, die Hardware zusammengebaut und einen nicht Funktionsfähigen 3D Prototypen erstellt. Alles unter Einsatz eigener Hardware und Mittel.In der Zwischenzeit kämpft eine andere Einzelperson mit einer App. Der dritte im Bunde, welcher sich primär um das Modell kümmern wollte, hat sich in der Zwischenzeit beurlauben lassen.

Ein Großartiger Abschluss für ein Projekt.

Fazit[Bearbeiten]

Bei Flippi ist sowohl Ausbaubedarf, als auch Ausbaupotential bevor ein vollständiger Flipper umgesetzt werden kann. Dieses Potential wird dann vermutlich allerdings unter einem anderen Titel und als Hobbyprojekt entfaltet. Gerade in der Teamarbeit und Kommunikation besteht Verbesserungspotential und es wäre Wünschenswert für spätere Semester einen stärkeren Fokus auf Controller zu legen.

Leider haben wir erst kurz vor Schluss erfahren, dass die gesamten Kommunikationsschwierigkeiten der Seriellen Verbindungen mit einem anderen Chip kein Problem gewesen wären. Die Vielzahl der Möglichkeiten neben den großen Chips kommt hier etwas zu kurz. Auch die Möglichkeit der Entwicklung ist durch das erzwingen einer mobilen App eingeschränkt.

Beteiligte Studenten[Bearbeiten]

Stefan Werntges