Torzähler für Tischkicker (ist zu einem Arduino-Projekt geworden...)

  • Guten Tag allerseits


    Ich arbeite an einer Schule im Rahmen eines Förderkurses mit einem Schüler (13 Jahre) an folgendem Projekt:

    Wir wollen einen Tischkicker, der im Schulhaus steht, mit einem "Torzähler" aufrüsten: Hinter beide Tor wollen je wir eine Art "Kipptür" konstruieren, die bei einem Tor einen Druck-Schalter betätigt. An den Tischrand kommt ein Startknopf/Nullsteller. An der Kickerunterseite verbauen wir einen Raspberry Pi, der die Tore auf beiden Seiten zählt und auf einem Display anzeigt, den wir am Kickerrand befestigen. Der Nullsteller beginnt ein neues Spiel.


    :helpnew:
    Trotz Selbst-Studium und Suche im Netz brauchen wir Hilfe bei dieser Frage:
    Der Schüler hat bereits einiges mit Scratch programmiert, weshalb wir als erstes versuchen, das nötige "Zähl-und-Anzeige-Programm" mit Scratch zu realisieren. Und hier stossen wir auf eine bisher unbeantwortete Frage: (Wie) Lässt sich ein Scratch-Programm durch Betätigen eines Schalters starten, der am GPIO vom Pi angehängt ist? Unser GPIO ist für Scratch aktiviert gemäss dieser Anleitung, sodass wir die Törzähl-Schalter, die an den GPIO-Pins eingesteckt sind, in Scratch verwenden können. Ebenso den Nullsteller. Allerdings finden wir keinen Weg, das Scratch-Programm mit Druck von diesem Nullsteller beginnen zu lassen. Von Scratch dafür vorgesehen ist ja entweder Klick auf die grüne Flagge oder eine Taste der Tastatur. Allerdings wollen wir an den Kicker keine Tastatur anbauen.

    Besten Dank im Voraus!
    Morgy

    Einmal editiert, zuletzt von Morgy (26. Januar 2017 um 15:50)

  • Torzähler für Tischkicker (ist zu einem Arduino-Projekt geworden...)? Schau mal ob du hier fündig wirst!

  • Willkommen im Forum.

    Mich umtrieb mal eine ähnliche Idee, aber abgesehen von einer Recherche und der Bestellung von Komponenten habe ich mich noch nicht weiter dem Thema gewidmet. Grundsätzlich sollte überlegt werden, ob ein RasPi für die Umsetzung eine geeignete Basis darstellt. Es handelt sich letztlich um einen Computer, der hoch- und heruntergefahren werden muss. Wenn kein Monitor vorhanden sein wird - wie soll es dann gemacht werden? Headless per Button?

    Eine vielleicht bessere Alternative für die Hardware findet sich in einem Arduino (Clone). Passende Links wären zum Beispiel hier zu finden:

    http://www.mcseven.me/2010/08/pimp-m…eter/#Vorwort-1
    http://www.fingers-welt.de/phpBB/viewtopic.php?f=14&t=2652

  • Ich glaube da liegt ein grundlegendes Missverstaendnis vor - das scratch-Programm muss nicht gestartet werden durch den Tastendruck, sondern laeuft in einer Endlosschleife. Wenn einer der Torzaehler anspricht, wird die entsprechende Variable hochgezaehlt. Wenn der Nullsteller betaetigt wird, werden die Variablen einfach auf 0 gesetzt. Das war es. Kein starten.


  • (...) werden durch den Tastendruck, sondern laeuft in einer Endlosschleife. Wenn einer der Torzaehler anspricht, wird die entsprechende Variable hochgezaehlt. Wenn der Nullsteller betaetigt wird, werden die Variablen einfach auf 0 gesetzt. Das war es. Kein starten.

    Hallo deeds,

    Vielen Dank für diese Idee, der wir nachgehen werden. Dann steht und fällt unser Zähler mit der Gesamtstabilität des Systems, wenn es einmal gestartert ist. Vielen Dank!

    Morgy
    Automatisch zusammengefügt:


    (...) Grundsätzlich sollte überlegt werden, ob ein RasPi für die Umsetzung eine geeignete Basis darstellt. Es handelt sich letztlich um einen Computer, der hoch- und heruntergefahren werden muss. Wenn kein Monitor vorhanden sein wird - wie soll es dann gemacht werden? (...)

    Guten Tag Neueinsteiger

    Bei uns war zuerst der Raspberry Pi vorhanden und dann suchten und bewerteten wir Projekte, die wir damit realisieren könnten und landeten beim der Idee Kicker-Zähler. Mag sein, dass es geeignetere Hardware dafür gäbe, wir möchten es jedoch mit dem Pi versuchen.

    Ja, der Pi-Computer unter/im Kicker muss (mindestens) täglich hochgefahren werden. (Wohl eher deutlich häufiger....) Und im Kicker-Zähler-Betrieb soll der aktuelle Torstand nicht auf einem üblichen Monitor, sondern auf einem kleinen Display am Kickerrand ausgegeben werden.

    Grüsse von Morgy

    Einmal editiert, zuletzt von Morgy (8. Dezember 2015 um 10:03)

  • Das Problem wird nicht das Hochfahren sein, sondern das Herunterfahren. Wird der RasPi im laufenden Betrieb abgestellt, ohne vorher vernünftig herunter gefahren zu werden, dann wird das auf Dauer das Dateisystem ruinieren. Das gilt natürlich nicht für Betriebssysteme, die nur im Ram laufen. Aber davon gehe ich erst mal nicht aus. Eine mögliche Lösung wäre diese hier: RasPi (oder andere Hardware) per Knopfdruck starten und herunter fahren

  • Vielen Dank allerseits für die Tipps und die Anregungen. Wir versuchen es nun einmal wie geplant mit dem Raspberry Pi und diesem Display [Anzeige] (Adafruit 4-Ziffern 7-Segment Display mit I2C Backpack für Arduino - Rot, gefunden auf Amazon)
    Damit wir den Pi dennoch korrekt rauf und runter fahren können, haben wir vor, an der Tischunterseite mindestens eine Tastatur; eventuell noch einen Bildschirm zu befestigen.

    Wir melden uns so oder so hier wieder...

    Beste Grüsse von Morgy

    Einmal editiert, zuletzt von Morgy (21. Dezember 2015 um 15:42)

  • Guten Tag allerseits

    Wir haben in den vergangenen Monaten erschreckend wenige Fortschritte gemacht mit unserem "Selber-Herausfinden-Vorgehen" und kehren nun gezwungenermassen ins Forum für weitere Hilfe zurück. :no_sad:

    So ist unser Ist-Zustand:

    • Wir haben das oben erwähnte Adafruit LED-Modul gekauft, fertig gelötet und gemäss dieser Anleitung vom Anbieter am Pi ([font="Arial"]Modell B+, 512 MB RAM[/font]) angehängt in Betrieb genommen.
    • Unsere Idee, mit Scratch arbeiten zu können, mussten wir verwerfen, weil es nicht möglich ist, das LED-Modul mit Scratch zu verwenden. Zuminest nicht Leuten unseren Wissensstandes...
    • Der Hersteller Adafruit bietet jedoch Libraries und Beispielscripts an, um das Modul am Pi unter Python zu verwenden.
    • Das Python-Beispielscript für Zeitanzeige (ex_7segment.clock.py) läuft bei uns
    • wir konnten mit unserem "Try-and-error" Vorgehen dieses Beispiels-Skript abändern um beliege Zahlen auf dem Display anzeigen lassen.

    Nun kommen wir jedoch nicht weiter und brauchen Hilfe: Wir wollen: einen einfachen Druckschalter and GPIO vom Raspberry anstecken, sodass durch Drücken desselben eine Variable (=unser Torstand) erhöht wird. Wir versuchen, dafür ein Python-Programm zu schreiben und haben diese Fragen:

    • Wie verkabeln wir den Druckschalten: Pin Xy und Ground? Oder Pin Xy und 3.3V?
    • Welche Syntax brauchen wir für Definieren des verwendeten GPIO-Pins? (GPIO.setmode? GPIO.setup? Anderes?)
    • Welche Syntax brauchen wirs fürs Auslesen des gedrückten Schalters am GPIO, sodass wir eine Variable erhöhen können?


    Danke im Voraus für Tipps, Hilfe oder fürs Verweisen an Online-Hilfe. Zudem bitten wir um Nachsicht für unsere "Absolute-Python-Beginner-Questions".

    Morgy

  • Hello allerseits

    Hier ein Update zu unserem Projekt: Alle weiter oben aufgelisten Elemente konnten wir in der Zwischenheit lösen. Wir melden uns bei allfälligen neuen Fragen und wenn das Projekt beendet ist.

    Beste Grüsse
    Morgy


    Unser derzeitiges Skript sieht so aus:

    #!/usr/bin/python
    from Adafruit_7Segment import SevenSegment # Anschluss des Displays gemaess Dokumentation auf der Adafruit Webseite
    import os
    import time
    import RPi.GPIO as GPIO


    GPIO.setmode(GPIO.BCM)
    GPIO.cleanup()
    GPIO.setwarnings(False)
    GPIO.setup(27,GPIO.IN,pull_up_down=GPIO.PUD_UP) # ,pull_up_down=GPIO.PUD_UP ist noetig, wenn die Schalter keine Verbindung
    GPIO.setup(24,GPIO.IN,pull_up_down=GPIO.PUD_UP) # zu 3V (ueber 1kOhm) haben. Ohne dieses Argument ist Spannung noetig

    print"------------------"
    print"Programm fuer Tischkicker mit zwei Druckschaltern. Torstands-Ausgabe an Adafruit 7-Segment Display"
    print"------------------"

    segment = SevenSegment(address=0x70)

    Rot = 0
    Blau = 0

    # Die folgenden 7 Zeilen definieren, wie die beiden Torstaende am Display anzezeigt werden
    def aktualisiereAnzeige (Team, Punktestand):
    if Team == "rot":
    segment.writeDigit(0, int(Punktestand / 10))
    segment.writeDigit(1, Punktestand % 10)
    if Team == "blau":
    segment.writeDigit(3, int(Punktestand / 10))
    segment.writeDigit(4, Punktestand % 10)

    aktualisiereAnzeige("rot",Rot) # Diese 2 Zeilen, damit von Anfang an der Punktestand gezeigt wird.
    aktualisiereAnzeige("blau",Blau)

    # Hier sind die zwei parallel laufenden Schlaufen
    while True:
    if ( GPIO.input(27)!=True :( # !=True kehrt den Ausgabewert des Schalterzustands um. Ohne dieses Element zaehlen die Torstaende bei nicht gedruecktem Schalter hoch. Druecken der Schalter unterbricht das Hochzaehlen
    Rot = Rot + 1
    aktualisiereAnzeige("rot",Rot)
           
    if ( GPIO.input(24)!=True :(
    Blau = Blau + 1
    aktualisiereAnzeige("blau",Blau)
           
    time.sleep(0.10)

    Einmal editiert, zuletzt von Morgy (26. Januar 2017 um 15:33)

  • Hallo zusammen,

    ich arbeite gerade an einem ganz ähnlichen Projekt.
    https://github.com/illing2005/raspberry-foosball

    Bisher habe ich über 2 Lichtschranken einen Torzähler realisiert.
    Der aktuelle Punktestand wird auf einer Android App dargestellt.

    Der nächste Schritt ist es, mit der Raspberry Pi Camera für eine automatische Replay Funktion zu bauen.
    Vielleicht ist es für euer Projekt hilfreich.
    Freue mich natürlich auch über Feedback!

  • Zunächst einmal: Ich finde die Idee eines Score-Counters für Tischfußball großartig - ich bin selbst absoluter Kicker-Fan, toll wenn sich beide Hobbys (Spielerei und Bastelei) kombinieren lassen. Vielleicht realisiere ich ein ähnliches Projekt selbst mal, wenn ich mir irgendwann mal das Know-How dazu angelesen habe.


    Der nächste Schritt ist es, mit der Raspberry Pi Camera für eine automatische Replay Funktion zu bauen.
    Vielleicht ist es für euer Projekt hilfreich.
    Freue mich natürlich auch über Feedback!

    Die Idee finde ich super! Kann ich persönlich gut vorstellen, wenn du beim Kickern noch emhr Technik-Interessierte dabei hast, kann das sicher sehr witzig werden! Weißt du denn schon wie du die Pi Camera(s) ausrichten willst?

  • Hallo allerseits

    Es ist so, dass wir inzwischen tatsächlich ein weitgehend fertiges, funtktionierendes Programm in Python für den Raspberry geschafft haben. Als es dann ums Einbauen, um die Stromversorgung des Pi und und den Programmstart ging, haben wir beschlossen - wie im zweitobersten Beitrag vorgeschlagen - einen Arduino zu verwenden statt den Raspberry. Die gewichtigen Hauptgründe für diesen Wechsel sind für uns:

    • der Arduino startet, wenn unter Spannung, blitzschnell das Programm (Sketch genannt), welches letztmals hochgeladen wurde. Es entfällt somit das Booten vom Pi, und das Einrichten eines automatischen Logins und des Starts des Torzähler-Programms. Das wäre für den Alltag im Schulhaus-Flur zu heikel und umständlich gewesen!
    • der Arduino braucht sehr wenig Strom. Wir verwenden einen günstigen Powerbank von "Tchibo" (unten am Kicker fixiert), welcher tage- wenn nicht wochenlang halten sollte.
    • der Arduino lässt sich resetten und vom Strom trennen und dann wieder anschliessen, ohne das etwas Schaden nimmt.

    Damit entfällt ab jetzt die Programmierung in Python und ich schliesse hier das Projekt. Wir haben zwar viel Zeit investiert ins Projekt unter Python, aber auch viel gelernt....

    Übrigens haben wir uns entschlossen, diese Lichtschranke von Adafruit zu verwenden statt Druckschalter. Erste Tests damit verliefen sehr gut - sowohl auf dem Pi als auch auf dem Arduino.

    Dennoch werde ich über den Zähler, wenn er einmal ganz fertig ist und irgendwo dokumentiert, hier noch informieren.

    Danke für alle Hilfe und beste Grüsse von Morgy

  • Ende gut, Kickerzähler gut! Ganz nach diesem Motto ist unser Projekt tatsächlich zu einem alltagstauglichen Zähler geworden! Er zählt schnelle und langsame Schüsse aus jedem Winkel anstandslos und zuverlässig.

    Im oder auf dem abgebildeten Gehäuse aus dem Baumarkt sind:


    Unter dem Tisch in einem weiteren Gehäuse sind:

    • ein Arduino UNO
    • ein 6000 mAh USB-Power-Bank von Tchibo (damit läuft das System etwa 30 Stunden pro Aufladung, wobei der "Hauptstromfresser" das Display ist.)
    • Ein kleines Netzgerät zum Aufladen der Powerbank (Schliessen wir über Nacht an den Strom, wenn der Stromtank leer ist.)


    In den beiden Toren sind:


    Daneben brauchten wir noch:

    • Diverse Kabel
    • Ein Stück Holz als Sockel fürs Display-Gehäurs
    • Kleinmaterial


    2017-05-01-16.29.19.jpg
    2017-05-01-16.32.17.jpg

    Weiter Bilder gibt es hier

    Und schliesslich noch unser Arduino-Programm, "Sketch" genannt. Wir haben jede Zeile kommentiert, weil das ausgedruckte Programm für Interessierte an die Wand neben den Kicker kommt.


    Hier auf hackster.io ist unser Projekt noch in Englisch abgelegt

    Einmal editiert, zuletzt von Morgy (8. Mai 2017 um 11:28)

  • Das gefällt mir sehr gut :)

    Der Opa meines Sohnes ist ein Kicker-Enthusiast und ich hoffe in Zukunft das Interesse meines Sohnes an Technik über solche interessanten Projekte zu wecken.

    Eine (in meinen Augen) sinnvolle Erweiterung wäre noch eine Möglichkeit die Toranzeige zu korrigieren. Also einfache Taster für +1 oder -1. Nicht, dass man den Lichtschranken misstrauen sollte, aber sicherlich gibt es auch den einen oder anderen Spaßvogel, der mal irgendwas in die Lichtschranke wirft ;-).

    Aber generell sehr schön, den Abschluss des Projektes hier zu sehen - so weit möchte ich auch erstmal kommen :)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Eine (in meinen Augen) sinnvolle Erweiterung wäre noch eine Möglichkeit die Toranzeige zu korrigieren. Also einfache Taster für +1 oder -1. Nicht, dass man den Lichtschranken misstrauen sollte, aber sicherlich gibt es auch den einen oder anderen Spaßvogel, der mal irgendwas in die Lichtschranke wirft ;-).

    Gute Idee - danke, wir lassen uns das durch den Kopf gehen. Es überzeugt auch nicht wirklich, dass immer eine Null angezeigt wird. 0 : 1 wäre sauberer als 00:01 Vielleicht versuchen wir auch das noch zu optimieren...


  • ..... Es überzeugt auch nicht wirklich, dass immer eine Null angezeigt wird. 0 : 1 wäre sauberer als 00:01 Vielleicht versuchen wir auch das noch zu optimieren...

    versuche es doch so:

    Code
    if(Rot / 10)
     matrix.writeDigitNum(0, (Rot / 10) );

    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)

  • versuche es doch so:

    Code
    if(Rot / 10)
    matrix.writeDigitNum(0, (Rot / 10) );

    Hey, vielen dank. Das geht tadellos. Allerdings mussten wir noch beim Nullsteller einfügen:

    Code
    matrix.clear()


    Ansonsten blieb eine allfällige Zehner-Stelle nach dem Nullstellen übrig.

    2017-05-11-09.40.21.jpg

    Beste Grüsse

  • Nun gibt es noch ein Video:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Ducktape, uhuhu :)

    Ne, nettes Video. Aber habe ich das richtig gesehen, dass der Zähler nur auf einer Tischseite ist? Ggf. wäre das ja noch eine Mini-Verbesserung für die Zukunft, dass die Anzeige an mehreren Stellen eingebaut wird und ggf. lässt sich der "Klotz" ja sonst auch unter dem Tisch verbauen und die Anzeigen dann irgendwie besser in den Tisch integrieren (sollte aber wahrscheinlich ein erfahrener Schreiner machen ;)).

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

Jetzt mitmachen!

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