Zu Arduino und Co kann ich nichts beitragen, aber ein RC-Servo kann man nicht auslesen. Es positioniert dahin, wo es soll. Wann und ob es überhaupt die Position erreicht, ist ohne zusätzlichen Aufwand nicht zu überprüfen.
MfG Klebwax
Hallo,
Ich benutze ein Arduino-Uno-Board und einen kleinen Servomotor. Von dem würde ich gern die Position auslesen. In der Arduino-Referenz finde ich dazu den Befehl Servo.read().
Mit Servo.read() erhalte ich die Fehlermeldung:
_servoversuch_5_140320:31: error: expected primary-expression before '.' token
die ich aber nicht entschlüsseln kann. In Servo.h und Servo.cpp kommt zwar ein Programmteil mit "read" vor, aber mit den dort vorkommenden Instruktionen (z.B " this->servoIndex != INVALID_SERVO") kann ich nichts anfangen. Was mag das für eine Sprache sein?
Kann mir jemand schreiben, wie ich mit Arduino die Stellung eines Servo auslesen kann?
Würde es helfen, ein adafruit-motorshield zu benutzen?
Vielen Dank schon mal!
robkpc
Zu Arduino und Co kann ich nichts beitragen, aber ein RC-Servo kann man nicht auslesen. Es positioniert dahin, wo es soll. Wann und ob es überhaupt die Position erreicht, ist ohne zusätzlichen Aufwand nicht zu überprüfen.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Hallo!
Am einfachsten ist messen der Spannung am Schleifer vom Potentiometer an der Motorwelle, was aber wie schon erwähnt, einen Eingriff ins Innere benötigt.
Geändert von PICture (22.03.2014 um 07:28 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Hi robkpc.
Was meinst Du mit "kleinen Servomotor"?? Ist das so ein Ding wie hier (klick) beschrieben?
Hast Du Dir die Syntax genau angesehen? Soweit ich es sehe (ich habe zu diesem arduino-Basic kein gutes Verhältnis) ist der Ausdruck "Servo." eine Variable vom Typ Servo - sprich: eine Zahl. Das meckert ja der Compiler auch an.... In der Arduino-Referenz finde ich dazu den Befehl Servo.read().
Mit Servo.read() erhalte ich die Fehlermeldung:
_servoversuch_5_140320:31: error: expected primary-expression before '.' token ...
Übrigens KANN der Dialekt "arduino" tatsächlich "die Servoposition auslesen" - einfach deswegen, weil damit der letzte an den mit "servo." definierten Servo genannte SERVO-STELLWERT gemeint ist. Ob dieser Servo den Wert bereits angefahren hat, ist aber nirgendwo und durch nix gesichert.
Übliche Modellbauservos können ihren Wert nicht wiedergeben - siehe Vorredner, Modelle mit Ansteuerung z.B. per I²C können das meist.
Ciao sagt der JoeamBerg
Hi,
eigentlich wurde schon fast alles dazu gesagt. (War wohl zu langsam )
Das Element vor dem Punkt ist der Variablenname des Typs Servo, den du beispielsweise mit "Servo servo1" deklarierst.
Dann muss natürlich servo1.read() aufgerufen werden oder wie du es auch immer nennen magst.
Das gibt dir allerdings nur die zuletzt gesetzte Position aus, die nicht absolut ist! Man kann nicht rückschließend sagen, ob der Servo diese Position wirklich erreicht hat.
Die einzigste Möglichkeit ist nur: Servo aufschrauben, Kabel an den Mittelschleifer des Potis anlöten und damit in den analogen Eingang des Mikrocontrollers, dann kann man über den Spannungswert den tatsächlichen Winkel bestimmen.
Gruß, Stefan. Rechtschreibfehler gefunden? Kannste behalten!
[PINGELIG]Jein.[/PINGELIG]... einzigste Möglichkeit ... aufschrauben ... Mittelschleifer des Potis ... Eingang des Mikrocontrollers ...
Der (Modellbau)Servo wird üblicherweise/hoffentlich an eine separate Versorgung angeschlossen, bei mir gelegentlich auch deutlich über Vcc des Controllers. Bei Bewegung insbes. unter Last zieht der Servo viel Strom, das kann an der Eingangsspannung des Servos diagnostiziert werden. Damit ist der Mittenabgriff zu einem externen Bezug (z.B. die Vcc des Controllers) nicht so konstant, wie die üblicherweise besser als 10-bittige Auflösung des Servopotis ermöglichen würde. Aber als Richtwert würde das gehen und wäre auch aktueller als der vorgegebene Sollwert.
Ciao sagt der JoeamBerg
Ja, da hast du natürlich Recht, hab ich gar nicht bedacht.
Aber wenn man dann schon gezwungen ist, beispielsweise ein zweites Poti anzubringen, kann man sich wohl gleich einen Servo mit I2C-Interface aus einem Getriebemotor, Poti/Encoder und nem Attiny basteln. ^^
Oder: Man könnte auch gleichzeitig noch die Versorgungspannung des Servos messen, die ja je nach Belastung schwankt und nimmt das als Referenzspannung für den Maximalausschlag des internen Potis,
braucht man halt einen analogen Pin mehr.
Gruß, Stefan. Rechtschreibfehler gefunden? Kannste behalten!
Zumindest bei den digitalen Servos die ich mir bisher angesehen habe war es so, dass die Elektronik einen eigenen kleinen Linearregler hatte, der die äußere Versorgungsspannung des Servos auf 3.3V abgeregelt hat. Diese 3.3V lagen dann auch am Poti, sollten also stabil sein, bzw zumindest nicht den extremen Störungen und Schwankungen durch die Laständerungen am Motor unterworfen sein. Bei den old-school analog Dingern mag das anders sein.
Gruß
Malte
Hmm,
da es also kein echtes Auslesen gibt, müßte man über das Entfernen der Elektronik und zwei Endschalter nachdenken (es sind bei mir nur zwei Stellungen erforderlich).
Wie steuert man den verbliebenen Gleichstrom-Getriebemotor dann an?
Wenn am passenden Spulenende HIGH anliegt, dreht er sich unentwegt und wenn umgesteuert werden soll, muß die Spule komplett umgepolt werden, entweder mit H-Brücke oder irgendwie manuell?
Reicht eigentlich der Strom aus einem Port oder muß noch ein passender Baustein eingebaut werden?
Gruß
robkpc
H-Brücke ist da genau das richtige Stichwort, weil du den Motor sonst nicht umgepolt bekommst. Was meinst du mit manuell? Einen Motor auf gar keinen Fall direkt am Controller betreiben, davon wird dieser höchstwahrscheinlich zerstört.
Musst du denn unbedingt wissen, dass der Servo in einer bestimmten Stellung ist? Wenn er richtig angesteuert wird, sollte er auch die gewünschte Stellung einnehmen. Kommt aber eben auf die Anwendung an.
Lesezeichen