This tutorial is part of: Servomotoren
Alle video's over servomotoren die hiermee verband houden, staan hier vermeld. Links naar andere video's vindt u onder dit artikel.
Een servo besturen met drukknoppen met behulp van Arduino
In deze tutorial leren we hoe we een servomotor kunnen aansturen met twee drukknoppen, één om de servo naar links te bewegen en één om hem naar rechts te bewegen. Wanneer je de rechterknop indrukt, beweegt de servo 10 graden naar rechts, en wanneer je de linkerknop indrukt, beweegt hij hetzelfde aantal graden naar links. Als je een knop ingedrukt houdt, blijft de servo in die richting bewegen totdat je de knop loslaat.

Dit project is een geweldige manier om te begrijpen hoe je knoppen kunt koppelen aan een servomotor met behulp van Arduino. We behandelen de benodigde hardwarecomponenten, bedradingsinstructies en de code die nodig is om alles te laten werken. Voor een duidelijker begrip kun je verwijzen naar de video die bij deze tutorial hoort (in video op 01:00).
Hardware Uitgelegd
Voor dit project heb je een Arduino-bord, een servomotor en twee drukknoppen nodig. De servomotor is verantwoordelijk voor de beweging, terwijl de drukknoppen fungeren als invoer om de richting van die beweging te regelen. De Arduino verwerkt deze invoer en stuurt de juiste signalen naar de servo.
De servomotor werkt op basis van pulsbreedtemodulatie (PWM)-signalen. Door verschillende pulsbreedtes te sturen, kun je de hoek van de servo regelen. De drukknoppen worden aangesloten op digitale ingangspinnen van de Arduino, en we gebruiken interne pull-up-weerstanden om de bedrading te vereenvoudigen.
Datasheet Details
| Fabrikant | Diversen |
|---|---|
| Onderdeelnummer | SG90 |
| Logica/IO-spanning | 5 V |
| Voedingsspanning | 4,8–6 V |
| Uitgangsstroom (per kanaal) | 1,5 A max |
| Piekstroom (per kanaal) | 2,5 A max |
| PWM-frequentierichtlijn | 50 Hz |
| Ingangslogische drempels | 0,3VCC tot 0,7VCC |
| Spanningsval / RDS(on) / verzadiging | 0,4 V |
| Thermische limieten | 85 °C |
| Behuizing | Kunststof |
| Opmerkingen / varianten | Standaard 180° rotatie |
- Zorg ervoor dat de servo geschikt is voor jouw voedingsspanning.
- Gebruik geschikte koeling als je op hoge stromen werkt.
- Sluit knoppen aan op aarde met pull-up-configuratie.
- Debounce je knoppen als je grillig gedrag ervaart.
- Bewaak de seriële uitvoer voor het debuggen.
Bedradingsinstructies

Om de componenten te bedraden, begin je met het aansluiten van de servomotor. Verbind de rode draad van de servo met de 5V-pin op de Arduino, de zwarte draad met de GND-pin, en de gele of witte signaaldraad met pin 9 op de Arduino. Deze pin regelt de positie van de servo.
Sluit vervolgens de drukknoppen aan. Verbind één aansluiting van de rechterknop met pin 2 en de andere aansluiting met aarde. Voor de linkerknop verbind je één aansluiting met pin 12 en de andere aansluiting ook met aarde. Deze opstelling zorgt ervoor dat de interne pull-up-weerstanden de pinnen hoog houden wanneer de knoppen niet worden ingedrukt.
Codevoorbeelden & Uitleg
Laten we beginnen met de code voor het aansturen van de servo met een enkele drukknop. De code initialiseert het servo-object en stelt een beginhoek in. Hier is een kort fragment:
int angle = 90; // beginhoek voor servo
int angleStep = 10; // stapgrootte voor beweging
In dit fragment vertegenwoordigt angle de huidige positie van de servo, terwijl angleStep definieert hoeveel de servo beweegt bij elke knopdruk. Deze code is essentieel voor het bijhouden van de positie van de servo.
Vervolgens hebben we de setup-functie waarin we de servo bevestigen en de ingangspinnen configureren:
void setup() {
Serial.begin(9600); // seriële verbinding instellen
myservo.attach(9); // bevestigt de servo op pin 9
pinMode(2, INPUT_PULLUP); // configureer knop-pin
}
In de setup initialiseren we de seriële monitor en bevestigen we de servo aan pin 9. De knop op pin 2 wordt ingesteld als invoer met een pull-up-weerstand, wat de bedrading vereenvoudigt en externe weerstanden overbodig maakt.
Tenslotte bekijken we de loop-functie die de knopdruk afhandelt:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // verhoog hoek
myservo.write(angle); // beweeg servo
}
Deze lus controleert continu of de knop is ingedrukt. Wanneer deze is ingedrukt, neemt de hoek toe met de gedefinieerde stap, en beweegt de servo dienovereenkomstig. Het is cruciaal om ervoor te zorgen dat de hoek binnen de grenzen blijft (0 tot 180 graden) om schade aan de servo te voorkomen.
Demonstratie / Wat te Verwachten
Wanneer je de rechterknop indrukt, moet de servo naar rechts bewegen in stappen van 10 graden totdat hij het maximum van 180 graden bereikt. Op dezelfde manier beweegt het indrukken van de linkerknop hem naar links. Als je een knop ingedrukt houdt, blijft de servo in die richting bewegen totdat je de knop loslaat (in video op 01:00).
Veelvoorkomende valkuilen zijn bedradingsproblemen, zoals onjuiste verbindingen of zwevende ingangen. Zorg er altijd voor dat je verbindingen stevig zijn en dat je de juiste pinnen gebruikt zoals gespecificeerd in de code.
This tutorial is part of: Servomotoren
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Een servo besturen met een potentiometer met behulp van Arduino
- Een servo besturen met potentiometer en LCD1602 met behulp van Arduino
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Arduino Servo Motorbesturing met een Potentiometer
- Servo-positie besturen met handgebaren voor Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Hoe een continue 360° servo met Arduino te gebruiken
- Arduino-code en video voor PCA9685 16-kanaals 12-bits servocontroller V1
- Bouw een Arduino-servo-toggleschakelaar met een drukknop
/*
Controlling a servo with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
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
}//
}
Dingen die je misschien nodig hebt
-
AmazonServo motor on Amazonamzn.to
-
AliExpressPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Geen bestanden beschikbaar.