Ja, das kannst du selbst programmieren, indem du einfach eine kleine Pause einlegst, bevor das Servo auf die nächste Position gestellt wird.Kann man mit Bascom das Servo verlangsamen?
Gruß Dirk
Moinsen,
Ich bins mal wieder. Ich habe ein kleines Problem. Zwar habe ich einen Sharp IR-Sensor auf ein herkömliches Servo montiert. Das Servo befindet sich wiederum auf meinem Roboterchassi.
Das Servo soll den Sensor immer von links nach rechts drehen, damit dieses einen möglichst grossen Bereich absten kann.
Das alles funtzt bislang auch so wie es soll. Jedoch ist der Sensor nicht mehr genau. Erst ein paar Cm vor der Mauer reagiert er. Ich habe natürlich die Werte variieren lassen, trotzdem musste ich feststellen, dass das Servo sich wohl zu schnell dreht, und das Licht, welches sich eigentlich mit Lichtgeschwindigkeit bewegt, nicht genug Zeit hat zum Sensor zurückzukommen.
Nun meine Frage: Kann man mit Bascom das Servo verlangsamen?
Mfg JeyBee
Ja, das kannst du selbst programmieren, indem du einfach eine kleine Pause einlegst, bevor das Servo auf die nächste Position gestellt wird.Kann man mit Bascom das Servo verlangsamen?
Gruß Dirk
Hey Dirk,
Kannst du mir mal auf die Sprünge helfen? Ich habe jetzt einfach "Servo(1) = x" hingemacht, und lasse alle 10ms die variable auf 150 hochzählen. Doch wie kann ich sie nun wieder so runterzählen, dass es eine Endlosschleife wird?
Code:$regfile "m16def.dat" $crystal = 16000000 $baud = 9600 $swstack = 16 $hwstack = 16 $framesize = 16 Dim B As Word Dim X As Byte Dim Y As Byte Config Portd.4 = Output Config Portd.5 = Output Config Porta.4 = Output Config Porta.5 = Output Config Porta.6 = Output Config Portc.7 = Output Config Portc.6 = Output Config Portc.5 = Output M1 Alias Porta.5 M2 Alias Porta.6 M3 Alias Portc.6 M4 Alias Portc.5 Config Portb.0 = Output Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 Enable Interrupts X = 0 Y = 0 Do Servo(1) = X 1: Incr X Waitms 10 While X = 150 Decr X Waitms 10 Wend While X = 50 Incr X Waitms 10 Goto 1 Wend Loop
Das Licht sollte imme rgenu zeit haben zurückzukommen. Es ist schon schwer so kurze Zeiten überhaupt zu messen, so wie in den Laserentfernungsmessern. Eher sind das Störungen über die Versorgungsspannung.
Zum hoch / runter zählen wäre ein FOR schleife wohl das richtige. Jeweils eine Schleife für hoch und eine für runter. Die Endloschleife dann ganz außen herum.
Kannst du mir dazu den Beispielcode schreiben? Ich habe gegoogelt und auch den Bascom Index benutzt, trotzdem verstehe ich diese For--Next Schleife nicht. Sorry
Mfg JeyBee
Z.B.:
Code:For X = 150 to 0 Step -1 Servo(1) = X Waitms 10 Next X For X = 0 to 150 Servo(1) = X Waitms 10 Next X
Erst mal danke!
Ich habe den Code etwas modifiziert:
Jedoch bewegt sich das servo jetzt von links nach rechts, und legt dort eine 1 Sekunden Pause ein, nachher bewegt es sich wieder nach links, wovon es direkt nach rechts geht, um wieder eine Pause zu machen.Code:For X = 150 To 0 Step -1 Servo(1) = X Waitms 10 Next X For X = 0 To 150 Step 1 Servo(1) = X Waitms 10 Next X
Ich konnte den Fehler bislang nicht finden.
Mfg JeyBee
Hallo JeyBee,
x darf in diesem fall nicht null werden, da der bereich eines Servos (UNGEFÄHR!!!) zwischen 50 und 150 liegt (die genauen werte sind immer verschieden und du solltest sie durch probieren herausfinden).
gruß
chris
Hi JeyBee
Zitat von JeyBeeDu brauchst genug Messezeit um ein gutes Resultat zu bekommen. Leider schreibst Du nicht, welchen Sharpsensor Du hast. WENN Du einen von der Familie GP2Dxxx hast, dann musst Du berücksichtigen, dass der 40ms für eine Messung benötigt - maximal also 25 Messwerte pro Sekunde. Das alte Lied: Datenblatt lesen. Da Dir aber mit Sicherheit (erstmal) nicht klar ist, wann der Servo die neue Position erreicht hat, musst Du etwa 80 ms auf das neue Ziel halten.Zitat von JeyBee
Der Sharp ist KEIN optisches Echolot!... das Servo sich wohl zu schnell dreht, und das Licht, welches sich eigentlich mit Lichtgeschwindigkeit bewegt, nicht genug Zeit hat zum Sensor zurückzukommen ...
Wieso 80 ms!?!? Nehmen wir an, Du verfährst gerade den Sensor und kommst an der neuen Position an, etwa 1..2 ms NACHDEM die aktuelle Messung gestartet wurde. Nun hatte also die laufende Messung noch die Verstellung mitbekommen und wird dadurch verfälscht. Du musst also (das ist die "schlimmste" Annahme) warten, bis eine neue Messung angefangen ist und abgeschlossen wurde - also 39 ms warten wegen der verfälschten Messung und danach noch mal 40 ms für eine komplette Messung bis der neue Wert da ist. Danach Wert auslesen und weiter gehts. Bei Deiner Methode sind 10 saubere Messwerte pro Sekunde ein guter Wert. Wenn Du mehr Verstellungen machst, sind einige Messungen nur . . . . . . Schrott.
Ähnliches hatte ich an meinem Dottie gemacht (siehe Strohhalmsensorindikator), um meine irDME´s zu justieren und zu kontrollieren.
Ciao sagt der JoeamBerg
Moin,
Ahso, danke Oberallgeier. Also soll ich einfach nur drei Positionen messen? Links, etwas warten zum messen, mitte, etwas warten zum messen, rechts, etwas warten zum messen....?
Weil bisslang habe ich andauert gemessen, und das servo einfach durchdrehen lassen, ganz unabhängig.
P.S. ja, ich verwende den GP2D120J00F Sensor.
P.P.S. Das Programm funktioniert soweit. Danke.
Mfg JeyBee
Lesezeichen