Este tutorial es parte de: Servomotores
Todos los videos relacionados con servomotores se listan aquí. Los enlaces a otros videos se encuentran debajo de este artículo.
Controlar un servomotor con pulsadores usando Arduino
En este tutorial aprenderemos cómo controlar un servomotor usando dos pulsadores: uno para mover el servomotor hacia la izquierda y otro para moverlo hacia la derecha. Cuando pulses el botón derecho, el servomotor se moverá 10 grados hacia la derecha, y cuando pulses el botón izquierdo, se moverá la misma cantidad hacia la izquierda. Si mantienes pulsado un botón, el servomotor seguirá moviéndose en esa dirección hasta que lo sueltes.

Este proyecto es una excelente manera de entender cómo conectar botones a un servomotor usando Arduino. Cubriremos los componentes de hardware necesarios, las instrucciones de cableado y el código necesario para que todo funcione. Para una comprensión más clara, puede consultar el video que acompaña este tutorial (en el video a las 01:00).
Hardware explicado
Para este proyecto necesitarás una placa Arduino, un servomotor y dos pulsadores. El servomotor es el encargado del movimiento, mientras que los pulsadores actúan como entradas para controlar la dirección de dicho movimiento. El Arduino procesa estas entradas y envía las señales apropiadas al servomotor.
El servomotor funciona basándose en señales de modulación por ancho de pulso (PWM). Al enviar pulsos de diferente ancho, puedes controlar el ángulo del servomotor. Los pulsadores se conectarán a pines de entrada digital del Arduino y utilizaremos resistencias internas de pull-up para simplificar el cableado.
Detalles de la ficha técnica
| Fabricante | Varios |
|---|---|
| Número de pieza | SG90 |
| Voltaje lógico/E/S | 5 V |
| Tensión de alimentación | 4.8-6 V |
| Corriente de salida (por canal) | 1.5 A máx. |
| Corriente de pico (por canal) | 2,5 A máx. |
| Guía de frecuencia PWM | 50 Hz |
| Umbrales de lógica de entrada | 0.3VCCa 0,7 VCC |
| Caída de tensión / RDS(encendido)/ saturación | 0.4 V |
| Límites térmicos | 85 °C |
| Paquete | Plástico |
| Notas / variantes | Rotación estándar de 180° |
- Asegúrese de que el servomotor esté clasificado para su tensión de alimentación.
- Utilice disipadores de calor adecuados si opera con corrientes elevadas.
- Conecte los botones a tierra con configuración pull-up.
- Aplica antirrebote a tus botones si experimentas un comportamiento errático.
- Monitorea la salida serie para la depuración.
Instrucciones de cableado

Para cablear los componentes, comience conectando el servomotor. Conecte el cable rojo del servomotor al pin de 5V del Arduino, el cable negro al pin GND y el cable de señal amarillo o blanco al pin 9 del Arduino. Este pin controlará la posición del servomotor.
A continuación, cablea los pulsadores. Conecta un terminal del pulsador derecho al pin 2 y el otro terminal a tierra. Para el pulsador izquierdo, conecta un terminal al pin 12 y el otro terminal también a tierra. Esta configuración permite que las resistencias de pull-up internas mantengan los pines en alto cuando los pulsadores no están presionados.
Ejemplos de código y guía paso a paso
Empecemos con el código para controlar el servo con un solo pulsador. El código inicializa el objeto servo y establece un ángulo inicial. Aquí tienes un breve extracto:
int angle = 90; // initial angle for servo
int angleStep = 10; // step size for movement
En este fragmento,anglerepresenta la posición actual del servo, mientras queangleStepDefine cuánto se mueve el servo con cada pulsación de botón. Este código es esencial para rastrear la posición del servo.
A continuación, tenemos la función setup donde adjuntamos el servomotor y configuramos los pines de entrada:
void setup() {
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9
pinMode(2, INPUT_PULLUP); // configure button pin
}
En la función setup, inicializamos el monitor serie y conectamos el servo al pin 9. El botón en el pin 2 se configura como entrada con una resistencia pull-up, lo que simplifica el cableado y evita la necesidad de resistencias externas.
Finalmente, vemos la función loop que maneja la pulsación del botón:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // increment angle
myservo.write(angle); // move servo
}
Este bucle comprueba continuamente si se pulsa el botón. Cuando se pulsa, el ángulo aumenta en el paso definido y el servo se mueve en consecuencia. Es crucial asegurarse de que el ángulo se mantenga dentro de los límites (0 a 180 grados) para evitar daños al servo.
Demostración / Qué esperar
Al presionar el botón derecho, el servo debería moverse hacia la derecha en incrementos de 10 grados hasta alcanzar el máximo de 180 grados. De manera similar, al presionar el botón izquierdo se moverá hacia la izquierda. Si mantienes pulsado un botón, el servo seguirá moviéndose en esa dirección hasta que sueltes el botón (en el video en 01:00).
Los errores más comunes incluyen problemas de cableado, como conexiones incorrectas o entradas flotantes. Asegúrese siempre de que sus conexiones estén firmes y de que esté utilizando los pines correctos según lo especificado en el código.
Este tutorial es parte de: Servomotores
- 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)
- Controlar un servomotor con un potenciómetro usando Arduino
- Controlar un servomotor con potenciómetro y LCD1602 usando Arduino
- Controlando motores servo utilizando un control remoto por infrarrojos con Arduino
- Control de motor servo Arduino usando un potenciómetro
- Controlando la posición del servo con gestos de la mano para Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Código y vídeo de Arduino para el controlador de servos PCA9685 de 16 canales y 12 bits V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
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
}//
}
Cosas que podrías necesitar
-
AmazonasMotor servo en Amazonamzn.to
-
AliExpressCompra el servo motor SG90 de 180 o 360 en AliExpress.s.click.aliexpress.com
Recursos y referencias
Aún no hay recursos.
Archivos📁
No hay archivos disponibles.