Pinball Wind Edition
Teammitglieder:
Korbinian Blanz, Dominik Heinrich, Zhe Li
Projektbeschreibung:
Wie der Name des Projektes bereits vermuten lässt, handelt es sich bei unserem Projekt um eine etwas abgewandelte Art des klassischen Pinballs. Statt der üblichen “Flipper” kommen bei dieser Version Drohnen-Ventilatoren zum Einsatz – mit diesen wird dann der Ball gesteuert/gelenkt. Um Punkte zu erspielen, muss der Ball Infrarot-Sensoren aktivieren, die an bestimmten Stellen des Spielfeldes verbaut sind. Fällt der Ball herunter wird dies als Punktverlust gewertet.
Planung:
Zuerst wollten wir ein einfaches Flipper Spielfeld erstellen, welches statt den traditionellen mechanischen Kugelstoßer einen Ventilator hat. Dadurch wollten wir frühzeitig überprüfen ob die vorhandenen Motoren mit den Rotorblätter genügend Windkraft aufbringen um den Ball ins Spielfeld zu befördern.
Code/Hardware:
Der zweite große Teil des Projektes war die Programmierung und Verkabelung der einzelnen Sensoren und Aktuatoren. Hierbei sind wir wie folgt vorgegangen: Die ersten paar Tage haben wir die komponenten einzeln programmiert und getestet – bedeutet Drohnen-Motoren, IR-Lichtschranken, Mikrofone, LEDs usw. Probleme sind dabei eigentlich nicht entstanden, einzeln war es recht einfach die jeweiligen Komponenten anzusprechen und quasi als “Beispiel” zu programmieren.
LEDs:
Zur Anzeige des Punktestandes haben wir LEDs verwendet. In diesem Fall LEDs vom Typ WS2812, hier kann jedes LED einzeln angesteuert werden. Nach Anleitung von https://www.tweaking4all.com/hardware/arduino/arduino-ws2812-led/ haben wir die LEDs so programmiert, dass bei jedem Punktgewinn ein weiteres LED grün aufleuchtet.
Schaltplan der WS2812 LEDs
Infrarot Modul:
Um gute/schlechte Aktionen des Spielers zu erfassen (bsp. der Ball fällt erreicht eine schwierige Stelle → gute Aktion / der Ball fällt herunter → schlechte Aktion) und ein Punktesystem implementieren zu können haben wir uns für Infrarot Sensoren entschieden. Hierbei haben wir uns an folgende Anleitung gehalten:
https://roboindia.com/tutorials/digital-analog-ir-pair-arduino/
Die Funktionsweise des Sensors ist wie folgt zu verstehen:
Die LED sendet infrarotes Licht aus. Wird das Licht reflektiert (von einem Objekt, in unserem Fall dem Ball), so kommt es bei der Diode an und der Sensor liefert “True” an den Arduino zurück.
Angeschlossen haben wir den Sensor wie folgt:
Mikrofon:
Um die beiden oberen Ventilatoren zu aktivieren muss der Spieler in Mikrofone pusten. Das erschwert das Spielen und macht die Steuerung etwas vielfältiger. Um das umzusetzen haben wir rechts und links vor dem Spielfeld Mikrofone installiert, die dauerhaft in der loop() den Lautstärkepegel abhorchen. Sobald die Lautstärke eine gewisse Schwelle erreicht (z.B. ausgelöst durch Pusten) wird dem jeweiligen Drohnen-Motor ein pwm Signal gesendet und der Motor für eine kurze Zeit aktiviert. Das Mikrofon haben wir nach folgender Anleitung implementiert: http://arduinolearning.com/code/ky038-microphone-module-and-arduino-example.php
Herausforderungen:
Welche Herausforderungen gab es im Entwicklungsprozess?
- Spielfluss:
Um einen flüssigen Spielablauf zu garantieren mussten wir den ersten Prototyp umbauen und den Antriebspropeller weiter nach unten zu setzen. Damit der Spielball nicht durch den Propeller herausgeschleudert wird, wurde ein Netz angebracht. Des Weiteren musste die Startrampe verschmälert werden um die Windkraft dort zu erhöhen und den Ball hoch genug zu transportieren.
- Lichtverhältnisse beim Infrarotsensor:
Je nach Tageszeit und den unterschiedlichen Lichtverhältnissen im Arbeitsraum musste der Infrarotsensor nachjustiert werden um die korrekte Erkennung der vorbei rollenden Bällen zu garantieren.
- Luftzufuhr Propeller:
Um den Spieler vor herumfliegenden Bällen zu beschützen sollte eine Plexiglasscheibe auf den Flipper montiert werden, doch hierbei wurde an der Startrampe die Luft Anziehung für die Rotorblätter umgelenkt und der Ball wurde dadurch angesaugt und konnte nicht wie geplant nach oben geschleudert werden. Um das zu verhindern könnte man zum Beispiel Löcher in die hinter dem Start Propeller liegende Spielwand bohren um genügend Luftzufuhr zu gewähren.
- Arduino Multitasking:
Richtig schwierig wurde es bei der Programmierung erst, als die Komponenten in das Gesamtprojekt eingebunden werden und miteinander funktionieren mussten. Da der Arduino kein Betriebssystem besitzt, ist Multithreading nicht möglich. Sobald (wie in unserem Fall) jedoch mehrere Tasks gleichzeitig ausgeführt werden müssen (z.B. Mikrofonpegel messen, IR-Lichtschranken Status), führt ein delay() zu einer Unterbrechung der jeweils anderen Tasks.Die elegante Methode wäre, dieses Problem mit millis() zu lösen, siehe https://learn.adafruit.com/multi-tasking-the-arduino-part-1 (sehr gutes Tutorial). Da wir leider erst einen Tag vor Projektabgabe auf dieses Problem gestoßen sind, haben wir es einfach mittels eines zweiten Arduino gelöst. Der eine übernimmt in unserem Fall die Steuerung der Ventilatoren und der andere kümmert sich um die Sensoren.
Impressions: