Ayuda proyecto alimentador peces programable

Buenos días, estoy montando un alimentador automático usando un servomotor y un módulo RTC. La idea es programar una serie de alarmas durante los periodos que se determinen y que llegada la hora programada el servo gire de 0 a 180 grados y vuelva a la posición inicial.

El RTC está configurado con fecha y hora y funciona correctamente no obstante el problema lo tengo en que cuando ejecuta la "alarm" programada el servo no gira.

En las simulaciones del monitor serie el proceso funciona pero el hardware no. Tengo poca experiencia y no soy capaz de encontrar la solución por mi mismo. Os agradezco la ayuda de antemano.

El servo que uso es un microservo de la marca bruphny con estas características
Torque: 1.4 kg·cm
Velocidad: 0.1 seg/60º (4.8V) y 0.08 seg/60º (6V)

Y este es el código que utilizo

/**
Alimentador programable con RTC
*/

#include <Time.h>
#include <TimeAlarms.h>
#include <Servo.h>
#include <DS1307RTC.h>
Servo myservo;
int pos = 0; // variable que define la posición del servomotor

void setup() {
Serial.begin(9600);
Servo myservo;
myservo.attach(9);

// Cargar la hora actual desde el RTC e indicar que esto suceda de forma automática durante loop()
// Utilizamos el método RTC.get() de la libreria DS1307RTC. El RTC debe estar conectado como se
// indica en el texto y debe tener la fecha y hora correctas
setSyncProvider(RTC.get);
if (timeStatus() != timeSet)
Serial.println("Fallo de RTC");
else
Serial.println("Sincronizado con RTC");

// Crear las alarmas y configurar las funciones correspondientes a cada una
Alarm.alarmRepeat(10, 27, 0, primeratoma); // Evento a las 9:00 diario
// Alarm.alarmRepeat(1, 57, 0, alimentando); // Evento a las 14:30 diario
// Alarm.alarmRepeat(1, 58, 0, alimentando); // Evento a las 19:10 diario
}

void loop() {

// Espera 1 segundo para iniciar las alarmas
Alarm.delay(1000);
}

void primeratoma()
{
Serial.println("Iniciando primera Alimientación");
delay(1000);

for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
Serial.println(pos);
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
Serial.println(pos);
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}

Serial.println("Finalizando primera Alimentación");
delay(1000);

}

Lee las normas del foro y edita tu título (quita la palabra ayuda) y el código (usa etiquetas para postearlo debidamente).
Si no me comprendes mira otros hilos.

1 Like