Show Posts
Pages: [1]
1  Forum 2005-2010 (read only) / Troubleshooting / Trouble when attaching 3rd servo (Duemilanove 328) on: December 24, 2009, 07:26:56 am
Hi all,

I am trying to build a small robot using an Arduino Duemilanove ATmega328 and Arduino 0017. Everything works fine until I try to attach a third servo (I would like to use at least 5 servos). With just two servos attached a simple program like the one below works without any noticeable problems. However, once the third servo is attached (servo3 in code below), the two other servos behave seemingly random, not following the instructions at all.

This problem also occurs if i use the MegaServo library or when I tried an alternative pin setting.

In the following example servo1 and servo2 are continous servos. This code produces the strange behavior, once line 18 ("servo3.attach(PINS3);") is commented out it runs fine.

Code:
#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;

const int PINS1 = 3;
const int PINS2 = 11;
const int PINS3 = 6;

void setup()
{
  pinMode(PINS1, OUTPUT);
  pinMode(PINS2, OUTPUT);
  pinMode(PINS3, OUTPUT);
  servo1.attach(PINS1);
  servo2.attach(PINS2);
  servo3.attach(PINS3); // this line causes trouble
}


void loop()
{
  // turn one way for 4s
  servo2.write(0);
  servo1.write(0);
  delay(4000);
  // stop for 4s
  servo2.write(90);
  servo1.write(90);
  delay(4000);
  // turn the other way
  servo2.write(180);
  servo1.write(180);
  delay(4000);
  // stop again
  servo2.write(90);
  servo1.write(90);
  delay(4000);
}

Any help is appreciated! Happy holidays!
2  Forum 2005-2010 (read only) / Deutsch / Arduino über Router ansteuern? on: August 17, 2010, 06:18:43 am
Hallo!

Ich habe mir vor langer, langer Zeit ein Ethernetshield für den Arduino gekauft, und habe auch seit einiger Zeit einen alten Linksys WRT54GL herumfliegen, die beiden will ich jetzt gerne miteinander verknüpfen.

Später will ich es so gerne so haben, dass ich den Router über meinen Laptop per W-Lan ansteuer. Der Router gibt dann durch ein Ethernetkabel die Daten an das Ethernetshield weiter welches dann wiederum die Daten an den Arduino übermittelt, welcher dann hoffentlich irgendetwas macht.

Ich wollte mich aber vorher informieren ob das denn im Grunde so möglich ist und ob jemand von euch so etwas schon mal gemacht hat, oder ein gutes Tutorial kennt?
Denn ehrlich gesagt weiß ich noch nicht so recht wie ich an diese Aufgabe herangehen soll, da ich das Ethernetshield z.B. noch nie vorher benutzt habe.

3  Forum 2005-2010 (read only) / Deutsch / Re: Probleme mit meinem Rover-Code on: November 14, 2009, 05:47:14 am
Hallo!

Danke für eure ganzen Tipps ich werde es dann erstmal so machen wir ihr mir geraten habt und das ganze Programm aufdröseln.
Leider hatte ich dazu bis jetzt noch keine Zeit ich hoffe aber das ich die ganze Geschichte an diesem Wochenende zum Ende bringen kann.

Mein Vorwärts-Unterprogramm läuft jetzt auch recht gut, aber es scheint wirklich Probleme mit den Sensoren zu geben, muss ich die noch Deklarieren (Dachte bei analogen Eingängen entfällt das) oder muss ich noch eine Abfragefrequenz oder ähnliches einbauen?

Letzte Frage: Stimmt es denn, dass ich mit der bisherig eingebauten Servo Bilbliothek nur zwei Servos ansteuern kann?
4  Forum 2005-2010 (read only) / Deutsch / Probleme mit meinem Rover-Code on: November 11, 2009, 04:10:18 am
Hallo!

Ich heiße Kai und bin gerade mit meinem ersten Arduino Projekt beschäftigt.
Es handelt sich dabei um einen Rover der zum Antrieb zwei gehackte Servos bekommen hat und zwei IR-Abstandssensoren von Sharp (Modell 2Y0A21) als seine Augen, damit er nicht überall gegenfährt.
Nach und nach sollen dann noch weitere Funktionen hinzugefügt werden, jedoch gibt es schon jetzt die ersten Probleme.

Und zwar reagiert der Rover nicht auf die Sensoren, die Servos drehen sich zwar jedoch auch immer sehr Ruckhaft und für nur kurze Zeit, nicht so schön flüssig wie man das immer auf Youtube so schön bestaunen kann. Ich habe nochmal meine Schaltung überprüft und kann dort keine Fehler finden, ich denke somit liegt es an meinen Programmierfähigkeiten.
Da es mein erstes Programm ist denke ich mal, dass ich ein paar fundermentale Dinge vergessen habe, bitte schaut euch das mal an und helft mir!

Code:
#include <Servo.h>

Servo servobr; //Rechter Servoantrieb
Servo servobl; //Linker Servoantrieb
int maxgeschw = 100; //Maximalgeschwindigkeit
int geschw = 0; //Momentan Geschwindigkeit
int sensorbr = 0; //Anfangswert Rechter Sensor
int sensorbl = 0; //Anfangswert Linker Sensor
int brstop = 90; //Stopwert für rechten Servoantrieb
int blstop = 90; //Stopwert für linken Servoantrieb
int richtung = 1; //Abwechselnder Richtungswert


void setup()
{
  pinMode(9, OUTPUT); //Setzt Pin9 von ServoBR als Output
  pinMode(10, OUTPUT); //Setzt Pin10 von ServoBL als Output
  servobr.attach(9); //Rechter Servoantrieb befindet sich auf Pin 9
  servobl.attach(10); //Linker Servoantrieb befindet sich auf Pin 10
}

void loop()
{
  sensorbr = analogRead(0); //Rechter Sensor liegt auf Pin Analog0
  sensorbl = analogRead(1); //Linker Sensor liegt auf Pin Analog1
  
  vorwaerts();
  
  
  if (sensorbr >= 300 && sensorbl >= 300) //Vollständiges Ausweichen
  {
    halt();
    delay(250);
    rueckwaerts();
    delay(1000);
    if (richtung%2==0)
    {
      rechts();
      delay(750);
    }
    else
    {
      links();
      delay(1000);
    }
    richtung+=1;
  }
  
  if (sensorbr >= 300) //Ausweichen nach Links
  {
    halt();
    delay(250);
    links();
    delay(750);
  }
  
  if (sensorbl >= 300) //Ausweichen nach Rechts
  {
    halt();
    delay(250);
    rechts();
    delay(750);
  }
}

void vorwaerts() //Unterprogramm Vorwärts
{
  for (int i=0; i<=maxgeschw; i+=10)
  {
    geschw = i;
    servobr.write(brstop +geschw);
    servobl.write(blstop -geschw);
  }
}

void rueckwaerts() //Unterprogramm Rückwärts
{
  for (int i=0; i<=maxgeschw; i+=10)
  {
    geschw = i;
    servobr.write(brstop -geschw);
    servobl.write(blstop +geschw);
  }
}

void links() //Unterprogramm links abbiegen
{
  for (int i=0; i<=maxgeschw; i+=10)
  {
    geschw = i;
    servobr.write(brstop -geschw);
    servobl.write(blstop +geschw);
  }
}

void rechts() //Unterprogramm rechts abbiegen
{
  for (int i=0; i<=maxgeschw; i+=10)
  {
    geschw = i;
    servobr.write(brstop +geschw);
    servobl.write(blstop -geschw);
  }
}
void halt() //Unterprogramm anhalten
{
  servobr.write(brstop);
  servobl.write(blstop);
}
Pages: [1]