Wave Shield und Ultraschall Distanzmesser HC-SR04

Hallo,

da ich noch weit davon entfernt bin, selber zu programmieren, stelle ich hier meine Frage:

Ich will:
Wenn man vor dem Distanzmesser durchläuft, ertönt ein Geräusch.

Ich habe:
1x Wave Shield von adafruit
1x Ultraschall Distanzmesser HC-SR04
1x Arduino UNO

Hat jemand Erfahrung mit den beiden Produkten und die schon mal kombiniert? Oder hat mir jemand einen Tipp.

Herzlich,
Karin

Auf der Adafruit-Seite heißt es in den FAQ zum Wave-Shield:

What pins are used by the shield?
Pins 13, 12, 11 are always used by the SD card (they are the only pins that have a high speed SPI interface). Then there are 5 other pins used to talk to the DAC and SD card, but they can be set to connect to any arduino pin. However, by default, the library is configured to use pins 10 (for SD card) and pins 2, 3, 4 and 5 for the DAC. To chanage these pins requires modifying the library - the pins are referenced by their 'hardware' pin names (ie PORTD, etc) not by arduino pins.
That means pins 6, 7, 8, 9 and the 6 analog in pins (also known as digital i/o pins 14-20) are available.

Es sind also noch genügend digitale Pins übrig, um deinen Entfernungsmesser anzuschließen. Sollte also problemlos klappen.

Karin:
Oder hat mir jemand einen Tipp.

Sowohl zum Wave-Shield als auch zum Ultraschall-Entfernungsmesser gibt es Demoprogramme.

Teste beides mit dem jeweiligen Demoprogramm einzeln!

Dann schließe beide Hardware gemeinsam an und achte darauf, dass “Echo” und “Trigger” Pin des Ultraschallsensors keine Pins belegen die vom Wave-Shield benötigt werden! Gerade mal nachgeschaut: Die Pins 6, 7, 8, 9 sowie A0 bis A5 beim UNO wären bei diesem Shield frei für eigene Erweiterungen, also schließe bei aufgestecktem Shield beispielsweise wie folgt an:
Pin-6 ==> “Trigger” des Ultraschallsensors
Pin-7 ==> “Echo” des Ultraschallsensors

Und dann brauchst Du ein Programm das ungefähr so arbeitet:

void loop()
{
  int distanceCM= abstandsMessung();   // Abstand mit Sensor messen
  if (distanceCM<125) playWav("DingDong.wav");  // Bei Unterschreiten des Mindestabstands Sound abspielen
}

Die Funktionen abstandsMessung() bzw. playWav(Dateiname) sollten sich ggf. so ähnlich in den Demoprogrammen finden lassen, aus denen Du den Code dann für Dein Programm übernehmen kannst.

Hallo,
hier findest Du Info dazu:

Wenn Du dann Deinen ersten Sketch programmierst hast, dann kann man Dir auch
wirklich helfen. So weiß man ja "nichts". Kann also auch nicht richtig helfen.
Gruß und Spaß
Andreas

Karin:
1x Ultraschall Distanzmesser HC-SR04
Hat jemand Erfahrung mit den beiden Produkten und die schon mal kombiniert? Oder hat mir jemand einen Tipp.

Hallo,

zumindest zum HC-SR04 könnte ich Dir folgende Seite empfehlen: elektronik-bastelkeller.de. Mit kurzer Erklärung, wie's funktioniert und Beispiel-Sketch. Wenn Du dieses Beispiel bei Dir zum Laufen bringst, hast Du schon mal erste Erfahrungen mit dem Arduino gesammelt.

Dann könntest Du versuchen, zu Deinem Sound-Shield ein Beispiel zu finden und nachzuvollziehen.

Zum Schluss könntest Du versuchen, beide Teile zu kombinieren.

Gruß,
Ralf

Hallo zäme,

vielen Dank für eure Antworten.

Versuche es im Moment mit dem ISD1820 Sprachmodul anstatt dem Wave Shield.
Beides einzeln hab ich schon mal. Probiere jetzt beides zusammen zu hängen.

Wow, das ging!

Habe die beiden Sketch

http://code.naishe.in/2013/09/fun-with-ultrasonic-ranging-device-and.html

miteinander kombiniert.

Sieht jetzt so aus:

const int TRIG = 8;
const int ECHO = 7;

int playE = 3;

void setup(){
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);

pinMode(playE, OUTPUT);
}

void loop()
{
long duration, inches, cm;

digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);

duration = pulseIn(ECHO, HIGH);
inches = duration / 74 / 2 ;
cm = duration / 29 / 2 ;

Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();

if(cm > 200)
{
analogWrite(playE, (20 - cm) * 10);
}
else
{
digitalWrite(playE, LOW);
}

}

Leider ist das ganze nicht sehr laut, so meine nächste Frage:
Kann man mehrere Lautsprecher am Arduino anschliessen?

Das mit den Lautsprechern hat sich erledigt, dafür eröffneten sich mir zwei neue Probleme:

  1. Wenn ich den Arduino über eine Batterie anschliesse, funktionierts nicht immer. Manchmal ertönt das Geräusch aus keinem mir ersichtlichen Grund

  2. Ich möchte nun noch, dass das Geräusch nur ertönt, wenn man zwischen einem bestimmten Abstand ist. Ist dieser Abstand klein, funktionierts, nehme ich grössere Zahlen, geht nichts mehr. Woran könnte das liegen?

Hier noch der aktuelle Sketch:

const int TRIG = 8;
const int ECHO = 7;

int playE = 3;

 
void setup(){
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  Serial.begin(9600);
  
  pinMode(playE, OUTPUT);
}
 
void loop()
{
  long duration, inches, cm;
   
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2); 
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
   
  duration = pulseIn(ECHO, HIGH);
  inches = duration / 74 / 2 ;
  cm = duration / 29 / 2 ;
   
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();
 
if(cm > 20 && cm < 40)
  {
    digitalWrite(playE, HIGH);
  }
  else
  {
    digitalWrite(playE, LOW);
  }
   
}

Karin:
Woran könnte das liegen?

Deine loop-Funktion läuft mehrere hundertmal pro Sekunde.

Das ist bei der Ausbreitungsgeschwindigkeit von Schall (ca. 330 m/s) viel zu oft, weil dadurch immer mehrere Ping-Signale gleichzeitig im Empfangsbereich des Sensors unterwegs sind. So dass z.B. nach dem zweiten oder dritten Ping noch das Echo des ersten Pings aufgefangen werden kann.

So kannst Du keine Abstände sinnvoll messen.

Der zeitliche Abstand zwischen zwei Messungen mit dem Sensor muß so groß sein, dass sich der Schall des vorhergehenden Pings erst totgelaufen hat, bevor Du das nächste Ping auf die Reise schickst.

Am einfachsten machst Du am Ende der loop-Funktion ein "delay(100);" damit die Funktion nur zehnmal pro Sekunde läuft. In 100ms = 0,1 s läuft der Schall ca. 33 m, damit sind Echos, die dann noch unterwegs sein sollten, auf jeden Fall unterhalb der Empfangsempfindlichkeit des Sensors.

Hallo,
und wenn Du zum Code einfügen noch das “STX” oder “#” Zeichen im Editor nutzt,
dann wirst Du hier sehr schnell zum Profi. :wink:
Gruß und Spaß
Andreas

Bildschirmfoto 2014-10-10 um 14.37.png

Super, auch das funktioniert.

Merci für den Tipp und die Infos dazu!
Und merci auch für den Hinweis zum Hochladen.

Nun ist es so, dass wenn ich den Arduino über Batterie (9V) betreibe, reagiert der Distanzsensor schon bei kleinstem Abstand.
Das ist für mein Vorhaben nicht weiter schlimm, aber es wundert mich, wieso dies so ist.

Möchte gerne ein Bild des fertigen Projekts hochladen. Wie geht das?

Das kommt, wenn ich auf Bild einfügen klicke. Wie muss ich weiterfahren?

Hallo,
http://forum.arduino.cc/index.php/topic,148850.0.html
Punkt 8/9
Gruß und Spaß
Andreas

Hallo,

dein Problem ist weniger das Programm als vielmehr die 9V Batterie. Die HC-SR04 benötigen einiges an Strom. Über den Arduino betrieben kannst du keinesfalls die volle Distanz messen. Bei mir war schon bei maximal 40cm langen Distanzen und bei kurzen nicht.
Schliest du nun noch zusätzliche Verbraucher an den Arduino an, wie z.B. das Wave Modul kann es sogar passieren das dein Arduino zu wenig strom bekommt und jedesmal resettet.
Am besten ist es wenn du das Modul und den Arduino getrennt voneinander an einer Ausreichende Spannungs/Stromquelle betreibst. Eine 9V Block Batterie ist nicht dazu ausgelegt. Das nächste Problem was du mit dieser Batterie bekommen wirst ist, dass die Batterie schon nach wenigen Stunden leer sein wird. im Schnitt haben diese Blöcke zwischen 700-900mAh, mehr nicht.
Ich hatte mein Problem damals so gelöst das ich mir eine externe Stromversorgung über einen Step-Down genommen habe und den Arduino und das HC dort angeschlossen habe. noch einen 1000µF Cap vor beides gesetzt und ich konnte die vollen 3-4m messen.
Wenn du es über Batterie machen musst empfehle ich dir welche mit ausreichender Kapazität zu nutzen. Derzeit nutze ich billige 2500mAh Akkus aus dem Lidl. Die gibt es immer mal.

MFG

His

Nö, die HC-SR04 brauchen nich viel. 30mA oder so- das packt auch ne 9V-Batterie.
Die setzen intern die Spannung auf ~20V hoch, damit sie laut genug quäken können.
Dass sie dennoch die 4m oft nicht schaffen, muss andere Ursachen haben-ich hab meine an ner stabilen 2A-Schiene, und trotzdem ist so bei bisschen über nem Meter Schluss. Interessanter weise bringen die Dinger irgendwoher auch dann ein Echo, wenn ich sie gegen den Himmel richte..daran bin ich auch schon verzweifelt.
Würde es an der Stromversorgung liegen, käme eher überhaupt kein Echo an. Tuts aber....
Inzwischen reift (nicht nur bei mir, sondern auch bei anderen) der Verdacht, dass die ganz billigen einfach zu miserabel "nachgebaut" sind-ich hab nämlich verschiedene, die auch teils ganz anders bestückt sind.

Ich glaube auch nicht, dass es an der Batterie liegt. Der Arduino lief mit dem Distanzsensor und dem Sprachmodul 3-4 Stunden und die Batterie ist noch nicht durch. Ich hab eher gedacht, dass es am Code liegt.

Kann ich auch ein Bild hochladen, wenn es nur auf meinem PC gespeichert ist?

Mit bestem Dank!

Sicher kannst du das.
Wenn du nen Beitrag schreibst, hast du unter dem Eingabefeld den Link "additional optins"- klick drauf und du kannst Bilder anhängen.
Die werden dann von deinem PC hochgeladen.

Das mit dem Code-möglich, müsste man sehen. Liest du das Ding einfach über PulseIn ein?
Das ist ne ziemlich schlechte Methode, da das ewig dauern kann, wenn man den Timeout nicht runtersetzt. Somit ist nur eine Messung pro Sekunde drin (glaub ich, weiss grad nicht aus dem Kopf, wie der Standard-Timeout der Funktion ist). Du kannst den so weit runtersetzen, dass die maximal interessierende Entfernung (Schallgeschwindigkeit auf deine maximal gewünschte Entfernung mal 2, da das Echo auch zurück muss) grade erreicht wird.

Damit sind dann deutlich schnellere Messungen möglich, aber: zugleich riskierst du, "wilde" Echos zu empfangen, die noch im Raum herumschwirren von der vorherigen Messung. Musst also zumindest warten, bis diese sicher abgeklungen sind (50ms oder so).

Postenschreck bei Nacht…

Verstehe leider nicht alles von meinem Code, da ich den aus zweien zusammengesetzt habe. Habe jetzt ein Jahr Zeit den Postenschreck zu optimieren…