Arduino Tutorial - Servo

Ein Servo ist ein kleines Gerät, das eine Abtriebswelle hat. Sie können kleine Servomotoren direkt an einen Arduino anschließen und die Wellenposition sehr genau steuern, indem dem Servo ein codiertes Signal gesendet wird.

Solange das codierte Signal in der Eingangsleitung vorhanden ist, behält der Servo die Winkelposition der Welle bei. Wenn sich das codierte Signal ändert, ändert sich die Winkelposition der Welle.

In der Praxis werden Servomotoren verwendet, um die Position von Objekten zu steuern, Objekte zu drehen, Beine, Arme oder Hände von Robotern zu bewegen oder Sensoren mit hoher Präzision bewegen zu können. Da die Servomotoren klein sind und da integrierte Schaltkreise zur Steuerung ihrer Bewegung haben, können sie direkt an einen Arduino angeschlossen werden.

 

Wie funktioniert ein Servo?

Ein Servo verfügt über einige Steuerkreise und ein Potentiometer (einen variablen Widerstand, auch Poti genannt), der mit der Ausgangswelle verbunden ist. Mit diesem Potentiometer kann die Steuerschaltung den aktuellen Winkel des Servomotors überwachen.

Wenn sich die Welle im richtigen Winkel befindet, schaltet der Motor ab. Wenn die Schaltung feststellt, dass der Winkel nicht korrekt ist, wird der Motor in die richtige Richtung gedreht, bis der Winkel korrekt ist. Die Abtriebswelle des Servos kann sich um 180 Grad bewegen. Normalerweise liegt es irgendwo im 210-Grad-Bereich, variiert jedoch je nach Hersteller. Mit einem normalen Servo wird eine Winkelbewegung zwischen 0 und 180 Grad gesteuert. Ein normaler Servo kann sich mechanisch nicht weiterdrehen, da ein mechanischer Anschlag am Hauptausgangsgetriebe angebracht ist.
Die an den Motor angelegte Leistungsmenge ist proportional zur Entfernung, die er zurücklegen muss. Wenn also die Welle eine große Strecke drehen muss, läuft der Motor mit voller Drehzahl. Wenn nur ein geringer Betrag gedreht werden muss, läuft der Motor langsamer. Dies wird als Proportionalsteuerung bezeichnet.

Wie kommunizieren Sie den Winkel, in dem sich das Servo drehen soll? Der Steuerdraht wird verwendet, um den Winkel mitzuteilen. Der Winkel wird durch die Dauer eines Impulses bestimmt, der an den Steuerdraht angelegt wird. Dies wird als pulscodierte Modulation bezeichnet. Der Servo erwartet alle 20 Millisekunden (0,02 Sekunden) einen Impuls. Die Länge des Impulses bestimmt, wie weit sich der Motor dreht. Bei einem Impuls von 1,5 Millisekunden dreht sich der Motor beispielsweise in die 90-Grad-Position (oft als Neutralposition bezeichnet). Wenn der Impuls kürzer als 1,5 ms ist, dreht der Motor die Welle auf 0 Grad. Wenn der Impuls länger als 1,5 ms ist, dreht sich die Welle näher an 180 Grad.

 

 

Wie Sie im Bild sehen können, bestimmt die Dauer des Impulses den Winkel der Abtriebswelle (als grüner Kreis mit dem Pfeil dargestellt). Beachten Sie, dass die Zeiten hier illustrativ sind und die tatsächlichen Zeiten vom Hersteller des Motors abhängen. Das Prinzip ist jedoch dasselbe.

Ansteuerung des Servos mit einem Arduino

In diesem Experiment verbinden wir die Strom- und Masse-Pins direkt mit den Arduino 5 V- und GND-Pins. Der PWM-Eingang wird an einen der digitalen Ausgangspins des Arduino angeschlossen.

Verbinden Sie den Motor mit dem Arduino wie in der folgenden Tabelle gezeigt:

  • Rotes Kabel - 5 V Pin Arduino
  • Braunes/schwarzes Kabel - Erdungspin Arduino
  • Gelbes Kabel- PWM (10) Pin Arduino

 

 

Arduino Servo Code

/*
Arduino Servo Test sketch
*/
#include <Servo.h>
Servo servoMain; // Define our Servo
void setup()
{
servoMain.attach(10); // servo on digital pin 10
}
void loop()
{
servoMain.write(45); // Turn Servo Left to 45 degrees
delay(1000); // Wait 1 second
servoMain.write(0); // Turn Servo Left to 0 degrees
delay(1000); // Wait 1 second
servoMain.write(90); // Turn Servo back to center position (90 degrees)
delay(1000); // Wait 1 second
servoMain.write(135); // Turn Servo Right to 135 degrees
delay(1000); // Wait 1 second
servoMain.write(180); // Turn Servo Right to 180 degrees
delay(1000); // Wait 1 second
servoMain.write(90); // Turn Servo back to center position (90 degrees)
delay(1000); // Wait 1 second
}

Passend dazu

feetech-fs90-micro-servo_600x600.jpg
FEETECH FEETECH FS90 Micro Servo
Sonderpreis2,20 €
Auf Lager, 154 Stück
power-hd-continuous-rotation-servo-ar-3606hb_1_600x600.jpg
Pololu Power HD Continuous Rotation Servo AR-3606HB
Sonderpreis18,84 €
Nicht auf Lager, mit Lieferzeit bestellbar

Passend zu diesem Artikel

View all
adafruit-motor-stepper-servo-shield-for-arduino-v2-kit-00_600x600.jpgadafruit-motor-stepper-servo-shield-for-arduino-v2-kit-03_600x600.jpg
Adafruit Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit
Sonderpreis14,37 €
Auf Lager, 10 Stück
feetech-fs90r-micro-continuous-rotation-servo_600x600.jpg
FEETECH FEETECH FS90R Micro Continuous Rotation Servo
Sonderpreis2,80 €
Auf Lager, 67 Stück
sg92r-micro-servo-01_600x600.jpgsg92r-micro-servo-02_600x600.jpg
Adafruit SG92R Micro servo
Sonderpreis2,90 €
Auf Lager, 16 Stück
feetech-fs90-micro-servo_600x600.jpg
FEETECH FEETECH FS90 Micro Servo
Sonderpreis2,20 €
Auf Lager, 154 Stück
feetech-ft90r-digital-micro-continuous-rotation-servo-01_600x600.jpgfeetech-ft90r-digital-micro-continuous-rotation-servo-02_600x600.jpg
FEETECH FEETECH FT90R Digital Micro Continuous Rotation Servo
Sonderpreis2,50 €
Auf Lager, 57 Stück
HTB1YbCINXXXXXbUXFXXq6xXFXXXs__600x600.jpgFeetech-Fitec-FM90-9g-Micro-DC-Motor_600x600.jpg
FEETECH FM90 9g Micro DC Motor gear box in servo body
Sonderpreis1,30 €
Auf Lager, 94 Stück
16-channel_12-bit_pwmservo_shiled_-_i2c_intercface_iso_lrg_600x600.jpg16-channel_12-bit_pwmservo_shiled_-_i2c_intercface_kit_lrg_600x600.jpg
Adafruit Adafruit 16-Channel 12-bit PWM/Servo Shield - I2C interface
Sonderpreis7,23 €
Nur noch 1 Mal auf Lager
power-hd-micro-servo-hd-1900a_600x600.jpg
Pololu Power HD Micro Servo HD-1900A
Sonderpreis6,36 €
Auf Lager
9G-Metal-Gear-Mini-High-Torque-Servo_600x600.jpg9G-Metal-Gear-Mini-High-Torque-Servo-2_600x600.jpg
FEETECH FT90M-FB Metal Gear Mini High Torque Servo
Sonderpreis4,50 €
Nur noch 2 Mal auf Lager