Proyecto 40 – Servomotor SG90 + Potenciómetro

En este proyecto de Arduino aprenderás a controlar un servomotor SG90 utilizando un potenciómetro como entrada analógica. Esto te permitirá mover el eje del servo de forma precisa y suave, simplemente girando una perilla.

Se trata de un ejemplo práctico e interactivo para entender cómo Arduino puede traducir una señal analógica (de 0 a 1023) en un movimiento mecánico (de 0° a 180°), abriendo paso a proyectos más complejos como brazos robóticos, mecanismos de seguimiento solar, o animaciones en maquetas. Todo usando componentes básicos y un puñado de líneas de código.

Servomotor SG90

¿Qué es un Servomotor?

Un servomotor es un tipo de actuador rotativo que permite controlar con precisión la posición angular de su eje. A diferencia de un motor convencional que gira libremente al recibir corriente, el servomotor está diseñado para alcanzar y mantener una posición específica.

Está compuesto por un pequeño motor de corriente continua (DC), un sistema de engranajes para aumentar el torque y un circuito de control que compara la posición actual con la posición deseada, corrigiéndola automáticamente si es necesario.

En proyectos con Arduino, el modelo más común es el SG90, un servomotor de 180 grados que puede moverse a una posición específica dentro de ese rango con una simple señal PWM (modulación por ancho de pulso). Esto lo hace ideal para tareas como mover brazos robóticos, controlar compuertas, o dirigir sensores móviles.

Componentes

  • Arduino UNO o placa compatible
  • Protoboard o placa de pruebas
  • Servomotor SG90
  • Potenciómetro 10kΩ
  • Cables o Jumpers
Diagrama de conexiones entre el Arduino, el servo y el potenciómetro
Diagrama de conexiones del Arduino con Servomotor SG90 y el potenciométro

En este proyecto las conexiones son bastante simples, para conectar el Arduino con Servomotor SG90 y el potenciómetro, sólo debemos seguir estos sencillos pasos. El cable amarillo es el que lleva la señal de control desde el Arduino. En este caso, se conecta al pin digital 11. El rojo va al pin de 5V del Arduino, y el negro a GND. Luego tomamos el potenciómetro y conectamos los dos pines externos, uno al GNG y otro a los 5V, el pin del medio lo conectamos al pin A0 del Arduino. Esta configuración es adecuada para controlar un solo servomotor sin necesidad de fuente externa.

La siguiente tabla es la distribución de las conexiones el servo y nuestro Arduino:

Pin del ServoColor del cablePin Arduino
SeñalAmarillo11
VCC(5V)Rojo/naranja5V
GNDNegroGND
Tabla de conexiones entre el el Arduino y el Servomotor SG90

Código

Vamos a ver ahora el código para controlar un servomotor SG90 con un potenciómetro en el Arduino. Para iniciar con el código del proyecto tenemos que incluir una biblioteca propia de Arduino llamada Servo.h, la cual será la encargada de controlar el servomotor.

Esta biblioteca tiene varios métodos para su uso, pero solamente vamos a utilizar atach() y write().

attach(pin): Asocia un objeto Servo a un pin digital del Arduino para comenzar a enviarle señales.

write(angulo): Mueve el servo a un ángulo específico entre 0 y 180 grados, por ejemplo si declaramos un objeto Servo de nombre miServo y ponemos en el código miServo.write(90); el servo debería moverse a la posición de 90°.

#include <Servo.h>

Servo miServo;

int potpin = 0;
int val;

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

void loop() 
{
  val = analogRead(potpin);
  val = map(val, 0, 1023, 0, 180);
  miServo.write(val);
  delay(15);
}

Explicación del código

Vamos a comenzar a revisar el código y como es de costumbre vamos a ver primero la declaración de las variables y las librerías que vamos a utilizar en el proyecto:

#include <Servo.h>

Servo miServo;

int potpin = 0;
int val;

En la primera línea se importa la librería Servo, que contiene funciones especiales para controlar servomotores de forma sencilla. En la siguiente línea se declara un objeto llamado miServo del tipo Servo. Este objeto es el que utilizaremos para controlar el servomotor más adelante.

Las siguientes dos líneas son para declarar dos variables de tipo entero, la primera potpin, es la que utilizaremos para decir el pin análogo al que vamos a conectar el portenciómetro y la variable val que utilizaremos para capturar el valor capturado por el pin del potenciómetro.

Función setup()

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

Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, en nuestro caso encontramos en la primera línea la función miServo.attach(11); que asocia el servomotor al pin digital 11 de Arduino, lo que permite enviarle señales PWM.

Función loop()

val = analogRead(potpin);
val = map(val, 0, 1023, 0, 180);
miServo.write(val);
delay(15);

Comenzaremos revisando el contenido de nuestra función loop, vemos sólo 4 líneas de código en el loop.

En la primera linea asignamos al la variable entera val la captura del pin donde está conectado el potenciómetro, que debe ser un valor entre 0 y 1023.

En la segunda linea hacemos un mapeo del valor capturado anteriormente, donde el mapeo es entre 0-1023 y 0-180 que son los grados del servo.

En la tercera línea le damos al servo el valor al que queremos que se mueva y por último hacemos una pausa de 15 milisegundos, para darle tiempo al servo que se mueva a la posición indicada antes de hacer una nueva lectura.

Resumen

Has dado un paso importante en el mundo del control interactivo con Arduino. Ahora sabes cómo usar un potenciómetro para manipular la posición de un servomotor SG90 en tiempo real, lo que abre las puertas a todo tipo de sistemas donde el movimiento responde a la acción del usuario.

Este proyecto es más que una prueba técnica: es una base para ideas más grandes, como brazos robóticos, mecanismos automatizados y dispositivos que reaccionan al entorno. A partir de aquí, todo depende de tu curiosidad y creatividad.

Sigue experimentando, probando, y sobre todo, ¡divirtiéndote mientras aprendes!


Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.