Zufallszahlen Generator mit Ausgabe auf 7 Segment Anzeige...machbar?

  • Hallo Leute
    Ich möchte für meinen kleinen Sohn mit nem raspi zero wlan einen zufallszahlen generator mit auf 7 segment bauen. Es soll scrittweise erhöht werden können mittels software so dass er erstmal die zahlen 1-10 lernt und dann kann man schrittweise erhöhen also z.b. erst 0-10 dann 0-20 / 0-50 usw bis 99
    Er ist 2.5 jahre und lernt grade mit richtig viel spass Zahlen und ich dachte ein gerät welches einen knopf hat wo er drückt und dann zahlen angezeigt bekommt wird ihm richig spass machen.....
    ist dass zu verwirklichen ? und wenn ja wie .....

    Vielen Dank für eure Hilfe

  • Zufallszahlen Generator mit Ausgabe auf 7 Segment Anzeige...machbar?? Schau mal ob du hier fündig wirst!

  • Klar ist das machbar. Dafür ist der Pi aber eigentlich schon überdimensioniert - das geht noch kompakter mit einem Mikrocontroller.
    Google doch mal nach "arduino würfel 7-segment"
    Da das findest du Sachen wie das hier.
    Natürlich kannst du es auch mit dem Pi machen...

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

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> ist dass zu verwirklichen ?[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Sicher[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> und wenn ja wie .....[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Jede vernuenftige Sprache hat einen Zufallszahlengenerator[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Die Ansteuerung von 7-Segment Anzeigen wurde in diesem Forum schon haefig diskutiert, die Suchfunktion muesste viele Beitraege ans Licht bringen.[/font]

  • Hallo p-froese
    Ich finde die Idee Klasse und ich denke die lässt sich mit geringen Aufwand umsetzen. An den Zufallsgenerator wird nicht allzuviel Anforderung gestellt.
    Hast du dir über die Schaltungstechnik schon Gedanken gemacht?
    Bin gerade noch unterwegs, suche heute Abend mal was raus.

    Gesendet von meinem SM-G935F mit Tapatalk

  • :bravo2: boah Leute bin echt gerührt über soviele antworten.... ich möchte dass mit sowenig aufwand wie möglich realisieren kann zwar mit nen bratkolben umgehen und weiss ein wenig über wiederstände usw. aber so direkt mit microcontroler etc. hab ichbsoviel ahnunwie ne kuh vom osterhasen auch mit dem raspi programmieren beginne ich erst grad.....

    danke schon mal an alle die mir helfen ....

  • Hallo!
    So es hat mir keine Ruhe gelassen :)
    Ich habe unten ein 4-Stellen 7-Segment Display mit I2C Anbindung verlinkt.
    Der Verkabelungsaufwand reduziert sich damit stark.
    Mir wurde an anderer Stelle versichert das I2C kinderleicht ist :)
    Kann mir vorstellen das es von Ardafruit direkt Librarys gibt oder dir hier im Forum geholfen wird ;)


    https://www.adafruit.com/product/879


    Gesendet von meinem SM-G935F mit Tapatalk
    Automatisch zusammengefügt:
    Ergänzend das Bild zum Modul [emoji16]5aed89416f5bc299d76db53144259389.jpg

    Gesendet von meinem SM-G935F mit Tapatalk

    Einmal editiert, zuletzt von DerSchlangen (15. August 2017 um 15:10)

  • Hast du bereits einen Pi und/oder ein 7-Segment Display? Wenn nicht, möchtest du ein fertiges 7-Segment Display oder selber bauen? ;) Wie viel Stellen soll es haben?

    Das via Software hochschalten soll via Taster erfolgen?

  • hab noch 7 segment Anzeigen als bauteile liegen die ich mal ausgeschlachtet hab und der pi ist eigentlich über und da mein sohn älter wird kann man solche spiele immer modifizieren desshalb der pi und ausserdém lerne ich dann den pi zu programmieren am besten wäre ein bauplan und nen einkaufszettel und den raspi zu programmieren kann nicht so schwer sein ....
    Automatisch zusammengefügt:
    @ mygrafd ja hab eine pi zero wlan über und 8 Anzeigen und was den taster angeht hast du recht genau so solls sein
    Automatisch zusammengefügt:
    achso soll 2 stellen haben so das ich schrittweise von 0-10 zahlen wählen kann und wenn er dass kann erhöhe ich von 0-20 usw bis 99

    Einmal editiert, zuletzt von p-froese (15. August 2017 um 16:16)

  • Na siehste, dann brauchen wir dir auch nicht zum Arduino raten wenn du schon ein Pi da hast ;)

    Guck mal hier: https://www.forum-raspberrypi.de/Thread-tutoria…segment-anzeige
    Der Code ist zwar nicht wirklich toll - ist ja auch schon recht alt - aber sollte erst mal funktionieren ;)
    Oder zB der erste o. dritte Treffer: https://www.google.de/search?q=7+seg…tbs=lr:lang_1de

    Beim Code können wir dir gerne helfen - sofern du eine gewisse Eigeninitiative zeigst :)

  • moin so hab beim freundlichen Chinesen erstmal ne gross bestellung aufgegeben.... hab unter anderem ein komplttes 4x7 segment modul incl. sog. schiebe regler bestellt fürn raspi denn das ding kostet 1,45 und als einzelteile bin ich mit nem 20 er dabei ...... hab ein foto angehängt und bis die teile da sind beschäftige ich mich mal schon mit der script.....

    ich hoffe ihr helft mir dabei mir raucht nämlich jetzt schon die birne .... was tut man nicht alles für die lieben kleinen Teufel....
    Automatisch zusammengefügt:
    hier das bild .....

  • Ein Link wäre besser gewesen als ein Bild ;)

    Es gibt diverse Python Codes die sich mit dem TM1637 beschäftigen. Wichtig ist das du die I2C Version hast, es gibt nämlich auch noch eine SPI Version. Unterschied besteht in der Anzahl der rausgeführten Pins, I2C hat 4, SPI aber 5.

    https://github.com/johnlr/raspberrypi-tm1637
    LED 4 Segment I2C Display
    ..google Suche nach: raspberry python tm1637

    Was du dann nur noch brauchst ist eine Behandlung deines "Zufallgenerator"-Tasters.
    Beispiel:
    [code=php]
    #!/usr/bin/python3
    from RPi import GPIO
    from time import sleep
    from Queue import Queue
    from random import randint
    from functools import partial

    def interrupt_event(q, channel):
    q.put( randint(0, 10) )

    def main(PIN=24):
    queue = Queue()
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIN, GPIO.IN)
    try:
    GPIO.add_event_detect(PIN, GPIO.RISING, callback=partial(interrupt_event, queue), bouncetime=100)
    while True:
    sleep(0.1)
    if not queue.empty():
    zufall = queue.get()
    print( zufall )

    except KeyboardInterrupt:
    print("Quit")

    if __name__ == '__main__':
    main()
    GPIO.cleanup()
    print("Ende des Scripts")

    #EOF
    [/php]FAQ => Nützliche Links / Linksammlung => Interrupt => #8

  • ist ic2 steht im bild in der beschreibung....
    Automatisch zusammengefügt:
    z :wallbash: so hab jetzt mal meinen kopf bemüht .....
    erstmal muss ich ja eine Zufallszahl erzeugen.... und dass würde ich wie folgt machen...
    [font="monospace"]import random[/font]
    [font="monospace"]random.seed()[/font]
    [font="monospace"]x = random.randint(1,1000)[/font]
    [font="monospace"]print(x)[/font]

    [font="monospace"]so damit würde dann die Zahl auf dem monitor angezeigt....[/font]

    [font="monospace"]ist dass so richtig?[/font]

    Einmal editiert, zuletzt von p-froese (17. August 2017 um 14:10)

  • p-froese
    ``random.seed()`` bringt rein gar nichts. Das kommt aus irgendwelchen halbscharigen Büchern
    Mit den ``gpiozerpo`` Modul würde obiger Code fast auf die Hälfte reduziert werden:

  • Ok Leute immer langsam .... meigrafd dein code enthält bereits den zufallszahlen skript ist doch richtig ?

    Ok die Ausgabe auf dem display .... dazu muss der pi erstmal wissen das soon ding dran hängt und was damit machen soll... oder?
    und die verkabelung mit dem display und vor allem dem taster .....

    da hab ich noch echt nen brett vorm kopf .....

    Bitte habt nachsicht mit mir ich habe auf python noch nie einen code geschrieben....

    vielen Dank nochmal für eure hilfe wollte schon aufgeben .... aber als ich den kleinen kerl mit grossen augen neben mir sah wie ich gefrustet auf mein projekt geglotzt habt ... wurde mir bewusst irgendwie musst du dass hin kriegen .... :danke_ATDE:

    Einmal editiert, zuletzt von p-froese (19. August 2017 um 22:36)

  • Ja, die Zufallszahl wird bei mir in ein sog. Queue eingefügt sobald der Taster gedrückt wurde.

    "code"


    [code=php]
    #!/usr/bin/python3
    from RPi import GPIO
    from time import sleep
    from Queue import Queue
    from random import randint
    from functools import partial

    def interrupt_event(q, channel):
    q.put( randint(0, 10) )

    def main(PIN=24):
    queue = Queue()
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIN, GPIO.IN)
    try:
    GPIO.add_event_detect(PIN, GPIO.RISING, callback=partial(interrupt_event, queue), bouncetime=100)
    while True:
    sleep(0.1)
    if not queue.empty():
    zufall = queue.get()
    print( zufall )

    except KeyboardInterrupt:
    print("Quit")

    if __name__ == '__main__':
    main()
    GPIO.cleanup()
    print("Ende des Scripts")

    #EOF
    [/php]

    Hintergrund:

    Das Script selbst ist ein Thread.
    Code wird immer von oben nach unten verarbeitet, egal welche Sprache.
    In einem Thread kann immer auch nur eine Sache auf mal verarbeitet werden.
    Generell ist es besser ein Interrupt basiertes Script zu nutzen, als eins mit ner while Schleife zum anfragen des GPIO's... Warum ist relativ einfach: Weniger CPU Auslastung, genauer, einfacher. Das mit einer while zur Abfrage des aktuellen GPIO Zustands hat aufgrund der "thread"-Sache eben das Problem das möglicherweise ein Flankenwechsel verloren geht derweil das Script gerade beschäftigt ist.


    In folgender Zeile wird ein separater Thread für eine eigens definierte Funktion gestartet, die dann unabhängig des Scripts abgekoppelt im Hintergrund läuft:
    GPIO.add_event_detect(PIN, GPIO.RISING, callback=partial(interrupt_event, queue), bouncetime=100)
    Unsere eigens definierte Funktion hier ist: interrupt_event
    In dieser Callback sollte man aber nicht allzu viel machen, da diese sonst ebenso wie einer "polling"-while ausgebremst und ggf weitere Flankenwechsel derweil verpasst werden.


    Normalerweise wird dieser Callback nur der Pin/Channel übergeben, der den Flankenwechsel ausgelöst hat. Mithilfe partial modifizieren wir die Übergabe und fügen zusätzlich unser queue Objekt hinzu. Dadurch ist es uns möglich bei jedem Flankenwechsel auch etwas ins Queue einzufügen.
    Im Thread des Scripts verarbeiten wir dann unser Queue, da können wir uns dann auch austoben, da Flankenwechsel ja bereits ungehindert erfasst werden.

    Python
    # ...
            while True:
                sleep(0.1)
                if not queue.empty():
                    zufall = queue.get()
                    print( zufall )

    Das sleep blockiert das Script für die angegebene Zeit und dient dazu dass die while nicht extrem schnell rotiert und 100% CPU Auslastung verursacht.
    Anschließend prüfen wir ob im Queue ein Eintrag vorhanden ist - nur wenn das der Fall ist wird dieser in die Variable "zufall" ausgelesen und über das print ausgegeben. An dieser Stelle wäre es dann erforderlich das Display anzusteuern.

    RPi.GPIO Vs. gpiozero
    Hierzu sollte man auch noch wissen dass das RPi.GPIO Module schon recht alt ist (ca. 4 Jahre) und man vieles noch selber programmieren muss. Außerdem wird es leider nicht mehr weiterentwickelt.
    Das Module gpiozero ist noch recht jung, was aber nichts negatives ist. Es stammt zudem vom selben Entwickler der auch picamera geschrieben hat - beide sehr einfach zu verstehen und zugleich äußerst mächtig.
    Die meisten Sachen werden im Hintergrund bzw durch das Module himself automatisch erledigt, was man früher mit 'RPi.GPIO' eben noch selber schreiben musste...
    Bedeutet:
    Der Code von bootsmann in Beitrag#16 steht meinem im nichts nach und ist absolut ebenbürtig, wenn nicht sogar besser! Und natürlich viel viel weniger Zeilen ;) Um das aber klar zu stellen: Ein Queue gibts in seinem Code nicht.

  • boah dass echt harter tobak .... aber dank einer ruhigen nachtschicht trotz samstag nacht nur 3 Einsätze konnte ich google mit jeder menge dummen fragen quälen .... hab ne gute erklärung der gpio's gefunden welcher wofür ist und ein paddel wie ich dass auch kapiert....

    https://de.pinout.xyz is der link zu der erklärung.... Also die verkabelung vom display kriege ich jetzt hin ohne probleme
    welcher pin du für den taster festgelegt hast versuche ich mal an hand deines threads herraus zu bekommen....

    danke nochmal für die hilfe .....

Jetzt mitmachen!

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