Hallo,
ich befasse mich auch gerade mit der Auswertung der Sharp GP2D12. Ich habe ebenfalls ein paar Kurven aufgenommen, und versucht eine Ausgleichfunktion zu bestimmen, um die Werte in einem Atmega32 möglichst annähernd zu berechnen. Natürlich funktioniert das nicht, da erst ein Polynom 6.(!) Grades den Bereich 10 - 100 cm einigermaßen genau abbildet.
Bild hier
Bild hier
Um zu vermeiden, dass ich eine ganze Wertetabelle hinterlegen muss, habe ich ein bißchen im Netz gestöbert, und bin bei BalBots auf eine Funktion gestoßen, die einigermaßen (+/- 1cm) genau den Analogwert des Sensors in die Entfernung umrechnet. Das Problem ist, dass ich eine Operation nicht ganz verstehe.
Code:
uint16_t read_GP2D12(void) {
unsigned int tmp_sample;
if(tmp_sample < 4)
tmp_sample = 4;
tmp_sample = adc; // acd ist der AD-Wandlerwert
printf("\n Wert:\t %d",tmp_sample);
tmp_sample -= 3; // Warum?
printf("\n Wert -=3:\t %d",tmp_sample);
tmp_sample = 6787/tmp_sample; // Warum 6787?
printf("\n Wert 6787/Wert:\t %d",tmp_sample);
tmp_sample -= 4; // Häh?
printf("\n Wert -=4:\t %d",tmp_sample);
if(tmp_sample > 90)
tmp_sample = 90; // Abstandsbegrenzung
return(tmp_sample);
}
Kann mir jemand erklären, warum hier vom Digitalwert erst 3 abgezogen, dann die krumme 6787 durch diesen Wert geteilt und dann wieder 4 substrahiert wird?
Eigentlich ist die Funktion ganz i.O. - für mich und auf erstem Blick.
Was meinen die Experten?
Gruß!
Lesezeichen