Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
PROYECTO D.I.M.E.R
#1
Hola!

Hacía tiempo ya que quería unirme a este foro, aprovecho para presentarme un poco, me llamo Antonio, estudio ingenieria electrónica en Ferrol y mi proyecto más ambicioso en un brazo robótico hecho casi por completo con materiales reciclados. 

El proyecto D.I.M.E.R empezó hace poco más de 1 año y he ido desarrolandolo probando diferentes estructuras y materiales. 

Tengo un blog donde tengo subidos todos los videos, fotos y el paso a paso, también lo he de colgar aquí pero obviamente no de manera muy extensa.

Saludos y aquí os dejo el enlace a mi blog: blog brazo robótico

El brazo, tiene 5 ejes de libertad más pinza, levanta actualmente 2 kilos en la punta (aunque esto es mejorable) y mide unos 50 cm de altura aprox y unos 115 cm de largo en el eje horizontal. lo que hace que tenga bastante alcance y que no tenga ningún ángulo muerto.
Citar
#2
Esta genial!!
Lo vi en la maker de bilbo, y me pareció muy buena idea construirlo con materiales reciclados
Citar
#3
Bienvenido antonio!!!

Nos alegra verte por aquí. Ya irás comentando las mods que le hagas y demás, que pinta muy bien el brazo.

Un saludo.
Citar
#4
Fotografía 
Ideas previas

La idea de construir un brazo robótico surgió un día que estaba soldando unos cables y necesité una tercera mano para aguantar la placa. Fue en ese momento cuando pensé: ¿por qué no diseñar un brazo que me ayude cuando yo esté soldando? Algo un poco desarrollado, que no se use únicamente para aguantar los objetos como las pinzas que se venden por internet.


[Imagen: 20140910_205012.jpg?w=356&h=623]
Durante las siguientes semanas me dediqué a construir uno pequeño con unas piezas de Meccano y algún juguete roto. Se movía a trompicones pero cumplía su función.


Pasado un tiempo le añadí una cámara y unas luces, de manera que podía dirigirlo por ordenador. Empecé a programar funciones como coger objeto en un punto ‘A’ y llevarlo a un punto ‘B’.


En esta época levantaba un tope de 200 gramos antes de que empezase a ceder el eje vertical.


A finales del verano del 2014 terminé de hacerle mejoras y empecé a pensar en el diseño de su hermano mayor, DIMER.




Bocetos varios



[Imagen: 20151112_124822.jpg?w=356&h=468]
Antes de empezar a construirlo tenía que tener una idea general, sin muchos detalles, para poder empezar. Las primeras decisiones fueron tamaño, peso a levantar, materiales y forma.

En cuanto al tamaño pensé en adaptarlo a mi mesa de trabajo, así que lo ideal era que tuviera un alcance máximo de unos 120 cm a la redonda. Quería que levantase como mínimo 1 Kg en la punta y que fuera de metal, así que pensé en el aluminio (dada su ligereza) y en el acero (para las piezas que tuvieran que soportar grandes fuerzas).



[Imagen: 20151112_1248331.jpg?w=356&h=468]
Decidirme en cuanto a la forma me llevó varios días. Al principio quería hacerlo como la mayoría de robots industriales; que se pudiera plegar justo en la base para tener mayor alcance y maniobra; pero como también quería aprovechar al máximo todo lo que tenía por casa, decidí hacer un eje vertical tipo grúa y empezar con las articulaciones a una altura de unos 40 cm.


Entonces empezaron los bocetos, hechos a lápiz o boli en cualquier rato libre que tuve durante los siguientes días. Aviso, dibujo bastante mal Lengua



Eje vertical



[Imagen: 20141116_012535.jpg?w=329&h=570]
Utilicé una base para anclar las patas de una pérgola de jardín y corté 1 perfil de aluminio de 20 x 20 mm y de 1 metro de largo en 4 secciones. Atornillé estas secciones a la base y las fije a una tabla, que en teoría iba a ser provisional.

Desmonté un viejo motor que no funcionaba y me quedé con la carcasa, las dos tapas y el eje (calentándolo con un soplete salen a la primera). Como se ve en las fotos tuve que cortar con la radial para adecuar uno de los platos a los 4 perfiles que había colocado previamente.
 [Imagen: 20150131_152651.jpg?w=272&h=468]
Cogí una chapa de acero, le di forma de U y la coloqué en la parte superior de las 4 barras de aluminio mirando hacia abajo, de esta manera la primera parte del eje vertical quedaba ya lista.

[Imagen: 20150131_195706.jpg?w=282&h=488]
La segunda parte del eje comenzaba con el otro plato del motor y la carcasa del mismo, cortando 4 perfiles de aluminio de 10 x 10 mm
con una longitud de 15 cm y colocándolos en el interior del cilindro. Para que tuvieran mucha más resistencia le puse unos pilares en forma de X en la base, haciendo que quedasen bien ajustados. 


Al final de este segundo tramo del eje vertical corté y coloque otra chapa de acero, para unirla a los pilares utilicé unas
escuadras de Meccano.


Articulaciones
[Imagen: 20141214_204508.jpg?w=443&h=257]
El brazo ya va cogiendo forma, ahora toca hacerle las articulaciones para que llegue a cualquier objeto dentro de su alcance. Le instalé 3 articulaciones, siendo una de ellas el juego completo de muñeca al que le dedicaré una entrada completa.
Al principio pensé en hacer una extensión telescópica. 


La idea era que un perfil cuadrado con una tuerca anclada pasara por dentro de otro perfil cilíndrico. Una barra roscada giraría para desplazar el perfilcuadrado.
Este sistema me resolvía fácilmente varios problemas, pero conseguir unos motores que pudieran mover las barras de manera rápida y con par resulto casi imposible, de manera que cambié por una articulación de 3 puntos, de ahora en adelante ‘Hombro’, ‘Codo’ y ‘Muñeca’
Los perfiles son rectangulares de aluminio, de 12 x 10 milímetros.

Ahora que ya estaban colocados venía la parte de la motorización.Por suerte, un amigo acababa de limpiar el trastero y me había regalado varias cosas que iba a tirar, entre las que se encontraban dos motores elevalunas eléctrico de coche. Estos motores son de 12 voltios DC y tienen la característica de tener mucho par, justo lo que necesito.

[Imagen: 20151004_005208.jpg?w=190&h=190&crop=1]
[Imagen: 20151004_005202.jpg?w=190&h=190&crop=1]

[Imagen: 20151003_141836.jpg?w=190&h=190&crop=1]
Los motores están enganchados mediante perfiles de aluminio a la estructura. En la tercera foto se detalla el perfil cuadrado (que hace de eje del motor) dentro de otro perfil cilíndrico. De esta manera hago un rodamiento resistente y sin tener que comprarlo. A su vez, este conjunto está envuelto por una lamina de aluminio de 10 x 2 milímetros que hace también de soporte del perfil cilíndrico y del propio eje del motor.
[Imagen: 20151004_005544.jpg?w=299&h=333]


Para transmitir el movimiento pensé en utilizar cuerdas, pero sólo de manera provisional, ya que cuentan con la desventaja de estirarse al cargar peso, situación que hay que evitar en un sistema que pretende tener precisión. En el futuro se cambiarán por cadenas metálicas.
Ya solo queda la muñeca, pero eso se merece una entrada aparte.






Juego de muñeca



[Imagen: 20150922_215537.jpg?w=446&h=258]

Ya hemos llegado a la última fase de la mecánica de D.I.M.E.R, en ella explicaré como hice el juego de muñeca.





Esta parte me llevó mucho trabajo, ya que el brazo tenía que aguantar un kg pero moviéndolo con precisión. Para ello, diseñé la muñeca con dos ejes de giro más la apertura de la pinza; uno de los ejes es para subir y bajar, y el otro para girar sobre si mismo.



Para empezar, uní la pinza (comprada por Internet, buscando pinza robot) con un perfil cuadrado de 10 x 10 milímetros. Este perfil irá dentro de otro perfil cilíndrico, y este último se amarraría al eje que sube y baja la pinza.

[Imagen: 20150923_162151.jpg?w=453&h=263]





Después se une cada uno de los giros a un servo. Para el movimiento vertical utilicé dos servos Hd 1501 MG, con un par de 17 kg-cm, mientras que para el giro sobre si mismo y la pinza utilicé 2 servos MG995, de 11 kg-cm de par.





Por último, anclé los servos Hd 1501 MG a la estructura del brazo y fijé el MG 995 al perfil cilíndrico.

[Imagen: 20151004_005557.jpg?w=597&h=344]

Giro horizontal





[Imagen: 20151128_222627.jpg?w=326&h=428]

Unos días antes de la OSHWDem aún no conseguía tener el movimiento horizontal, así que estuve probando unas nuevas técnicas, con la mala suerte de que una de las partes más esenciales se rompió. Intenté sustituirla por dos planchas de acero pero no tenían la misma consistencia.





Por falta de tiempo no podía volver a hacer el eje vertical de nuevo, así que se me ocurrió utilizar una horquilla de un chasis de bicicleta que tenía reservado para algún proyecto. Con la OSHWDem ya casi encima cogí la radial, corté la parte que necesitaba y la fije a la base.


[Imagen: img-20151101-wa0002.jpeg?w=275&h=477]


Resultó que con esa base nueva le costaba menos moverse, por los rodamientos que ya trae ese propio eje. Ahora tocaba pensar cómo transmitirle el movimiento… sabía que necesitaba un motor potente y con baja velocidad para que el brazo no girase demasiado rápido.





Tenía un viejo motor de una impresora que había desguazado hace tiempo que traía unos ejes con reductora, y diseñé otra reductora adicional con unas piezas de Meccano. Para unir ese eje con la horquilla de la bicicleta utilicé una pieza hecha con láminas de aluminio, y de esta manera conseguí que el brazo girara.







[Imagen: 20151115_115820.jpg?w=288&h=216&crop=1]

[Imagen: 20151115_115827.jpg?w=288&h=216&crop=1]





Al acabar la OSHWDem pude desarrollar otro sistema menos ruidoso, más preciso y que consume menos energía (el motor de la impresora era de 24 V y necesitaba una fuente de alimentación de 5 A).





[Imagen: 20151128_210337.jpg?w=190&h=190&crop=1]

[Imagen: 20151128_210346.jpg?w=190&h=190&crop=1]



[Imagen: 20151128_210351.jpg?w=190&h=190&crop=1]





Para ello aproveché un par de engranajes con su correa y los uní al eje con unas láminas de aluminio. Para motorizarlo me llegaba con un servo MG995 trucado para que fuera de 360º en vez de 180º (hay infinidad de tutoriales de como trucarlos en internet).





Parte electrónica





Vamos a por la parte de la electrónica que se encarga de recibir las señales que le mandemos, las procesa, y actúa sobre los diferentes motores para mover a D.I.M.E.R como nosotros queramos.

Primero la lista de la compra:
  • Arduino Mega
  • 2 servos 9g
  • 2 variadores de velocidad h10143
  • 2 placas de 4 servos/1 contacto
  • Varios potenciometros de 10k ohm
  • Puerto paralelo
  • Cables de 1 mm de sección.
  • Cables de datos
  • Cable paralelo
  • Fuente de alimentación de 12 V/20 Amperios
  • Fuente de alimentación de 5 V/3 Amperios
  • Joystick

[Imagen: 20151128_210804.jpg?w=384] 

El joystick es uno común de ordenador, le cambié todos los potenciómetros por unos de 10 k para tener unas señales más lineales. El hecho de utilizar un puerto paralelo es porque necesitamos sacar 6 señales más 4 cables de alimentación y este tipo de puertos tienen 25 cables.

Fijaremos una conexión paralelo para poder enchufar y desenchufar el joystick, de esta manera podremos transportarlo de una manera más sencilla.

[Imagen: 20151128_210305.jpg?w=386&h=294]

Los dos variadores de velocidad son para modificar la velocidad de los motores de elevalunas. Para enviar las señales desde el Arduino hasta estos controladores he tenido que utilizar los dos servos de 9g que girarán el potenciómetro del variador, después, la corriente irá a través de las placas de relés y dependiendo de si queremos activar el motor hacia un sentido o el otro se activarán ciertos relés o no.

[Imagen: 20151128_210329.jpg?w=416]

La fuente de alimentación de 12 voltios está destinada a los motores de elevalunas, mientras que la fuente de 5 voltios es para hacer una línea común de 5 voltios que alimente a los servos, al Arduino y al joystick.


Las señales que van a los servos se envían desde los pines digitales PWM a los servos. Esta línea de datos irá de manera independiente a la línea de potencia, para tener menos ruido en la señal. Por último, los cables se fijarán a las articulaciones horizontales mediante bridas.
Citar
#5
Gran proyecto Dimer.

Un par de criticas o cambios. Que no te siente mal.

En lugar de usar el modulo de relés, el servo y selector de velocidad puedes usar los IBT-2 o IBT-3 (mas baratos) que rondan los 8 €. Permiten controlar motores de gran amperaje desde arduino con conexiones PWM.

http://es.aliexpress.com/store/product/I...eb201560_1

http://es.aliexpress.com/store/product/D...eb201560_1

http://abramizing.blogspot.com.es/2015/1...duino.html
Citar
#6
Hola!

En realidad los cambié por los que tú dices, IBT-2, lo que pasa es que aun no los doy calibrado del todo con las señales del joystick (tienen un poco de ruido y cuando están en el centro varía de 510 a 517 aprox) y eso  que tengo las lecturas del potenciometro con media de 10 elementos.

En cuanto los tenga bien puestos ya subiré al actualización, los módulos esos son la caña, ponen que hasta 43 amperios y lo mejor es que le metes la señal directa desde el arduino, con lo cual me ahorro como bien dices los relés y los servos .

Un saludo!
Citar
#7
Gracias por exponerlo al completo en el foro Gran sonrisa
Citar
#8
yo le puse una zona muerta a los joysticks de 50.

Si la medida está entre 512+zm= 562 y 512-zm=462 no hace nada.

Aparte de que tengo la media entre 10 medidas para que no se brusco.
Citar
#9
(04-01-2016, 01:54 PM)ebludt escribió: yo le puse una zona muerta a los joysticks de 50.

Si la medida está entre 512+zm= 562 y 512-zm=462 no hace nada.

Aparte de que tengo la media entre 10 medidas para que no se brusco.

Hice lo mismo, en el código también hice una zona muerta para cada valor, porque a pesar de hacer la media, con que varíe +-1 grado empieza  a temblar por todas partes.

Saludos!

Actualización 6 Enero

Hola!

Al llegar navidades he tenido un poco más de tiempo para poder mejorar a a DIMER, las mejoras han sido principalmente dos; por una parte unos drivers mejores y por otra unos potenciometros para saber su posición y poder programarlo.

Drivers: 

En la maker faire de Bilbao otro maker me comentó que acababa de encontrar unos drivers para motores que aguantaban mucha potencia y se podían controlar desde el Arduino directamente.

Resulta que eran los IBT-2, estos drivers los puedes encontrar en muchas webs y los puedes conseguir por 9 $ aproximadamente.

Según la ficha técnica aguantan hasta 30 amperios y 27 voltios, haciendo también el cambio de sentido de giro del motor, todo ello directamente desde PWM.

 [img=0x0]https://dimerblog.files.wordpress.com/2016/01/20160106_011612_richtonehdr.jpg?w=872[/img]
Así que los compré y busqué algún código para poder moverlos. resulta que es muy fácil ya que simplemente le envías valores de 0 a 255 por un canal de PWM mientras el otro lo pones a 0. Así que rapidamente sustituí los drivers antiguos, que eran mucho peores, además así me ahorro lo de los servos moviendo el potenciometro del driver más las placas de relés para el cambio de sentido. De modo que ahora la base está más despejada.



Potenciometros:

Obviamente necesito que DIMER se pueda programar, para que haga tareas repetitivas o ciertas acciones, así que necesitaba saber su posición en todo momento. Para ello coloqué unos potenciometros en los ángulos de hombro y codo, utilizo potenciometros porque son muy sencillos de utilizar y además ninguno de mis ángulos es mayor de 180 grados.


Así que coloqué los dos que necesitaba, el del codo está mucho mas accesible que el del hombro, ya que se puede amarrar directamente al eje como se ve en la imagen.


[Imagen: 20160106_0116432.jpg?w=3264]

El del hombro fue un poco más complicado, al final tuve que ceder y ponerle una lámina de aluminio y cola caliente para fijarlo al eje, esto es porque no tenia ninguna pieza a mano para engancharlo, pero en cuanto pueda le haré una pieza en 3d para que quede seguro.

[Imagen: 20160106_011635.jpg?w=3264]


El código es muy sencillo, le indicas los ángulos y que articulación quieres mover, con un par de bucles sencillos DIMER sabe cuanto tiene que moverse y en que dirección.


Aquí os lo dejo, seguramente se os ocurra otra manera de hacerlo de manera más eficiente, pero de momento funciona y la parte de depuración de código ya la haré al acabarlo del todo.
Con esto queda actualizada el desarrollo de DIMER.


// Solamente esta subido la  parte correspondiente del Void loop, el setup es simplemente declarar las variables y arrancar el Serial a 9600.
//lectura posicion codo
posicion2 = map(analogRead(A4), 0, 1023, 180, 0);
posicion3 = map(analogRead(A7), 0, 1023, 0, 180);
Serial.print(” H “);
Serial.print(posicion3, DEC);
Serial.print(” C “);
Serial.println(posicion2, DEC);

//programacion movimientos:
if(Serial.available() >= 1)
{
/*
1- Leer un numero entero por serial
2- Calculamos su modulo por 10 (sera el numero del motor)
3- Dividir el entero inicial por 10
4- Lo que quede, sera la posicion del motor
*/
enviado = Serial.parseInt();
num = enviado%10;
enviado = enviado/10;
posicion = enviado;

//aqui bajamos el codo hasta que llega al angulo correcto
if(num == 1) //quiere decir que queremos mover el codo
{
if(posicion>posicion2){
do{
analogWrite(LPWM_Output, 0);
analogWrite(RPWM_Output, 50);
posicion2 = map(analogRead(A4), 0, 1023, 180, 0);
Serial.print(“bajando hombro “);
Serial.println(posicion2, DEC);
}
while(posicion2 < posicion);
}

//aqui subimos el codo hasta que llega al angulo correcto
if(posicion<posicion2){
do{
analogWrite(LPWM_Output, 50);
analogWrite(RPWM_Output, 0);
posicion2 = map(analogRead(A4), 0, 1023, 180, 0);
Serial.print(“subiendo codo “);
Serial.println(posicion2, DEC);
}
while(posicion2 > posicion);
}

//aqui paramos los motores al llegar al angulo correcto
analogWrite(LPWM_Output, 0);
analogWrite(RPWM_Output, 0);
}

if(num == 2)//quiere decir que qeuremos mover el hombro
{

//aqui bajamos el hombro hasta que llega al angulo correcto
if(posicion>posicion3){
do{
analogWrite(LPWM_Output2, 0);
analogWrite(RPWM_Output2, 50);
posicion3 = map(analogRead(A7), 0, 1023, 180, 0);
Serial.print(“bajando hombro “);
Serial.println(posicion3, DEC);
}
while(posicion3-5 < posicion);
}

//aqui subimos el hombro hasta que llega al angulo correcto
if(posicion<posicion3){
do{
analogWrite(LPWM_Output2, 50);
analogWrite(RPWM_Output2, 0);
posicion3 = map(analogRead(A7), 0, 1023, 180, 0);
Serial.print(“subiendo hombro “);
Serial.println(posicion3, DEC);
}
while(posicion3-5 > posicion);
}
//aqui paramos los motores al llegar al angulo correcto
analogWrite(LPWM_Output2, 0);
analogWrite(RPWM_Output2, 0);
}

//aqui paramos en caso de emergencia
if(num == 3) // parar todo
{
analogWrite(LPWM_Output, 0);
analogWrite(RPWM_Output, 0);
analogWrite(LPWM_Output2, 0);
analogWrite(RPWM_Output2, 0);
}

}
Citar