PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF02 Fehlerhafte Messwerte unterhalb 15cm



exaware
28.01.2011, 17:23
Hallo zusammen,

erstmal wünsche ich allen schonmal ein erholsames Wochenende. Nun zu meinem Problem. Ich benutze auf meinem Bot den US SRF02 und kommuniziere mit diesem per I2C. Die Messwerte sind soweit in Ordnung, aber sobald der Abstand zwischen Sensor und Objekt unter 15 cm liegt, bekomme ich total falsche Werte, zwischen 0 und 255 kann jeder Wert auftreten. Dann habe ich mir die Messwerte in µS schicken lassen, gleiches Problem. Ich denke das ist ein Problem vom Sensor. Ich weiß das der Sensor nicht weniger als 15cm messen kann, aber normalerweise sollte in solchen Fällen eine 0 verschickt werden, damit man auch erkennnen kann dass die Entfernung kleiner 15 cm beträgt.
Ist das bei euch auch so und gibt es eine Möglichkeit dieses Problem zu lösen?

Hier mal meine Funktion (ich benötige nur das lowbyte)


uint8_t get_distance(void)
{
uint8_t highbyte,lowbyte;
i2c_start_wait(SRF02_ADRESSE+I2C_WRITE);
i2c_write(0);
i2c_write(81);
i2c_stop();
uint8_t temp=255;
while(temp==255)
{
i2c_start_wait(SRF02_ADRESSE+I2C_WRITE);
i2c_write(0);
i2c_stop();

i2c_rep_start(SRF02_ADRESSE+I2C_READ);
temp = i2c_readNak();
i2c_stop();
}
i2c_start_wait(SRF02_ADRESSE+I2C_WRITE);
i2c_write(2);
i2c_stop();

i2c_rep_start(SRF02_ADRESSE+I2C_READ);
highbyte = i2c_readAck();
lowbyte = i2c_readNak();
i2c_stop();
return lowbyte;
}


Habe bereits gegoogelt aber konnte nichts hilfsreiches finden.
Bin gespannt auf eure Vorschläge. Danke.

uffi
29.01.2011, 18:24
Das wird wohl an den Mehrfachreflexionen liegen:

Der Puls durchläuft die Strecke zwischen Sensor und Objekt mehrmals hin und zurück. Dadurch erhälst Du typischerweise ein Vielfaches des tatsächlichen Abstandes.

Sind die Werte wirklich so zufällig? Oder sind sie ein Mehrfaches?

exaware
29.01.2011, 23:01
das könnte gut sein, das es Reflexionen sind. Ich habe auch gemerkt, das dieses Verhalten auch dadurch beeinflußt wird, wie lange man beim Messen wartet. Also im Datenblatt wird ja ca. 65ms Wartezeit wärend der Messung empfohlen. Im Datenblatt steht aber noch, dass man auch statt 65ms auch solange die Firmwareversion abfrägt, bis nicht mehr 255 geantwortet wird, dies bedeutet ja das das Modul fertig ist mit der Messung. Und so habe ich das auch bei mir gemacht, aber die kleinste Entfernung die ich angezeigt bekomme ist ca. 24cm. Woran liagt das?

Richard
30.01.2011, 09:08
Wernn Du einmal die Anleitung zum Sensor zur Hand nimmst, kannst Du lesen das der Sensor nur "ab" 15 cm bis ca. 6m arbeitet. der kann halt nicht unter 15 cm ordentlich arbeiten.

Gruß Richard

exaware
30.01.2011, 14:35
@Richard
Ich weiß das der Sensor erst ab 15cm arbeitet. Es kann immer mal vorkommen, das man beim Fahren die 15 cm nicht immer einhalten kann. Und wenn dann mal ein Hindernis weniger 15cm entfernt ist mir aber der Sensor 100cm schickt, dann kann ich diesen Zustand nich einfach hinnehmen. Ich dachte, das man diese Messfehler vielleicht irgendwie hintergehen kann, das man zumindest nicht zu große Werte bekommt, obwohl die Distanz weniger 15cm beträgt.

Ich spiele mit dem Gedanken ein Kunstoffrohr (ca. 20cm) vor den Sensor zu montieren und den Sensor ebenweiter hinten auf meinem Bot platziere. So könnte ich rein theoretisch bis vor den Bot messen. Nachteil wäre ich vermutlich das ich nicht die volle Breite des Bots abdecken könnte.

Gruß
Cetin

TobiKa
30.01.2011, 14:55
Dann vielleicht noch nen GP2D120 oder einen anderen optischen für den Nahbereich.

exaware
30.01.2011, 16:42
habe leider keinen adc mehr frei. gibt es die ir-entfernungssensoren auch mit i2c?

steveLB
30.01.2011, 17:04
nimm dir einen kleinen Atmel mit ADC und I²C und schon hast du wieder 8 pins ;) und musst keine speziellen I²C Sensoren suchen

Richard
30.01.2011, 19:09
@Richard
Ich weiß das der Sensor erst ab 15cm arbeitet.

Das wäre genauso als wenn Du mit nen Trabbi versuchst 380 km/h zu erreichen. :-)Nehme wie auch schon erwähnt wurde, einen Optischen Sensor zusätzlich die eignen sich für kurze Entfernungen.

Gruß Richard

exaware
30.01.2011, 22:44
Ein optischer Sensor kommt nicht mehr in Frage, da die Hardware bereits steht und ich aus zeitlichen Gründen nicht mehr viele Änderungen bzw. Neuerungen durchführen kann.
Aber eine Lösung wären vielleicht der srf08 oder der srf10. Was haltet ihr von diesem Sensoren und was für Erfahrungen habt ihr mit diesen Sensoren?

TobiKa
30.01.2011, 22:52
Ich kann den SRF05 empfehlen, 3cm - 4m!
Und über einen einzelnen Pin ansteuerbar.

exaware
30.01.2011, 23:00
Wahlweise über I2C oder über einen einzelnen Pin ansteuerbar!

Der srf05 hat leider kein I2C, sonst wäre dieser vermutlich die bessere Wahl.
Ich benötige unbedingt einen mit I2C.

TobiKa
30.01.2011, 23:11
Oh mist, hab mich versehen.

Richard
31.01.2011, 15:13
Ist das denn so absolut wichtig unterhalb 15 cm zu messen?Beim Autofahren reagierst Du ja auch auf "kommende" Hindernisse und nicht auf welche die quasi schon unter der Stoßstange sind.

15 cm sind auch für einen Bot ein recht kurzer "Bremsweg" zum Ausweichen wahrscheinlich schon zu wenig.

Eine "vorausschauende" Fahrweise = intelligente Sensorauswertung dürfte mehr Vorteile bringen.

Gruß Richard