Lektion 88: Steuerung eines Servomotors mit zwei Drucktasterschaltern
Dieses Projekt zeigt, wie man einen Servomotor mit zwei Drucktasten und einem Arduino steuert. Anstatt auf ein Potentiometer oder einen seriellen Befehl zu setzen, können Sie einfache taktile Schalter verwenden, um einen Servo manuell nach links oder rechts zu bewegen. Dies ist unglaublich nützlich für Anwendungen, bei denen Sie eine direkte, physische Steuerung über einen Mechanismus benötigen, z. B. beim Bau eines Roboterarms, beim Einstellen einer Kamera-Gimbal oder beim Erstellen eines ferngesteuerten Schwenk-Neige-Systems. Die Tasten ermöglichen es Ihnen, den Winkel des Servos schrittweise anzupassen, wobei Sie die Taste gedrückt halten können, um ihn über seinen gesamten Bewegungsbereich zu schwenken.
Hier sind einige praktische Projekte, die Sie mit diesem Aufbau realisieren können:
- Bau eines manuellen Bedienfelds für einen Roboterarm oder -greifer.
- Erstellung eines ferngesteuerten Kamera-Sliders oder Schwenk-Neige-Kopfs.
- Entwicklung einer physischen Steuerungsschnittstelle für ein Modellflugzeug- oder Bootsruder.
- Herstellung eines einfachen "Teach-Pendants" zum Aufzeichnen von Positionen für eine CNC-Maschine oder einen 3D-Drucker.

Hardware und Komponenten
Dieses Projekt erfordert nur wenige grundlegende Komponenten und ist daher ein hervorragender Ausgangspunkt, um sowohl Eingabe- als auch Ausgabegeräte mit dem Arduino kennenzulernen.
- Arduino-Board (Uno, Nano, Mega usw.)
- Servomotor (z. B. SG90 oder MG995)
- Zwei Taster (momentane Drucktasten)
- Jumper-Kabel
- Breadboard (optional, aber empfohlen)
Verdrahtungsanleitung
Im Video ist die Verdrahtung unkompliziert. Das Signalpin des Servomotors ist mit einem PWM-fähigen Pin des Arduino verbunden, in diesem Beispiel Pin 9. Die Stromversorgung und Masse des Servos sind mit den 5V- und GND-Pins des Arduino verbunden. Die beiden Drucktasten sind ähnlich wie einander verdrahtet. Ein Bein jeder Taste ist mit Masse verbunden, und das andere Bein ist mit einem digitalen Eingangspin des Arduino verbunden (Pin 2 für die "Links"-Taste und Pin 3 für die "Rechts"-Taste). Der Code verwendet die internen Pull-up-Widerstände, sodass keine externen Widerstände für die Tasten benötigt werden. (im Video bei 00:57)

Code-Erklärung
Der Code ist so konzipiert, dass er leicht konfigurierbar ist. Die wichtigsten benutzerkonfigurierbaren Teile befinden sich am Anfang des Sketches. Hier ist eine Aufschlüsselung der wichtigen Variablen und Definitionen, die Sie möglicherweise für Ihr eigenes Projekt anpassen möchten.
#include <Servo.h>
Servo myservo; // Servoobjekt zur Steuerung eines Servos erstellen
int servoPin = 9;// dieser Pin muss einer mit PWM ~ sein
int angle =90; // Anfangswinkel für Servo
int angleStep =5;
#define LEFT 2 // Pin 2 ist mit der linken Taste verbunden
#define RIGHT 3 // Pin 3 ist mit der rechten Taste verbunden
servoPin: Diese Variable definiert den Arduino-Pin, mit dem das Signalkabel des Servos verbunden ist. Es ist entscheidend, einen Pin zu verwenden, der Pulsweitenmodulation (PWM) unterstützt, normalerweise mit einem~-Symbol auf dem Board gekennzeichnet.angle: Dies setzt den Anfangswinkel des Servos, wenn der Arduino startet. Der Standardwert ist 90 Grad, was den Servo normalerweise zentriert.angleStep: Dies ist die Schrittweite, um die sich der Servowinkel bei jedem Tastendruck ändert. Ein Wert von 5 bedeutet, dass jede Betätigung den Servo um 5 Grad bewegt. Sie können diesen Wert erhöhen, um eine schnellere Bewegung zu erzielen, oder verringern, um eine feinere Steuerung zu erreichen.LEFTundRIGHT: Diese#define-Direktiven weisen die digitalen Pins zu, mit denen die Drucktasten verbunden sind. Wenn Sie Ihre Tasten an andere Pins anschließen, müssen Sie diese Werte an Ihren Aufbau anpassen.
Die Kernlogik in der loop()-Funktion prüft, ob eine Taste gedrückt ist (durch Lesen eines LOW-Signals aufgrund der Pull-up-Konfiguration). Wenn die "Rechts"-Taste gedrückt wird, verringert sie die angle-Variable um angleStep. Wenn die "Links"-Taste gedrückt wird, erhöht sie den angle. Der Code enthält Grenzprüfungen, um sicherzustellen, dass der Winkel im Bereich von 0 bis 180 Grad bleibt. Die Funktion myservo.write(angle) wird dann verwendet, um den Servo zu befehlen, sich in die neue Position zu bewegen.
Live-Projektdemonstration
In der Videodemonstration wird die Funktionalität deutlich gezeigt. Das Drücken und Halten der "Links"-Taste bewirkt, dass der Servo sanft nach links schwenkt, wobei der Winkel jeweils um 5 Grad erhöht wird, bis er 180 Grad erreicht und stoppt. Ebenso bewirkt das Drücken und Halten der "Rechts"-Taste, dass der Servo nach rechts zurückschwenkt und den Winkel verringert, bis er 0 Grad erreicht. Der aktuelle Winkel wird auf dem seriellen Monitor ausgegeben, sodass Sie die genaue Position des Servos in Echtzeit sehen können. (im Video bei 05:20)
Video-Kapitel
- [00:00] Einführung in die Steuerung eines Servos mit Tasten
- [00:57] Verdrahtungsanleitung für Servo und Drucktasten
- [02:12] Code-Erklärung, Teil 1: Einrichtung und Konfiguration
- [03:25] Code-Erklärung, Teil 2: Die Hauptschleifenlogik
- [05:20] Live-Demonstration des Projekts
- [06:23] Fazit und mögliche Anwendungen
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* 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/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Dinge, die Sie vielleicht brauchen
-
AmazonKaufe Drucktasten bei Amazon.amzn.to
-
Amazon
-
Amazon
-
AmazonServomotor auf Amazonamzn.to
-
eBay
Ressourcen & Referenzen
Dateien📁
Andere Dateien
-
SG90 Seroo Motor-Datenblatt
robojax-servo-SG90_datasheet.pdf0.12 MB