//************PRÁCTICA 13***************
//Funcionamiento de un Servomotor
//girar 0 y 180 grados
//importar libreria para servomotor
#include <Servo.h>
Servo miServo; // Crea un objeto servo
const int pinServo = 9; // El pin al que está conectado el servo
const int pinRele = 7; // El pin al que está conectado el relé
void setup() {
miServo.attach(pinServo); // Asigna el pin al objeto servo
pinMode(pinRele, OUTPUT); // Configura el pin del relé como salida
randomSeed(analogRead(0)); // Inicializa el generador de números aleatorios
Serial.begin(9600);
}
void loop() {
// Hacer una rampa de 0 a 100 grados en 3 segundos
int inicio = 94;
int fin = 104;
int duracion = 3000; // Duración total en milisegundos
int pasos = 100; // Número de pasos para la rampa
int intervalo = duracion / pasos; // Intervalo de tiempo entre cada paso
// Encender el relé antes de la función de valores aleatorios
digitalWrite(pinRele, HIGH);
// Enviar 400 valores aleatorios al servo
for (int i = 0; i < 40; i++) {
int angulo = random(94, 106); // Genera un ángulo aleatorio entre 0 y 180 grados
int delayAleatorio = random(100, 150); // Genera un delay aleatorio entre 50 y 70 ms
Serial.print (" i: " + String(i));
accionoMuestro(angulo, delayAleatorio);
}
// Apagar el relé y esperar 2 segundos
digitalWrite(pinRele, LOW);
delay(1000);
// Encender el relé antes de la función de valores fijos
digitalWrite(pinRele, HIGH);
// Mantenerse en los valores 20, 50 y 100 grados por 3 segundos cada uno
// miServo.write(94); // Mueve el servo a 20 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(94, 1000);
// miServo.write(96); // Mueve el servo a 50 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(96, 1000);
// miServo.write(98); // Mueve el servo a 100 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(98, 1000);
// miServo.write(100); // Mueve el servo a 100 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(100, 1000);
// miServo.write(102); // Mueve el servo a 100 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(102, 1000);
// miServo.write(104); // Mueve el servo a 100 grados
// delay(1000); // Espera 3 segundos
accionoMuestro(104, 1000);
// Apagar el relé y esperar 2 segundos
digitalWrite(pinRele, LOW);
delay(6000);
// Encender el relé antes de las rampas
digitalWrite(pinRele, HIGH);
for (int i = 0; i <= pasos; i++) {
int angulo = map(i, 0, pasos, inicio, fin); // Mapea el paso actual al ángulo
// miServo.write(angulo); // Mueve el servo al ángulo mapeado
// delay(intervalo); // Espera el intervalo calculado
accionoMuestro(angulo, intervalo);
}
// Pausa de 3 segundos después de la primera rampa
delay(3000);
// Hacer una rampa inversa de 100 a 0 grados en 3 segundos
for (int i = pasos; i >= 0; i--) {
int angulo = map(i, 0, pasos, fin, inicio); // Mapea el paso inverso al ángulo
// miServo.write(angulo); // Mueve el servo al ángulo mapeado
// delay(intervalo); // Espera el intervalo calculado
Serial.print (" i: " + String(i));
accionoMuestro(angulo, intervalo);
}
// Apagar el relé y esperar 2 segundos al final
digitalWrite(pinRele, LOW);
delay(1000);
}
void accionoMuestro(int ang, int del){
Serial.print (" ang: " + String(ang));
Serial.println(" del: " + String(del));
miServo.write(ang); // Mueve el servo al ángulo aleatorio
delay(del); // Espera un tiempo aleatorio
}