- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Ultraschallmodul HC-SR04 und Arduino UNO

  1. #1

    Ultraschallmodul HC-SR04 und Arduino UNO

    Anzeige

    E-Bike
    Der untenstehende Sketch liefert über den Datenmonitor verlässliche Entfernungsangaben zum Ultraschallmodul. Sobald ich das Modul jedoch in die Ferne richte wird nur noch "0" ausgegeben. Auch wenn daraufhin wieder ein Hindernis auf Nahdistanz gestellt wird liefert das Programm weiterhin "0". Ich finde einfach den Fehler nicht. Vielleicht kann jmd. helfen?

    Vielen Dank


    int trig=7;
    int echo=8;
    unsigned long dauer; //Zeit zwischen Sendezeit und Empfangszeit

    void setup() {
    Serial.begin(9600);

    pinMode(echo, INPUT);
    pinMode(trig, OUTPUT);

    }


    void loop() {

    digitalWrite(trig, LOW);
    delay(2);
    digitalWrite(trig, HIGH);
    delay(5);
    digitalWrite(trig, LOW);


    dauer=pulseIn(echo,HIGH)/29/2;

    Serial.println(dauer);
    delay(500);
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    pulseIn nimmt als dritten optionalen Parameter einen Timeoutwert in Microsekunden an. Ergänze deinen Code um einen sinnvollen Timeoutwert.

  3. #3
    Damit habe ich schon ohne Erfolg experimentiert. Mir fehlt auch die Idee wie ich einen "sinnvollen" Wert finden soll. Standardmässig sind da 1000 ms eingestellt. Demzufolge müsste das Programm jede Sekunde neu prüfen ob ein Messwert vorliegt - macht es aber nicht. Was wäre Deiner Meinung nach ein sinnvoller Wert?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Mal grob bei 340m/s Schallgeschwindigkeit und sagen wir 4m maximaler Reichweite :
    1/340*4*2 s = 8/340 s = 23500µs
    23500 wäre wohl ein guter Wert.

  5. #5
    Ich hab mit grösseren Werten als 1000 experimentiert. Das Modul läuft damit stabiler aber das Hauptproblem bleibt bestehen. Nach einer gewissen Anzahl von Fehlmessungen liefert das Programm nur noch 0. Während den funktinierenden Messungen hört man das Modul leise schnurren. Nach den Fehlmessungen unterbleibt auch dieses Geräusch. Könnte da evtl. auch was mit dem Modul nicht ganz in Ordnung sein? Jedenfalls habe ich noch nirgendwo anders von diesem Problem gelesen.

    Ich werde mir mal ein anderes kaufen und die beiden vergleichen.

    Hab vielen Dank Sisor für die schnellen Antworten.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Zitat Zitat von TeamAdalbert
    Während den funktinierenden Messungen hört man das Modul leise schnurren. Nach den Fehlmessungen unterbleibt auch dieses Geräusch.
    Hallo,
    in dem Fall würde ich eher darauf tippen, dass die pulseIn-Funktion hängt.
    Zitat Zitat von https://www.arduino.cc/en/Reference/PulseIn
    Please also note that if the pin is already high when the function is called, it will wait for the pin to go LOW and then HIGH before it starts counting
    Ich würde evtl. einen Test mit kürzerem Trigger-Impuls vorschlagen. 10uS sind laut Datenblatt nötig. Du hast 5ms drin. Probiere mal 1ms oder weniger...
    Falls das Ultraschallmodul nicht wartet, bis das Trig-Signal low wird, könnte es am Echo-Signal bereits High ausgeben, während du PulseIn aufrufst ?
    Teste doch mal ob vor pulseIn am Echo-Pin schon High ankommt (einfache if). Dann wäre das Hängen erklärbar.
    PulseIn lässt sich bei Bedarf auch selber programmieren.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    56
    Beiträge
    2.209
    Nö- es ist völlig normal, dass bei mehir als der maximalen Reichweite "0" ausgegeben wird- was auch sonst?
    Da kommt kein Echo zurück....
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    bei einem ähnlichen Ultraschallsensor SRF04 ist es so, dass der Puls einfach nur deutlich länger wird, wenn kein Echo in einer bestimmten Zeit zurückkommt.
    Vgl. http://www.robot-electronics.co.uk/htm/srf04tech.htm
    Der Echo-Ausgang ist m.E. genau dann auf high, während der Schall unterwegs ist und nicht erst nach der Messung. Da der Sensor nicht wissen kann, welche Entfernung der Schall zurücklegen wird, gibt er den Puls bis zu einem Timeout aus (oder wenn das Echo normal zurückkommt wird früher Low ausgegeben). Beim SRF04 sind das 36ms.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  9. #9

    eine Lösung

    Solange Daten ausgegeben werden, das Hindernis also innerhalb der Reichweite ist, liegt am Echo-Signal vor pulseIn LOW an. Wenn das Hindernis ausserhalb der Reichweite ist liegt am Echo-Signal vor pulseIn HIGH an. Danke Bernhard für den Tipp.

    Blöd ist nur, dass dieser Pegel bleibt auch wenn man nun ein Hindernis wieder in Reichweite bringt. Für 200ms ist das vom Hersteller auch gewollt um klar zu detektieren dass kein Messwert vorliegt. Die nächste Messung beginnt lt. Datenblatt mit der fallenden Flanke am trigger. Das funktioniert aber nicht, auch wenn man der Routine die 200ms Zeit gibt.

    Gelöst habe ich das Problem durch Herunterziehen des echo-Signals auf LOW nach pulseIn. Damit läuft es wie gewünscht.

    Keine Ahnung ob das elegant ist. Es funktioniert halt

    Vielen Dank Euch allen für die Ratschläge.

    Hier der Sketch:

    int trig=7;
    int echo=9;
    unsigned long dauer; //Zeit zwischen Sendezeit und Empfangszeit

    void setup() {
    Serial.begin(9600);


    pinMode(trig, OUTPUT);

    }


    void loop() {
    pinMode(echo, INPUT);
    digitalWrite(trig, LOW);
    delay(5);
    digitalWrite(trig, HIGH);
    delay(15);
    digitalWrite(trig, LOW);


    if (digitalRead(echo)==LOW) {Serial.print("L");}

    dauer=pulseIn(echo,HIGH)/29/2;
    if (digitalRead(echo)==HIGH) {Serial.print("H"); pinMode(echo, OUTPUT);digitalWrite(echo, LOW);}
    Serial.println(dauer);

    }

Ähnliche Themen

  1. Asuro mit Ultraschallmodul ARX-ULT10
    Von TEL12AT im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 19.04.2015, 15:37
  2. HC-SR04 & m32
    Von inka im Forum Robby RP6
    Antworten: 36
    Letzter Beitrag: 01.02.2015, 13:31
  3. Ultraschall Sensor Arduino hc-sr04
    Von BennIY im Forum Assembler-Programmierung
    Antworten: 4
    Letzter Beitrag: 29.11.2014, 12:54
  4. Distance Sensor HC-SR04 + Arduino
    Von Mulag im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 28.10.2013, 21:17
  5. Artikel "Ultraschallmodul zur Distanzmessung" in Z
    Von Volker-01 im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 26.04.2006, 15:46

Berechtigungen

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

12V Akku bauen