esp32-servo

Cómo usar un servo con un ESP32

Un servomotor, también conocido como simplemente, es un dispositivo electromecánico que se utiliza para controlar la posición angular de un eje específico a un ángulo específico

A diferencia de los motores convencionales, los servos son dispositivos de lazo cerrado. Es decir contienen sensores y circuitos internos para recibir señales de control y ajustar su posición al ángulo que le indicamos.

Los servos son ampliamente utilizados en proyectos de robótica, impresoras 3D, vehículos teledirigidos, brazos robóticos y otros sistemas donde se requiere un control de movimiento preciso.

Utilizar un servo en el ESP32 con el IDE de Arduino es algo más complicado que con un Arduino convencional, por que el Core del ESP32 para Arduino no incluye una versión de la librería Servo.

Conexión del servo al ESP32

Antes de comenzar a controlar un servo con el ESP32, debemos conectarlo correctamente. Un servo típico tiene tres cables: uno para la alimentación (VCC), otro para la tierra (GND) y uno para el control de la señal (señal).

Aquí está la configuración de los pines del servo:

  • Cable rojo (VCC): Conectar a un pin de 5V del ESP32 o a una fuente de alimentación externa de 5V.
  • Cable marrón o negro (GND): Conectar a un pin GND del ESP32.
  • Cable amarillo o blanco (señal): Conectar a uno de los pines GPIO del ESP32.

Salvo en el caso de servos muy muy pequeños, no debéis alimentar el Servo desde el ESP32. Es más incluso en servos muy pequeños, siempre es mejor si lo alimentáis desde otra fuente.

Biblioteca Servo para el ESP32

Como decíamos, a diferencia de un Arduino “convencional”, el Core del ESP32 no incluye una librería nativa para controlar servos.

En su lugar, tendremos que descargar una. Afortunadamente, la comunidad ha desarrollado varias librerías. Por ejemplo, a mi me gusta esta GitHub - madhephaestus/ESP32Servo: Arduino-compatible servo library for the ESP32

Esta también es muy conocida. Aunque a mi me gusta menos porque tiene menor compatibilidad con las variantes del ESP32 GitHub - RoboticsBrno/ServoESP32: Generate RC servo signal

En cualquier caso, estar atentos a la compatibilidad con vuestro modelo de ESP32, porque no todas las librerías son compatibles con todos los modelos.

Cómo usar un Servo con un ESP32

Incluir la biblioteca Servo

Para comenzar, debemos incluir la biblioteca Servo en nuestro programa. Dependiendo de vuestra librería, deberéis añadir una de las siguientes líneas al comienzo de tu código:

// para la librermadhephaestus
#include <Servo.h>

// para la libreria RoboticsBrno
#include <ESP32Servo.h>

A partir de aquí, el uso del servo debería ser igual a lo que estamos acostumbrados. Ante la duda, consultad la documentación y los ejemplos de la librería que estéis usando.

Crear un objeto Servo

Después de incluir la biblioteca, crea un objeto Servo para interactuar con el servo. Esto se hace mediante la siguiente línea de código:

Servo miServo;

Configurar el pin del servo

Antes de comenzar a usar el servo, necesitamos decirle a la biblioteca Servo en qué pin está conectado. Utiliza la función attach() para hacerlo:

const int pinServo = 18; // Pin GPIO al que está conectado el servo

void setup() 
{
  miServo.attach(pinServo);
}

Controlar el servo

Una vez que hayas configurado el pin, puedes controlar el servo utilizando la función write(). El valor que se pasa como argumento a write() representa el ángulo al que deseas que se mueva el servo. Por ejemplo, un valor de 0 grados moverá el servo a su posición más a la izquierda, mientras que un valor de 180 grados lo moverá a su posición más a la derecha.

void loop() 
{
  miServo.write(0);    // Mover el servo a 0 grados
  delay(1000);         // Esperar 1 segundo
  miServo.write(90);   // Mover el servo a 90 grados
  delay(1000);         // Esperar 1 segundo
  miServo.write(180);  // Mover el servo a 180 grados
  delay(1000);         // Esperar 1 segundo
}

En este ejemplo, el servo se mueve a las posiciones de 0, 90 y 180 grados con un intervalo de 1 segundo entre cada movimiento.