Beiträge von Shaq

    Hier seht Ihr mal, dass es anscheinend sehr gut möglich ist, den Roboter ohne Begrenzungskabel zu betreiben. Der Aufwand der dahinter steckt ist wahrscheinlich imens.

    Klickt mal auf das "i" bei den einzelnen Punkten das klingt schon interessant. Sowas hatte ich mir für später auch gedacht, aber ich glaube der Aufwand ist einfach zu groß.

    Link

    LG

    Bastelstube

    Hier nun das Video. Könnt Ihr euch ja mal anschauen ich überlege auch mal weiter woran es liegen könnte.

    Habe den Code von #70 verwendet.

    Hier noch die Ausgabe zum Video.

    Spoiler anzeigen

    pi@raspberrypi:~ $ sudo python MotorTest2.py

    Steering: forward

    Distanz: 167.826126362

    Zu nah: 3.14 cm

    Steering: left

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 3.14 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 6.79 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Zu nah: 3.55 cm

    Distanz: 166.07087234

    Steering: forward

    Distanz: 4.72315426531

    Zu nah: 4.72 cm

    Steering: left

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.72 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 4.57 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 5.48 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Zu nah: 7.02 cm

    Distanz: 166.033876353

    Steering: forward

    Distanz: 166.983440005

    Zu nah: 5.33 cm

    Steering: left

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Zu nah: 5.33 cm

    Distanz: 4.48062502105

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 4.48 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Zu nah: 8.24 cm

    Steering: forward

    Distanz: 166.033876353

    Distanz: 165.121308688

    ^CException in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner

    self.run()

    File "/usr/lib/python2.7/threading.py", line 754, in run

    self.__target(*self.__args, **self.__kwargs)

    File "MotorTest2.py", line 54, in measure_distance

    if status["stop"]:

    File "<string>", line 2, in __getitem__

    File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod

    conn.send((self._id, methodname, args, kwds))

    IOError: [Errno 32] Broken pipe

    LG

    Bastelstube

    Bei deinem Aufbau verwendest du einen Levelshifter für den HC-SR04 ... Hast du den schon mal gegen einen 0815 Spannungsteiler ala Widerstände ausgetauscht?

    Wichtig ist das in jedem Fall, da der Sensor bei einem HIGH-Pegel 5V ausgibt, die GPIO's vom Pi aber maximal 3V3 vertragen - 5V würden den Pi also beschädigen da die GPIOs ungebuffert direkt zur SoC gehen.

    Habe bisher immer nur der Levelshifter verwendet, da ich mir gedacht habe, er war bei dem Paket dabei und wird auch so vorgeschlagen im Beispiel Code für den HC-SR04. Das hat auch immer funktioniert. Habe das ganze mal getestet indem ich nur den Sensor anspreche. Dies hat einwandfrei funktioniert, dadurch denke ich das der Levelshifter die SPannung richtig herunter bzw. herauf regelt.

    Ja bin ich mir schon, da ich ja einmal den impuls gebe und diesen dann nicht mehr ändere. Es sei denn er wird durch eine Funktion geändert. Die Konstanten setzen ist ein guter Hinweis.

    Versorgt das Batteriepack sowohl Motoren als auch Raspberry?

    Wenn ja dann solltest du hier nochmal dein Konzept überdenken, da ein Pi3B im Vergleich zu einem PiZeroW ziemlich viel Strom frisst und die Motoren ebenfalls viel Strom verballern können (Stall). Optimal wäre eine getrennte Versorgung von Computer und Peripherie (Motoren etc). Kriegt eine der Komponenten nämlich zu wenig Strom/Spannung arbeiten die nicht mehr zuverlässig.

    Das Batteriepack versorgt lediglich die Motoren. Der Raspberry wird über die Steckdose betrieben. Habe da extra zewi getrennte Stromflüsse drin, um den Pi nicht zu überlasten etc.


    Hast Du denn eine Idee bzgl. des Codes, wie man das nun umsetzen kann? Hast Du noch eine Lösung für deinen Code, den ich ausprobieren sollte?

    Können auch gerne per PN schreiben wenn du magst.

    LG

    Bastelstube

    Dann bekomme ich folgende Ausgabe:

    Spoiler anzeigen

    pi@raspberrypi:~ $ sudo python MotorTest2.py

    Steering: forward

    Distanz: 165.947552385

    Distanz: 2.68837501263

    Zu nah: 2.69 cm

    Steering: left

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 2.69 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Zu nah: 3.72 cm

    Steering: forward

    Distanz: 165.947552385

    ^CException in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner

    self.run()

    File "/usr/lib/python2.7/threading.py", line 754, in run

    self.__target(*self.__args, **self.__kwargs)

    File "MotorTest2.py", line 54, in measure_distance

    if status["stop"]:

    File "<string>", line 2, in __getitem__

    File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod

    conn.send((self._id, methodname, args, kwds))

    IOError: [Errno 32] Broken pipe



    Beide Reifen drehen sich, wenn ich die Hand von Anfang an davor halte, misst er den Abstand und macht den turn_left() für eine kurze Zeit und fährt dann wieder geradeaus. Bei erneutem vorhalten passiert nichts, ausser der Ausgabe der Distanz.

    LG

    Bastelstube

    Naja, du änderst immer wieder irgendwas am Script, zeigst aber nur einzelne Teile - Zeile 2 zum Beispiel stammt aus meinem Scriptvorschlag, wieso du das in Deine Funktion übernommen hast versteh ich nicht macht nämlich auch kein Sinn. Dh ich weiß nicht 100% warum es bei dir aktuell nicht wie erwartet funktioniert - ich kann nur mit den Informationen arbeiten die mir vorliegen. In Beitrag#3 war die Funktion zB noch fehlerhaft da wurde GPIO-38 nie auf High gesetzt.


    Wenn du also mit Deinem Code weiter arbeiten willst dann bitte das vollständige und aktuelle Script posten.

    Ansonsten:

    Hast du schon mein Script-Vorschlag mit mp usw ausprobiert?


    Hier mein aktueller Code:

    Wenn ich deinen Code ausführe, bekomme ich folgende Meldung:

    Spoiler anzeigen

    Steering: forward

    Traceback (most recent call last):

    File "MotorTest2.py", line 92, in <module>

    main()

    File "MotorTest2.py", line 79, in main

    if telemetry["distance"] < 15:

    File "<string>", line 2, in __getitem__

    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod

    raise convert_to_error(kind, result)

    KeyError: 'distance'

    Exception in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner

    self.run()

    File "/usr/lib/python2.7/threading.py", line 754, in run

    self.__target(*self.__args, **self.__kwargs)

    File "MotorTest2.py", line 54, in measure_distance

    if status["stop"]:

    File "<string>", line 2, in __getitem__

    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod

    raise convert_to_error(kind, result)

    KeyError: 'stop'

    LG

    Bastelstube

    Dann macht der Quellcode aber doch genau das:conf:

    Ich setze den Trigger (38) auf HIGH und kurz darauf wieder auf LOW. Anschließend setze ich in der while den Echo Pin (40) auf LOW und speichere die Zeit in start_time. Das selbe mache ich nun wenn der Pin auf HIGH gesetzt wird. Hier speichere ich das ganze aber dann in stop_time. Am ende berechne ich den unterschied mit time_elapsed = stop_time - start_timeund berechne dies daraufhin anhand der Schallgeschwindigkeit.

    LG

    Bastelstube

    Also noch mal: Du brauchtest nur 2 Zeilen ändern/einfügen: Das High setzen des TRIGGER-GPIO's, extrem kurzes warten um die Zeitspanne des Triggers zu beeinflussen und direkt danach wieder Low setzen. Dadurch wird ein Ultraschall-Signal (echo) ausgesendet, was dann von einem Objekt reflektiert wird und durch den ECHO-GPIO wieder empfangen wird. (natürlich eigentlich durch den Sensor....)

    Mit gpio.output(38, True)time.sleep(0.00001)gpio.output(38, False) setze ich ja den Trigger GPIO für eine kurze Zeit auf High und anschließend wieder auf Low.

    Ich würde es jetzt so machen, dass ich den Echo GPIO tausche. Das heißt, dass die erste while = True ist und die zweite while = False.

    LG

    Bastelstube

    Habe es jetzt so, aber kommt immer noch aufs gleiche raus

    Dann liegt das an deiner Hardware, denn die Software macht das was programmiert wurde - prüf deine Verkabelung.

    Also ich gehe in zwei Varianten vor.

    Bei der ersten starte ich das Gefährt, lasse es ein paar Sekunden geradeaus fahren und halte dann meine Hand vor den Sensor. Eine Ausgabe mit der Ditanz und das es zu nah ist erfolgt, jedoch macht er nicht den gewünschten turn_left().

    Bei der zweiten Variante halte ich eine Hand vor dem Starten schon vor den Sensor. Anschließend starte ich das Programm, während meine Hand noch über dem Sensor ist. Das gefährt fährt kurz vorwärts, erkennt dann das die Distanz < 15 ist und macht den gewünschten turn_left() für die zwei Sekunden und fährt danach wieder geradeaus. Wenn ich jedoch erneut die Hand vorhalte passiert genau das wie bei der ersten Variante.

    Es ist ja so programmiert, dass er immer wieder den turn_left()für zwei Sekunden machen soll, sobald die Distanz < 15 ist. Es sei denn das Programm wird abgebrochen.

    Bin gerade nochmal die Verkabelung durchgegangen es scheint alles in Orndung zu sein. Habe dies auch nochmal in Fritzing mit meinem Verkabelungsplan abgeglichen.


    Ich bin dir und linusg sehr dankbar, dass Ihr den anderen Quellcode mir nochmal aufgeschlüsselt habt. Ich werde die Aussagen von euch verfolgen und lernen Sie komplett zu verstehen. :)

    LG

    Bastelstube

    Woher weißt du denn dass turn_left() definitiv nicht ausgeführt wurde? Am einfachsten findest du es raus indem du ein print in die Funktion einfügst:

    Nach dem einfügen deines Codes, erhalte ich folgende Ausgabe (Siehe Spoiler).

    Ausgabe:

    Spoiler anzeigen

    Cpi@raspberrypi:~ $ pi@raspberrypi:~ $ sudo python MotorTest.py

    Entfernung = 166.63 cm

    forward

    Entfernung = 166.27 cm

    forward

    Entfernung = 3.58 cm

    zu nah

    turn_left

    Entfernung = 3.50 cm

    zu nah

    turn_left

    Entfernung = 3.72 cm

    zu nah

    turn_left

    Entfernung = 16.89 cm

    forward

    Entfernung = 23.07 cm

    forward

    Entfernung = 166.72 cm

    forward

    Entfernung = 167.21 cm

    forward

    Entfernung = 166.29 cm

    forward

    Entfernung = 7.97 cm

    zu nah

    turn_left

    Entfernung = 8.37 cm

    zu nah

    turn_left

    Entfernung = 166.29 cm

    forward

    ^Cpi@raspberrypi:~ $


    Die Funktion forward()und turn_left()wird anscheinend ausgeführt, nur nicht mit dem gewünschten Erfolg. Hierbei ging es aber ja aktuell um die Frage ob die Funktionen überhaupt ausgeführt werden und dem ist so.

    Den Code den du als zweites gepostet hast habe ich mal versucht zu analysieren:

    Spoiler anzeigen

    import multiprocessing as mp = Kürzen von multiprocessingin mp

    from threading import Thread = Von Threadingimportierst Du nur Thread

    Funktion(telemetry)= Du setzt mit telemetryeine Variabel in die Funktion

    telemetry["steer to"] = stop= Du schreibst["steer to"]in ein Array und sagst damit, wenn telemtry["steer to"] = stopaufgerufen wird, dann soll das Gefährt stoppen. ["steer to"]heißt in dem Fall sowas wie "Fahre zu".

    print("Steering: {}".format(telemtry["steer to"]))= Hier sagst Du "Lenke/Fahre: Ausgabe des Array" Formatierung(Übergabe des Namens der Funktion["Angabe des Arrays"]



    def measure_distance(telemetry, status):=Du übergibst der Funktion die Variabeln telemtry und status

    while status["running"]: = Solange der Status bzw. das Array ["running"]ausgeführt wird.

    if status["stop"]: = Wenn der Status bzw. das Array ["stop"] ausgeführt wird, mache nichts und warte auf Eingabe.

    telemetry["distance"] = time_elapsed / 0.000058 = Du nimmst das Array ["distance"] und übergibst Ihm den Wert time_elapsed / 0.000058


    if (int(time.time()) - start_time) >= status["distance_announce_time"]: = Du sagst das time.time als int deklariert sein soll. Wenn status[distance_announce_time"]:kleiner oder gleich als if (int(time.time()) - start_time), dann print("Distanz: {}".format(telemetry["distance"])). Heißt dann gebe den Wert aus ["distance"] mit (Distanz: )wieder.

    status = mp.Manager().dict()= Du deklarierst jeweil für statusund telemtryeinen eigenen Prozess auf dem Prozessor.

    status["running"]=True = Wenn das Array ["running"]=1/Wahr ist dann

    status["distance_announce_time"] = Zeit zwischen den Messungen des Sensors

    measure_t = Thread(target=measure_distance, args=(telemetry, status,)) = Hier bin ich mir nicht ganz sicher was passiert. Ich vermute das in measure_t die einzelnen Prozesse geschrieben werden.

    measure_t.start() = Führe die Variabel measure_t aus.

    status["running"]=False = Beende das Programm bzw. warte auf Eingabe

    LG

    Bastelstube

    wünsche ich mir sehr, dass Anfänger (so erscheint mir dein Kenntnisstand) nicht andauernd alle möglichen Ereignisse/Fehlermeldungen gleich interpretieren. Wenn das print erfolgreich ausgeführt wurde, steht als nächstes der Aufruf der Funktion turn_left. Und ob's dir passt oder nicht, die wird aufgerufen. Ob sie das tut, was du willst und denkst, ist wieder eine andere Sache.


    Also, ich rate dir sehr, noch einmal einen Schritt zurück zu gehen und einfachere kleine Aufgaben zu lösen, um dein Wissen zu festigen.


    Auch ist es schwer zu helfen, wenn du von einem Recode und einem damit verbundenen Problem berichtest, dann etwas interpretierst und nur einen Brocken Code lieferst.

    Das das print erfolgreich aufgerufen wird ist mir klar und das die Funktion turn_left() aufgerufen wird auch und das Sie momentan nicht das macht was Sie soll. Es geht ja darum, dass ich gefragt habe ob man mir helfen kann bzgl. dessen und ich mich bevor ich was frage informiere. Ich habe nun mehrere Möglichkeiten ausprobiert und mir einiges dazu durchgelesen doch ich komme nicht weiter. Aus diesem Grund wende ich mich ja an das Forum hier um eine Antwort auf mein Problem zu bekommen. Ich will keinen fertigen Code oder sonst was, aber ein Beispiel von jemanden der wirklich weis wie es funktioniert würde mir da schon um einiges weiterhelfen und man müsste hier nicht dauerhaft Post für Post reinstellen und das Forum voll spamen. :)

    LG

    Bastelstube

    Habe die sleeps jetzt mal alle rausgenommen bis auf einen (sleeptime 0.00001).

    Woran das liegt das es nicht so funktioniert wie ich erwarte überlege ich gerade. Das Gefährt soll ja erstmal geradeaus fahren und wenn der Abstand nicht mehr stimmt den turn_left() machen und wenn der Abstand wieder passt geradeaus fahren. Ich vermute, dass es an der if Anweisung liegt und nicht am else.

    LG

    Bastelstube

    Habe es jetzt so gemacht:

    Den Timeframe=1kann man aber auch weglassen, da die Funktion turn_left()nur solange aufgerufen werden soll, bis die Distanz wieder > 15 ist.

    In meinem Code hier funktioniert es zu 50%. Der Sensor misst die Entfernung und merkt ok sie ist > 15. Sobald die Entfernung <15 ist wird einmalig die Funktion turn_left()solange ausgeführt bis die Distanz wieder >15 ist. Danach drehen sich beide Räder wieder vorwärts. Bei erneutem auslösen passiert jedoch nichts und es wird die Funktion forward()weiterhin ausgeführt auch wenn der Abstand kleiner als 15 ist obwohl zu nah ausgegeben wird.

    LG

    Bastelstube

    Ich habe die autonome Fahrweise jetzt mal umgeschrieben. Die Ausgabe der Entfernung funktioniert ohne Probleme. Ich habe auch die Funktion zum vorwärts fahren ausserhalb der Schleife angebracht, da der Roboter ja zunächst einmal gerade aus fahren soll.

    Nur leider wird die Funktion in der zweiten Schleife nicht aufgerufen, obwohl der Sensor sagt "zu nah". Woran kann das liegen? Kann man die Funktion auch ausführen ohne das eine Zahl in den Klammern steht oder muss ich dafür nochmal extra was deklarieren?

    Funktionsaufrufe sehen so aus : distance1 = distance()

    Danke, habe nicht gemerkt das die Klammern gefehlt haben.

    Entschuldige aber wie hast du es geschafft den Rest zu programmieren wenn du denn nicht mal weißt wie ein Funktionsaufruf aussehen müsste?

    Habe wie oben gesagt, nicht gesehen, dass ich die Klammern vergessen habe.

    Kann es sein, dass du Leerzeichen und Tabulatoren gemischt in deinem Code verwendest?

    Habe nochmal nachgeschaut und alles überprüft und ist alles mit Leerzeichen.