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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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
Verifica el setting mode descrito en el post
gracias Ing, ya lo revise y solo era ajuste de los grados de los servos.
excelente trabajo
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…
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 ?
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
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
Es el mismo, no?
No está claro qué tipo de energía se suministra al microcircuito, puede enviarme un diagrama o una lista de elementos para los contactos
Bueno, la alimentación está conectada a 5V en el Arduino. Y en el video se ve que estoy alimentando el circuito con un cargador de celular que entrega 5 voltios. No sé que es lo que no te queda claro.
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
Revisa en ebay. Aquí hay uno: https://www.ebay.com/itm/Robot-6DOF-Clamp-Claw-Mount-Kit-Mechanical-Robotic-Arm-Servos-Metal-Horn-USA/253182900477?epid=16005566990&hash=item3af2e078fd:g:rSoAAOSwRsZZ3EDy
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
Lee bien el post. Todo lo que necesitas está ahi
Disculpe dice que usa solo 4 grados del robot de las 6 que tiene cuales fue las que uso?
Los 4 motores que se ven en el video
Disculpa que tipo de servomotor tiene el brazo robot? es que no lo mencionas y necesito saberlo
El brazo te lo venden con los servomotores que necesitas para armarlo. Búscalo en Ebay o en Amazon
Este proyecto se puede realizar con arduino UNO?
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?
El proyecto debería poder realizarse con cualquier brazo de 4 servos. El código tiene un modo de programación para setear el cero del motor. Pero en vez de tratar de replicar este proyecto, yo recomiendo que te pongas a entender que fue lo que se hizo y trates de desarrollar tu proyecto con base en el conocimiento que he compartido
Este proyecto se podría hacer con arduino UNO?
Hola, ¿Usted cree que podría montar esto para una cinta real?
Si, probablemente si se puede. El concepto es el mismo
Hola, cómo puedo acoplarlo a un brazo robótico de 3 DOF Y NO DE 4
hola, me gustaría hacer este proyecto ya tengo todas las cosas pero no se como se hace, me podrían ayudar.