Programmcode ist ein abgeänderter Code aus nem Arduino-Lehrbuch(Franzis Lernpaket Arduino).
Der Code nutzt Gnd und Analog 0 als eine art taster/schalter/sensor, wenn man Gnd und Analog 0 verbindet und dann wieder loslässt, aktiviert der Code im originalen Code die LED 13.
Ich hab den Code derartig umgeschrieben, dass er nun nicht die LED 13, sondern einen Servo aktiviert.
So. Mit einem der Servos funktioniert das nun auch recht gut und ohne Probleme, wenn ich jedoch alle drei Servos anschließe (nun nicht mehr mit 5V, sondern 9V verbinden, Netzteil anschließen), spielt das teil komplett verrückt, sofort nachdem ich den Code in den chip lade. Entweder bewegen sich die servos von alleine (ohne das auslösen des Gnd-Analog0- schalters) sehr schnell und scheinbar unkontrolliert, oder ein paar der servos fahren eine position an und halten diese dann. In beiden Fällen reagiert das System nicht auf den Gnd-Analog0 Schalter.
Frage, woran kann das liegen? Hab schon mehrere Spannungen des Netzteils durchprobiert, keine besserung.
Darf ich den Code hier posten? Wie gesagt, der basiscode is ja aus dem lehrbuch. Copyright und so...
BreedMate:
Darf ich den Code hier posten? Wie gesagt, der basiscode is ja aus dem lehrbuch. Copyright und so...
Soweit mir bekannt ist, besagt das Urheberrecht:
Copyrighted Code darfst Du posten, wenn Du dafür eine Genehmigung des Copyrightinhabers hast.
Ansostens darfst Du ruhig mal posten, wie Du für den erheblichen Stromverbrauch der Servos sorgst, also insbesondere mal zeigen oder beschreiben, wie die Servos ihre Stromversorgung bekommen.
Servos ziehen nämlich so reichlich Strom, den darfst Du nicht am 5V Pin des Arduino aus dem Arduino-Board rausziehen.
Ich sehe auch das Problem in der Stromversorgung.
Die Motoren in den Servos verbrauchen soviel Strom daß der Spannungsstabilisator auf dem Arduino den Strom begrenzt und die Spannung zusammenbricht.
Versorge die Servos mit einem ordentlichen Netzteil (5V und mindestens 2A) und verbindest den negatien Pol mit Gnd des Arrduino.
Grüße Uwe
Also das netzteil hängt ja am arduino, und die servos hängen auch ned am 5V sondern am 9V Pin den boards.
Ich hatte mal ein Programm geschrieben, dass vier servos jeweils nacheinander ansteuerte, da hat es ja auch so funktioniert.
sschultewolter, wie meinst du das mit der Gnd Verbindung zu den Servos?
Welchen 9V Pin meist du genau. Habe keinen Duemilanove. Aber ich gehe mal davon aus, du meinst den 2,1mm Hohlsteckerbuchse.
Kannst du deine Servos direkt mit 5V versorgen, ohne an das Board zu müssen?
5V und Gnd vom Netzteil an die Servos. Die PWM Leitung kommt vom Arduino Port. Nun verbindest du noch den Gnd des Netzteils mit dem Gnd deines Arduinos.
BreedMate:
Ich hatte mal ein Programm geschrieben, dass vier servos jeweils nacheinander ansteuerte, da hat es ja auch so funktioniert.
Dann ist es ja klar:
Wenn die Servos, einzeln angesteuert funktionieren, und gleichzeitig angesteuert nicht, dann ist das mit hoher Wahrscheinlichkeit die Stromversorgung. Servos brauchen ordentlich Strom!
Also am besten, so wie Uwe geschrieben hat, ein Netzteil mit mindestens 2A nehmen, und, 9V ist auch etwas viel für die Servos.
je kleiner die spannung ist, mit der die Servos betrieben werden, um so keiner ist auch der Strom den sie Ziehen. Wenn du also nicht auf hohe Geschwindigkeiten oder Stellkräfte angewiesen bist, dann lieber mit 5V Versorgen (nicht Arduino 5V, eigene Versorgung!).
Auch ein langes dünnes versorgungskabel reicht evtl schon aus, um die Spannung weit genug einbrechen zu lassen.
Uwe's Posting sei hier nochmal ausdrücklich hervorgehoben !
9V sind kurz bis mittelfristig der Tod der Servos.
Es handelt sich hier um Standard analog-Servo's die man mit maximal ( ! ) 6V befeuern sollte. Besser 5V.
Da war Fa. Conrad arg schludrig mit den technischen Angaben.
Ansonsten gilt bereits genanntes:
Externes Netzteil an + und - der Servos. Servo-"Minus" mit Minus Arduino verbinden.
Nur jeweils die PWM-Steuerleitung an die Servo's - meist die orange Strippe.
Verzeiht mir mein unwissen, aber ich komm grad nimmer so recht mit^^
Also die servos hängen an dem 9V Pin, der auf der kleinen schwarzen leiste neben dem Gnd Pin ist. Wenn ich mehr als zwei servos an den 5 V pin und ohne das netzteil benutze, erkennt mein pc den Arduino nicht mehr.
TERWI: Wie meinst du das netzteil an + und - der servos? Quasi mit irgendeinem adapter das netzteil via breadboard an die servos klemmen, sodass die servos nur noch mit dem signalpin und dem minuspin des arduino verbunden sind?
Guntherb: Zusammen angesteuert haben sie auch funktioniert, also alle gleichzeitig, das hab ich vergessen zu erwähnen. Nur eben mit diesem neuen code spielen sie verrückt.
BreedMate:
Guntherb: Zusammen angesteuert haben sie auch funktioniert, also alle gleichzeitig, das hab ich vergessen zu erwähnen. Nur eben mit diesem neuen code spielen sie verrückt.
Das heißt, der Aufbau, so, wie du Ihn jetzt hast, hat schonmal funktioniert ?=
Dann hast du was am Code geändert, jetzt gehts nicht mehr?
Wenn das so ist, dann wird es wohl am Code liegen.....
wenn du den aber nicht postest, dann wird die Diagnose schwer.
Edit:
Deine Verdrahtung sieht etwa so aus:?
Mal abgesehen, dass die 9V für die Servos viel zu viel sind (die werden dir sterben) sollte es gehen.
Probier doch mal einen anderen Testsketch.
z.B. einen geänderte Testsketch "sweep" aus der Servolib:
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
// with changes by GuntherB
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo1.attach(3); // attaches the servo on pin 3 to the servo object
myservo2.attach(4);
myservo3.attach(5); // oder andere Pins deiner Wahl
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo1.write(pos); // tell servo to go to position in variable 'pos'
myservo2.write(pos);
myservo3.write(pos);
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo1.write(pos); // tell servo to go to position in variable 'pos'
myservo2.write(pos);
myservo3.write(pos);
delay(15); // waits 15ms for the servo to reach the position
}
}
Ne der aufbau sieht anders aus. Das netzteil hängt nur am arduino, die servos bekommen ihr Gnd und 9V auch vom arduino. Wie hast du das erstellt? Dann kann ichs mal zeigen
Also der aufbau sieht so aus.
Nur hab ich im fritzing mein arduino board ned gefunden, und der arduino uno dens gab, der hatte keinen 9V pin, also sind die servos hier am 5V angeschlossen, wie gesagt, in echt hängen sie am 9V pin.
Das netzteil hängt am anschluß am arduino.
Diese nicht- Verbindung ist der besagte analog0-Gnd- schalter, von dem ich im eröffnungspost geredet hab.
Das board nennt sich "freeduino" und ist anscheinend doch ned so dem duemilanove entsprechend wie im buch beschrieben =(
Meins hat nämlich definitiv nen 9V pin, rechts vom Gnd pin.
Der aufbau war bis auf den analog0 -Gnd schalter der selbe, und lief mit nem sweep-code. Da gings.
Kann ich euch den jetzigen Code per PN schicken, zwecks copyright und so?
Bin nach wie vor überzeugt, dass es wohl mit deinen Verbindung ein Problem besteht.
Bestrome den Arduino mal wie hier im Beispiel. Freeduino wird über USB bestromt falls du kein zweites NT (> 7V || < 20V) hast. Die Servos werden über dein Variables Netzteil gespeißt mit 5V~6V!