Versuchs mal mit
Code:
kopflinks();
delay(500);
kopfrechts();
delay(500);
Beim Überfliegen, scheint es mir so als ob Du dem RC-Servo gar keine Zeit lässt nach rechts zu fahren.
Allerdings wird Dir das nichts bringen, Soweit ich das sehe, dürfte Kopflinks nahezu das selbe Messergebniss liefern wie wenn der Kopf gradeaus schaut.
So ein RC-Servo hat ja eine Stellzeit z.B. 0,6s für 60°.
Soweit ich das sehe startest Du die Servobewegung und trigerst danach sofort den Sensor.
Die Messung müsste also erfolgen wärend sich der RC_Servo grade anfängt auf den Weg zur Zielposition zu machen.
Da RC-Servos intern regeln, hat man keine Rückmeldung wann ein Servo seine Zielposition erreicht hat.
Man schätzt entweder die Zeit die der RC_Servo braucht und arbeitet mit einem Delay und hofft das es keine Fehlersituation gibt in der der RC_Servo blokiert, oder man braucht ein Messystem daß einem das Erreichen der Zielposition anzeigt.
Im Zweifelsfall auf jeder Seite einen Taster.
Und wenn man rafiniert ist, spendiert man dem ganzen Betätigungsnocken, die bei Endlage 1 Taster 1 öffnen und bei Endlage 2 Taster 2 öffnen.
in Mittelstellung sind beide Taster dann offen.
Das heist wärend der Drehung sind beide Taster geschlossen.
Strohm fließt also nur wärend der Bewegung (Strom sparen) und man kann kabelbrüche erkennen, da ja nach dem Drehbefehl beide Taster auf 1 gehen müssen und in den Endlagen jeweils 1 Taster auf 1 bleibt.
kommen diese Bitmuster nicht zustande, dann ist irgendwo ein Fehler und der Roboter kann in einen Fehlermodus gehen. (z.B. blinken und piepen)
Lesezeichen