problema con motores

Cerrado
Avatar de Usuario
macgyver82
Pop Corn
Mensajes: 37
Registrado: Mar Nov 05, 2013 3:12 pm

Hola a todos soy nuevo por el foro soy novato en el tema y estoy empezando a hacer mi maquina arduino rework con piezas de impresora y caja de pc,resulta que tengo un problema con los motores de impresora cuando le doy al joystick de ps2 se mueven los dos motores al mismo tiempo adelante y atras
uso el arduino uno r3 y un l293d he usado el sketch de esta pagina pero no se si esta bien ya que estoy empezando con arduino y estoy un poco verde ;) pongo unas fotos conforme vaya avanzando subire mas.
http://electroniqueamateur.blogspot.pt/ ... stick.html
Imagen
Imagen
Imagen


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

Muy buenas. Por si no lo has leido, Mr. Chip se molestó en poner esto en el hilo de presentaciones para que lo leyéramos y nos orientara a la hora de presentarnos:
Pues eso, abro este hilo para que hagamos aquí­ las presentaciones :roll: Serí­a muy interesante saber de cada uno el: "quienes somos, de dónde venimos, a dónde vamos..." Así­ saber cómo nos conociste, etc.

Espero tu saludo por aquí­... Ahí­ va el primero:

Un saludo.

Edito a 02/03/2013

Por favor, en este hilo se pide que nos cuentes algo sobre ti y tus conocimientos en torno al Reballing, electrónica, informática, etc.

Cuando decía en febrero de 2010 "quienes somos, de donde venimos y a donde vamos... ", me refería a eso mismo... que nos narres sobre tus conociminetos en estos terrenos. No importa si son pocos, muchos o incluso nulos, pero es bueno para todos saberlo.

Recuerda que estás en un Foro técnico, apto para todo tipo de usuarios.

Ahora bien, en este foro postearás entre otras cosas, tus dudas e inquietudes. Comprende que será dificil responderte si no sabemos de antemano algo sobre tus conocimientos, a fin de ofrecerte una respuesta acorde a los datos que dejas en este hilo sobre ti.

Lo cual no quita que puedas decir algo más: tus aficiones, ubicación, procedencia, estudios, etc. Pero por favor, no te limites solo a ello.

Mensajes breves, tales como: "Hola, soy fulano y estoy en tal lugar"; "Hola, me encanta este foro..." sin más texto de presentación, pueden ser borrados sin previo aviso en este hilo y la cuenta puede ser baneada temporalmente.

Gracias por tu colaboración y bienvenido!
Por favor, edita tu presentación conforme a esta norma.

Este tema queda cerrado hasta entonces.
"Los técnicos existimos porque los ingenieros también necesitan héroes!!!"
(visto en una camiseta)
Avatar de Usuario
PatogomaII
ReballingAdicto!!
Mensajes: 2906
Registrado: Vie Mar 22, 2013 6:38 pm

Bueno, pues tras la debida presentación de su autor, me congratula reabrir de nuevo este prometedor hilo :D

En cuanto a tus dudas con los motores, pon un esquema o dibujillo de cómo los has conectado para que te podamos ayudar.
Yo me basé en ese sketch para la mía pero tuve que cambiar los parámetros de lectura de los potenciometros del stick. Activa la salida al serial monitor para monitorizar los valores de los potenciometros, anota los valores entre rangos de movimiento y centro.

Por otro lado, te aconsejo que no uses el sistema de arrastre por correa de la impresora para el movimiento horizontal del top, ya que es muy impreciso. Usa mejor un sinfín o varilla roscada.
Plantéate también usar motores de pasos en vez de motores DC. Yo tengo en proyecto cambiarlos en la mía para tener la precisión suficiente como para equiparla con posicionador automático.

Pues nada, bienvenido, gracias por tu correcta presentación y estaremos atentos a tu hilo y dispuestos a ayudar en lo que podamos.
"Los técnicos existimos porque los ingenieros también necesitan héroes!!!"
(visto en una camiseta)
Avatar de Usuario
Tago
manteca
Mensajes: 204
Registrado: Mar Dic 13, 2011 10:34 pm

PatogomaII escribió:Muy buenas. Por si no lo has leido, Mr. Chip se molestó en poner esto en el hilo de presentaciones para que lo leyéramos y nos orientara a la hora de presentarnos:
Pues eso, abro este hilo para que hagamos .......
......
......
Gracias por tu colaboración y bienvenido!
Por favor, edita tu presentación conforme a esta norma.

Este tema queda cerrado hasta entonces.

Un Zasca de buen rollo espabila a cualquier forero jajajaja, no te preocupes MacGyver82 aquí casi todos los hemos sufrido en nuestras carnes/espaldas/ posts :lol: :lol: .

Por otro lado, tiene muy buena pinta tu hilo, así que tendrás publico para rato ;), la recomendación es leer mucho porque cuando algo se te atasca seguro que hay posts de 2009/10/11 donde alguien planteaba eso mismo ... (experiencia personal).

Saludos
Tago

PD: Pato ni es tan malo ni es de goma. :lol: :lol: :lol:
...
Cuentan de un sabio que un día tan pobre y mísero estaba, que sólo se sustentaba de unas hierbas que cogía. ¿Habrá otro, entre sí decía,más pobre y triste que yo?; y cuando el rostro volvió halló la respuesta, viendo que otro sabio iba cogiendo las hierbas que él arrojó.
...
La vida es sueño. Calderón de la Barca
Avatar de Usuario
macgyver82
Pop Corn
Mensajes: 37
Registrado: Mar Nov 05, 2013 3:12 pm

jeje se me paso por alto la presentacion y eso que he leido bastante el foro :oops:
bueno el problema que tengo es el codigo sketch del arduino que es este el que he usado:

#define motorPin1a 3 // Forward the first motor
#define motorPin1b 4 // Backtrack the first motor
#define speedPin1 9 // L293D enable pin for the first engine
#define motorPin2a 5 // Forward the second-engine
#define motorPin2b 6 // Backtrack's second-motor
#define speedPin2 10 // L293D enable pin for the second-engine
#define JoyStickPin1 1 //analog 1
#define JoyStickPin2 2 //analog 2

int Mspeed= 0;
int Mspeed1 = 0;
int Mspeed2 = 0;

unsigned long time;

void setup() {

// © actual setting pins to output
pinMode(motorPin1a, OUTPUT);
pinMode(motorPin1b, OUTPUT);
pinMode(speedPin1, OUTPUT);
pinMode(motorPin2a, OUTPUT);
pinMode(motorPin2b, OUTPUT);
pinMode(speedPin2, OUTPUT);
}

void loop() {
Mspeed1 = (analogRead(JoyStickPin1)-511)/2;
Mspeed1 = Mspeed1 - (analogRead(JoyStickPin2)-511)/2;
if (Mspeed1 > 255) {
Mspeed1 = 255;
}
if (Mspeed1 < -255) {
Mspeed1 = -255;
}

Mspeed2 = (analogRead(JoyStickPin1)-511)/2;
Mspeed2 = Mspeed2 + (analogRead(JoyStickPin2)-511)/2;
if (Mspeed2 > 255) {
Mspeed2 = 255;
}
if (Mspeed2 < -255) {
Mspeed2 = -255;
}

if (Mspeed1 > 0) // So Backtrack
{
analogWrite(speedPin1, abs(Mspeed1));
digitalWrite(motorPin1a, LOW);
digitalWrite(motorPin1b, HIGH);
}
else { // therefore forward (or rest)
analogWrite(speedPin1, abs(Mspeed1));
digitalWrite(motorPin1a, HIGH);
digitalWrite(motorPin1b, LOW);
}

if (Mspeed2 > 0) // So Backtrack
{
analogWrite(speedPin2, abs(Mspeed2));
digitalWrite(motorPin2a, LOW);
digitalWrite(motorPin2b, HIGH);
}
else // therefore forward (or rest)
{
analogWrite(speedPin2, abs(Mspeed2));
digitalWrite(motorPin2a, HIGH);
digitalWrite(motorPin2b, LOW);
}
}
y este el esquema.:
Imagen
los motores se mueven perfectamente adelante y atras lo malo es que no van independientes creo que hay que cambiar los parametros de lectura de los potenciometros pero ni papa :roll:
Avatar de Usuario
PatogomaII
ReballingAdicto!!
Mensajes: 2906
Registrado: Vie Mar 22, 2013 6:38 pm

Un potenciometro lee de 0 a 1024 y la velocidad de un motor se regula de 0 a 255.
El programa resta a la lectura de cada potenciometro 511 unidades y divide entre 2 el resultado para hacer la equivalencia entre la lectura de la posicion del joystick y la cantidad de potencia y sentido que tiene que aplicar al motor.
En el caso del joystick a tope, leería 1024, menos 511 sería 513, entre 2 sería 256.5, que como es mayor que 255, el programa lo afina a 255 que es la velocidad máxima en positivo (hacia adelante).
En el caso del joystick en el centro, leería 511, menos 511 sería 0, dividido entre 2 sigue dando 0, manda velocidad 0 al motor, o sea, motor parado.
Las lecturas de los potenciometros nunca son estables, así que nunca vamos a tener el 0 perfecto y los motores siempre van a estar moviéndose un poco. Tienes que procurarte un margen en el que si el valor de la velocidad es +-10, que lo ponga a 0, o sea:

if (Mspeedx > -10) && (Mspeedx < 10) {
Mspeedx = 0;
}


Puedes aumentar ese valor a 20 o 30, según el margen que necesites.

Yo prefiero mapear los valores de los potenciometros y trabajar directamente con el rango de 0 a 255 en vez de tanto restar y dividir:

Mspeedx = map(analogRead(JoyStickPinx), 0, 1023, -255, 255);
"Los técnicos existimos porque los ingenieros también necesitan héroes!!!"
(visto en una camiseta)
Avatar de Usuario
macgyver82
Pop Corn
Mensajes: 37
Registrado: Mar Nov 05, 2013 3:12 pm

La verdad es que no tengo mucha idea de programar el arduino tendre que aprender de 0 ;)
ahora tengo trabajo y estoy ocupado y no puedo ponerme con la maquina,gracias por la ayuda prestada.

saludos
Cerrado