Go Down

Topic: Conflicto con "delay" (Read 90 times) previous topic - next topic

Melxo

Hola, soy nuevo por aquí y en lo que se refiere a la programación con arduino. Estoy montando un brazo robótico de fabicación casera utilizando como base un HD y recortando las piezas de una lámina de plastico, para que se mueva quiero utilizar cuatro servo SG90s y un motor a pasos 28BYJ-48 que seran controlados con dos joystick. Devido a mi inexperiencia con la programación he recolentado diversos códigos de Google y visto numerosos tutoriales en Youtube para lograr que se muevan los motorcitos y mover se mueven, pero encuentro un conflicto debido a que resulta que al motor paso a paso le afectan los delay de los servo y el motor a pasos gira muy despacio. Agradecería algun consejo de como arreglarlo o si debería de utilizar otro código. Aclarar que en el código que adjunto de momento solo he añadido dos servo y el motor paso a paso que representarían la cintura, el hombro y el codo del brazo, gracias por la atención y un saludo.

[img=https://k61.kn3.net/C/3/1/4/7/B/D1D.jpg]

#include <Stepper.h>   
#include <Servo.h>     // Incluir la librería Servo

 
Servo servo1;          // Crear un objeto tipo Servo llamado servo1(muñeca)
Servo servo2;          // Crear un objeto tipo Servo llamado servo2(codo)

int pasos=100;
int pasosPorLectura=5;
int leer;              //Definiciones para el stepper
int rotacion;
Stepper stepper(pasos, 8,10,9,11);
int velocidadMotor;

int anguloX = 90 ;     // Empezamos en el centro
int anguloY = 90 ;

int salto = 5 ;        // Controla el salto por movimiento

void setup()
{
  servo1.attach(7) ;   // Conectar servo1 al pin 7(wrist)
  servo2.attach(6) ;   // Conectar servo1 al pin 8(elbow)

  pinMode (A0, INPUT);
  stepper.setSpeed(300);
 
}

void loop()
{                                 //EJE X (SERVO1, wrist)
  int p = analogRead(A2);
  if ( p < 400 )                  // Si la lectura es menor de 400
    anguloX = anguloX + salto ;   // disminuimos el angulo
  else if (p > 600)               // Si mayor de 600
    anguloX = anguloX - salto ;   // Aumentamos el angulo
  servo1.write(anguloX);          // Y este es el que mueve el servo 1
  delay (20);                      // Este delay regula la velocidad del movimiento

                                  //EJE Y (SERVO2, elbow)
  int q = analogRead(A3);
  if ( q < 400 )                  // Si la lectura es menor de 400
    anguloY = anguloY + salto ;   // disminuimos el angulo
  else if (q > 600)               // Si mayor de 600
    anguloY = anguloY - salto ;   // Aumentamos el angulo
  servo2.write(anguloY);          // Y este es el que mueve el servo 2
  delay (40);                      // Este delay regula la velocidad del movimiento

                                  //HERE START STEPER MOTOR'S CODE
  leer=analogRead(A0);
  velocidadMotor=abs(map(leer, 0, 1023, -30, 30))*10;
  if (velocidadMotor>10)
  {
    rotacion = leer>511?1:-1;
    stepper.setSpeed(velocidadMotor);
    stepper.step(rotacion*10);
  }
}

msoffredi

Perdon pero cual es la consulta o duda en particular?
--------------------
Marcelo
arduinohobby.com

Melxo

Pues que el delay que hay en los dos servos me relentizan el motor paso a paso y si los elimino giran demasiado rápido al accionar el joystick, pero si los dejo, el motor paso a paso funciona muuuuuuy lennnnnnnnto. Porque ya he hecho pruebas de quitar los delay {delay(20); y delay(40);} y funciona bien  el motor a pasos (a una velocidad aceptable) pero los servos en nada que acciono el joystick completan su recorrido bruscamente cuando para un brazo robótico lo que deseo son movimientos suaves pero no a paso tortuga.

Go Up