Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

servo [2016/06/28 11:34] – created peltzerservo [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +==== Servo ====
  
 +=== Was ist das? ===
 +
 +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.
 +
 +=== Bild ===
 +
 +{{20151105_102523.jpg?nolink&500|}}
 +
 +
 +=== Schaltplan ===
 +
 +{{servo-fritzing.jpg?nolink&500|}}
 +
 +
 +=== CODE ===
 +
 +<file python Servo.py>
 +
 +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"
 +
 +</file>