PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sharp Distanzsensor



CsMTEch
21.05.2013, 20:31
Hallo,

ich habe mir einen Distanzsensor
( http://www.reichelt.de/Sensoren/GP2-0430/3/index.html?;ACTION=3;LA=446;ARTICLE=110601;GROUPID =3190;artnr=GP2-0430 )
gekauft. Nun ist allerdings mein
LCD kaputt gegangen und ich kann
mir die Werte, die ich über ADC
bekomme, nicht anzeigen lassen
und dem entsprechen auch nich
im Programm für das eigentliche
Projekt verwenden :(

Nun wollte ich fragen, ob schon
jemand Erfahrungen mit diesem
Sensor hat und mir vielleicht eine
Tabelle anhängen könnte?

Zum Beispiel so:

Entfernung | Wert

4 cm
5 cm
6 cm
...

Schon mal Danke im Voraus :)

toter_fisch
21.05.2013, 21:40
Im Datenblatt gibt es ein Diagramm wo man die Werte ablesen kann : http://www.reichelt.de/index.html?;ACTION=7;LA=3;OPEN=0;INDEX=0;FILENAME= B400%252FDS_GP2D120XJ00F_SS.pdf

Gruß toter_fisch

rideyourstyle
21.05.2013, 21:47
Ja das Datenblatt hilft weiter oder das RN-Wissen (http://www.rn-wissen.de/index.php/Sensorarten#Sharp_Infrarotsensoren) Ist ein Link zu Sensoren allgemein, und nach ein bisschen Scrollen kommst du auf die Formel für die Sharp-Sensoren. Damit kannst du aus dem Analogwert direkt die Distanz berechnen.

Gruss

oberallgeier
21.05.2013, 22:09
... LCD kaputt gegangen ... kann ... Werte ... ADC ... nicht anzeigen lassen ... eine Tabelle ...LCD brauchste nicht, ich hatte mir diese Werte z.B. über UART aufs Terminal ausgeben lassen. Das funktioniert wun der bar. Aus den von MIR GEMESSENEN Werten in MEINEM Anwendungssystem habe ich mir eine Näherungskurve abgeleitet. Messkurve, Näherung und Kurvenkennwerte sind hier beschrieben (klick). (https://www.roboternetz.de/community/threads/36884-Basic(-Billig-Baby)-Mono-Wheel?p=352718&viewfull=1#post352718) Tabelle - neee, das wäre mir zu sehr Schätzeisen, die Kurvennäherung funktioniert so gut, dass ich damit sogar einen Balancierer gebaut hatte; wenns interessiert - klick. (https://www.roboternetz.de/community/threads/43015-Balance-halten?highlight=balancieren) Achtung: man bekommt die Messergebnisse nur mit ca. 25 Hz aus dem Gerätchen.

Einschränkung und Warnung.
Der Sharp kann nur so gut messen, wie seine Versorgungsspannung über die Nutzungsdauer genau und stabil steht und wie gut die leider fast stets notwendige Entstörung ist. Auf die Entstörung wird im oben genannten Link eingegangen, Ratschläge von mir liegen vor. Welche Präzision, Genauigkeit oder Toleranzen der Messergebnisse bzw. die definierte Kurve in einem anderen System liefert, kann ich nicht beurteilen, da ich das System ja nicht kenne.

Reichelt nennt in Deinem Link das Teil "GP2-0430" - im Datenblatt ists dann ein Sharp GP2D120. Ich nehme mal an, dass beide Teile identisch sind.

RoboHolIC
21.05.2013, 22:24
Die Tabelle Ausgangsspannung vs. Entfernung kann man doch exemplarspezifisch analog messen (oder die typische Kurve des Datenblatts übernehmen) und anhand der Referenzspannung am ADC des Controllers (da hält fremder Code potentiell Fußangeln bereit) den zu erwartenden Wandleroutput berechnen.

CsMTEch
23.05.2013, 17:47
Ok jetzt habe ich die analogen Werte,
aber woher weiß ich, was die Werte
sind, mit denen ich dann im Programm
arbeiten muss? Weil über den ADC-Pin
bekomme ich ja andere Werte, wie die
analogen :confused:

Dirk
23.05.2013, 20:21
Je nach ADC bzw. Microcontroller:
Bei Referenzspannung von 5V und 10 Bit ADC:
ADC-Wert = Spannung / 5 * 1024

CsMTEch
23.05.2013, 21:30
Hat der ATMega8 einen 10 Bit ADC?

Schon mal vielen Dank :)

Dirk
23.05.2013, 22:05
Ja........

RoboHolIC
23.05.2013, 23:02
Ja........
Ach, nööööö, jetzt hast du ihm auch noch diesen kleinstmöglichen Lernerfolg aus seiner RTFM-Frage vermasselt ........

CsMTEch
24.05.2013, 13:03
Ok danke:)

Nur noch mal zur Sicherheit
(bin erst 14, hab deswegen
noch nicht soviel Erfahrung):

Wenn ich nun bei 4 cm rea-
gieren möchte und der Sensor
bei 4 cm einen Ananlogwert
von 2,8 Volt ausgibt, muss
ich im Programm mit ca. 573
rechnen?

oberallgeier
24.05.2013, 13:28
... Wenn ich nun bei 4 cm reagieren möchte ... Sensor bei 4 cm ... 2,8 Volt ausgibt ...Der GP2D120 ist bei 4 cm fast am Ende seiner Betriebsgrenze. Das Diagramm Spannung-gegen-Abstand im Datenblatt zeigt in diesem Bereich einen steilen Anstieg und direkt unter 4 cm einen steilen Abfall. Das ist ein Gebiet in dem ich keine vertrauenswürdige Messung erwarten würde. Hier werden bereits recht kleine Schwankungen der Eingangsspannung des Sensors Fehlmessungen ergeben.

Ansonsten ist das ja das Ergebnis von Dirks Formelempfehlung.

CsMTEch
24.05.2013, 13:59
Ok ich wird drauf achten:)

Aber mir ist gerade aufgefallen,
dass ich an meine ADC-Pins
schon Motoren angeschlossen
habe. Jetzt habe ich nur noch
PORTC.0 und PORTC.1 als ADC
frei. Im Programm habe ich die
Motoren und den Sensor nun
wie folgt konfiguriert:

--------------------------------------------------------------------
'Sensor
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim Wert As Integer

'Motoren
Portc.5 = Output 'MR vor
Portc.4 = Output 'MR zurück
Portc.3 = Output 'ML vor
Portc.2 = Output 'ML zurück
---------------------------------------------------------------------

Meine frage ist nun, ob ich
im Hauptprogramm dann
trotzdem noch einfach z.B.
PORTC.5 = 1 schreiben kann,
weil ich PortC ja auch schon
für die ADC Messung konfi-
guriert habe...

oberallgeier
24.05.2013, 17:22
Hat der ATMega8 einen 10 Bit ADC? ...
Ach, nööööö, jetzt hast du ihm auch noch diesen kleinstmöglichen Lernerfolg aus seiner RTFM-Frage vermasselt ........
... aufgefallen, dass ich an meine ADC-Pins schon Motoren angeschlossen ...

Kann es sein, dass Du das Datenblatt von Deinem Controller noch immer nicht gelesen - und auch noch keine ordentliche Belegungsplanung für den Controller gemacht hast?

CsMTEch
24.05.2013, 18:10
Ich wollte nur wissen, ob ich
an PortC den Sensor auslesen
und gleichzeitig die Motoren
ansteuern kann? Das kann
ich nicht aus dem Datenblatt
entnehmen...

Belegungsplan habe ich nicht,
da mir die Idee mit den Sensoren
erst später kam und ich vorher
das Controllerbord auf Kollisions-
sensoren ausgelegt habe. Ich
habe die Motoren an Port C
angeschlossen, weil ich das ganze
sehr klein halten wollte und Port C
am besten dazu passte. Den MicroC
und die Polwender für die Motoren
habe ich auf 7cm * 5cm bekommen,
da ist dann nicht viel mit umbauen.

Kann man jetzt den Sensor auslesen
über den Port C auslesen und die
übrigen Pins von Port C als Output
verwenden?

RoboHolIC
24.05.2013, 21:59
Das kann ich nicht aus dem Datenblatt entnehmen...
Steht aber drin, sonst könnte es niemand sonst dir sagen.

OK, ich will das trotzdem mal gelten lassen. Zugegeben, ich hab schon manches in den Datenblättern verzweifelt wiederzufinden versucht, die sind ja doch recht umfänglich. Ist schon auch Erfahrungssache, Manuals auf die "richtige Weise" diagonal zu lesen; die Erfahrung macht es dann, dass man schnell an der passenden Stelle sucht.
In der Regel (ich arbeite mit PICs) können um der Flexibilität willen die ADC-Pins einzeln oder zumindest in verschiedensten Konstellationen (ältere PICs)als digitale I/Os oder ADC-Eingänge konfiguriert werden. Notfalls musst du ein wenig umlöten.


Den MicroC und die Polwender für die Motoren habe ich auf 7cm * 5cm bekommen, da ist dann nicht viel mit umbauen.
Gut, gut, das klingt schon recht kompakt. Zur Not wird das das Herz eines späteren Kleinprojekts und die neue LP-Größe muss sich dem aktuellen Projekt anpassen. Aber sieh erstmal zu, ob es doch klappt.

Aber nicht ärgern: Mit dem BER-Effekt (auch Schönefeld-Effekt genannt) befindest du dich in "bester" Gesellschaft mit hochbezahlten "Profis".

karwenzman
08.06.2013, 15:27
Hallo!
Langsam arbeite ich mich in das Thema ein. Ich habe den Sensor GP2Y0A21YK0F. Abbildung 5 im Datenblatt zeigt: Analog Output Voltage vs. Distance to Reflective Objekt. Im Bereich bis 10cm verhält sich der Sensor so, wie abgebildet. Doch dann bleibt die Spannung bei ca. 2,55V konstant, ganz gleich in welcher Entfernung ein Hindernis auftritt.

Kann ich davon ausgehen, dass der Sensor beschädigt ist?
Oder liegt ein Denkfehler, Anschlußfehler vor?

V0 liegt an einem ADC-Pin. GND und VCC sind auch entsprechend angeschlossen. Die Schaltung mit den Kondensatoren und Widerständen, um eine stabile Spannungsversorgung zu haben, habe ich noch nicht eingebaut.

Kann mir jemand weiterhelfen?

Gruß, karwenzman

RoboHolIC
08.06.2013, 21:57
Hallo karwenzman.

Zunächst Willkommen im Forum.
Leider hat deine Frage nicht viel mit dem Thema des TO (Thread Owner, Eröffner des Themas) zu tun. Bitte erstelle beim nächsten Mal einen eigenen Thread für deine neue Frage. Dort können wir gerne dein Problem weiterbehandeln.
Vielleicht lässt sich dein Problem aber schnell aus der Welt schaffen, daher hier eine Erste Hilfe:


Doch dann bleibt die Spannung bei ca. 2,55V konstant, ganz gleich in welcher Entfernung ein Hindernis auftritt.
...
V0 liegt an einem ADC-Pin. GND und VCC sind auch entsprechend angeschlossen. Die Schaltung mit den Kondensatoren und Widerständen, um eine stabile Spannungsversorgung zu haben, habe ich noch nicht eingebaut.

Warum misst du überhaupt gezielt, wenn die dringend angeratene Pufferung der Versorgung nicht gegeben ist? Das macht nicht wirklich Sinn!
Sind die 2,55Volt die unmittelbare, mit Multimeter gemessene Ausgabespannung oder vielleicht der (nur falsch umgerechnete) Ausgabewert des D/A-Wandlers im µController? Falls JA, dann wird dessen Eingang schlicht im oberen Anschlag kleben.


Im Bereich bis 10cm verhält sich der Sensor so, wie abgebildet. ...
Kann ich davon ausgehen, dass der Sensor beschädigt ist?
Davon kann dich niemand abhalten, aber diese Vermutung scheint mir eher unbegründet.

karwenzman
03.07.2013, 14:08
Es hat einige Zeit gedauert...

Bei Bedarf werde ich einen neuen Thread starten - danke RoboHolIC.

Mittlerweile habe ich folgendes ausprobiert:
http://www.segor.de/L1Bausaetze/gp2d12.shtml
http://www.rn-wissen.de/index.php/Bild:Sharp_filter.png

Leider hat sich das verhalten des Sensors nicht verändert. Die ADC-Werte schwanken nur zwischen 700 und 595. Größere Distanzen werden nicht gemessen.

ADC_Set(ADC_VREF_VCC,ADC6);
ADC6_RAW = ADC_Read();
ADC6_VOLT = 5.0/1023.0*ADC6_RAW;

Werde den Sensor umtauschen.

RoboHolIC
03.07.2013, 19:46
Leider hat sich das verhalten des Sensors nicht verändert. Die ADC-Werte schwanken nur zwischen 700 und 595. Größere Distanzen werden nicht gemessen.

ADC_Set(ADC_VREF_VCC,ADC6);
ADC6_RAW = ADC_Read();
ADC6_VOLT = 5.0/1023.0*ADC6_RAW;

Früher hast du aber behaupte, dass nur Werte bis 255 ausgegeben werden. Der ADC-Wertebereich 700..595 sind aber ca. 3,4..2,9Volt. Irgendwie kriege ich das jetzt nicht zusammen. Immerhin hast du die heikle Versorgungspufferung scheinbar nachgeholt.

Strahlt dein Sensor wirklich in den freien Raum?

Hast du Gelegenheit (gehabt), die Spannungen am Sensor mit einem Oszilloskop anzusehen?

Hast du auch mal mit einem Multimeter gemessen? Vielleicht ist die ADC-Configuration schlicht fehlerhaft? Sensor schon mal StandAlone gemessen? Bitte mach das mal und berichte: Signalleitung offen, keine Verbindung zum Controllerboard; es ist denkbar, dass ein Pullup-Widerstand das analoge Signal verfälscht und an die Aussteuergrenze bringt. 700 bzw. 3,4Volt wäre nach Kennlinie ja ganz OK, aber vielleicht kriegt der Ausgangstreiber die Leitung wegen einen Pullups nicht so recht Richtung GND getrieben. Das würde zur beschriebenen Kurzsichtigkeit den Sensors passen.

karwenzman
04.07.2013, 09:26
es ist denkbar, dass ein Pullup-Widerstand das analoge Signal verfälscht und an die Aussteuergrenze bringt. 700 bzw. 3,4Volt wäre nach Kennlinie ja ganz OK, aber vielleicht kriegt der Ausgangstreiber die Leitung wegen einen Pullups nicht so recht Richtung GND getrieben. Das würde zur beschriebenen Kurzsichtigkeit den Sensors passen.

das war es ... danke

Port_WriteBit(ADC6,LOW);
>>> den Wert habe ich von HIGH(1) auf LOW(0) geändert

jetzt verhält sich der Sensor, wie er es laut Kennlinie soll; ADCwertebereich zwischen 45 und 700