- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Kostengünstige Ultraschall - Entfernungsmessung

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847

    Kostengünstige Ultraschall - Entfernungsmessung

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe mir ein sehr billiges SRF04 aus Fernost bestellt und am GPIO des RPi angehängt:

    - Trigger an GPIO 14 (Pin
    - Echo an GPIO 15 (Pin 10)
    - GND an GND (Pin 6)
    - VCC an 3,3V (Pin 1)

    Ausgelegt ist das Modul für eine Spannungsversorgung von 5 Volt, hier ist allerdings zu beachten dass die GPIO Pins am Eingang nur 3,3 Volt aushalten. Also habe ich kurzerhand 3,3 Volt probiert und siehe da, es funktioniert genauso. Allerdings gibt es eine Einschränkung: Aufgrund der geringen Spannung misst das SRF04 nur Entferungen bis ca. 50 cm!

    Das Python Programm dazu:
    Code:
    import time
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
      
    GPIO_TRIGGER = 14
    GPIO_ECHO = 15
    
    adjustment = 7
    
    print "Ultrasonic Messung mit SRF04"
    
    while True:
    
            GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger
            GPIO.setup(GPIO_ECHO,GPIO.IN)      # Echo
    
            GPIO.output(GPIO_TRIGGER, False)
    
            time.sleep(0.5)
    
            GPIO.output(GPIO_TRIGGER, True)
            time.sleep(0.00001)
            start = time.time()
            GPIO.output(GPIO_TRIGGER, False)
    
            while GPIO.input(GPIO_ECHO)==0:
              stop = time.time()
    
            while GPIO.input(GPIO_ECHO)==1:
              stop = time.time()
    
            elapsed = stop-start
            distance = elapsed * 34300
            distance = distance / 2
            distance = distance - adjustment
    
            print "Distance : %.1f cm" % distance
            time.sleep(1)
    
            GPIO.cleanup()
    Ein Video dazu gibt es hier: http://www.youtube.com/watch?v=0ALpTiyItzQ
    Geändert von pinsel120866 (06.01.2013 um 13:18 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    ... sehr billiges SRF04 aus Fernost bestellt und am GPIO des RPi angehängt ... es funktioniert ...
    Hi,

    Glückwunsch und Respekt. Ich bewundere ja Alle, die so etwas mit dem Himbeerkuchen hinkriegen, weil sie mit dem ja wirklich etwas anfangen können. Ich kam bei meinem grad mal bis zur GUI - vermutlich weil ich nie wirklich in Linux reinkam.

    Billig ist das Teil ja, aber ich will immer noch nicht auf die Liste von PayPal - schon wieder so ein "inmeineTascheGucker". Aber die haben sich so breit gemacht, da gibts leider garnicht mehr die Variante, so ewas per Karte zu bezahlen. Ausserdem steht auf meiner Wunschliste ja ein Teil, bei dem Sendeteil und Empfangsmodul getrennt angesteuert und ausgewertet werden können. Ich will damit einen Transponder bauen.
    Ciao sagt der JoeamBerg

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    sieht ja klasse aus
    Wobei es mich ja echt interessiert wie man was für 2,60€ aus China bei Ebay anbieten kann ohne Versand zu verlangen.
    Kannst du die Zeile:

    while GPIO.input(GPIO_ECHO) == 0;
    stop = time.time()

    nicht eigentlich weglassen?
    Weil für die Berechnung brauchst du ja nur die High-Level Zeit. Oder habe ich das Programm falsch interpretiert?
    Du kannst das Modul ja mit 5V betreiben und den Echo Pin legst du dann einfach an einen Spannungsteiler. Das sollte für das Pi reichen. Und das Modul dürfte 3,3V Pegel vom Trigger auch problemlos interpretieren können.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Zitat Zitat von Kampi Beitrag anzeigen
    Hey,

    Kannst du die Zeile:

    while GPIO.input(GPIO_ECHO) == 0;
    stop = time.time()

    nicht eigentlich weglassen?
    Hi Kampi, hab ich zuerst versucht - es kam allerdings eine Fehlermeldung:
    Code:
    Traceback (most recent call last):
      File "ultrasonic.py", line 34, in <module>
        elapsed = stop-start

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von pinsel120866 Beitrag anzeigen
    Hi Kampi, hab ich zuerst versucht - es kam allerdings eine Fehlermeldung:
    Code:
    Traceback (most recent call last):
      File "ultrasonic.py", line 34, in <module>
        elapsed = stop-start
    Versuch mal folgendes:
    Code:
            GPIO.output(GPIO_TRIGGER, False)
    
            while GPIO.input(GPIO_ECHO)==0:
                pass
    
            start = time.time()
    
            while GPIO.input(GPIO_ECHO)==1:
                pass
    
            stop = time.time()
            elapsed = stop-start
            ......
    So bekommst du die "reine" Laufzeit des Signals ohne die interne Verarbeitungszeit im SRF04

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Danke für eure Tipps und Hinweise,

    hier nun der überarbeitete Code:
    Code:
    import time
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    
    GPIO_TRIGGER = 14
    GPIO_ECHO = 15
    
    adjustment = 7
    
    print "Ultraschallmessung mit SRF04"
    
    while True:
    
            GPIO.setup(GPIO_TRIGGER,GPIO.OUT)
            GPIO.setup(GPIO_ECHO,GPIO.IN)
    
            GPIO.output(GPIO_TRIGGER, False)
    
            time.sleep(0.5)
    
            GPIO.output(GPIO_TRIGGER, True)
            time.sleep(0.00001)
            start = time.time()
            GPIO.output(GPIO_TRIGGER, False)
    
            while GPIO.input(GPIO_ECHO)==0:
              pass
    
            start = time.time()
    
            while GPIO.input(GPIO_ECHO)==1:
              pass
    
            stop = time.time()
    
            elapsed = stop-start
            distance = elapsed * 23000
            distance = distance - adjustment
    
            print "Abstand: %.1f cm" % distance
            time.sleep(1)
    
            GPIO.cleanup()

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Zitat Zitat von Kampi Beitrag anzeigen
    Du kannst das Modul ja mit 5V betreiben und den Echo Pin legst du dann einfach an einen Spannungsteiler.
    Hallo Kampi,

    wie mache ich diesen Spannungsteiler am besten/einfachsten?

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    das Modul betreibst du mit 5V und legst den Outputpin des Moduls an das eine Ende von zwei in Reihe geschalteten 10kOhm Widerständen (Beispielswert) und das andere Ende an GND. Zwischen den beiden Widerständen legst du den Anschluss vom GPIO vom Raspberry Pi hin.
    Dadurch wird das Signal vom Modul auf 2,5V reduziert und du kannst es direkt ans Pi anschließen.
    Ist keine supertolle Lösung aber am einfachsten zu realisieren (so lasse ich z.B. auch einen Mega32 der mit 5V betrieben wird über UART mit meinem Pi reden. Da halbiere ich einfach die Spannung von dem Tx Pin vom Mega32).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    OK, danke. Ich habe eine kleine Grafik hochgeladen, mit den beiden Widerständen komme ich auf genau 3,33 Volt

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    ja ich würde die Widerstände nur vlt 3,3k und 4,7k oder 33k und 47k groß machen
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Kostengünstige Stromspeicher für erneuerbare Energien
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 08.06.2011, 18:19
  2. Kostengünstige Entwicklungs-Tools für DSPs
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 12.05.2011, 13:50
  3. suche kostengünstige Funklösung für Daten
    Von PCF8574P im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 12.10.2008, 19:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress