PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF02 geben nur Distanzen bis ca. 2,5m Abstand zurueck



ThiloM
12.04.2012, 11:37
Hi Leute,
in einem Uni-Projekt verwende ich die SRF02 Ultraschallsensoren zur Distanzbestimmung!
Bei Distanzen von 20 bis ca. 200cm funktionieren sie auch echt gut!
Beträgt die tätsächliche Distanz mehr als ca. 200cm, springen die Werte zwischen ca. 200cm und 250cm hin und her....
Auf über 300cm oder bis zu den 600cm komme ich überhaupt nicht!
Habt ihr eventuell ne Idee wodran es liegen könnte?

Gruß Thilo

Michael
12.04.2012, 12:54
Hallo ThiloM,


Habt ihr eventuell ne Idee wodran es liegen könnte?
bei größeren Distanzen wird der Empfänger empfindlicher gestellt. Hier können dann schon Reflexionen neben oder hinter dem Sensor für Werte sorgen.

Gruß, Michael

ThiloM
12.04.2012, 13:05
Hi Michael,
danke für deine Antwort! Also in der Halle hier habe ich keinen einzigen Gegenstand zwischen dem Sensor und der Testwand! Auch wenn ich den Sensor zur 5 Meter hohen Decke drehe, bekomme ich keine Werte über 250cm....

Gruß Thilo

Michael
12.04.2012, 13:32
Hallo ThiloM,

ich kann mir vorstellen, daß du deine Messung statt in cm in Zoll gestartet hast.
Das kann man aber nur an deinem Programm sehen, wenn du es postest.
Ein Programmbeispiel findet man auch im Datenblatt: www.robotikhardware.de/download/srf02doku.pdf (http://www.robotikhardware.de/download/)

Gruß, Michael

ThiloM
12.04.2012, 13:33
Naja kann nicht sein da ja die Distanzen bis 200cm wunderbar passen....

ThiloM
12.04.2012, 15:38
Also ich lese den Sensor wie folgt aus:

unsigned short srf02_read(char adress) {
unsigned short s;
twi_package_t packet_received;
char data_received[RECEIVE_DATA_LENGTH] = { 0 };
data_received[0] = DATEFORMAT;
packet_received.chip = adress >> 1;
packet_received.addr = 0x02;
packet_received.addr_length = 1;
packet_received.buffer = data_received;
packet_received.length = 2;
twi_read_twice((30 + (int) adress), &packet_received);

s = (unsigned short)(data_received[0] << 8);
s += (unsigned short) (data_received[1]);
if (adress == 0xE0){
sendDebugValues(s,(data_received[0]),data_received[1],0,0,0);
}
return s;


Die Ausgabe für die Entfernungen sind dann z.B.:
204.000, 0.000, 204.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 272.000, 1.000, 16.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 202.000, 0.000, 202.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 202.000, 0.000, 202.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 204.000, 0.000, 204.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 204.000, 0.000, 204.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 202.000, 0.000, 202.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 205.000, 0.000, 205.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 205.000, 0.000, 205.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 204.000, 0.000, 204.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 272.000, 1.000, 16.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 274.000, 1.000, 18.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 206.000, 0.000, 206.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 205.000, 0.000, 205.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 272.000, 1.000, 16.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 208.000, 0.000, 208.000, 0.000, 0.000, 0.000, #<\r><\n>
$, 206.000, 0.000, 206.000, 0.000, 0.000, 0.000, #<\r><\n>


Hilft das was?

Gruß Thilo
}