So verwenden Sie einen Servomotor mit dem Raspberry Pi - Make Tech Easier

2022-10-26 11:53:01 By : Mr. Jack Wang

Holen Sie Ihre Überbrückungsdrähte, wir drehen einen Servomotor mit dem Raspberry Pi!Gleichstrommotoren sind großartig, aber es ist schwierig, sie dazu zu bringen, Roboterhände und -finger zu steuern.Man bekommt einfach nicht den richtigen Winkel hin.Aber mit Servomotoren können Sie immer sicher sein, dass sie immer im richtigen Winkel stoppen.Also nimm deine Überbrückungsdrähte und wir drehen einen Servomotor mit dem Raspberry Pi und bringen ihn dazu, in jedem Winkel anzuhalten!Ein Servomotor ist ein Gleichstrommotor, mit dem Sie seinen Winkel steuern können.Sie können es so einstellen, dass es sich um 90 Grad dreht, stoppt und dann um 90 Grad zurückgeht.Sie sind nützlich, wenn Sie Präzision bei einem sich automatisch bewegenden Teil benötigen.In einem Servomotor befinden sich drei Teile: Gleichstrommotor, Potentiometer und eine Schaltung, die den Motor steuert.Die Potentiometer in Servomotoren sind Widerstände, genau wie die Widerstände, die Sie verwenden, wenn Sie LEDs zum Leuchten bringen.Die Ausnahme ist, dass sie Widerstandswerte ändern können, wenn Sie sie drehen.Bei Servomotoren ist das Potentiometer auf den Gleichstrommotor ausgerichtet, so dass es sich dreht, wenn sich der Gleichstrommotor dreht.Dadurch wissen Sie den Winkel der Motorwelle.Die Steuerschaltung sagt ihm, dass er anhalten soll, wenn er einen bestimmten Winkel erreicht.In Anbetracht dessen bedeutet die Verwendung von Servomotoren mit dem Raspberry Pi, dass Sie der Steuerschaltung mitteilen, den Gleichstrommotor zu drehen, bis er einen bestimmten Winkel erreicht.Die Pulsweitenmodulation (PWM) ist das Herzstück dieser ganzen Servobewegung.Es ist eine Methode zur Steuerung des Timings zwischen Pulswellen in einem PWM-Signal.Stellen Sie sich als laienfreundlichere Erklärung vor, dass der Raspberry Pi 3,3 V von Pin 7 aussendet. Auf einem Oszillator, der ein Spannungsdiagramm über die Zeit erstellt, würde dies ein Diagramm auf der 3,3-V-Seite ergeben, das mit der Zeit zu einer langen Linie wird .Wenn es plötzlich auf 0 V abfällt, macht der Oszillator eine vertikale Linie zur 0-V-Seite und dann im Laufe der Zeit eine horizontale Linie von dort.Das nennt man Pulswelle.PWM ist, wenn Sie entweder den Abstand zwischen zwei Pulswellen (Länge 0s) oder die Länge des Pulses selbst (Länge 1s) steuern.Dies wird auch als Arbeitszyklus bezeichnet und ist das, was Sie ändern, während Sie die Funktion ChangeDutyCycle() verwenden.Die PWM-Steuerung ist eine wichtige Funktion in vielen Mikrocontrollern, nicht nur beim Raspberry Pi.Damit können Sie so viele andere Dinge steuern und ausgeben, während Sie nur ein winziges bisschen Strom zum Arbeiten verbrauchen.Servokabel können je nach Hersteller unterschiedliche Farben haben.Verdrahten Sie sie wie folgt mit dem Raspberry Pi:Der Draht, den Sie an Pin 7 anschließen, ist der „Signal“-Draht des Servos.Dieser ist direkt mit der Steuerschaltung verbunden.Wenn Sie nicht genügend Überbrückungsdrähte von Stecker zu Buchse haben, können Sie Ihre eigenen herstellen, indem Sie eine Überbrückungsleitung von Stecker zu Stecker und eine von Buchse zu Buchse miteinander verbinden.Tipp: Wenn Sie Probleme haben, Pin 7 zu finden, halten Sie Ihren Raspberry Pi so, dass die GPIO-Pins rechts liegen.Beginnend mit dem Pin oben links wäre das Pin 1. Rechts davon ist Pin 2. Unter Pin 1 ist Pin 3 und so weiter.Tipp: Es ist einfacher zu sehen, wie sich der Raspberry Pi bewegt, wenn Sie ein Stück Klebeband darauf kleben, aber idealerweise sollten Sie die „Hupe“ verwenden, die dem Servo direkt aus der Verpackung beiliegt.Wie bei den meisten anderen Anweisungen, die wir ausführen, unterteilen wir diesen Code in vier Teile:Wie immer sind dies keine „Standard“-Divisionen.Es ist nur eine gute Praxis, Ihren Code beim Programmieren in kleinere Teile zu unterteilen, um das Bearbeiten und Debuggen viel einfacher zu machen!Im Abschnitt Importbefehle sollten Sie Ihre Module laden.Hier verwenden wir zwei Module: RPi.GPIO und Zeit.import RPi.GPIO as GPIO importiert das RPi.GPIO-Modul und lässt Sie die schwarzen Pins (GPIO) steuern, in die Sie die Codedrähte einfügen. Der letzte Teil dieser Zeile, als GPIO, deklariert eine neue Variable namens GPIO.Hier bedeutet GPIO immer RPi.GPIO, sofern nicht im späteren Teil des Codes geändert.Sie können GPIO durch einen beliebigen anderen Variablennamen ersetzen!from time import sleep ist eine weitere Möglichkeit, ein Modul zu importieren, aber anstatt das gesamte Modul zu importieren, importieren Sie nur einen Teil davon.Hier haben wir nur den Sleep-Teil des Zeitmoduls genommen, mit dem Sie die sleep()-Funktion verwenden und den Code für eine bestimmte Anzahl von Sekunden anhalten können.Mit Setup-Befehlen können Sie Dinge einrichten und definieren, bevor Sie zum geloopten Teil übergehen.servoPin = 7 definiert die Variable servoPin und gibt ihr den Wert 7. Wir verwenden dies, um zu sagen, dass der Pin zur Steuerung des Servomotors Pin 7 sein wird.Warum eine PIN-Nummer definieren?Manchmal, wenn Sie Ihre Meinung ändern und denken, Sie möchten es zum Beispiel auf Pin 40 verschieben, dann ist es einfacher, nur eine Pin-Nummer zu ändern, als den ganzen Code nach der Nummer 7 suchen zu müssen.GPIO.setwarnings(False) stoppt eine Warnmeldung, die Sie sehen, wenn Sie ein Python-Skript ausführen, das die GPIO-Pins verwendet.Es ist standardmäßig auf „True“ gesetzt.GPIO.setmode(GPIO.BOARD) definiert, welche Pinbelegung Sie verwenden.Es gibt zwei Typen: BOARD und BCM.In BOARD definieren Sie Pins basierend darauf, wo sie sich befinden.Pin 1 ist oben links, Pin 2 rechts davon und so weiter.BCM steht für „Broadcom“ und wählt Pins basierend auf ihrem Broadcom SOC-Kanal aus.Dies ist eine PIN-spezifische Nummer.Im Gegensatz zu BOARD ist es bei BCM einfacher, Fehler zu machen, da sich die Pin-Nummer, die Sie verwenden werden, je nach verwendetem Raspberry Pi-Modell ändert.GPIO.setup(servoPin, GPIO.OUT) definiert Pin 7, den Pin, den wir zuvor als servoPin definiert haben, und weist ihn als Ausgangspin zu.pin7 = GPIO.PWM(servoPin, 50) ist eine weitere Variable, die wir definieren.GPIO.PWM (servoPin, 50) bedeutet, dass Sie den servoPinoutput-Pin dazu bringen, ein PWM-Signal freizugeben.Wir werden später über PWM (Pulsweitenmodulation) sprechen.Aber um die Neugier zu stillen, bedeutet PWM, dass Sie den Stift in regelmäßigen Abständen ein- und ausschalten.Der zweite Teil, 50, sagt, dass der Stift zu 50 % des Intervalls eingeschaltet und dann ausgeschaltet werden soll.Schließlich bringt pin7.start(0) Pin 7 dazu, mit der PWM-Sache zu beginnen, und macht es einsatzbereit!Das Programmieren von komplexem Code kann auf zwei Arten erfolgen: Geben Sie dasselbe immer und immer wieder ein und wiederholen Sie es, oder geben Sie es einmal in eine Variable ein und reduzieren Sie zehn Codezeilen auf eine Zeile.„Function“ macht das einfacher, und kein vernünftiger Programmierer würde Ersteres einer netten Funktion vorziehen.Die Funktionen in den Deklarationen sind nur eine riesige „Funktion in einer Funktion“.Wir beginnen zuerst mit der unteren Funktion, sweep(), die die andere Funktion, angleToDutyConvert(), darin verwendet.def Sweep(Grad): definiert einen Funktionsnamen, Sweep, und gibt ihm einen Parameter: Grad.Wir möchten, dass diese Funktion einen Winkel in Grad annimmt und langsam fegt, bis sie diesen Winkel erreicht.Während dieser Zeit druckt es den aktuellen Winkel aus, während es sich bewegt, sodass Sie bereits wissen, wie weit es gegangen ist.Normalerweise bewegen sich Servomotoren so schnell wie möglich zu einem Zielwinkel.Um einen Servomotor langsam „schwenken“ zu lassen, müssen wir ihn in einem kleinen Winkel bewegen und anhalten, bis er den Zielwinkel erreicht.Dazu benötigen wir eine „for“-Schleife.Die Zeile für pos in range(0, degree, +5): ist eine for-Schleife, die die aktuelle Position in Grad in einer Variablen, pos, speichert und zwischen dem Anfangsteil der range()-Funktion, 0, und dem max Wert in Grad, während er um 5 erhöht wird.Sie können sich das so vorstellen: Der Wert für pos beginnt bei 0 und bewegt sich dann um +5.Die for-Schleife prüft, ob sie immer noch unter dem Maximalwert (der Gradteil) liegt.Wenn dies nicht der Fall ist, beginnt es mit dem, was sich innerhalb der Schleife befindet, und geht dann zurück, um +5 zu pos hinzuzufügen.Da es früher 0 war, sollte der nächste Wert 0 + 5 = 5 sein. Es überprüft erneut und wiederholt, bis pos entweder größer oder auf dem gleichen Niveau wie Grad wird.Der nächste Teil macht es umgekehrt.Ausgehend vom Gradwert bewegt sich der Servo um -5, bis der Wert von pos auf 0 sinkt.Sie werden vielleicht bemerken, dass jede for-Schleife zwei Zeilen hat: print(pos) und angleToDutyConvert(pos).Der erste, print(pos), gibt den Wert von pos in die Konsole aus, was die Übersichtlichkeit erleichtert.angleToDutyConvert(pos) hingegen ist diese benutzerdefinierte Funktion in unserer Funktion.Obwohl dies bereits erwähnt wurde, ist es einfacher zu erklären, nachdem erklärt wurde, wofür es verwendet wird. angleToDutyConvert(angle) ist eine benutzerdefinierte Funktion, wie Sweep(Grad).Also wofür ist das?Denken Sie daran, dass Sweep (Grad) eine Zahl in Grad annimmt.Das ist großartig, aber Computer (und die Steuerschaltung des Servos) wissen nicht, was ein „Grad“ ist, aber sie kennen Arbeitszyklen.Bei den meisten Servomotoren ermitteln sie den „Winkel“, indem sie sich die Arbeitszyklen anhören.Um eine Zahl von Grad in Arbeitszyklen umzurechnen, teilen Sie den Winkel durch 18 und addieren 2 zum Quotienten.Genau dafür ist die Zeile dutyCycle = angle / 18 + 2 da.Der nächste Teil der Funktion erledigt die meiste Beinarbeit.GPIO.output (servoPin, GPIO.HIGH) schaltet Pin 7 ein und sendet ein Signal an den Servomotor.pin7.ChangeDutyCycle(dutyCycle) ändert den Arbeitszyklus mit dem Wert von Umwandlungsgraden in Arbeitszyklen, dann hält sleep(0.15) den Code für 0,15 Sekunden an.Die letzten beiden Teile, GPIO.output (servoPin, GPIO.LOW) und ein zweiter Ruhezustand (0,15), schalten Pin 7 vorübergehend aus.Sie sind kein „lebenswichtiger“ Code, helfen aber beim Jitter, besonders wenn Sie möchten, dass das Servo seine Position hält.Es ist Zeit, die Dinge zum Laufen zu bringen.Drehen Sie mit einer While-Schleife den Servomotor mit dem Raspberry Pi so lange, wie Sie möchten.while True: ist eine While-Schleife, die niemals endet.Was auch immer Sie darin platzieren, wird für immer wiederholt, solange Sie es mit Strom versorgen.Aber das eigentliche MVP hier ist die Sweep()-Funktion, das ist die Funktion, die wir zuvor erstellt haben.Sie können weitere davon hinzufügen, um den Servomotor in verschiedenen Winkeln zu bewegen.Denken Sie daran, dass die Zahl, die Sie zwischen die Klammern setzen, der Winkel ist, in den sich das Servo bewegt.Die rote Anzeige-LED zeigt Ihnen an, ob Ihr Raspberry Pi genug Strom hat.Wenn es beim Betrieb eines Servomotors zu sterben beginnt, läuft es wahrscheinlich mit geringer Leistung.Servomotoren benötigen viel Strom, um zu funktionieren, daher möchten Sie vielleicht ein geeignetes Netzteil und mehr als nur ein einfaches Telefonladegerät verwenden.Die meisten Hobby-Servomotoren können nicht mehr als 180 ° drehen.Ihn zu bitten, sich um volle 360° zu drehen, wäre zu weit hergeholt.Aber es gibt auch andere Servos, die sich kontinuierlich drehen: „Kontinuierliche Rotationsservos“.Jitter in Servomotoren kann viele Gründe haben.Geringer Stromverbrauch, Codeprobleme oder einfach nur, weil Sie ein billiges Gerät aus billigen Teilen verwenden.Die Zahnräder könnten falsch ausgerichtet sein.Es kann jedoch hilfreich sein, das PWM-Signal auszuschalten, wenn Sie möchten, dass es an Ort und Stelle bleibt.Unsere neuesten Tutorials werden direkt in Ihren Posteingang geliefertSo erstellen Sie eine .Desktop-Datei für Ihre Anwendung in LinuxSo übertragen Sie Ihren Android-Bildschirm auf Ihren Linux-DesktopSo erstellen Sie symbolische Links (Symlink) in WindowsSo richten Sie Bluetooth unter Linux einSo verwenden Sie Google Authenticator auf einem Windows-PC6 Möglichkeiten zum Überprüfen des Festplattenzustands in WindowsSo umgehen Sie Paywalls führender Nachrichten-WebsitesSo unterlasten Sie Ihre CPU mit Throttlestop in WindowsInstagram funktioniert nicht?Hier sind 14 Möglichkeiten, das Problem zu behebenOffenlegung von Partnern: Make Tech Easier kann Provisionen für Produkte verdienen, die über unsere Links gekauft werden, was die Arbeit unterstützt, die wir für unsere Leser leisten.© 2022 Uqnic Network Pte Ltd. Alle Rechte vorbehalten.