Hallo,
ich benutze den HC-SR04 (im Prinzip würde hier jeder mögliche US-sensor
gehen) als Ultraschallsensor und würde gerne eine auf ca. 0,3 cm genaue
Ausgabe erreichen (die laut Datenblatt auch erreichbar ist).
Ich habe 2 verschiedene Ansätze, die Distanz auszurechnen:
a) über die NewPing Bibliothek, die ohne pulseIn(), delay(), etc.
auskommt
b) über einen einfachen Code:
1 | float getEntfernung(){
|
2 |
|
3 | //float entfernung = 0.0;
|
4 | int dauer = 0;
|
5 |
|
6 | digitalWrite(trigger, LOW);
|
7 | delayMicroseconds(3);
|
8 | noInterrupts();
|
9 | digitalWrite(trigger, HIGH); //Trigger Impuls 10 us
|
10 | delayMicroseconds(10);
|
11 | digitalWrite(trigger, LOW);
|
12 | dauer = pulseIn(echo, HIGH); // Echo-Zeit messen
|
13 | interrupts();
|
14 |
|
15 | entfernung = (dauer/2) / 29.1; //Entfernung in Zentimeter (für Milimeter / 2.91 rechnen)
|
16 | if (entfernung >= 500 || entfernung <= 0) {
|
17 | Serial.println("Kein Messwert, da außerhalb des Messbaren Bereiches (0 - 500cm)");
|
18 | }
|
19 | else {
|
20 | return(entfernung);
|
21 | }
|
22 | }
|
Jetzt habe ich beide Varianten benutzt und folgende Testergebnisse
erhalten (beide natürlich bei exakt gleichem Aufbau und Abstand zur
Wand)
1. Test:
a) 7,77 cm
b) 7,59 cm
2. Test:
a) 9,66 cm
b) 9,45 cm
3. Test:
a) 107,26 cm
b) 104,6 cm
Leider fällt auf, dass sich die Werte zwischen 0,2 cm (was absolut okay
ist) und bei 1 Meter bereits 2-3 cm unterscheiden.
Wäre der Unterschied bei allen Entfernungen gleich, wäre es ja kein
Problem, aber da eine Methode von beiden (oder im Zweifel beide)
offensichtlich nicht linear gleichmäßig ein passendes Ergebnis bestimmen
wird eine Messung in gerade 1-3 Metern unzuverlässig.
Habt ihr Erfahrungen darin bzw. könnt ihr evtl. einschätzen, welche
Methode vorraussichtlich zuverlässiger ist?
Vielen Dank, Lukas