Jetzt kommt Bewegung ins Spiel

Immer nur Blin­ken, oder viel­leicht mal ein Pie­pen, dass ist auf Dau­er dann doch ein biß­chen zu wenig. Es muss sich doch auch mal etwas bewe­gen. Ergo habe ich in die ers­ten Ser­vos inves­tiert. Nichts beson­de­res, son­dern zum Üben ein­fach nur güns­tig, dass reicht schließ­lich für die ers­ten Ver­su­che.

Basis mei­nes ers­ten Ver­suchs waren das Frit­zing-Pro­jekt Ser­vo und das Ardui­no-Tuto­ri­al Knob, aller­dings habe ich bei­des dahin­ge­hend modi­fi­ziert, dass direkt zwei Ser­vos gegen­läu­fig ein­ge­stellt wer­den.

Dazu waren zwei Schrit­te not­wen­dig:

  1. gegenläufige_ServosDas zwei­te Ser­vo anschlie­ßen.
    Nicht wei­ter schwie­rig. Ein­fach Plus und Minus wie gehabt, die Steu­er­lei­tung in einen der noch frei­en PWM-Anschlüs­se des Ardui­no.
  2. Das zwei­te Ser­vo im Pro­gramm berück­sich­ti­gen.
    Eben­falls eher tri­via­ler Natur, da dank der Ser­vo-Libra­ry ein­fach nur eine wei­te­re Instanz erstellt wer­den muss, um das zwei­te Ser­vo anzu­spre­chen.
// Controlling a servo position using a potentiometer (variable resistor) 
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
// Added a second servo moving in the other direction
// by Markus Jabs <http://markus.jabs.name>

#include <Servo.h>

Servo myservo_1; // create servo object 1 to control servo 1
Servo myservo_2; // create servo object 2 to control servo 2

int potpin = 0;  // analog pin used to connect the potentiometer
int val;         // variable to read the value from the analog pin
int val_1;       // variable to to send to the servo_pin 1
int val_2;       // variable to to send to the servo_pin 2

void setup()
{
  myservo_1.attach(9);   // attaches the servo 1 on pin 9 to the servo object
  myservo_2.attach(10);  // attaches the servo 2 on pin 10 to the servo object
} 

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val_1 = map(val, 0, 1023, 0, 179);   // scale it to use it with the servo 1 (value between 0 and 180)
  val_2 = map(val, 0, 1023, 179, 0);   // scale it backwards to use it with the servo 2 (value between 180 and 0)
  myservo_1.write(val_1);              // sets the servo position according to the scaled value
  myservo_2.write(val_2);              // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

Und sie­he da! Es funk­tio­niert. Die ein­zi­ge Fra­ge die sich mir nun noch stellt ist, wie ich die­ses ner­vö­se Zucken der Ser­vos an bestimm­ten Stel­len des Poten­tio­me­ters unter Kon­trol­le krie­ge.

Im über­nächs­ten Schritt wird dann das Nun­chuk ange­schlos­sen und ein Robo­ter­arm gebaut…

Down­load: Ardui­no-Code | Frit­zing-Datei

Gib auch Du Deinen Senf dazu