projekte:2023:1d-pong

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Nächste Überarbeitung Beide Seiten, nächste Überarbeitung
projekte:2023:1d-pong [2023/12/02 03:32]
pixtxa
projekte:2023:1d-pong [2023/12/02 05:09]
pixtxa [Spielanleitung]
Zeile 3: Zeile 3:
 Kontakt: [[user:Pixtxa|Pixtxa]]{{:projekte:2023:tpic6c_rainbow.gif?1&nolink|Vorschau-Bild}} Kontakt: [[user:Pixtxa|Pixtxa]]{{:projekte:2023:tpic6c_rainbow.gif?1&nolink|Vorschau-Bild}}
  
-Projektstatus: [[projekte:projektstatus|{{:projekte:done.png?50|abgeschlossen}}]], Dokumentation: [[projekte:projektstatus|{{:projekte:wip.png?50|work in progress}}]]+Projektstatus: [[projekte:projektstatus|{{:projekte:done.png?50|abgeschlossen}}]], Erweiterungen: [[projekte:projektstatus|{{:projekte:wip.png?50|work in progress}}]]
  
 [[regeln:labels|{{https://labelgenerator.vspace.one/public/Pixtxa.png?200|Owner Label: Pixtxa, public}}]] [[regeln:labels|{{https://labelgenerator.vspace.one/public/Pixtxa.png?200|Owner Label: Pixtxa, public}}]]
Zeile 10: Zeile 10:
 Ich bekam 44x [[https://www.werma.com/de/s_c1691i7105/24134050.html|WERMA MC35 UL Leuchte + Summer 10-30V RGB M12]] und überlegte, was man damit tun könnte. Ich bekam 44x [[https://www.werma.com/de/s_c1691i7105/24134050.html|WERMA MC35 UL Leuchte + Summer 10-30V RGB M12]] und überlegte, was man damit tun könnte.
  
-{{:projekte:2023:1d-pong_werma_tisch_waben.jpg?400|}} +{{:projekte:2023:1d-pong_werma_tisch_waben.jpg?400|Die Werma-LED-Leuchten stehen wabenförmig angeordnet auf dem Tisch}} 
-{{:projekte:2023:1d-pong_werma_tisch_dreieck.jpg?400|}} +{{:projekte:2023:1d-pong_werma_tisch_dreieck.jpg?400|Die Werma-LED-Leuchten stehen in einem Dreieck angeordnet auf dem Tisch}} 
-{{:projekte:2023:1d-pong_werma-tisch-linie.jpg?400|}}+{{:projekte:2023:1d-pong_werma-tisch-linie.jpg?400|Die Werma-LED-Leuchten stehen in einer Linie aufgereiht auf dem Tisch}}
  
 Schnell war klar, dass sie aufgereiht irgendwie toll aussehen und es ein Spiel werden soll. Schnell war klar, dass sie aufgereiht irgendwie toll aussehen und es ein Spiel werden soll.
Zeile 19: Zeile 19:
 ===== Umsetzung ===== ===== Umsetzung =====
 ==== Planung ==== ==== Planung ====
 +Die LED-Leuchten können nicht nur als Anzeige genutzt werden, sondern haben einen eingebauten Summer.
 +Dieser kann mit kurzen Impulsen versorgt werden, um genau dort zu piepen, wo gerade etwas passiert.
 +Ein eindimensionales Spiel bedeutet schließlich nicht, dass es mit nur Mono-Tonausgabe auskommen muss.
 +
 Als Tasten wurden [[https://www.adafruit.com/product/3491|transparente Adafruit-Arcade-Buttons mit LED]] gewählt. Als Tasten wurden [[https://www.adafruit.com/product/3491|transparente Adafruit-Arcade-Buttons mit LED]] gewählt.
  
Zeile 24: Zeile 28:
 Die Wahl fiel auf einen Pixelabstand von 40 mm (≈ 0.635 dpi) und einen Kabelkanal mit 60 mm x 40 mm, welcher auf 1845 mm gekürzt wird. Die Wahl fiel auf einen Pixelabstand von 40 mm (≈ 0.635 dpi) und einen Kabelkanal mit 60 mm x 40 mm, welcher auf 1845 mm gekürzt wird.
  
-{{:projekte:2023:1d-pong_rendering.jpg|}}+{{:projekte:2023:1d-pong_rendering.jpg|3D-Ansicht vom Projekt}}
  
 ==== Montagelöcher ==== ==== Montagelöcher ====
-{{:projekte:2023:1d-pong_werma_single.jpg?200|}} +{{:projekte:2023:1d-pong_werma_single.jpg?200|Einzelne Werma-LED-Leuchte liegen auf dem Tisch}} 
-{{:projekte:2023:1d-pong_hole.jpg?400|}}+{{:projekte:2023:1d-pong_hole.jpg?400|2D-Ansicht des nötigen Montage-Lochs}}
  
 Die LED-Leuchten haben ein Gehäuse mit abgeflachten Seiten, welches sich im passenden Loch nicht verdrehen lässt. Die LED-Leuchten haben ein Gehäuse mit abgeflachten Seiten, welches sich im passenden Loch nicht verdrehen lässt.
Zeile 44: Zeile 48:
 Aber das 3D-Modell der Planung konnte schnell ein CAD-Modell einer Schablone ausgeben, welches frisch geliced an den [[ausstattung:labor:3d_drucker|3D Drucker - Prusa i3 MK3s]] ging, während ich einen Spaziergang in den Baumarkt machte, um den Kabelkanal zu kaufen. Aber das 3D-Modell der Planung konnte schnell ein CAD-Modell einer Schablone ausgeben, welches frisch geliced an den [[ausstattung:labor:3d_drucker|3D Drucker - Prusa i3 MK3s]] ging, während ich einen Spaziergang in den Baumarkt machte, um den Kabelkanal zu kaufen.
  
-{{:projekte:2023:1d-pong_schablon_render.jpg?400|}}+{{:projekte:2023:1d-pong_schablon_render.jpg?400|Ansicht vom 3D-Modell der Schablone. Sie hat 5 Löcher für die LED-Leuchten und eins für die Arcade-Tasten}}
  
 === Side-Quest: Endkappen === === Side-Quest: Endkappen ===
Zeile 56: Zeile 60:
 3D Druck entnommen, neuen Druck gestartet und die Schablone klemmte perfekt im Deckel des Kabel-Kanals. 3D Druck entnommen, neuen Druck gestartet und die Schablone klemmte perfekt im Deckel des Kabel-Kanals.
  
-{{:projekte:2023:1d-pong_schablone_tisch.jpg?400|}} +{{:projekte:2023:1d-pong_schablone_tisch.jpg?400|Die Schablone liegt neben dem Kabelkanal auf dem Tisch}} 
-{{:projekte:2023:1d-pong_schablone_klemmt.jpg?400|}}+{{:projekte:2023:1d-pong_schablone_klemmt.jpg?400|Die Schablone Klemmt im Deckel vom Kabelkanal}}
  
 Die Schablone lässt sich also nur mit etwas Kraft verschieben und auch nur in einer Richtung, während die anderen beiden Richtungen fest sind. Die Schablone lässt sich also nur mit etwas Kraft verschieben und auch nur in einer Richtung, während die anderen beiden Richtungen fest sind.
 Die Löcher wurden entsprechend leicht größer designt, sodass man sie mit einem Bündigfräser am [[ausstattung:holzbearbeitung:fraestischv1|Frästisch für Triton TRA001]] einfach abformen konnte. Die Löcher wurden entsprechend leicht größer designt, sodass man sie mit einem Bündigfräser am [[ausstattung:holzbearbeitung:fraestischv1|Frästisch für Triton TRA001]] einfach abformen konnte.
  
-{{:projekte:2023:1d-pong_schablone_fraesen.mp4|}}+{{:projekte:2023:1d-pong_schablone_fraesen.mp4|Bearbeitung des Kabelkanals. Erstens: Vier Löcher bohren mit Akkubohrmaschine und Stufenbohrer. Zweitens: Löcher von anderer Seite aufbohren. Drittens: Löcher mit Oberfräse ausfräsen. Viertens: Schablone weiter schieben und am 5. Loch ausrichten, um weitere vier Löcher machen zu können.}}
  
 Bis alle Löcher gemacht waren, war die erste Endkappe gedruckt. Bis alle Löcher gemacht waren, war die erste Endkappe gedruckt.
Zeile 68: Zeile 72:
 Durch Fertigungstoleranzen wurde der Kabelkanal ca. 0,1 % (≈ 2 mm) länger als geplant, zusammen mit den 1,5 mm starken Endkappen ergibt sich somit eine Länge von 1850 mm. Durch Fertigungstoleranzen wurde der Kabelkanal ca. 0,1 % (≈ 2 mm) länger als geplant, zusammen mit den 1,5 mm starken Endkappen ergibt sich somit eine Länge von 1850 mm.
  
-{{:projekte:2023:1d-pong_balken_loecher.jpg?400|}} +{{:projekte:2023:1d-pong_balken_loecher.jpg?400|Kabelkanal mit Endkappe und Löchern im Deckel}} 
-{{:projekte:2023:1d-pong_balken_montiert.jpg?400|}}+{{:projekte:2023:1d-pong_balken_montiert.jpg?400|Kabelkanal mit montierten LED-Leuchten und Arcade-Tasten}}
  
 ==== Arcade Buttons ==== ==== Arcade Buttons ====
Zeile 88: Zeile 92:
 Die 3D-Modelle sind hier zu finden: [[https://www.printables.com/model/664436-cheaper-neopixel-arcade-buttons|Cheaper NeoPixel Arcade Buttons]] Die 3D-Modelle sind hier zu finden: [[https://www.printables.com/model/664436-cheaper-neopixel-arcade-buttons|Cheaper NeoPixel Arcade Buttons]]
  
-{{:projekte:2023:1d-pong_arcade_button.gif|}}+{{:projekte:2023:1d-pong_arcade_button.gif|Animation: Taste wechselt Farbe, so lange sie gedrückt wird}}
  
 Die Ansteuerung für den Test erfolgte erstmal nur per [[https://card10.badge.events.ccc.de/|Card10]], einer Art Armbanduhr. Die Ansteuerung für den Test erfolgte erstmal nur per [[https://card10.badge.events.ccc.de/|Card10]], einer Art Armbanduhr.
 Ein paar Zeilen für die MicroPython-Kommandozeile reichen hierfür. Ein paar Zeilen für die MicroPython-Kommandozeile reichen hierfür.
  
-{{ :projekte:2023:1d-pong_card10.jpg?400|}}+{{ :projekte:2023:1d-pong_card10.jpg?400|Verbindung des Arcade-Buttons mit der Armbanduhr}}
 <file python> <file python>
 import color, time, ws2812, gpio import color, time, ws2812, gpio
Zeile 118: Zeile 122:
 Matrix-Schaltung geht nicht wirklich, da sonst die Helligkeit abnimmt, was ich nicht möchte. Matrix-Schaltung geht nicht wirklich, da sonst die Helligkeit abnimmt, was ich nicht möchte.
  
-{{:projekte:2023:1d-pong_werma-pinout.jpg?200|}}+{{:projekte:2023:1d-pong_werma-pinout.jpg?200|Werma-Pinbelegung}}
  
 Die Versorgung erfolgt über einen M12-Stecker, dessen Ausrichtung im Gehäuse von Leuchte zu Leuchte variiert, eine Leiterplatte mit aufgelöteten M12-Buchsen scheidet also aus. Die Versorgung erfolgt über einen M12-Stecker, dessen Ausrichtung im Gehäuse von Leuchte zu Leuchte variiert, eine Leiterplatte mit aufgelöteten M12-Buchsen scheidet also aus.
Zeile 136: Zeile 140:
  
 ==== PCB-Design ==== ==== PCB-Design ====
-{{ :projekte:2023:1d-pong_pcbs_single.jpg|}}+{{ :projekte:2023:1d-pong_pcbs_single.jpg|Ansicht der Leiterplatten Ober- sowie Unterseite}}
 Die Anforderungen waren schnell klar: Die Anforderungen waren schnell klar:
 * Alle 4 cm einen Abgriff für eine LED-Leuchte * Alle 4 cm einen Abgriff für eine LED-Leuchte
Zeile 177: Zeile 181:
 Da im Space Zweifel aufkamen, bestätigte ein Test, dass das gut genug hält. Da im Space Zweifel aufkamen, bestätigte ein Test, dass das gut genug hält.
  
-{{:projekte:2023:1d-pong_zugentlastungskleber.jpg?400|}}+{{:projekte:2023:1d-pong_zugentlastungskleber.jpg?400|Abgerissene Leitungsummantelung klebt an der Leiterplatte}}
  
 Die Leiterplatten wurden Nutzenweise bestückt, geteilt, mit Jumper-Leitungen versehen und aneinandergereiht. Die Leiterplatten wurden Nutzenweise bestückt, geteilt, mit Jumper-Leitungen versehen und aneinandergereiht.
 Ein Controller mit [[https://kno.wled.ge/|WLED]] lässt die RGB-LEDs bereits schön bunt aufleuchten. Ein Controller mit [[https://kno.wled.ge/|WLED]] lässt die RGB-LEDs bereits schön bunt aufleuchten.
  
-{{:projekte:2023:1d-pong_assembly.jpg?600|}} +{{:projekte:2023:1d-pong_assembly.jpg?600|Leiterplaten in verschieden weit montierten Zuständen}} 
-{{:projekte:2023:1d-pong_pcb_line.gif?400|}}+{{:projekte:2023:1d-pong_pcb_line.gif?400|Alle 22 Leiterplatten aneinandergereiht mit Regenbogen-Animation}}
  
 Anschließend wurden die LED-Leuchten verbunden und der Aufbau testweise in den Kabelkanal gepackt. Anschließend wurden die LED-Leuchten verbunden und der Aufbau testweise in den Kabelkanal gepackt.
Zeile 190: Zeile 194:
 Eine kleine Test-Firmware wurde auch geschrieben. Eine kleine Test-Firmware wurde auch geschrieben.
  
-{{:projekte:2023:tpic6c_rainbow.gif|}} +{{:projekte:2023:tpic6c_rainbow.gif|Mit den LED-Leuchten verbundene Leiterplatten}} 
-{{:projekte:2023:1d-pong_open_animation.gif|}} +{{:projekte:2023:1d-pong_open_animation.gif|LED-Leuchten in Betrieb, Aufbau weiterhin offen auf dem Tisch}} 
-{{:projekte:2023:1d-pong_inside_animation.gif|}}+{{:projekte:2023:1d-pong_inside_animation.gif|Aufbau geschlossen, Seitenansicht ins Innere des Kabelkanals}}
  
 Der Controller bekam noch eine kleine Adapter-Leiterplatte und anschließend konnte der Aufbau komplett geschlossen werden. Der Controller bekam noch eine kleine Adapter-Leiterplatte und anschließend konnte der Aufbau komplett geschlossen werden.
 +Durch die Endkappen und den Kabelkanal wurden kleine Löcher gemacht und Einzelpins abgewinkelter Stiftleisten hindurch gesteckt, welche vom Deckel in Position gehalten werden.
 +Den Aufbau zu zu bekommen, ohne den Controller einzuklemmen, ist leider nicht so einfach, aber üblicherweise macht man das Ding nicht auf.
  
-{{:projekte:2023:1d-pong_controller.jpg?400|}} +{{:projekte:2023:1d-pong_controller.jpg?400|Ansicht der Controller-Leiterplatte}} 
-{{:projekte:2023:1d-pong_assembled.jpg?400|}}+{{:projekte:2023:1d-pong_assembled.jpg?400|Fertig aufgebaute Hardware}}
  
-Zu einem späteren +Zu einem späteren Zeitpunkt wurden alle Lötstellen zwischen den Leiterplatten nochmal überarbeitet und zusätzliche Versorgungs-Leitungen verbaut, da die Leiterbahnen nicht ausreichten.
  
 ==== Firmware ==== ==== Firmware ====
-Erstmal konnte vieles von [[https://www.hackster.io/flyingangel/1d-pong-85e965|1D-Pong]] verwendet werden, jedoch wurde letztlich alles nochmal umstrukturiert, da viele +Erstmal konnte vieles von [[https://www.hackster.io/flyingangel/1d-pong-85e965|1D-Pong]] verwendet werden, jedoch wurde letztlich alles nochmal umstrukturiert, da viele while-Schleifen und delays zum Einsatz kamen, was die WLAN-Funktionen sehr erschwerte. 
 + 
 +Im Original-Code wird einfach nur ein zufälliger Start-Spieler gewählt, eine Idle-Animation existierte nicht. 
 +In meiner Version fängt die Seite an, welche Idle-Animation unterbricht – außer der Knopf der Gegenseite wird noch innerhalb der Transition zwischen Idle-Animation und Spiel-Start betätigt. 
 + 
 +Vorzeitig verlassene Spiele können abgebrochen werden, indem man beide Tasten gedrückt hält, bis alles weiß leuchtet. 
 +Wird keine Taste gedrückt, erscheint nach einigen Sekunden die Idle-Animation. 
 +Auch diese hat einen Zeitpunkt, bei dem alles weiß leuchtet. 
 +Lässt man sie bis dort hin laufen, wird ein evtl. begonnenes Spiel ebenfalls beendet. 
 + 
 +Zudem gibt es eine (deaktivierbare) Soundausgabe und eine Möglichkeit, die Rundenzahl zu konfigurieren. 
 + 
 +Da das Schließen des Kabelkanals etwas kompliziert ist, wurde die Möglichkeit für FOTA-Updates implementiert. 
 +Die LEDs zeigen in dem Fall den Fortschrittsbalken der Übertragung dar. 
 + 
 +Geplant ist noch eine einfache Weboberfläche. 
 +Darüber sollen neben Soundausgabe und Rundenzahl auch die verwendeten Farben konfigurierbar sein. 
 +Statistiken wie Anzahl gespielter/abgebrochener Spiele, Insgesamt erzielter Punkte, Anzahl erfolgreicher/verfehlter Schläge und ähnliches könnten da auch ausgegeben werden. 
 + 
 +Der Code ist hier veröffentlicht: [[https://github.com/Pixtxa/1D-Pong|1D-Pong Quellcode]] 
 + 
 +==== Ergebnis ==== 
 +{{ :projekte:2023:1d-pong_gameplay.mp4 |1D-Pong Spiel in Betrieb. Beim Zurückschlagen des Balls ertönt ein kurzes Piepen, beim Verfehlen piept es 3x während der neue Punktestand aufblinkt}} 
 + 
 +===== Spielanleitung ===== 
 +  * Taste drücken zum Start/Aufschlag 
 +  * Zurückspielen durch Tastendruck während sich der Ball im grünen Schläger-Bereich befindet 
 +  * Verfehlen = Punkt für Gegenseite 
 +  * Punktanzeige in Spielfeldmitte 
 +  * Spiel gewinnen: Als erstes die zu erreichenden Punkte erzielen 
 +    * Default-Wert nach Powercycle: 10 Punkte 
 +    * Konfigurationsbereich: 1-16 Punkte 
 +  * Hinweis: Boost am Schläger-Ende verfügbar 
 +  * Reset: Tasten halten/warten bis alles weiß leuchtet
  
 ==== Installationsanleitung ==== ==== Installationsanleitung ====
-Das Spiel benötigt eine Grundfläche von 185 cm x 6 cm; etwas mehr Platz ist empfehlenswert, damit es etwas verrutschen kann. Die meisten Tische oder Biertische bieten sich gut als Unterlage an.+Das Spiel benötigt eine Grundfläche von 185 cm x 6 cm; etwas mehr Platz ist empfehlenswert, damit es etwas verrutschen kann. 
 +Die meisten Tische oder Biertische bieten sich gut als Unterlage an
 +Die Kombination aus Brüstungsgeländer und Kabelbinder kann auch gut funktionieren. 
 +Das Spiel ist in jeder Ausrichtung betreibbar.
  
-Auch wenn die Beacons IP69k bieten, gilt das leider nicht für die verwendeten Arcade-Buttons, welche nichtmal Regenfest sind. Je nach Wetterlage sollte also ein überdachter Bereich als Aufstellort verwendet werden.+Auch wenn die Werma-Beacons IP69k bieten, gilt das leider nicht für die verwendeten Arcade-Buttons, welche nicht mal Regenfest sind. 
 +Je nach Wetterlage sollte also ein überdachter Bereich als Aufstellort verwendet werden.
  
 Die Spannungsversorgung von 24V/1A erfolgt über eine Hohlbuchse (innen Plus); ein passendes Steckernetzteil mit Eurostecker liegt bei. Die Spannungsversorgung von 24V/1A erfolgt über eine Hohlbuchse (innen Plus); ein passendes Steckernetzteil mit Eurostecker liegt bei.
-Zur Inbetriebnahme muss lediglich die Spannungsversorgung hergestellt werden. Zum Ausschalten kann sie jederzeit getrennt werden; ein herunterfahren ist nicht erforderlich.+Zur Inbetriebnahme muss lediglich die Spannungsversorgung hergestellt werden. 
 +Zum Ausschalten kann sie jederzeit getrennt werden; ein herunterfahren ist nicht erforderlich
 + 
 +Zur Konfiguration können beide Tasten gedrückt gehalten werden. 
 +Erst wird alles weiß und das aktuelle Spiel beendet; etwas verzögert erscheint die Konfigurationsanzeige. 
 +Dabei zählt der Punktestand für beide Teams von 1 beginnend an alle 300 ms hoch. 
 +Beim Überlauf wird die Sound-Ausgabe umgeschaltet (aus/an) und es wird erneut hochgezählt. 
 +Beim loslassen wird die Konfiguration übernommen. 
 +Hält man also die Tasten, bis beide Teams 5 Punkte haben und lässt dann los, laufen fortan die Spiele so lange, bis eine Seite 5 Punkte erzielt. 
 +Beim Powercycle wird wieder die Standard-Konfiguration geladen: Mit Sound-Ausgabe bis 10 Punkte.
  
-Zur Konfiguration können beide Tasten gedrückt gehalten werden. Erst wird alles weiß und das aktuelle Spiel beendet; etwas verzögert erscheint die KonfigurationsanzeigeDabei zählt der Punktestand für beide Teams von 1 beginnend an alle 300 ms hoch. Beim Überlauf wird die Sound-Ausgabe umgeschalten (aus/an) und es wird erneut hochgezählt. Beim loslassen wird die Konfiguration übernommen. Hält man also die Tasten bis beide Teams 5 Punke haben, laufen fortan die Spiele so lange, bis eine Seite 5 Punkte erzielt. Beim Powercycle wird wieder die Standard-Konfiguration geladen: Mit Sound-Ausgabe bis 10 Punkte.+Vom Öffnen des Kabelkanals ist abzusehen, da sich das Controllerboard beim Schließen des Kabelkanals gerne verklemmt. 
 +Auf der Unterseite sind Löcher, durch die man rein schauen kann.
  • projekte/2023/1d-pong.txt
  • Zuletzt geändert: 2024/02/17 18:50
  • von stippi