Schiffe Versenken im Großformat 2 x 2 m Wände - und Felder sollen mit Handfläche anwählbar sein - GPIO PINs reichen natürlich nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen. Ich möchte ein Schiffe-Versenken Spiel etwas größer umsetzen. Die Idee ist, dass jeder Spieler eine Fläche vor sich hat mit 2 x 2 Meter. Als Qube angeordnet, können so vier Spieler auch gleichzeitig spielen.

    Die Ansteuerung der LEDs hinter dem Spielfeld ist kein Problem, hier benötige ich nur ca. 3 GPIO Pins.
    Kopfzerbrechen bereitet mir die notwendige Anzahl an Eingängen für die Taster. Das klassische Spielfeld beim Schiffe-Versenken ist ja 10 x 10 Felder. Somit wären das 100 notwendige Eingänge.

    Eine Möglichkeit wäre mittels I2C Port Expander. Bei einer max Anzahl von 8 Port Extendern, würde ich somit 128 Ein-/Ausgänge erhalten.
    In diesem Fall würde ich die Umsetzung so gestalten, dass jeder Spieler seinen eigenen Raspberry Pi hat und das jeweilige darauf laufende Spiel mittels Netzwerk und Datenbank mit den anderen Spielern kommuniziert und so die Spiel-Logik abgebildet wird.

    Aber vielleicht hat ja noch jemand eine bessere Idee oder es gibt schon eine fertige Erweiterung, die so viele Ein-/Ausgänge bereitstellen kann?

  • Schiffe Versenken im Großformat 2 x 2 m Wände - und Felder sollen mit Handfläche anwählbar sein - GPIO PINs reichen natürlich nicht? Schau mal ob du hier fündig wirst!

  • Ist 2x2 Meter nicht etwas groß? Da hast du das unterste Feld am Fußboden und ein Kind kommt selbst gestreckt nicht ans oberste Feld. Das sollest du vielleicht noch mal überdenken.

    Die Taste kannst du als Matrix organisieren. So kannst du mit 20 GPIOs 10x10 = 100 Taster erfassen.

    Das Ganze dann vier mal? Da wäre es vielleicht am besten, jedes 10x10-Feld mit einem eigenen µC zu erfassen - der braucht halt genügend GPIOs. Oder vier Porterweiterungen mit je 20 (32) GPIOs. Alternativ könnte man auch was mit Schieberegistern bauen.

    Für 400 Taster ginge auch eine Matrix mit 20x20 GPIOs - mit einem µC mit genügendd GPIOs, Porterweiterungen (48/64 Bit) oder auch mit Schieberegistern.

    Eine weitere Möglichkeit wäre, 4-Kanal-Multiplexer einzusetzen und die vier 10x10 Felder nacheinander anzusteuern.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (11. Januar 2023 um 11:03)

  • Meiner Ansicht nach hatte jar schon einmal hier in einem Beitrag die notwendigen Beschaltungspläne bzw. die Links dazu hier gepostet.

    stimmt, ist halt schwer zu finden hier.

    https://www.mikrocontroller.net/articles/Entprellung

    https://www.mikrocontroller.net/topic/6491

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ist 2x2 Meter nicht etwas groß? Da hast du das unterste Feld am Fußboden und ein Kind kommt selbst gestreckt nicht ans oberste Feld. Das sollest du vielleicht noch mal überdenken.

    Die Taste kannst du als Matrix organisieren. So kannst du mit 20 GPIOs 10x10 = 100 Taster erfassen.

    Das Ganze dann vier mal? Da wäre es vielleicht am besten, jedes 10x10-Feld mit einem eigenen µC zu erfassen - der braucht halt genügend GPIOs. Oder vier Porterweiterungen mit je 20 (32) GPIOs. Alternativ könnte man auch was mit Schieberegistern bauen.

    Für 400 Taster ginge auch eine Matrix mit 20x20 GPIOs - mit einem µC mit genügendd GPIOs, Porterweiterungen (48/64 Bit) oder auch mit Schieberegistern.

    Ja stimmt schon, natürlich darf das Anzeige-Display nicht so hoch hängen... Das sind dann aber alles noch Details für die Anordnung. Es wird ein eigenes Feld mit 10 x 10 geben, auf dem jeder Spieler am Anfang seine Schiffe durch Berühren der Felder setzen kann. Das zweite Feld 10 x 10 dient der Anzeige der Schüsse auf den Gegner. Ein Treffer wird das LED Feld z.B. rot. Bei keinem Treffer geht das Feld einfach aus. Wird man selber getroffen, wird kurz ein Ventil angesteuert und gibt etwas Luft mit ein paar Tropfen Wasser und Ton aus. Also Effekte will ich auch mit einbauen.

    Das Ganze soll ein kleines Projekt für meine FI Azubis werden. Unser Schwerpunkt liegt natürlich auf Programmierung. Aber irgendwie müssen wir ja auch die Elektronik mit umsetzen. Da bietet sich der Raspberry ideal für uns an, da wir diesen auch bei anderen Sachen bereits ausgiebig nutzen.

    Stimmt Schieberegister ist auch eine sehr gute Idee. Diesen können wir permanent abfragen. Zumal die sehr günstig sind. Danke für die Idee.

  • Es wird ein eigenes Feld mit 10 x 10 geben, auf dem jeder Spieler am Anfang seine Schiffe durch Berühren der Felder setzen kann. Das zweite Feld 10 x 10 dient der Anzeige der Schüsse auf den Gegner.

    Also für jeden Spieler 2 mal 10x10 Felder - das verdoppelt den Aufwand. Wäre es nicht einfacher, die Eingabe auf der gleichen Matrix zu machen, wie das eigentliche Spiel? Du brauchst ja sonst 400 zusätzliche Taster. Die Situation der eigenen Schiffe (wo sie sind und ob sie getroffen wurden), kann man ja dann in einer xtra Matrix einfach mit LED-Stripes anzeigen. Das spart den zusätzlichen Tasteraufwand.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • denke an die Entprellung, an 3.3V Kompatiblität.

    Szenario:

    Timer IRQ 10ms, 16Bit also eine Reihe (oder Spalte) legt den Port auf low (oder high, ggffs. mit Entkopplungsdioden um Mehrfach Erkennung zu vermeiden)

    dann einlesen.

    2x MCP23017 (a 16 bit Port)

    https://www-user.tu-chemnitz.de/~heha/Mikrocon…astenmatrix.htm

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Guten Morgen,

    mit der Adressierbarkeit kannst du wie jar schon aufzeigte, und diesen MCP23X17 in der 2er Paarung 16 * 16 = 256 Tasten abfragen, oder dann in der maximalen Auslegung über diese A0-A2 Address-Pins 4 * ( 16 * 16 ) = 1024 Taster abfragen. Ob du dich dabei für die langsamere I²C Variante oder die bedeutend schnellere SPI Variante entscheidest, hängt damit sowohl von der Beschaffungslage wie auch der gewünschten Abfragerate ab.
    Ich verstehe zudem nicht, warum man die Aufgabenstellung die durch den TO nun relativ präzise genannte wurden anfängt in Frage zu stellen. Man kann doch nicht nur weil der Hintergrund ein Game genannt wurde einfach sagen, lass einfach paar Tasten weg. Wenn die Aufgabenstellung ohne den

    Gaming Hintergrund genannt worden wäre, ich möchte 860 oder 592 Tasten abfragen, kann man doch nicht einfache sagen, lasse 256 Tasten weg, die brauchst du nicht wirklich.
    Vielleicht sollten sich hier einige Forenmitglieder einfach mal etwas mehr darüber Gedanken machen, welche Auswirkungen solche Aussagen für das Ansehen des Forums haben. Viele Mitglieder werden hier offensichtlich, auch mit Absicht, durch solche bevormundenden Aussagen verschreckt.

    es grüßt euer
    Willy

  • Der TO hat ja auch klar gesagt, dass er 4 RPIs und 32 Portexpander einsetzen würde, um diese Aufgabe zu lösen. Na, dann lasst ihn doch. Muss ihn doch keiner belästigen mit Dingen wie Matrixtasten. Seine Frage war schließlich, wie man 400 Eingänge bereitstellen kann.

    Übrigens hat der TO auch nicht nach Entprellung, Logicleveln und Timer-IRQs gefragt.

    Doch, man kann hier sagen, dass man 400 Taster weglassen kann. In der guten Absicht, dem TO viel Arbeit und viele Kosten zu sparen, mit einer Anregung, auf die er vielleicht selbst noch gar nicht gekommen ist.

    Fazit: Jar und Willy (und Franky) dürfen alles sagen, Gnom aber nicht. Woran liegts? Minderwertigkeitskomplexe?

    Wenn hier jemand gerade versucht, irgendjemanden zu bevormunden, dann bist du das!

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Einmal editiert, zuletzt von Gnom (13. Januar 2023 um 10:46)

  • Vielleicht sollten sich hier einige Forenmitglieder einfach mal etwas mehr darüber Gedanken machen, welche Auswirkungen solche Aussagen für das Ansehen des Forums haben.

    Man kann auch auf die Kacke hauen.

    Wer sich hier Gedanken machen sollte fragt sich wohl. Da würde ich eher NICHT auf Gnom zeigen.

    Was ist eigentlich aus deinem riesen Projekt geworden. Ampeln schalten und so oder war das nur Vorwand?

  • Moinsen,

    Ich kann diese Aufregung gar nicht verstehen.

    Auf der einen Seite wird von der Verringerung des Aufwandes gesprochen, auf der anderen Seite wird schon wieder im Gegenzug die Worte einer Bevormundung angesprochen.

    Egal für welche Abfragemethode sich der TO M4RC0K1 entscheidet - jede Methode hat Vor- und Nachteile, aber auch Gemeinsamkeiten. Dazu zählt, wenn er eine Schaltung gleicher welcher Ausführung an eine RasPi anschließt, muss er sich an die Logiklevel und damit an das Spannungslimit von 3,3 Volt halten. Auf diesen Punkt aufmerksam zu machen, was soll daran falsch sein, wenn man das noch einmal erwähnt ?
    Zum Zweiten gilt für jeden mechanischen Taster das dieser prellt. Warum soll man den TO nicht auf diesen Umstand aufmerksam machen dürfen, wenn besonders so schnelle Abfrageraten benötigt werden ?
    Das ist mit nichten eine Bevormundung !
    Aber auch bei der Anfragemethode muss man nicht in solchen Dimensionen denken.
    Für die Variante 10 x10 pro RasPi also 100 Eingabequellen kommt man über eine Matrix mit mit 3 mal PCF8574 aus. Denn 8 x 16 sind 128 Kreuzungspunkte und damit lassen sich problemlos die 100 Taster für ein einzelnes Spielfeld umsetzen. Damit sind wir multipliziert mit 4 RasPi bei nur 12 dieser PCF8574 8-Bit Portexpander und nicht bei anderen Menge. Alternativ lässt sich eine solche Tastaturmatrix auch mit einem MCP23008 und einem MCP23017 aufbauen und würde damit ebenfalls auf eine 8 x 16 er Matrix kommen. Zumal die Softwarebibliotheken für den MCP23XYY [ X für I²C oder SPI und YY für die 8 oder 16 Bit Variante ] für die Programmiersprache C/C++die gleichen sind, und somit neben einer Materialeinsparung auch ein Reduzierung des Programmieraufwandes bedeuten würde.

    Mit diesen wenigen Portexpandern pro RasPi lässt sich in der Folge auch der Bus für weitere Portexpander nutzen um diesen Spritzeffekt "Schuß ins Wasser" steuern zu können. Auch diese Ansteuerung läßt sich sehr bequem über eine Matrix umsetzen. Somit würde sich der Gesamtaufwand für eine Matrixabfrage verbunden mit einer Matrixsteuerung für die Wasserspritzeffekte weit unter dem halten, was im Vergleich bei anderen Varianten ( Platzbedarf ) entstehen würde.
    Ob man oder der TO dann pro Spieler ein eigenes RasPi vorsieht und damit auf eine aufwendigere Kommunikation zwischen den Spieler-Steuereinheiten setzt, oder das ganze von einem RasPi erledigen läßt, soll doch bitte der TO selber entscheiden. Aus meiner Sicht sind für dieser Aufgabe keine 4 Stück RasPi notwendig.

    Franky

  • Das Ganze soll ein kleines Projekt für meine FI Azubis werden. Unser Schwerpunkt liegt natürlich auf Programmierung.

    Ich denke das soll auch die Kommunikation zwischen Systemen beinhalten und somit sind wenigstens 2 Raspberries notwendig. Wenn es dann noch 4 Gruppen von Azubis sind die jeweils den Code gemeinsam entwickeln sollen machen 4 Raspberries durchaus Sinn. JM2C

  • Moinsen,

    auch diese letzte Aussage hat wieder einen Beigeschmack von "Bevormundung".

    Wenn es sich doch um eine Lernprojekt handelt, warum dann nicht auch vier unterschiedliche Aufbauvarianten ?
    Von vorn herein zu behaupten das es nur eine einzige wirklich "die" Lösungsvariante gibt, ist wohl mehr einer Ideologie zu verdanken.
    Um einen wirklichen Lerneffekt bei den Azubi Gruppen zu erreichen, wäre es doch aus meiner Sicht besser, hier einen MIX zu machen, damit die Azubis auch mal eine Vorstellung bekommen, welcher Aufwand steckt in der Hardware, und damit welche Platzbedarf entsteht damit auf einer Leiterplatte, bei gleichzeitigem Erkenntnisgewinn, welche Ansprüche werden an die Controller HW gestellt, und wie aufwendig ist die Programmgestaltung.
    Falls die Ressourcen über die Ausbildungsstätte zur Verfügung stehen kann doch eine Gruppe:

    - 1. Gruppe mit der Direktabfrage und -ansprache solcher Portexpander im Direct-Modus arbeiten

    - 2. Gruppe nutzt Portexpander für eine Matrixabfrge /- steuerung

    - 3. Gruppe nutzt fertige Matrix-Encoder- und Decoder Bausteine

    - 4. Gruppe nutzt das auch hier schon erwähnte Schieberegister

    - oder / und die fünfte Gruppe die alles über einen Controller abwickelt.
    Die Modularität lässt sich heute doch über standardisierte Schnittstellenkomponenten problemlos realisieren.

    Damit entsteht doch ein nicht ganz zu unterschätzender Lerneffekt, denn Wissensvorgaben "Du muss etwas immer so oder so machen !" für zu Fachidioten, die keine eigene Entscheidung aufgabenorientiert mehr treffen können, weil sie nur mit einer der vielen Lösungsmöglichkeiten in Kontakt gekommen sind.
    Damit ließe sich auch sehr gut darstellen, welche Anfrage- oder Ausgaberaten mit der jeweiligen Variante erreicht werden können, und welche Systemlast auf dem Controller die jeweilige Methode erfordert.

    Ich bin nach wie vor der Meinung, wenn es sich um Lernprojekte handelt, hier nicht vorauseilend schon Weg und Richtungen vorzugeben, sondern die Gruppen auch mal machen lassen. Denn die daraus erzielbaren Erkenntnisgewinne sind und können für die spätere Berufsausübung entscheidend sein. Eine Ausbildung soll in erster Linie Grundlagenwissen schaffen, und nicht schon den Horizont für spätere Aufgaben einschränken.

    Franky

    Einmal editiert, zuletzt von Franky07 (14. Januar 2023 um 09:29)

  • Hallo Franky07,

    sowas in der Art wollte ich auch gerade schreiben. Wenn es sich um ein gemeinsames Lernprojekt von mehreren Gruppen handelt - und es technisch mehrere Möglichkeiten gibt, die jeweils mit der gleichen Erfolgsaussicht zum Ziel führen:

    • manches ist mehr hardware-lastig
    • manches ist mehr software-lastig

    dann sollte jede Gruppe einen anderen Ansatz verfolgen. Am Ende berichtet jede Gruppe den anderen Gruppen. Und zum Schluss hat jede Gruppe den maximalen Lernerfolg.


    EDIT:

    Mir fällt gerade eine Geschichte aus meinem Berufsleben ein.

    Bei einem Projekt bei einem Kunden, den ich von 2008 bis 2014 betreut hatte, gab es eine neue Produktentwicklung. Ich war für die Qualifizierung der verschiedenen Maschinen zuständig.

    Eine Maschine von ca. 15 der neuen Produktionslinie war eine Laserschweißanlage, die zwar programmiert werden konnte, aber nicht so flott war. Aber für die Prototypen und erste Kleinserien war das OK. Das Produkt war recht erfolgreich. Irgendwann reichte eine Laserschweißanlage nicht mehr aus. Auch mit der zweiten baugleichen Maschine zusätzlich erreichten wir nicht die Stückzahlen, die die Kunden bestellten.

    Also reifte der Gedanke, ein 5-Achs-CNC-Laserschweißsystem eines der großen Anbieter zu erwerben.

    Die beteiligten Jung-Ingenieure analysierten den Prozess und stellten fest, dass der geschwindigkeitsbestimmende Schritt darin bestand, das Zwischenprodukt mehrfach auf einer Vorrichtung umzustecken, um die erforderlichen Schweißnähte (überwiegend luftdichtes Verschweißen von Fenstern aus Spezialglas in ein Metallgehäuse) anzubringen.

    Der im Projekt involvierte Kollege aus dem Prototypenbau sollte sich eine Vorrichtung ausdecken, die mit maximal zweimal Umstecken zum Ziel führt (Zeitersparnis beim Schweißen: dann 50 %).

    Er überlegte sich: Warum zweimal Umstecken? Genügt nicht einmaliges Umstecken? Und dann: Warum überhaupt Umstecken? Reicht nicht einmal Aufstecken des Zwischenprodukts auf die Vorrichtung und das CNC-Programm schweißt die Schweißnähte?

    Dann zeigte er die Idee den Jung-Ingenieuren. Ich war auch dabei. Die Jung-Ingenieure hatten ganz viele Einwände, warum das nicht geht, warum das wegen Verschleiß nicht lange gut gehen kann und dass der Ansatz überhaupt nur Scheiße ist.

    Ich habe die Idee ehrlich gesagt kaum verstanden. Mich hat aber Mut und Vision des Prototypen-Bastlers beeindruckt. Abschließend meinte ich dann zu den Jungingenieuren, dass man dem Kollegen (der einzige im Team, der nicht studiert hatte) mal eine Chance geben sollte, seine Idee umzusetzen.

    Er bekam die von ihm für erforderliche gehaltene Zeit. Er hat einen Prototypen gebaut. Er bastelte, fräste, schliff und polierte. Dann kam das Ergebnis. Raumschiff Enterprise wirkt dagegen wie ein Klapprad aus Kindertagen.

    Die Jung-Ingenieure hatten jetzt noch mehr Einwände, warum das nicht funktionieren könne. Er hat in die Vorrichtung noch etwas eingebaut, was Bauteile außerhalb der Toleranz beim Aufstecken bereits erkennen ließ. Die Jung-Ingenieure wurden immer skeptischer und wirkten wegen der vergeudeten Zeit immer angesäuerter. In der Zeit hätte er auch die Vorrichtungen der Altanlagen umbauen können etc.

    Dann wurde die Vorrichtung angeschlossen und ausprobiert. Funktionierte auf Anhieb. Sah geil aus. Machte Spaß, damit zu arbeiten.

    Der einzige Einwand der Jung-Ingenieure bestand dann noch darin, dass die Vorrichtung zu schnell verschleißen würde. Sie spekulierten mit wenigen 100 Exemplaren (Wochen-Volumen 35).

    Die Jahresproduktion von 2000 hat der Schnellschuss-Prototyp problemlos überstanden, ohne dass irgendwas verschlissen wäre. Das nächste Jahr genauso. Die Jahre vergingen. Der Prototyp blieb. Und auch 10.000 Stück schaffte der Prototyp. Dann war meine Zeit abgelaufen.

    Lasst die Teams doch einfach mal eigene Wege definieren, eigene Wege gehen. Nur so lernt man. Ich habe zu viele Leute erlebt, die keine eigenen Ideen hatten und selbst fertige Tutorials nicht umsetzen konnten, weil es dann auch woanders hakt.

    Viele geniale Entwicklungen kamen erst dadurch zustande, dass jemand bereit war, andere darin zu fördern, neue Pfade zu gehen, auf denen vorher niemand seine Spuren hinterlassen hat.

    Nicht jeder Gedanke wurde schon mal gedacht, um Neues zu durchblicken.

    Aber vieles davon mag funktionieren.

    [/Edit]


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    3 Mal editiert, zuletzt von Andreas (14. Januar 2023 um 20:43)

  • Ich hab den ganzen Haufen inzwischen geblockt und werde mir deren Nachrichten künftig einfach gar nicht mehr durchlesen. Hat eh keinen Zweck. Die haben doch meistens nur an anderen rumzumäkeln. Also mach dich locker.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moinsen,

    raspbastler, zur Forumskultur gehört auch, dass man andere Meinungen zulässt. Wenn du dich hier über andere Mitglieder aufregst, warum hast du dann nicht schon einen sachdienlichen Beitrag verfasst ?

    Über andere Meckern, aber selber auch nichts entscheidendes Beitragen, sieht für mich irgendwie komisch aus.

    Vielleicht liegt es an einer anderen Einstellung dieser Mitglieder hier etwas beitragen zu wollen ? Solange hier nichts unsachliches oder technisch falsches verbreitet wird, sehr ich das ganze eher locker.

    Franky

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!