Go Down

Topic: Apoyo para L298N + PAP + bluetooth (Read 1 time) previous topic - next topic

fernando3110

Estoy haciendo un simulador de montaña rusa en VR con unity3d y arduino para android por bluetooth
utilizo el L298N porque me es muy practico. Y nema 23 10kg/cm
osea que son 2 L298N y 2 PAP

desde unity envio las coordenadas de movimiento Y: e X: por bluetooth al arduino
El X: es hacia adelante o atrás y el Z: es hacia derecha e izquierda
hasta ahi todo perfecto lo que no he podido hacer y ahi el apoyo que necesito es como hacer que las coordenadas enviadas
por ejemplo "X: 10" que la traduzca el arduino en movimientos y mueva el motor 10 grados (o pasos) hacia un lado o el otro segun corresponda

Espero que me puedan guiar y desde ya muchas gracias

surbyte

Y que buscaste?
Porque como ya dije, Stepper + L298 hay 2 millones de tutoriales. La libreria stepper disponible, con ejemplos.
No debería darte problemas.

Unity3d envia coordenadas via BT al arduino que las recibe como puerto serie, de modo que tienes X, Y disponibles para que se muevan los stepper.

En principio no debería darte problemas, repito.

Comienza por dominar los stepper, usando el ejemplo, simple. Luego usa dos.
Ajusta tu rutina para poder enviar comandos similares a los que enviará Unity3d via monitor Serie.

Luego incorporas el modulo BT y mas o menos listo.

fernando3110

por supuesto que hay miles de tutoriales pero no encontre nada de lo que necesito
logre armar esto pero no es lo que realmente necesito que haga el arduino
Code: [Select]

#include <Stepper.h>
int input;
const int stepsPerRevolution = 48;  // cambie este valor por el numero de pasos de su motor
const int stepsPerRevolution1 = 24;
Stepper motorDerecho(stepsPerRevolution, 12,11,10,9);           
Stepper motorIzquierdo(stepsPerRevolution, 8,5,6,3);
void setup() {
  motorDerecho.setSpeed(190);
  motorIzquierdo.setSpeed(190);
    Serial.begin(9600);
}
void loop() {
  if(Serial.available()>0){
  input=Serial.read();
  if(input=='1'){
    // gira media vuelta en una direccion
   Serial.println("GIRA DERECHA");
  motorDerecho.step(-stepsPerRevolution1);
  motorIzquierdo.step(-stepsPerRevolution1);
  delay(150);
  motorDerecho.step(stepsPerRevolution1);
  motorIzquierdo.step(stepsPerRevolution1);
  }
    if(input=='2'){
   // gira media vuelta en la otra direccion
  Serial.println("GIRA IZQUIERDA");
  motorDerecho.step(stepsPerRevolution1);
  motorIzquierdo.step(stepsPerRevolution1);
  delay(150);
  motorDerecho.step(-stepsPerRevolution1);
  motorIzquierdo.step(-stepsPerRevolution1);
}
if(input=='3'){
   // cabecea hacia abajo
  Serial.println("ADELANTE");
  motorDerecho.step(stepsPerRevolution1);
  motorIzquierdo.step(-stepsPerRevolution1);
  delay(500);
  motorDerecho.step(-stepsPerRevolution1);
  motorIzquierdo.step(stepsPerRevolution1);
}
if(input=='4'){
   // cabecea hacia arriba
  Serial.println("ATRAS");
  motorDerecho.step(-stepsPerRevolution1);
  motorIzquierdo.step(stepsPerRevolution1);
  delay(500);
  motorDerecho.step(stepsPerRevolution1);
  motorIzquierdo.step(-stepsPerRevolution1); 
}
  }
  }


NOTA. Espero haber puesto bien el codigo

Las coordenadas que llegan de unity (android) son por ejemplo
X: 100
Y: 25
Z: 44

No se si me explico bien

fernando3110

Para graficarlo mejor seria algo asi pero en vez de un MPU serian los datos que llegan por el bluetooth
ejemplo

surbyte

Ahora te comprendo.
Si una stepper tiene 48 pasos por ejemplo como en tu caso, entonces tienes un stepper POBRE
1 revolución 360 grados
o sea que 360 grados = 48 pasos

cada paso serán 360/48 = 7.5 grados

fernando3110

El tema es como poder interpretar las coordenadas, la verdad que no encontre nada de eso, antes de hacer el post me puse a buscar pero no encontre nada que me guie

surbyte

Tus coordenadas en que sistema estan? Cartesiano?
Sistema de coordenadas, hay cartesiano, cilindricas y esféricas.

fernando3110

solo son grados de inclinacion de un objeto en espacio/tiempo

surbyte

#8
Feb 21, 2018, 01:15 am Last Edit: Feb 21, 2018, 01:23 am by surbyte
Bueno, supongamos que sean grados y no tengo porque dudar, pinta entonces que estas en coordenadas esféricas. Solo para darle un marco de referencia.

Si tu motor stepper solo da 48 pasos por revolucion tienes un problema. Tendría que ser digamos de algo mas de 360 pasos
Soluciones, pasarlo si es posible a micropasos.

Que motor PAP usas?
Busca las especificaciones

El A4988 O DRV8825 permiten microstepping

El A4988 te aumenta en 16 los pasos o sea si fueran 48 y parto de tu ejemplo tendrías 48 x 16 = 768 por lo que 360/768 = 0,46875 grados x paso o sea.. ahi estas bien

EL DRV8825 va a 32 microsteps  por lo que tendrias 360/(48x32) = 0,234 grados x paso.

Con cualquiera de los dos estarías mas que bien.

Si quieres que se mueva 100 grados solo calculas cuantos pasos necesitas

0.234 grados == 1 paso
100 grados === X pasos => 100/0.234= 426 pasos

Una simple cuenta para cada stepper y ya

fernando3110

un ejemplo sencillo
Code: [Select]

#include <Stepper.h>
int input;
const int stepsPerRevolution = 48;
Stepper motor(stepsPerRevolution, 12,11,10,9);
void setup() {
motor.setSpeed(190);
Serial.begin(9600);
}
void loop() {
if(Serial.available()>0){
input=Serial.read();
if(input=='1'){
Serial.println("GIRA DERECHA");
motor.step(-stepsPerRevolution);
}
}
}


Como hacer para que se pueda usar por ejemplo Y:15 en vez de 1

if(input=='1'){

que quede

if(input=='Y:15'){

ya con eso me conformaria y podria hacer un codigo no profesional pero si funcional

surbyte


fernando3110

mm donde no lo veo solo veo datos de micropasos de los motores que no es un problema, mi problema esta como hacer que la cordenada por ejemplo Y:15 la tome el arduino para convertirla en movimiento como el ultimo ejemplo que puse

fernando3110

Poca ideas y poca ayuda pero gracias igual a seguir buscando por otro lado

surbyte

#13
Feb 21, 2018, 02:22 pm Last Edit: Feb 21, 2018, 02:23 pm by surbyte
Leiste el post#8?

Bueno no se que driver vas a usar. Necesitas saber cuantos pasos tiene tu stepper cosa que aun no has respondido.
Supongamos que con un driver DRV8895 tenes ahora Pasos de tu PAP = 48 pusiste pero ajustalo al que tengas.
Con microstepping multiplicas x 32 => 48 x 32 = 1536 micropasos.

Una vuelta tiene 360 grados y una revolución de motor se hace con 1536 micropasos.
entonces 360 grados/1536 = 0,234375 grados/micropaso

o al revés porque veo que eso te complica

Es una regla de 3 simple

360 --------- 1536
100 --------- X = 100 x 1536/360 = 426 o sea que siempre tienes un factor K = 1536/360 = 4.2666

daras 4.266 micropasos x grado

estas en 100 y queres ir a 102 entonces daras 2 x 4.266 micropasos

Ahora si?
Te lo explico para un eje, los demas son iguales.


Explica esto por favor!!
Quote
Poca ideas y poca ayuda pero gracias igual a seguir buscando por otro lado
Que significa esto?

fernando3110

Hola disculpame que vuelva a decirte lo mismo los pasos de los motores es lo de menos sigo sin poder ingresar las coordenadas ejemplo X:10 lo de los motores y los driver es lo de menos para que invertir en otra cosa si no puedo solucionar esta, me entendiste ahora

Go Up