Hay muchos motores para elegir, pero es importante elegir el adecuado para el trabajo. Si su proyecto requiere un posicionamiento preciso, un servomotor suele ser la mejor opción. Dígales dónde señalar y ellos lo harán por usted. ¡Tan sencillo como eso!
Son útiles en una variedad de proyectos de robótica, como dirigir las ruedas delanteras de un modelo RC o girar un sensor en un vehículo robótico.
¿Qué es un servo y qué lo hace preciso?
Los servos son motores que te permiten controlar con precisión los movimientos físicos porque generalmente se mueven a una posición en lugar de girar continuamente. Son fáciles de conectar y controlar porque el controlador del motor está integrado directamente en ellos.
Los servos contienen un pequeño motor de CC que está conectado al eje de salida mediante engranajes. El eje de salida acciona una bocina servo y también está conectado a un potenciómetro (pot).
El potenciómetro proporciona información de posición al amplificador de error en la unidad de control, que compara la posición actual del motor con la posición objetivo.
En respuesta al error, la unidad de control ajusta la posición actual del motor para que coincida con la posición deseada.
En ingeniería de control, este mecanismo se denomina servomecanismo o, para abreviar, servo. Es un sistema de control de circuito cerrado que ajusta la velocidad y dirección del motor mediante retroalimentación negativa para lograr el resultado deseado.
¿Cómo funcionan los servomotores?
Puede controlar el servomotor enviándole una serie de pulsos. Un servomotor típico espera un pulso cada 20 milisegundos (es decir, la señal debe ser de 50 Hz).
La duración del impulso determina la posición del servomotor.
- Un pulso corto de 1 ms o menos gira el servo a 0 grados (un extremo).
- Con una duración de impulso de 1,5 ms, el servo gira 90 grados (posición central).
- Una duración de pulso de aproximadamente 2 ms hace girar el servo 180 grados (otro extremo).
Los pulsos en el rango de 1 ms a 2 ms giran el servo a una posición proporcional al ancho del pulso. La siguiente animación te ayudará a comprender la conexión entre los impulsos y la posición.
Es importante señalar que no existe un estándar para la relación exacta entre impulsos y posición. Por lo tanto, es posible que necesites ajustar tu boceto para que se ajuste al rango de tu servo.
Además, la duración del pulso puede variar según la marca; Por ejemplo, podría ser 2,5 ms para 180 grados y 0,5 ms para 0 grados.
Asignación de pines del servomotor
Los servomotores suelen tener tres terminales, como se describe a continuación.
Tierra Sirve como punto común para el motor y la lógica.
5V Es un voltaje positivo que suministra energía al servo.
control es una entrada para el sistema de control.
El color de los cables varía según el servomotor, pero el cable rojo siempre es de 5 V y GND es negro o marrón. El cable de control suele ser naranja o amarillo.
Cableado del servomotor al Arduino UNO
Conectemos el servomotor al Arduino.
Usaremos un micro servomotor SG90 en nuestros experimentos. Funciona a 4,8-6 V CC (5 V típico) y se puede girar 180 grados (90 en cualquier dirección).
Consume unos 10 mA en reposo y de 100 a 250 mA en movimiento, por lo que podemos alimentarlo desde la salida de 5 voltios del Arduino.
Si su servo consume más de 250 mA, debería considerar usar una fuente de alimentación separada.
Conecte el cable rojo a los 5V del Arduino y el cable negro/marrón a tierra. Finalmente, conecte el cable naranja/amarillo al pin #9 habilitado para PWM.
La siguiente tabla enumera las conexiones de pines:
servo motor | arduino | |
5V | 5V | |
Tierra | Tierra | |
control | 9 |
La siguiente imagen muestra cómo conectar el servomotor SG90 al Arduino.
Ejemplo 1 de Arduino: barrido
Para comenzar, usaremos uno de los ejemplos integrados del IDE de Arduino. Navegue hasta el submenú Ejemplos. Seleccione el servo y cargue el boceto de barrido.
Sube el boceto. El eje de su servomotor comienza a moverse hacia adelante y hacia atrás 180 grados.
#include <Servo.h>
int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees
void setup() {
servo.attach(servoPin);
}
void loop() {
// scan from 0 to 180 degrees
for(angle = 0; angle < 180; angle++) {
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 0; angle--) {
servo.write(angle);
delay(15);
}
}
Explicación del código:
Controlar los servos no es una tarea fácil, pero afortunadamente el IDE de Arduino ya incluye una maravillosa biblioteca llamada Servo. Contiene comandos simples para indicar rápidamente al servo que gire a un ángulo específico.
Por lo tanto, agregamos esta biblioteca al comienzo del boceto.
#include <Servo.h>
Luego declaramos el pin Arduino al que está conectado el pin de control del servomotor.
int servoPin = 9;
La siguiente línea crea un objeto servo.
Servo servo;
De hecho, puedes definir hasta ocho servos de esta manera; Por ejemplo, si tuvieras dos servos escribirías:
Servo servo1;
Servo servo2;
La variable angle
se utiliza para almacenar el ángulo actual del servo en grados.
int angle = 0;
En la función de configuración utilizamos el siguiente comando para vincular el servo
Objeto al pin de control de nuestro servo:
servo.attach(servoPin);
La función de bucle tiene dos for
Moler. El primer bucle hace girar el motor en una dirección mientras que el segundo lo hace en la dirección opuesta.
El servo.write(angle)
La función le indica al servo que actualice su posición al ángulo especificado.
servo.write(angle);
Solución de problemas
A veces tu servo puede comportarse mal, especialmente si quieres operarlo directamente desde el Arduino. La razón de esto es que el servo consume mucha energía, especialmente al arrancar, lo que puede provocar un reinicio de la placa Arduino.
Para resolver este problema, coloque un condensador de desacoplamiento electrolítico relativamente grande (470 µF – 1000 µF) a través de la potencia de entrada. Asegúrese de que el cable más largo del condensador esté conectado a 5 V y el cable negativo esté conectado a GND.
El condensador almacena carga eléctrica. Cuando el motor arranca, obtiene energía tanto del suministro de Arduino como del condensador, lo que garantiza un flujo de corriente fluido.
Ejemplo 2 de Arduino: control de servo con un potenciómetro
Nuestro siguiente ejemplo implica instalar un potenciómetro para que podamos ajustar manualmente la posición del servo. Este proyecto puede resultar extremadamente útil a la hora de controlar el giro y la inclinación de un sensor conectado a un servo.
alambrado
Reutilizaremos el cableado del ejemplo anterior, pero esta vez agregaremos un potenciómetro de 10KΩ. Conecte un extremo del potenciómetro a tierra, el otro a 5V y el limpiador a la entrada analógica A0.
código arduino
El código para hacer que el servo siga la posición del botón es más simple que el código para moverlo.
#include <Servo.h>
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup() {
servo.attach(servoPin);
}
void loop() {
int reading = analogRead(potPin);
int angle = map(reading, 0, 1023, 0, 180);
servo.write(angle);
}
Explicación del código
Tenga en cuenta que una nueva variable llamada potPin
fue presentado.
int potPin = 0;
Iniciamos la función de bucle leyendo el valor del pin analógico A0.
int reading = analogRead(potPin);
El analogRead()
La función devuelve un valor entre 0 y 1023. Sin embargo, necesitamos hacerlo más pequeño porque el servo sólo puede girar 180 grados.
Un método es utilizar el Arduino. Mapa() Función que convierte un número de un rango a otro. La siguiente línea convierte la lectura a grados entre 0 y 180.
int angle = map(reading, 0, 1023, 0, 180);
Finalmente utilizamos el write()
Comando para actualizar la posición del servo al ángulo seleccionado por el potenciómetro.
servo.write(angle);
¡Excelente explicación! Me ayudó a resolver todas mis dudas sobre el funcionamiento del servomotor y conectarlo a Arduino. ¡Gracias por compartir este tutorial tan útil!
¡Me encantó este tutorial! Me dio una guía sencilla y clara para entender el funcionamiento del servomotor y cómo hacer la conexión con Arduino. ¡Gracias por compartir tus conocimientos!
¡Interesante artículo! Me ayudó a entender mejor cómo funciona el servomotor y cómo puedo conectarlo a Arduino. ¡Gracias por la información!
¡Está genial! Me ha resultado súper útil para mis proyectos con Arduino.¡Gracias por compartir!
Qué buen tutorial, me aclaró todas mis dudas sobre el servomotor y me dio la confianza para conectarlo a Arduino. ¡Gracias por la ayuda!