Servos mit dem Raspberry ansteuern

Einen Servo an einem Raspberry zu betreiben ist mit der richtigen Bibliothek einfacher als man denkt. Das Stichwort dafuer ist „ServoBlaster“.

ServoBlaster installieren

mkdir -p ~/servoblaster/ 
cd ~/servoblaster/
git clone https://github.com/richardghirst/PiBits
mv PiBits/ServoBlaster/ . && rm -rf PiBits
cd ServoBlaster/user
sudo make install

Mehr ist es nicht. Jetzt noch den Servo mit den GPIO’s des Raspberry verbiden.

  • 5V (Plus)
  • GND (Minus)
  • PIN17 die Datenleitung

Es ist zu empfehlen den Servo direkt an die 5V Stromquelle anzuschliessen. Der Betriebsstrom des Servos kann unter umstaenden Schaeden im Raspberry hervorrufen.

Nachfolgen noch eine Uebersicht welcher P1 Header welchen GPIO anspricht.

 Servo number    GPIO number   Pin in P1 header
          0               4             P1-7
          1              17             P1-11
          2              18             P1-12
          3             21/27           P1-13
          4              22             P1-15
          5              23             P1-16
          6              24             P1-18
          7              25             P1-22

Nun ist es aber an der Zeit fuer den ersten Test in der shell .

echo 1=90 > /dev/servoblaster
sleep 1
echo 1=150 > /dev/servoblaster
sleep 1
echo 1=250 > /dev/servoblaster

Hierbei ist die 1 nach dem echo Befehl der Servo aus der obigen Liste. Also in unserem Beispiel bedeutet es das durch echo 1=90 der Servo an GPIO 17 auf 90 Grad gestellt wird.

Servomotor ansteuern

Development Board

Einen Servo mit einem Arduino anzusteuern ist kein Hexenwerk. Mit nachfolgendem Sketch können zwei unterschiedliche Positionen angefahren werden.

// Servo Libary 
#include <Servo.h>
 
// Neues Objekt
Servo myservo;
int wert_auf;
int wert_zu;
 
void setup()
{
  // Servo an Pin 9 koppeln
  myservo.attach(9);
  Serial.begin(9600);
}
 
void loop()
{
  
   // Servo auf steuern
  wert_auf = 900;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_auf = map(wert_auf, 0, 1023, 0, 180);  
  myservo.write(wert_auf);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
  delay(1500);

  // Servo zu steuern
  wert_zu = 800;
  // 10-bit Wert des Analogeingangs (0-1023) in Winkel 0-180 umrechnen
  wert_zu = map(wert_zu, 0, 1023, 0, 180);  
  myservo.write(wert_zu);
  // Kurze Pause, damit der Servo die neue Position anfahren kann
   delay(1500);
 

}