Forum: Projekte & Code Ultraschall Entfernungsmesser selber bauen Eigenbau ATmega8 Assembler


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein einfaches, kleines und preiswertes (low cost) Beispiel eines 
Ultraschall-Entfernungsmessers mit einem 8MHz getakteten ATmega8.

Prinzip:

1. Der Transmitter, im Beispiel ein UST-40T, sendet für ca. 0,5ms
ein 40kHz Ultraschallsignal.

2. Der Receiver, ein UST-40R, empfängt entsprechend 
Schallgeschwindigkeit, zeitverzögert mit ca. 343m/s dieses Signal.

3. Das empfangene Signal, einige mV, liegt am ADC-Pin
des ATmega an.

4. Der ADC ist gleichzeitig die Zeitmessung (Counter). Sobald am ADC-Pin 
etwas "wackelt", also ein Signal empfangen wird, stoppt der Counter.
Das dimensionslose Counter-Ergebnis wird im Display angezeigt.

Bitte erwartet jetzt keine Wunder von dieser einfachen Schaltung, im 
Versuchsaufbau wurde eine Genauigkeit von 10% erreicht.

Entfernungen von 30cm (2x15) sind möglich.

Problem:

Der Empfänger braucht ca. 0,1ms, das entspricht eine Entfernung
von ca. 3cm um sich so langsam einzuschwingen.

Die Emfängerschaltung bzw. die Auswertung des Empfangssignals
ist das A und O der Entfernungsmessung.

Im Bild "B3.png" wurde die Phase des 40kHz Signals verschoben, der 
Spannungseinbruch am Transmitter ist deutlich zu erkennen. Eventuell 
ergeben sich daraus genauere Messverfahren.

Eventuell werde ich noch weitere Schaltungen veröffentlichen.

Für Hinweise und konstruktive Kritik bin ich sehr dankbar.

Bernhard

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Bernhard S. schrieb:

> 3. Das empfangene Signal, einige mV, liegt am ADC-Pin
> des ATmega an.

Das geht bei Verwendung des AC deutlich besser, im Sinne von: deutlich 
empfindlicher, also mit höherer Reichweite.

Alternativ könnte man natürlich auch einen externen Verstärker vorsehen, 
um die Sache über den ADC empfindlicher zu bekommen. Das bringt aber den 
Nachteil des zusätzlichen Bauelementeaufwands.

Eine weitere Alternative wäre die Verwendung eines eingebauten 
Verstärkers. Allerdings hat der steinalte Mega8 keinen zu bieten. Aber 
es ist ja nun nicht so, als wenn es keine anderen Megas mit 28 Pins gäbe 
oder auch diverse Tinys mit hinreichender Pinzahl für das Display. Bei 
der Wahl des µC sollte man schon ein wenig darauf achten, welches der 
verfügbaren Features für die jeweils geplante Anwendung eventuell 
nützlich sein könnte...

> 4. Der ADC ist gleichzeitig die Zeitmessung (Counter). Sobald am ADC-Pin
> etwas "wackelt", also ein Signal empfangen wird, stoppt der Counter.
> Das dimensionslose Counter-Ergebnis wird im Display angezeigt.

Naja, die Auswertung könnte man noch sehr massiv verbessern. Das geht 
dann in den Bereich Signalverarbeitung. Dein Bild B3.png zeigt schon 
etwas in dieser Richtung. Das zu sehen, ist die eine Sache. In der 
Software was Sinnvolles damit anzufangen die andere...

von Der müde Joe (Gast)


Lesenswert?

Du schreibst "Sobald am ADC-Pin etwas "wackelt", also ein Signal 
empfangen wird, stoppt der Counter.". So könntest Du auch einen 
Counter/Timer mit Schmitt-Trigger-Eingang nehmen. Also direct auf das 
Eingangssignal als Stopper für den Counter reagieren. Gibt's bei den 
Atmels nicht so etwas wie einen "Fast-PWM"? Vielleicht gibt's passend 
dazu auch einen "Fast-Counter"? Oder du nimmst einen uC mit einer 
generell höheren Taktfrequenz.

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Version 2

Bei Verwendung einer seriellen Induktivität am CTC Ausgang OC2 des 
Timers erhöt sich die Spannung am Sender deutlich, beim Versuchsaufbau 
konnte ich mehr als 20V messen :-)

Der selektive Vorverstärker verstärkt das schwache Echo des 
Transmitters, verbessert natürlich die Reichweite.

> Bei
> der Wahl des µC sollte man schon ein wenig darauf achten, welches der
> verfügbaren Features für die jeweils geplante Anwendung eventuell
> nützlich sein könnte...

Welchen µC würdest Du empfehlen?


> So könntest Du auch einen
> Counter/Timer mit Schmitt-Trigger-Eingang nehmen...

Du hast Recht. Ein Analog Comparator wäre eine Alternative, somit könnte 
man den µC auch niedriger Takten, danke für den Tipp.

Momentan wird das Eingangssignal nur alle 6µs gesampelt.

: Bearbeitet durch User
Beitrag #6317910 wurde vom Autor gelöscht.
von A-Freak (Gast)


Lesenswert?

Ich würde mal die Idee für einen Synchrondetektor zur Diskussion 
stellen.

Mit zwei freien Ausgängen vom µC ein Trägersignal dauerhaft und mit 90° 
Phasenverschiebung ausgeben, diese beiden Signale würden dann einen 
Analogschalter wie z.B. den 74HC4053 ansteuern der die Reflektion vom 
Ultraschallsensor nach Inphase und Quadraturphase abtastet.

Die Grobbestimmung der Entfernung würde über die Hüllkurve geschehen 
wann der erste Eingang sich ändert, eine Feinbestimmung könnte über die 
Phasenlage berechnet werden.

von Christoph M. (mchris)


Lesenswert?

>Der selektive Vorverstärker verstärkt das schwache Echo des
>Transmitters, verbessert natürlich die Reichweite.

Wie viele Meter schaffst Du gegen eine glatte Wand?

von c-hater (Gast)


Lesenswert?

Bernhard S. schrieb:

> Welchen µC würdest Du empfehlen?

Tiny84 würde ganz gut passen. Genug Pins für deine Anwendung und 
eingebauter 20dB-Verstärker. Ob der allerdings bei 40kHz wirklich noch 
20dB bringt, kann ich nicht versprechen. Ich selber habe ihn bisher nur 
im Audiobereich bis 20kHz benutzt, da paßt das.

von merciMerci (Gast)


Lesenswert?

A-Freak schrieb:
> diese beiden Signale würden dann einen
> Analogschalter wie z.B. den 74HC4053 ansteuern

... den braucht es nicht dazu, es reicht ein symmetrischer 
Spannungsteiler!

Mittelabgriff ist das Rx Signal, das zum ADC oder Ac geht. Dann wird 
zwischen den zwei genannten Ports, die das Trägersignal von 40KHz 
liefern der Spannungsteiler geschaltet.

A-Freak schrieb:
> Synchrondetektor

... kann ich auch empfehlen, verbessert  wesentlich die Signalselektion!

von Icke ®. (49636b65)


Lesenswert?

Bernhard S. schrieb:
> Für Hinweise und konstruktive Kritik bin ich sehr dankbar.

Fertige Module, die wesentlich genauer arbeiten, gibts im 3er Pack für 
5€. Ansteuerung und Auswertung sind recht simpel mit ein paar Zeilen 
Assembler erledigt. Startimpuls feuern, Timer starten und bei Eintreffen 
des Echos stoppen, fertig. Wenn du es als sportliche Herausforderung 
siehst, das besser zu machen, dann nur zu. Aber billiger wird es kaum 
gehen.

: Bearbeitet durch User
von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein paar Messungen am HC-SR04 arduino Modul.

Auffällig ist, daß nur 8 Perioden des Ultraschallsignals gesendet 
werden.

Die Spannung am Transmitter beträgt 5V Spitze-Spitze.

Das Mikrofon benötigt einige Perioden länger um sich komplett 
einzuschwingen. Das macht aber nichts, nur wenige empfangene 
Schwingungen werden benötigt, um das Echosignal zu decodieren.

Die maximale Impulsläne des Moduls beträgt ca. 70ms,
d.h. 12 Meter Abstand wäre theoretisch möglich (24m/2).

Christoph M. schrieb:
> Wie viele Meter schaffst Du gegen eine glatte Wand?

2m (4m/2) problemlos, mit Induktivitäten

c-hater schrieb:
> Tiny84 würde ganz gut passen

Danke für den Tipp^^

Icke ®. schrieb:
> Wenn du es als sportliche Herausforderung
> siehst, das besser zu machen, dann nur zu.

Davon war nirgendwo die Rede, oder habe ich etwas überlesen?

: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

>Christoph M. schrieb:
>> Wie viele Meter schaffst Du gegen eine glatte Wand?

>2m (4m/2) problemlos, mit Induktivitäten

Das hört sich gar nicht so schlecht an.
Die meisten Ultaschallentfernungsmesser arbeiten mit einer über die Zeit 
steigenden Empfindlichkeit.
Der Ablauf ist dabei folgender:
1. Signal senden und während dieser Zeit den Empfänger blockieren, um 
den Empfang des Direktschalls zu verhindern.
2. Empfindlichkeit minimal setzen
3. Empfindlichkeit langsam ansteigen lassen, um schwache Signale aus 
größerer Entfernung noch empfangen zu können.

von Gerhard O. (gerhard_)


Lesenswert?

Falls von Interesse:

Vor fast 20 Jahren befasste ich mich auch mit dem Thema. Als HW 
verwendete ich damals die ausgeschlachteten US Komponenten aus einer 
alten Polaroid Kamera. Die Firma Senscomp war der eigentliche Hersteller 
der Kapsel und T.I. stellte die beiden Haupt ICs her. Ich baute damit 
mit einem PIC uC einen Schneehöhenmesser. Reichweite betrug 50cm bis 
über 10m mit 0.3mm Auflösung. Ich berichtete über das Projekt hier:

Beitrag "Re: Zeigt her eure Kunstwerke (2)"
In dem Link sind zwei Oszibilder vom empfangen Echo.

In der Oktoberausgabe 2008 von Circuit Celler gibt es übrigens auch noch 
einen ausführlicheren Artikel darüber.

von Icke ®. (49636b65)


Lesenswert?

Bernhard S. schrieb:
> Davon war nirgendwo die Rede, oder habe ich etwas überlesen?

Nein, aber davon:

Bernhard S. schrieb:
> Ein einfaches, kleines und preiswertes (low cost) Beispiel eines
> Ultraschall-Entfernungsmessers mit einem 8MHz getakteten ATmega8.

Die von dir verwendeten UST-40x kosten allein schon jeweils 5€, also 
soviel wie drei Stück komplette HC-SR04. Wenn die Intention nicht ist, 
das Modul preiswerter herzustellen, dann sollte es wenigstens besser 
sein, dann lohnt sich der Aufwand. Wenn es reiner Spaß am Basteln ist, 
dann sei es dir natürlich gegönnt.

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein Assembler-Beispiel ATmega8 mit 8MHz und ein HC-SR04 Modul.

Die Messrate variiert, sobald eine Messung beendet ist, je nach 
Laufzeit, startet sofort eine neue.

In einem Schieberegister werden 8 Messwerte erfasst und immer der 
Maximalwert als Berechnungsgrundlage genutzt, somit ist der Anzeigewert 
relativ stabil und zappelt nicht wild herum.

Eine kurze Unterbrechnung des Schallweges fällt somit nicht auf.

LED grün: Signal-Laufzeit
LED gelb: Start Messung
LED rot:  Hardware-Error

Bei Bedarf kann ein Quarz verwendet werden.

Gerhard O. schrieb:
> Beitrag "Re: Zeigt her eure Kunstwerke (2)"
> In dem Link sind zwei Oszibilder vom empfangen Echo.

Ein sehr interessantes Projekt, habs's mir glich separat gespeichert, 
schade, daß es in diesem Thread schwer auffindbar ist.

Trotzdem Respekt !

Christoph M. schrieb:
> Die meisten Ultaschallentfernungsmesser arbeiten mit einer über die Zeit
> steigenden Empfindlichkeit.

Das ist hardwaremäßig nicht ganz einfach zu realisieren, Danke für den 
Tipp.

: Bearbeitet durch User
von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Icke ®. schrieb:
> Die von dir verwendeten UST-40x kosten allein schon jeweils 5€, also
> soviel wie drei Stück komplette HC-SR04. Wenn die Intention nicht ist,
> das Modul preiswerter herzustellen, dann sollte es wenigstens besser

Sind die Kapseln vergleichbar in der Qualität, dann wäre das ja ne 
günstige Quelle.

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Abdul K. schrieb:
> Sind die Kapseln vergleichbar in der Qualität

ja :-)

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Links oder rechts ist mehr Betrug? ;-)
Man müßte messen...

von Wolfgang (Gast)


Lesenswert?

Gerhard O. schrieb:
> In der Oktoberausgabe 2008 von Circuit Celler gibt es übrigens auch noch
> einen ausführlicheren Artikel darüber.

War das nicht die Mai Ausgabe?
https://www.mikrocontroller.net/attachment/42261/CC2008MAY-214.pdf

von Gerhard O. (gerhard_)


Lesenswert?

Wolfgang schrieb:
> Gerhard O. schrieb:
>> In der Oktoberausgabe 2008 von Circuit Celler gibt es übrigens auch noch
>> einen ausführlicheren Artikel darüber.
>
> War das nicht die Mai Ausgabe?
> https://www.mikrocontroller.net/attachment/42261/CC2008MAY-214.pdf

Tut mir leid - Mein Gedächtnis spielte mir nach solanger Zeit einen 
Streich.

von chris (Gast)


Lesenswert?

Hallo,

Hab sowas mit dem Mega328 und dem HC-SR04 2018 umgesetzt und habe 
ca.58,8µs/Bit (doppelter Weg) was eine Auflösung 1mm einfacher weg 
entspricht als Grundlage gesetzt. 1mm im Hobbybereich sollte wohl mehr 
als ausreichend sein... ;)

War auch verwundert das ich deutlich und stabil mehr als die 4m mit 
diesem Modul messen konnte. Eine Temperaturkompensation habe ich 
nachträglich eingebaut mit einem DS18S20.

https://www.roboternetz.de/community/threads/72343-HC-SR04-mit-AtMega328

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.