GP2D12 infrarot sensor

Hallo zusammen,

ich hab an mein Arduino Mega einen Sharp-GP2D12-Infrarotsensor angeschlossen und will die Entfernung (ca.30cm) zu einem Objekt ermitteln.
Den gemessene Wert hab ich dann laut Arduino-Playgound umgerechnet. Arduino Playground - ReadGp2d12Range
Weiterhin hab ich den Wert versucht in Volt auszugeben.

float volt = (read_gp2d12_range(A2)*5.0)/1023;

Laut Datenblatt reicht die Spannung von 0,3V-3.0V je nach Entfernung des Objektes.
Nach Ausgabe auf dem seriellen Monitor:

Wert: 19.81
Volt: 0.10
Range: 18

Problem. Weder Volt noch Range stimmen.
Woran kann das liegen.
Und die Werte des Sensors schwanken sehr stark. Steuerleitung ist mit einem Pull-Dowwiderstand versehen.
Hier der wichtige Teil aus dem Code.
Hier ein Bild vom Versuchsaufbau und ein Video für den Überblick.

while(1){
  float volt = (read_gp2d12_range(A2)*5.0)/1023;
  int range = read_gp2d12_range(A2);
  lcd.clear();
  lcd.print(" N   E   S   W");
  lcd.setCursor(0,1);
  lcd.print(volt);
  lcd.setCursor(8,1);
  lcd.print(range);
  Serial.print("Wert:  ");
  Serial.println(read_gp2d12_range(A2));
  Serial.print("Volt:  ");
  Serial.println(volt);
  Serial.print("Range: ");
  Serial.println(range);
  Serial.println(" ");
  delay(500);
  }

Vielleicht hat ja jemand ein Tip
Danke

Die Werte passen doch zusammen, nach deinem Sketch ?

aus dem Playground sehe ich, dass
return (6787.0 /((float)tmp - 3.0)) - 4.0;
gerechnet wird.
Wenn da 18 .. 20 rauskommt, war der Rohwert beim analogRead wohl ca 285 .. 300, was etwa 1.5V entspricht.

Du darfst keine LED direkt ohne Vorwiderstand in die Pins des Arduino stecken. Du reskierst, daß der Arduino, und/oder die LED kaputtgeht. Außerdem geht die Versorgungsspannung in die knie und die analoge Messung wird falsch sein weil die 5V nicht mehr 5V sein werden.

Dein weiterer Fehler ist daß "read_gp2d12_range(A2)" die Entfernung in cm zurückgiebt und nicht die ADC des A/D Converters.

read_gp2d12_range
Function that reads a value from GP2D12 infrared distance sensor and returns a value in centimeters.

Darum ergibt die Umrechnung float volt = (read_gp2d12_range(A2)*5.0)/1023; nichts sinnvolles.

Auch der Pulldown-Widerstand am Ausgang des GP2D12 ist falsch.

Grüße Uwe

Hallo Michael, hallo Uwe,

Erstmal vielen Dank für die schnelle Antwort.
Das die Funktion "cm" zurückgibt hab ich irgendwie gekonnt überlesen.
Dann ist natürlich klar warum da keine vernünftige Spannung rauskommt.
Die Umrechnung hab ich entfernt.
Die LED an PIN 13 auch (hab irgendwo gelesen das Mega hat an PIN 13 ein Vorwiderstand hat, aber ich hab im Schaltplan nachgeguckt und da ist keiner, also schnell weg damit)
Den Pull-Down-Widerstand hab ich auch wieder entfernt. Den hatte ich eingebaut weil der Sensor wenn kein Objekt erkannt wird, sehr stark in der Ausgabe schwangt.
Vielleicht hat da noch jemand ein Tipp wie man das in Griff bekommt.

So jetzt hab ich die Range in "cm" der Abstand stimmt trotzdem nicht.
Zwar sinkt der Abstand kontinuierlich aber die absoluten Werte des Maßbandes und des Sensors stimmen nicht überein.

Grüße

Den Vorwiderstand am Pin 13 hatten die Arduinos vor dem Diecimila (Versionen ohne USB).

Wiegroß ist der Fehler der Abstandsmessung? Hast Du es mit einem weißen Blatt Papier als Reflexionsfläche probiert?
Grüße Uwe

Also zunächst einmal würde ich gern die Schwangungen abstellen wenn kein Objekt vor dem Sensor ist.
Oder muss ich den Leerlauf mit ner Schleife abfangen, da mir ja der Messbereich des Sensors bekannt ist (10-80cm).
Die Werte sehen dann ungefair so aus:

Wert:  52.09
Range: 33
 
Wert:  119.40
Range: 94
 
Wert:  59.43
Range: 238
 
Wert:  31.17
Range: 21
 
Wert:  2258.33
Range: 1692
 
Wert:  41.25
Range: 39
 
Wert:  184.53
Range: 750
 
Wert:  22.93
Range: 29

und als nächste das Problem des korrekten Abstandes.
Ein Objekt ist 50 cm vom Sensor entfernt.
Die Werte des Sensors sind relativ stabil nur stimmt der Abstand nicht.
Bei range müsste ja demzufolge irgendwas um die 50 stehen.

Wert:  17.96
Range: 14
 
Wert:  19.98
Range: 16
 
Wert:  16.69
Range: 20
 
Wert:  19.65
Range: 17
 
Wert:  14.24
Range: 19
 
Wert:  19.65
Range: 19
 
Wert:  17.48
Range: 19
 
Wert:  19.81
Range: 19
 
Wert:  18.85
Range: 14
 
Wert:  19.16
Range: 19

Grüße

Achso und bei weißem Papier genau das Gleiche.

50 cm Abstand: Da scheint der Sensor in INCH zu messen anstatt in cm.

Hast Du versucht im Dunkeln zu messen?

Grüße Uwe

Hallo Uwe,

es scheinen wohl die Inches gewesen zu sein.

Vielen Dank für die Hilfe