INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
HC-SR04
11.11.2015, 17:20
Beitrag #1
HC-SR04
Hallo!
Ich bin neu hier im Forum und hoffe das mir jemand weiterhelfen kann.
Ich heiße Karsten und bin 42 Jahre alt.

Wie warscheinlich viele Andere auch möchte ich mir ein Roboterfahrzeug zusammen bauen.
Mit Arduino UNO und Arduino Motor Shield (original Arduino, kein Clone)
Es soll mit hilfe des HC-SR04 Us Hindernisse erkennen und dementsprechend reagieren. Wenn ich jetzt den Sensor mit folgenden Sketch ansteuere läuft alles prima.

Code:
#define TRIGGER 4
#define ECHO 7    

void setup(void) {
  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);
  Serial.begin(9600);  
}
long duration=0;
long distance=0;
long distance_old=0;

void loop() {
  
  digitalWrite(TRIGGER, LOW);  
  delayMicroseconds(2);

  digitalWrite(TRIGGER, HIGH);  
  delayMicroseconds(10);

  digitalWrite(TRIGGER, LOW);
  duration = pulseIn(ECHO, HIGH);

  duration = (duration/2);
  distance = duration / 29.1;
  
    Serial.print(distance);
    Serial.println(" cm");
  
  distance_old=distance;
  delay(200);

}
Wenn ich zu dem Sketch jetzt aber noch die Motorsteuerung zufüge dann kommen die Abstände vom Sensor nur alle 2-3 Sekunden.
Code:
#define TRIGGER 4
#define ECHO 7  
#define STOP 15  

int richtungA = 12;
int richtungB = 13;
int pwmA = 3;
int pwmB = 11;
int bremseA = 9;
int bremseB = 8;
int geschwindigkeit = 64;

void setup(void) {
pinMode(richtungA, OUTPUT);
pinMode(richtungB, OUTPUT);

pinMode(bremseA, OUTPUT);
pinMode(bremseB, OUTPUT);

analogWrite(pwmA, geschwindigkeit);
analogWrite(pwmB, geschwindigkeit);

digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
  
}

long duration=0;
long distance=0;
long distance_old=0;

void loop() {

  ultraschall();

  if(distance <= STOP)
  {
   digitalWrite(richtungA, HIGH);
   digitalWrite(richtungB, LOW);

   digitalWrite(bremseA, LOW);
   digitalWrite(bremseB, LOW);
  }

  delay(2000);

  digitalWrite(richtungA, HIGH);
  digitalWrite(richtungB, HIGH);

  digitalWrite(bremseA, LOW);
  digitalWrite(bremseB, LOW);

  delay(1000);

}
void ultraschall(){

  pinMode(TRIGGER, OUTPUT);
  pinMode(ECHO, INPUT);
  Serial.begin(9600);

  digitalWrite(TRIGGER, LOW);  
  delayMicroseconds(2);

  digitalWrite(TRIGGER, HIGH);  
  delayMicroseconds(10);
  
  digitalWrite(TRIGGER, LOW);
  duration = pulseIn(ECHO, HIGH);

  duration = (duration/2);
  distance = duration / 29.1;
  
    Serial.print(distance);
    Serial.println(" cm");

    delay(500);
}

Das Fahrzeug reagiet also viel zu spät. Ich habe schon alles möglich versucht und im Internet geschaut. Finde einfach nicht den Grund bzw. eine Lösung.
Es ist egal ob ich den Sensor an dem Motor Shield oder direkt am Board anschließe. Es ist auch egal mit was ich das Sketch erweiter (z.B. Servosteuerung)
Ich hoffe das mir jemand weiterhelfen kann.

Mfg
Karsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.11.2015, 17:39
Beitrag #2
RE: HC-SR04
Hallo,
das ist doch bei deinem Sketch eindeutig.
Die delays in deien Loop (zusammen 3,5 sek. verzögern das Ganze.
Nimm die delays raus und ersetze sie durch millis. Sieh dir "BlinkWithoutDelays" an.
In den delays macht der Atmega nichts außer warten.

Danach arbeitet der Atmega auch während der Pausen weiter.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.11.2015, 18:02
Beitrag #3
RE: HC-SR04
Danke für die schnelle Antwort.
Mir war nicht klar das sich das DELAY so auf den Sensor auswirkt.
Bin ja noch Anfänger.
Ich habe deinen Tip aber gerade umgesetzt und es läuft :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.11.2015, 18:16
Beitrag #4
RE: HC-SR04
(11.11.2015 18:02)Kaddi36 schrieb:  Danke für die schnelle Antwort.
Mir war nicht klar das sich das DELAY so auf den Sensor auswirkt.
Bin ja noch Anfänger.
Ich habe deinen Tip aber gerade umgesetzt und es läuft :-)

Ja, das sind Erfahrungen, die man machen muss.Wink

Aber es ist toll das eine Umsetzung so schnell gemacht wird und auch gleich funktioniert.

Danke für die Rückmeldung.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ultraschall mit HC-SR04 Mathias 18 494 04.12.2016 23:22
Letzter Beitrag: Bitklopfer
  Zur Fehlersuche - Ultraschalll HC-SR04 bergfrei 20 2.125 17.05.2015 19:42
Letzter Beitrag: tito-t
  Frage zum HC-SR04 Sonar der_tom 2 1.607 22.11.2013 10:57
Letzter Beitrag: burgi650
  LCD mit HC-SR04 Formel einfügen? power-dodge 2 1.794 16.11.2013 13:51
Letzter Beitrag: power-dodge

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste