Banda transportadora + brazo robótico con Arduino

28
24607

Hace unas semanas me compré un brazo robótico para escribir un poco acerca de temas de robótica. Las circunstancias en días recientes me llevaron a involucrarme en un proyecto en el cual tuve que programar una banda transportadora junto con el brazo que compré.

Esto fue lo que logré construir:

Sobre este tema estaremos discutiendo en este post. La verdad con este tipo de proyectos a mi me gusta escribir varios posts para luego unificar contenidos. Ya la semana pasada había publicado sobre qué es y cómo funciona un servomotor.

Supongo que esta vez lo que haré será publicar un post sobre el proyecto y luego desarrollaré poco a poco los temas de los subsistemas que lo forman.

banda transportadora + brazo robótico

La siguiente entrada pretende ser una guía práctica para replicar los resultados obtenidos en el desarrollo del sistema mostrado en la imagen. Este proyecto fue diseñado para presentarse a nivel universitario, aunque puede ser utilizado para presentaciones en secundaria. Resulta muy instructivo para aquellos interesados en entrar en el mundo de la robótica.

Diseño del hardware

Banda transportadora

El diseño de la banda transportadora es libre y queda a criterio de cada usuario. Ustedes pueden construir cualquier tipo de banda transportadora. Al final se trata de una estructura con algunos rodillos, una cinta y un mecanismo que acopla el eje de un motor a alguno de los rodillos. La idea es que cuando el motor se mueva, éste arrastre la cinta y desencadene el movimiento del sistema completo.

Lo que quiero explicar en esta parte no es la construcción de la banda transportadora como tal, sino el sistema que controla el movimiento. En el caso del proyecto en el que trabajé, se utilizó el siguiente circuito.

El concepto de utilizar un transistor NPN como elemento de control ya lo hemos explorado en este blog. El transistor actúa como interruptor, alternándose entre los estado de corte y saturación. A pesar de que el Arduino entrega 5 voltios en cualquier pin digital, no se recomienda alimentar el motor desde el propio Arduino. Es mejor usar un transistor que se encargue de manejar la carga pesada. El Arduino solo se encarga de saturar o cortar el transistor. Esto requiere mucha menos corriente que la que consume un motor.

Debido a que el motor sólo se moverá en una dirección, no será necesario implementar un puente H. La banda transportadora puede tener cualquier diseño. No importa qué tipo de estructura se utilice, siempre se requerirá de un motor. Lo aquí expuesto permitirá controlar cualquier motor DC de 5 voltios. Es importante tomar en cuenta que el transistor 2N2222 es adecuado para motores con un consumo de corriente bajo. Si se va a utilizar un motor de más corriente, les recomiendo leer mi post sobre el arte de escoger un buen transistor.

Detector de objetos en la banda transportadora

Para detectar los objetos en la banda transportadora que estén pasando en frente del brazo robótico, utilizamos un pequeño truco que en lo personal me gusta mucho utilizar. Se trata de colocar un láser apuntando directamente a una fotorresistencia.

Hace algunos años me compré un par de LEDs láser que me han resultado muy útiles. Los pueden encontrar en ebay o amazon a un muy bajo costo. Pueden buscarlos como «laser diode 5mW 650 nM». Aquí les traigo una imagen.

Son muy sencillos de utilizar. Sólo los conectas a 5 voltios y tendrás tu láser. Este haz de luz dirigido lo hacemos incidir sobre una fotorresistencia (LDR) conectada de la siguiente forma.

El circuito mostrado en la imagen representa un divisor de voltaje con un funcionamiento similar a un potenciómetro. Sin embargo, en vez de variar el voltaje moviendo una perilla, será la luz incidente sobre la fotorresistencia la que provocará que el voltaje se eleve o decrezca. En el caso del divisor mostrado en la imagen, cuando aumente el nivel de luz el voltaje caerá. Si la fotorresistencia se encuentra en oscuridad, el voltaje crecerá.

Esta configuración es muy sencilla, pero es especialmente útil en casos en los cuales sea necesario detectar un objeto en frente a una posición específica. En el caso de mi proyecto, se ha colocado la fotorresistencia en el interior de un tubo, de forma tal que solamente la luz del láser incida sobre el LDR y que la luz natural no cause perturbaciones en las lecturas del Arduino.

Es posible utilizar este arreglo con un pin digital, pero en la experiencia me he dado cuenta que es mejor usar un pin analógico. Gracias a esto podemos verificar los niveles de voltajes en luz u oscuridad y establecer un nivel intermedio para la transición de un estado a otro. Es un control más preciso y más eficiente.

Brazo robótico

El brazo robótico lo compré a un tipo en ebay. Tiene una tienda donde vende un montón de modelos de brazos. El modelo que compré trae 6 servomotores y un montón de piezas que supuestamente son de aluminio, aunque más parece hierro colado. No se ven muy sólidas.

Para el proyecto de la banda transportadora he construido un brazo utilizando 4 de los 6 motores, lo cual reduce 2 grados de libertad al sistema. Esto lo hice principalmente para reducir la carga sobre los motores.

Brazo robótico con 4 grados de libertad
Brazo robótico con 4 grados de libertad

Controlar estos motores con Arduino es muy fácil. En el post sobre servomotores expliqué los colores de los cables del servomotor.

Para conectar los servomotores, todos los cables rojos irán a 5 voltios. Los chocolates a tierra y los naranja irán a los pines D5, D6, D7 y D8 del Arduino. Es una conexión sencilla, lo demás es programación.

Circuito controlador

El control del sistema propuesto se ha hecho en base a un Arduino Nano. Se ha escogido este modelo principalmente por su tamaño reducido en comparación con otros modelos. Además es necesario destacar la facilidad con la cual éste modelo de Arduino puede ser integrado a una placa de circuitos.

El circuito utilizado para controlar todos y cada uno de los componentes que forman este sistema es el siguiente.

Diagrama electronico del circuito controlador del brazo robótico y la banda transportadora. Diseñado con la herramienta online gratuita EasyEDA
Está diseñado en base a un Arduino Nano, aunque bien podría utilizarse cualquier otro modelo de Arduino. El sistema se alimenta a partir de un cargador de celular de 5 voltios, 2 amperios. Este se conecta en el Terminal Block J1. Es importante que los GND del Arduino y de la fuente de poder estén conectados entre sí. A continuación presentamos una descripción breve de todos y cada uno de los componentes que forman este sistema.
  • R1, R2, R3 y R4 son resistencias de 220, 220, 10k y 10k, respectivamente.
  • D1 es un LED RGB.
  • M1, M2, M3 y M4 son servomotores.
  • M5 es el motor DC de 5 voltios encargado de mover la banda transportadora
  • U1 es un Arduino Nano
  • U3 es una fotorresistencia (LDR)
  • MOD1 es un diodo láser.
  • S1 es un push button normalmente abierto.
  • T1 es un transistor 2N2222
  • J1 es un terminal block para la entrada de la fuente de poder.

En mi caso construí el circuito de control en base a una placa universal. Se utilizó el Arduino Nano debido a la facilidad con la que lo podemos insertar en un socket en una placa. A continuación presento el diseño en PCB del controlador mostrado en el diagrama electrónico.

Diagrama PCB del circuito controlador del brazo robótico y la banda transportadora. Diseñado con la herramienta online gratuita EasyEDA

Es posible diseñar una placa más pequeña que la mostrada en la imagen. Sin embargo, el propósito no es presentar un diseño del PCB, sino que nuestros lectores puedan ver como hemos interconectado los elementos. Cada quien es libre de diseñar su PCB como mejor le parezca.

Los dos diagramas del proyecto son públicos y se encuentran disponibles a través de nuestro repositorio en EasyEDA.

Construcción de la placa

La placa fue construida utilizando headers hembra y macho, de forma tal que todos los componentes puedan ser montados y desmontados en la placa. Se utilizó soldadura de estaño para unir los componentes. Debo confesar que no soy el mejor soldador con estaño, pero siempre trato de hacerlo lo mejor posible.

Circuito de control de brazo robótico + banda transportadora basado en Arduino Nano
Parte inferior del circuito de control

Esta placa fue atornillada a la base de madera sobre la cual se construyó la banda transportadora. Luego los motores y demás componentes fueron conectados utilizando cables tipo Dupont.

 Diseño del software

Programación en Arduino

El código de programación completo y documentado lo tenemos disponible en nuestro repositorio de Github. Este código permite:

  • Mover cada uno de los 4 motores del brazo robótico desde el puerto serie, al entrar al Setting Mode. Para esto enviamos a través del Monitor Serie «start set mode». En este modo de funcionamiento al escribir, por ejemplo, «1 ENTER 45 ENTER» en el monitor serie, el motor 1 se colocará a 45 grados. Si se envía «3 ENTER 90 ENTER«, el motor 3 se colocará a 90 grados. Para salir del set mode se envía el comando «end set mode».
  • Fuera del Setting Mode el sistema funcionará obedeciendo el botón colocado en la placa. Al presionar el botón, la banda transportadora inicia su movimiento y se mantendrá así hasta que se detecte un objeto o hasta que pase el iddleTime.
  • El brazo robótico se moverá cada vez que algo se interponga entre el láser y la fotorresistencia. Los movimientos que ejecute el brazo serán específicos para cada caso, para lo cual se ha implementado el Setting Mode. Con las instrucciones que se colocan en el armAction() el brazo hará lo que el usuario necesite que haga.

El código completo lo podemos encontrar en este enlace. Es importante tener en cuenta que es necesario modificar el código para ajustarse a posiciones específicas, principalmente el método armAction().

Espero que la información mostrada en este post sea de utilidad para todos los que nos visitan. Cualquier observación o duda nos lo hacen llegar a través de la caja de comentarios.

4.7 3 votes
Article Rating
Suscríbete
Notify of
guest

28 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
Manuel
Manuel
9 months ago

Hola, ¿Usted cree que podría montar esto para una cinta real?

Juan antonio
1 year ago

Este proyecto se podría hacer con arduino UNO?

Rodrigo
Rodrigo
3 years ago

Buen día.
Disculpe Inge tengo un par de dudas;
¿Este proyecto se puede realizar con cualquier brazo que utilice 4 servomotores?
O ¿tiene que ser algún brazo en especifico?

¿Una vez ya armado Como establezco la posición cero del brazo?

Israel
Israel
3 years ago

Disculpa que tipo de servomotor tiene el brazo robot? es que no lo mencionas y necesito saberlo

Juan antonio
1 year ago

Este proyecto se puede realizar con arduino UNO?

Anoni
Anoni
3 years ago

Disculpe dice que usa solo 4 grados del robot de las 6 que tiene cuales fue las que uso?

Cristian Raúl figueroa
Cristian Raúl figueroa
4 years ago

Hola buenas tarde, soy un estudiante estoy realizando su proyecto pero tengo un problema, no tengo los codigos para programar el arduino me los puedes pasar?? Para poder coluir con el proyecto, gracias

Isra
Isra
4 years ago

Buenas tardes disculpa quisiera saber si tiene el contacto de la persona que le compro el brazo robot ya que lo busque y no lo encuentro si es así me lo podría proporcionar o en su defecto el modelo exacto para buscarlo

Drawings
4 years ago

No está claro qué tipo de energía se suministra al microcircuito, puede enviarme un diagrama o una lista de elementos para los contactos

fernando
4 years ago

ola ingeniero le quiero comentar el codigo es el primero donde dice REPOSITORIO DE GITHUB o que esta en la parte de abajo EN LACE CUAL ES GRACIAS POR SU AYUDA

Leonardo Allberto Gonzàlez
Leonardo Allberto Gonzàlez
6 years ago

Amigo Disculpa En el Código De arduino Vienen Declarados Los Pines para el RGB como digitales
Pero en la Placa y el en diagrama Vienen como analógicos
Habrá algún problema con eso ?

Antony García González
Antony García González
6 years ago

Lo hice así porque me pareció mas conveniente. Los pines analógicos pueden ser usados como digitales. De esta forma, el pin A0 es el 14, A1 es 15… y así sucesivamente

Jesus Obregon
Jesus Obregon
6 years ago

Hola amigo, buen día, gracias por tus aportes, tengo que entregar un proyecto de automatizacion y me gusto el trabajo que expones en esta pagina, ya lo he armado, pero no me queda claro cual es la posicion de los servomotores del robot. cual es el servo 1, el 2, el 3, el 4, al momento de caragar programa y correr adopta posiciones muy raras.
agradeceria mucho de tu ayuda.
gracias

Antony García González
Antony García González
6 years ago
Reply to  Jesus Obregon

Verifica el setting mode descrito en el post

Jesus Obregon
Jesus Obregon
6 years ago

gracias Ing, ya lo revise y solo era ajuste de los grados de los servos.
excelente trabajo

Jesus Obregon
Jesus Obregon
6 years ago

hola ingeniero, como seria el codigo incluyendo una entrada digital a parte del LDR, que con el LDR ejecute el armAction() y que con la otra entrada mande ejecutar otra tarea: armAction2(), agradezco su ayuda…

Roberto Ramon Cameto Panzardi
Roberto Ramon Cameto Panzardi
6 years ago

Gracias Antony. Muchas gracias por tu trabajo y tiempo que dedicas a enseñarnos, excelente tu didáctica y proyectos. He intentado hacer el proyecto de la banda transportadora con el brazo robótico. finalmente la banda transportadora es lo que me falta hacer pero para sacar la altura y dimensiones requeridas he hecho una plataforma en hojalata sobre la cual estan el diodo laser y el LDR. El resto ya funciona OK poniendo sobre la plataforma el objeto que recoge el gripper cuando se interrumpe el haz del laser. Un detalle que deseo comentar es el siguiente: No conseguia que el programa… Read more »

Antony García González
Antony García González
6 years ago

Hola amigo. gracias por los comentarios. Ya se ha corregido el código. Fue un pequeño error mío. Saludos y muchas gracias por la observación.

J Tomas Guardado
J Tomas Guardado
7 years ago

Excelente trabajo, aunque creo que las referencias a GND están cambiadas en los esquemas, en el unifilar seria el pin 1 de J1, y en diagrama del PCB al pin 2 de J1. Y si mal no recuerdo, los interruptores y pulsadores no se referencian con la letra K si no con la letra S.