SRF05 Ultrasonic GPIO 1Pin Problem

  • Hallo ihr da draußen,

    habe folgendes Problem:

    Möchte ein SRF05 Ultraschallsensor mit dem Raspberry Pi betreiben.

    -> mit 2 Pins (TRIGGER und ECHO) getrennt überhaupt keine Problem. :D

    Allerdings mit 1 Pin (TRIGGER UND ECHO auf der selben Leitung bekomme ich den Code irgentwie nicht hin. :s

    Von der Verkabelung her ist alles Richtig (mehrmals gegengecheckt).
    (2x Masse+1PLUS+1SIGNALLEITUNG).


    Code wäre dieser Hier:

    #!/usr/bin/python
    #+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    #|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
    #+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    #
    # ultrasonic_1.py
    # Measure distance using an ultrasonic module
    #
    # Author : Matt Hawkins
    # Date : 09/01/2013
    # -----------------------

    # Import required Python libraries
    import time
    import RPi.GPIO as GPIO

    # Use BCM GPIO references
    # instead of physical pin numbers
    GPIO.setmode(GPIO.BCM)

    # Define GPIO to use on Pi
    GPIO_TRIGGER = 23
    #GPIO_ECHO = 24

    print "Ultrasonic Measurement"

    # Set pins as output and input
    GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
    #GPIO.setup(GPIO_ECHO,GPIO.IN) # Echo

    # Set trigger to False (Low)
    GPIO.output(GPIO_TRIGGER, False)

    # Allow module to settle
    time.sleep(0.5)

    # Send 10us pulse to trigger
    GPIO.output(GPIO_TRIGGER, True)
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
    start = time.time()

    GPIO.cleanup()


    ###############################################################
    # Use BCM GPIO references
    # instead of physical pin numbers
    GPIO.setmode(GPIO.BCM)

    # Define GPIO to use on Pi
    GPIO_TRIGGER = 23


    GPIO.setup(GPIO_TRIGGER,GPIO.IN)

    GPIO.input(GPIO_TRIGGER, False)


    while GPIO.output(GPIO_TRIGGER)==0:
    start = time.time()

    while GPIO.input(GPIO_TRIGGER)==1:
    stop = time.time()

    # Calculate pulse length
    elapsed = stop-start

    # Distance pulse travelled in that time is time
    # multiplied by the speed of sound (cm/s)
    distance = elapsed * 34300

    # That was the distance there and back so halve the value
    distance = distance / 2

    print "Distance : %.1f" % distance

    # Reset GPIO settings
    GPIO.cleanup()


    Daraufhin bekomme ich die Fehlermeldung:

    Ultrasonic Measurement
    Traceback (most recent call last):
    File "ultrasonic_1.py", line 57, in <module>
    GPIO.input(GPIO_TRIGGER, False)
    TypeError: function takes exactly 1 argument (2 given)


    Steh grad total aufm Schlauch bei 38 Grad. :wallbash:

    Wäre Super wenn vielleicht jemand über den Code schaut.

    Vielen Dank schon mal im Vorraus.

  • Hallo Gandalf,

    hast Du Dir das Datenblatt zum SRF05 angeschaut?

    Für diesen neuen Modus soll man den Mode-Pin mit GND verbinden...

    Im Programmausschnitt fehlt das Umschalten von Ausgang auf Eingang. Vorher hast Du den GPIO-Pin GPIO_TRIGGER auf Ausgang gesetzt, um eine Messung auszulösen. Aber Du fragst danach direkt den Zustand dieses Pins ab, ohne diesen umgeschaltet zu haben.

    Code
    while GPIO.output(GPIO_TRIGGER)==0:
     start = time.time()
    
    
    while GPIO.input(GPIO_TRIGGER)==1:
     stop = time.time()

    Bzgl. der von der Fehlermeldung angesprochenen Zeile

    Code
    GPIO.input(GPIO_TRIGGER, False)

    hätte wohl auch ein

    Code
    GPIO.input(GPIO_TRIGGER)

    ausgereicht...


    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 (10. August 2015 um 18:30)

  • Servus

    aber ich schalte in doch mit

    GPIO.setup(GPIO_TRIGGER,GPIO.IN)

    GPIO.input(GPIO_TRIGGER, False)


    while GPIO.output(GPIO_TRIGGER)==0:
    start = time.time()

    while GPIO.input(GPIO_TRIGGER)==1:
    stop = time.time()

    Um oder?
    Automatisch zusammengefügt:
    Wie gesagt 2xMasse (Verkabelung ist richtig):-)

    Einmal editiert, zuletzt von gandalf7588 (10. August 2015 um 19:42)

  • Hallo Gandalf,

    laut Datenblatt, musst Du den GPIO-Pin GPIO_TRIGGER erst auf Ausgang schalten, dann den 10 µs-Pegelwechsel erzeugen, um dem SRF05 anzuweisen, eine Messung in Gang zu setzen. Dann muss er innnerhalb von 700 µs auf Eingang gesetzt werden, um denn in der Lagen zu sein, ein rückkehrendes Echo-Signal aufnehmen zu können.

    Dieses Umschaten fehlt in Deinem Programm.

    Dazu kommt dann noch die Fehlermeldung - deren Korrektur ich Dir als Code angegeben habe - und die immer noch enthalten ist.

    Ein funktionierendes Programm besteht nicht in der Auflistung aller erforderlichen Befehle - auch deren Reihenfolge muss einen Sinn ergeben. Und dafür gibt es Datenblätter, in denen der Algorithmus beschrieben ist, den es lediglich umzusetzen gilt.


    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 (10. August 2015 um 20:07)

Jetzt mitmachen!

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