/*
Autor: Lorenzo J. Monfort Rosa
Versión: 0.0
Fecha: 20/2/2023
El proyecto controla un servomotor a través del puerto serie del ordenador
SERVO ARDUINO
BROWN GND
RED 5V
ORANGE PWM (Cualquier patilla de arduino con el símbolo "~" guión curvado, en nuestro caso la 9)
*/
//Librerías
#include <Servo.h>
//Define para no ir recordando el pin donde conecto el servo.
#define pinServo1 9
//Variables globales
// Declaramos la variable para controlar el servo
Servo miServoMotor;//Definimos la caja donde va a estar el objeto servo de la librería servo.h
int angulo, anguloAnterior;//Definimos la caja donde vamos a poner números enteros para posicionar el servo.
void setup() { //este código sólo se ejecuta al comenzar y resetear arduino, o al comenzar la lectura serie desde el PC
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
//Enviamos información al ordenador a través del puerto serie.
Serial.println("Buenos días 3º ESO ");
Serial.println("Hola servo 1 conectado al pin 9");
Serial.println("Escribe el ángulo al que quieres que gire");
// Iniciamos el servo para que empiece a trabajar con el pin 9
miServoMotor.attach(pinServo1);
}
void loop() { //Este código se repite una y otra vez
//Lectura de lo que enviamos por el puerto serie desde el ordenador.
if (Serial.available() > 0)
{
angulo = Serial.parseInt();// lee el dato enviado por USB desde el ordenador (monitor serial) al arduino:
if(angulo > 0 & angulo <181) //Pregunta si los valores están entre 0 y 180 grados.
{ //En caso afirmativo (sí están entre 0 y 180 grados) haz esto entre {}
Serial.println(angulo);
miServoMotor.write(angulo);
anguloAnterior = angulo;
//delay(2000); //Espera de 2 segundos
Serial.print("el servo está en: ");
Serial.print(miServoMotor.read());
Serial.println(" grados.");
}
} else //Si el valor leído desde el ordenador es nulo, va a un ángulo de 0 grados.
{
//miServoMotor.write(45);
}
}
/*
Expliquemos brevemente las funciones de la librería.
attach(pin, min, max)
Vincula la variable Servo a un pin.
Sintaxis:
servo.attach(pin);
servo.attach(pin, min, max);
Pin: es la patilla a la que está conectada la señal de control del servo.
min: es el ancho del pulso en microsegundos que se corresponde con 0º. Por defecto se establece en 544.
max: es el ancho del pulso en microsegundos que se corresponde con 180º. Por defecto se establece en 2400.
write(grados)
Hace girar el eje del servo un número de grados según se le indique (0º a 180º).
writeMicroseconds(tiempo)
Indica la anchura de pulso (en microsegundos) al servo. Los parámetros para un servo estándar son de 1000 us para un desplazamiento total a la izquierda, 2000 para el tope a la derecha y 1500 para posicionarlo en medio. Si se quiere un control exacto, habrá que estudiar las hojas de datos de cada servo (del fabricante) para averiguar exactamente la correspondencia de valores entre microsegundos y posición. No es directamente proporcional (no se puede hacer una regla de tres). Lo mejor es hacer un estudio con un osciloscopio.
read()
Lee la posición actual del servo y devuelve un valor entre 0 y 180.
attached(Pin)
Verifica si la variable servo está unida al pin indicado, devuelve true o false.
detach(pin)
Desvincula la variable servo del pin indicado.
Uno de los ejemplos típicos para aprender a utilizar la librería, es girar el motor de 0º a 180º y volver a colocarlo en su posición inicial.
*/