Tutorial ESP32 17/55 - Controlando el Servo Motor utilizando ESP32 y Potenciómetro - Kit de Aprendizaje IoT ESP32
En este tutorial, aprenderemos a controlar un servomotor utilizando un microcontrolador ESP32 y un potenciómetro del kit de aprendizaje IoT ESP32 de SunFounder. Al final de este proyecto, podrás ajustar el ángulo del servomotor de manera suave utilizando el potenciómetro, lo que permitirá un control preciso. Esta es una excelente manera de explorar las capacidades del ESP32 y cómo se interconecta con los motores.

A medida que profundizamos en los detalles, cubriremos los componentes de hardware necesarios, las instrucciones de cableado y ejemplos de código para que todo funcione correctamente. Para una representación más visual, asegúrate de consultar el video asociado con este tutorial (en el video a las 0:30).
Hardware explicado
Los componentes principales para este proyecto incluyen el microcontrolador ESP32, un servo motor (SG90) y un potenciómetro. El ESP32 es un microcontrolador potente que ofrece Wi-Fi y Bluetooth integrados, lo que lo hace adecuado para proyectos de IoT. Es capaz de controlar varios dispositivos, incluidos motores, con alta precisión.
El servomotor SG90 es un componente de uso muy común que puede girar aproximadamente 270 grados. Funciona con una señal de modulación de ancho de pulso (PWM), donde el ángulo de rotación se determina por el ancho del pulso enviado a él. El potenciómetro actúa como una resistencia variable, lo que te permite ajustar el voltaje enviado al ESP32, que a su vez controla la posición del servo.
Detalles de la hoja de datos
| Fabricante | SG |
|---|---|
| Número de parte | SG90 |
| Voltaje de lógica/entrada/salida | 3.3 V (ESP32) |
| Tensión de alimentación | 5 V |
| Corriente de salida (por canal) | 1.2 A |
| Corriente pico (por canal) | 2.5 A |
| Orientación de frecuencia PWM | 50 Hz |
| Umbrales de lógica de entrada | 0.2 V (bajo), 2.5 V (alto) |
| Caída de tensión / RDS(on)/ saturación | 0.5 V |
| Límites térmicos | 85 °C máx |
| Paquete | Plástico |
| Notas / variantes | Disponible en diferentes tipos de engranajes |
- Asegúrate de que el servo está alimentado con un voltaje adecuado (5V).
- Conecta la tierra del servo a la tierra del ESP32 para tener una referencia común.
- Utiliza señales PWM apropiadas para controlar la posición del servo.
- Tenga en cuenta los requisitos de corriente del servomotor; use una fuente de alimentación externa si es necesario.
- Verifica las asignaciones de pines correctas al cablear para evitar configuraciones incorrectas.
Instrucciones de cableado

Para cablear el motor servo y el potenciómetro al ESP32, comienza conectando el cable de tierra del servo (típicamente negro o marrón) a uno de los pines de tierra en el ESP32. A continuación, conecta el cable de alimentación (típicamente rojo) del servo al pin de 5V en el ESP32. Finalmente, conecta el cable de señal (típicamente naranja o blanco) del servo al pin.25en el ESP32.
Para el potenciómetro, conecta un pin exterior al pin de 3.3V en el ESP32 y el otro pin exterior a tierra. El pin del medio del potenciómetro debe estar conectado al pin.34en el ESP32. Esta configuración permite que el ESP32 lea la salida de voltaje variable del potenciómetro, que se utilizará para controlar la posición del servo.
Ejemplos de código y guía paso a paso
El siguiente fragmento de código inicializa el servo y establece los parámetros para controlar su movimiento:
#include
Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms
void setup() {
myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
myServo.setPeriodHertz(50); // Standard 50Hz servo
}
En este código, incluimos elESP32Servobiblioteca y crear una instancia del servo con el nombremyServoDefinimos el número de pin para el servo y establecemos los anchos de pulso mínimo y máximo que corresponden a los límites de ángulo del servo.
A continuación, echemos un vistazo al bucle que mueve continuamente el servomotor hacia adelante y hacia atrás:
void loop() {
for (int angle = 0; angle <= 180; angle++) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
for (int angle = 180; angle >= 0; angle--) {
int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);
delay(15);
}
}
Este bucle cambia gradualmente el ángulo de 0 a 180 grados y de vuelta, utilizando elmapfunción para convertir el ángulo en el ancho de pulso correspondiente para el servo. Cada cambio es seguido por una breve pausa para permitir que el servo alcance suavemente su nueva posición.
Demostración / Qué Esperar
Una vez que todo esté conectado y el código esté cargado, deberías ver el servo moviéndose suavemente de 0 a 180 grados y de vuelta. Si ajustas el potenciómetro, el servo debería reflejar la nueva posición según el voltaje proporcionado por el potenciómetro. Ten cuidado con la polaridad revertida al cablear, ya que podría dañar tus componentes (en el video a las 3:45).
Marcas de tiempo del video
- 00:00 Comienzo
- 1:56 ¿Qué es un motor servo?
- 5:00 Página de docs
- 6:33 Explicación del cableado para el servo
- 7:45 Seleccionando el puerto COM para ESP32 en Arduino IDE
- 9:27 Código de Arduino explicado
- 14:31 Demostración del control de servo utilizando ESP32
- Alimentando un servo diferente de 5V
- 18:47 Controlando el servomotor sin el bucle
- 20:15 Controlando el servo con potenciómetro
- 21:37 Explicación del código de Arduino para servo con potenciómetro
Common Course Links
Common Course Files
Recursos y referencias
-
DocumentaciónTutorial ESP32 17/55 - Documentación del motor servo SunFunderdocs.sunfounder.com
Archivos📁
Hoja de datos (pdf)
-
Hoja de datos del motor servo DS5160
DS5160_datasheet.pdf0.33 MB
Otros archivos
-
Descargar la hoja de datos del SG90 (PDF)
robojax-servo-sg90_datasheet.pdf