Viele Servos mit Arduino steuern

Will man viele Servos mit Arduino steuern, stößt man schnell an die Grenze des Boards. Die USB-Stromversorgung reicht kaum für mehr als einen Servomotor. Um trotzdem viele Servos zu versorgen, gibt es einen Servomotor-Treiber. Diese Erweiterungsplatine kann bis zu 16 Servos steuern und verfügt darüber hinaus über eine Anschlussmöglichkeit für eine externe Stromversorgung. Entwickelt wurde sie von Adafruit und hört auf den schönen Namen PCA9685.

 Adafruit PCA9685

Dieser Servomotor-Treiber wird per I2C-Schnittstelle angesprochen und belegt dadurch nur zwei Arduino-Pins. Zum Betreiben gibt es eine eigene Arduino-Programmbibliothek, die die Nutzung extrem einfach macht.

Spannend am Servomotor-Treiber PCA9685 ist, dass er über Adress-Pins verfügt, die die Nutzung von bis zu 62 Servomotor-Treibern ermöglicht. Das führt zu einer Gesamtanzahl von gleichzeitig steuerbaren Servos von 992!! (die nötige Stromversorgung vorausgesetzt)

Viele Servos mit Arduino steuern - PCA9685

Installation der Adafruit PWM Programmbibliothek

Klicke in der Arduino-Software auf Sketch>Bibliothek einbinden>Bibliothek verwalten. Suche im Textfeld nach Adafruit PWM und installiere die Adafruit PWM Servo Driver Library in der aktuellen Version.

Code – Viele Servos mit Arduino steuern

In diesem Beispiel wird jeder Servo (von 0 bis 15) einmal hin und her bewegt. Den Original-Code findest du in der Arduino-Software unter Datei>Beispiele>Adafruit PWM Servo Driver Library>test.

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN  150
#define SERVOMAX  600

uint8_t servonum = 0;
uint8_t numberOfServos = 16;

void setup() {
  pwm.begin();
  pwm.setPWMFreq(60);
  delay(10);
}

void loop() {
  for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    pwm.setPWM(servonum, 0, pulselen);
  }

  delay(500);
  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    pwm.setPWM(servonum, 0, pulselen);
  }

  delay(500);

  servonum ++;
  if (servonum > numberOfServos-1) servonum = 0;
}

Bezugsquellen des PCA9685

Original PCA9685 von Adafruit (1 Stück für ca. $14.95)
AZDelivery PCA9685 auf Amazon* (3 Stück für ca. 12,99 €)

Projekte mit Servos

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.