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
#1
Buenas a tod@s:

En el apartado de "Arduino" del foro ya he abierto un post con algun problemilla que he tenido con el código. Y es que este verano, ya que lo del quadcopter lo veo un poco fuera de mi alcance en cuanto a presupuesto, ya que hice numeros y de low cost... creo que solo tiene el nombre (aunque apoyo totalmente el proyecto y lo encuentro muy interesante). A parte, con la nueva legislación del gobierno, creo que hay demasiadas travas con emprender con el proyecto, he decidido hacerme un pequeño robot.

Hace unos meses me compré el sensor ultrasónico para tal fin. Para equiparlo en un pequeño robot basado en Arduino.

Mientras voy trabajando con el código, quiero empezar también con el chasis. A falta de impresora 3D, que creo que tarde o temprano terminará cayendo, he estado buscando algun chasis baratillo (ya que de momento solo quiero hacer prototipos para ir probando) he encontrado este:

http://www.ebay.es/itm/Inteligente-Robot...c10&_uhb=1

Por lo que respecta al driver para los motores he encontrado en eBay este:

http://www.ebay.es/itm/Modulo-de-servo-m...65d&_uhb=1

Pero me han comentado que ese precio tan barato hace dudar un poco y me han recomendado este otro:

http://www.dx.com/p/lson-l298n-stepper-m...4tAy_l_srJ

Por lo que respecta a los drivers, por cual os decantaríais? Por el de dealextreme o por el de eBay?

Y que os parece el chasis del robot? A parte, va con motores y ruedas incluidas. Y por el precio que tiene lo encuentro interesante.


Ahora voy hacer un pequeño diseño del robot de como me gustaría que quedara.


Muchas gracias de antemano por vuestras opiniones.
  Responder
#2
Yo diria que compraras el de Ebay, el driver es el mismo y todas estas cosas en DX siempre suelen estar mas caras. Los componented estoy por asegurar que sino son parecidos son iguales

Respecto al chasis ese chasis es muy conocido, para empezar yo creo que esta bastante bien....le puedes acoplar muchas cosas sensores y demas.

(Respecto al tema del Quad, ya se discutio el porque es Lowcost, hablamos de un quad que en si sale por unos 150€ recurriendo a materiales como motores controladora y demas baratos, pero que ofrezcan unas buenas prestaciones, esta claro que en el rango de los quads es LowCost, es como si me dices que las i3 y demas son LowCos comparadas con las Makerbot, pues si lo son porque cuestan bastante bastante menos, son diferentes rangos de precios y productos)

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#3
Buenas a tod@s:

Gracias por los comentarios Trigger.

Por lo que respecta a lo del quadcopter, seguramente será lowcost comparado con otros aparatos similares. Pero para la gente que no es del mundillo... pues ver como sube la factura... pues duele y asusta. Aunque no niego que para los que esten acostumbrados a trabajar con esos aparatitos, lo consideren low cost. Es como todo... todo es relativo.

Y una curiosidad... para los que compráis mucho por internet, cual es vuestro mínimo de porcentaje de valoración del vendedor. A partir de qué porcentaje os fiáis? Yo lo tengo en un 98.5% pero no se si es ser muy exigente o no. Simplemente por curiosidad, ya que bueno... solo he hecho 3 compras por internet, y siempre he mirado mucho esto de la valoración y he mirado de ser exigente, pero no se cual es un mínimo aceptable.

Ya sé que como más alto mejor, pero bueno... siempre hay que dar un margen.

Muchas gracias.
  Responder
#4
Umm yo a partir de 98 o asi tambien pero bueno como son cosas de poco valor tampoco es critico si no me llega....

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#5
Buenas a tod@s:

Empiezan a llegar los componentes que pedí.

El viernes me llegó el Futaba S3003 y hoy el Driver con el LN298.

Estoy a la espera de que me llegue el chasis con los motores y ya podré montarlo.

De momento, en mis ratos libres, estoy escribiendo el código que comandará el robot.

Si puedo, me gustaría prescindir de delays y que el robot tenga un movimiento continuo. Que no se detenga en las mediciones ni en las decisiones de tomar la dirección más acertada.

Espero que sea un buen proyecto de verano Sonrisa
  Responder
#6
Buenas a tod@s:

Me he puesto con el código y he empezado a prescindir de los delays. Y bueno... debido a mi inexperiencia, aunque el código compila correctamente. A la hora de la práctica el servo no se mueve aunque lo intenta, avanza un grado y retrocede.

Por qué? Me he basado en un código que en teoría funcionaba. No se trataba de trabajar con un servo, pero a la hora de hacer las esperas sí que me he basado en el código.

Aquí os dejo el código:

Código:
#include <Servo.h>      //Incluimos la libreria Servo
#include <Ultrasonic.h>  //Incluimos la libreria Ultrasonico


Servo Servo1;          //Declaramos nuestro servo
Ultrasonic ultraso (6, 7);  //Declaramos los pines del ultrasonico
int distancia1;          //Declaramos una constante
int distancia2; // Declaramos una constante 2
int distancia3; //Declaramos una constante 3
int pausa;          //Declaramos una cosntante
long previousMillis = 0;
long esperaServo = 500;  /*Declaramos medio segundo de espera
                        para el servo*/

void setup (){
Servo1.attach(8);    //Declaramos el pin de nuestro servo
Serial.begin(9600);
}

void loop()
{
  unsigned long currentMillis= millis();
Servo1.write(0);
if(currentMillis - previousMillis > esperaServo){
  previousMillis = currentMillis;
distancia1=ultraso.Ranging(CM);
}

Servo1.write(90);
if(currentMillis - previousMillis > esperaServo){
  previousMillis = currentMillis;
distancia2=ultraso.Ranging(CM);
}

Servo1.write(180);
if(currentMillis - previousMillis > esperaServo){
  previousMillis = currentMillis;
distancia3 = ultraso.Ranging(CM);
}





}

Muchas gracias por las correcciones.

Nunca había prescindido de los delays y ya que hago este proyecto del robot, pues lo quiero hacer bien, y voy a dar el paso que todos habéis tomado que es prescindir de los delays.
  Responder
#7
Electromecanico, si no me falla la vista, que a estas horas y despues de estar desde las 8 chapando poca me queda jajajaja, la escritura de los servos la haces fuera de los ifs.
  Responder
#8
Buenas a tod@s:

Yo entiendo que los if's y demás codigo entre parentesis viene a sustituir los delay. Con lo cual primero se tendría que dar el orden de movimiento y seguidamente la espera para que finalmente se tome la medida.

Entonces lo pongo dentro del if el comando del servo???
  Responder
#9
Piensa que lo que tienes fuera de los ifs se va a estar ejecutando constantemente y lo de los ifs cada vez que pase X tiempo. Estas montando las instrucciones de los servos al tenerlas fuera

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#10
Buenas a tod@s:

Ahora entiendo estos movimientos del servo. Cuando llegue a casa me pongo a ello y a ver si os doy buenas notícias.

A parte tiene que estar al caer el chasis y motores Confundidoing:
  Responder
#11
Buenas a tod@s:

Dicen que los inicios siempre són difíciles, pero es que yo no sé... o soy muy idiota o no sé, pero por mucho que me mire códigos y me pare a comprenderlos y analizarlos. Y aunque los comprenda, después, cuando los llevo a la práctica no me funcionan U.U

He mirado de reducir el código y por ejemplo solo utilizar el Servo, después, solo utilizar el Ultrasónico y que mida en función de la temporización que le diga, pero nada U.U

Y tampoco quiero recurrir al foro siempre que tenga algun problema, pero no entiendo en qué fallo. Entendí lo que me comentaste de los if's Trigger, entiendo el código y a la hora de la verdad, no hace lo que quiero, ni se parece a lo que quiero que haga.

Y si me encuentro con estos problemas no sé que haré cuando junte los motores más el servo, más el sensor, etc...

:dale2: :dale2: :dale2: :dale2: :dale2: :dale2: :dale2:

Qué rabia me da :zpistolas: :zpistolas: :zpistolas:


[AÑADO]

Parece que bueno... he avanzado un poco. He conseguido hacer ese código para hacer mover el servo:

Código:
#include <Event.h>
#include <Timer.h>
#include <Servo.h>          //Incluimos la librería Servo
#include <Ultrasonic.h>     //Incluimos la librería Ultrasonic
Servo servo;               //Declaramos nuestro servo
Ultrasonic ultraso (6, 7); /*Declaramos ls pines del ultrasonico
                           6 => Trigger 7 => Echo*/
int distancia;            //Declaramos una constante para la distancia
int pausa;                //Declaramos una constante para la pausa
Timer t;

void setup(){
servo.attach(9);
Serial.begin(9600);
t.pulse(9, 10 * 1000, HIGH); //1 segundo de espera
  
}

void loop(){
servo.write(0);
t.update();
servo.write(90);
t.update();
servo.write(180);
t.update();
servo.write(90);
t.update();

  
  /*millis();
  
  if ((unsigned long)(millis() - previousMillis) >= interval){
distancia = ultraso.Ranging(CM);  //Medimos la distancia
pausa = ultraso.Ranging(CM)*10;
Serial.print("  Distancia estimada: "); //Comandos para ver en pantalla la distancia al cual está el obstaculo
Serial.print(distancia);
Serial.println(" cm");
*/

}

No entiendo porque me hace la ida y la vuelta bien pero cuando vuelve la segunda vez, empieza a volverse loco y hace pequeños movimientos adelante y atrás. Y no sé porque, ya que el código es el mismo que la primera vez :S

Pero bueno.... como mínimo he adelantado un poquito Confundidois1:


****(El código al final tiene parte de código como comentario ya que lo he anulado para centrarme solo en un componente, pero no tener que borrarlo para así, cuando lo necesite simplemente quitaré las barras y esteriscos y lo podré aprovechar)
  Responder
#12
Buenas a tod@s:

No comprendo el problema que me da este código. Aparentemente funciona correctamente. Sale de los 0º pasa por los 90º, seguidamente llega a los 180º y vuelve a los 90º y reinicia el código.

Hasta aquí todo Ok. Pero cuando por segunda vez sale de los 180º para regresar a los 90º se vuelve loco y hace pequeños movimientos adelante y atrás. Por qué? Si la primera vez ha funcionado y la segunda vez hasta los 180º ha ido bien, por qué en ese punto falla?

Alguna idea?

Muchas gracias de antemano.
  Responder
#13
Para que usas la libreria Event y Timer?

Enviado desde mi Nexus 4 mediante Tapatalk
  Responder
#14
Buenas a tod@s:

Para hacer la temporización para dejar tiempo que el servo llegue a la siguiente posición. He probado de utilizar millis pero no me termina de funcionar, y la librería Timer (cuando la incluyes, automáticamente se incluye la Event) es la con que he conseguido mejores resultados, aunque no sean 100% satisfactorios.

Está claro que con unos simples delays estaría todo listo en 5 minutos. Pero no quiero "pausar" el microprocesador ya que mientras dejo tiempo al servo para que se mueva, quiero que los motores de las ruedas del robot siguan moviendose o lo que sea.

El sistema de utilizar millis(), que parece la más sencilla, aunque creo que la comprendo, no me termina de funcionar. Y he tomado el camino del "timer", aunque puede que sea algo más complejo, me ha dado algunos resultados.
  Responder
#15
Buenas a tod@s:

A ver si hoy por fin me llega el chasis y puedo monar el robot con todos los componentes, y empezar a hacer pruebas..

La librería Timer me da problemas, y con los Millis() no me aclaro, al final he tirado por lo facil y seguir con mis delays.
He prescindido de la librería Ultrasonic porque me daba problemas, ahora me daba la distancia máxima siempre, y solo desconectando los terminales de Trigger y Echo me daba la distancia correcta. También ocurría con sketch's viejos que en teoría funcionaban correctamente.


Aquí os dejo el código que estado haciendo esta mañana desde las 5 A.M. Es lo que tiene tener un mosquito que no te deja pegar ojo. Como mínimo aprovecho la mañana, jeje.


Código:
#include <Servo.h>
long distancia;
long tiempo;
Servo servo;

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);
}

void loop(){
  servo.write(0);
  delay(250);
  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*/
  distancia= 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 ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(750);
  servo.write(90);
  delay(250);
  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*/
  distancia= 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 ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(750);
  servo.write(180);
  delay(250);
  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*/
  distancia= 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 ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(750);
  servo.write(90);
  delay(250);
  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*/
  distancia= 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 ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(750);
}
  Responder
#16
El usar millis() para las temporizaciones puede tener su cosilla, pero luego es muy facil. Tienes que pensar que tienes un contador que no puedes reiniciar, y que usas variables auxiliares para poder saber cuando pasas de X tiempo, para ejecutar un IF y entrar en esa parte del codigo. Lo que debes de saber es que todo lo de fuera del if se estara ejecutando continuamente, solo entrara en lo de dentro del IF cuando se cumpla el tiempo.

Otra de las cosas que tienes que tener en cuenta, si quieres hacer varias temporizaciones con diferentes tiempos, si solo dependes de una variable, solo vas a entrar en el primero seguramente, o aleatoriamente, depende en que parte del codigo el tiempo sea superior....
  Responder
#17
Triggerr escribió:El usar millis() para las temporizaciones puede tener su cosilla, pero luego es muy facil. Tienes que pensar que tienes un contador que no puedes reiniciar, y que usas variables auxiliares para poder saber cuando pasas de X tiempo, para ejecutar un IF y entrar en esa parte del codigo. Lo que debes de saber es que todo lo de fuera del if se estara ejecutando continuamente, solo entrara en lo de dentro del IF cuando se cumpla el tiempo.

Otra de las cosas que tienes que tener en cuenta, si quieres hacer varias temporizaciones con diferentes tiempos, si solo dependes de una variable, solo vas a entrar en el primero seguramente, o aleatoriamente, depende en que parte del codigo el tiempo sea superior....

Buenas a tod@s:

Está claro que es sencillo y veo que es sencillo, pero no lo acabo de pillar para que me funcione correctamente Triste
  Responder
#18
  Responder
#19
Me gusta el proyecto, te sigo atentamente.
Intentaré (cuando pueda), hacer algo parecido. Soy nuevo en el mundillo y voy aprendiendo poco a poco.
  Responder
#20
Buenas a tod@s:

Gracias por el comentario rubens. Si te puedo ayudar en algo ya sabes donde estoy.

Ayer estuve conectando y programando los motores. Y con el tema del driver no lo conseguí hacer funcionar Triste

Una vez consiga hacerlos mover. Haré que se muevan en función de las medidas tomadas
  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