Hallo,
an meinem Roboter habe ich jetzt zwei GP2Y0A21YK0F Sharp Sensoren.
Sie sind nebeneinander im Abstand von 7 cm Senkrecht (Beide Linsen übereinander)
vorne anbgeracht.
Wieso bekomme ich manchmal absolute Fehlmessungen?
Die Sensoren melden machmal oder manchmal sogar
ziemlich oft (fast permanent) einen geringen Abstand obwohl sich nichts
in der Nähe befindet. Ich bin langsam völlig überfragt...
Hier der Code
if (cntMode == 2)
{
optSens1 = analogRead(2);
if (optSens1 > 400)
{
tone(signal,1000,50);
block = 1;
blocked(1);
}
optSens2 = analogRead(7);
if (optSens2 > 400)
{
tone(signal,1000,50);
block = 1;
blocked(2);
}
if (block == 0)
forward(0, 40);
}
Werden die Sensoren über einen eigenen Spannungsregler mit Strom versorgt, z.B. L7805, oder über den Arduino ?
Über Arduino, beide an +5v
EDIT: Auch ein einzelner Sharp, macht manchmal fehlmessungen,
total willkürlich!
Versorge mal beide Sensoren über eine separate 5V Stromversorgung, überprüfe dann ob sich was geändert hat !
Welchen Arduino benutzt Du ?
Einen Arduino Mega 2560.
Werde das mit der externen Spannungsversorgung mal eben probieren!
Ich benutze für meine Sensoren immer diese Routine:
int IRpin = 1; // IR-Signalleitung des GP2Y0A21YK0F an ANALOG 1
void setup() {
pinMode (IRpin,INPUT);
Serial.begin(9600);
delay(100); // Warten auf Infrarotsensor bis bereit !
}
void loop() {
float x = analogRead(IRpin);
float distance = 5100/(x-30);
if (distance<=80)
{
Serial.print(distance);
Serial.print("cm");
}
else Serial.print("Ausserhalb der Reichweite !");
Serial.println();
delay(250); // Messungen dürfen nur im Abstand von 50 ms erfolgen !
}
Kann es sein dass die Shaprs GENAU 5v brauchen, damit sie überhaupt funktionieren?
Allerdings ist mir jetzt etwas aufgefallen da ich gerade per PC die Werte mitlogge:
- Wenn etwas Relativ nah ist, c.a bis zu 1 Meter, bleiben die Werte im berreich von 100-200
- Wenn aber etwas viel weiter weg ist... ab 2 Meter dann steigen die Werte plötzlich
auf über 300 manchmal in gewissen Poisitonen sogar dauerhaft über 400!
Wie kann das alles sein?
Bei mehr als 80cm liefert der Sensor keine vernüftigen Werte, deshalb:
[ if (distance<=80)
{
Serial.print(distance);
Serial.print("cm");
}
else Serial.print("Ausserhalb der Reichweite !");
/code]
Oh man -.-
Wer viel misst, misst viel mist!
Danke!
So funktioniert das!
Ausserdem hätte man einfach auch ins Datenblatt sehen müssen.
Dort wird ein 10uF Kondensator empfohlen. Das hat
gleich die Fehlmessungen drastisch Reduziert!
Man beachte am Schluss das Rad 
Die beste Programmierung bringt nichts,
wenn die Mechanik versagt, haha!