Cómo controlar servomotores con Arduino – Guía completa

¿Alguna vez has querido controlar servomotores con Arduino pero no sabías por dónde empezar? ¡No te preocupes más! En esta guía completa te enseñaremos paso a paso cómo controlar servomotores con Arduino de forma sencilla y efectiva. Desde qué materiales necesitas hasta cómo programar tu Arduino, ¡todo lo que necesitas saber está aquí! ¡Sigue leyendo para convertirte en un experto en el control de servomotores con Arduino!

En este tutorial aprenderemos Cómo funcionan los servomotores y como controlar servomotores arduino. Los servomotores son muy populares y ampliamente utilizados en muchos proyectos Arduino porque son fáciles de usar y proporcionan un excelente control de posición.

Los servos son una buena opción para proyectos de robótica, automatización, modelos RC, etc. Ya los he usado en muchos de mis proyectos Arduino y puedes ver algunos de ellos aquí:

  • Brazo robot DIY Arduino con control por teléfono inteligente
  • Robot hexápodo hormiga Arduino
  • Aerodeslizador RC basado en Arduino DIY
  • Robot SCARA | Cómo construir tu propio robot basado en Arduino
  • Réplica de bricolaje del Mars Rover Perseverance: proyecto basado en Arduino

Puede ver el vídeo a continuación o leer el tutorial escrito a continuación. Contiene varios ejemplos del uso de un servomotor con Arduino, esquemas y códigos. Además, incluye instrucciones sobre cómo controlar múltiples servomotores con Arduino utilizando el controlador PWM PCA9685.

¿Qué es un servomotor?

Un servomotor es un sistema cerrado que controla su movimiento y su posición final mediante retroalimentación de posición. Existen muchos tipos de servomotores y su característica principal es la capacidad de controlar con precisión la posición de su eje.

Cómo controlar servomotores con Arduino – Guía completa

En>

Cómo controlar servomotores con Arduino – Guía completa

En>

Cómo controlar servomotores con Arduino – Guía completa

Los>

Cómo controlar servomotores con Arduino – Guía completa

¿Cómo funcionan los servomotores?

Un servo aficionado consta de cuatro componentes principales: un motor de CC, una caja de cambios, un potenciómetro y un circuito de control. El motor de CC tiene alta velocidad y bajo par, pero la caja de cambios reduce la velocidad a aproximadamente 60 rpm mientras aumenta el par.

Cómo controlar servomotores con Arduino – Guía completa

El>

Un servomotor se controla enviando una serie de pulsos a través de la línea de señal. La frecuencia de la señal de control debe ser de 50 Hz o debe producirse un impulso cada 20 ms. El ancho del pulso determina la posición angular del servo y este tipo de servos normalmente pueden girar 180 grados (tienen límites de movimiento físico).

Cómo controlar servomotores con Arduino – Guía completa

En>

Leer más: Motores paso a paso y Arduino: la guía definitiva

Servos RC/hobby populares para proyectos Arduino

Hay muchos modelos y fabricantes diferentes para modelos RC o hobby. Las consideraciones más importantes al seleccionar un servomotor son el par, el voltaje de funcionamiento, el consumo de corriente y el tamaño.

Estos son los dos modelos de servo más populares entre los fabricantes, el SG90 Micro Servo y el MG996R.

Cómo controlar servomotores con Arduino – Guía completa

microservo> Especificaciones técnicas:

momento de inclinación 1,2 kg cm a 4,8 V, 1,6 kg cm a 6 V,
Tensión de funcionamiento 3,5-6V
corriente de reposo 100mA
Corriente parada 650mA
Velocidad máxima 60 grados en 0,12 s
Peso 9g

ServoMG996R Especificaciones técnicas:

momento de inclinación 11 kg.cm a 4,8 V, 13 kg.cm a 6 V
Tensión de funcionamiento 4,8 – 7,2 V
corriente de reposo 220 mA a 4,8 V, 250 mA a 6 V
Corriente parada 650mA
Velocidad máxima 60 grados en 0,20 s
Peso 55g

Controlador de servomotor Arduino

Probemos lo anterior y hagamos un ejemplo práctico de cómo controlar un servo aficionado con Arduino. Usaré el MG996R, un servo de alto torque con engranajes metálicos con un torque de pérdida de 10 kg-cm. El alto par tiene un precio, y ese es la corriente de parada del servo, que es de 2,5 A. La corriente de funcionamiento está entre 500 mA y 900 mA y el voltaje de funcionamiento está entre 4,8 y 7,2 V.

Cómo controlar servomotores con Arduino – Guía completa

Las>

diagrama de circuito

Aquí está el esquema de este ejemplo.

Cómo controlar servomotores con Arduino – Guía completa

Simplemente>

Si utilizamos un servo hobby más pequeño, el S90 Micro Servo, es posible alimentarlo directamente desde el pin Arduino de 5V.

Cómo controlar servomotores con Arduino – Guía completa

El>

Aunque es posible alimentar estos servomotores 9g directamente con Arduino, para un funcionamiento más estable recomendaría utilizar siempre una fuente de alimentación externa para ellos.

Puede obtener los componentes necesarios para este ejemplo a través de los siguientes enlaces:

  • Servomotor MG996R …………………………. Amazon / Banggood / AliExpress
  • o microservo S90…………..…………………… Amazonas / Banggood / AliExpress
  • Placa Arduino……………………………………. Amazon / Banggood / AliExpress
  • Fuente de alimentación de 5V 2A CC………………..….. Amazon / Banggood / AliExpress

Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.

Cómo controlar servomotores con Arduino – Guía completa

Ver también
Tutorial de control de motores sin escobillas con Arduino |

Código Arduino para control de servomotores.

Ahora veamos el código Arduino para controlar el servomotor. El código es muy simple. Sólo necesitamos definir el pin al que está conectado el servo, definir este pin como salida y generar pulsos en la sección del bucle con la duración y frecuencia específicas como explicamos antes.

/*
     Servo Motor Control - 50Hz Pulse Train Generator
           by Dejan, https://howtomechatronics.com
*/

#define servoPin 9

void setup() {
  pinMode(servoPin, OUTPUT);
}

void loop() {
   // A pulse each 20ms
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(1450); // Duration of the pusle in microseconds
    digitalWrite(servoPin, LOW);
    delayMicroseconds(18550); // 20ms - duration of the pusle
    // Pulses duration: 600 - 0deg; 1450 - 90deg; 2300 - 180deg
}Code language: Arduino (arduino)

Después de algunas pruebas se me ocurrieron los siguientes valores para la duración de los pulsos que funcionan con mi servo. Los impulsos con una duración de 0,6 ms corresponden a la posición de 0 grados, 1,45 ms a 90 grados y 2,3 ms a 180 grados.

Conecté un multímetro en serie con el servo para verificar el consumo de corriente. El consumo de corriente máximo que noté fue de hasta 0,63 A mientras estaba parado. Esto se debe a que no es el servo TowerPro MG996R original, sino una réplica más barata que obviamente tiene peor rendimiento.

Cómo controlar servomotores con Arduino – Guía completa

Sin>

/*
     Servo Motor Control using the Arduino Servo Library
           by Dejan, https://howtomechatronics.com
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9,600,2300);  // (pin, min, max)
}

void loop() {
  myservo.write(0);  // tell servo to go to a particular angle
  delay(1000);
  
  myservo.write(90);              
  delay(500); 
  
  myservo.write(135);              
  delay(500);
  
  myservo.write(180);              
  delay(1500);                     
}Code language: Arduino (arduino)

Aquí solo necesitamos incluir la biblioteca, definir el objeto servo y usar la función adjuntar() para definir el pin al que está conectado el servo, así como establecer los valores mínimo y máximo de la duración del pulso. Luego simplemente configuramos la posición del servo de 0 a 180 grados usando la función “write()”.

Cómo controlar servomotores con Arduino – Guía completa

Ver también
Brazo robot DIY Arduino con control por teléfono inteligente

Controlando múltiples servomotores con Arduino

La biblioteca Arduino Servo admite el control simultáneo de hasta 12 servos con la mayoría de las placas Arduino y 48 servos con la placa Arduino Mega. Además, controlar varios servomotores con Arduino es tan fácil como controlar uno solo.

Cómo controlar servomotores con Arduino – Guía completa

Aquí>

/*
     Controlling multiple servo motors with Arduino
     by Dejan, https://howtomechatronics.com
*/

#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;

void setup() {
  servo1.attach(8);
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11);
  servo5.attach(12);
}

void loop() {
  // move all servos to position 0
  servo1.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
  servo5.write(0);
  delay(2000);

  // move all servos to position 90
  servo1.write(90);
  servo2.write(90);
  servo3.write(90);
  servo4.write(90);
  servo5.write(90);
  delay(2000);

  // move all servos to position 180
  servo1.write(180);
  servo2.write(180);
  servo3.write(180);
  servo4.write(180);
  servo5.write(180);
  delay(2000);
}Code language: Arduino (arduino)

Entonces todo lo que tenemos que hacer es crear objetos de la clase Servo para cada servomotor y definir a qué pin Arduino está conectado. Por supuesto, podemos configurar cualquier servo para que se mueva a cualquier posición en cualquier momento.

Como ejemplo, también puedes consultar mi proyecto Arduino Ant Hexapod Robot donde utilicé una placa Arduino MEGA para controlar 22 servomotores.

Controladores servo/PWM Arduino y PCA9685

También hay otra forma de controlar los servos con Arduino y es utilizar el servocontrolador PCA9685. Este es un servocontrolador y PWM de 12 bits y 16 canales que se comunica con Arduino a través del bus I2C. Tiene un reloj incorporado por lo que puede controlar 16 servos de forma libre o independiente de Arduino.

Cómo controlar servomotores con Arduino – Guía completa

Lo>

Cómo controlar servomotores con Arduino – Guía completa

Aquí>

Cómo controlar servomotores con Arduino – Guía completa

Puede>

  • Servomotor MG996R …………………………. Amazon / Banggood / AliExpress
  • Servocontrolador PCA9685 PWM………………. Amazon / Banggood / AliExpress
  • Placa Arduino……………………………………. Amazon / Banggood / AliExpress
  • Fuente de alimentación de 5V 6A CC………………..….. Amazon / Banggood / AliExpress

Divulgación: estos son enlaces de afiliados. Como asociado de Amazon, gano con compras que califican.

Ahora veamos el código Arduino. Para controlar este servocontrolador utilizamos la biblioteca PCA9685 que se puede descargar aquí: GitHub.

Código Arduino y PCA9685

/*
     Servo Motor Control using Arduino and PCA9685 Driver
           by Dejan, https://howtomechatronics.com
           
     Library: https://github.com/NachtRaveVL/PCA9685-Arduino
*/

#include <Wire.h>
#include "PCA9685.h"

PCA9685 driver;

// PCA9685 outputs = 12-bit = 4096 steps
// 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms
// 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 steps
PCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg)

// Second Servo
// PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg)


void setup() {
  Wire.begin();                 // Wire must be started first
  Wire.setClock(400000);        // Supported baud rates are 100kHz, 400kHz, and 1000kHz
  driver.resetDevices();        // Software resets all PCA9685 devices on Wire line

  driver.init(B000000);         // Address pins A5-A0 set to B000000
  driver.setPWMFrequency(50);   // Set frequency to 50Hz
}
void loop() {
  driver.setChannelPWM(0, pwmServo.pwmForAngle(-90));
  delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(0));
  delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(90));
  delay(1000);
}Code language: Arduino (arduino)

Primero debemos incluir las bibliotecas y definir el objeto PCA9685. Luego, usando la instancia Servo_Evaluator, definimos la duración del pulso o salida PWM del controlador. Tenga en cuenta que las salidas son de 12 bits, lo que corresponde a una resolución de 4096 pasos. La duración mínima del pulso de 0,5 ms o posición de 0 grados correspondería a 102 pasos y la duración máxima del pulso de 2,5 ms o posición de 180 grados correspondería a 512 pasos. Pero como ya se explicó, estos valores deben ajustarse según su servomotor. Tenía un valor de 102 a 470, que correspondía a una posición de 0 a 180 grados.

En la sección de configuración necesitamos definir la velocidad del reloj I2C, configurar la dirección del controlador y configurar la frecuencia a 50Hz.

En el área del bucle se utiliza el establecerCanalPWM() Y pwmForAngle() Simplemente ajustamos el servo al ángulo deseado.

Conecté un segundo servo al controlador y como era de esperar no se posicionó de la misma manera que el primero, y eso se debe a que los servos que uso son copias baratas y no tan confiables. Sin embargo, esto no es un gran problema ya que usar el Servo_Evaluador Por ejemplo, podemos establecer diferentes configuraciones de salida para cada servo. También podemos ajustar la posición de 90 grados si no está exactamente en el medio. De esta manera todos los servos funcionan igual y se posicionan en el ángulo exacto.

Controlando muchos servos con Arduino y los controladores PCA9685

Veremos otro ejemplo, controlando muchos servos con múltiples controladores PCA9685 encadenados.

Cómo controlar servomotores con Arduino – Guía completa

Para>

Cómo controlar servomotores con Arduino – Guía completa

Ahora>

/*
     Servo Motor Control using Arduino and PCA9685 Driver
           by Dejan, https://howtomechatronics.com
           
     Library: https://github.com/NachtRaveVL/PCA9685-Arduino
*/

#include <Wire.h>
#include "PCA9685.h"

PCA9685 driver;

// PCA9685 outputs = 12-bit = 4096 steps
// 2.5% of 20ms = 0.5ms ; 12.5% of 20ms = 2.5ms
// 2.5% of 4096 = 102 steps; 12.5% of 4096 = 512 steps
PCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg)

// Second Servo
PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg)


void setup() {
  Wire.begin();                 // Wire must be started first
  Wire.setClock(400000);        // Supported baud rates are 100kHz, 400kHz, and 1000kHz
  driver.resetDevices();        // Software resets all PCA9685 devices on Wire line

  driver.init(B000000);         // Address pins A5-A0 set to B000000
  driver.setPWMFrequency(50);   // Set frequency to 50Hz
}
void loop() {
  driver.setChannelPWM(0, pwmServo.pwmForAngle(-90));
  delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(0));
  delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(90));
  delay(1000);
}Code language: Arduino (arduino)

Por lo tanto, debemos crear un objeto PCA9685 separado para cada controlador, definir las direcciones para cada controlador y establecer la frecuencia en 50 Hz. Ahora podemos configurar cada servo en cada controlador para posicionar cualquier ángulo que queramos usando las funciones setChannelPWM() y pwmForAngle().

Solución de problemas

El servomotor sacude y reinicia mi placa Arduino

Este es un problema común con estos servomotores aficionados, el SG90 Micro Servo y el MG996R. La razón de esto es que, como se mencionó anteriormente, pueden consumir una cantidad bastante grande de corriente bajo carga. Esto puede hacer que la placa Arduino se reinicie, especialmente si alimenta el servo directamente desde el pin de 5 V del Arduino.

Para solucionar este problema puedes utilizar un condensador entre GND y el pin de 5V. Actúa como un condensador de desacoplamiento que proporciona energía adicional al sistema en el arranque cuando arranca el motor de CC.

El servomotor no se mueve en el rango de 0 a 180 grados

Este es otro problema común con estos servos aficionados. Como explicamos, un ancho de pulso de 1 ms (0,5 ms) corresponde a una posición de 0 grados y 2 ms (2,5 ms) corresponde a una posición de 180 grados. Sin embargo, estos valores pueden variar de un servo a otro y entre diferentes fabricantes.

Para solucionar este problema necesitamos ajustar el ancho de pulso que enviamos al servomotor usando el Arduino. Por suerte, con la biblioteca Arduino Servo podemos obtener los valores de ancho de pulso en el adjuntar() Función.

El adjuntar() La función puede tomar dos parámetros adicionales, a saber, el ancho de pulso mínimo y máximo en microsegundos. Los valores predeterminados son 544 microsegundos (0,544 milisegundos) para el ángulo mínimo (0 grados) y 2400 microsegundos (2,4 ms). Entonces, ajustando estos valores podemos ajustar el rango de torque del servo.

  myservo.attach(9,600,2300);  // (pin, min, max)Code language: Arduino (arduino)

Dimensiones y modelo 3D.

Creé modelos 3D de los dos servomotores más populares, el Micro Servo SG90 y el Servo Motor MG996R. Puede descargarlos desde los enlaces a continuación.

microservo SG90

Cómo controlar servomotores con Arduino – Guía completa

modelo>Descargar desde Thangs.

Dimensiones:

Cómo controlar servomotores con Arduino – Guía completa

ServomotorMG996R

Cómo controlar servomotores con Arduino – Guía completa

Modelo>Descargar desde Thangs.

Dimensiones:

Cómo controlar servomotores con Arduino – Guía completa

Diploma

Con esto, hemos cubierto casi todo lo que necesitamos saber sobre el uso de servomotores con Arduino. Por supuesto, existen muchos fabricantes y modelos de este tipo de servomotor hobby o RC, y cada uno de ellos tiene sus propias características únicas que pueden diferir de las explicadas anteriormente.

Las posibilidades para crear grandes proyectos de robótica, automatización y RC con motores son infinitas. Sin embargo, es muy importante seleccionar el modelo correcto para su aplicación.

Espero que hayas disfrutado este tutorial y hayas aprendido algo nuevo. No dude en hacer sus preguntas en la sección de comentarios a continuación y también consulte mi colección de proyectos Arduino.

Preguntas frecuentes (FAQ)

¿Cómo uso un servomotor con Arduino?

Usar un servomotor con Arduino es bastante sencillo. El servomotor solo tiene tres cables, dos de los cuales son GND y 5V para fuente de alimentación y el tercer cable es la línea de control que va a la placa Arduino.

¿Puede Arduino accionar servomotores?

Podemos controlar servomotores directamente desde Arduino, pero puede haber problemas de energía. Si el servomotor consume más de 500 mA de corriente, la placa Arduino puede perder energía y reiniciarse. Es mejor utilizar siempre una fuente de alimentación independiente para los servomotores.

¿Cuántos servomotores puede controlar un Arduino?

Usando la biblioteca Arduino Servo, podemos controlar hasta 12 servomotores con la mayoría de las placas Arduino y hasta 48 servomotores con la placa Arduino Mega. Por supuesto, tenemos que utilizar nuestra propia fuente de energía para los servomotores.

Categorías Tutoriales de Arduino sobre cómo funciona.
Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

Cómo controlar servomotores con Arduino – Guía completa

En este completo tutorial aprenderemos cómo funcionan los servomotores y cómo controlarlos con Arduino. Los servomotores son muy populares y ampliamente utilizados en muchos proyectos de Arduino porque son fáciles de usar y proporcionan un gran control de posición. Los servos son una excelente elección para proyectos de robótica, automatización, modelos RC, entre otros.

¿Qué es un servomotor?

Un servomotor es un sistema de bucle cerrado que utiliza retroalimentación de posición para controlar su movimiento y posición final. Hay muchos tipos de servomotores, y su característica principal es la capacidad de controlar con precisión la posición de su eje. Las principales características de los servos de aficionados incluyen un motor de CC de alta velocidad, una caja de engranajes, un potenciómetro y un circuito de control.

¿Cómo funcionan los servomotores?

En los servomotores de aficionados, el potenciómetro está unido al engranaje final o al eje de salida, por lo que a medida que el motor gira, el potenciómetro también gira, produciendo una tensión que está relacionada con el ángulo absoluto del eje de salida. En el circuito de control, esta tensión del potenciómetro se compara con la tensión proveniente de la línea de señal. Si es necesario, el controlador activa un puente H integrado que permite que el motor gire en cualquier dirección hasta que las dos señales alcancen una diferencia de cero.

¿Cómo controlar un servomotor con Arduino?

Controlar un servomotor con Arduino es bastante sencillo. Solo necesitamos definir el pin al que está conectado el servo, definir ese pin como una salida y, en la sección de bucle, generar pulsos con una duración y frecuencia específicas. Para controlar múltiples servomotores, podemos utilizar la biblioteca de servos de Arduino, que permite controlar hasta 12 servos con la mayoría de las placas de Arduino y hasta 48 servos con la placa Arduino Mega.

Conclusiones

En resumen, hemos cubierto casi todo lo que necesitamos saber sobre el uso de servomotores con Arduino. Aunque hay muchos fabricantes y modelos de estos servomotores de hobby o RC, cada uno con características únicas, las posibilidades de crear increíbles proyectos de robótica, automatización y RC son infinitas. Es importante elegir el modelo adecuado para tu aplicación.

Espero que hayas disfrutado este tutorial y aprendido algo nuevo. No dudes en hacer cualquier pregunta en la sección de comentarios. ¡Asegúrate también de explorar mi Colección de Proyectos de Arduino para inspirarte aún más en tus creaciones!

Preguntas frecuentes (FAQs)

  • ¿Cómo usar un servomotor con Arduino?
  • ¿Puede Arduino controlar servomotores?
  • ¿Cuántos servomotores puede controlar Arduino?

Siempre es recomendable usar una fuente de alimentación separada para los servomotores para evitar problemas de energía con la placa Arduino.

Este tutorial detallado te ayudará a comprender mejor cómo funciona y cómo controlar servomotores con Arduino. ¡Empieza a crear tus propios proyectos hoy mismo!

5 comentarios en «Cómo controlar servomotores con Arduino – Guía completa»

Deja un comentario