Ein Servo besteht aus zwei Komponenten. Zum Einen aus einem DC-Motor, der für das benötigte Drehmoment sorgt. Zum Anderen aus einem Dreh-Potentiometer, welches den IST-Winkel der Drehachse bestimmt. Bei den drei Anschlüssen des Servos handelt es sich um GND, eine Eingangsspannung (diese hängt vom Bedarf des Servos ab) und dem PWM-Signal. Über dieses Signal wird der SOLL-Winkel an den Servo gesendet. Durch den Vergleich von IST- und SOLL-Winkel wird eine etwaige Korrektur des Winkels per DC-Motorleistung ermöglicht. PWM (Pulsweitenmodulation): Es wird eine Periodenlänge beliebig festgelegt. Innerhalb dieser Periode liegt nur eine bestimmte Zeit lang Strom an, für den Rest der Periode liegt die Spannung bei 0V. Der Teil der Periode, in welchem Strom anliegt, wird prozentual angegeben und „Duty Cycle“ genannt.
import RPi.GPIO as GPIO import time import os GPIO.setwarnings (False) #So deaktivieren wir Bildschirmwarnungen GPIO.setmode(GPIO.BOARD) #Deklaration der GPIO Pins auf die des Boards GPIO.setup(11, GPIO.OUT) #Pin Nr.11 als Ausgang einstellen print "L = Nach links drehen" #Anlegen eines Menues print "R = Nach rechts drehen" print "M = Mittelposition" print "Q = Verlassen" While True: #eigentliche Programmschleife Servo = GPIO.PWM(11, 50) #PWM-Signal mit 50Hz starten Servo.start(5) input = raw_input("Auswahl: ") if(input == "r"): #Nach rechts drehen Servo.ChangeDutyCycle(2.5) #äußerst rechte Position einnehmen time.sleep(1) #Warten Servo.stop() elif(input=="l"): #Äquivalent für eine Drehung nach links Servo.ChangeDutyCycle(12.5) time.sleep(1) Servo.stop() elif(input=="m"): #Drehung in die Mittelposition Servo.ChangeDutyCycle(5) #Servo in Mittelposition bringen time.sleep(1) Servo.stop() elif(input=="q") #Programm schliessen und in die Shell zurueckkehren print("Programm schliessen") os._exit(1) Servo.stop() GPIO.cleanup() #GPIO Belegungen löschen else: print "ungueltige Eingabe"