Nach unterbrechen einer Lichtschranke einen Servo ansteuern

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich bin Anfänger unter Zeitdruck (mein Sohn hat bald Geburtstag).
    Er hat diverse RC-Modelle von SIKU u.a. auch den Muldenkipper. Nun habe ich ihm ein richtig tolles Silo gebaut und möchte das Befüllen der Mulde automatisieren.
    Der LKW soll eine Lichtschranke durchfahren, dabei kommt erst eine Unterbrechung durch die Zugmaschine und dann erst die Mulde!!
    Also nach der zweiten Unterbrechung sollen noch z.B. 10 Sek verstreichen, dann soll ein Servo eine ca. 90° Umdrehung machen, um den Schieber zu öffnen. Der soll geöffnet bleiben, bis der LKW soweit vorgefahren ist, bis die Mulde die Lichtschranke wieder frei gibt. (Die LS ist ein Stück vor dem Schieber, das passt dann also)
    Meine Hardware bzgl. der Lichtschranke sollte so aussehen :
    https://tutorials-raspberrypi.de/infrarot-licht…digkeit-messen/
    Allerdings möchte ich eigentlich keine Endlosschleife nehmen sondern sowas wie ein Interrupt, damit der Pi noch anderes erledigen kann

    Dann sollte eben der Servo angesteuert werden, gefunden habe ich dazu folgendes:
    https://tutorials-raspberrypi.de/raspberry-pi-s…otor-steuerung/

    Tja, ich kann aber beides nicht miteinander verknüpfen, weiss nicht was ich am Lichtschrankencode weglassen kann, weil ich ja nur eine LS habe usw.

    Wäre supernett, wenn mir das wer tippen würde, weil ich nur noch bis zum 18.5. Zeit habe und ein Silo aus Holz-Eisstäben bauen hat echt gedauert :)
    Vielen Dank und viele Grüße
    Jörg

  • Nach unterbrechen einer Lichtschranke einen Servo ansteuern? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Diese Schleife sorgt dafür, dass das Script nicht einfach durchläuft und sich danach beendet, sondern hält es am laufen. Mit z.B "time.sleep(0.1)" wird die Schleife für 0,1 Sekunde angehalten, bevor sie weiterläuft. Durch diese kurze Pause wird die Prozessorauslastung enorm verringert. Bei gpiozero setzt man einfach "pause()" ans Ende der Datei und hat den selben Effekt, das Programm läuft weiter.

  • Ja, so hatte ich das auch verstanden. Bei EINEM Script macht das ja auch keine Probleme, wenn der Raspi noch weitere Aufgaben bekommt gehen diese Schleifen aber schon sehr auf den Prozessor.
    Ein Interrupt ist da halt die bessere Wahl. Dann wartet niemand, sondern das Programm wird bei einer Aktion überhaupt erst aufgerufen.

    • Offizieller Beitrag


    Dann wartet niemand, sondern das Programm wird bei einer Aktion überhaupt erst aufgerufen.

    Nein, da hast Du was falsch verstanden. Um ein Interrupt ausführen zu können, muss dieses ja in einem Script / Programm stehen welches permanent läuft (dank einer while-Schleife). ;)

    Mehr zu Interrupt ist >>hier<< gut verständlich beschrieben.

  • hyle ... inzwischen verstehe ich meinen Denkfehler. Ich habe den Interrupt mit einem eigenen Task/Prozessen verwechselt.
    dll-live danke für den Link, inzwischen hatte ich mich was Interrups angeht etwas informiert.

    Aber dennoch, diese while-Schleife stört mich .... mag ja dämlich klingen, aber irgendwie .... nööööö
    Kann ich mehrere Python-Scripte gleichzeitig starten? Was passiert wenn ich mehrere starte und jeder so eine Schleife verwendet?

    • Offizieller Beitrag

    Du könntest das wie im Link von Dani auch mit der "GPIO.wait_for_edge"-Variante (z.B. gleichzeitig als shutdown-Taste) machen, daran hatte ich gar nicht mehr gedacht :blush: , aber das stört mich wiederum irgendwie. Aber ist Dein Projekt...

  • dll-live stimmt, entschuldige, da bin ich mit dem Interrupt-Beispiel durcheinandergekommen, das ich noch gefunden hatte ..........
    [Eigenlob an] boa, hab schon so viel gestöbert... [/Eigenlob aus]

    hyle ich werde das aber mal probieren umzusetzen und abwarten wie das so klappt.

    Vielen Dank euch Beiden für die Tips
    Gruß Jörg

  • So,
    die Bastellei ist fertig und die Lichtschranke funktioniert auch, das Programm aber nicht :no_sad:
    Nach dem Start passiert erstmal nichts, der Schieber (Servo) bleibt zu.
    Wenn ich die Lichtschranke unterbreche fährt er auf() und nach 3Sekunden wieder zu(), das wiederholt sich dann unendlich, egal ob die LS noch unterbrochen ist oder nicht.
    Das auf(), time.sleep, zu() ist nur zu Testzwecken da drin.
    Es soll mal so sein (und zwar bis Donnerstag, wg. Geburtstag) das der Schieber auf geht, 5sec nachdem die LS unterbrochen wurde und wieder schliesst, wenn die LS wieder frei ist (LKW weit genug vorgefahren).
    Wäre echt super, wenn mir da wer helfen könnte, bin echt am verzweifeln.

  • Habe das Problem jetzt lösen können. :bravo2:
    Wenn sich das mal ein Profi ansehen würde, ob das SAUBER gelöst ist, wäre das sehr nett.

Jetzt mitmachen!

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