====== Virtual Pinball Cabinet Projekt ====== === Einleitung === Das Virtual Pinball Cabinet Projekt zielt darauf ab, einen interaktiven virtuellen Flipperautomaten zu bauen. Dieses Dokument bietet eine detaillierte Übersicht über die verschiedenen Bauabschnitte, Materialien und die Aufteilung der Arbeit in Holzbearbeitung, Metallarbeiten, Elektronik, Programmierung und Gestaltung. Das Projekt hat derzeit einen Stand erreicht, in dem der Automat bespielbar ist, aber nur Basisfeatures enthält und noch viele Erweiterungen möglich sind. === Teileliste === | Material | Zweck | Menge / Dimensionen | Bezugsquelle | Preis | |---------------------|-------------------------|--------------------------------------|---------------------------------|------------------| | OSB Platten | Äußeres Gehäuse | ca. 2 Platten 169cm x 62,5cm x 12mm | vorhandene Reste ([[https://www.b1-discount.de/sortiment/detail/d/osb-ausbauplatte/5|B1 Baumarkt)]] | - ( 10,70EUR) | | Dachlatten | Auflagen und Verbindungsstücke | ca 1x 2m x 18mm x 36mm | vorhandene Reste ([[https://www.b1-discount.de/sortiment/detail/d/unterkonstruktionslatte-fichte-kiefer/17|B1 Baumarkt]])| - ( 1,50EUR) | | Vierkantholz | Querstreben | ca 1x 2m x 25mm x 25mm | vorhandene Reste ([[https://www.obi.de/p/8635351/rahmenholz-aus-fichte-tanne-gehobelt-34-mm-x-34-mm-x-2-000-mm|Obi]]) | - (ca. 5,38EUR) | | Tischlerplatte | Lockbar Handauflage | ca 100mm x 600mm x 20mm | vorhandene Reste ([[https://www.obi.de/p/7451073/siebdruckplatte-birke-einseitig-hexa-praegung-120-cm-x-60-cm-x-1-5-cm-braun|Obi]]) | - (ca 10,00EUR ) | | Lattenrost-Latten | Zierholz und Halterungen| ca 4x 90cm x 40mm x 10mm | vorhandene Reste ([[https://www.ikea.com/de/de/p/luroey-federholzrahmen-90160211/|Iea]]) | - ( 25,00EUR) | | Glasplatte | Spielfeldabdeckung | 56cm x 90cm x 12mm | Kleinanzeigen (Glasregal) | 15EUR | | Vierkantrohr-Metallwinkel | Innerer Rahmen | 40mm x 40mm x 35cm/15cm | Kleinanzeigen (Glasregal-Rahmen) | - (s.o.) | | Metallwinkel | Befestigung Lockbar & Rahmen | 50mm x 40mm x 1,5mm | vorhandene Reste (B1 Baumarkt) | - (ca 2,00 EUR) | | Metall-Lochverbinderplatten | Befestigung Lockbar/Glasplatte | 50mm x 120mm x 1,5mm | vorhandene Reste (B1 Baumarkt) | - (ca 4,00 EUR) | | div. Schrauben, Muttern | Befestigungen | | [[https://schraubenking-shop.de|Schraubenking]] | ca 30 EUR | | Arcade-Buttons | Spieler-Interface | 10x rund & eckig | [[https://www.aliexpress.com/item/1005004976994548.html|AliExpress]] | ca 20 EUR | | Arduino Leonardo + I2C IO-Extender | Button-Controller | | vorhandene Reste ([[https://exp-tech.de/products/arduino-leonardo-with-headers|EXP-Tech]]) | - (ca 30EUR) | | ESP32 | Dot_Matrix-Controller | | [[https://www.aliexpress.com/item/1005001636295529.html|AliExpress]] | 3,30EUR | | Dot-Matrix-Display | Punkteanzeige | 2x 64px x 32px | [[https://www.aliexpress.com/item/1005004933061424.html|AliExpress]] | 26,96EUR | | PC Gehäuse + Netzteil + HDD | | 550Watt PSU / 120GB HDD | vorhandene Reste | - | | CPU + Mainboard + RAM | | Intel i5 3570 / 16GB DDR3 | Kleinanzeigen | 45EUR | | Grafikkarte | | AMD Radeon RX570 | Kleinanzeigen | 70 EUR | | LCD 43Zoll TV | Hauptspielfeld | Sony Bravia KDL-42W655A (1920x1080) | Kleinanzeigen | 90 EUR | | LCT 22Zoll 16:10 | Backpanel Monitor | Phillips | Kleinanzeigen | 5 EUR | | Lautsprecher | Spielfeldgeräusche | 4x 8Ohm 3Watt 103mm | [[https://www.pollin.de/p/lautsprecher-regal-8-ohm-3w-2-stueck-641551|Pollin]] | 3,60 EUR | | Stereo-Verstärker | | 3x 20Watt 12V | [[https://www.aliexpress.com/item/1005005334808973.html|AliExpress]] | 7,93EUR] | | diverse Kabel | | | vorhandene Reste | - | | Stahl-Vierkantrohr | Beine | 25mmx25mm x 100cm | [[https://www.obi.de/p/7804263/vierkantrohr-stahl-25-mm-x-25-mm-x-1000-mm|Obi]] | 23,16EUR | |---------------------|-------------------------|--------------------------------------|---------------------------------|------------------| | **Gesamt** | | | | 339,95EUR (428EUR)| === Bauabschnitte === ===== 1. Holzbearbeitung ===== In diesem Abschnitt werden die grundlegenden Strukturen des Cabinets geschaffen. {{ :projekte:vpinball:virtual_pinball_cad.png?direct&800 |}} * 12mm OSB Platten nach Maßen einer Standard-Cabinets zugeschnitten (auf glatte, metrische Werte gerundet) * Eckstücke und vordere Auflagen für den Playfield-Monitor aus Dachlattenabschnitten 24 × 48 mm * Handauflage (Lockbar) aus 21mm Tischlerplatte * Versteifende Querträger aus 35 x 35mm Birkenholz * Zusätzliche Abdeckungen bei Lockbar und oberhalb Playfield aus Lattenrost-Latten (Biegung nach oben) * Monitorhalter Backboard aus Lattenrost-Latten * Ratationsarm-Strebe aus Restholz Die Platten wurde (schlecht) mit einer Stichsäge zugesägt, hierzu wurde jeweils ein vorher ausgemessener Anschlag mit Schraubzwingen am Werkstück befestigt, um möglichst gerade Schnitte zu erhalten. Eine (Tisch- oder Kappschienen-)Kreissäge wäre hier besser gewesen. Schnittkanten wurden mittels Band- und Handschleifen entgratet. Nötiger Löcher mit 5mm vorgebohrt und gesenkt. Entwaig vohandene Nut/Feder an den Platten wurde entfernt. Weitere Rahmenteile wurden aus Resthölzern mit der Handsäge zugeschnitten. Schnittlinien wurden mit Stahlwinkel angezeichnet, um möglichst winkeltreu zu bleiben. Löcher wurden ggfs. mit 2mm vorgebohrt, um ein Spalten des Holzes zu verhindern. Die Seitenwände der Backbox stehen auf den Seitenteilen auf und können mittels der Rotationsarme auf das Playfield geklappt werden. Der Rotationspunkt wurde empirisch (=Trial&Error) ermittelt. Der Backboard-Monitor wurde mit parallelen Lattenrost-Latten eingefasst, um den Breitenunterschied zur Backbox auszugleichen. Der Monitor ist seitlich mit diesen verschraubt. Diverse kleine Holzelemente wurden passend zugeschnitten, um als Führung und Anschlag der Beine zu fungieren. Sie sind mit den Rahmenwinkeln und den Seitenteilen verschraubt. ===== 2. Metallarbeiten ===== {{:projekte:vpinball:virtual_pinball_cad_detail.png?direct&400 |}} * Metallwinkel (verzinkter Stahl) 40 x 40mm * Metallplatten (verzinkter Stahl) 120 x 60mm * Maschienenschrauben (Sechskantkopf) 120 x 10mm * Flügelmuttern 10mm * verschiedenen Holzschrauben, 5mm + kleiner * 30mm x 30mm Vierkantrohr-Winkel (ehemals C-förmiger Rahmen des Glasplatten-spendenden Glasregals) * 25x25mm Stahl-Vierkantrohr als Beine Zur Befestigung der Handauflage und der Glasplatte wurde eine Kombination einer Metallplatte (nimmt Gewicht der Glasplatte auf und leitet es in den Rand der OSB Platte und in die Handauflage) und eines Winkels (leitet das Gewicht der Handauflage in die vordere OSB Platte) verwendet. Dabei sind beide Elemente nur mit der Handauflage verschraubt, so dass diese abnehmbar bleibt. Die Metallplatte wurde mittels schwarzem Gaffa-Tape für die Auflage der Glasplatte gepolstert und versteckt. Metallwinkel wurden ebenfalls zur Befestigung der Querstrebe der hinteren Playfield-Monitor-Halterung verwendet sowie zur Verstärkung der hinteren R"cukwand/Seitenwand-Verbindung. Die C-förmigen Rahmenteile des Glasregals wurden per Hand in Winkelstücke zersägt, mit zusätzlichen Löchern versehen und als Versteifung/tragender Rahmen innen an die OSB Platten verschraubt. Auf ihnen liegt die Bodenplatte auf. Die Beine bestehen aus 25x25mm Stahl-Vierkantrohr (vorne auf ca 65cm gekürzt, hinten 100cm), die lediglich in Führungen eingeschoben und damit auch abgenommen werden können. Im weitestens Sinn Metallbearbeitung: Die aus einem Glastisch gewonnene Glasplatte musste von verklebten Metallzylindern befreit werden, die vorher die Verschraubung mit dem Rahmen ermöglichten. Hierzu wurden diese mittels Heisluftpistole auf >150Grad C erhitzt und mittels Rohrzange abgedreht. Klebereste liessen sich mit Aceton + Schaber entfernen. ===== 3. Elektronik ===== Die Elektronikkomponenten ermöglichen die Interaktivität des Virtual Pinball Cabinets. * PC with i5 3570 3.48GHz, Gigabyte Mainboard, 16GB DDR3 RAM, AMD Radeon RX570 * 42Zoll Sony Bravia KDL-42W655A (1920x1080) + 22Zoll 16:10 DVI/HDMI (1920x1080) * Arduino Leonardo + MCP23017 IO-Extender * verschiedenen Taster * Lautsprecher-Set des TV * 4x 3W 8Ohm Lautsprecher * 2x10W Verstärker (bisher nur für TV-Lautsprecher) * 2x 64x32 Pixel Dot-Matrix-Display * ESP32 Controller für DMD Ein alter Gaming PC mit aktualisierter CPU/Mainboard Kombi + eine halbwegs neue Grafikkarte bilden die Rechenbasis. Die Systemeistung ist ausreichend. Ein Linux Mint XFCE wurde als OS aufgespielt, was die Einrichtung der Software erschwert, dessen Windows-Variante erst vor knapp einem Jahr auf Linux portiert wurde. Ein Arduino Leonardo fragt mittels eine I2C IO-Extenders mehrere Drucktaster ab, wandelt sie in reguläre Tastatureingaben und schickt diese via USB an den Rechner. Der ESP32 wurde mit der [[https://github.com/PPUC/ZeDMD|ZeDMD]] Software bespielt und nimmt Befehle mittels USB/Serial vom PC entgegen. === Links === [[http://mjrnet.org/pinscape/|Pinscape Controller and various guides]] {{:projekte:pinball.png?direct&400|}} CC-BY4.0 Copyright ©2016-2023 [[http://mjrnet.org/pinscape/BuildGuideV2/BuildGuide.php?sid=architecture|Michael J. Roberts]]. ===== 4. Programmierung ===== Dieser Abschnitt befasst sich mit der Softwareintegration für das Virtual Pinball Erlebnis. === Installation Visual Pinball === git clone https://github.com/vpinball/vpinball.git cd vpinball/ git checkout standalone sudo apt install cmake bison zlib1g-dev libdrm-dev libgbm-dev libglu1-mesa-dev libegl-dev libudev-dev libx11-dev libxrandr-dev g++ curl unzip perl -i -pe"s/0/1887/g" git_version.h perl -i -pe"s/unknown/f3263bf/g" git_version.h cd standalone/linux/ ./external.sh cd ../.. cp standalone/cmake/CMakeLists_gl-linux-x64.txt CMakeLists.txt sed -i s/3.26/3.22/g CMakeList.txt mkdir -p build/Debug cmake -DCMAKE_BUILD_TYPE=Release -B build/Release cmake --build build/Release -- -j2 mkdir tmp cp build/Release/setup.sh tmp cp build/Release/VPinballX_GL tmp cp build/Release/*.so tmp cp build/Release/*.so.* tmp cp -r build/Release/flexdmd tmp cp -r build/Release/shader tmp cp -r build/Release/assets tmp cp -r build/Release/scripts tmp cp -r build/Release/tables tmp cp -r build/Release/docs tmp cd tmp ====Links==== * VPX build-CIs for linux: https://github.com/vpinball/vpinball/actions/runs/7151948501 * [[https://jsm174.github.io/goonies-vpx-standalone-batocera/|VPX Standlone Developer's Site]] * [[https://github.com/batocera-linux|Batocera Linux Dsitribution with pre-installed VPinball]] * [[https://wiki.batocera.org/systems:vpinball||Batocera Wiki about VPinball]] * [[https://www.virtual-pinball-cabinet.com/| Deutsches Blog mit Baubeschreibung]] ===== 5. Gestaltung ===== * bisher keine ===== Status ===== * 09/12/2023 Wiki-Artikel angelegt * 09/12/2023 Visual-Pinball-X Test auf Windows-PC (nur teilweise erfolgreich) * 09/12/2023 Test-PC (2.7GHz Dual-Core) + 21 Zoll 16:10 Monitor + 18 Zoll 4:3 Monitor aquiriert; Linux-Installation vorbereitet * 10/12/2023 Linux Mint 21.2 XFCE installiert, VpinballX-Standalone geclont und compiliert -> stürzt beim Start ab * 11/12/2023 Radeon HD4850 gegen RX570 getauscht (70€), da OpenGL4.6 Mindestanforderung -> VPX standalone läd Demo-Tisch! * 12/12/2023 Sony Bravia 42'' FullHD 200Hz Display besorgt (90€); Debug-Umgebung auf Debian-in-WSL2 eingerichtet: GPU unterstützt nur OpenGL3.2, SW-Renderer 4.5, aber zu langsam. Für Debugging trotzdem ok. * 16/12/2023 Taster + Arduino Leonardo installiert * 19/12/2023 VPinball mit mehreren Tischen lauffähig dank besserer Quellen für Tische, ROMs und Backglasses. Allerdings ohne Punkteanzeige. Lautsprecher hinzugefügt. * 22/12/2023 3-Monitor-Setup lauffähig inkl. Punkteanzeige, allerdings nur auf einigen Tischen * 24/12/2023 Probespielen durch die Familie * 30/12/2023 Ursache für fehlende Punktanzeige gefunden, neue Einstellung nötig -> Folgeprobleme mit Darstellung * ??/01/2023 Dot-Matrix-Display ergänzt * ??/02/2023 Rückbau auf einen Backbox-Monitor; Metallrahmen und -beine; Klappmodus der Backbox zum Transport * 28/02/2023 Erstmals Transport zum ByteSpeicher und Test durch Vereinsmitglieder * 02/03/2023 Update Wikiseite mit aktuellem Stand ===== Galerie === {{:projekte:vpinball:vpinball_000.jpg?direct&200|}} {{:projekte:vpinball:vpinball_001.jpg?direct&200|}} {{:projekte:vpinball:vpinball_002.jpg?direct&200|}} {{:projekte:vpinball:vpinball_003.jpg?direct&200|}} {{:projekte:vpinball:vpinball_004.jpg?direct&200|}} {{:projekte:vpinball:vpinball_005.jpg?direct&200|}} {{:projekte:vpinball:vpinball_006.jpg?direct&200|}} {{:projekte:vpinball:vpinball_007.jpg?direct&200|}} {{:projekte:vpinball:vpinball_008.jpg?direct&200|}} {{:projekte:vpinball:vpinball_009.jpg?direct&200|}} {{:projekte:vpinball:vpinball_010.jpg?direct&200|}} {{:projekte:vpinball:vpinball_011.jpg?direct&200|}} {{:projekte:vpinball:vpinball_012.jpg?direct&200|}} {{:projekte:vpinball:vpinball_013.jpg?direct&200|}} {{:projekte:vpinball:vpinball_014.jpg?direct&200|}} {{:projekte:vpinball:vpinball_015.jpg?direct&200|}} {{:projekte:vpinball:vpinball_016.jpg?direct&200|}} {{:projekte:vpinball:vpinball_017.jpg?direct&200|}} {{:projekte:vpinball:vpinball_018.jpg?direct&200|}} {{:projekte:vpinball:vpinball_019.jpg?direct&200|}} {{:projekte:vpinball:vpinball_020.jpg?direct&200|}}