• Herzlich willkommen!

    Das Team von »Doctor Brick« heißt Euch herzlich willkommen und wünscht Euch viel Spaß hier!
    »Doctor Brick« ist eine anerkannte Community (RLOC) für erwachsene LEGO Enthusiasten, auch AFOLs (= Adult Fans Of LEGO) genannt.
    Wir können uns hier über alle Belange des LEGO Hobbys austauschen wie z.B. Set- und Teilefragen, Vorstellung und Rezensionen von Legobauten.
    Bitte beachtet die Nutzungsbedingungen und den Verhaltensleitfaden.

[MOC] PortaBrick Arcade – Spielkonsole aus 100% LEGO und Python

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Heute möchte ich euch mein jüngsten MOC vorstellen: Der PortaBrick Arcade. Der ist eine vollfunktionsfähige mobile Arcade-Spielkonsole, die vollständig aus LEGO® gebaut wurde. Der PortaBrick Arcade besteht aus 432 Bauteilen und wiegt inklusive Akku rund 520 Gramm. Die Software basiert auf dem Pybricks-Projekt.


Ganz im Gegensatz zu allen anderen derzeit auf dem Markt erhältlichen Spielkonsolen aus den dänischen Bricks, ist der PortaBrick Arcade zu 100% funktionsfähig. Das Ganze ist aus einem Hochschul-Projekt hervorgegangen und sollte eigentlich nur ein kleiner Demonstrator zur Treiber-Entwicklung und als Werkzeug zum Auffrischen meiner Python-Kenntnisse werden. Aber wie es manchmal ist, kam es anders. So machte es mir unglaublich viel Spaß, Spiele für den Demonstrator zu schreiben. Daher stand schnell fest, dass ich noch ein ansehnliches Gehäuse um das nackte Grundgerüst baue. Und mit dieser dann kompletten Spielkonsole spielten erste "Probanden", waren durchaus begeistert und so kam es, dass ich alle ursprünglichen Pläne über Bord warf und mich ganz auf die Spielkonsole konzentrierte. Herausgekommen ist nun also der PortaBrick Arcade.


Die Konsole habe ich in Python/MicroPython erstellt. Als Software musste ich auf das Quell-offene Framework Pybricks zurückgreifen, da die LEGO Software erst seit kurzem wieder die Programmierung in Python unterstützt. Wenn alles klappt, werde ich den Programmcode auf die LEGO-Plattform (LEGO Spike App) portieren (irgendwann).

Herzstück des PortaBrick Arcade ist das Spike Prime Hub (baugleich zum Mindstorms Hub aus dem Set 51515). Die Spielkonsole hat zwei Displays: Unten ein monochromes mit einer Auflösung von 5x5 Pixel. Das obere Display kann Farben darstellen und löst mit 6x6 Pixel auf. Dieses obere Display ist auch eine der Besonderheiten des MOCs. Es ist aus vier Einzelmodulen der Spike ColorLightMatrix zusammengesetzt. Dafür musste ich einen eigenen Treiber schreiben, um alle vier Displays als eines ansteuern zu können.


Als das erste Spiel lief, stellte sich schnell heraus, dass das Ganze zwar nett, aber schlecht nutzbar ist. Beim Spielen zeigte sich, dass die Eingaben über die beiden Buttons nur schlecht erkannt wurden. Schuld daran ist der Ablauf des Programms. Alle Anweisungen werden nacheinander abgearbeitet. Und damit ein Mensch überhauüt etwas erkennen und spielen kann, arbeitete ich mit einer kurzen Pause im Programmablauf. Problem: Während der Pause und während der Anweisungen, die nichts mit dem Input zu tun haben, wird kein Input angenommen. Ich brauchte also so etwas wie eine nebenläufige Programmierung beziehungsweise eine Möglichkeit, Anweisungen parallel abzuarbeiten (das sogenannte Multi Threading). Allerdings unterstützt Micropython das nicht ab Haus und das verwendete Framework Pybricks gar nicht. Die Lösung fand ich im Konzept sogenannter Generatoren. Wer mehr darüber lesen mag, kann in meinem Blog vorbeischauen.


Genug der Technik, zu den Inhalten: Aktuell laufen auf der Spielkonsole zwei Spiele. Zum Einen der Nokia-Klassiker Snake, zum Anderen Pong, eines der Arcade-Urgesteine überhaupt. Beides sind aktuell Solo-Player-Spiele. Falls es irgendwann mal eine zweite solche Konsole geben sollte (wer erbarmt sich, die zweite zu bauen???), dann kann Pong auf Multiplayer umgestellt werden. Zwei Spieler, doppelter Spielspaß!


Ebenfalls Teil des Projekts war ein "Pixel Art Painter", eine kleine Anwendung, mit der man Pixelbilder für den PortaBrick Arcade malen und dann in den Programmcode übertragen kann. Der Quellcode des gesamten Projekts steht allen Interessierten auf Github zur Verfügung.

Wer Fragen zum Projekt hat, einfach gerne fragen! Ansonsten freue ich mich auf eure Feedback.


P.S. Wem das Projekt gefällt, der darf mich gern auf LEGO Ideas unterstützen. Dort habe ich den PortaBrick Arcade als Projekt eingestellt und drücke die Daumen. Allen, die mich unterstützen und denen, die mich schon direkt nach dem Start unterstützt haben, ganz ganz herzlichen Dank!

 

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Tolles Ding, und das Thema mit den "Generatoren " habe ich nur halb verstanden, was nicht an der Beschreibung liegt....
Ich hab so etwas mit den internen Timern gelöst, die ich setze und dann abfrage ob sie abgelaufen sind, aber Deins klingt viel eleganter.
 
  • Like
Reaktionen: jrx

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Das Grundprinzip der Generatoren hab ich auch nur so mittel verstanden :) Im Endeffekt "generiere" ich mir nicht-blockierende Wartezeit und lasse die anderen Prozesse mit normaler Geschwindigkeit laufen. Lego selbst hat in der Spike Prime App jetzt was ähnliches. Die nutzen spezielle Wartefunktionen, die ich aber noch nicht ausprobiert habe.
 

Blechtaler

Urgestein
Registriert
29 Apr. 2017
Beiträge
1.433
Kann der zentrale Stein auch Widerstände messen?
also über ein gebasteltes PU-auf-9V-Kabel die transparent-cyan Sensoren zusammenklemmen und dann über die kombinierten Widerstände einzeln auslesen...

1692632147480.png1692632156989.png1692632163349.png

(Widerstände 10-15kOhm, aber halt nur "dumm" auf zwei Drähten)

dann jeweils einen pro Sorte mit Kabeln parallelschalten und man hat auf 2 Ports 6 Eingänge...
 
  • Like
Reaktionen: jrx

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Kann der zentrale Stein auch Widerstände messen?
Nein, der überträgt seien Daten über ein spezielles Protokoll (LPF2 Wire) von und zu den Sensoren/Actoren
Aber man kann ja eigene Sensoren schließen, es gibt eine extra Schnittstelle.
 
  • Like
Reaktionen: jrx

Blechtaler

Urgestein
Registriert
29 Apr. 2017
Beiträge
1.433
Aber man kann ja eigene Sensoren schließen, es gibt eine extra Schnittstelle.
Wie geht das? Was für Sensoren sind möglich? gehen auch die originalen Motoren als "Drehregler"?
Denn auch das originale Pong ging über zwei Drehregler (pro Spieler einen)
1692633789239.png
Dann wären auch zwei Spieler auf einer Konsole möglich...

oder man koppelt beide Motoren zu einem Joystick zusammen (direkt oder über Gestänge)
 
  • Like
Reaktionen: jrx

Ts__

Eisenbahner
Registriert
6 Jan. 2016
Beiträge
2.549
Ort
Zwickau / Sachsen
Coole Sache! und toll umgesetzt. Mal was völlig anderes, gefällt mir
(auch wenn ich es eher als Technic-Demo ansehe und nicht als "ernsthaftes" spielen.

Die Beschreibung mit der quasi-parallelen Programmierung muss ich mir auch mal reinziehen, klingt spannend.

Viel Glück bei Ideas!

Thomas
 
  • Like
Reaktionen: jrx

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
möchte den Thread von @jrx nicht kapern, melde mich morgen parallel.....
 
  • Like
Reaktionen: jrx

Nightfall

Fahrzeug-/Haus-Designer
Registriert
26 Juli 2013
Beiträge
4.313
Sehr cooles Projekt Jan, schön wieder von dir zu lesen! Hab es schon auf flickr gesehen, aber mit den Erläuterungen nochmal viel interessanter die Hintergründe zu verstehen und wie viel Zeit da drin steckt.

P.S. Projekt supported
 
  • Like
Reaktionen: jrx

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Kann der zentrale Stein auch Widerstände messen?
Wie @Lok24 schon schrieb, nope.
Aber man kann ja eigene Sensoren schließen, es gibt eine extra Schnittstelle
Sind die Ports A und B. Aber soooo weit bin ich noch nicht … wenn doch irgendwann, schwebt mir ein Port-Multiplyer vor um mehr Matrixen über ein Hub steuern zu können. Ich sag nur Arcade-Automat :cool1:
Coole Sache! und toll umgesetzt. Mal was völlig anderes, gefällt mir
Danke!
auch wenn ich es eher als Technic-Demo ansehe und nicht als "ernsthaftes" spielen
Probier die Konsole mal aus. Bisher fanden's die Probanden sehr spielbar :biggrin: Ich selbst bin ein absolut grauenhafter Spieler … :facepalm:
P.S. Projekt supported
Vielen vielen Dank!!!
möchte den Thread von @jrx nicht kapern, melde mich morgen parallel.....
Kaper ruhig … oder halt morgen direkt.
 

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Update zum Projekt:
Gestern habe ich ein größeres Update an der Codebasis vorgenommen. Wichtigste Änderung: Von nun an werden mehr als die ersten beiden Spiele unterstützt. -> https://github.com/lc-jrx/PortaBrick_Arcade

Außerdem freue ich mich sehr, dass das Projekt den ersten Meilenstein auf LEGO Ideas erreicht hat. :banger: Ich danke allen sehr, die ihre Stimme abgegeben haben :inlove:
 
Oben