In diesem Artikel gehts mal um das Ultraschallmodul HC-SR04.
Daten siehe Anlagenblatt
hc-sr04_ultrasonic_module_user_guidejohn.pdf
Informatives zum Schall:
https://de.wikipedia.org/wiki/Schallgeschwindigkeit
331,5m/s bei 0°C, bei zunehmender Temperatur wird der Schall um 0,6m/s pro °C schneller.
Gleichung 1: 331,5m/s + 0,6 * 19°C = 342,9m/s bei 20°C
Informatives zum Programm:
Die Zeitbasis wird mit Timer 0 generiert im CTC-Modus 2 und mit OCR0B auf Pin D5 getoggelt. Hier ist ganz wichtig das OCR0A und OCR0B
den gleichen Wert haben da OCR0A die Auflösung in diesem Mode bestimmt. OCR0B ist hier schon in der Hardware mit PD5 im AVR selbst gekoppelt so das hier
der Timer 1 als einfacher Counter mit externer Taktung genutzt werden kann.
Auflösung 1bit enstpricht 1µs.
Der Triggerpin muss für mind. 10µs als Highpegel anliegen und wieder auf low gesetzt. Solange der Echopin low ist, wird in der Schleife gewartet bis der Burst vom Modul gesendet worden ist. Danach setzt das Modul sein Echopin auf HIGH und löst den ext. Interrupt 1, steigend Flanke, aus. Dadurch wird der Timer 0 freigegeben und beginnt den OCR0B=PD5=T1 zu toggeln so das mit jeder µs T1 incrementiert wird.
Wird das Echo vom Modul empfangen geht der Echopin von High auf Low und die Schleife im Programm wird unterbrochen, beide Timer gestoppt.
Hinweis: Timer1 ist begrenzt durch das OCR1A auf 30000µs als maximal Zeit (Hin/Rückweg). Wird dieser Wert erreicht werden beide Timer gestoppt und der Wert nimmt den selben Programmablauf als wenn ein Echo empfangen wurde.
Da das Echo Hin und Rückweg zurücklegt, kann hier schon eine Teilung durch 2 (30000µs/2 = 15000µs) erfolgen um die Zeit in µs des einfachen Weges zu ermitteln.
Danach erfolgt die erste Ausgabe, als Zeitwert, an den PC des einfachen Weges.
Im nächsten Schritt kann mit der einfachen Gleichung, der Weg(s) = Geschwindigkeit(v) * Zeit(t) berechnet werden. Hab hier einen festen Wert genommen von 343m/s was ca. einer Temperatur um die 19°C entspricht.
Hinweis: es wird ganzzahlig gerechnet indem Fall in dm/s und maximaler Zeitwert:
Beispiel: 3430dm/s * 15001µs = 51453430µm = 5145,3430mm = 5,1453430m
Nun wird der eigentliche Wert in mm als Ausgabe an den PC gesendet.
Die Schallgeschwindigkeit kann zusätzlich mit einem Temperatursensor ergänzt und mit der obigen Gleichung 1 berechnet werden was dann den Festwert, T1_max , ersetzen könnte und so eine Kompensation ermöglicht.
Kompensation noch nicht enthalten.
Foglende Routinen
.include "h:\etronik\Software3\sonstiges\origin\mathe.a sm"
.include "h:\etronik\Software3\sonstiges\origin\hex_dez_wan dlung.asm"
sind hier bereitgestellt
https://www.roboternetz.de/community...328-Bibliothek
https://www.roboternetz.de/community...a16-Bibliothek
https://www.roboternetz.de/community...313-Bibliothek
Lesezeichen