Go Down

Topic: Accionar motor paso a paso a horas determinadas? (Read 363 times) previous topic - next topic

guarrod

Hola les envío un saludos a todos!

Estoy recien empezando en Arduino, y tengo una idea para un proyecto, he buscado en internet y no he encontrado nada al respecto.

Mi duda es si puedo programar el accionar de un motor paso a paso a unas horas determinadas?

Quisiera que a las 8am el motor de x cantidad de revoluciones, luego a las 3pm y a las 9pm.
Se que hay un modulo de reloj pero en lo que he visto no parece funcionar para este fin.

Alguien me puede ayudar? :smiley-confuse:

surbyte

Te recomiendo el uso de esta librería TimeAlarms Library

Este es el ejemplo básico
Code: [Select]
/*
 * TimeAlarmExample.pde
 *
 * This example calls alarm functions at 8:30 am and at 5:45 pm (17:45)
 * and simulates turning lights on at night and off in the morning
 * A weekly timer is set for Saturdays at 8:30:30
 *
 * A timer is called every 15 seconds
 * Another timer is called once only after 10 seconds
 *
 * At startup the time is set to Jan 1 2011  8:29 am
 */
 
#include <Time.h>
#include <TimeAlarms.h>

void setup()
{
  Serial.begin(9600);
  setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
  // create the alarms
  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(17,45,0,EveningAlarm);  // 5:45pm every day
  Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm);  // 8:30:30 every Saturday

 
  Alarm.timerRepeat(15, Repeats);            // timer for every 15 seconds   
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds
}

void  loop(){ 
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void MorningAlarm(){
  Serial.println("Alarm: - turn lights off");   
}

void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");           
}

void WeeklyAlarm(){
  Serial.println("Alarm: - its Monday Morning");     
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");       
}

void Repeats(){
  Serial.println("15 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once"); 
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}



Tiene todo tipo de alarmas posibles. Las que se repiten  Alarm.Repeat, las que se ejecutan una vez, o las que se ejecutan solo 1 vez por semana.

Ademas de alarmas/timers para repetir cosas cada X segundos con lo cual puedes lograr otros efectos

Lo unico a considerar es que la alarma se ejecuta 1 vez y no permanece. Es decir
Si quieres que algo se accione a las 8:00:00 pues lo haces
Si quieres que algo se apague a determinada hora lo mismo.
Pero no esperes que esa accion de las 8 se mantenga porque no lo hará. Imagina un pulsador. Tu pulsas y si no capturas esa pulsación, su acción no se repite.

Prueba el ejemplo y no dejes de usar
Code: [Select]
Alarm.delay(1000); al final o no funcionará.

Si quieres probar algo rápido en el día usa Alarm.delay(1); y el sistema simulará en el arduino una ejecución que te permita ver si todas tus alarmas en el día se accionan como quieres.

guarrod

Oye muchas gracias!! lo voy a probar a ver si me funciona :)

Te recomiendo el uso de esta librería TimeAlarms Library

Este es el ejemplo básico
Code: [Select]
/*
 * TimeAlarmExample.pde
 *
 * This example calls alarm functions at 8:30 am and at 5:45 pm (17:45)
 * and simulates turning lights on at night and off in the morning
 * A weekly timer is set for Saturdays at 8:30:30
 *
 * A timer is called every 15 seconds
 * Another timer is called once only after 10 seconds
 *
 * At startup the time is set to Jan 1 2011  8:29 am
 */
 
#include <Time.h>
#include <TimeAlarms.h>

void setup()
{
  Serial.begin(9600);
  setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
  // create the alarms
  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(17,45,0,EveningAlarm);  // 5:45pm every day
  Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm);  // 8:30:30 every Saturday

 
  Alarm.timerRepeat(15, Repeats);            // timer for every 15 seconds   
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds
}

void  loop(){ 
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void MorningAlarm(){
  Serial.println("Alarm: - turn lights off");   
}

void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");           
}

void WeeklyAlarm(){
  Serial.println("Alarm: - its Monday Morning");     
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");       
}

void Repeats(){
  Serial.println("15 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once"); 
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}



Tiene todo tipo de alarmas posibles. Las que se repiten  Alarm.Repeat, las que se ejecutan una vez, o las que se ejecutan solo 1 vez por semana.

Ademas de alarmas/timers para repetir cosas cada X segundos con lo cual puedes lograr otros efectos

Lo unico a considerar es que la alarma se ejecuta 1 vez y no permanece. Es decir
Si quieres que algo se accione a las 8:00:00 pues lo haces
Si quieres que algo se apague a determinada hora lo mismo.
Pero no esperes que esa accion de las 8 se mantenga porque no lo hará. Imagina un pulsador. Tu pulsas y si no capturas esa pulsación, su acción no se repite.

Prueba el ejemplo y no dejes de usar
Code: [Select]
Alarm.delay(1000); al final o no funcionará.

Si quieres probar algo rápido en el día usa Alarm.delay(1); y el sistema simulará en el arduino una ejecución que te permita ver si todas tus alarmas en el día se accionan como quieres.


Go Up