Lektion 92: Steuern von mehreren Servos, jeweils mit Potentiometer | Arduino Schritt für Schritt Kurs
In diesem Projekt lernen Sie, wie man einen unabhängigen, multi-kanal servo-controller mit einem Arduino Uno und zwei Potentiometern baut. Anstatt dass ein einzelner Servo einen einzelnen Regler folgt, zeigt Ihnen dieser Leitfaden, wie Sie jedem Servo seinen eigenen speziellen analogen Eingang geben, sodass Sie zwei bis zu sechs Servo-Motoren unabhängig und gleichzeitig steuern können. Dies ist ein grundlegender Baustein für jedes Projekt, das eine präzise, manuelle Steuerung mehrerer beweglicher Teile erfordert.

Dieses Setup ist unglaublich vielseitig. Hier sind einige praktische Möglichkeiten, wie Sie es verwenden können:
- Robotik:Steuerung der Schwenk- und Neigefunktion eines Kamera-Gimbals oder der Basis- und Armgelenke eines kleinen Roboters.
- Animatronics:Lebensechte Bewegungen für eine Puppe oder animatronischen Charakter zu erzeugen, indem Kopf und Augen unabhängig gesteuert werden.
- Modellkontrolle:Einen benutzerdefinierten Controller für RC-Fahrzeuge oder Modellflugzeuge zu bauen, um Klappen und Querruder präzise einzustellen.
- Automatisierung:Erstellen einer manuellen Übersteuerungsstation für einen Solartracker oder ein Multi-Achsen-Positionierungsgestell.
Benötigte Hardware
- Arduino Uno (oder jedes kompatible Board)
- 2x Servomotoren (hier werden Standard-180-Grad-Servos verwendet)
- 2x Potentiometer (10kΩ ist eine gängige Wahl)
- Breadboard und Jumperdrähte
- Externes 5V-Netzteil (für mehrere Servos empfohlen)
Verdrahtungsanleitung
Dieses Projekt erfordert etwas mehr Verkabelung als eine Einzelservo-Anordnung, hauptsächlich weil Sie Strom und Masse an mehrere Komponenten verteilen müssen. Der Schlüssel ist, die Stromschienen des Steckbretts zu nutzen, um eine gemeinsame 5V- und GND-Leitung zu erstellen. Ein Schaltplan ist für diesen Aufbau unerlässlich.

Lass uns die Verbindungen aufschlüsseln, wie im Video erklärt (im Video bei 02:23). Zuerst richte deine Stromschienen ein: verbinde das Arduino's5VPin an die positive Schiene des Steckbretts und dieGNDPin an die negative Schiene. Dies gibt Ihnen einfachen Zugang zu Strom für all Ihre Komponenten.
Potentiometeren:Jeder Potentiometer fungiert als Spannungsteiler. Verbinden Sie den rechten Pin jedes Pots mit dem5VSchiene und den linken Stift zu demGNDSchiene. Der mittlere Pin ist der "Wischer" und liefert eine variable Spannung. Verbinden Sie den mittleren Pin des ersten Potenziometers mit dem analogen Eingang.A0und den mittleren Pin des zweiten zuA1(im Video um 03:22).
Servomotoren:Jeder Servomotor hat drei Drähte. Schließen Sie den dunkel gefärbten Draht (normalerweise schwarz oder braun) an denGNDSchiene. Verbinden Sie den mittleren Draht (normalerweise rot) mit dem5VSchiene. Schließlich verbinden Sie den Signaldraht (gewöhnlich orange oder gelb) mit einem PWM-fähigen Pin auf dem Arduino. Der Signaldraht des ersten Servos geht an den Pin3, und der Signaldraht des zweiten Servos geht zu Pin5(im Video bei 04:01). Denken Sie daran, dass Sie PWM-fähige Pins (mit einem Tilde "~" auf dem Uno gekennzeichnet) für die Servosteuerung verwenden müssen.
Code-Erklärung
Der Code basiert auf dem Standardbeispiel "Knopf" aus der Arduino IDE, wurde jedoch modifiziert, um zwei Servos zu steuern. Die Logik ist einfach: den analogen Wert von einem Potentiometer auslesen, ihn auf einen Winkel abbilden und den Servo anweisen, sich zu diesem Winkel zu bewegen. Der Konfigurationsbereich am Anfang des Codes ist der Ort, an dem Sie alle Ihre Anpassungen vornehmen.
Hier ist der benutzerkonfigurierbare Abschnitt, der die Pins definiert und die Servo-Objekte erstellt:
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
Dies ist der Kern der Konfiguration. Um einen dritten Servomotor hinzuzufügen, würden Sie den Block „Servomotor 2 Einstellungen“ kopieren, alle „2“ in „3“ ändern und einen neuen analogen Pin zuweisen (z.B.A2) und einen neuen PWM-Pin (z. B.,9. DieServoDie Klasse ist in die Arduino IDE integriert, daher sind keine zusätzlichen Bibliotheken erforderlich.
In dersetup()Funktion, dieservo.attach(pin)Der Befehl teilt dem Arduino mit, welcher Pin mit dem Signalkabel jedes Servos verbunden ist. Sie müssen eine Zeile für jedes verwendete Servo haben.
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
In derloop(), der Code liest den Wert des Potentiometers aus, ordnet ihn einem Bereich von 0-180 Grad zu und schreibt diesen Winkel an den Servomotor. Derdelay(5)Am Ende handelt es sich um einen Abstimmungsparameter. Wie im Video gezeigt, macht eine Reduzierung dieses Wertes von 15 auf 5 Millisekunden die Servobewegung viel geschmeidiger und beseitigt Vibrationen (im Video um 12:00).
Live-Projekt-Demonstration
Sobald Sie den Schaltkreis verdrahtet und den Code hochgeladen haben, ist die Demonstration sofort. Wenn Sie das Arduino mit Strom versorgen, bewegt sich jeder Servo in eine Position, die durch die aktuelle Einstellung des entsprechenden Potentiometers bestimmt wird. Während Sie einen Knopf drehen, folgt sein Servo der Bewegung sanft. Das Video zeigt, dass die beiden Servos völlig unabhängig arbeiten, was komplexe, gleichzeitige Bewegungen ermöglicht. Wenn Sie ein Zucken oder Vibrieren bemerken, können Sie diedelay()Wert in der Schleife ist das erste, was man versuchen sollte.
Kapitel
- [00:00] Einführung und Projektüberblick
- [00:56] Verständnis von Servomotoren
- Verdrahtungsdiagramm für zwei Servos und Potentiometer
- [04:15] Detaillierte Verdrahtungsbeschreibung
- [06:49] Code-Erklärung: Konfiguration und Einrichtung
- [09:15] Code-Erklärung: Steuerlogik und Zuordnung
- [11:15] Live-Demonstration und Abstimmung
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Dinge, die Sie vielleicht brauchen
-
Amazon
-
Amazon
-
eBay
-
AliExpressKaufen Sie den SG90 Servomotor 180 oder 360 von AliExpresss.click.aliexpress.com
Ressourcen & Referenzen
Noch keine Ressourcen vorhanden.
Dateien📁
Andere Dateien
-
SG90 Seroo Motor-Datenblatt
robojax-servo-SG90_datasheet.pdf0.12 MB