Banda transportadora + brazo robótico con Arduino

9
7095

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é.

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().

El sistema en funcionamiento

El siguiente video presenta el sistema explicado y funcionando. Tanto el código como el hardware utilizado en el video es idéntico al mostrado en este post, por lo que todo ha sido probado y comprobado antes de ser publicado.

Es posible, quizás, reducir la rigidez apreciada en los movimientos del brazo. Por lo pronto lo importante es mostrar que el código y el hardware son capaces de cumplir con las tareas programadas.

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.

Citar este artículo como: Antony García González, "Banda transportadora + brazo robótico con Arduino," in Panama Hitek, diciembre 17, 2016[Online]. Available: http://panamahitek.com/brazo-robotico-con-arduino/. Accessed: noviembre 22, 2017
  • Leonardo Allberto Gonzàlez

    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

      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

    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

      Verifica el setting mode descrito en el post

      • Jesus Obregon

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

  • Roberto Ramon Cameto Panzardi

    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 iniciara el motor de la banda transportadora, o sea logar la excitacion del transistor BC547 que fue el que finalmente usé.. Finalmente analizando la linea del programa donde estä”int motor pin=motor pin. la modifique y puse “int motor pin=motor pin=11; por ser “D11” donde se indica por esquema del circuito que va conectado el resistor que excita al transisor, el hecho fue que luego de esto, funcionó OK. Para terminar, todas las abrazaderas de motores y la “U” para soporte de los motores servo (use los servos MG996R), los hice con hojalata que me permitió mediante soldadura con estaño, montar el gripper, etc. etc.. Use fuentes separadas para alimentar los motores (6voltios) y para alimentar los circuitos del arduino nano use una fuente de 9 voltios con un reductor de voltaje L7805CV.
    Nuevamente gracias y te agradezco infinitamente la ayuda y estimulo que nos das.
    Un cordial saludo desde Montevideo-Uruguay.
    Roberto

    • Antony García González

      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

    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.

    • Antony García González

      Hola. Gracias por la observación. En el caso de J1 es perfectamente válida. En el caso del Switch, ha sido por el estilo del software que utilicé. El símbolo que escogí me pareció el más apropiado pero es denominado K por el software. Igual ya lo corregí. Saludos.