pasión por la robótica en Argentina
[PRINCIPAL] [NOSOTROS] [ACTIVIDAD] [NOTICIAS] [ARTICULOS] [GALERIA] [ENLACES] [CONTACTO]
Desarrolladores de Robots:
Un grupo donde podemos conversar de los temas que nos interesan

Desarrolladores de Robots funciona en Grupos Yahoo! ar.groups.yahoo.com
Ejemplo de un brazo robótico
Traducción del artículo "Robotic Arm"
por Giandomenico De Sanctis

Siempre me interesó la construcción de equipos robóticos, pero no me había lanzado a hacerlo... hasta ahora. Hace algunos meses vi la película "Yo, Robot" y ahí decidí "éste es el momento, quiero construir un brazo robótico". Aquí presento los resultados, con la esperanza de que sea útil para otras personas que también estén interesadas.

Este brazo robótico es una pequeña demostración realizada con servomotores de los que se utilizan normalmente en los modelos RC (radiocontrol), y es controlado desde una PC, a la que se conecta a través de un cable serie.


Estructura mecánica

El brazo tiene 6 grados de libertad de movimientos:

  • una base giratoria
  • un motor en el "hombro"
  • un motor en el "codo"
  • dos motores en la "muñeca", uno para mover de arriba a abajo y otro para la rotación de izquierda a derecha.
  • Y un sexto motor en la pinza de manipulación.

He realizado diseños diferentes de las diversas partes, y éstas que presento son las más "logradas", el resultado de mucha "prueba y ensayo". Ahora se parece a la estructura real de un brazo industrial.

La longitud de la sección que va entre el codo y la muñeca es casi igual a la longitud de la "mano", lo que permite un buen balance y equilibrio de los pesos.

El servo del hombro tiene el "refuerzo" de un resorte cuando el brazo se inclina hacia adelante.

En esta posición la carga del servo del hombro aumenta, y disminuye rápidamente cuando el brazo vuelve a la posición vertical. El uso del resorte permite utilizar un servo un poco menos costoso.

El servo del hombro recibe la carga del peso de todo el brazo.

Para ayudar al hombro, el brazo vertical pivota sobre un punto de apoyo unido a la base. Esta disposición resulta en un montaje más rígido.

La parte horizontal (o "antebrazo") tiene un contrapeso que compensa el peso de la pinza. De este modo, el servo del codo es parcialmente liberado del torque "parásito" que genera el peso de la muñeca y las pinzas.

La base tiene placas de acero atornilladas debajo, en correspondencia con la posición del brazo. Esto ayuda a lograr la estabilidad necesaria, incluso cuando el brazo está totalmente extendido en sentido horizontal.

He utilizado como material de construcción madera terciada y algunas piezas de madera balsa, porque tenía un montón de ese material y porque es fácil trabajar con ellas con mis simples herramientas (mini taladro, sierra, etc.).

De hecho, construí muchas partes con una madera terciada especial para aeromodelismo que sólo tiene 2 mm de espesor, pero es muy rígida y fuerte, y hasta es posible que sea mejor que el aluminio.

Algunas piezas en varias partes, pero principalmente en la pinza (o "mano"), están hechas de plástico blanco (PVC) o de plexiglás semitransparente, que también son buenos materiales y fáciles de trabajar.

Muchas partes están unidas con tornillos y pernos (de 3 ó 4 mm de diámetro) y otras están pegadas con pegamento epoxi o similar.

Utilicé estos servos:

  • un Hitec HS475-HB en la base giratoria
  • dos Hitec HS475-HB para el hombro y el codo, que son las articulaciones con más carga
  • dos Hitec HS311 (muñeca) y
  • un Futaba S148 (pinza).

Un servo estándar en la pinza resulta un poco aparatoso, pero he probado un Hitec HS81 (microservo estándar de 16,6 gramos) y se rompió a los pocos minutos de trabajo.


Electrónica

El brazo es controlado por una tarjeta propia que recibe órdenes desde una PC.

La PC no puede producir los pulsos con la precisión que se necesita para posicionar los servos, así que utilicé una tarjeta de control basada en un microcontrolador. Éste recibe los comandos de posicionamiento a través de un cable serie, los decodifica y envía los pulsos correspondientes a cada uno de los servos. Usé un microcontrolador PIC16F628A, porque es muy fácil de programar y en Internet hay miles de tutoriales y ejemplos. Y por último, pero no menos importante... ¡El chip es barato!

En un primer intento utilicé el 16F84A con un pulso de reloj de 4 mhz. Pero como no tiene un interfaz UART por hardware para las comunicaciones serie, es casi imposible obtener un funcionamiento correcto y parejo, ya que se pierden muchos comandos durante la transmisión serie (a mí me ocurre porque soy un novato de la electrónica).

El microcontrolador 16F628A tiene una interfaz UART implementada en hardware, de modo que puede recibir comandos desde la línea serie durante el procesamiento de los pulsos para los servos sin perder nada.

De todos modos, la operación a 4 mhz resultó insuficiente para lograr un buen trabajo, y observé algunos "saltos" cuando la recepción de un comando interfería con el pulso de un servo. Esto se soluciona operando a 20 mhz.

El circuito tiene separadas la fuente de la lógica (5 voltios que se regulan desde una batería de 9 voltios por un circuito integrado LM317) y la de los servos (6 voltios regulados desde los 12 voltios de una fuente para PC, con otro integrado LM317).

La placa tiene ocho salidas para servos, aunque sólo se utilizan seis en esta aplicación; un conector hembra para el puerto serie, que conecta al microcontrolador a través de un adaptador MAX 232; un conector para alimentar a otros dispositivos con 5 voltios y tierra; y otro conector para los 3 pines libres del microcontrolador 16F628A.

El firmware para el 16F628A lo escribí con el programa MikroPascal de MikroElektronika. El programa se basa en rutinas de interrupción para manejar los pulsos y para recibir datos del puerto serie. El protocolo de los comandos es muy simple: tres bytes de datos y un cuarto byte de chequeo para verificar que la transmisión haya sido correcta.


Esquemático de la tarjeta de control (PDF)

Ubicación de los componentes

Máscara de componentes (PDF)

Pistas del circuito impreso (PDF)

Fuente en Pascal del programa en el 16F628A

Programa del 16F628A en formato hexadecimal


Programa de control en la PC

El programa de control en la PC está escrito en Delphi (Pascal bajo Windows). Lo que más me gusta del Delphi es que compila directamente al exe sin necesidad de ninguna DLL externa. Y los programas se hacen con rapidez.

EXE del programa de control en Delphi

El programa de control permite manejar el brazo con un joystick o joypad. Los seis servos se puede controlar por separado con los botones del joypad. Tengo un joypad con 4 botones, más el central para "cruzar" los botones, por lo que he definido uno de los botones para hacer el cambio de control de los primeros 3 servos a los otros 3 servos. Por supuesto que si tienes un joystick / joypad con más botones el programa se puede hacer más simple.

El programa de control puede grabar una secuencia de posiciones de los servos en un script y luego reproducirla de forma automática. Se trata de una especie de modo de "aprendizaje": mueves el brazo a una posición, cambiando la posición de uno o más servos en el orden deseado, grabas, y luego pasas a la siguiente posición para grabar de nuevo, y así sucesivamente. El programa incorpora un editor sencillo para trabajar sobre el script.

Por último, existe un modo de posicionar la pinza por medio de coordenadas absolutas en centímetros. La coordenada X es el movimiento horizontal de izquierda a derecha, en lo que respecta al brazo, la Y es la vertical hacia abajo y arriba, la Z es la horizontal hacia adelante y atrás.


Galería de fotos


Dibujos del proyecto (planos en PDF)


e-mail de contacto con el autor


© 2007, 2014 Robots Argentina