====== Modellbau-Servos ====== Modellbau-Servos bieten eine einfach zu handhabende und kostengünstige Möglichkeit, mit dem Arduino kontrollierte Bewegungen auszuführen. Es gibt sie in verschiedenen Größen und Preisen von 3-150€... ===== Servos anschließen ===== Die meisten Modellbauservos haben ein dreiadriges Kabel, welches ihr über die doppelte-Pinleiste in euer Breadboard stecken könnt. Dabei ist * braun oder schwarz: Masse(Ground) * rot: +5V * gelb, weiss oder orange: Signal (Gibt den Winkel vor, den der Servo als nächstes anfährt. Kodiert über eine Pulslänge - weitere Infos z.B. [[http://rn-wissen.de/wiki/index.php/Servos#Ansteuerung:_Signalform_und_Schaltung|hier]]) ===== Ansteuerung ===== Arduino bringt eine Library mit, die euch die Erzeugung des für die Ansteuerung eines oder mehrerer Servos nötigen Signals vereinfacht. Zwei Beispiele dazu findet ihr im Arduino IDE unter [[http://www.arduino.cc/en/Tutorial/Knob|Beispiele/Servo/Knob]] oder [[http://www.arduino.cc/en/Tutorial/sweep|Beispiele/Servo/Sweep]]. ===== Probleme und deren Lösungen ===== ==== Mein Servo macht nicht das, was er soll! (Pulslänge einstellen") ==== Einige Servos (z.B. die mit der Modellbezeichnung "MC-410") benötigen zur Ansteuerung eine andere Pulslänge als die Standardeinstellung in Arduino. Deshalb funktionieren sie mit den Beispielprogrammen nur sehr unzuverlässig. Typischerweise funktionieren kleine langsame Änderungen im mittleren Winkelbereich problemlos, während schnelle Bewegungen oder solche in Randbereichen einfach ignoriert werden. **Glücklicherweise lässt sich die Servo-Library problemlos auf eine andere Pulslänge umstellen!** Um die richtigen Einstellungen zu finden, könnt ihr verschiedene Zeiten durchprobieren. Das geht z.B. mit folgendem Programm: // Aufbau: // Servo mit Signalpin an Pin D3 des Arduino // Poti zum einstellen an 5V--(Poti)--GND // | // A0 // Wenn der Servo fiept und rattert, ist er außerhalb des erlaubten Bereichs - // das solltet ihr nicht ihm nicht allzu lange zumuten... #include Servo myServo; int servoPin = 3; int potiPin = A0; void setup() { Serial.begin(115200); myServo.attach(servoPin); } void loop() { //Lese Potiposition und rechne auf eine Zahl zw. 400 und 2500 um: int servoMicros = map(analogRead(potiPin), 0, 1023, 400, 2500); Serial.println(servoMicros); // Zeit zum Ablesen ausgeben myServo.writeMicroseconds(servoMicros); //Servo einstellen delay(10); } Im Anschluss ändert ihr die Zeile myServo.attach(pinNummer); z.B. in myServo.attach(pinNummer, 800, 2100); // die minimale (800µs) und maximale (2100µs) Pulslänge wurden von Felix für das Model MC410 experimentell ermittelt ==== Mein Programm stürzt dauernd ab! ==== Die Servos sind ziemlich stromhungrig, so dass sie u.U. beim Anlaufen des Motors die Versorgungsspannung am Arduino soweit einbrechen lassen, dass dieser abstürzt und sich neustartet. Das erkennt ihr z.B. daran, dass eine Serielle Ausgabe im Setup-Teil eures Programms immer wieder im Serial-Monitor auftaucht, obwohl euer Programm sie ja eigentlich nur einmal ausführen sollte... Hier gibt es Zwei Lösungen: === Einfacher Notbehelf: Stabilisierung der Spannungsversorgung mit parallel geschalteten Elko === Ein zusätzlicher [[http://de.wikipedia.org/wiki/Kondensator_%28Elektrotechnik%29|Kondensator]], den ihr zur Stromversorgung des Servos [[http://de.wikipedia.org/wiki/Parallelschaltung|parallel geschaltet]] auf euer Breadboard steckt, wirkt wie eine kleine Batterie, die sich beim Einstecken des Arduinos auflädt und in den Momenten, in denen der Servo anläuft, zusätzliche Energie bereitstellt. Die mindestens benötigte Kapazität liegt etwa bei 100µF, deshalb kommt ein Elektrolytkondensator (Elko) zum Einsatz. Den bekommt ihr bei uns im Labor. **//Achtung//! Elkos explodieren, wenn ihr sie falsch herum in eure Schaltung steckt - achtet deshalb unbedingt auf die richtige Polarität! (Weisser Streifen/Minuszeichen nach Ground / 0V)!** === Die "Richtige" Lösung: getrennte Stromversorgungen für Servo und Steuerelektronik === Wenn ihr mehrere, stärkere Servos oder empfindliche Sensorik einsetzt oder ein wirklich zuverlässiges des Systems erforderlich ist, empfielt es sich, getrennte Stromversorgungen für die Motoren bzw. Servos und die Elektronik zu verwenden. Fragt dazu einfach bei den DozentInnen nach - die helfen euch weiter...