Raspberry Pi Pico: Servo-Motor SG90 steuern und testen
Der Servo-Motor SG90 ist ein kleiner Servo-Motor, der oft unter der Bezeichnung Micro- oder Mini-Servo bekannt ist. Er eignet sich überall dort, wo mit wenig Kraftaufwand etwas bewegt werden soll.
Der SG90 ist ein per PWM-Signal gesteuerter Servo-Motor. Die Position wird über den Winkel in Grad definiert. Der Drehbereich liegt ungefähr zwischen 0 und 180 Grad.
Es geht darum, den Servo-Motor SG90 zu testen und die Zubehörteile, die auf die Achse gesteckt werden können auszurichten.
Wenn Du noch nicht mit dem Servo-Motor SG90 gearbeitet hast, dann schaue Dir bitte die grundlegenden Informationen zum SG90 an.
Warn- und Sicherheitshinweise
Es gibt gute Gründe, warum Anlagen und Aufbauten über Notausschalter verfügen (meist gelber Kasten mit rotem Druckknopf). Selbst kleine Motoren können genug Kraft haben, um Dinge zu beschädigen oder Personen zu verletzen.
Wenn Du die folgenden Warnhinweis nicht befolgst, wirst Du zwangsläufig mit zerstörten oder beschädigten Teilen oder Objekten rechnen müssen.
- Wenn Du mit den folgenden Programmcodes experimentierst, dann sollte der angeschlossen Motor ausgebaut sein. Gemeint ist, die Motorachse sollte sich frei bewegen können. Warum? Wenn Du versehentlich falsche Werte im Programmcode verwendest, Dein Programmcode einen Fehler enthält oder der Motor in einer unbekannten Stellung steht, dann kann Dein Motor das zerstören was an ihm befestigt ist oder in Kontakt kommt, sobald er ein Steuerungssignal bekommt und zu drehen beginnt.
- Wenn Dein Motor nicht das macht, was Du erwartest, dann NICHT den Programmcode unterbrechen oder beenden, sondern die Betriebsspannung des Motors unterbrechen. Warum? Wenn Du falsche Werte im Programmcode verwendest, dann dreht der Motor sich unter Umständen immer weiter, weil das PWM-Signal immer noch anliegt. Der Motor hört erst dann auf zu drehen, wenn seine Stromversorgung unterbrochen wird.
- Bei Programmende sollte immer ein Abschalten des PWM-Signals im Programmcode erfolgen.
Aufbau und Bauteile
Raspberry Pi Pico | SG90 | |
---|---|---|
Pin 40 | +5V VBUS | VCC |
Pin 38 | GND | GND |
Pin 34 | GPIO 28 | PWM |
Sicherheitshinweis: Dein Aufbau sollte eine leicht zugängliche Unterbrechung der VCC-Leitung des Motors vorsehen, damit der Motor im Notfall schnell außer Betrieb genommen werden kann (Notaus).
Schnell und einfach alle Bauteile zusammen bestellen
Programmcode: Steuerung über die Pulsdauer (Zeit)
Im Programmcode sind verschiedene Werte für bestimmte Positionen definiert. Außerdem wird ein PWM-Signal für den Motor initialisiert.
Anschließend wird das Duty Cycle des PWM-Signals mehrmals verändert, um dem Motor die Positionsänderung mitzuteilen.
Bitte vor dem Ausführen des Programmcodes die oben genannten Sicherheitshinweise beachten.
# Bibliotheken laden from machine import Pin, PWM from time import sleep # GPIO für Steuersignal servo_pin = 28 # 0 Grad grad000 = 500000 # 45 Grad grad045 = 1000000 # 90 Grad grad090 = 1500000 # 135 Grad grad135 = 2000000 # 180 Grad grad180 = 2500000 pwm = PWM(Pin(servo_pin)) pwm.freq(50) print('Position: Mitte (90 Grad)') pwm.duty_ns(grad090) sleep(2) print('Position: Ganz Links (0 Grad)') pwm.duty_ns(grad000) sleep(2) print('Position: Mitte (90 Grad)') pwm.duty_ns(grad090) sleep(2) print('Position: Ganz Rechts (180 Grad)') pwm.duty_ns(grad180) sleep(2) print('Position: Mitte (90 Grad)') pwm.duty_ns(grad090) sleep(2) pwm.deinit() print('Ende')
Am Ende des Programmcodes befindet sich der Servo-Motor in der Mittelstellung bzw. 90-Grad-Position.
Programmcode: Steuerung über Dezimalzahlen
Im Programmcode sind verschiedene dezimale Werte für bestimmte Positionen definiert. Außerdem wird ein PWM-Signal für den Motor initialisiert.
Anschließend wird das Duty Cycle des PWM-Signals mehrmals verändert, um dem Motor die Positionsänderung mitzuteilen.
Bitte vor dem Ausführen des Programmcodes die oben genannten Sicherheitshinweise beachten.
# Bibliotheken laden from machine import Pin, PWM from time import sleep # GPIO für Steuersignal servo_pin = 28 # 0 Grad grad000 = 1638 # 90 Grad grad090 = 4915 # 180 Grad grad180 = 8192 pwm = PWM(Pin(servo_pin)) pwm.freq(50) print('Position: Mitte (90 Grad)') pwm.duty_u16(grad090) sleep(2) print('Position: Ganz Links (0 Grad)') pwm.duty_u16(grad000) sleep(2) print('Position: Mitte (90 Grad)') pwm.duty_u16(grad090) sleep(2) print('Position: Ganz Rechts (180 Grad)') pwm.duty_u16(grad180) sleep(2) print('Position: Mitte (90 Grad)') pwm.duty_u16(grad090) sleep(2) pwm.deinit() print('Ende')
Am Ende des Programmcodes befindet sich der Servo-Motor in der Mittelstellung bzw. 90-Grad-Position.
Troubleshooting: Es kann sein, dass der Motor sich mit den definierten, dezimalen Werten im Programmcode nicht steuern lässt. Das könnte daran liegen, dass der Motor das PWM-Signal nicht akzeptiert. Dann muss man für diesen Motor durch Ausprobieren herausfinden, was die minimale und maximale Dezimalzahl ist und wo die Mittelstellung liegt.
Beobachtungen, Erklärungen und Erkenntnisse
Wenn Du Dir anschaust, in welche Richtung die Motor-Achse gedreht wird und welche Richtung in der Kommandozeile angezeigt wird, dann wird die angezeigte Richtung vermutlich falsch sein. Das könnte daran liegen, dass Du auf den Motor aus der falschen Richtung schaust. Führe den Programmcode noch einmal aus und schaue von hinten (Blick auf die Unterseite des Gehäuses) auf den Motor. Plötzlich stimmt die Richtungsangabe wieder.
Warum ist das wichtig? Im ersten Moment ist es irrelevant. Aber, für den Einsatz des Motors spielt es dann doch eine große Rolle, wie die Richtungen des Motors bezeichnet werden. Zum Beispiel Links und Rechts, Oben und Unten oder minimal und maximal. Es ist wichtig gleich am Anfang diese Richtungen zu definieren, namentlich zu benennen, ihnen Werte zuzuweisen und auch im Programmcode zu dokumentieren.
Als Werte kann die Position bzw. Winkel in Grad verwendet werden. Zum Beispiel 0 und 180 Grad. Aber auch die Zeit in Millisekunden des High-Pegels des PWM-Signals, um diese Position zu erreichen, eignet sich dafür.
Desweiteren solltest Du klären, wie herum Dein Servomotor eingebaut und befestigt werden muss. Du solltest ihn tatsächlich einbauen und testen, ob Dein Motor in der Lage ist die gewünschte Position zu erreichen und auch die notwendige Kraft hat, diese Position zu erreichen, wenn da ein kräftemäßiger Widerstand ist.
Darf es ein bisschen mehr sein?
Was kann man denn alles so mit einem Servo-Motor vom Typ SG90 bewegen oder betätigen?
Was alles mit dem Servo-Motor SG90 möglich ist, hängt von Deiner Kreativität und handwerkliche Geschicklichkeit ab. Wir möchten Dir hier ein paar Ideen genannt, die Du umsetzten kannst.
Weitere verwandte Themen:
- Raspberry Pi Pico: Servo-Motor SG90 mit Tastern steuern
- Raspberry Pi Pico: Servo-Motor SG90 mit Drehschalter KY-040 steuern
- Raspberry Pi Pico: Servo-Motor SG90 mit IR-Sensor FC-51 berührungslos Schalten
- Raspberry Pi Pico: Grundlagen zur PWM
- Raspberry Pi Pico: Vibrationsmotor steuern
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.