Ein Problem mit dem HC-SR04 Ultraschallsensor und der korrekten Programmierung

Hallo,

hier ist mal ein Beispiel-Sketch, der mit dem HC-SR04 einwandfrei funktioniert. Pass mal die Pins im Sketch an oder schließe den Sensor an die im Sketch verwendeten Pins an und schau das Ergebnis auf dem seriellen Monitor an.

/*
  Arduino <-> Ultraschallsensor HC SR04
  -------------------------------------
  
  Erzeugt einen Ultraschallimpuls und misst die Zeit,
  bis das Echo aufgefangen wird. Aus der Laufzeit des
  Schallimpulses wird die Entfernung zum reflektierenden
  Objekt berechnet.

  Entnommen aus: http://www.elektronik-bastelkeller.de/wordpress/?p=504
 
*/

// Trig ist an Digital-Pin 7 angeschlossen
const byte TRIGGER = 7;

// und Echo an Digital-Pin 8
const byte ECHO = 8;


/************************************************************
*
* void setup()
* ------------
*
* Wird einmal beim Programmstart durchlaufen
*
*************************************************************/
void setup() {                
  Serial.begin(9600);   
  
  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);
  
  // Damit später durch HIGH-setzen von TRIGGER ein Impuls
  // ausgelöst werden kann, wird TRIGGER hier LOW gesetzt.
  digitalWrite(TRIGGER, LOW);
  
  // TRIGGER muss mindestens 2µs LOW sein
  delayMicroseconds(2);

  // Für Leonardo
  while (!Serial)
    ;  
}


/************************************************************
*
* void loop()
* ------------
*
* Wird immer wieder durchlaufen
*
*************************************************************/
void loop() {
  long laufzeit;
  double entfernung;
  
  while(true) {
    // Einen Impuls auslösen
    digitalWrite(TRIGGER, HIGH);
    delayMicroseconds(5);
    digitalWrite(TRIGGER, LOW);
  
    // Messen, wann der reflektierte Impuls zurückkommt
    laufzeit = pulseIn(ECHO, HIGH);
  
    // Pro Meter benötigt der Schall in Luft ca. 2,9 ms
    // Weg geht hin und zurück, also mal 2
    entfernung = (double) laufzeit / (2.9 * 2.0);
  
    Serial.print("Entfernung zum Objekt: ");
    Serial.print(entfernung);
    Serial.println(" mm");
  
    delay(100);
  }
}

Wenn auf dem Monitor nichts sinnvolles angezeigt wird, kannst Du ziemlich sicher sein, dass der Sensor die Luftschraube erfasst und deshalb "spinnt".

Gruß,
Ralf