PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie rechnet ihr Entfernung von Sharp IR-Sensoren um



Nobody
02.12.2003, 09:33
Ich hab mehrere Sharp IR-Sensoren, u.a. die für 80 cm Entfernung.
Die liefern ja leider nur ein analoges Signal das nicht linear verläuft. Wie rechnet ihr mit dem Microcontroller die Entfernung aus?
Hat jemand ein paar Zeilen Quellcode für mich?

nb

Judgeman
02.12.2003, 10:37
Ich verwende die auch und werde mich bis Ende dieser, Anfang nächster Woche damit befassen, wenn du noch so lange Zeit hast, kann ich dir eine Lösung als Code schicken.

Bei den Sensoren ist ja eine Tabelle dabei (Datenblatt). Ich werde wahrscheinlich die Kennlinie zwischen den Werten als linear annehmen und dann mittels Fallunterscheidung die Entfernung interpolieren.

02.12.2003, 11:58
Was schreibst Du für Code? C-Control Code oder halt Algorithmus würde mich auch interessieren. Kannst Du deinen Weg dann im Forum posten. Wird sicher vielen helfen.
Wo ist denn die Tabelle, ich meine ich hätte nur Kurve gesehn?

Nobody
02.12.2003, 13:04
Ja, wäre toll wenn Du da was posten könntest. Brauche es auch erst in den nächsten Wochen

Judgeman
02.12.2003, 13:24
Die Tabelle ist im Datenblatt (z.B.: GP2D12) auf der 2ten Seite unter "Calibration". Man muss halt noch von der "Average Voltage" mittels der Auflösung der A/D Wandlung auf den Wert umrechnen, der dann im Controller zur Verfügung steht.

Ich schreibe einen C Code, kein Basic.

Judgeman
02.12.2003, 13:26
Ach ja, will man es genauer, sollte man selber Messungen machen und diese verwenden.

Matrix
02.12.2003, 17:36
Beim Sensor GP2D120 hat schon jemand gemessen:
http://www.electronicsplanet.ch/MessBer/SHA120CC/SHA120CC.htm

Aber der hat ja nur ca. 30 cm Reichweite

DerInder
03.12.2003, 08:09
Hi,
bei meinem GP2D02 (der mit Digitalausgang) benutze ich die folgende Methode:

Formel zur Entfernungsberechnung:

D = A/(X-B)

D ist die Entfernung
X ist der Ausgabewert des Sensors
A ist die Steigung der Kurve A/X
B ist der Offset der Kurve


Zum Ermitteln der Konstanten A und B:

D und X sind die Entfernung und der Ausgabewert der ersten Messung (z.B. bei 20 cm)
D' und X' sind die Entfernung und der Ausgabewert der zweiten Messung (z.B. bei 60 cm)

A = (X'-X) D'D/(D-D')
B = (D'X' - DX)/(D' - D)


Gruß
-=jens=-

Judgeman
03.12.2003, 08:32
Diese Methode funktioniert aber nur, wenn der Kennlinienverlauf eine Gerade ist. Oder irre ich mich da?

DerInder
03.12.2003, 08:45
@Judgeman: jep, du irrst.
Durch die obige Formel wird die Entfernungskurve ziemlich exakt Abgebildet.
Die Genauigkeit liegt im Bereich ~20-60 cm unter 1 cm.

Gruß
-=jens=-

Jürgen
03.12.2003, 08:48
Hat jemand X und B für die verschiedenen Sensoren schon ermittelt, dies würde die Formel gleich noch etwas vereinfachen ;-) Sind ja eh meist nur 3 oder 4 Typen die immer wieder eingesetzt werden

DerInder
03.12.2003, 08:55
Ich würde die Konstanten A und B für jeden Sensor einzeln bestimmen.
Bei meinen 4 GP2D02 ist die Streuung so groß, das ich bei den "falschen" Werten schnell auf Abweichungen von bis zu 4 cm gekommen bin.

Gruß
-=jens=-

03.12.2003, 09:10
Danke für die Formel! Erleichtert einiges, wenn sie funktioniert.

Jürgen
03.12.2003, 09:18
Das es so große Abweichungen gibt hätte ich garnicht gedacht. So genau hab ich die Entfernung bislang noch nie berechnet. Ich werde auch mal deine Formel austesten, danke für Tip!

Judgeman
08.12.2003, 08:37
Habe die Formel überprüft, sie ist erstaunlich genau! :lol:
Das macht das Leben viel einfacher.

@ DerInder: Vielen Dank!

Frank
08.12.2003, 08:52
Kannst Du die Konstanten A und B und deinen Sensortyp mal posten. Wäre doch interessant mal die Ergebnisse der einzelnen zu erfahren um die übliche Toleranz zu ermitteln.

Gruß
Frank

Judgeman
08.12.2003, 09:25
Sensor: GP2D12

Ich habe nur die im Datenblatt angegebenen Durchschnittswerte verwendet:

A = 24,93 Vcm
B = 0,0695 V

Berechnete Distanz:
D10 = 10,6 cm
D30 = 29,6 cm
D70 = 71,1 cm

Ich kann mir vorstellen, dass die Toleranz noch erheblich gesenkt werden kann, wenn man jeweils den Sensor extra vermessen würde, um A und B zu berechnen.

08.12.2003, 10:05
Hi,
ich hab mal nach den Werten von meinen GP2D02 gekramt.
Errechnet hab ich die Werte aus Messungen bei 20 und 60 cm.

A B
Sensor 1: 1480 67
Sensor 2: 1400 50
Sensor 3: 1440 56

Die Konstanten sind für eine 16Bit Integer Berechnung des Abstandes in cm.

DerInder
08.12.2003, 10:09
UPS,
da ist mein Login doch irgendwie eben rausgeflogen :-(

Frank
08.12.2003, 13:17
Also da will ich mich mit ein paar Werten anschließen.
Wenn ich mich nicht verrechnet habe, dann müßte sich theoretisch beim neueren Sharp GP2Y0A21Yk (bis 80cm analog) folgende Werte ergeben:

A=24 Vcm
B=0,1

Leider habe ich keine Tabelle sondern nur ein kleineres Diagramm im Datenblatt. Von daher ist eine gewisse Ungenauigkeit noch vorhanden. Vielleicht findet noch jemand eine Tabelle.

Gottfreak
06.04.2004, 10:51
Jch hab' mal nachgemessen und verschiedene Entfernungen gemessen um die Annäherung zu ermitteln.
Mit den Werten von 20 und 60cm kommt's noch am ehesten hin. Hat jemand 'ne Ahnung, wo man die beste Näherung über einen möglichst großen Entfernungsbereich kriegt?

Wie man sieht, ergeben sich je nachdem, mit welchen werten ich rechne sehr unterschiedliche Näherungen
Werte Steigung (A/X) Offset
20 60 26,1 0,0815
10 70 21,46 0,013
30 50 33,7 -0,175
s(x)=A/x-b

-chris-
06.10.2004, 04:33
hab mir das hier mal durchgelesen, da ich selbst heute meine sensoren anschließen werde :) und ich würde mal sagen man sollte noch genauere ergebnisse bekommen, wenn man eine ganze entfernungstabelle aufstellt und dann die formel mit der methode der kleinsten quadrate (least squares fit) o.ä. optimiert. diverse matheprogramme können das, gnuplot auch. ich werd mal für gnuplot ein entsprechendes script schreiben und es dann online stellen. habt ihr eigentlich noch irgendwelche tips was man an den sensor noch dranschalten sollte um störsignale zu vermindern (kondensatoren etc...)?

06.10.2004, 09:10
Hallo,

wenn ihr möglichst genaue Werte haben wollt, dann könnt ihr eine Meßreihe machen, die Werte in Excel eintragen. Wenn ihr dann die Entfernung gegen die Spannung in einem Diagramm darstellt, kann Excel die entsprechende Ausgleichsfunktion berechnen. Als Formel kammt etwas in der Art Entfernung=A*Spannung^B raus.

Grüße

Markus

Gottfreak
06.10.2004, 13:34
Zu den Störsignalen: Meine C-Control an der gleichen Stromversorgung ist(trotz eigener Abblockkondensatoren) mit dem Ding dauernd abgeschmiert. Ich hab' 'nen 470µ-Elko in die Versorgungsleitung(direkt am Sensor) gemacht und dann ging's.
Welche Art von Belastung da 'rauskommt, weis ich aber nicht. Da der Sensor mit moduliertem Licht arbeitet, ist die Frequenz wahrscheinlich im kHZ-Bereich. Vielleicht reicht auch ein kleiner Folienkondensator mit 100N oder so(oder ist der sogar besser). Den Elko hab' ich nur zum Probieren genommen, weil der gerade da(und über) war.

Manf
06.10.2004, 16:41
wenn ihr möglichst genaue Werte haben wollt, dann könnt ihr eine Meßreihe machen, die Werte in Excel eintragen. Wenn ihr dann die Entfernung gegen die Spannung in einem Diagramm darstellt, kann Excel die entsprechende Ausgleichsfunktion berechnen. Als Formel kammt etwas in der Art Entfernung=A*Spannung^B raus.

Ja, machen kann man viel, genauer kann es dadurch gegenüber einer Tabelle nicht werden, aber es kann ein Weg zur Vereinfachung der Berechnung sein.
Ist es den erfolgreich, hast Du es ausprobiert?
Welche Werte für A und B hast Du denn bestimmt?
Für welchen Entfernungsbereich ist das Verfahren denn sinnvoll?
Manfred

Fritzli
06.10.2004, 17:17
Hallo


Welche Art von Belastung da 'rauskommt, weis ich aber nicht. Da der Sensor mit moduliertem Licht arbeitet, ist die Frequenz wahrscheinlich im kHZ-Bereich. Vielleicht reicht auch ein kleiner Folienkondensator mit 100N oder so(oder ist der sogar besser). Den Elko hab' ich nur zum Probieren genommen, weil der gerade da(und über) war

Hab nachgemessen, die Modulationsfrequenz beträgt ca 1kHz. Der Strom-Spitzenwert liegt bei ca 220mA. Um das zu glätten reicht so ein 100nF Kondensator ganz sicher nicht, aber ev. um allfällige HF-Störungen wegzubringen

Gruess
Felix

MarkusH
06.10.2004, 17:52
Hallo, ich hab auch mal ne frage. Ihr redet hier immer nur davon wie man die spannung die man am pin des entfernungsmessers in die tatsächliche entfernung umrechnet. Ich hab schon probleme von der Zahl die mir der Atmega ausspuckt auf die Voltzahl zu kommen. Ich dachte immer das wäre die Versorgungsspannung des Atmegas (5,1V) durch 1024 und mit der zahl die da rauskommt dann den Wert des ADC-Ports malnehmen. Wenn ich aber nichts vor den GP2D12 halte, kommt ne spannung von 0,6V raus und der Atmega sagt 1023?! Da müsste doch irgendwas knapp über 0 rauskommen oder nicht? Außerdem bewegt sich dieser 1024-Wert erst nach unten wenn aus dem GP2D12 schon längst 1,3V rauskommen, also ab 20cm. Wo fängt denn der messbereich eines Atmega8 an? Erst bei 1,3V? Mach ich da irgendwas falsch?

07.10.2004, 08:55
Hallo,



Ja, machen kann man viel, genauer kann es dadurch gegenüber einer Tabelle nicht werden, aber es kann ein Weg zur Vereinfachung der Berechnung sein.
Ist es den erfolgreich, hast Du es ausprobiert?
Welche Werte für A und B hast Du denn bestimmt?
Für welchen Entfernungsbereich ist das Verfahren denn sinnvoll?


Nein, genauer als eine Tabelle ist es wohl nicht, aber viel genauer, als eine lineare Funktion zu benutzen. Wie es mit der Berechnungszeit auf einem µC aussieht kann ich nicht sagen, da ich die Auswertung bisher noch auf einem PC mache. Vermutlich muß man bei einem µC die Werte etwas runden, so daß die Genauigkeit wieder etwas abnimmt.
Meine Werte für A und B und Angaben zur Genauigkeit kann ich heute Abend oder Morgen mal posten. Leider habe ich nur einen Sensor, ich kann also nicht sagen ob man für verschiedene Sensoren die gleiche Formel benutzen kann.

Markus

Gottfreak
07.10.2004, 08:55
Irgendwas musst du in der Tat falschmachen. Das sollte eigentlich genauso funktionieren, wie du erwartest hattest. Wenn du nur die zum Auslesen nötigen Register am ADC gesetzt hast und dein ADC nicht kaput ist(den kriegt man eigentlich nur mit hohen Spannungen kaput.), muss eigentlich in deiner Schaltung was nicht in Ordnung sein.
Ist das Ergebnis zuverlässig reproduzierbar?

Manf
07.10.2004, 10:49
Ich habe schon gemerkt, dass zwei Themen parallel laufen eines mit Markus und eines mit MarkusH.

@MarkusH:
Es wäre sicher gut, die Systeme IR-Sensor und ADC getrennt zu testen, oder auch nur erst mal eines. Für den Sharp Sensor braucht man nur ein Voltmeter und für den ADC ein Poti und besser auch noch ein Voltmeter. Dann lassen sich die Probleme gut trennen.

@Markus
Ich bin an den Werten interessiert. In den Datenblättern habe ich auch schon einmal eine abschnittsweise analytische Beschreibung der Kurve gesehen. Ich möchte das Theme noch einmal durchgehen, weil der Wandler doch häufig eingesetzt, aber offensichtlich auf unterschiedliche Art ausgewertet wird.
Manfred

Mr. Burns
07.10.2004, 16:32
Hallo Leute,

(jetzt habe ich mich erst mal angemeldet, um Namensproblemen vorzubeugen)

Ich habe mal die Excel-Datei angehängt. In der Tabelle sind die Entfernungen, die entsprechenden Spannungen und die Werte, die mir der A/D-Wandler geliefert hat, eingetragen. Die Ausgleichsfunktion und die entsprechende Formel werden in den Diagrammen angezeigt.
In Diagramm1 habe ich die Entfernung gegen den Wert des A/D-Wandlers aufgetragen, in Diagramm2 gegen die Spannung.
Zum Vergleich ist wahrscheinlich die Spannung interessanter, da ja nicht jeder den gleichen A/D-Wandler benutzt.

Grüße

Markus

Manf
07.10.2004, 17:09
Ja, ok, dann weiß ich wie es gemeint war, vielen Dank für die Tabelle, die Kurve ist ja sehr schön dicht in den Werten und sehr glatt mit geringer Abweichung zur Trendkurve.
Sind die Werte automatisch aufgenommen?
Mit Fahrzeug?, (Schrittmotor?) und gleichmäßiger (weißer?) Wand?
Manfred

Mr. Burns
08.10.2004, 10:46
Hallo,

die Werte hatte ich von Hand aufgenommen, mit Maßband und einem Stück weißer Pappe. Die Meßgenauigkeit dürfte etwa bei +/- 1 mm gelegen haben. Die Spannung hatte ich mit einem Multimeter gemessen, den A/D-Wert habe ich mir auf einem LCD ausgeben lassen.

Markus

MarkusH
11.10.2004, 20:21
ja, mein problem lässt sich immer reproduzieren. Ich hab das STK500 Board von Atmel. Damit kann man bestimmte Refrenzspannungen, die man vorher mit dem AVRstudio einstellen kann, produzieren. Auch wenn ich diese Referenzspannung anliegen hab ist das ergebniss genau umgekehrt. Also je niedriger die Spannung desto höher der ADC-Wert. und ab 1,8V ist 1023 schon erreicht. Ich hab inzwischen auch 2 Atmega8's ausprobiert, bei beiden der gleiche effekt. Welche register muss man denn da setzen?

Gruß, Markus

MarkusH
02.05.2005, 20:20
Hi an alle!
Ich habs inzwischen hinbekommen mit den sensoren aber hat vielleicht noch jemand ne idee wie man den GP2D12 daran hindern kann so stark zu schwanken. +/- 0,1V ist irgendwie immer drin, oder ist das normal? Den ausgangs-pin des sensors kann man ja direkt mit dem eingang des AVRs verbinden oder nicht. Habe schon einen Elko in die Versorgung der Sensoren eingebaut und einen von AREF nach GND, allerdings ohne erfolg. Achja ich verwende die interne referenz des mega8.
Gruß, Markus

Fritzli
02.05.2005, 20:35
Hallo

Wann hast Du denn diese Schwankungen? Immer oder nur wenn das Objekt weiter entfernt ist?

Falls das Problem vermehrt bei grösseren Entfernungen auftritt, hilft es ev. das Gehäuse des Sensors mit Masse zu verbinden (das Gehäuse besteht aus leitfähigem Plastik)

Ne andere Methode wäre, mehrere Messungen nacheinander zu machen und per Software den Mittelwert zu berechnen. So kriegt man das Rauschen (wenigstens teilweise) raus.

Gruess
Felix

MarkusH
02.05.2005, 21:16
Ja, im bereich von 10-30cm sind die schwankungen eigentlich akzeptabel, wenn gar nichts im erfassungsbereich ist, sind die schwankungen wesentlich höher.
Also ist das normal das die dinger nicht all zu genau sind ja?

pebisoft
02.05.2005, 21:25
wenn euer robby irgendwo langläuft, ändert sich die spannung und dadurch arbeiten die sensoren wieder anders. ihr sollt diese klo-spül-warneinrichtungen nicht so pingelig genau ansehen, dafür sind sie zu billig.
man kann nicht besseres erwarten, aber für unseren robby reicht das.
mfg pebisoft

Fritzli
02.05.2005, 21:30
Hallo


Ja, im bereich von 10-30cm sind die schwankungen eigentlich akzeptabel, wenn gar nichts im erfassungsbereich ist, sind die schwankungen wesentlich höher.

Das würde für den Versuch sprechen, das Gehäuse zu grounden. Andere Variante wäre, den Sensorwert ab einer bestimmten Entfernung als ungültig bzw. "kein Objekt" zu definieren.

Aber wie pebisoft sagte, irgendwann ist Schluss. Die Dinger sollen eigentlich Klospülungen/Händetrockner, etc steuern und keine Umgebung vermessen :-)
Ausserdem nimmt der Fehler prinzipbedingt mit der Entfernung zu.

Gruess
Felix

UlliC
02.05.2005, 21:41
Ungefiltert erzeugt der Sensor am Analogausgang Pulse von etwa 10µs Breite, 200mV Höhe und einer Frequenz von 1KHz. Es gibt zwei Maßnahmen, die zumindest bei meinen Sensoren geholfen haben:
1. Abblocken der Versorgungsspannung direkt am Sensor mit mindestens 100 µF
2. Tiefpaßfilter in die Analogausgangsleitung. Z. B. mit R*C = 3,3ms entsprechend fg = 48 Hz.
Da der Sensor ohnehin nur alle 50 ms einen aktuellen Meßwert generiert, schadet das Tiefpaßfilter nicht.

Manf
02.05.2005, 22:44
Ich habe schnell noch mal nachgemessen. Einen GP2D12 an 5V Labornetzteil über 50cm Krokodilklemmenkabel und 30cm Eigenkabel, ohne Kondensator.

Er ist ca. 25cm vor einem 30cm Kunststofflineal aufgebaut das an einem Ende in einen Schraubstock eingespannt ist. Gemessen wird der Abstand zum Lineal. Das Lineal ist am freien Ende einer 50g schweren Kunststoffklemme beschwert damit es beim Anregen mit einer Frequenz von ca. 3,5Hz schwingt. Es schwingt auch bei der ersten Messung leicht.

Im zweiten Bild schwingt das Lineal heftig. Die Einzelmessungen des Sensors haben eine Folgefrequenz von 25Hz.

Das Bild zeigt vielleicht, dass selbst für Sensoren im Sanitärbereich mit hohen Qualitätsansprüchen gearbeitet wird.
Manfred

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=495

Zum Thema Automatisierung in unterschiedlichen Bereichen: http://www.washlet.com/quicktime1.html

ComCat
03.05.2005, 15:57
Hallo,

ich bin auch ein absoluter Neuling in Dingen Roboter/Elektrotechnik/usw.
Nun habe ich mir die Kurve von Mr.Burns angeschaut und genauso hatte ich mir das auch vorgestellt. Dann habe ich zum Vergleich mir die Kurve des GP2Y0A02YK (Sharp) angeschaut und war überrascht. Die Kurve besitzt zu einem Y-Wert zwei X-Werte. In dem Falle zum Analogenausgang (Spannung), zwei Entfernungen. Kommt man denn da nicht durcheinander ? Oder bin ich nur zu bl... ? :-s

Bye,
ComCat

Fritzli
03.05.2005, 16:14
Hallo


Die Kurve besitzt zu einem Y-Wert zwei X-Werte. In dem Falle zum Analogenausgang (Spannung), zwei Entfernungen. Kommt man denn da nicht durcheinander ? Oder bin ich nur zu bl... ?

Das siehst Du schon richtig. Wenn Du die Skalierung der X-Achsen ansiehst, wirst Du feststellen, dass die Datenblätter bei x=0cm zu messen beginnen, Mr.Burns beginnt aber erst bei x=40cm. Es ist in der Tat so, dass man im Prinzip nicht sagen kann, ob das Objekt nun 10cm oder 40cm (o.ä.) entfernt ist. Das ganze ist bauartbedingt.
Deshalb montieren veiel ihre Sharp's auch nicht an den Rand ihres Roboters sondern ein wenig nach innen versetzt.

Gruess
Felix

merviux
20.06.2005, 14:14
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.

http://img167.echo.cx/img167/4341/irsensfl9xm.th.png (http://img167.echo.cx/my.php?image=irsensfl9xm.png)

http://img167.echo.cx/img167/3120/irpolyum65xk.th.png (http://img167.echo.cx/my.php?image=irpolyum65xk.png)


Um zu vermeiden, dass ich eine ganze Wertetabelle hinterlegen muss, habe ich ein bißchen im Netz gestöbert, und bin bei BalBots (http://www.balbots.com/articles.php?tPath=6) 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.

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ß!

merviux
20.06.2005, 15:16
Hallo,
ich habe es mit 6787 verstanden. Das ist wahrscheinlich die Umschreibung für
6787*AD_Wert^(-1,00xxx), wobei ja x^(-1) = 1/x entspricht. Jetzt suche ich nur noch nach dem Sinn, warum substrahiert wird.
Gruß!

Fritzli
20.06.2005, 16:24
Hallo

Um die Entfernung brauchbar umzurechnen benützt die grosse Mehrheit (das behaupt ich nun mal so) diesen Formeltyp. Das Prinzip beruht darauf, dass die Entfernung ab ca. 10cm proportional zu 1/Vout ist.
Man hat also die allg. Formel:

dist = a/(vout - offset) - c Das ergibt dann also die 1/x prop. Funkt.

a, offset und c sind sensor- und systemspezifische Grössen, die von Exemplar zu Exemplar verschieden sind.

Formel, Konstanten:
http://www.barello.net/Papers/GP2D02/index.htm

Gruess
Fritzli

22.06.2005, 15:28
Methode der kleinsten Quadrate (least squares fit)

Das läuft dann ja weder auf eine lineare lösung Herraus. Warum nicht einfach mit Werten auf dem Datenblatt oder Messungen ein Polynom anpassen?

fwallenwein
09.08.2005, 22:52
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?


Sieht so aus, als ob die Funktion von http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html abgeleitet ist.
Auf jeden Fall passt es genau.

Dort kommt R = (6787 / (V - 3)) - 4 fuer den GP2D12 heraus.
und R = (2914 / (V + 5)) - 1 für den GP2D120.

Gruss
Frank

aromersohn
09.08.2005, 23:17
hey weiss jemand welche spannung ein gp2d12 ausgibt, wenn nichts im sensorbereich ist bzw nur ne decke in 2 m höhe? meine tabelle geht nur bis 120 cm.....
vielen dank!

merviux
26.08.2005, 10:55
Hallo,

also ich hatte ja damals die im Web gefundene Umkehrfunktion zur Auswertung des Sensoren verwendet.
Ich habe die Parameter variiert und so Werte gefunden, mit denen ich den Kurvenverlauf des IR-Sensors recht gut approximieren konnte.

Mit der Funktion:
s[cm] = (6248 / AD-Wert) - 2.48

erhält man relativ genaue Wert im Bereich 10 - 85 cm. Ab 90 cm wird es ungenauer und alles darüber ist ja auch nicht mehr im Arbeitsbereich laut Datenblatt.
http://img382.imageshack.us/img382/3351/irsensumk5ep.png (http://imageshack.us)
Vielleicht etwas ungewohnt, dass der Abstand auf der Ordinate und die Ausgangsspannung auf der X-Achse aufgetragen sind.

Die Rote Kurve stellt die Ausgangsspannung des IR-Sensors bei Messung mit Reflektion auf eine weisse Fläche dar.
Die Grüne Kurve ist eine Approximation mit einem Polynom 6. Grades, das aber mit einem Atmega nicht (einfach) zu programmieren ist, aufgrund der sehr kleinen Koeffizienten.
Die blaue Kurve ist die angesprochene Umkehrfunktion.

Ich habe drei Sensoren ausprobiert und die anderen beiden hatten wirklich nur minimale Abweichungen.

@aromersohn
Da der Sensor nur für den Bereich ca. 10 - 80 cm ausgelegt ist, verzichte ich auf die Werte jenseits von 85. Für meine o.a. Formel ergeben sich bei größeren Entfernungen exorbitante Angaben. Alles über 80 cm. werte ich mit einem analogen Ultraschall aus (SRF04), der hier genauer misst als z.B. der IR oder der US-Sensor SRF08.

Gruß!

Dirk
28.08.2005, 09:58
Hallo Leute,

für meinen GP2Y0A02YK habe ich eine eigene Lookup-Tabelle erstellt.
Das ist sehr genau und nicht allzu aufwändig.
Ich brauche auch keine mathematischen Verfahren zum Auslesen der Tabelle, weil ich für jeden Digitalwert (0..1023) einen Tabelleneintrag (Entfernungin cm) habe, der eindeutig ist.

Gruß Dirk

Manf
28.08.2005, 11:06
für meinen GP2Y0A02YK habe ich eine eigene Lookup-Tabelle erstellt. Das ist sehr genau und nicht allzu aufwändig.
Ja, dann gib sie doch mal an, es wäre doch interessant wenn sie vergleichen könnte.
Manfred

Dirk
28.08.2005, 17:04
Hallo Manf,


Ja, dann gib sie doch mal an, es wäre doch interessant wenn sie vergleichen könnte.

Hier ist sie:


//------- Messwerte der IR-Distanz-Mess-Sensoren (C-Control II) --------
// Typ: SHARP GP2Y0A02YK,
// Minimale Messdistanz: 12 cm, Maximale Messdistanz: 150 cm.
// Achtung: Bei sehr kurzen Distanzen (< 12 cm) werden die Ausgabewerte
// des Sensors wieder KLEINER, so dass ein Messwert, der einer Distanz von
// z.B. 30 cm entspricht, auch bei einer Distanz von ca. 5 cm anliegt!
// Entfernungsangaben in [cm] ab Vorderkante der CCRP5-Hauptplatine.

const IRTABL[]= //Linker IR-Sensor:
// 0 1 2 3 4 5 6 7 8 9 Digital:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0.. 9
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10.. 19
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20.. 29
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 30.. 39
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40.. 49
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50.. 59
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60.. 69
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 70.. 79
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80.. 89
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90.. 99
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 100.. 109
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 110.. 119
0, 0, 0, 150, 147, 144, 142, 140, 138, 136, // 120.. 129
134, 132, 130, 128, 126, 124, 122, 120, 118, 116, // 130.. 139
115, 114, 113, 112, 111, 110, 109, 108, 106, 104, // 140.. 149
102, 100, 100, 99, 99, 98, 98, 98, 97, 97, // 150.. 159
97, 96, 96, 96, 95, 95, 94, 94, 93, 93, // 160.. 169
92, 91, 90, 90, 89, 89, 88, 88, 87, 87, // 170.. 179
86, 86, 85, 85, 84, 84, 83, 83, 82, 82, // 180.. 189
81, 81, 80, 80, 79, 79, 78, 78, 77, 77, // 190.. 199
76, 76, 75, 75, 74, 74, 74, 73, 73, 73, // 200.. 209
72, 72, 72, 71, 71, 71, 70, 70, 70, 69, // 210.. 219
69, 69, 68, 68, 68, 67, 67, 67, 66, 66, // 220.. 229
66, 65, 65, 65, 65, 64, 64, 64, 64, 63, // 230.. 239
63, 63, 63, 62, 62, 62, 62, 61, 61, 61, // 240.. 249
61, 60, 60, 60, 60, 59, 59, 59, 59, 58, // 250.. 259
58, 58, 58, 57, 57, 57, 57, 56, 56, 56, // 260.. 269
56, 55, 55, 55, 55, 55, 54, 54, 54, 54, // 270.. 279
54, 53, 53, 53, 53, 53, 52, 52, 52, 52, // 280.. 289
52, 51, 51, 51, 51, 51, 50, 50, 50, 50, // 290.. 299
50, 50, 49, 49, 49, 49, 49, 49, 49, 49, // 300.. 309
48, 48, 48, 48, 48, 48, 47, 47, 47, 47, // 310.. 319
47, 47, 47, 46, 46, 46, 46, 46, 46, 45, // 320.. 329
45, 45, 45, 45, 45, 45, 45, 44, 44, 44, // 330.. 339
44, 44, 44, 44, 44, 43, 43, 43, 43, 43, // 340.. 349
43, 43, 43, 42, 42, 42, 42, 42, 42, 42, // 350.. 359
42, 41, 41, 41, 41, 41, 41, 41, 41, 40, // 360.. 369
40, 40, 40, 40, 40, 40, 40, 39, 39, 39, // 370.. 379
39, 39, 39, 39, 39, 39, 38, 38, 38, 38, // 380.. 389
38, 38, 38, 38, 38, 37, 37, 37, 37, 37, // 390.. 399
37, 37, 37, 37, 36, 36, 36, 36, 36, 36, // 400.. 409
36, 36, 36, 35, 35, 35, 35, 35, 35, 35, // 410.. 419
35, 35, 35, 34, 34, 34, 34, 34, 34, 34, // 420.. 429
34, 34, 34, 34, 34, 33, 33, 33, 33, 33, // 430.. 439
33, 33, 33, 33, 33, 33, 33, 32, 32, 32, // 440.. 449
32, 32, 32, 32, 32, 32, 32, 32, 32, 31, // 450.. 459
31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 460.. 469
31, 30, 30, 30, 30, 30, 30, 30, 30, 30, // 470.. 479
30, 30, 30, 30, 30, 29, 29, 29, 29, 29, // 480.. 489
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, // 490.. 499
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, // 500.. 509
28, 28, 28, 28, 28, 27, 27, 27, 27, 27, // 510.. 519
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, // 520.. 529
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, // 530.. 539
26, 26, 26, 26, 26, 25, 25, 25, 25, 25, // 540.. 549
25, 25, 25, 25, 25, 25, 25, 25, 25, 24, // 550.. 559
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, // 560.. 569
24, 24, 24, 23, 23, 23, 23, 23, 23, 23, // 570.. 579
23, 23, 23, 23, 23, 23, 23, 22, 22, 22, // 580.. 589
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, // 590.. 599
22, 21, 21, 21, 21, 21, 21, 21, 21, 21, // 600.. 609
21, 21, 21, 21, 21, 20, 20, 20, 20, 20, // 610.. 619
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 620.. 629
20, 20, 19, 19, 19, 19, 19, 19, 19, 19, // 630.. 639
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, // 640.. 649
18, 18, 18, 18, 18, 18, 18, 18, 18, 18, // 650.. 659
18, 18, 18, 17, 17, 17, 17, 17, 17, 17, // 660.. 669
17, 17, 17, 17, 17, 17, 16, 16, 16, 16, // 670.. 679
16, 16, 16, 16, 16, 16, 16, 16, 16, 15, // 680.. 689
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, // 690.. 699
15, 14, 14, 14, 14, 14, 14, 14, 14, 14, // 700.. 709
14, 13, 13, 13, 13, 13, 12, 12, 12, 0, // 710.. 719
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 720.. 729
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 730.. 739
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 740.. 749
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 750.. 759
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 760.. 769
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 770.. 779
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 780.. 789
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 790.. 799
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 800.. 809
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 810.. 819
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 820.. 829
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 830.. 839
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 840.. 849
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 850.. 859
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 860.. 869
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 870.. 879
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 880.. 889
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 890.. 899
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 900.. 909
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 910.. 919
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 920.. 929
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 930.. 939
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 940.. 949
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 950.. 959
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 960.. 969
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 970.. 979
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 980.. 989
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 990.. 999
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //1000..1009
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //1010..1019
0, 0, 0, 0; //1020..1023


Anmerkungen dazu:
1. Ich verwende nur ganzzahlige Werte (auf +- 1 cm genau)
2. Die Distanzwerte beziehen sich auf meinen Aufbau. Bis zur Grundplatte des Sensors müßte man zu allen Werten 3,5 cm addieren.
3. Die Tabelle ist die für meinen linken Sensor. Die für den rechten sieht besonders in den höheren Distanzen wieder anders aus. Es bleibt also nichts übrig,- man muss selbst für jeden seiner Sensoren eine Tabelle anlegen. Von den 1024 Werten sind das immer noch ca. 600 pro Sensor.

Gruß Dirk

robotxy
29.08.2005, 19:10
Hi!

Ich benutze auch die folgende Formel mit der ich auch gut zurecht komme(GP2D12):

D = A/(X-B)

Wenn jedoch kein Hinderniss vor dem Sensor ist, habe ich noch nicht herausgefunden, welchen Wert dann die Formel ausgibt.
Oder muss ich anders Herausfinden ob überhaupt ein Hindernis exisitert?
MfG
Rasmus

08.10.2005, 12:33
hallo,

könnte mir das vielleicht jemand ein für mich nochmal erklären blicke nämlich nicht mehr hier durch.

wenn´s geht vielleicht auch mit quellcode in bascom?


gruß
patrick

patti16
08.10.2005, 12:34
das war ich ihr oben drüber