Modelcraft MC1811, Arduino UNO, keine Ansteuerung möglich

Hallo liebe Forenmitglieder,

ich hab aktuell ein Problem mit dem Modelcraft MC1811. Das in den Beispiel-Codes vorhandene Sweep-Programm vom Arduino läuft tadellos...aber sobald ich versuche dem Servo direkt einen Wert zu übergeben, bewegt sich der Servo kein bisschen...

Das hier funktioniert nicht:

#include <Servo.h>

Servo myservo;

void setup() {
  myservo.attach(9); 
}

void loop() {
    myservo.write(45);
    delay(15);  

}

Steuer ich den MC1811 über eine for-schleife an gehts wiederum...der einfache SG-90 lässt sich ja auch einfach über servo.write in Position bringen? Könnte mir jemand erklären, was ich falsch mache?

Der MC1811 wird wie der SG-90 direkt über 5V und GND vom Arduino betrieben. Arduino wird wiederum über den USB-Port vom Laptop betrieben.

Vielen Dank im Voraus

UnterStrom

UnterStrom:
Könnte mir jemand erklären, was ich falsch mache?

Hier wird vom gleichen Servo geschrieben. In einer Antwort wird geschrieben, dass das Problem die Energieversorgung sei (der Anlaufstrom ist wohl so groß, dass nicht mehr genug Power für den µC übrig bleibt).

Mach mal einen Test, bei dem Du den Servo direkt (nicht über den Arduino) mit Energie versorgst – also nur die Steuerleitung an den Arduino anschließt. In loop() steuerst Du testweise den Servo zwischen zwei Werten hin und her. Das ist für einen Test IMO besser geeignet als nur eine immer gleich bleibende Position anzusteuern.

HTH

Gregor

gregorss:
Mach mal einen Test, bei dem Du den Servo direkt (nicht über den Arduino) mit Energie versorgst – also nur die Steuerleitung an den Arduino anschließt.

Du mußt dabei die beiden Massen ( Arduino und Netzteil) verbinden.

Grüße Uwe

UnterStrom:
Steuer ich den MC1811 über eine for-schleife an gehts wiederum...der einfache SG-90 lässt sich ja auch einfach über servo.write in Position bringen? Könnte mir jemand erklären, was ich falsch mache?

Der MC1811 wird wie der SG-90 direkt über 5V und GND vom Arduino betrieben. Arduino wird wiederum über den USB-Port vom Laptop betrieben.

Aus normalen USB-Buchsen an Desktop-PCs darfst Du maximal 500 mA ziehen.
Selbst das reicht für kräftige und große Servos NICHT.
Aber die USB-Stromversorgung an Laptops und anderen Mobilgeräten ist oft sehr viel schwächer ausgelegt, aus manchen USB-Buchsen an mobilen Geräten darfst Du nur maximal 100mA rausziehen (siehe Anleitung des Geräts), das reicht zum Betrieb kräftigerer Servos nicht aus.

Versuche mal eine USB-Buchse von einem Desktop-PC, von einem USB-Ladegerät oder von einer USB-Powerbank als Strromversorgung!

Vielen Dank für die zahlreichen Antworten!

Was versucht wurde:
Den Arduino über eine Powerbank (bis zu 2.4 A) laufen zu lassen.
Den Servo über einen externes Netzteil (PeakTech I535, 5V/6V als Output) laufen zu lassen.

Sweep funktioniert IMMER.
Direkte Ansteuerung von den 2 Werten nicht.

Der Code unten funktioniert, wenn ich die Pulsweite in der attach-Methode anpasse. (Die default-Werte gingen nicht und ich habe mich an die "passenden" Werte rangetastet)

EDIT:

Der Servo hat durch die Anpassung nur nen Arbeitsbereich von 24 - 159 Grad wenn man den ansteuert. Ist einer der Winkel die er Ansteuern soll zu niedrig, passiert gar nichts. Ist einer der Winkel zu hoch und der andere okay, fährt er den hohen Winkel an und steckt dann fest.
Manchmal schwankt der untere Winkel auch um ein paar Grad, dann muss man den etwas höher setzen und sich wieder auf den alten Wert runtertasten damit man nen möglichst großen Ansteuerbereich hat

ABER wieso funktioniert dann Sweep (volle 180Grad) ohne die Anpassung der Pulsweite? :smiley:

#include <Servo.h>

Servo myservo; 

const int minSec = 795;
const int maxSec = 2180;

void setup() {
  myservo.attach(9, minSec, maxSec); 
}

void loop() {

myservo.write(90);
delay(1000);
myservo.write(1); (hier funktioniert 0 nicht)
delay;

}

UnterStrom:
Vielen Dank für die zahlreichen Antworten!

Verteile Karmapunkte :slight_smile: Ganz viele!

UnterStrom:
ABER wieso funktioniert dann Sweep (volle 180Grad) ohne die Anpassung der Pulsweite? :smiley:

Mir fiel hierzu noch etwas ein (evtl. zu spät): Wenn Du bei attach() Pulsweitenwerte angibst, stellst Du sozusagen den Bewegungsradius ein (zumindest verstehe ich das so). Wenn Du das nicht angibst, werden default-Werte angenommen.

HTH

Gregor