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
Ole!! Enhorabuena!! Guiño

Por fin!

No hay que rendirse!

Ahora a disfrutar y a continuar mejorándolo!

Queremos video!!
  Responder
:aplauso: :aplauso: :aplauso:

Acostado pero al final ya lo tienes funcionando Gran sonrisa ahora a seguir mejorandolo :one:
  Responder
Buenas a tod@s:

Al final lo del código lo que he cambiado es anular lo de la marcha atrás ya que si toma la medida central menor a 10 pues aunque primero dé por buena la distancia mayor y haga el consecuente movimiento, después iba hacia atrás.

Lo he eliminado y así solo hace un movimiento Sonrisa También podría hacer que si las 3 medidas son menor a 10 vaya para atrás y así no me hará dos movimientos.
  Responder
El3ndil escribió::aplauso: :aplauso: :aplauso:

Acostado pero al final ya lo tienes funcionando Gran sonrisa ahora a seguir mejorandolo :one:

Buenas a tod@s:

Abrí el hilo el 1 de junio. Por lo tanto he tardado 3 meses Facepalm Ha costado, no hace falta que lo digas. Pero he aprendido mucho, y todo gracias a vosotros. Ahora ya sé como van los drivers y como hay que conectarlos y los jumpers y toda la historia. Y bueno... ahora a mejorarlo.

Lo del servo que me comentáis? Lo dejo así o lo vuelvo a conectar al Arduino para alimentarlo?
  Responder
Buenas a tod@s:

He soldado el servo para que coja la alimentación a través del Arduino y ningún problema. Esa forma, me gusta más ya que así lo controlo todo desde un solo interruptor, cosa que antes tenía dos interruptores, el general, y el del servo.
  Responder
Electromecanico, la alimentacion del servo a las pilas SI o SI, porque te pide mucha corriente y en algun momento el arduino se vuelve loco o en caso extraordinario puedes quemar algo del arduino.

por otro lado donde esta el video? queremos ver como te esta quedando,

espero sigas con el proyecto y no lo vallas a olvidar.

por ultimo te felicito, al ser autodidacta uno aprende muchisimo Gran sonrisa

PD: estuve probando y efectivamente si las dos salidas del puente H son iguales no se bloquea el motor DC, efectivamente en la pagina que comente hablaban de un PaP Gran sonrisa, sin embargo todo funciona para cualquiera de los 2 motores.
  Responder
Buenas a tod@s:

richardmike4, entonces como podría controlar la alimentación del servo de 6V y la general de 12V con un solo interruptor??? Es que no sé... queda un poco cutre tener que ir con dos interruptores Triste No se me viene a la cabeza ninguna solución que pueda controlar los 2 interruptores con uno solo.
  Responder
pon un regulador que te de los 6V mas o menos que necesitas y pones el interruptor entre las baterias y el regulador.

otra opcion es en vez de regulador usar un dioso zenner que soporte alta potencia, igual el interruptor siempre pegado a las baterias
  Responder
Palabra mágica para eBay "UBEC"
Cuando un hombre planta un árbol bajo cuya sombra sabe que no se sentará ha comenzado a comprender el sentido de la vida... o lo que es lo mismo... comparte!!!
  Responder
richardmike4 escribió:pon un regulador que te de los 6V mas o menos que necesitas y pones el interruptor entre las baterias y el regulador.

otra opcion es en vez de regulador usar un dioso zenner que soporte alta potencia, igual el interruptor siempre pegado a las baterias


Buenas a tod@s:

De acuerdo, pues es lo que haré.

Muchas gracias. Ahora voy a hacer el esquema a ver si te parece correcto y pediré el regulador.
  Responder
Buenas a tod@s:

Crees que algo así sería lo suyo???

[Imagen: circuitoregulador_zps731ea6a5.png]


(Está simplificado el circuito, después las diferentes ramas irían a alimentar los componentes correspondientes)
  Responder
Buenas a tod@s:

Aquí tenéis el vídeo. Ya he empezado a introducirle mejoras, como que, a petición de Jero, que el robot, una vez haya girado avanze un poco.

Pues aquí teneis el vídeo (Alguien me puede chivar como ponerlo bien??? Facepalm )

  Responder
tal cual el circuito es lo que te decia Gran sonrisa

PD: me gusta la apariencia de tu robot, en estos dias que tenga tiempo muestro algo del mio aunque esta sin sensores ni nada Facepalm solo encoders :dale2:
  Responder
No tube a mano internet este finde, pero veo que ya va todo como debiera Lengua
  Responder
Buenas a tod@s:

Llevo un par de días con la idea de evolucionar el LabBot y ponerle millis en lugar de delays ya que lo quiero hacer más agil y que pueda medir mientras avanza y que no tenga que parar para medir.

De momento, como no domino demasiado la función de millis solo estoy trabajando con el servo del robot.

He hecho varias pruebas con el código pero sin ningún resultado satisfactorio, y es que no consigo asimilar el funcionamiento de los millis de manera que lo pueda implementar sin problemas en el código del robot. Sé que cuentan pero no sé como ponerlo de modo que trabaje como yo quiero.

Aquí os dejo el último código que he hecho, pero haga lo que haga, coja un codigo u otro y lo modifique o cambie lo que cambie en función de lo que crea que pueda ayudar a conseguir el código deseado siempre termina igual. Se pone a "vibrar" el servo.

Código:
#include <Servo.h>

Servo servo;

unsigned long tiempo, tiempoA=0, retardo=450;

void setup(){
servo.attach(13);
Serial.begin(9600);
}
void loop(){
tiempo= millis();

if(tiempo > tiempoA+retardo){
   tiempoA=tiempo;
   servo.write(90);
}
(tiempo>tiempoA+retardo);
   {
      tiempoA=tiempo;
   servo.write(180);
}
(tiempo>tiempoA+retardo);
{
      tiempoA=tiempo;
   servo.write(90);}
   (tiempo>tiempoA+retardo);
   {
      tiempoA=tiempo;
   servo.write(10);
}
}

Tampoco quiero que me hagáis el trabajo y que escribáis el código del robot, ya que no creo que sea justo, pero si que me gustaría que alguien pusiera un poco de luz sobre el tema y me explicara como funciona la función de millis y como se debe de escribir y así poder dominar un poco más el tema para poder después yo, implementarlo en el código del robot. Pero es que ahora veo que no lo acabo de entender, y haga lo que haga, meto la pata en el mismo sitio, o como mínimo, consigo el mismo resultado deplorable. Facepalm :nuse:



Muchas gracias por todo. Y ya digo, solo necesito un poco de teoría ya que con lo de la web de Arduino... no lo acabo de entender, sinceramente no me gusta como lo ponen, ya que sí que va bien a modo de recordatorio, pero no para alguien nuevo que no lo domina, como es mi caso.
  Responder
Veamos, solo tienes que pensar un par de cosas para hacer los Delays con Millis(), lo primero, con Delay, paras la ejecucion del codigo en ese momento, y hasta que no pasa el tiempo determinado, no ejecuta ninguna linea mas de codigo, con millis() el codigo se sigue ejecutando, cosa que debes de tener en cuenta.

La funcion millis(), es un reloj interno, que comienza a contar desde que enciendes el arduino, reloj que no puedes reiniciar, por lo tanto tendras que ir tomando valores, que quiero decir, ponte en el caso de que quieres realizar una accion cada segundo vale?, pues bien, coges la medida de millis(), le sumas 1000ms, y lo metes en una variable llamada por ejemplo "tiempolimite", luego en el codigo, haces un if, en el que entras cuando el valor de millis(), es igual a la variable "tiempolimite", una vez entras, haces lo que quieras dentro del if, y no te olvidas de volver a ver cuanto vale millis() y sumarle 1000, para guardarlo en "tiempolimite". Hay mas formas, pero creo que asi lo entenderas bien.

EDIT: Ten en cuenta, que el reloj de millis, avanza en todo momento, si el codigo es muy largo, y en el IF pones si millis() == tiempolimite, se puede dar el caso que no entre nunca, ya que puedes saltarte ese valor, asique pon millis() >= tiempolimite

Te recomiendo que empiezes practicando con el LED propio del arduino, que es el PIN13 creo
  Responder
Buenas a tod@s:

De momento, para agilizar el robot he puesto como comentarios los serial print de las medidas, ya que eso ralentizaba el robot. Ahora como mínimo las medidas las toma a toda ostia.

Pero igualmente quiero hacer la evolución de delay a millis.

Muchas gracias Trigger. Tienes razón, voy a probar lo del led que es más facil para empezar y una vez coja el truquillo ya lo haré con el servo.
  Responder
Buenas a tod@s:

Por fin empieza a parecerse el robot a lo que yo quería. Un robot sin delays. De momento he empezado con controlar el servo sin delays. Y con la grandíissima ayuda de Triggerr y sobretodo de Jero. Por fin ha salido este código:

Código:
#include <Servo.h>
long distancia1;
long distancia2;
long distancia3;
long tiempo;
Servo servo;
long interval1 = 500;
long interval2 = 1000;
long interval3 = 1500;
long interval4 = 2000;
long PreviousMillis = 0;
int start;

int movservo = 1;

int IN3 = 3;
int IN4 = 6;
int IN1 = 11;
int IN2 = 5;


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(13);
  pinMode (IN4, OUTPUT);  
  pinMode (IN3, OUTPUT);    
  pinMode (IN2, OUTPUT);  
  pinMode (IN1, OUTPUT);    

}

void loop(){
unsigned long currentMillis = millis();

if (currentMillis - PreviousMillis >=0 && movservo ==1){
   if(start == 1){
     PreviousMillis = currentMillis;
     start  = 0;
     servo.write(0);
   }
   else if (currentMillis - PreviousMillis >= 450){
     movservo =2;
     start =1;
   }
}

if (currentMillis - PreviousMillis >= 0 && movservo ==2){
   if (start == 1){
     PreviousMillis = currentMillis;
     start = 0;
     servo.write(90);
   }
   else if (currentMillis - PreviousMillis >= 450){
     movservo = 3;
     start =1;
   }
}
if (currentMillis - PreviousMillis >= 0 && movservo ==3){
   if (start == 1){
     PreviousMillis = currentMillis;
     start = 0;
     servo.write(180);
   }
   else if (currentMillis - PreviousMillis >= 450){
     movservo = 4;
     start =1;
   }
}
  if (currentMillis - PreviousMillis >= 0 && movservo ==4){
   if (start == 1){
     PreviousMillis = currentMillis;
     start = 0;
     servo.write(90);
   }
   else if (currentMillis - PreviousMillis >= 450){
     movservo = 1;
     start =1;
   }
}
}

El fallo que veo ahora es que empieza yendo hacia la derecha cuando a mi me gustaría que empezase el movimiento por la izquierda. Pero bueno... es o es lo de menos. Ahora me pondré con este aspecto a ver si consigo solucionarlo, porque parece facil. Y que al volver parase también a 90º aunque no hubiese ninguna medición (como he hecho hasta ahora). Pero bueno... eso es lo de menos.

Pero como mínimo os quería mostrar las evoluciones que gracias a todos vosotros he hecho. Ya he comprendido algo mejor eso de los millis. Muchas gracias a todos ^^ :aplauso: :aplauso: :aplauso:
  Responder
Ahora te queda hacer una limpia de código y meter funciones para optimizarlo.
Enohorabuena por lo conseguido
  Responder
El3ndil escribió:Ahora te queda hacer una limpia de código y meter funciones para optimizarlo.
Enohorabuena por lo conseguido

Buenas a tod@s:

Lo siento, pero sobretodo en este paso, el mérito y las felicitaciones se las tiene que llevar Jero. Ya que en un 99% el código es suyo.
  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