Proyecto 20: Servo

Descripción
El servo es un actuador que convierte señales eléctricas en desplazamiento mecánico. Juega un papel importante en la vida y se usa ampliamente en robótica, drones, hogares inteligentes así como en control industrial.
En este proyecto, escribimos código Arduino para controlar el servo mediante la placa de desarrollo UNO R3 (ch340).
Hardware
1. Placa de desarrollo UNO R3 (ch340) x1
2. Servo x1
3. Cables DuPont
Principio de Funcionamiento
Hay cuatro componentes principales dentro de un servo hobby: un motor DC, una caja de engranajes, un potenciómetro y un circuito de control. El motor DC es de alta velocidad y bajo torque, pero la caja de engranajes reduce la velocidad a alrededor de 60 RPM y al mismo tiempo aumenta el torque.

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 así un voltaje relacionado con el ángulo absoluto del eje de salida. En el circuito de control, este voltaje del potenciómetro se compara con el voltaje que proviene de la línea de señal. Si es necesario, el controlador activa un puente H integrado que permite que el motor gire en cualquiera de las dos direcciones hasta que la diferencia entre las dos señales sea cero.
Un motor servo 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 50Hz o debe ocurrir un pulso cada 20ms. El ancho del pulso determina la posición angular del servo y este tipo de servos usualmente pueden girar 180 grados (tienen límites físicos de recorrido).

Generalmente, los pulsos con duración de 1ms corresponden a la posición de 0 grados, 1.5ms a 90 grados y 2ms a 180 grados. Aunque la duración mínima y máxima de los pulsos puede variar a veces con diferentes marcas y pueden ser 0.5ms para 0 grados y 2.5ms para la posición de 180 grados.
Especificaciones
Motor Servo T-pro Mini SG-90 9g Servo
Mejor opción para aeronaves RC
Accesorios incluidos
Cumplimiento ROHS
Dimensiones: 23x12.2x29mm
Torque: 0.5kg/cm
Torque de bloqueo: 1.5kg/cm a 5V
Velocidad de operación: 0.3seg/60 grados a 4.8V
Voltaje de operación: 4.2-6V
Rango de temperatura: 0-55 °C
Ancho de banda muerto: 10us
Material de engranajes: Nylon
Pinout

GND Tierra (Cable Marrón) – Este es el pin de tierra.
VCC +5V (Cable Rojo) – El voltaje se suministra al motor servo a través de este pin.
Control (Cable Naranja) – A través de este cable, se reciben señales de control de posición vía PWM.
Diagrama de Conexiones
1. Conectar el cable rojo (positivo) del servo al pin 5V en la placa
2. Conectar el cable negro (negativo) del servo al GND en la placa
3. Conectar el cable naranja (señal) del servo al pin digital D9 en la placa

Código de Ejemplo
/*
Electronics Learning Starter Kit for Arduino
Project 20
Servo
Edit By Keyes
*/
#include <Servo.h>
Servo myservo; // create a Servo object
void setup() {
myservo.attach(9); // connect servo to digital pin 9
}
void loop() {
myservo.write(0); // rotate servo to 0 degree
delay(1000); // delay 1s
myservo.write(90); // rotate servo to 90 degree
delay(1000); // delay 1s
myservo.write(180); // rotate servo to 180 degree
delay(1000); // delay 1s
}
Explicación del Código
Importación de Librerías y Creación de un Objeto Servo
Primero, en la parte superior del programa Arduino, necesitamos incluir la librería Servo.h, lo cual se hace usando la directiva del preprocesador #include <Servo.h>. Luego, creamos un objeto de la clase Servo, llamado myservo en este ejemplo. Este objeto se usará para todas las operaciones posteriores relacionadas con el motor servo.
#include <Servo.h>
Servo myservo; // Crear un objeto servo
Función Setup
En la función setup(), conectamos el motor servo a un pin digital específico en la placa Arduino. En este ejemplo, usamos el pin digital 9. La línea myservo.attach(9); vincula el objeto servo al pin digital 9, permitiendo que la señal de salida de ese pin controle el motor servo.
void setup() {
myservo.attach(9); // Conectar el motor servo al pin digital 9
}
Función Loop
En la función loop(), escribimos la lógica específica para controlar el motor servo. Esta función se repetirá continuamente, formando un bucle infinito. En este ejemplo, hacemos que el motor servo gire a 0 grados, 90 grados y 180 grados, respectivamente. Después de cada rotación, el programa se pausa por un segundo (1000 milisegundos), lo cual se logra usando la función delay(1000);.
void loop() {
myservo.write(0); // Girar servo a 0 grados
delay(1000); // Pausa por 1 segundo
myservo.write(90); // Girar servo a 90 grados
delay(1000); // Pausa por 1 segundo
myservo.write(180); // Girar servo a 180 grados
delay(1000); // Pausa por 1 segundo
}
En este proceso, la función myservo.write(angle); se usa para especificar el ángulo objetivo para el motor servo. El parámetro angle es un entero que representa el ángulo al que el motor debe girar. La librería Servo se encarga de generar las señales para asegurar que el motor se mueva a la posición especificada.
Resultado del Proyecto
Después de subir el código, el servo gira a 0°, 90° y 180°, manteniendo cada posición por 1 segundo. Estas acciones se repiten.
