Control de Motores DC/PAP con Puente H

Responder
erhuse
Extractor
Mensajes: 113
Registrado: Mié Mar 06, 2013 1:33 am

centro
622 237
537 41
621 235
536 39
622 237
539 45
621 235
536 39
619 230
536 39
izquierda
1020 1119
539 45
1022 1124
538 43
1021 1122
537 41
1021 1122
537 41
1020 1119
537 41
1021 1122
537 41
1022 1124
derecha
45 997
541 49
45 997
537 41
45 997
538 43
46 995
537 41
45 997
539 45
45 997
arriba
6 1187
604 197
8 1182
605 199
8 1182
605 199
7 1185
605 199
7 1185
605 199
7 1185
605 199
abajo
592 170
1021 955
591 168
1022 957
593 172
1023 959
592 170
1022 957
592 170
1022 957
591 168
1023 959
Avatar de Usuario
shaktale
Extractor
Mensajes: 140
Registrado: Sab Ene 26, 2013 2:38 pm

Tienes dos posibilidades...
O tu joystick esta fatal...
O tienes mal asignados los pines en el scketch, me explico, no los tienes asignados como entrada.


Una tercera..que le ha dado ciertos problemas a varios compañero es la version del IDE de Arduino y la version de las librerias, pero tu no te quejas de fallas de temperatura, aun asi prueba con el version 0023 del IDE


SUERTE
Para algunos, la vida es galopar un camino empedrado de horas, minutos y segundos. Yo, más humilde soy,
y solo quiero que la ola que surge del último suspiro de un segundo me transporte mecido hasta el siguiente.
erhuse
Extractor
Mensajes: 113
Registrado: Mié Mar 06, 2013 1:33 am

gracias por la respuesta, asignados bien estan por que e seguido el sckech de patogomall, e pedido un joy nuevo por que los dos que tengo son sacados de un mando de ps1 y igual esan echos polvo.
Avatar de Usuario
marito048
Reboleador Extremo
Mensajes: 717
Registrado: Jue May 17, 2012 10:25 pm

Yo veo bien los valores, a partir del centro debes definir el estado de frenado de los motores.
Me parece que mejor arranques con un sketch solamente para los motores, para asegurarte que funcionen bien. Igualmente si los motores no mueven, el puente H tienen unos led que varían su intensidad de acuerdo moves el joy y te marca si se activa uno u otro motor.
Suerte y no le aflojes!!!
"...Y pensar que dmingo cerró su hilo "Nuevo Proyecto:Arduino Rework" por falta de cuorum..."

[infobox]Maquinas Caseras en Construcción/Terminadas
>>>Máquina Brigantia d'arduino (Actualizado 14/09/2012)<<<>>>Maquina de JAGG<<<
>>>Empezando mi Maquina Reballing<<<>>>HELENE 150<<<[/infobox]
[successbox]MUSICA
Un par de temas Nacionales Argentinos[/successbox]
erhuse
Extractor
Mensajes: 113
Registrado: Mié Mar 06, 2013 1:33 am

hola marito gracias por responder, los motores no es que no se muevan si no que no paran :roll: y cuando paran no responden como deberian, no cambian el sentido lo que si varían bien son la velocidad, hoy tengo algo de trabajo, pero esta noche volvere a hacer pruebas, es normal que los valores vayan tan rapido?
sobre el schech estoy usando el que me paso patogomall que es solo para los motores no estoy usando aun el bueno por que no tengo suficientes salidas, el miércoles o jueves ya tendré a qui el arduino mega, y ya usare el sckech con los finales de carrera y demas.
si no me decis lo contrario es que las conexiones de joy estan bien no? ya que hacia un lado si responden medio bien, pero al otro lado no varian el sentido, yo creo que es el joy, e pedido uno montado para arduino que va en una plaquita bastante economico.
edito, poco a pco los voy controlando, pero van los dos a la vez y no van finos, puede que sea demasiado sensible el joy?
Avatar de Usuario
marito048
Reboleador Extremo
Mensajes: 717
Registrado: Jue May 17, 2012 10:25 pm

Descargue el de PatogomaII y no lo mire bien aun, te recomiendo con la programación pelada para los motores, sin control de posición ni nada. Es norma que vayan tan rapido, son milésimas el loop de arduino- bah,cualquier bucle- por eso te decía de poner un delay para frenar un poco el muestreo de los valores. Una vez que determines el centro de los joy que veo que uno anda en 620 maso y el otro 535 - deja +/- 5 o 10 para el centro- en ese rango no debe hacer nada de nada, ahora si moves para arriba o para abajo -lo mismo para derecha e izquierda- saliendo del rango del centro y según si es mayor o menor va a mover para un lado o para otro. OJO, yo te digo esto en base a mi sketch que es muy basico y esta hecho con simples "if", que en programación no es para poner ni encadenar tantos, pero bue...
Una vez que entiendas bien como se maneja, sigue con le de PatogomaII, a mi parecer seria lo mejor.
Saludos..
"...Y pensar que dmingo cerró su hilo "Nuevo Proyecto:Arduino Rework" por falta de cuorum..."

[infobox]Maquinas Caseras en Construcción/Terminadas
>>>Máquina Brigantia d'arduino (Actualizado 14/09/2012)<<<>>>Maquina de JAGG<<<
>>>Empezando mi Maquina Reballing<<<>>>HELENE 150<<<[/infobox]
[successbox]MUSICA
Un par de temas Nacionales Argentinos[/successbox]
erhuse
Extractor
Mensajes: 113
Registrado: Mié Mar 06, 2013 1:33 am

el codigo que uso es este, que posteo patogomall despues del que usa donde cambio esos valores para que no hagan nada entre los rangos que me dices?

/Manejo de ejes x y con un joystick analogico
#define motor1_enable 3 //define los pines del puente H
#define motor2_enable 9 // por enable A y B se envia el pulso
#define motor1A A5 //PWM para variar la velocidad de los
#define motor1B A4 //motores, y por los pines in1-in4
#define motor2C A3 //activa el sentido de la marcha
#define motor2D A2 //de los motores

#define ejex 2
#define ejey 5

#define joy1ejex 0
#define joy1ejey 1


int valorjoy1ejex, valorjoy1ejey, fincarx, fincary;


void setup ()
{
Serial.begin (9600);
pinMode (motor1_enable, OUTPUT);
pinMode (motor2_enable, OUTPUT);
pinMode (motor1A, OUTPUT);
pinMode (motor1B, OUTPUT);
pinMode (motor2C, OUTPUT);
pinMode (motor2D, OUTPUT);
pinMode (ejex, INPUT);
pinMode (ejey, INPUT);
}
void loop ()
{
valorjoy1ejex = analogRead(joy1ejex);//lee los estados de los
valorjoy1ejey = analogRead(joy1ejey);//potenciometros
//Lee los sensores de fin de carrera

//---------------------eje x----------------------------
Serial.print (valorjoy1ejex);

if (valorjoy1ejex >= 515)//mueve a la derecha cabezal, 515 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 515, 630, 0, 255);
if (valorjoy1ejex > 240)
{
valorjoy1ejex == 255;
}
Serial.print ("\t");
Serial.println (valorjoy1ejex);

analogWrite (motor1_enable, valorjoy1ejex);
digitalWrite (motor1A, HIGH);
digitalWrite (motor1B, LOW);
}
else
{

if (valorjoy1ejex <= 495)//mueve a la izquierda cabezal, 495 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 380, 495, 255, 0);
if (valorjoy1ejex > 240)
{
valorjoy1ejex == 255;
}
Serial.print ("\t");
Serial.println (valorjoy1ejex);
analogWrite (motor1_enable, valorjoy1ejex);
digitalWrite (motor1A, LOW);
digitalWrite (motor1B, HIGH);
}
else
{
valorjoy1ejex = 0;
Serial.print ("\t");
Serial.println (valorjoy1ejex);
analogWrite (motor1_enable, valorjoy1ejex);
digitalWrite (motor1A, LOW);
digitalWrite (motor1B, LOW);
}
}
//-----------------eje y -------------------------------
Serial.print (valorjoy1ejey);

if (valorjoy1ejey >= 515)//mueve arriba cabezal, 515 es el centro
{ // del joystick
valorjoy1ejey = map (valorjoy1ejey, 515, 650, 0, 255);
if (valorjoy1ejey > 240)
{
valorjoy1ejey == 255;
}
Serial.print ("\t");
Serial.println (valorjoy1ejey);
analogWrite (motor2_enable, valorjoy1ejey);
digitalWrite (motor2C, HIGH);
digitalWrite (motor2D, LOW);
}
else
{
if (valorjoy1ejey <= 495)//mueve abajo cabezal, 495 es el
{ // centro del joystick
valorjoy1ejey = map (valorjoy1ejey, 390, 495, 255, 0);
if (valorjoy1ejey > 240)
{
valorjoy1ejey == 255;
}
Serial.print ("\t");
Serial.println (valorjoy1ejey);
analogWrite (motor2_enable, valorjoy1ejey);
digitalWrite (motor2C, LOW);
digitalWrite (motor2D, HIGH);
}
else
{
valorjoy1ejey = 0;
Serial.print ("\t");
Serial.println (valorjoy1ejey);
analogWrite (motor2_enable, valorjoy1ejey);
digitalWrite (motor2C, LOW);
digitalWrite (motor2D, LOW);
}
}


}
Avatar de Usuario
PatogomaII
ReballingAdicto!!
Mensajes: 2906
Registrado: Vie Mar 22, 2013 6:38 pm

erhuse escribió:
if (valorjoy1ejex >= 515)//mueve a la derecha cabezal, 515 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 515, 630, 0, 255);

if (valorjoy1ejex <= 495)//mueve a la izquierda cabezal, 495 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 380, 495, 255, 0);

if (valorjoy1ejey >= 515)//mueve arriba cabezal, 515 es el centro
{ // del joystick
valorjoy1ejey = map (valorjoy1ejey, 515, 650, 0, 255);

if (valorjoy1ejey <= 495)//mueve abajo cabezal, 495 es el
{ // centro del joystick
valorjoy1ejey = map (valorjoy1ejey, 390, 495, 255, 0);
Estas líneas son las que determinan los rangos de acción de los potenciómetros. Los míos tienen muy poco rango. Te lo explico con el primer caso y tú ya sigues con los demás. No se trata de saber programar sino de cuadricular la mente:

if (valorjoy1ejex >= 515)//mueve a la derecha cabezal, 515 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 515, 630, 0, 255);

if (valorjoy1ejex <= 495)//mueve a la izquierda cabezal, 495 es
{ //el centro del joystick
valorjoy1ejex = map (valorjoy1ejex, 380, 495, 255, 0);

Mi joystick va desde 380 a la izquierda hasta 630 a la derecha. El centro lo tiene en 505. En estas líneas si el valor es menor que 515 o mayor que 495 no hace nada (esos son los +-10 que te dice Marito).
Desde 515 hasta 630 lo mapea (transforma proporcionalmente) en valores de 0 a 255, que son los valores de aceleración a la derecha.
Desde 380 hasta 495 los mapea de 255 a 0, que son aceleración a la izquierda.

Es fácil!!! :mrgreen:

En tu caso, los valores serían centro en 622, o sea, movimiento derecha desde 632 hasta 1020 que es el máximo que te ha salido, y movimiento izquierda, desde 45 hasta 612.
"Los técnicos existimos porque los ingenieros también necesitan héroes!!!"
(visto en una camiseta)
erhuse
Extractor
Mensajes: 113
Registrado: Mié Mar 06, 2013 1:33 am

muchisimas gracias, el motro 1 ya lo muevo bien, el motor dos que es el que sube y baja lo e puesto asi:

if (valorjoy1ejey >= 614)//mueve arriba cabezal, 614 es el centro
{ // del joystick
valorjoy1ejey = map (valorjoy1ejey, 624, 1082, 0, 255);
if (valorjoy1ejey > 240)
{
valorjoy1ejey == 255;
}
Serial.print ("\t");
Serial.println (valorjoy1ejey);
analogWrite (motor2_enable, valorjoy1ejey);
digitalWrite (motor2C, HIGH);
digitalWrite (motor2D, LOW);
}
else
{
if (valorjoy1ejey <= 592)//mueve abajo cabezal, 602 es el
{ // centro del joystick
valorjoy1ejey = map (valorjoy1ejey, 602, 959, 255, 0);
if (valorjoy1ejey > 240)
{
valorjoy1ejey == 255;
}

y no para ni moviendo el joy ni na de na a ver si me llega mañana el joy y salgo de dudas.
por lo menos ya muevo uno bien y me sirve para hacer preubas, muchas gracias, sigo probando cosas a ver si lo saco yo solo :lol: :P
Avatar de Usuario
PatogomaII
ReballingAdicto!!
Mensajes: 2906
Registrado: Vie Mar 22, 2013 6:38 pm

959,602

Tienes el centro en 530. El máximo en 1024 y el mínimo en 6
"Los técnicos existimos porque los ingenieros también necesitan héroes!!!"
(visto en una camiseta)
Responder