Jetzt kommt Bewegung ins Spiel
Immer nur Blinken, oder vielleicht mal ein Piepen, dass ist auf Dauer dann doch ein bißchen zu wenig. Es muss sich doch auch mal etwas bewegen. Ergo habe ich in die ersten Servos investiert. Nichts besonderes, sondern zum Üben einfach nur günstig, dass reicht schließlich für die ersten Versuche.
Basis meines ersten Versuchs waren das Fritzing-Projekt Servo und das Arduino-Tutorial Knob, allerdings habe ich beides dahingehend modifiziert, dass direkt zwei Servos gegenläufig eingestellt werden.
Dazu waren zwei Schritte notwendig:
- Das zweite Servo anschließen.
Nicht weiter schwierig. Einfach Plus und Minus wie gehabt, die Steuerleitung in einen der noch freien PWM-Anschlüsse des Arduino. - Das zweite Servo im Programm berücksichtigen.
Ebenfalls eher trivialer Natur, da dank der Servo-Library einfach nur eine weitere Instanz erstellt werden muss, um das zweite Servo anzusprechen.
// 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 <https://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 siehe da! Es funktioniert. Die einzige Frage die sich mir nun noch stellt ist, wie ich dieses nervöse Zucken der Servos an bestimmten Stellen des Potentiometers unter Kontrolle kriege.
Im übernächsten Schritt wird dann das Nunchuk angeschlossen und ein Roboterarm gebaut…
Download: Arduino-Code | Fritzing-Datei
Gib auch Du Deinen Senf dazu