Arduino - Servomotor

En este tutorial, vamos a aprender a usar el servomotor con Arduino. En detalle, aprenderemos:

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×Servomotor
1×Cables Puente
1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del servomotor

El servomotor es un componente que puede girar su eje (generalmente entre 0° y 180°). Se utiliza para controlar la posición angular del objeto.

Esquema de pines

El servomotor utilizado en este ejemplo tiene tres pines:

  • Pin VCC: (típicamente rojo) debe conectarse a VCC (5V)
  • Pin GND: (típicamente negro o marrón) debe conectarse a GND (0V)
  • Pin de señal: (típicamente amarillo o naranja) recibe la señal de control PWM desde el pin de un Arduino.
Pinout del servomotor

Cómo funciona

Esta sección se dedica al conocimiento profundo. NO se preocupe si no lo entiende. Omita esta sección si lo abruma y vuelva otro día. Continúe leyendo con las siguientes secciones.

Después de conectar el pin VCC y el pin GND a 5 V y 0 V, respectivamente, podemos controlar el servomotor generando una señal PWM adecuada para el pin de señal.

El ángulo está determinado por el ancho de la señal PWM.

La ficha técnica del servomotor nos proporciona los siguientes parámetros:

  • Período de PWM (PERIOD)
  • Ancho mínimo de pulso de PWM (WIDTH_MAX)
  • Ancho máximo de pulso de PWM (WIDTH_MIN)

Estos parámetros están fijados en la biblioteca Servo de Arduino. No necesitamos saber el valor de los parámetros.

El ángulo se determina de la siguiente manera:

  • Si el ancho de pulso de PWM es igual a WIDTH_MIN, el servomotor gira a 0°.
  • Si el ancho de pulso de PWM es igual a WIDTH_MAX, el servomotor gira a 180°.
  • Si el ancho de pulso de PWM está entre WIDTH_MIN y WIDTH_MAX, el servomotor gira a un ángulo entre 0° y 180° en proporción.
Cómo funciona un servomotor

Arduino - Servomotor

Algunos pines de Arduino se pueden programar para generar una señal PWM. Podemos controlar un servomotor conectando su pin de señal al pin de Arduino y programándolo para generar PWM en ese pin.

Gracias a Biblioteca Servo de Arduino, controlar un servomotor es pan comido. Ni siquiera necesitamos saber cómo funciona un servomotor. Tampoco necesitamos saber cómo generar una señal PWM. Solo necesitamos aprender a usar la biblioteca.

Diagrama de Cableado

Podrías encontrar diagramas de cableado en línea que muestren una conexión desde el pin VCC de un servomotor directamente al pin 5V de la placa Arduino, como se muestra a continuación. Aunque este enfoque puede funcionar, se desaconseja encarecidamente debido al riesgo potencial de dañar la placa Arduino.

Diagrama de cableado del servomotor de Arduino

This image is created using Fritzing. Click to enlarge image

En su lugar, para proteger su placa Arduino, recomendamos encarecidamente utilizar una fuente de alimentación externa para el motor servo. El diagrama de cableado a continuación ilustra cómo conectar el motor servo a una fuente de alimentación externa.

Diagrama de cableado de la fuente de alimentación externa para el motor servo de Arduino

This image is created using Fritzing. Click to enlarge image

Por favor, asegúrate de conectar la GND de la fuente de alimentación externa a la GND de la placa Arduino. No pases por alto este paso crucial para un correcto funcionamiento.

Cómo programar para un servomotor

  • Incluir la biblioteca:
#include <Servo.h>
  • Declara un objeto Servo:
Servo myServo;

Si controlas más de un servomotor, solo necesitas declarar más objetos Servo:

Servo myServo1; Servo myServo2;
  • Configura el pin de control de Arduino, que se conecta al pin de señal del servomotor. Por ejemplo, el pin 9:
myServo.attach(9);
  • Por último, gire el servomotor al ángulo deseado. Por ejemplo, 90°:
myServo.write(90);

Código de Arduino

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-servo-motor */ #include <Servo.h> Servo servo; // create servo object to control a servo void setup() { servo.attach(9); // attaches the servo on pin 9 to the servo objectư servo.write(0); // rotate slowly servo to 0 degrees immediately } void loop() { for (int pos = 0; pos <= 180; pos += 1) { // rotate slowly from 0 degrees to 180 degrees, one by one degree // in steps of 1 degree servo.write(pos); // control servo to go to position in variable 'pos' delay(10); // waits 10ms for the servo to reach the position } for (int pos = 180; pos >= 0; pos -= 1) { // rotate from 180 degrees to 0 degrees, one by one degree servo.write(pos); // control servo to go to position in variable 'pos' delay(10); // waits 10ms for the servo to reach the position } }

Pasos R\u00e1pidos

  • Conecta Arduino al PC mediante un cable USB
  • Abre Arduino IDE, selecciona la placa y el puerto correctos
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para cargar el código en Arduino
Arduino IDE - Cómo subir código
  • Vea el resultado: El motor servo gira lentamente de 0° a 180° y luego gira lentamente de 180° a 0°

Explicación del código

Puedes encontrar la explicación en la línea de comentarios del código de Arduino anterior.

Cómo controlar la velocidad del servomotor

Al usar las funciones map() y millis(), podemos controlar la velocidad del servomotor de forma suave sin bloquear el resto del código.

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-servo-motor */ #include <Servo.h> Servo myServo; unsigned long MOVING_TIME = 3000; // moving time is 3 seconds unsigned long moveStartTime; int startAngle = 30; // 30° int stopAngle = 90; // 90° void setup() { myServo.attach(9); moveStartTime = millis(); // start moving // TODO: other code } void loop() { unsigned long progress = millis() - moveStartTime; if (progress <= MOVING_TIME) { long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle); myServo.write(angle); } // TODO: other code }

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Desafíate a ti mismo

Utiliza el servomotor para realizar uno de los siguientes proyectos:

Conocimiento Adicional

  • La biblioteca Servo admite hasta 12 motores en Arduino UNO y 48 en Arduino Mega.
  • La alimentación desde el pin de 5V de Arduino puede no ser suficiente para un servomotor en alguno de los siguientes casos:
    • Usar un servomotor de alto par, que puede soportar una carga pesada.
    • Usar muchos servomotores.

    En estos casos, puede que necesitemos proporcionar una fuente de alimentación adicional para los servomotores.

    Servomotor de Arduino con potencia extra

    This image is created using Fritzing. Click to enlarge image

    Como se puede ver en el diagrama anterior, el pin VCC del servomotor NO se conecta al pin de 5V del Arduino. Se conecta al pin positivo de una fuente de alimentación adicional.

    Por favor, tenga en cuenta que:

    • No conecte el pin positivo de la fuente de alimentación adicional al pin de 5 V del Arduino.
    • Debe conectar el pin negativo de la fuente de alimentación adicional al pin GND del Arduino.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!