Der Servo Motor

Im nächsten Teil wollen wir uns mit dem Servo Motor beschäftigen. Da es sich hierbei um einen Motor handelt, können wir mit dessen Hilfe verschiedene Dinge in der wirklichen, physischen Welt bewegen und ausrichten. Eine Besonderheit ist, dass wir bei diesem Motor genau die Position festlegen können, auf die sich der Motor bewegen soll. Bei DC Motoren gibt es z.B. den großen Nachteil, dass wir bei diesen nur die Geschwindigkeit regulieren können, sie aber nicht wirklich auf eine bestimmte Position ausrichten können. Ein Nachteil an Servo Motoren ist, dass sich die meisten nicht frei über 360° bewegen können, sondern nur beschränkten Winkel von ca. 180° haben. Beim Servo Motor gibt es insgesamt drei Anschlüsse. Das rote und braune Kabel dienen beide für die Stromversorgung. Mit dem orangenfarbenen Kabel können wir Daten auf das Servo übertragen und damit die Ausrichtung des Motors festlegen. Wir können die Position des Servo Pins kontrollieren, indem wir die Spannung an diesem Pin verändern. Normalerweise arbeiten wir z.B. bei LEDs immer nur mit zwei Zuständen, an oder aus. Aber diese reichen in diesem Fall nicht aus. Um noch weitere Zustände zwischen an und aus zu erzeugen, benutzen wir die sogenannte Pulsweitenmodulation oder auch PWM genannt.

PWM

Mit der Pulsweitenmodulation haben wir die Möglichkeit, eine Spannung an einem GPIO Pin zu Modellieren, die zwischen 3,3V und 0V liegt. Wichtig ist dabei zu wissen, dass der Raspberry Pi nur einen GPIO Pin hat, der am besten geeignet ist, wenn es um die Unterstützung der PWM im Bezug auf die Hardware geht und das ist GPIO 18. Wir können uns die Pulsweitenmodulation praktisch so vorstellen, dass der GPIO Pin sehr schnell an und ausgeschaltet wird. Die resultierende Spannung lässt sich über das Verhältniss der Pulsweite zur Periodendauer steuern. Wenn die Pulsweite z.B. genauso lang ist wie die Periodendauer, liegen an dem Pin 3,3V an.

Zum Glück müssen wir uns darum nicht selbst kümmern, sondern dafür hat die RPi.GPIO Bibliothek Funktionen, die uns das Umrechnen erleichtern.

Servo am Pi

Anschlüsse am PiAnschlüsse Servo
GNDbraunes Kabel/GND
VCCrotes Kabel/VCC
GPIO 12orangenes Kabel/Signal

servo.py

import RPi.GPIO as gpio
import time

servo = 18
gpio.setmode(gpio.BCM)
gpio.setup(servo, gpio.OUT)

p = gpio.PWM(servo, 50)
p.start(3)

try:
  while True:
    p.ChangeDutyCycle(7.5)
    time.sleep(1)
    p.ChangeDutyCycle(12)
    time.sleep(1)
    p.ChangeDutyCycle(3)
    time.sleep(1)
except KeyboardInterrupt:
  p.stop()
  gpio.cleanup()

Wenn du dieses Programm ausführst, sollte sich das Servo in einzelnen Schritten zu den festegelten Positionen drehen. Um diese Bewegung besser zu sehen, eignet es sich, die Steckaufsätze auf dem Servo zu befestigen.

Schritt für Schritt erklärt

Die wahre Arbeit mit PWM und dem Servo fängt in Zeile 8 an. Da wir ein PWM Objekt in die Variable p für PWM gespeichert. Dafür wird die Funktion .PWM() aufgerufen. Diese braucht zwei Parameter. Einmal den Pin, in unserem Fall GPIO 18, und die Frequenz in Herz für die PWM. Wie die meisten Servos braucht unser Servo 50Hz.

Im nächsten Schritt initialisieren wir das Servo und übergeben eine Anfangsspannung. Das passiert mit der Funktion .start(). Im nächsten Schritt erstellen wir in Zeile 10 und 11 zuerst eine try-Bedingungen und dann eine While-Schleife. Die try-Bedingung stellen wir auf, damit wenn das Programm unterbrochen wird, in Zeile 19 die Funktion .stop() aufgerufen wird. Diese ist ähnlich zu gpio.cleanup() . In der While-Schleife verändern wir dann mit p.ChangeDutyCycle() die Pulsweite und damit die Ausrichtung des Servo Motors. Es können dabei beliege Werte zwischen 3 und 12 gewählt werden. Dabei steht 3 für 0°, 7.5 für 90° und 12 für 180°. Diese Zahlen können aber auch um ein paar Grad abweichen. Da sich diese Positionsänderungen in einer While-Schleife befinden, wiederholen sich diese immer und immer wieder bis das Programm unterbrochen wird. Das Austauschen der Steckaufsätze macht es auch möglich, die Seite zu wählen, die für das Projekt am interessantesten ist.

Wir können mit PWM aber nicht nur einen Servo steuern, sondern auch die Helligkeit von LEDs verändern. Es gibt auch die Möglichkeit, an anderen Pins mit PWM zu arbeiten, da dies dann aber auf der Software Ebene stattfindet, sind die Resultate deutlich ungenauer und es kann zu Problemen kommen.