PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zur Sharp IR Sensor auswertung



ingo pirker
16.08.2008, 15:06
Hallo!!!
Ich will mit nen AVR und einen Sharp IR-Sensor (GP2D12 und GP2D120) den Abstand zu einen Objekt bestimmen.

Nun habe ich hier:
https://www.roboternetz.de/wissen/index.php/Sensorarten#Sharp_GP2D12
die Formel zur Umrechnung (Ausgabewert - Distanz) gefunden.

Beim nachrechnen is mir aufgefalln, das wenn man das Messergebnis genau haben will, muss man es in 2 Strecken unterteilen.
Also beim GP2D12 währe das dann:

Von 10 - 50cm
Distanz = 22 / (Messergebnis - 0,213)

und von 50 - 80cm
Distanz = 31 / (Messergebnis - 0,015)

Und beim GP2D120:
Von 4 - 22cm
Distanz = 10,5 / (Messergebnis - 0,175)

und von 22 - 40cm
Distanz = 13 / (Messergebnis - 0,01)

Kann das so stimmen???
MFG Ingn Pirker

oberallgeier
16.08.2008, 17:13
Hallo ingo pirker,

vielleicht hilft Dir dieses Posting von mir (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=384168#384168) zum GP2D120 weiter. Mit dem ~120 messe/rechne ich Entfernungen mit guter Stabiltiät. Deine Formeln helfen nur, wenn man weiß, ob Du den Messwert mit 8 oder mit 10 Bit abholst.

Denke bitte auch an die Entstörung des Sharp (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=347600#347600). Die ist einfach, aber doch wohl erforderlich.

ingo pirker
16.08.2008, 18:38
Hy!!

Danke für die Antwort!!

Am ich hole den Messert mit 10Bit ab!!
Aber im großen und ganzen kann ich das mit der Formel schon machen (ich muss halt alle werte den 10Bit Muster angleichen).

Das der Sharp solche Probleme mit der Stromversorgung hat, war mir bis jetzt noch nicht bekannt, aber gut das da schon eine Lösung (von euch - Danke!!!) des Problems vorhanden ist :-)!!!

MFG

oberallgeier
16.08.2008, 19:02
Hallo ingo pirker,


... ich hole den Messert mit 10Bit ab!! ...
Ich finde die (meine) Lösung mit der selbst gemessenen Wertetabelle deswegen genau, weil ich dabei schaltungsinterne Messfehler oder Bauteiltoleranzen ausgleichen könnte. Wenn welche auftreten. Die Regressionskurve mit der seltsamen Formel y = 38512 mal x hoch(-1,0791) heisst ja nix anderes als y (der Abstand in mm) ist gleich 38512 dividiert durch Messwerthoch1,0791 - ich hatte das durch 27000/x angenähert (siehe Kurve). Mittlerweile - in der Schaltung, zusammen mit allen Anwendungen, bekomme ich das bessere Ergebnis mit der Formel



gpdtmp = adc3_dat; // Übernimm Daten
GPDmm = 25600 / gpdtmp;
if (GPDmm > 999)
GPDmm = 999;
if (GPDmm < 0 )
GPDmm = 0;
return GPDmm;
wobei noch zu ergänzen wäre, dass ich vom Messwert über 12 Messungen einen Mittelwert bilde:


ISR(ADC_vect) // _VECTOR(21)
{
adc3_sum = adc3_sum + ADC; // ADC-Werte aufsummieren
adc3_cnt++;

if (adc3_cnt >= 12) // Wenn Counter >= x, dann Messwert ausrechnen
// Wenn adc3_counter < x, dann keine Aktion
{ //
adc3_dat = adc3_sum / 12; // Gemittelten ADC-Wert ausrechnen
adc3_sum = 0; // adc3_sum und Counter rücksetzen
adc3_cnt = 0;
}
}
Code ist C, es sind die Variablendeklarationen hier nicht enthalten (hab ich in einer include-Datei). Aufpassen, wenn Du den ADC selbst ausliest: Es muss die Reihenfolge des Auslesens (Low - und High-Byte) strikt eingehalten werden - steht im ATMEL-doc zu Deinem µC. Schreibt man das so wie ich oben in der ISR - einfach "ist gleich ADC", dann regelt das der Compiler sauber "von selbst". Wie das in Bascom geht, weiss ich nicht.

Viel Erfolg.

ingo pirker
16.08.2008, 19:20
Ja gut beb ich zu - is genauer, aber ich will ja nur auf +/- 2cm oder so genau messen können, weil bis man mit dem Messvorgang fertig ist is der Roboter sowiso schon wider mehr als 2cm gefahren.

Aber wenn ich genauere messungen machen will werd ich wohl deine Methode verwenden (muss halt deinen C text auf Basic umpoolen).

Danke jedenfalls!!!!

MFG

oberallgeier
16.08.2008, 19:35
... bis ... Messvorgang fertig ist ... mehr als 2cm gefahren ...
Ohhh - alle Achtung! Mein Roboter fährt eher langsam. Na ja, Du hast ja recht. Wenn ich nachrechne: der GP2D120 macht 25 Messungen pro Sekunde, die Wandlungszeit vom ADC kann man dabei (fast) vernachlässigen - dann fährt Dein Roboter mehr als einen halben Meter pro Sekunde. Ok.

ingo pirker
16.08.2008, 20:32
Ja mit 4km/h genau (1,111m/sec)!!!
Oder besser er soll mal so schnell fahren!!

MFG