En este tutorial, aprenderemos cómo controlar un motor servo usando un mando IR y un Arduino. Los motores servo se utilizan ampliamente en diversos proyectos, incluyendo robótica, automatización y vehículos controlados a distancia. Al integrar un sensor IR con una placa Arduino, podemos recibir comandos de un mando IR y usarlos para controlar la posición o la velocidad del motor servo.
Controlar un motor servo con un mando IR abre un mundo de posibilidades. Puedes usarlo para construir un brazo robótico controlado a distancia, crear un mecanismo de paneo e inclinación para una cámara, o incluso construir un coche controlado por mando. ¡Las posibilidades son infinitas!
Antes de entrar en detalles, echemos un vistazo a los componentes que necesitarás para este proyecto.
Componentes necesarios
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
A continuación encontrarás los componentes requeridos para este proyecto. Si ya tienes un mando IR, entonces no necesitarás el Kit receptor de mando IR, solo el módulo receptor IR. Sin embargo, no todos los mandos IR serán adecuados. Por otro lado, si compras o tienes el Kit, no necesitarás el módulo receptor IR, ya que forma parte del Kit.

Arduino Uno

Juego de cables Dupont

Protoboard

Cable USB para Arduino UNO

Módulo receptor IR

Kit receptor de mando IR

Servo

Arduino IDE
Conexión de los componentes
En esta sección conectaremos los componentes al Arduino. La imagen a continuación muestra el cableado completo. Comenzamos con la alimentación de la protoboard.

Conexión de la protoboard
Primero, conecta el pin marcado como Ground (GND) en el Arduino con un cable negro o azul al riel de tierra de la protoboard (marcado con una línea azul). Luego conecta el pin marcado como 5V (Power) en el Arduino con un cable rojo al riel de alimentación de la protoboard (marcado con una línea roja).

Conexión del sensor IR
Comenzamos con el cable de señal para conectar el sensor IR. Encuentra el pin marcado como S o Signal en el módulo del sensor IR y conéctalo con un cable amarillo al pin 8 del Arduino.
A continuación conectamos la alimentación. Normalmente, el pin central del módulo del sensor IR es el positivo. Usa un cable rojo para conectar ese pin al riel de alimentación positivo de la protoboard. Finalmente, conecta el tercer pin restante del módulo del sensor IR al riel de tierra negativo de la protoboard.

Conexión del motor servo
El último componente a conectar es el motor servo. Primero, conecta el cable marrón del servo al riel de tierra negativo de la protoboard con un cable marrón o negro. Luego conecta el cable rojo del servo al riel de alimentación positivo; preferiblemente con un cable rojo.

Finalmente conectamos el cable de señal naranja del servo al pin 9 de la placa Arduino.

Una vez que hayas terminado con el cableado de los componentes, es mejor revisar que todo esté correctamente conectado. Presta especial atención a las conexiones de alimentación. No queremos un cortocircuito.
A continuación, te mostraré el código necesario.
Escribiendo el código para Arduino
A continuación encontrarás el código completo para tener una visión general. Permite rotar el servo hacia la izquierda o derecha en pasos de 10 grados al presionar el botón NEXT o PREV en el mando. Vamos a desglosar este código y explicar su función.
#include <IRremote.hpp>
#include <Servo.h>
#define IR_RECEIVE_PIN 8
#define SERVO_PIN 9
Servo servo;
const int range = 780;
const int mid = 1600;
int pos = 90;
int speed = 10;
void rotate(int angle) {
angle = map(angle, 0, 180, mid - range, mid + range);
servo.writeMicroseconds(angle);
}
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
servo.attach(SERVO_PIN);
rotate(pos);
}
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Definiciones
Primero incluimos dos librerías. La IRremote librería, que es necesaria para entender los comandos que envía el mando IR. Y la Servo librería, que nos ayuda a controlar el servo.
#include <IRremote.hpp> #include <Servo.h>
Luego definimos constantes, IR_RECEIVE_PIN y SERVO_PIN que especifican qué pines del Arduino se usan para leer la señal IR y para controlar el servo.
#define IR_RECEIVE_PIN 8 #define SERVO_PIN 9
Después definimos el objeto servo y dos constantes (range y mid), que ajustan el rango de movimiento del servo, y mid define la posición central del servo. Además, declaramos dos variables (pos, speed) que describen la posición actual del servo y la velocidad (o pasos de ángulo) con la que gira.
Servo servo; const int range = 780; const int mid = 1600; int pos = 90; int speed = 10;
Rotando el servo
Para rotar el servo a un ángulo específico, definimos una función especial rotate(). Básicamente, mapea el ángulo dado, que debe estar entre 0 y 180 grados, a la longitud de pulso correspondiente necesaria para controlar el servo.
void rotate(int angle) {
angle = map(angle, 0, 180, mid - range, mid + range);
servo.writeMicroseconds(angle);
}
Para más detalles, consulta nuestro tutorial sobre las diferencias entre continuous and positional servos. Presta especial atención a la sección que explica cómo ajustar finamente tu servo.
Setup
En la función setup(), simplemente indicamos a la librería del receptor IR y a la librería Servo qué pines se usan para el receptor IR y el control del servo. Además, rotamos el servo a la posición de 90 grados. Ten en cuenta que aquí asumimos un servo posicional común.
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
servo.attach(SERVO_PIN);
rotate(pos);
}
Bucle principal
Finalmente, implementamos la función loop() que se ejecuta continuamente.
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Comenzamos esperando una señal del receptor IR llamando a IrReceiver.decode(). Si recibimos un comando, lo decodificamos mediante IrReceiver.decodedIRData.command.
Dependiendo del valor del comando, aumentamos la posición, pero no más de 180 grados, o la disminuimos, pero no menos de 0 grados. Para eso sirven las funciones min() y max() .
Qué valor de comando corresponde a qué tecla del mando IR dependerá del mando que estés usando. ¡Consulta nuestro tutorial sobre How to use an IR receiver and remote with Arduino para aprender a identificar los códigos de comando de tu mando! En mi caso, 8 corresponde al botón de siguiente pista y 2 al botón de pista anterior en mi mando.
Finalmente, rotamos el servo a la posición usando rotate(pos) y le indicamos al receptor IR que busque un nuevo comando mediante IrReceiver.resume().
Consejos
Ten en cuenta que puedes aumentar el ángulo de paso o la velocidad con la que el servo se mueve entre posiciones aumentando o disminuyendo el valor de la variable speed . Incluso podrías hacer esto usando el mando añadiendo dos comandos más para reaccionar, por ejemplo:
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
speed = min(speed + 1, 90);
} else if (command == 23) { // VOL-
speed = max(speed - 1, 1);
} else if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Aquí uso los botones de volumen de mi mando para controlar la velocidad. Como antes, los códigos de comando para tu mando pueden ser diferentes y tendrás que ajustar el código en consecuencia.
Aplicaciones
Brazo robótico
Usa el motor servo para controlar el movimiento de un brazo robótico. El brazo puede programarse para realizar diversas tareas como recoger objetos, moverlos o incluso jugar.
Control de persianas
Automatiza la apertura y cierre de persianas usando el motor servo y el mando IR. Esto te permite controlar la cantidad de luz que entra en una habitación con solo pulsar un botón.
Comedero para mascotas
Crea un comedero automático para mascotas que dispense comida en horarios específicos usando el motor servo. Usa el mando IR para activar manualmente el proceso de alimentación si es necesario.
Sistema de riego para plantas
Construye un sistema de riego para plantas que use el motor servo para controlar el flujo de agua. Usa el mando IR para activar el sistema y regar tus plantas a distancia.
Cerradura inteligente
Construye un sistema de cerradura inteligente que use el motor servo para bloquear y desbloquear la puerta. Usa el mando IR para controlar la cerradura remotamente o configura un teclado para acceso seguro.
Iluminación ambiental
Crea un sistema de iluminación ambiental que use el motor servo para ajustar el brillo o el color de las luces. Usa el mando IR para cambiar la configuración de la iluminación y crear diferentes ambientes.
Cortinas automáticas
Controla la apertura y cierre de cortinas usando el motor servo y el mando IR. Esto te permite ajustar fácilmente la cantidad de luz que entra en una habitación o crear privacidad.
Limpiador robótico de acuario
Construye un limpiador robótico de acuario que use el motor servo para moverse y limpiar el tanque. Usa el mando IR para controlar sus movimientos y patrones de limpieza.
Instalación artística interactiva
Crea una instalación artística interactiva que use el motor servo para controlar partes móviles o esculturas. Usa el mando IR para activar diferentes movimientos y atraer a los espectadores.
Conclusiones
En este tutorial, hemos aprendido cómo controlar un motor servo usando un mando IR. Siguiendo los pasos descritos en esta guía, puedes implementar fácilmente esta funcionalidad en tus propios proyectos.
Comenzamos reuniendo los componentes necesarios, incluyendo un Arduino Uno, un juego de cables Dupont, una protoboard, un módulo receptor IR, un kit receptor de mando IR y el Arduino IDE. Estos componentes son esenciales para construir el circuito.
Luego conectamos los componentes. Conectamos la protoboard al Arduino Uno, asegurándonos de que todas las conexiones fueran correctas. Después, conectamos el sensor IR a la protoboard y el motor servo al Arduino Uno. Estas conexiones permiten que el Arduino reciba señales del mando IR y controle el motor servo en consecuencia.
Tras completar la configuración del hardware, pasamos a escribir el código para Arduino. Definimos las variables y librerías necesarias, y luego implementamos el código para rotar el motor servo según las señales recibidas del mando IR. También configuramos la posición inicial del servo en la función setup y comprobamos continuamente las señales del mando IR en el bucle principal.
Finalmente, proporcionamos algunos consejos para mejorar el control de tu motor servo con un mando IR. Estos consejos incluyen usar diferentes botones del mando para activar distintos movimientos del servo, ajustar la velocidad del servo e incorporar otros sensores o módulos en tu proyecto.
En conclusión, controlar un motor servo con un mando IR abre un amplio abanico de posibilidades para tus proyectos con Arduino. Ya sea que quieras construir un brazo robótico, un gimbal para cámara o cualquier otro proyecto que requiera control preciso del motor, este tutorial te ha proporcionado el conocimiento necesario para empezar.
Si tienes más preguntas o necesitas aclaraciones sobre alguno de los pasos descritos en este tutorial, consulta la sección de Preguntas Frecuentes a continuación. ¡Feliz creación!
Preguntas frecuentes
Aquí tienes algunas preguntas comunes relacionadas con el control de un motor servo con un mando IR:
P: ¿Puedo usar cualquier mando IR con este proyecto?
R: Sí, puedes usar cualquier mando IR siempre que sea compatible con Arduino. La mayoría de los mandos IR usan el protocolo NEC, que es compatible con la librería IR de Arduino. Sin embargo, si tienes un tipo diferente de mando IR, puede que necesites modificar el código en consecuencia. Lo más probable es que tengas que ajustar el código a los códigos de comando de tu mando. Para más detalles, consulta here.
P: ¿Cómo encuentro los códigos de los botones de mi mando IR?
R: Para encontrar los códigos de los botones de tu mando IR, puedes usar el IRrecvDumpV2 example sketch proporcionado por la librería IR de Arduino. Alternativamente, sigue nuestro tutorial.
Sube el sketch a tu Arduino, abre el Monitor Serial y pulsa los botones de tu mando. Los códigos se mostrarán en el Monitor Serial. Luego puedes usar estos códigos en tu código Arduino para asignar los botones a movimientos específicos del motor servo.
P: ¿Puedo controlar varios motores servo con un solo mando IR?
R: Sí, puedes controlar varios motores servo con un solo mando IR. Necesitarás conectar cada motor servo a un pin diferente del Arduino y modificar el código para controlar cada motor servo de forma independiente. Puedes asignar diferentes botones del mando IR para controlar distintos motores servo.
P: ¿Cómo ajusto el rango de movimiento del motor servo?
R: El rango de movimiento del motor servo puede ajustarse modificando los valores en las funciones servo.attach() y servo.write() en el código Arduino. La función servo.attach() establece el rango de movimiento del motor servo, mientras que la función servo.write() especifica el ángulo al que debe moverse el motor servo. Para métodos alternativos, consulta nuestro tutorial sobre continuous and positional servos.
P: ¿Puedo usar un microcontrolador diferente en lugar de Arduino?
R: Sí, puedes usar un microcontrolador diferente en lugar de Arduino siempre que soporte las librerías necesarias y tenga suficientes pines digitales para conectar el motor servo y el receptor IR. El código proporcionado en este tutorial es específico para Arduino, pero puedes adaptarlo para que funcione con otros microcontroladores.
P: ¿Puedo usar un tipo diferente de motor en lugar de un motor servo?
R: No, este proyecto específico está diseñado para controlar motores servo. Los motores servo tienen control de posición incorporado, lo que los hace ideales para esta aplicación. Si quieres controlar otro tipo de motor, necesitarás un circuito y código diferentes.
P: ¿Puedo controlar la velocidad del motor servo?
R: Depende. Para servos continuos o de 360 grados puedes controlar la velocidad y dirección (pero no la posición). Para servos posicionales, que son los usados en este tutorial, no puedes controlar directamente la velocidad, pero puedes cambiar los pasos de ángulo, lo que modifica la velocidad de forma aproximada, aunque resulta en un movimiento entrecortado.
P: ¿Hay precauciones de seguridad que deba tener al trabajar con motores servo?
R: Sí, al trabajar con motores servo, asegúrate de proporcionar suficiente alimentación a los motores y evita sobrecargarlos. También, ten cuidado con las partes móviles y evita tocarlas mientras el motor está en funcionamiento.
Espero que estas preguntas frecuentes hayan ayudado a aclarar cualquier duda que pudieras tener. Si tienes más preguntas, no dudes en preguntar en la sección de comentarios abajo.
Enlaces
Finalmente, una selección de enlaces a material relacionado que puede resultarte útil.
- How to Control a 360 Degree Servo Motor with Arduino
- How to Drive Servo Motors Using ESP32
- How to Control Servo Motors with Arduino (3 Examples)
- Control 360-degree Servo Motor Using ESP32
- Positional versus Continuous Servos
- Controlling Servo Motor with IR Remote
- Servo Motor Control with Remote
- Controlling a Servo with IR | Using an Infrared Library
- Controlling Servo Motor With Ir Remote Using Arduino
- Controlling Servo Motor Using IR Remote Control

