Zwei HC SR 04 Ultraschallsensoren

Hallo Zusammen,

ich habe schon verschiedene Topics durchforscht, aber keine passende Möglichkeit gefunden. Ich möchte einen LKW bauen und einen Sensor vorne und einen hinten hinbauen. Die Software die ich hier poste dient nur zur Simulation. Da ich zuhause keine Möglichkeit habe etwas zu löten habe ich die Sensoren direkt auf den Arduino gesteckt, daher auch die VCC und GND Pins. Zum Verständnis : Sensor eins zeigt immer den richtigen Wert an Sensor zwei immer 0cm. Über eine Antwort wäre ich sehr froh! Kann mir einer den passenden Code umschreiben oder etwas helfen?

Vielen Dank schonmal im Vorraus!!!

const int  echo = 4;
const int trig = 3;
long laenge1;
long laenge2;

const int echo2 = 11;
const int trig2 = 12;

const int vcc = 2;
const int vcc2 = 13;

const int GND2 = 10;
const int GND = 5;

void setup(){
 pinMode(echo,INPUT);
 pinMode(trig,OUTPUT);
 Serial.begin(9600);
 pinMode (vcc, OUTPUT);
 pinMode (vcc2, OUTPUT);
 pinMode (GND2, OUTPUT);
 pinMode (GND, OUTPUT);
 digitalWrite (vcc, HIGH);
 digitalWrite (vcc2, HIGH);
 digitalWrite (GND2, LOW);
 digitalWrite (GND, LOW);
 

}


void loop()
{
 digitalWrite (trig, LOW);        // trig_sensor_eins Pin auf LOW setzen
 delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
 digitalWrite(trig, HIGH);        // trig_sensor_eins Pin auf HIGH setzen
 delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
 digitalWrite (trig, LOW);        // trig_sensor_eins Pin wieder auf LOW setzen
 
 laenge1 = pulseIn (echo, HIGH,13051)*0.017;   // Signal aus echo_sensor_eins 
 Serial.print(laenge1);
 Serial.println(" cm Sensor 1");
 
 delay (1000);
 
 digitalWrite (trig2, LOW);        // trig_sensor_zwei Pin auf LOW setzen
 delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
 digitalWrite(trig2, HIGH);        // trig_sensor_zwei Pin auf HIGH setzen
 delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
 digitalWrite (trig2, LOW);        // trig_sensor_zwei Pin wieder auf LOW setzen
 
 laenge2 = pulseIn (echo2, HIGH, 13051)*0.017;   // Signal aus echo_sensor_zwei 
 
 Serial.print(laenge2);
 Serial.println(" cm Sensor 2");
 
 delay (1000);
 
}

sautd: Sensor eins zeigt immer den richtigen Wert an Sensor zwei immer 0cm.

Wenn Sensor2 auch was messen soll, würdest Du im Code ja wohl auch eine Initialisierung für den Echo- und Trigger-Pin von Sensor2 benötigen. Sowas ähnliches wie:

  pinMode(echo2,INPUT);
  pinMode(trig2,OUTPUT);

Oh das habe ich vergessen :grin: aber der code funktionier immer noch nicht habe es nochmal etwas anders programmiert, aber das Problem ist das gleiche :astonished:

const int  echo = 4;
const int trig = 3;

long laenge1;
long laenge2;

const int echo2 = 11;
const int trig2 = 12;



void setup(){
 
 pinMode(echo,INPUT);
 pinMode(trig,OUTPUT);
 
 pinMode (echo2, INPUT);
 pinMode (trig2, OUTPUT);
 
 Serial.begin(9600);
 

}


void loop()
{
 digitalWrite (trig, LOW);        // trig_sensor_eins Pin auf LOW setzen
 delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
 digitalWrite(trig, HIGH);        // trig_sensor_eins Pin auf HIGH setzen
 delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
 digitalWrite (trig, LOW);        // trig_sensor_eins Pin wieder auf LOW setzen
 
 laenge1 = pulseIn (echo, HIGH,13051)*0.017;   // Signal aus echo_sensor_eins einlesen ind in der Variable laenge speichern und in cm umrechnen
 
 Serial.print(laenge1);
 Serial.println(" cm Sensor 1");
 
 delay (1000);
 
 digitalWrite (trig2, LOW);        // trig_sensor_zwei Pin auf LOW setzen
 delayMicroseconds (2);                       // Verzögerung um zwei Millisekunden
 digitalWrite(trig2, HIGH);        // trig_sensor_zwei Pin auf HIGH setzen
 delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden
 digitalWrite (trig2, LOW);        // trig_sensor_zwei Pin wieder auf LOW setzen
 
 laenge2 = pulseIn (echo2, HIGH, 13051)*0.017;   // Signal aus echo_sensor_zwei einlesen ind in der Variable laenge speichern und in cm umrechnen
 
 Serial.print(laenge2);
 Serial.println(" cm Sensor 2");
 
 delay (1000);
 
}

sautd: Oh das habe ich vergessen :grin: aber der code funktionier immer noch nicht habe es nochmal etwas anders programmiert, aber das Problem ist das gleiche :astonished:

Hast Du VCC und GND jetzt richtig an 5V und GND angeschlossen?

Außerdem fällt mir an Deinem Code auf, dass Du offenbar MILLIsekunden nicht von MIKROsekunden unterscheiden kannst, jedenfalls geht Dir die Kommentierung Deines Programmcodes daneben.

Im übrigen fällt mir jetzt erstmal nur ein, den Trigger-Impuls 10 Mikrosekunden lang zu machen. Also statt:

delayMicroseconds (5);                       // Verzögerung um fünf Millisekunden

setze:

delayMicroseconds (10);                       // Verzögerung um zehn MIKROsekunden

Wenn es dann immer noch nicht funktioniert: Was passiert, wenn Du die beiden Sensoren vertauscht anschließt?

Die Sensoren dürfen nicht durch Pins mit Strom versorgt werden. Versorge sie direkt mit +5V und GND. Grüße Uwe

Oh vielen Dank es funktioniert!!!

Habe noch eine grundsätzliche Frage, darf ich an Pin 0 und Pin 1 etwas anschließen ? Da dort ja TX und RX steht, und kann ich die Analogeingänge auch als Ausgänge verwenden und auf A0 z.B. einen Pull-up setzen also per Software?

Du kannst Pin 0 und 1 verwenden wenn Du die Serielle Schnittstelle nicht verwendest. Die analogen Pins sind auch die digistalen Pins von 14 bis 19.

Grüße Uwe