-         

Ergebnis 1 bis 3 von 3

Thema: Distance Sensor HC-SR04 + Arduino

  1. #1

    Distance Sensor HC-SR04 + Arduino

    Anzeige

    Moin zusammen,

    ich habe den Distance Sensor SainSmart hc-sr04 an das Breadboard angeschlossen, mithilfe des Arduino Mega 2560 versuche ich die Werte nun auszulesen. An VCC klemme ich 5V an, an GND natürlich GND, an Echo und Trig gehe ich jeweils auf einen Digitalen Pin.
    Mithilfe des Codes lasse ich nun die Entfernung berechnen. Klappt wunderbar! Jedoch nicht, wenn ich dem Sensor einen zu weiten "Spielraum" gebe, also vor dem Fliegenauge NICHTS habe und seine Ultraschallwellen einen weiten Raum lasse -oder- schnelle Bewegungen vor ihm mache. Daraus resultieren verrückte Werte. Zu allererst gibt er vernünftige Werte von ca. 45...50 wieder. Dann auf einmal schießt er die Werte auf 4000 hoch und der sofortige nächste Wert ist 4..5 und dann wieder 45...50-iger Werte! Meine angeschlossenen Schrittmotoren laufen dadurch NICHT flüssig!
    Wie kann ich das unterbinden? Evtl Pulldown Widerstand? Wo muss ich den anschließen? Oder doch was ganz anderes? Liegt das nur am Programmcode?


    Programmcode (nur HC-SR04):
    Code:
    int trigPin = 46;
    int echoPin = 47;
    int gLed = 31;
    int rLed = 30;
    long duration, distance;
    
    int distance_counter;
    
    void setup()
    {
      Serial.begin(9600);
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      pinMode(gLed, OUTPUT);
      pinMode(rLed, OUTPUT);
    }
    
    
    void loop()
    {
    
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
    
      duration = pulseIn(echoPin, HIGH);
    
      distance = microsecondsToCentimeters(duration);
    
      Serial.println(distance, DEC);
    
      if(distance <= 10)
      {
        distance_counter++;
        if(distance_counter == 3)
        {
        digitalWrite(gLed, LOW);
        digitalWrite(rLed, HIGH); 
        }
      } 
      else if(distance > 10) {
        digitalWrite(gLed, HIGH);
        digitalWrite(rLed, LOW); 
        distance_counter = 0;
      }
    
      //delay(100);
    }
    
    long microsecondsToCentimeters(long duration)
    {
      float c_luft = 0.03435; 
      return c_luft * duration * 1/2;
    }

    Danke im voraus für eure Hilfe!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265
    Der SRF04 hat eine maximal Laufzeit, wenn diese überschritten wurde heißt dass, es wurde nichts erkannt. Das kann man abfangen und entsprechend verarbeiten

  3. #3
    Danke für deine Antwort,

    die maximale Laufzeit beträgt 36ms. Dementsprechend würde ich meinen, dass ich das pulseIn() abfragen kann. pulseIn() arbeitet in Mikrosekunden. Einfach geschrieben

    Code:
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
    
    if(pulseIn(echoPin, HIGH) < 36000)
    {
      duration = pulseIn(echoPin, HIGH);
      distance = microsecondsToCentimeters(duration);
      Serial.println(distance);
    } else {
      Serial.println("time out");
    }
    nur haut das natürlich nicht so hin wie ich mir das wünsche... das gesamte System arbeitet sehr träge.
    Bitte um weitere Hilfe...

Ähnliche Themen

  1. NIBObee Erweiterung BKit2 – Distance
    Von Christian Strasser im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 6
    Letzter Beitrag: 28.07.2014, 19:04
  2. Suche CO-Sensor (evtl an Arduino ran) für KFZ-Abgasmessung
    Von PsiQ im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 2
    Letzter Beitrag: 12.09.2013, 19:16
  3. Farben Sensor für Arduino
    Von robots4-ever im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 10
    Letzter Beitrag: 09.07.2013, 10:22
  4. Gefahrene Distance in Array Speichern
    Von PocketPc im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 28.04.2010, 13:34
  5. ball mouse modified for distance input
    Von irobot_22587 im Forum Asuro
    Antworten: 21
    Letzter Beitrag: 20.06.2009, 20:14

Berechtigungen

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