Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
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/05 18:49] pixtxa Default-Rundenzahl auf 5 reduziert |
||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Kontakt: [[user: | Kontakt: [[user: | ||
- | Projektstatus: | + | Projektstatus: |
[[regeln: | [[regeln: | ||
+ | Direktweg zur [[projekte: | ||
===== Vorgeschichte ===== | ===== Vorgeschichte ===== | ||
Ich bekam 44x [[https:// | Ich bekam 44x [[https:// | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
- | {{: | + | {{: |
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. | ||
Einen [[https:// | Einen [[https:// | ||
+ | |||
+ | Was erstmal einfach erschien, bot dann doch mehrere Side-Quests, | ||
+ | | //Wenn es dich nicht antreibt// | ||
+ | | //Und nicht an deinen Nerven sägt// | ||
+ | | //Wenn es dich nicht aufreibt// | ||
+ | | //Und deinen Glauben zerschlägt// | ||
+ | | \\ | | ||
+ | | //Es wird dich zernagen// | ||
+ | | //Denn wenn es dich nicht weckt// | ||
+ | | //Kannst Du es noch ertragen// | ||
+ | | //Dann ist es nicht das Projekt// | ||
+ | | [[https:// | ||
+ | Ergebnis ist aber, dass es doch noch fertig wurde und schön geworden ist. | ||
+ | Wie das ging, wird hier erklärt. | ||
===== 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:// | Als Tasten wurden [[https:// | ||
Zeile 24: | Zeile 43: | ||
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. | ||
- | {{: | + | {{: |
- | ==== Montagelöcher | + | ==== Gehäuseanpassung |
- | {{: | + | {{: |
- | {{: | + | {{: |
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 63: | ||
Aber das 3D-Modell der Planung konnte schnell ein CAD-Modell einer Schablone ausgeben, welches frisch geliced an den [[ausstattung: | Aber das 3D-Modell der Planung konnte schnell ein CAD-Modell einer Schablone ausgeben, welches frisch geliced an den [[ausstattung: | ||
- | {{: | + | {{: |
=== Side-Quest: Endkappen === | === Side-Quest: Endkappen === | ||
Zeile 53: | Zeile 72: | ||
Die beiden 3D-Modelle incl. CAD-Script sind hier zu finden: [[https:// | Die beiden 3D-Modelle incl. CAD-Script sind hier zu finden: [[https:// | ||
- | === Zurück zu den Löchern | + | === Zurück zu den Montagelöchern |
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. | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
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: | Die Löcher wurden entsprechend leicht größer designt, sodass man sie mit einem Bündigfräser am [[ausstattung: | ||
- | {{: | + | {{: |
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 87: | ||
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. | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
- | ==== Arcade Buttons ==== | + | ==== Side-Quest: |
Irgendwie ist es doch unschön, wenn die LED-Leuchten sieben Farben anzeigen können, während die Tasten nur weiß leuchten können. | Irgendwie ist es doch unschön, wenn die LED-Leuchten sieben Farben anzeigen können, während die Tasten nur weiß leuchten können. | ||
Praktischerweise gibt es eine Anleitung zum Bau von [[https:// | Praktischerweise gibt es eine Anleitung zum Bau von [[https:// | ||
Zeile 88: | Zeile 107: | ||
Die 3D-Modelle sind hier zu finden: [[https:// | Die 3D-Modelle sind hier zu finden: [[https:// | ||
- | {{: | + | {{: |
Die Ansteuerung für den Test erfolgte erstmal nur per [[https:// | Die Ansteuerung für den Test erfolgte erstmal nur per [[https:// | ||
Ein paar Zeilen für die MicroPython-Kommandozeile reichen hierfür. | Ein paar Zeilen für die MicroPython-Kommandozeile reichen hierfür. | ||
- | {{ : | + | {{ : |
<file python> | <file python> | ||
import color, time, ws2812, gpio | import color, time, ws2812, gpio | ||
Zeile 118: | Zeile 137: | ||
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. | ||
- | {{: | + | {{: |
Die Versorgung erfolgt über einen M12-Stecker, | Die Versorgung erfolgt über einen M12-Stecker, | ||
Zeile 133: | Zeile 152: | ||
ICs lassen sich mit den 1,27 mm Rastermaß immerhin halbwegs gut an Flachband-Leitung mit ebenfalls 1,27 mm Rastermaß löten. | ICs lassen sich mit den 1,27 mm Rastermaß immerhin halbwegs gut an Flachband-Leitung mit ebenfalls 1,27 mm Rastermaß löten. | ||
Aber das Pinout macht es nicht so einfach verwendbar und dass da was abreißt, bevor der Kabelkanal zu ist, ist sehr wahrscheinlich. | Aber das Pinout macht es nicht so einfach verwendbar und dass da was abreißt, bevor der Kabelkanal zu ist, ist sehr wahrscheinlich. | ||
- | Es kündigte sich eine Sammelbestellung | + | Bei der [[https:// |
- | ==== PCB-Design | + | === Side-Quest: |
- | {{ : | + | {{ : |
Die Anforderungen waren schnell klar: | Die Anforderungen waren schnell klar: | ||
- | * Alle 4 cm einen Abgriff für eine LED-Leuchte | + | |
- | * COM sowie Rot, Grün, Blau und Sound (= 1 [[https:// | + | * COM sowie Rot, Grün, Blau und Sound (= 1 [[https:// |
- | * Im Falle einer Flex-Leiterplatte können die Leitungen zum an die Beacons Löten direkt dran sein | + | * Im Falle einer Flex-Leiterplatte können die Leitungen zum an die Beacons Löten direkt dran sein |
- | * Als Backup/ | + | * Als Backup/ |
- | * Zusätzlich ausgeführt als 2,54 mm THT, falls SMD-Löten von Flachbandleitungen doch zu kompliziert ist | + | * Zusätzlich ausgeführt als 2,54 mm THT, falls SMD-Löten von Flachbandleitungen doch zu kompliziert ist |
- | * Aufteilung auf mehrere, aneinanderreihbare Leiterplatten | + | * Aufteilung auf mehrere, aneinanderreihbare Leiterplatten |
- | * Sonst werden Leiterplatte und Versand teuer, das Handling wird schwierig und JLC-PCB liefert eh erst ab 5 Stück | + | * Sonst werden Leiterplatte und Versand teuer, das Handling wird schwierig und JLC-PCB liefert eh erst ab 5 Stück |
- | * Neopixel-LEDs mit auf der Leiterplatte | + | * Neopixel-LEDs mit auf der Leiterplatte |
- | * Der Space hat sie rollenweise bekommen | + | * Der Space hat sie rollenweise bekommen |
- | * Dienen als Signal-Repeater, | + | * Dienen als Signal-Repeater, |
- | * Können ggf. als Debug-Output verwendet werden | + | * Können ggf. als Debug-Output verwendet werden |
- | * Fancy Bau-Bilder | + | * Fancy Bau-Bilder |
- | * Auch für andere Projekte geeignet | + | * Auch für andere Projekte geeignet |
- | * Ein IC je Leiterplatte | + | * Ein IC je Leiterplatte |
- | * Kompaktes Haupt-Design | + | * Kompaktes Haupt-Design |
- | * Abgriff mit allen acht Ausgängen | + | * Abgriff mit allen acht Ausgängen |
- | * Alle 8 cm möglich, für die (WERMA-)Produkte mit 70 mm Durchmesser | + | * Alle 8 cm möglich, für die (WERMA-)Produkte mit 70 mm Durchmesser |
- | * 2. Neopixel in dem Fall nicht nötig; Datenleitung überbrückbar | + | * 2. Neopixel in dem Fall nicht nötig; Datenleitung überbrückbar |
- | * Rest abschneidbar um Platz zu sparen | + | * Rest abschneidbar um Platz zu sparen |
- | * Pull-Up/ | + | * Pull-Up/ |
- | * GND-Ausgang für Dauer-An um z. B. [[https:// | + | * GND-Ausgang für Dauer-An um z. B. [[https:// |
- | * Einfach und universell einsetzbar | + | * Einfach und universell einsetzbar |
- | * Pfeile für Richtung des Datenflusses | + | * Pfeile für Richtung des Datenflusses |
- | * Beschriftung aller Anschlüsse | + | * Beschriftung aller Anschlüsse |
- | * Bei THT doppelseitig | + | * Bei THT doppelseitig |
- | * Beschriftung der wichtigsten IC-Merkmale | + | * Beschriftung der wichtigsten IC-Merkmale |
- | * Open Source Hardware | + | * Open Source Hardware |
- | * Beschränkung auf Footprints und andere Quelldaten mit passenden Lizenzen | + | * Beschränkung auf Footprints und andere Quelldaten mit passenden Lizenzen |
- | * Notfalls selbst erstellen | + | * Notfalls selbst erstellen |
- | * OSH-Logo und [[https:// | + | * OSH-Logo und [[https:// |
Ein paar Abende/ | Ein paar Abende/ | ||
Ein paar Tage später konnten die Leiterplatten bestückt werden. | Ein paar Tage später konnten die Leiterplatten bestückt werden. | ||
Zeile 177: | Zeile 196: | ||
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. | ||
- | {{: | + | {{: |
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:// | Ein Controller mit [[https:// | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
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 209: | ||
Eine kleine Test-Firmware wurde auch geschrieben. | Eine kleine Test-Firmware wurde auch geschrieben. | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
- | {{: | + | {{: |
+ | |||
+ | [[https:// | ||
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, | ||
- | {{: | + | {{: |
- | {{: | + | {{: |
- | Zu einem späteren | + | === Side-Quest: Glitches beseitigen === |
+ | Teilweise piepten manche/alle Summer, Leuchtelemente fielen aus und die Farbwiedergabe der Neopixel änderte sich abhängig davon, wie viele an waren. | ||
+ | Der Plan, die Leiterplatten direkt zusammen zu löten, um nur halb so viele Lötstellen machen zu müssen, hatte nicht funktioniert, | ||
+ | Es wurden daher alle Lötstellen zwischen den Leiterplatten nochmal überarbeitet und mit auf beiden Seiten angelöteten Stiftleisten versehen. | ||
+ | |||
+ | Üblicherweise packt der Controller die Daten über Push/Pull Ausgänge in die Eingänge der Schieberegister. | ||
+ | Beim Start/ | ||
+ | Der nOE-Eingang um die Ausgänge zu (de-)aktivieren wurde daher an den Controller angeschlossen und mit einem Pull-Up Widerstand versehen, damit beim Start/ | ||
+ | |||
+ | Es wurden zusätzliche Versorgungs-Leitungen verbaut, da die Leiterbahnen nicht ausreichten und es zu einem zu großen Spannungsausfall kam. | ||
+ | |||
+ | Danach stellte sich heraus, dass die Schieberegister nicht mehr gingen. | ||
+ | Im Datenblatt steht, dass der HIGH-Pegel für "≥ 0,85 Vcc" gilt; leider wurde das " | ||
+ | HIGH gilt also nicht ab 0,85 V, sondern bei 5 V Betriebsspannung ab 4,25 V. | ||
+ | Die Betriebsspannung für die Schieberegister sowie Neopixel wurde per Trimmer am StepDown-Wandler von 5,3 V auf 4,5 V verringert und durch Bauteiltoleranzen funktioniert es damit zum Glück trotzdem. | ||
==== Firmware ==== | ==== Firmware ==== | ||
- | Erstmal konnte vieles von [[https:// | + | Erstmal konnte vieles von [[https:// |
+ | |||
+ | === Sidequest: Extra-Features === | ||
+ | Es wurde letztlich alles nochmal umstrukturiert, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | Da das Schließen des Kabelkanals etwas kompliziert ist, wurde auch noch die Möglichkeit für FOTA-Updates implementiert. | ||
+ | Die LED-Leuchten zeigen in dem Fall den Fortschrittsbalken der Übertragung an. | ||
+ | |||
+ | Geplant ist noch eine einfache Weboberfläche. | ||
+ | Darüber sollen neben Soundausgabe und Rundenzahl auch die verwendeten Farben konfigurierbar sein. | ||
+ | Statistiken wie Anzahl gespielter/ | ||
+ | |||
+ | Mehr " | ||
+ | * Bis x Punkte (Bereits implementiert, | ||
+ | * Bis x Punkte bei y Punkten Mindestabstand; | ||
+ | * Gewinner von x Runden (Extra-Runde bei Gleichstand) | ||
+ | * Evtl. etwas mit unausgewogenen Schlägergrößen und Boosts; sich bewegenden Schlägern, ... | ||
+ | * Schlagt mir gerne Ideen vor | ||
+ | |||
+ | Vorschläge für weitere Idle-Animationen werden auch angenommen; sie müssen jedoch mit den sieben Zuständen Rot, Orange, Grün, Cyan, Blau, Violett und Weiß auskommen. | ||
+ | |||
+ | Der Code ist hier veröffentlicht: | ||
+ | |||
+ | ==== Ergebnis ==== | ||
+ | {{: | ||
+ | |||
+ | === Side-Quest: Dokumentation === | ||
+ | Beim Bau wurden viele Bilder gemacht, die gesammelt und nun in diese Dokumentation gepackt wurden. | ||
+ | |||
+ | Wenn man das Spiel irgendwo aufbaut, gibt es immer interessierte, | ||
+ | Ein Link zu dieser Wiki-Seite ist aber sehr lang und macht QR-Codes entsprechend groß. | ||
+ | Um eine eigene, (für mich) einfach zu merkende Kurz-Url zu haben, kümmerte ich endlich darum, wie ich einen Webserver auf meinen Cloud-Computer bekomme und mit meiner Domain verknüpfe, um die Domain endlich mal sinnvoll zu nutzen und auch [[https:// | ||
+ | |||
+ | ===== Spielanleitung ===== | ||
+ | * Taste drücken zum Start/ | ||
+ | * 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: 5 Punkte | ||
+ | * Konfigurationsbereich: | ||
+ | * Hinweis: Boost am Schläger-Ende verfügbar | ||
+ | * Reset: Tasten halten/ | ||
==== Installationsanleitung ==== | ==== Installationsanleitung ==== | ||
- | Das Spiel benötigt eine Grundfläche von 185 cm x 6 cm; etwas mehr Platz ist empfehlenswert, | + | Das Spiel benötigt eine Grundfläche von 185 cm x 6 cm; etwas mehr Platz ist empfehlenswert, |
+ | 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 selbst ist in jeder Ausrichtung betreibbar; jedoch sollte beachtet werden, dass (idealerweise unabhängig der Körpergröße) die Tasten gut erreichbar und die LED-Leuchten zum Spielen auf ganzer Strecke gut einsehbar sein sollten. | ||
+ | Letzteres am Besten auch für Publikum. | ||
- | Auch wenn die Beacons IP69k bieten, gilt das leider nicht für die verwendeten Arcade-Buttons, | + | Auch wenn die Werma-Beacons IP69k bieten, gilt das leider nicht für die verwendeten Arcade-Buttons, |
+ | 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 10 Punkte erzielt. | ||
+ | Beim Powercycle wird wieder die Standard-Konfiguration geladen: Mit Sound-Ausgabe bis 5 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 Konfigurationsanzeige. Dabei zählt | + | 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; zudem gibt es unter [[https://pixtxa.de/ |