viernes, 8 de enero de 2016

COMO HACER: UN ROBOT QUE SALGA DEL LABERINTO


Veremos en esta nota paso a paso el como hacer un robot que salga del laberinto con el famoso Arduino, algunas pequeñas diferencia que hay entre este y un robot que esquive obstáculos son estabilizadores, complejidad de código, entre otras. Este proyecto puede ser interesante y de gran ayuda a estudiantes de Ingeniería o jóvenes que  quieran aprender de electrónica y robotica. 

Diseño 

Bien el origen del diseño es algo fuera de lo común en cuanto a lo que se encuentra en vídeos típicos la idea es hacer algo atractivo y funcional así que empezamos boceteando en un muy buen programa: 'SketchUp'. ( lo pueden descargar dando click en el link)

La idea era hacerlo de forma circular y con las llantas dentro de la circunferencia para reducir su angulo de giro haciendo mas preciso y facilitando su desplazamiento en laberintos pequeños ademas de por estética, lucia mas atractivo.  

Enseguida nos preguntamos el tamaño, con el propósito de que saliera de laberintos grandes y pequeños sabíamos que esta parte era bastante crucial así que decidimos hacerlo 'pequeño' pero tampoco 'nano' porque iba a resultar nada practico. Lo hicimos de 7.5 cm de radio y 6 mm de grosor, sobre este empezamos a pensar en donde colocar los componentes que básicamente serían  un Arduino Uno, un Puente H y 3 sensores Ultrasonicos




Después de varios días, concluimos que lo mejor era situar los sensores de manera distribuida, el Arduino Uno en el centro y el puente H casi en la parte frontal ocultado por los sensores, los motores irían a las costados del Arduino Uno, situados por debajo del robot de manera que ocuparíamos al máximo, los espacios aunque ya con eso podría funcionar, decidimos darle un toque único a nuestro robot, ustedes de igual manera pueden hacerlo o algún otro modelo que lo haga fuera de lo convencional y mas llamativo, ese toque fueron flechas de dirección y una peculiar manera de retroceder. 

Para colocar las flechas iba hacer necesario un segundo piso por llamarlo de alguna manera donde situar los LEDs que usamos (azules ultrabillantes 5mm). Llegando así a la parte final del diseño necesitábamos colores del cual pintar los círculos que llamaran la atención, estos fueron el negro y el dorado. 


RECOMENDACIONES: Al hacer su diseño ya sea en algún programa o a mano tengan en cuenta las dimensiones  de sus objetos y tengan un cierto margen por precaución o por si a la hora de construirlo les hace falta o quisieran agregar cosas de ultimo momento, hacerlo pequeño no siempre es lo mejor,piensen muy bien su diseño antes de empezar a construirlo. 


CONSTRUCCIÓN 


La primera idea fue mandar a imprimir en 3D los círculos y luego hacer un montaje fácil, pero no contemplamos un precio tan elevado por lo que recurrimos  a nuestra segunda opción: cortarlo nosotros mismos de un pedazo de MDF 6mm, trazamos los círculos de 15 cm de diámetro en uno hicimos la marca de los leds y en el otro del arduino y los motores cuando terminamos los cortamos con una caladora, he hicimos los huecos con un taladro, en este paso lo que mas importa es apegarse a los planos, ya que la precisión es bastante importante para la calidad de nuestro trabajo y la imagen del mismo, este paso ya es mucho mas rápido que el anterior, puede ser realizado en 2 horas o menos si ya se tiene experiencia usando una caladora si no lo recomendable sería que fueran con un carpintero en caso de que quieran un mejor resultado. 

En cuanto al segundo circulo se le trazó cada led formando las flechas como las queríamos. esta parte ya es muy opcional, pero si mejora la vistosidad de nuestro robot. Después de trazado se taladro y colocaron los leds.

La parte un poco mas difícil en la construcción  en el caso de nuestro robot fue pintarlo porque en el diseño inicial el color dorado iría en el grosor del MDF pero pintar una linea asi de delgada era difícil con latas de pintura, inclusive pincel, pero habrá quien para el esto sea mas fácil que cortarlo. Esta dificultad se puede ahorrar si se pintase de un solo color o el ancho fuera lo suficientemente grande.

MECANICA, ENSAMBLE Y ELECTRONICA 


Algo también recomendable es colocar los componentes sobre una hoja y trazar antes de hacer el diseño no después, pero en este caso yo decidí no hacerlo y me costaría mas trabajo solucionar muchas cosas por tomármelo a la ligera por eso les recomiendo hacer esto antes. 

Pero lo que yo hice fue colocar los sensores y los componentes en una baquelita para darme una  idea rápida de la distribución que iban a tener, como vemos en la foto los sensores iban a quedar en la parte de adelante con el puente H entre estos, el arduino en la parte de atrás dejando espacio para conectar los cables ya sean de alimentación o para mejorar el programa a medida que se hacían las pruebas, un botón de encendido/ apagado en la esquina izquierda y en la derecha dos botones uno que indicara el encendido y otra el nivel de batería (esto no es nada difícil a pesar de lo que parezca ) . En este paso todo lucia muy bien pero a la larga mantener la medida de 15 cm nos dio problemas en espacio, quizás debimos agrandarlo pero como mencionaba ya estaban cortados los círculos, por lo que si les recomiendo, meditar antes su prototipo.  



(Aquí se aprecia mejor a lo que me refería con el problema de tamaño)






Una vez cortado los círculos (o el diseño de su elección) debemos separarlos de una manera muy sencilla, usando 2 tornillos largos y 8 tuercas, lo ideal es colocarlos de manera que se distribuya el peso sobre estos pero que no estorben a los componentes.

como ya he dicho los problemas de tamaño fueron un gran inconveniente, en especial al llegar a esta parte pues la parte ideal por cuestiones físicas y de diseño para ubicar los tornillos ya estaba ocupada, por lo que tuvimos que ponerlo en posiciones que ayudaban a la parte fisica pero quizás no mucho al diseño, esto no es muy complejo, pueden probar simplemente si en donde quieren poner sus tornillos aguanta el circulo de arriba, siendo así pueden proceder a taladrar y quedaría listo. Otra parte que haría falta ver sería la de las llantas, los motores están situados en la parte de abajo para el ahorro de espacio dejando a las llantas en la parte interna del robot a unos 1.5 cm de los bordes y  en una parte central para un mejor equilibrio, esto fue echo antes de cortar los círculos en la cual decía que teníamos que marcar los componentes que usábamos esto fue fácil, solo marcamos unos cuadrados de la medida del diámetro de la llanta y su ancho. ya marcados lo que hice fue con el mismo taladro hacer un hoyo en el entro de esos rectángulos y posteriormente meter la caladora e ir quitando el MDF que no necesitaba. La rueda loca debe ir en la parte contraria de los motores ya sea adelante o atrás en este caso  fue adelante por el espacio, esta tiene un costo de 1 dolar aprox. y se pego con una pistola de silicon pero igual pueden atornillar la con tornillos especial para madera.


  


Bien hasta aquí si han seguido todo lo anterior, deberían tener algo como lo de la foto de arriba en cuanto a construcción se refiere claro, porque notaran que sobre los tornillos hay una parte del protoboard y el puente H, lo sustituí por un L298 y no el tipico el L293. Todo eso sera explicado a continuación.



Pues ya colocados los motores DC básicamente ya estaba todo listo, empiezan las pruebas para lo que era necesario el protoboard para tener donde conectar el positivo y el negativo de los componentes, para evitar lo que vemos  en la foto de la derecha. esto no quedaría así pues lo cambiamos por una baquelita  mas pequeña que colocamos sobre el L298 (Puente H). Aquí igual se alcanza a ver que ya el Sensor de distancia esta sobre una placa para facilitar el manejo de este. 

En cuanto al Puente H, al inicio se había planeado el L293, a la larga tuvimos problemas con el uso de este, pues sufrió algunos daños, pero sin embargo ustedes pueden usar el L293 sin problemas, en nuestro caso ya por ser mas practico  utilizamos el L298  ya en su placa haciendo mas fácil utilizarlo además de darle colorido al robot. 


La instalación de los otros 2 sensores se planearon en la parte de adelante como se mostró, sobre la marcha fueron cambiado a los bordes derechos e izquierdo, lo cual fue mucho mejor a la hora final, pero mi recomendación es que los sensores queden adentro del robot, pues si no podrían chocar con un objeto y hacer falsas lecturas. No lo hice así por problemas de espacio como ya he mencionado. pero si hubiese sido mucho mejor.  

Para la alimentación se usaron 2 baterías de 9 V puestas en paralelo  para sumar amperaje manteniendo el mismo voltaje, para hacer mucho mas decentes las conexiones y para la instalación del botón de encendido/apagado se hizo una placa muy pequeña la cual se coloco  en uno de los bordes del arduino, esta estaría conectada a la placa de extensión de positivos y negativos, y de esta ya se harían las conexiones al puente H y al arduino.





Básicamente habríamos terminado casi todo, faltando la programación únicamente. El resultado debería ser algo así. 





La placa en la que están los sensores es muy básica de hacer fueron 4 pines hembra donde entrarían los sensores y atrás unos macho donde conectaríamos los cables.

Las flechas se hicieron con 60 leds ultra sibilantes puestos en paralelo y dejando el común como el positivo, posteriormente se conectaría a una plaquita que servicia como una extensión de positivos y negativos. 

PROGRAMACIÓN


La programación de nuestro robot como ya es obvio se da con el IDE de Arduino, esto puede ir tan lejos como lo queramos, ya depende de nuestra imaginación. 

Empezaremos con los sensores de distancia, para quienes nunca los han manejado haré un breve resumen de como funcionan estos sensores y una introducción a su programación antes de empezar con el código usado en nuestro robot.

Pues la manera en que el sensor de distancia funciona es por eco-localización es decir la misma manera que usan los murciélagos, esos dos ojitos que parecen  tener el sensor son una bocina y un micrófono. El micrófono emite unas ondas que nuestro oído no puede escuchar sin embargo cuando estas ondas chocan con un objeto rebotan y son escuchadas por la bocina del sensor entonces esto genera una medición en base al tiempo recorrido generando una distancia. Espero ser claro en esta parte, si no cualquier duda espero que me la dejen en los comentarios.



Ejemplo: 

#define Pecho 2 #define Ptrig 4 long duracion, distancia; void setup() { pinMode(Pecho, INPUT); // define el pin 2 como entrada (echo) pinMode(Ptrig, OUTPUT); // define el pin 4 como salida (triger) Serial.begin (9600); //Abre la comunicacion } void loop() { digitalWrite(Ptrig, LOW); delayMicroseconds(2); digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms delayMicroseconds(10); digitalWrite(Ptrig, LOW); duracion = pulseIn(Pecho, HIGH); distancia = (duracion/2) / 29; Serial.println (distancia); Serial.print (" Cm") ; } 

Lo que hace este código no es mas censar la distancia y mostrarla por el puerto serial, es el  ejemplo mas besico, que pueden probar si nunca antes han trabajado este sensor.

Empezamos definiendo los pins 2 y 4 como Pecho y Ptrig, esto no es vital, simplemente facilita saber con que pin estamos trabajando, posterior creamos 2 variables de tipo "long" las cuales son duración y distancia. 

Dentro del Setup que e slo que solo se lee una vez por Arduino, declaramos el modo que tendrán los pines el cual es Pecho entrada y Ptrig Salida, ademas de que habilitamos la comunicación serial a 9600 baudios. 



Dentro del loop como medida de prevención empezamos apagando el triger por 2 microsegundos después lo encendemos por 10 micro-segundos para después apagarlo, muy simple, pero quizás lo que puede confundir es lo que viene a continuación. decimos que duración es igual al pulso que entra por el Pin Echo el cual ponemos en alto, y distancia es igual a la duración obtenida anteriormente entre 2 porque la duración  equivale a la ida y regreso del eco lanzado entonces obtendríamos una doble medición y por eso lo dividimos entre 2 y esta entre 29 para llevar las unidades a Centímetros. y por ultimo imprimimos distancia por la comunicación serial.

Ahora los motores, desde aquí uno de los errores mas frecuentes son cuando se trabaja la velocidad, si alimentan sus motores con 6 V o 5 V no pueden poner la velocidad por menos de 120 por que estarian suministrando menos de 3 V a el motor por lo que no se moverá. 

int Motor1D = 5;
int Motor1I = 6;

int vel = 150;

void setup() {
  
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);

}

void loop() {
  
analogWrite (5, vel);
analogWrite (6, 0); 
delay (2000);
  
analogWrite (5, 0); 
analogWrite (6, 0); 
delay (2000);
        
analogWrite (5, 0); 
analogWrite (6, vel);
delay (2000); 
  
}

En este pequeño programa lo que hacemos es definir el nombre de las direcciones de nuestro motor dc y crear una variable de tipo entero que sera la velocidad, dentro del Setup definimos los pines 5 y 6 como salidas y dentro del loop decimos que vaya adelante por 2 segundo se detenga por 2 segundos y vaya en reversa otros 2  segundos. Es muy importante saber que si ustedes usan este código o cualquier otro código con un motor dc usen un puente H ya que las salidas del Arduino no les dará la corriente suficiente para mover el motor.

CODIGO: en este link de dropbox pueden descargar el código que usamos el día de la prueba, sin embargo es  100% funcional.




PRUEBA FINAL:


   




22 comentarios:

  1. Hola amigo mi nombre es Mario Peralta, tengo una idea de un proyecto...como puedo contactarte y desarrollar una mejor idea, la verdad soy nuevo en arduino pero necesito ideas de gente con conocimiento. Espero tu pronta respuesta y te felicito por este proyecto que publicaste. Saludos. Mi correo es:

    asesoria.luxr@gmail.com

    ResponderEliminar
    Respuestas
    1. Saludos Mario, mandame un mensaje a eduardoluissd@gmail.com, muchas gracias, espero tu mensaje para ayudarte...

      Eliminar
    2. Gracias por tu atención Eduardo me pongo en contacto contigo.

      Eliminar
  2. Hola disculpa varias de las imagenes no se pueden ver, crees que las pudieras subir, excelente aporte, yo estoy intentando hacer un carro que evada obstaculos y llegue a un punto especifico que le señale, nuestro profesor quiere que lo hagamos con raspberry pero la verdad es que no entiendo mucho, crees que me pudieras ayudar, este es mi correo jreynaga39@gmail.com

    ResponderEliminar
    Respuestas
    1. Hola, he subido algunas nuevas fotos, no se porque no se apreciaban antes, una disculpa, que mas información me puedes dar para ayudarte con tu proyecto?

      Eliminar
  3. Hola amigo saludos desde Guatemala :D no se como llegue hasta este sitio pero estoy muy contento de haberlo encontrado, amigo he realizado un carro-robot con arduino uno, un puente H, el senson ultrasonico y he logrado que el carro detecte objetos y no choque pero solo eh usado un ultrasonico, sería posible que me ayudaras necesito que en mi proyecto pueda programar mi carro para que utilize los nodos de un arbol (tema de estructura de datos) porfavor ayudame amigo

    ResponderEliminar
  4. Hola amigo saludos desde Guatemala :D no se como llegue hasta este sitio pero estoy muy contento de haberlo encontrado, amigo he realizado un carro-robot con arduino uno, un puente H, el senson ultrasonico y he logrado que el carro detecte objetos y no choque pero solo eh usado un ultrasonico, sería posible que me ayudaras necesito que en mi proyecto pueda programar mi carro para que utilize los nodos de un arbol (tema de estructura de datos) porfavor ayudame amigo

    ResponderEliminar
  5. Claro, pero me podrías brindar mas información acerca de lo que debe hacer tu proyecto?

    ResponderEliminar
  6. Hola amigo necesito un consejo para mi proyecto de electrónica ya que es muy similar a este, ¿cómo te puedo contactar para que me ayudes?, gracias.

    ResponderEliminar
  7. necesito ayuda con la programación me podrías ayudar? gracias

    ResponderEliminar
  8. Muy buenas, realmente felicidades por su proyecto, muy interesante, me llamo Natalia, estoy bastante interesada en poder hacerlo con mi hija, que esta entrando en este campo, consegui ya todos los materiales y todos los sensores y demas, lo unico que no puedo cpnseguier es el cablear bien este proyecto, no se si podrias ayudarnos facilitandonos una relacion de los cables que deben salir del arduino uno al motor driver, asi pueda replicarlos, realmente te lo agradeceria no quiero que mi hija se sienta frustrada ya que lo armo ella sola pero creo que llego a conectar mal los cables por que es aparte de cuales deben ir al puente h le tienen algo agobiada. Mi correo electronico es pazcorporaciones@gmail.com. Agradezco mucho tu respuesta. Gracias.

    ResponderEliminar
  9. hola el diagrama de conexion lo tendras disponible?

    ResponderEliminar
  10. exit status 1
    'Ancho' was not declared in this scope

    Tengo este problema, la verdad no se nada sobre la programación, quería saber como resuelvo este caso porque ya busque en intenet y no encuentro solución :(
    ¡Ayuda!

    ResponderEliminar
    Respuestas
    1. Solo no están declarados los tipos de estas variables dependiendo como quieres la lectura de este resultado ya sea como una variable de 4 bytes que seria un int equivalente a un dato que ignora los decimales

      Eliminar
  11. Que tal amigo muy buen aporte...si no fuera mucha molestia no se si me podrías ayudar con proyecto que quisiera realizar lo malo es que no se mucho de programación...mi correo es Jokeljhon21@gmail.com....saludos y espero contar con tu ayuda

    ResponderEliminar
  12. Que imaginación buen proyecto. Disculpa tengo una pregunta que significa FAT, FAD, FDE, FTZ por favor responde

    ResponderEliminar
  13. Hola que tal quisiera saber si me podrías mandar las imágenes del blog a mi correo es sgm.ovando@gmil.com
    Es que no se ven por favor :)
    Espero tener respuesta lo mas pronto posible gracias

    ResponderEliminar
  14. Hola, buenas tardes, me preguntaba que significaba las abreviaturas FAD, FAT, FDE y FIZ que están en la programación de Arduino? Gracias.

    ResponderEliminar
  15. Hola amigo, me gustaria que si me pudieras pasar las imagenes ya que no se me cargan, desde ya muchas gracias.

    ResponderEliminar
  16. Hola amigo podrías compartir tu diagrama de conexión a este correo:
    sarcelioju123@gmail.com
    De antemano gracias

    ResponderEliminar
  17. No se ven las imagenes, puedes mandarme el diagrama de conexiones al correo a1020113781@gmail.com por favor y gracias

    ResponderEliminar