Ultraschall Sensor A-14P20 Auswertung an Arduino Due

Hallo zusammen,

zur Zeit habe ich ein Projekt bei welchem ich einen A-14P20 Ultraschall Sensor von Euklid verwende.
Dieser sendet und empfängt einen 40kHz Burst den ich mit meinem Arduino Due generiere.
Das Signal (je nach Abstand) kommt auch am Ausgang meiner Verstärker Stufe (und danach einem Schmitt Trigger + Level Shifter) an. Der Level Shifter wandelt es mir wieder in +3,3V/ 0V um.

Nun habe ich jedoch noch ein Problem beim Code für das Auswerten des Signals und damit die Entfernungsmessung. Dabei muss ich einige Sachen beachten und in den Code einbauen:

  • Ich muss die Zeit zwischen dem Aussenden des Burst und dem empfangenen Signals aufnehmen
  • Ich muss das Eingangssignal abtasten um sicher zu stellen, dass es sich um den 40kHz Burst handelt
  • Ich muss die Anzahl der Pulse des Burst zählen um sicher zu stellen, dass es die 10 * 40kHz Pulse sind

Hat evtl. jemand ein Code Vorschlag für mich?
Leider bin ich eher der Hardware Typ und habe daher nicht so viel Ahnung von Software. (War schon glücklich den 40kHz Burst hinzubekommen :slight_smile: )

Vielen Dank für alle Tipps!

Viele Grüße
Bobberle

Warum muss es der von genutzte Sensor sein ?
Allgemein werden ja der HC-SR04 am Arduino eingesetzt.

Hab es als Projekt mir vorgenommen eine ein Sensor Lösung zu haben :slight_smile:

Hi

Das erklärt aber nicht, warum es DIESER Sensor sein soll - ein HC-SR04 ist auch ‘nur ein Sensor’ - Der hat zwar auf derPlatine zwei Stöpsel, aber wenn Alles, was nicht nur aus Draht besteht nicht mehr als ‘Eins’ gesehen werden darf, … jo.

Bist Du auf diesen Sensor angewiesen?
Wobei - wenn Du schon das Echo erkennen kannst, was hindert Dich, den Start-Zeitpunkt zu speichern und beim Echo den Empfangs-Zeitpunkt ebenso?
Hier wird wohl micros() die Wahl sein (oder einen Timer, aber micros() gibt’s schon fertig zum mitnehmen).

MfG

Na....ok.
Es wurde ja schon alles gesagt.
Auch wenn ich es nicht verstanden habe.

Dieser Sensor soll es sein, da ich schon zu ihm Impedanz Messungen gemacht habe und mit ihm Simulationen habe. Auch ist es eine Vorgabe für diese Projektarbeit :slight_smile:

micros() klingt schon einmal sehr gut. Werde mir mal das Manual dazu anschauen.

Bin bei weiterem durchlesen noch auf analogRead() gestoßen. Jedoch glaube ich das es das Falsche ist für ein Abtasten. Hatte mir auch schon überlegt, die Flanken zu zählen, dann hätte ich aber noch keine Sicherheit ob es auch 40 kHz sind...

War schon glücklich den 40kHz Burst hinzubekommen :slight_smile:

Ja, das wäre ich auch.

Das Signal (je nach Abstand) kommt auch am Ausgang meiner Verstärker Stufe (und danach einem Schmitt Trigger + Level Shifter) an. Der Level Shifter wandelt es mir wieder in +3,3V/ 0V um

Noch viel besser. Wenn nicht zu viel störender Lärm das ganze überlagert, sollte der Rest (Software) machbar sein.

40 Pulse/ms sind ca. 12 µs HIGH und 12 µs LOW, und das 10 mal.
micros() ist auf 16 MHz 8bit Controllern nur auf 4 µs genau. Wie das beim Due ist, steht nicht in der Referenz, kann aber höchstens besser sein. Wenn also regelmäßige Wechsel in 8 .. 16 µs genau genug sind, reichen schon Standard Arduino-Bordmittel.


P.S. Ich verstehe das so, dass du die Entfernung zwischen Sender und Empfänger rauskriegen willst, und nicht ein Echo in der Nähe des Senders? (Wie es mit den üblichen Ultraschall-Sensoren am Arduino HC-SR04 gemacht wird.) Beim Echo-Auswerten ginge das mit Empfangs-Frequenz und -Dauer sicher nicht so gut.

michael_x:
Ja, das wäre ich auch.
Noch viel besser. Wenn nicht zu viel störender Lärm das ganze überlagert, sollte der Rest (Software) machbar sein.

40 Pulse/ms sind ca. 12 µs HIGH und 12 µs LOW, und das 10 mal.
micros() ist auf 16 MHz 8bit Controllern nur auf 4 µs genau. Wie das beim Due ist, steht nicht in der Referenz, kann aber höchstens besser sein. Wenn also regelmäßige Wechsel in 8 .. 16 µs genau genug sind, reichen schon Standard Arduino-Bordmittel.


P.S. Ich verstehe das so, dass du die Entfernung zwischen Sender und Empfänger rauskriegen willst, und nicht ein Echo in der Nähe des Senders? (Wie es mit den üblichen Ultraschall-Sensoren am Arduino HC-SR04 gemacht wird.) Beim Echo-Auswerten ginge das mit Empfangs-Frequenz und -Dauer sicher nicht so gut.

Sorry evtl. etwas schlecht ausgedrückt.

Ich habe nur einen "puren" Ultraschall-Sensor. Die Verstärkerstufe und das umschalten Senden/Empfangen habe ich selber designed/ simuliert/ aufgebaut. Dabei soll die Schaltung eine Entfernung wie z.B. beim HC-SR04 messen. Jedoch nur mit einem Ultraschall-Sensor.

Ich habe eine Pulsbreite von 25µs (->40kHz) und davon habe ich in einem Burst eben 10 Stück (-> Burstlänge = 250µs).
Am Ausgang des Schmitt-Trigger hätte ich schon ein "binäres" Signal (+/-5V) und am Ausgang vom Level-Shifter (+3,3V/ 0V) auch.

Jedoch müsste ich noch überprüfen ob die Pulsbreite dieses "binären" Signals auch noch 25µs hat oder ob ich evtl. etwas anderes aufgefangen hab. Dann könnte ich die Anzahl der "richtigen" Pulse (evtl. mit Flanken zählen im Programm?) messen?

Dazu bräuchte ich eben Hilfe beim Code :slight_smile:

Ich nehme an, das wird etwas wie das hier ?
https://www.mikrocontroller.net/articles/Entfernungsmessung_mit_Ultraschall

Dann hast Du ja schon die Basis, wenn der Burst schon funktioniert.

Nachdem man den Burst gesendet hat, mit der gleichen Methode den Eingang lesen und in ein Array schreiben. Dann wie der Mensch in dem Artikel das macht, erst mal das Array ausgeben und Auswertemethode entwickeln. Das kann man dann später noch optimieren. Im Artikel wird allerdings mit dem Analogsignal gearbeitet, ob dein Schmitt-Trigger-Ausgangssignal gut genug ist, musst Du selber wissen.

Wenn der Burst mit einem Timer erzeugt wird, kann man das Lesen auch mit einem Timer machen, wie im Artikel für einen AVR beschrieben. Falls es auch mit micros(), delayMicroseconds() oder ähnlichem geht, dann eben so.

Leute mit einem Due, die hier fertigen Code präsentieren, werden hier nicht Schlange stehen. Der Due verwendet einen ziemlich alten 32 Bit Controller und wird von Arduino nur sehr lustlos unterstützt.

Beim Empfangen eines Echos werden sich üblicherweise die Impulse überlagern, wenn es auch weiter entfernte Stellen gibt, an denen Schallwellen reflektiert werden. Daher wird üblicherweise nur ein (1) kurzer Puls gesendet, die Dauer bis zum ersten Echo gemessen und dann gewartet bis wieder Ruhe ist. Ein Signal das weiter entfernt reflektiert wurde, ist deutlich schwächer, das hilft auch etwas, dass man nicht zu lange warten muss.
Aber 20 Flanken (10 Pulse) innerhalb 250 µs und danach erst anfangen zu messen, da würde ich mir erstmal den Empfang auf einem Oszi ansehen, ob man das mit einem Komparator (Schmitt-Trigger) überhaupt sauber genug digitalisieren kann. Analog am Arduino ist jedenfalls zu langsam.

michael_x:
Daher wird üblicherweise nur ein (1) kurzer Puls gesendet, die Dauer bis zum ersten Echo gemessen und dann gewartet bis wieder Ruhe ist.

Wirklich ?

Hier ist ein bischen was zum HC-SR04 dokumentiert
http://www.pcserviceselectronics.co.uk/arduino/Ultrasonic/electronics.php
Da sieht man auch den Burst. Der ist meines Wissens nach notwendig, um den Piezo Sender erst einmal mechanisch in Bewegung zu bringen.

Bessere Sensoren arbeiten anscheinend oft mit unterschiedlicher Pulsbreite und Periodendauer in den einzelnen Zyklen des Bursts, um den Piezo noch besser auf Touren zu bringen.

Im obigen Link sieht man anscheinend auch, dass der Empfänger nachschwingt und selber noch Pulse erzeugt.

michael_x:
Analog am Arduino ist jedenfalls zu langsam.

Da er ja einen Due verwendet, könnte er im free running mode des ADC mit 1 MSa/s abtasten
http://frenki.net/2013/10/fast-analogread-with-arduino-due/

ArduFE:
Wirklich ?

Hier ist ein bischen was zum HC-SR04 dokumentiert
PC Services - Circuit Ultrasonic Range Sensing
Da sieht man auch den Burst. Der ist meines Wissens nach notwendig, um den Piezo Sender erst einmal mechanisch in Bewegung zu bringen.

Bessere Sensoren arbeiten anscheinend oft mit unterschiedlicher Pulsbreite und Periodendauer in den einzelnen Zyklen des Bursts, um den Piezo noch besser auf Touren zu bringen.

Im obigen Link sieht man anscheinend auch, dass der Empfänger nachschwingt und selber noch Pulse erzeugt.

Normalerweise werden mehrere Pulse gesendet, da wie du schon erwähnt hast die Membran des Ultraschall-Sensors wirklich zum Schwingen gebracht werden muss.
Auch sind die Nachschwinger ein sehr großes Problem bei mir. Man kann diese sehr gut in der Simulation als auch auf dem Oszi sehen. Dadurch wird der min. Abstand vom Ultraschall-Sensor auf min. 40 cm beschränkt...
Schaue mir gleich mal den Link zu dem free running mode mal an.

Gruß
Bobberle

Hier ist ein bischen was zum HC-SR04 dokumentiert

Oh, danke. Lernt man immer wieder dazu. Hab bisher nur von außen 1 * kurz HIGH ausgegeben, ohne mir um die Innereien wirklich Gedanken zu machen.
Umso froher bin ich, wie viel Arbeit mir das Modul abnimmt.

Viel Erfolg mit deiner Sensor-Ansteuerung und Auswertung.