Der Servo am Raspberry Pi

Der Servo am Raspberry Pi Titelbild

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 diese nur "anschalten" können, sie aber nicht wirklich auf eine Position ausrichten können. Ein Nachteil ist an Servo Motoren ist, dass sich die meisten nicht frei über 360° bewegen können, sondern nur einen Winkel von 180° haben. Beim Servo Motor gibt es insgesamt nur drei Anschlüsse. Das rote und braune Kabel dienen beide für die Stromversorgung. Mit dem orangenfarbenen Kabel können wir Daten auf den 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.

Servo Funktionen

PWM

Mit der Pulsweitenmodulation haben wir die Möglichkeit, eine Spannung an einem GPIO Pin zu erzeugen, 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 wieder ausgemacht wird. Das passiert aber so schnell, dass wir einen konstanten Strom erzeugen können. Die Spannung können wir jetzt mit dem sogenannten DutyCycle festlegen. Der DutyCycle beschreibt wie lange der GPIO Pin, bei einmal An- und Ausschalten an und aus ist. Heißt, je länger der DutyCycle ist, umso höher ist die Spannung.

PWM beim Raspberry Pi

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

Servo am Pi

Seervo am Raspberry Pi

Anschlüsse am Pi Anschlüsse Servo
GND Graues Kabel/GND
VCC Rotes Kabel/VCC
GPIO 12 Orangefarbenes 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(2.5)
try:
  while True:
    p.ChangeDutyCycle(7.5)
    time.sleep(1)
    p.ChangeDutyCycle(12.5)
    time.sleep(1)
    p.ChangeDutyCycle(2.5)
    time.sleep(1)
except KeyboardInterrupt:
  p.stop()

Wenn du dieses Programm ausführst, sollte sich der Servo in einzelnen Schritten einmal um sich selbst 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 Hertz Anzahl für die Pulsweitenmodulation. Wie die meisten Servos braucht unser Servo 50 Hertz.

Im nächsten Schritt initialisieren wir den Servo Motor 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() den DutyCycle und damit die Ausrichtung des Servo Motors. Es können dabei beliege Werte zwischen 2.5 und 12.5 gewählt werden. Dabei steht 2.5 für 0°, 7.5 für 90° und 12.5 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 einer 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.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!