Ultraschall Sensoren ansprechen

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

    Ich habe an einem Roboter Fahrzeug zwei Ultraschall Sensoren angebaut. Diese möchte ich beide in einem python Skript abfragen.
    Einzelt funktioniert es in zwei unterschiedlichen Dateien. Nur mein Versuch das in einer Datei zusammen ab zu fragen scheitert.


    Ultraschall Sensor Links


    Ultraschall Sensor rechts

    Mein Versuch beide in einer Datei an zu sprechen und erst einmal nur den Wert aus zu geben

    Kann mir jemand sagen warum bei meinem Versuch die Funktion distanz Links und Distanz rechts keine Werte ausgeben?

    Danke

  • Hallo jockelb,

    herzlich Willkommen in unserem Forum!

    Die Thematik "Ein US-Sensor abfragen funktioniert - zwei US-Sensoren abfragen funktioniert nicht" hatten wir vor ein paar Wochen schon mal. Den Thread solltest Du gezielt suchen und die dort erarbeitete Lösung mit Deinem Ansatz abgleichen, um den Fehler in Deinem Code zu finden.



    Kann mir jemand sagen warum bei meinem Versuch die Funktion distanz Links und Distanz rechts keine Werte ausgeben?


    Ja, ich. Weil innerhalb der beiden Funktionen kein Befehl zur Ausgabe enthalten ist.


    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.

    Einmal editiert, zuletzt von Andreas (28. März 2017 um 14:34)

  • Mach es lieber so das du nur eine "distanz" Funktion hast der du dann nur den "trigger" und "echo" Pin übergibst. Damit sparst du dir dann viele Zeilen Code.


    Ja, ich. Weil innerhalb der beiden Funktionen kein Befehl zur Ausgabe enthalten ist.

    Auch wenn er innerhalb der Funktion selbst keine Ausgabe hat, so gibt er aber den Rückgabewert der Funktion aus und das reicht völlig.
    Allerdings gibt er zB in "distanz_rechts()" nicht "distanz" zurück sondern distanz_rechts, aber solch eine Variable gibts da nicht. Auch heißt die Funktion genau so wie eine Variable in der Funktion, was nicht allzu schön ist.


    Vorschlag:
    [code=php]
    import time
    from RPi import GPIO

    TRIGGER_links = 16
    ECHO_links = 5
    TRIGGER_rechts = 12
    ECHO_rechts = 13

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(TRIGGER_links, GPIO.OUT)
    GPIO.setup(ECHO_links, GPIO.IN)
    GPIO.setup(TRIGGER_rechts, GPIO.OUT)
    GPIO.setup(ECHO_rechts, GPIO.IN)


    def entfernung(trigger, echo):
    GPIO.output(trigger, True)
    time.sleep(0.00001)
    GPIO.output(trigger, False)
    StartZeit = time.time()
    StopZeit = time.time()
    while GPIO.input(echo) == 0:
    StartZeit = time.time()
    while GPIO.input(echo) == 1:
    StopZeit = time.time()
    TimeElapsed = StopZeit - StartZeit
    distanz = (TimeElapsed * 34000) / 2
    return distanz


    if __name__ == '__main__':
    try:
    while True:
    print("Gemessene Entfernung Links: %.2f cm" % entfernung(TRIGGER_links, ECHO_links))
    time.sleep(1)
    print("Gemessene Entfernung Rechts: %.2f cm" % entfernung(TRIGGER_rechts, ECHO_rechts))
    time.sleep(1)

    except KeyboardInterrupt:
    print("Messung vom User gestoppt")
    GPIO.cleanup()
    [/php]

    Allgemeines Problem ist aber: Was passiert wenn kein 'echo' zurück kommt, also die Reichweite zu hoch ist oder der Schall abgelenkt wurde => out of range? Dann hängt die Funktion. Man müsste also eigentlich auch noch einen timeout einbauen.


    PS: Für "trigger" reicht auch nur ein GPIO für alle UltraSchall Sensoren.

  • Zitat von "meigrafd" pid='274681' dateline='1490710393'

    PS: Für "trigger" reicht auch nur ein GPIO für alle UltraSchall Sensoren.

    Ich bin jetzt mal so frei und kapere diesen Thread, da es genau dem entspricht nach dem ich suchte und der Thread eh nicht als erledigt markiert wurde

    >> Ein GPIO für Trigger reicht für mehrere Ultraschall Sensoren

    Genau auf dem war ich auf der Suche, das einzige was mich jetzt noch dazu interessieren würde ist, den jeweiligen Triggerimpuls nutzen um beide (habe 2 Ultraschallsensoren) Sensoren gleichzeitig auszuwerten, oder wird dies zu ungenau und es ist besser wenn man den ersten Triggerimpuls nutzt um Distanz von Sensor A zu messen und den 2. Triggerimpuls nutzt um Distanz von Sensor B zu messen.

    Code wird mit Python3 umgesetzt, ws an dem Codebeispiel von meigrafd orientiert wenn ichs wieder finde... (nicht das oben gepostete, sondern eines wo es über eine Klasse gelöst ist)

Jetzt mitmachen!

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