Servomoteur SG90

So steuern Sie einen Servomotor mit dem Raspberry Pi

Aktualisiert 29 Oktober 2019 - 0 Kommentare - , , , ,

ⓘ Dieser Artikel wurde möglicherweise teilweise oder vollständig mit automatischen Tools übersetzt. Wir entschuldigen uns für etwaige Fehler.

Dieses Tutorial ist der dritte Teil einer Datei, die sich mit der Entdeckung der Elektronik mit dem Raspberry Pi befasst. Wenn Sie es nicht gelesen haben, empfehle ich Ihnen, das erste Tutorial zur Steuerung einer LED mit dem Raspberry Pi sowie das zweite Tutorial zur Verwendung eines RFID-Lesegeräts mit dem Raspberry Pi zu konsultieren.

Wenn Sie mit der Heimautomation beginnen, besteht ein klassisches Bedürfnis darin, die physische Bewegung in der Realität über ein Programm zu steuern.

In diesem Tutorial erfahren Sie, wie Sie mit dem Raspberry Pi einen Servomotor steuern.

Zubehör zur Steuerung eines Servomotors

Um diesem Tutorial folgen und einen Servomotor steuern zu können, benötigen wir folgendes Material:

Was ist der Unterschied zwischen Motor, Servomotor und Schrittmotor?

Bevor wir beginnen, unseren Servomotor an unseren Raspberry Pi anzuschließen, werfen wir einen Blick auf die verschiedenen Motortypen, die üblicherweise in der Elektronik verwendet werden.

Ohne auf Details einzugehen, können wir die in der Elektronik verwendeten Motoren grob in drei Kategorien einteilen:

  • Der Motor: Er läuft solange er angetrieben wird. Es ist geeignet, wenn Sie eine kontinuierliche Bewegung ausführen möchten, die keine große Präzision erfordert.
  • Der Schrittmotor: Er dreht sich in einer Art kleinen aufeinanderfolgenden Sprüngen. Das heißt, Sie können ihn bitten, beispielsweise 50 Sprünge oder 112 Sprünge auszuführen, die einer bestimmten Bewegung entsprechen (z. B. eine viertel Umdrehung). Es ist geeignet, wenn Sie eine kontinuierliche Bewegung mit hoher Präzision ausführen möchten (sie werden beispielsweise in 3D-Druckern verwendet).
  • Der Servomotor: Er dreht sich in einem bestimmten Winkel, der gemäß einem PWM-Signal (Pulse Width Modulation) definiert ist. Oft sind kleine Motoren begrenzt und können nicht mehr als eine Umdrehung ausführen. Sie werden daher eher für eine kurze Bewegung von großer Präzision verwendet.
Verschiedene Motortypen
Von links nach rechts ein Motor, ein Schrittmotor und ein Servomotor.

Zu diesen verschiedenen Motoren gibt es noch viele andere Dinge zu sagen, aber wir werden uns dann mit mechanischen Fragen befassen, die weit über den Rahmen unseres Tutorials hinausgehen.

In unserem Fall werden wir einen Servomotor verwenden, da dies der am einfachsten von einem Raspberry Pi zu steuernde Präzisionsmotor ist.

Schließen Sie einen Servomotor an den Raspberry Pi an

Das erste, was Sie tun müssen, um unseren Servomotor verwenden zu können, ist, ihn an den Raspberry Pi anzuschließen.

Die Aktuatoren haben 3 elektrische Anschlüsse. Die Farben können sich je nach Hersteller ändern, aber im Allgemeinen finden Sie Folgendes:

  • Ein roter Draht, der als Stromversorgung dient.
  • Ein schwarzer oder brauner Draht, der als GDN dient.
  • Ein weiterer Draht, der zur Übertragung des PWM-Signals verwendet wird, das die Position des Motors steuert.

Wir werden daher diese verschiedenen Kabel an den Raspberry Pi anschließen, das rote Kabel an einen 5-Volt-GPIO-Anschluss und das schwarze an einen GND-Anschluss.

Für den PWM-Port hingegen müssen wir ihn unbedingt an den 12. GPIO-Pin des Raspberry Pi anschließen. In der Tat ist es der einzige GPIO-Pin, der standardmäßig ein PWM-Signal unterstützt.

Sie sollten also eine solche Montage haben.

Montageplan eines Servomotors am Raspberry Pi
Roter Draht -> GPIO 2, schwarzer Draht -> GPIO 6, gelber Draht -> GPIO 12

Beachten Sie, dass wir hier unseren Servomotor direkt vom Raspberry Pi aus antreiben. Dies funktioniert, weil wir einen sehr kleinen Servomotor verwenden, aber bei einem größeren Modell benötigen wir ein spezielles Netzteil.

Steuern Sie den Servomotor in den Befehlszeilen

Nachdem wir unseren Servomotor angeschlossen haben, können wir ihn direkt über die Raspberry Pi-Befehlszeile fahren.

Zu diesem Zweck aktivieren wir zunächst den PWM-Modus an Port 12, d. H. GPIO 18, gemäß der Prozessornummerierung.

gpio -o mode 18 pwm

Und wir werden den Mark / Space-Modus von PWM aktivieren, der es ermöglicht, ein Signal zu erhalten, das besser für unsere Verwendung geeignet ist.

gpio pwm-ms

Schließlich konfigurieren wir die Dauer eines Zyklus, die zu verwendenden Frequenzen usw.

Der Servomotor ist so eingestellt, dass er mit einer Frequenz von 50 Hz, d. H. 20 ms, arbeitet. Das Raspberry Pi-Signal arbeitet mit einer anderen Frequenz, 19,2 MHz. Mit diesen beiden Zahlen können wir einen Zeitraum und einen Bereich berechnen (dank ramboise314.fr für die Formel):

50 = 19.2 * 10^6 / 192 / 2000
Auszug aus der SG90-Dokumentation.
Die Motordokumentation zeigt ein Diagramm des Zeitraums und des Arbeitszyklus eines SG90.

Wir werden daher den Raspberry Pi so einstellen, dass folgende Werte verwendet werden:

gpio pwmc 192
gpio pwmr 2000

Endlich können wir unseren Motor zum Laufen bringen! Beachten Sie, dass wir keinen Winkel zum Servomotor übergeben, sondern eine Zahl, die in einen Winkel umgewandelt wird. Unser Servomotor geht von 0 ° bis 180 °. Nach einigen Tests scheint 0 ° 230, 90 ° bis 150 und 180 ° bis 70 zu entsprechen.

Um unseren Motor um 90 ° zu senden, verwenden wir daher den Befehl:

gpio -g pwm 18 150

Und wir werden 150 durch 230 ersetzen, um auf 0 ° zu gehen, 70, um auf 180 ° zu gehen, oder einen beliebigen Wert dazwischen, je nach Bedarf.

Beachten Sie, dass diese kleinen Motoren einen Winkel von 180 ° auf präzise Weise unterstützen, aber einen kleinen Rand haben, der dazu führen kann, dass sie 190 ° oder 200 ° machen und sogar eine vollständige Drehung ausführen, wenn Sie einen ausreichend niedrigen Wert einstellen. Es ist spezifisch für jedes Motormodell.

Fahren Sie den Servomotor mit Python

Wie bei den vorherigen Tutorials in dieser Reihe besteht das Ziel eher darin, unsere Engine mit Python zu steuern, als direkt über die Befehlszeilen. Ich denke, dass Sie jetzt die Grundlagen von Python haben. Wenn Sie nicht die vorherigen Tutorials lesen, finden Sie Links am Anfang dieses Artikels.

Um unsere Engine über ein Python-Skript zu steuern, verwenden wir erneut die lib Rpi.GPIO.

In Python und auf dem Pi wird der Motorwinkel als Prozentsatz des Zyklus berechnet. Dieser Prozentsatz wird als "Arbeitszyklus" bezeichnet.

Ein 0,5-ms-Signal entspricht 0 ° und ein 2,5-ms-Signal entspricht 180 °. Da wir wissen, dass unser Zyklus 50 Hz, d. H. 20 ms, beträgt, können wir den Arbeitszyklus für 0 ° und 180 ° folgendermaßen berechnen:

x = 0.5 / 20
y = 2.5 / 20

Wir stellen dann fest, dass der Arbeitszyklus, der 0 ° entspricht, 0,025 oder 2,5% beträgt und derjenige, der 180 ° entspricht, 0,125 oder 12,5% beträgt.

Kleines Problem, wenn dieser Wert theoretisch gut ist, neigt er tatsächlich dazu, eine volle Umdrehung des Motors für 0 ° auszulösen … Ich empfehle daher, 4% für 0 ° zu verwenden. Der Wert 12,5% für 180 ist gut.

Um den Motor zu steuern, müssen wir nur Pin 12 als unser PWM-Signal setzen und die Funktionen verwenden start und ChangeDutyCycle.

Sie können daher eine Datei erstellen servo.py und geben Sie dort den folgenden Code ein:

#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO
import time


#Set function to calculate percent from angle
def angle_to_percent (angle) :
    if angle > 180 or angle < 0 :
        return False

    start = 4
    end = 12.5
    ratio = (end - start)/180 #Calcul ratio from angle to percent

    angle_as_percent = angle * ratio

    return start + angle_as_percent


GPIO.setmode(GPIO.BOARD) #Use Board numerotation mode
GPIO.setwarnings(False) #Disable warnings

#Use pin 12 for PWM signal
pwm_gpio = 12
frequence = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequence)

#Init at 0°
pwm.start(angle_to_percent(0))
time.sleep(1)

#Go at 90°
pwm.ChangeDutyCycle(angle_to_percent(90))
time.sleep(1)

#Finish at 180°
pwm.ChangeDutyCycle(angle_to_percent(180))
time.sleep(1)

#Close GPIO & cleanup
pwm.stop()
GPIO.cleanup()

Alles, was Sie tun müssen, ist das Skript auszuführen, indem Sie Folgendes tun:

python3 ./servo.py

Sie sollten dann sehen, wie Ihr Motor bei 0 ° startet, dann auf 90 ° schalten und schließlich bei 180 ° anhalten.

Alles was Sie tun müssen, ist dieses Skript an Ihre eigenen Bedürfnisse anzupassen!

Aktie
Newsletter
Autor:
Raspberry Pi FR
Treten Sie der Raspberry Pi-Community bei
Ein 35-Euro-Computer verkaufte sich bereits 10 Millionen Mal
KAUFEN SIE DEN NEUEN RASPBERRY PI 4
Verwandte Tutorials
Offizielle Tastatur und Maus für den Raspberry Pi freigegeben. Verwenden Sie einen Domainnamen mit dem Raspberry Pi, um ihn über das Internet zugänglich zu machen. So installieren Sie mehrere OS auf dem Raspberry Pi mit BerryBoot. Installieren Sie eine virtuelle Touch-Tastatur auf dem Raspberry Pi. Kaufen Sie Ihren Raspberry Pi 3B + und sein Zubehör, unseren Einkaufsführer!
Keine Kommentare
Aktie
Newsletter abonnieren
Abonnieren Sie den Newsletter.
Hat Ihnen dieser Artikel gefallen?
Abonnieren und auf dem Laufenden bleiben!