This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
problemas con control servos y motores
#1
hola,
quiero controlar dos servos y cuatro motores, los servos mediante un joystick y los motores mediante cuatro potenciometros.
ahora no tengo el código pero es bastante simple.
En principio el codigo es muy simple, leo la lectura de los potenciometros, hago un map de los valores que dan los potenciometros en las entradas analogicas y los adapto para que su valor sea de 0 a 255 y el valor los saco por los pines PWM del arduino UNO.

El problema que tengo yo diria que ruido, (ahora vereis el vídeo), igual estoy controlando un motor y se mueve algun servo, regulo otro motor hasta pararlo y si havia alguno con un pwm muy bajo tambien se para, etc. En el vídeo se puede ver.

los servos los alimento cada uno por separado, con un regulador DC-DC.
Los motores ya que son pequeños los alimento con otro regulador DC-DC, y unos transistores.

Alguien me puede ayudar para ver que pasa? Y como solucionarlo?



gracias
  Responder
#2
(29-09-2016, 07:41 PM)homer32 escribió: hola,
quiero controlar dos servos y cuatro motores, los servos mediante un joystick y los motores mediante cuatro potenciometros.
ahora no tengo el código pero es bastante simple.
En principio el codigo es muy simple, leo la lectura de los potenciometros, hago un map de los valores que dan los potenciometros en las entradas analogicas y los adapto para que su valor sea de 0 a 255 y el valor los saco por los pines PWM del arduino UNO.

El problema que tengo yo diria que ruido, (ahora vereis el vídeo), igual estoy controlando un motor y se mueve algun servo, regulo otro motor hasta pararlo y si havia alguno con un pwm muy bajo tambien se para, etc. En el vídeo se puede ver.

los servos los alimento cada uno por separado, con un regulador DC-DC.
Los motores ya que son pequeños los alimento con otro regulador DC-DC, y unos transistores.

Alguien me puede ayudar para ver que pasa? Y como solucionarlo?

https://www.youtube.com/watch?v=ItEUnNxf7Wk

gracias
Postea el código fuente, me da que estas teniendo problemas ahí... tiene toda la pinta de que a veces se te queda bloqueado el programa y deja de gestionar los motores, al menos, al principio, mientras estabas mandandole la posición al servo se te ha frenado el motor de la pieza grande circular.
  Responder
#3
el codigo es el siguiente:

Código:
#include <Servo.h>


/* entradas y descripcion de los motores
del robopingpong  27_07_2016 */

// Pin digital PWM que utilizaremos para alimentar el motor cadencia 
int motorcadencia = 3;
// Pin analógico que utilizaremos como entrada de datos de cadencia
int entradacadencia = A2;
// Variable que recogerá las lecturas de A2 motor cadencia bolas
int valorcadencia = 0;

// Pin digital PWM que utilizaremos para alimentar el motor superior 
int motorsuperior = 5 ;
// Pin analógico que utilizaremos como entrada de datos de top spin motor superior
int entrada_mot_sup = A3;
// Variable que recogerá las lecturas de A3 força efecte top spin
int valor_mot_sup = 0;

 // Pin digital PWM que utilizaremos para alimentar el motor inferior esquerra 
int motorinferioresquerra = 6;
// Pin analógico que utilizaremos como entrada de datos de inferior esquerra
int entrada_mot_inf_esquerra = A4;
// Variable que recogerá las lecturas de A4 força efecte esquerra
int valor_mot_inf_esquerra = 0;

 // Pin digital PWM que utilizaremos para alimentar el motor inferior dreta 
int motorinferiordreta = 11;
// Pin analógico que utilizaremos como entrada de datos de motor inferior esquerra
int entrada_mot_inf_dreta = A5;
// Variable que recogerá las lecturas de A5 força efecte dreta
int valor_mot_inf_dreta = 0;
 
 
 /* aqui configuramos los servos con el joystick  */
 
Servo panServo;//asignamos un eje a un servo y otro eje al otro servo      
Servo tiltServo;      

int servoPanPosition = 90;//posición de referencia horizontal
int servoTiltPosition = 90; // posición de referencia verical
int joystickPanSpeed = 0;
int joystickTiltSpeed = 0;
int joystickPanPin = A0; //marcamos entradas analógicas que medirán el ángulo del joystick
int joystickTiltPin = A1;
int servoPanPin = 9 ;//declaramos los pines digitales por donde le entrará la instrucción del joystick al servo.
int servoTiltPin = 10;
// int boton = 8;
 
 
void setup()
{
  // Configuramos los pines de los motores como salida, aunque no es necesario
  pinMode(motorcadencia, OUTPUT);
  pinMode(motorsuperior, OUTPUT);
  pinMode(motorinferioresquerra, OUTPUT);
  pinMode(motorinferiordreta, OUTPUT);
     
  pinMode(servoPanPin, OUTPUT);   //se declara igual que declarariamos un led
  pinMode(servoTiltPin, OUTPUT);  // se declara igual que declarariamos un led
  panServo.attach(servoPanPin);   //hace mover al servo1
  tiltServo.attach(servoTiltPin); //hace mover al servo2
}
 
void loop() 
{
  
  // Leemos el valor en la entrada analógica A2 y se lo asignamos a valorcadencia
  valorcadencia = analogRead(entradacadencia);
  //hacemos un mapeo de la señal, el valor de la entrada analogica de 0 a 1023 lo transformamos de 0 a 255 señal PWM
  valorcadencia = map(valorcadencia, 0,1023,0,255); //redondea el resultado entre 0 y 255
  // Determinamos el nivel de salida 
  analogWrite(motorcadencia, valorcadencia);
  
  // Leemos el valor en la entrada analógica A3 y se lo asignamos a valor_mot_sup
  valor_mot_sup = analogRead(entrada_mot_sup);
  //hacemos un mapeo de la señal, el valor de la entrada analogica de 0 a 1023 lo transformamos de 0 a 255 señal PWM
  valor_mot_sup = map(valor_mot_sup, 0,1023,0,255); //redondea el resultado entre 0 y 255
  // Determinamos el nivel de salida 
  analogWrite(motorsuperior, valor_mot_sup);
  
  // Leemos el valor en la entrada analógica A4 y se lo asignamos a valor_mot_inf_esquerra
  valor_mot_inf_esquerra = analogRead(entrada_mot_inf_esquerra);
  //hacemos un mapeo de la señal, el valor de la entrada analogica de 0 a 1023 lo transformamos de 0 a 255 señal PWM
  valor_mot_inf_esquerra = map(valor_mot_inf_esquerra, 0,1023,0,255); //redondea el resultado entre 0 y 255
  // Determinamos el nivel de salida 
  analogWrite(motorinferioresquerra , valor_mot_inf_esquerra);
  
  // Leemos el valor en la entrada analógica A5 y se lo asignamos a valor_mot_inf_dreta
  valor_mot_inf_dreta = analogRead(entrada_mot_inf_dreta);
  //hacemos un mapeo de la señal, el valor de la entrada analogica de 0 a 1023 lo transformamos de 0 a 255 señal PWM
  valor_mot_inf_dreta = map(valor_mot_inf_dreta, 0,1023,0,255); //redondea el resultado entre 0 y 255
  // Determinamos el nivel de salida 
  analogWrite(motorinferiordreta, valor_mot_inf_dreta);
  
  
  
  joystickPanSpeed = (analogRead(joystickPanPin) - 512) / 100;
    //  -512 Para proporcionar igualdad de +/- números
  joystickTiltSpeed = (analogRead(joystickTiltPin) - 512) / -100;
    // Negativo 50 a la dirección contraria

  servoPanPosition = constrain((servoPanPosition + joystickPanSpeed), 50, 130);
  servoTiltPosition = constrain((servoTiltPosition + joystickTiltSpeed), 1, 179);
    //  constrarin función para no exceder los límites de servo

  panServo.write(servoPanPosition);
  tiltServo.write(servoTiltPosition);

  delay(80);  // para ajustar la velocidad general del movimiento de los servos  
  
}
  Responder
#4
¿Un lanzador de pelotas de ping pong automático?

Los motores pueden estar metiendo ruido. Puedes poner soldados condesadores de lenteja entre las las patillas del motor para bajar ruidos.

https://www.pololu.com/docs/0J15/9

http://support.oreilly.com/oreilly/topic...lled_robot

tambien ferrita y los cables de los motores trenzados ayudan
  Responder
#5
si, sera un lanzador de pelotas de ping-pong
de momento lo he hecho con un joystick y un potenciometro para cada motor, creo que es la manera más fàcil. No se mucho de programación Gran sonrisa Gran sonrisa Gran sonrisa Gran sonrisa Gran sonrisa .
igual cuando esto este funcionando hago algun programa mejor, con un menú, etc..

provaré lo de los condensadores en los motores, los cables los tengo trenzados, tambien provaré con ferritas.
en los servos tambien tengo que poner ferritas?
he puestos condensadores de 100nF en la alimentación del joystick y de las salidas de los convertidores DC-DC. En las salidas de los convertidores tambien e puesto condensadores electroliticos.

Cuando funcione mas o menos ya subiré un vídeo.
  Responder
#6
He puesto condensadores en los motores y ferritas y ahora parece que va bien. Los servos no se mueven solos [SMILING FACE WITH OPEN MOUTH][SMILING FACE WITH OPEN MOUTH][SMILING FACE WITH OPEN MOUTH]


Enviado desde mi Edison 3 mediante Tapatalk
  Responder
#7
Guay, lo de los servos a mi me llego a pasar cuando controlaba 6 servos de forma simultanea para un brazo robotico diseñado y programado por mi... el hecho de tener muchos cables de señal juntos con una frecuenci a de conmutacion grande mas las bobinas de los motores... hacian que todo traquetease cosa mala.

Me alegro de que hayas encontrado una solucion, a mi ni se me habia ocurrido lo de los condensadores, y esta bien saberlo. Tambien te aconsejo que si alguna vez trabajas con bobinados, metas un diodo en antiparalelo para que al apagar la bobina la tension inversa que se genera no rompa nada, a los motores no tengo muy claro si les hacen falta, pero a los relés yo siempre se los pongo.
  Responder
#8
Hablando de controlar muchos servos, dejo esto por aquí. http://tienda.bricogeek.com/shields-ardu...-bits.html
Un shield de Adafruit para controlar hasta 16 servos mediante I2C.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Problema con motores y Arduino Nano Jericonsio 2 2,131 21-03-2019, 05:52 AM
Último mensaje: Jericonsio
  Control calefacción central arduino (colaboradores) jgarridc 0 1,011 27-11-2018, 08:33 PM
Último mensaje: jgarridc
  APORTE Control de Persiana por bluetooth kuadri 0 1,467 16-06-2018, 11:33 PM
Último mensaje: kuadri
  CONSULTA ROBOT DOS MOTORES CON SERVO PARA DIRECCION Miguelmetro 1 1,497 23-04-2018, 06:30 PM
Último mensaje: Iván
  presentacion y consulta sobre control split aire acondicionado Paquechu 20 6,431 09-08-2017, 06:39 AM
Último mensaje: jgarridc