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
Prototipo robot
Buenas a tod@s:

Triggerr aquí te dejo las fotos que me has pedido.

[Imagen: IMG_20140822_100614406_zps658935b9.jpg]

[Imagen: IMG_20140822_100623047_zps8c89ea2b.jpg]

Muchas gracias por vuestro tiempo e interés.

Ahora con la llegada imminente de la impresora, parece que tenga que venir un bebé, porque no tiempo para nada, solo para prepararlo todo para cuando llegue, jaja. Hasta el punto, que esta tarde me voy a comprar una mesa al IKEA especificamente para ella. Gaydude

P.D. Para regular la velocidad mediante los ENA y ENB, tendría que hacerlo escribiendolo en el código una sola vez al inicio, y así cuando active los diferentes IN ya tendrán regulada la velocidad, verdad?
  Responder
No alcanzo a ver las pistas Electro, comprueba con un polimetro que no tengan tension, no vaya a ser que esta alguna a masa o 5V y achicharremos algo ajjaja
  Responder
Buenas a tod@s:

Bueno... Triggerr ya tengo hechas las medidas. He hecho 2 para cada terminal para saber el voltaje en relación al positivo o negativo del driver.

ENA (pin interior de la placa) respecto al negativo me da 4.99V y respecto al positivo me da 6.94V
ENA (pin exterior de la placa) respecto al negativo me da 0.00V y respecto al positivo me da 7.16V

ENB (pin interior de la placa) respecto al positivo me da 6.96V y respecto al negativo 4.99V
ENB (pin exterior de la placa) respecto al positivo me da 7.10V y respecto al negativo 0.00V

He tomado dos medidas de cada pin para tener más información.

Muchas gracias Triggerr Sisi3

P.D. Entonces, los ENA y ENB se tendrían que conectar por el pin exterior correspondiente a los pines del Arduino, verdad???
  Responder
Si, son los exteriores, los que te den 0v al negativo.
  Responder
Buenas a tod@s:

Gracias El3ndil por tu respuesta, entonces conecto los IN como los tenía antes, y después cojo dos cables y los conecto al INA e INB respectivamenet, y después en el cógido sería algo similar a:

Void loop (){

DigitalWrite (INA, 127); //Para que vaya a una velocidad regular)
DigitalWrite (INB, 127);

------- (Resto de código) ----

Y los IN en HIGH y LOW como antes, me equivoco? Pero, si quisiese regular la velocidad en función de la distancia hasta el obstaculo, como lo podría variar? (Variando el numero de INA e INB, pero digamos que ahora se queda en un valor fijo)
  Responder
Hola, Electromecánico.

Muy sencillo.

Tendrías que crear una variable velocidad.

Por ejemplo.

Velocidad = 127

y después canviar con los if por ejemplo.

if(distancia2 > 20) { velocidad = 100; }
if(distancia2 > 15 && 20 < velocidad2) { velocidad = 90; }
...

Seria una forma de hacerlo.

Espero que la entiendas, cualquier duda, ya sabes!

Saludos, Jero
  Responder
Buenas a tod@s:

He hecho cambios en el código para poner los ENA y ENB. Los he conectado en pines PWM del Arduino y el código lo he dejado de esta forma:

He vuelto a poner HIGH y LOW segun conveniese en los IN y en los ENA y ENB he puesto el valor PWM. Lo que veo es que no hace ningún cambio si vario el valor de los EN, da igual si pongo 10 o 255 o 127. Donde está el error? Lo he puesto mal dentro del código? Lo tendría que poner junto a los IN cuando les doy valor HIGH o LOW?

Código:
#include <Servo.h>
long distancia1;
long distancia2;
long distancia3;
long tiempo;
Servo servo;

int IN3 = 4;
int IN4 = 7;
int IN1 = 2;
int IN2 = 12;
int ENA = 5;
int ENB = 6;

void setup(){
  Serial.begin(9600);
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
  servo.attach(10);
  pinMode (IN4, OUTPUT);  
  pinMode (IN3, OUTPUT);    
  pinMode (IN2, OUTPUT);  
  pinMode (IN1, OUTPUT);    
  pinMode (ENA, OUTPUT);  
  pinMode (ENB, OUTPUT);
}

void loop(){
  digitalWrite(5,255);
  digitalWrite(6,255);  
  servo.write(10);
  delay(500);
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia1= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.print("Distancia 1 ");
  Serial.print(distancia1);
  Serial.println(" cm");
  delay(750);
  servo.write(90);
  delay(500);
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia2= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.print("Distancia 2 ");
  Serial.print(distancia2);
  Serial.println(" cm");
  delay(750);
  servo.write(180);
  delay(500);
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia3= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.print("Distancia 3 ");
  Serial.print(distancia3);
  Serial.println(" cm");
  delay(750);
  servo.write(90);
  delay(500);
  
  
  if (distancia2 >= distancia1 && distancia2 >= distancia3) //Va hacia delante
  {
    Serial.print("Distancia 2 en moviment ");
  Serial.print(distancia2);
  Serial.println(" cm");
  delay(750);
  digitalWrite (IN4, LOW);
  digitalWrite (IN3, HIGH);
  digitalWrite (IN2, LOW);
  digitalWrite (IN1, HIGH);
  delay (1000);
  digitalWrite (IN3, LOW);
  digitalWrite (IN1, LOW);
  delay(250);
  }
  if (distancia1 >= distancia2 && distancia1 >= distancia3) //Va hacia la dereha
  {
    Serial.print("Distancia 1 en moviment ");
  Serial.print(distancia1);
  Serial.println(" cm");
  delay(750);
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW);
  digitalWrite (IN2, LOW);
  digitalWrite (IN1, HIGH);
  delay (200);
  digitalWrite (IN4, LOW);
  digitalWrite (IN1, LOW);
  delay(350);
  }
  if (distancia3 >= distancia1 && distancia3 >= distancia2) // Va hacia la izquierda
  {
    Serial.print("Distancia 3 en moviment ");
  Serial.print(distancia3);
  Serial.println(" cm");
  delay(750);
  digitalWrite (IN4, LOW);
  digitalWrite (IN3, HIGH);
  digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW);
  delay(200);
  digitalWrite (IN3, LOW);
  digitalWrite (IN2, LOW);
  delay(350);
  }
   if (distancia2 <= 5)
  {
  digitalWrite (IN4, HIGH); //Va hacia atrás
  digitalWrite (IN3, LOW);
  digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW);
  delay(500);
  digitalWrite (IN4, LOW);
  digitalWrite (IN2, LOW);
  delay(350);
  }
    digitalWrite(5,0);
  digitalWrite(6,0);
  
}
  Responder
Te falta poner a mi vista por ejemplo:

analogWrite(ENA, 50);
analogWrite(ENB, 50);

Prueba de ponerlo en hacia adelante así:
digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite(ENA, 50);
analogWrite(ENB, 50);

Saludos Jero
  Responder
Buenas a tod@s:

Jero, en ninguna de las formas funciona. Y tienes razón, era mejor poner ENA y ENB en lugar del numero de pin (fallo mío).

Pero la segunda opción parece no funcionar. Ni poniendolo delante ni detrás :S

El cableado y conexionado parece correcto. Pero los pines ENA y ENB no parecen funcionar correctamente.
  Responder
Yo juraria que no son los Externos, sino los internos, si los externos ambos dan 0V midiendo respecto de GND, es que sirven para poner a 0 los EN, que crei leer en algun lado que poniendolos a 0 era cuando se movian los motores, tendria que revisar la wiki....

No he dicho nada, que se activan en nivel alto

Prueba a meterle un valor de PWM mas alto aver
  Responder
Buenas a tod@s:

Trigger, si lo pongo en los internos, simplemente el robot se queda inmovil :S
  Responder
Despues de rebuscar un poquito he encontrado un ejemplo, aunque no se veia muy bien para tu driver no utilizan los EN con el PWN, si no que utilizan los pares 2 y 4.

Es decir:

digitalWrite (IN1, HIGH);
analogWrite(IN2, 100);
digitalWrite (IN3, HIGH);
analogWrite(IN4, 100);

Tendrias que dejar los enable con el jumper y conectar esos pines.

El ejemplo lo he visto en este video de youtube:
https://www.youtube.com/watch?v=ZcSDcjQktuk

Sinceramente aun tengo mis dudas, pero mas no puedo ayudarte ya que no puedo probarlo directamente.

Prueba y nos vas comentado.

PD: Los PWN hay que poner "analogWrite" que veo que en el codigo estas poniendo "digitalWrite", que es lo que te queria decir el compañero Jero, no se referia a lo del pin.
  Responder
Código:
#define SON_OUT 9
#define SON_IN 10
#define IN1 7
#define IN2 5
#define IN3 8
#define IN4 6

long Tiempo;
long Distancia;
int Velocidad;

void setup()
{

  pinMode(LED, OUTPUT);
}

void setup(){
  Serial.begin(9600);
  pinMode (SON_OUT, OUTPUT);
  pinMode (SON_IN, INPUT);
  pinMode (IN1, OUTPUT);  
  pinMode (IN2, OUTPUT);  
  pinMode (IN3, OUTPUT);  
  pinMode (IN4, OUTPUT);  
}

void loop()
{
  digitalWrite(SON_OUT,LOW);
  delayMicroseconds(5);
  digitalWrite(SON_OUT, HIGH);
  delayMicroseconds(10);
  Tiempo=pulseIn(SON_IN, HIGH);
  Distancia= int(0.017*Tiempo);
  Velocidad = map(Distancia,0,50,0,255);
  
  if (Velocidad < 255)
  {
      digitalWrite (IN1, HIGH);
      analogWrite(IN2, Velocidad);
      digitalWrite (IN3, HIGH);
      analogWrite(IN4, Velocidad);
      delay(100);
  }
}

Te he puesto un ejemplo sencillo que acabo de hacer a ojo mas o menos.
Si la distancia que detecta el sonar es menos de 50cm se van activar el motor, la velocidad sera dependiendo de la distancia a mayor distancia mas rapido, deberia ir disminuyendo segun se va acercando.
He omitido el servo.

Si quieres guarda tu ejemplo y prueba ese, que para que pruebes si funciona el PWN y la variacion de la velocidad deberia valerte.
No lo he podido depurar y estoy algo oxidado, a lo mejor me comido algo Lengua

Prueba y nos cuentas.
  Responder
Buenas a tod@s:

El3ndil, he tenido que corregir un par de detalles en tu código.

Lo he probado y parece que no funciona. Tiene un obstaculo delante y se estampa. Y la velocidad no la modifica en ningún momento :S

De todas formas muchas gracias por el interés.

Continuaré mirando e investigando a ver que puede ser.
  Responder
Electro, intenta probarlo por separado, sin los sensores, para ver si en verdad podemos regular el motor o no, vete probando diferentes valores de PWM y asegurate, de que el PIN a lo que lo conectas sea PWM que todos no son PWM
  Responder
Los pins PWM van indicados en arduino normalmente con "~"
  Responder
Buenas a tod@s:

Sí sí, jero eso ya lo sé.

De acuerdo Triggerr haré lo que comentas para así descartar cosas.

Gracias a tod@s.
  Responder
Electromecánico escribió:Buenas a tod@s:

El3ndil, he tenido que corregir un par de detalles en tu código.

Lo he probado y parece que no funciona. Tiene un obstaculo delante y se estampa. Y la velocidad no la modifica en ningún momento :S

De todas formas muchas gracias por el interés.

Continuaré mirando e investigando a ver que puede ser.

Juer que misterio...... :dale2:
Estoy por coger un arduino y un drive para hacer yo tambien las pruebas Meparto
  Responder
Para estas cosas, prueba las cosas por modulos y luego las implementas, es lo mejor para conocer el funcionamiento de cada modulo Sisi3 Sisi3
  Responder
Buenas a tod@s:

Eureka!!!! Confundidoing:

Hay que reconocerlo, esta vez, gracias a Jero que me ha pasado el siguiente código que he implementado dentro del código que ya tenía y funciona:


Código:
#include <Servo.h>
long distancia1;
long distancia2;
long distancia3;
long tiempo;
Servo servo;

int IN3 = 4;
int IN4 = 7;
int IN1 = 2;
int IN2 = 12;
int ENA = 5;
int ENB = 6;

void setup(){
  Serial.begin(9600);
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
  servo.attach(10);
  pinMode (IN4, OUTPUT);  
  pinMode (IN3, OUTPUT);    
  pinMode (IN2, OUTPUT);  
  pinMode (IN1, OUTPUT);    
  pinMode (ENA, OUTPUT);  
  pinMode (ENB, OUTPUT);
}

void loop(){
  digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite (ENA,50);
analogWrite (ENB, 50);
delay(3000);
  digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite (ENA,250);
analogWrite (ENB, 250);
delay(3000);
}


Funciona correctamente la variación de la velocidad de los motores.

Ahora lo implementaré a mi código y listos Sonrisa

Muchas gracias a todos por vuestro granito de arena. Lamento ser tan patoso, pero nunca había trabajado con drivers, y en Arduino no llevo ni un año. Por eso me gusta hacer proyectos para ir aprendiendo y ver como funcionan las cosas. Supongo que con el tiempo, podré ser tan grandes como vosotros.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Robot sube escaleras Linoge 13 8,691 03-08-2020, 12:52 PM
Último mensaje: nachito15
  Robot vintage "monty" DiegoLale 17 10,429 12-11-2017, 08:41 PM
Último mensaje: zilog_z80
  [PRESENTACION] Robik - un robot que mueve el cubo de rubik Michi 4 3,287 29-03-2017, 11:37 AM
Último mensaje: Drey
  Objetivo: robot educativo por menos de 20€ sistemasorp 33 10,372 25-02-2017, 10:51 AM
Último mensaje: RPM
  [Worklog] Robot acuático JALC biketrial981 67 16,339 08-01-2016, 11:55 PM
Último mensaje: biketrial981