Go Down

Topic: Duda para mover un servo (Read 1 time) previous topic - next topic

THEJULAITOR

Hola soy muy nuevo en el tema de programacion arduino y quisiera pedir ayuda con un codigo para poder mover un servo 180 grados cada 6 horas... de momento estoy usando el codigo de ejemplo que trae el programa arduino y modificando sus valores pero no se como hacer para generar un temporizador de 6 horas entre un movimiento y el otro.
Desde ya muchas gracias!!
Code: [Select]
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
                // twelve servo objects can be created on most boards
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
void loop()
{
  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(30);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(30);                       // waits 15ms for the servo to reach the position
  }
}

surbyte

Aca lo tienes.
El sistema arranca enviando a 180 grados al servo y cada 6 horas cambiara entre 0 y 180 como entendí que quieres que funcione.
Para probarlo modifica RETARDO por un valor como por ejemplo un 30 o 60 segundos entonces debes poner 30*1000 o 60*1000 mseg
Comenta // el tiempo de 6hs y descomenta el de 30 segundos y pruebalo.

Code: [Select]
#include <Servo.h>
#define RETARDO 6*3600*1000    // 6 horas x 3600 segundos/hora * 1000 mseg
// define RETARDO 30*1000          // prueba de 30 segundos

Servo myservo;  // create servo object to control a servo
 
unsigned long start;
bool estado = false;   
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  start = millis() + RETARDO;
}
 
void loop()  {
 
  if (millis() > start) {
    estado = !estado;    // cada 6 horas estado cambia de 0 a 1 y va a 180 o a 0 alternadamente
    if (estado)
         myservo.write(180);              // servo a 180 grados
      else
         myservo.write(0);              // vuelvo a 0 grados

    start = millis() + 6*3600*1000; // 6 horas x 3600 segundos/hora * 1000 mseg
  }     
}

THEJULAITOR

#2
May 04, 2017, 12:36 am Last Edit: May 04, 2017, 12:42 am by THEJULAITOR
Hola de nuevo... gracias por la ayuda! pero luego de probar este código no me esta funcionando bien... :( al conectar el servo lo único que hace es una especie de vibración pero no se mueve... probé con 30 segundos tal como me recomendaste pero hace lo mismo... no se que puede ser... tal vez me explique mal, lo que yo quiero es que el servo gire 180 grados, pare espere 6 horas y vuelva a girar de nuevo a 0 y así sucesivamente. El giro debe ser gradual pero en un tiempo no superior a 3 o 4 segundos. Es para el volteo de huevos en una incubadora pequeña...

surbyte

Quote
El giro debe ser gradual pero en un tiempo no superior a 3 o 4 segundos. Es para el volteo de huevos en una incubadora pequeña...
Donde pusiste esto en el primer post?

Bueno entonces hazlo gradual. Usa el criterior que te he dado y comienza la secuencia de 6 hs cuando se llegue a 180 o a 0 grados.


THEJULAITOR

Disculpa que no lo mencione antes... El problema es que no tengo idea de como hacer eso... en el primer código que puse trate de varias maneras de conseguir un retraso de 6 horas entre un movimiento y el otro pero no pude, sin embargo si logre que el movimiento fuera gradual. EL problema es que necesito que el servo envés de arrancar inmediatamente que llega a un extremo pare y ahi espere las 6 horas para arrancar en el sentido opuesto. Es decir un movimiento con una duracion de aproximadamente 4 segundos y un angulo de 180 grados cada 6 horas. Se me dificulta explicarlo mejor.

Go Up