# Electronica y programacion de un brazo Robot



## Sfinge (Oct 1, 2008)

Bueno pues yo quiero crear este tema en vista de que observando los temas que hablan de un brazo robot solamente se concentran en la mecanica...   y esta bien, pero quiero integrar la parte de la electronica y de la programacion de un brazo robotico  

Consiste en un circuito digital de control (  Sin nada de pic ni de microcontroladores) y un programita creado en visual basic .NET 2005. Les dejo el diagrama.

El circuito consta de tres etapas: 

1- El circuito de control de los motores Paso a Paso, compuertas X-Or (74LS86), Flip-Flop JK(74LS76) y un 555 con un rele para hacer el cambio de izquierda a derecha o viceversa.

2- El circuito para el multiplexado, como son 6 motores y controlados individualmente entonces se utilizan Flip-Flop D de 8 entradas (74LS373 o 74LS374, o tambien pueden utilizarse flip-flop D de 4 entradas 74LS173 o 74LS174) y utilizando sus enables podemos habilitar los motores que nosotros queramos.

3- Finalmente el circuito de Potencia, en este caso para evitar utilizar los transistores de potencia y como es una demostracion pequeña se han utilizado ULN2803 que son 8 compuertas Not tipo darlington o como quien dice los transistores de potencia encapsulados  Aclaro que si se necesita mas potencia pues solo se van agragando entradas y salidas en paralelo de los ULN2803 y asi vamos obteniendo mas potencia.

Este es el codigo de programa

```
Imports Brazo.Libreria
Public Class Form1
    Dim p9 As Class1
    Dim b1, b2, b3, b4, b5, b6 As Boolean
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.Timer2.Enabled = False
        Dim p1 As Class1
        p1 = New Class1
        p1.Puerto = &H378
        p1.Forma = 1
        p1.Pin = 1
        p1.EnviarPulso()
        b1 = True
        b2 = False : b3 = False : b4 = False : b5 = False : b6 = False

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.Timer2.Enabled = False
        Dim p2 As Class1
        p2 = New Class1
        p2.Puerto = &H378
        p2.Forma = 1
        p2.Pin = 2
        p2.EnviarPulso()

        b1 = False
        b2 = True : b3 = False : b4 = False : b5 = False : b6 = False

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Timer2.Enabled = False
        Dim p3 As Class1
        p3 = New Class1
        p3.Puerto = &H378
        p3.Forma = 1
        p3.Pin = 4
        p3.EnviarPulso()

        b1 = False
        b2 = False : b3 = True : b4 = False : b5 = False : b6 = False

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.Timer2.Enabled = False
        Dim p4 As Class1
        p4 = New Class1
        p4.Puerto = &H378
        p4.Forma = 1
        p4.Pin = 8
        p4.EnviarPulso()

        b1 = False
        b2 = False : b3 = False : b4 = True : b5 = False : b6 = False


    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Me.Timer2.Enabled = False
        Dim p5 As Class1
        p5 = New Class1
        p5.Puerto = &H378
        p5.Forma = 1
        p5.Pin = 16
        p5.EnviarPulso()

        b1 = False
        b2 = False : b3 = False : b4 = False : b5 = True : b6 = False

    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Me.Timer2.Enabled = False
        Dim p6 As Class1
        p6 = New Class1
        p6.Puerto = &H378
        p6.Forma = 1
        p6.Pin = 0
        p6.EnviarPulso()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If (Me.ProgressBar1.Value < 200) Then
            Me.ProgressBar1.Value = Me.ProgressBar1.Value + 10
        Else
            Me.Timer1.Enabled = False
        End If
    End Sub

    Private Sub Button7_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Me.Timer2.Enabled = False
        Dim p7 As Class1
        p7 = New Class1
        p7.Puerto = &H378
        p7.Forma = 1
        p7.Pin = 32
        p7.EnviarPulso()

        b1 = False
        b2 = False : b3 = False : b4 = False : b5 = False : b6 = True

    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        Me.Timer2.Enabled = True
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        If b1 = True Then
            p9.Pin = 1 + 64
            p9.EnviarPulso()
        End If

        If b2 = True Then
            p9.Pin = 2 + 64
            p9.EnviarPulso()
        End If

        If b3 = True Then
            p9.Pin = 4 + 64
            p9.EnviarPulso()
        End If

        If b4 = True Then
            p9.Pin = 8 + 64
            p9.EnviarPulso()
        End If

        If b5 = True Then
            p9.Pin = 16 + 64
            p9.EnviarPulso()
        End If


        If b6 = True Then
            p9.Pin = 32 + 64
            p9.EnviarPulso()
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim p5 As Class1
        p5 = New Class1
        p5.Puerto = &H378
        p5.Forma = 1
        p5.Pin = 0
        p5.EnviarPulso()


        p9 = New Class1
        p9.Puerto = &H378

    End Sub
End Class
```
Este es el codigo de la clase para enviar los pulsos por medio del puerto paralelo

```
Namespace Libreria
    Public Class Class1
        Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
        Private Cpuerto As Integer
        Private Cpin As Byte
        Private Cforma As Integer
        Public Property Puerto()
            Get
                Return Cpuerto
            End Get
            Set(ByVal value)
                Cpuerto = value
            End Set
        End Property
        Public Property Pin()
            Get
                Return Cpin
            End Get
            Set(ByVal value)
                Cpin = value
            End Set
        End Property
        Public Property Forma()
            Get
                Return Cforma
            End Get
            Set(ByVal value)
                Cforma = value
            End Set
        End Property
        Sub EnviarPulso()
            If Cforma = 1 Then
                If Cpuerto = &H378 Then
                    If Cpin = 0 Or Cpin = 1 Or Cpin = 2 Or Cpin = 4 Or Cpin = 8 Or Cpin = 16 Or Cpin = 32 Or Cpin = 64 Or Cpin = 128 Then
                        PortOut(Cpuerto, Cpin)
                    End If
                Else
                    If Cpin = 0 Or Cpin = 1 Or Cpin = 2 Or Cpin = 4 Or Cpin = 8 Or Cpin = 16 Or Cpin = 32 Or Cpin = 64 Or Cpin = 128 Then
                        PortOut(Cpuerto, Cpin)
                    End If
                End If
            Else
                If Cpuerto = &H378 Then
                    PortOut(Cpuerto, Cpin)
                End If
            End If
        End Sub
    End Class
End Namespace
```

Cualquier duda haganla saber que si esta dentro de mi capacidad la voy a resolver con el mayor de los gustos ademas dejo la imagen del brazo que logre controlar por medio de la pc y el circuito.


----------



## DJ DRACO (Oct 2, 2008)

El circuito esta muy bien diseñado, muy bien logrado, y se ve perfecto.

es un muy buen aporte al foro, sobre todo para aquellos que de pic's no entendemos bastante y nos llevamos mejor con integrados comunes como puertas logicas etc.

si funciona bien entonces es un muy buen aporte.

no deja de ser cierto q con pic's a veces se reduce un poco el tamaño y esas cosas.

pero es muy bueno el diseño

gracias amigo Sfinge.


----------



## Moyano Jonathan (Oct 2, 2008)

Tu diseño es realmente excelente , te agradecería si tuvieras los diseños mecánico de tu brazo a ver si me animo a armarlo , la verdad muy buen proyecto el tuyo


----------



## KanonOfGeminis (Oct 17, 2008)

Muy bueno tu aporte sfinge; aunque no entiendo mucho el codigo que usaste.... ^^! yo tengo un programa parecido pero echo en ASM para ser controlado con el PIC16F84A.

Salu2


----------



## digitalgirl (Oct 18, 2008)

hey esto me hubiera servido hace un mes y medio por que yo tambien  quise hacer ese proyecto para una clase en la universidad, pero como no halle nada parecido a esto y un profesor nos presto otro tipo de brazo, asi que tuvimos que hacer un circuito diferente, pero igual ojala le sirva mucho a alguien mas 

el que yo ocupe fue un brazo neumatico controlado a traves de una interfaz bastante sencilla de elaborar, contiene 6 movimientos nada mas y se controla a travez del puerto paralelo de la computadora, con un programa elaborado por mi compañera en visual basic, asi que cualquier interesado me puede mandar un mensaje y asi hablamos =D

asi que ya saben, 
saludos!


----------



## electronicjohndeacon (Oct 18, 2008)

hola sfinge que buen proyecto la verda lo  voy hacer pero tengo algunas dudas que voltaje ocupa?  proviene de puerto paralelo ? y como tengo que poner  el 555 como monostable o  astable o solo pon el diagrama  del 555 si no es mucha molestia y como hago el mecanismo del brazo ? gracias


----------



## Sfinge (Nov 13, 2008)

Bueno pues gracias a todos por aceptar el proyecto, y si hay muchas diferentes formas de hacer... Para electronicjohndeacon el voltaje que ocupa son dos: Para el circuito Digital son 5 voltios, y para los comunes de las bobinas de los motores PAP es de 12 voltios; y si ocupa del puerto paralelo... en cuestion a eso lo puedes proteger con unos diodos en inversa conectados en paralelo con los pines del puerto, o usar un ckto de proteccion de los muchos que estan posteados en el Foro. Con respecto al 555 es en configuracion astable para enviar los pulsos binarios que necesitan las compuertas X-or y los flipflip JK.
Cualquier duda haganla saber y voy a tratar de responderla... Saludos!


----------



## Moyano Jonathan (Nov 13, 2008)

Esfinge si no es mucho problema , me encantaría saber como hiciste la parte mecánica : engranajes , disposición de los motores , fabricación de la pinza etc.. 
desde ya muchas gracias


----------



## Sfinge (Nov 13, 2008)

El brazo solamente me lo prestaron en una universidad de mi pais, solamente desarrolle la electronica, pero creo que si busca en esta pagina de foros de electronica o en google encontraras algun diseño del mecanismo del brazo; te anexo estos links para ver si te ayudan en algo http://html.rincondelvago.com/brazo-robot.html; http://www.robotsperu.org/foros/brazo-robot-de-5-movimientos-vt457.html; http://www.acredit.ece.buap.mx/_DOC...45 C.8.1.2/Memorias FCE/robotica/S3-RC-01.pdf


----------



## LORD KSPER (Nov 13, 2008)

Hola, que tal a todos saludos

en vista de los comentarios del circuito.... tengo varios motores unipolares que saque de impresoras que destripe,  me gustaria montar un juguetito como el de aqui para mi peque, se ve muy bien el diseño por cierto, pero en lugar de puerto paralelo, seria solo con palanquitas o botoncitos, ademas de que me evitaria la parte de programacion,

- se que el puerto paralelo tiene salidas de 0v y 5v, las señales saldrian de un 7805 si es con botones, 
- y si mi diseño de brazo robot es con menos motores, por ej 4 quitaria el U10 y el U11 o agregaria en caso contrario
- si tengo motores bipolares en lugar del ULN le pongo por ej el L293D o puente H, vale?
- los pulsos se generan con un 555 variando tambien su velocidad

¿este circuito sirve para mi objetivo?, 

tambien tengo algunas dudas que me guataria resolver si me hacen el fabor:

- las señales del puerto paralelo son solo para activar los integrados y mover el motor?
- o tambien controlan la direccion? si no:
- la parte de arriba a la izquierda (U1 y U2) es la que controla la direccion? y es con una señal de 0v o 5v aplicada al Q1? 
- para que es el pulso aplicado a los integrados U3, U5, U6...?

por ahora creo que es todo, disculpen la lata y si alguna duda es tonta, me gusta la electronica como pasatiempo, por eso lo de la programacion, si hay mejores soluciones decirmelas

podrian subir nuevamente el diagrama, es que se ve borroso y no son legibles las letras 

muchas gracias de antemano


----------



## Sfinge (Nov 13, 2008)

Bueno pues mira son muchas tus dudas pero espero poder aclararlas todas:
- Si puedes cambiar el puerto paralelo por botones.
- Si es con menos o mas motores claro que puedes excluir o adherir una etapa del ckto que se ajuste a tus necesidades.
- puedes usar el ULN para motores bipolares, pero con otra configuracion, y tambien puedes usar el L293D o el puente H.
- El 555 genera los pulsos para variar la velocidad de los motores
- El ckto si sirve para tu Objetivo.
- El puerto paralelo es nada mas para hacer una etapa de sincronia o de control con la etapa digital, facilmente se puede sustituir por unos pulsadores o algo asi
- Tambien el puerto controla la direccion pero tambien se puede sustituir por un pulsador o swchit
- Me imagino que esos integrados son los flipflop D que controlan el multiplexado, y efectivamente es para habilitar cada motor

Vere si puedo subir el diagrama nuevamente... Saludos!


----------



## Moyano Jonathan (Nov 14, 2008)

Tendrìas la posibilidad de sacar fotos a la mecánica del brazo, desarmandola?  si en la facultad no te dan permiso no hay drama


----------



## DRACON (May 10, 2009)

hola Sfinge

estado leyendo tu plicacion y esta muy interesante y tu circuito bien diseñado, quisiera q me brindes una ayuda yo tengo q presentar un proyecto parecido al q tu has realizado un brazo robotico de 5 grados de  libertad (modelo articulado), yo tengo mas problemas con la parte mecanica he estado averiguando y no encuentro a alguien q me ayude en este tema viendo tu comentario me diste una esperanza de seguir con el proyecto.
la parte del software conozco un poco pero no mucho asi q voy a estudiar tu programa para ver si encuentro mis errores desde entonces gracias por tu publicacion y hojala q pueda contactarte para ver si me brindas una ayuda adios  gracias.


Saludos......


----------



## chipy_ca (Dic 22, 2009)

hola sfinge se ve muy bien tu proyecto estoy uy interesado en tu proyecto xq yo stoy realizando un proyecto similar estoy controlando 4 motores pap desde del puerto paralelo el esquema que estoy utilizando es el de todorobot.com http://www.todorobot.com.ar/proyectos/4stepper/circuito.pdf http://www.todorobot.com.ar/proyectos/paralelo/ipp01-circuit.pdf esos son lso circuitos los tengo conectados tal cual en el esquema y no se kual es el problema x favor diganme cual puede ser mi error :/ o sino esfinge m puedes mandar tu esquema para ver si cambio el diagrama de control y el programa lo quiero hacer en labview 

de antemano muchas gracias saludos y felices fiestas


----------



## oriel02022 (Feb 5, 2010)

Sfinge  la idea nuestra es usar tu circuito que esta muy bueno y simple a la vez 
en el control de una fresa CNC   casera  con  Match3  ,  necesitamos  saber si tu circuito maneja varios   motores al mismo tiempo en dos direcciones diferentes pues la
impresion  que  nos  llevamos  es  que los motores habilitados solo se
mueven  en  una  direccion,  
Sabes  si Match3 se puede configurar para manejar ese circuito, Match 3 normalmente usa , en el caso de tres motores  de forma minimalista 6 pines dos para cada motor 1 para el paso y otro para la direccion.


----------



## Sfinge (Feb 5, 2010)

Pues la verdad me he alejado un poco de la electronica debido a que estoy estudiando la parte basica de la ingenieria: matematica, fisica.... lo que si puedo decirte es que el circuito, su funcion, es de controlar motores paso a paso hasta un numero N de motores, es decir que puedes colocarle mas motores si quieres, ademas maneja dos direcciones o dos polaridades, a la izquierda o a la derecha de cada motor paso a paso.
Estuve leyendo un poquito a cerca de la fresadora y no se que tanta funcionalidad tenga el circuito para lo que se quiere hacer, hay que recordar que estos circuitos poseen mucho ruido, rebotes, etc y la presicion cambia en gran manera, mi recomendacion es que pudieran realizarlo con un microcontrolador, ya sea PIC o cualquier otro, habria mucha mas presicion y tendrian un ckto mas compacto ya que el programa hace todo lo que el monton de circuitos integrados hace en mi ckto.

Saludos, Bendiciones y espero que esto les salga bien


----------



## LORD KSPER (Feb 6, 2010)

Hola

Disculpa mi insistencia, podrias volver a subir la imagen del circiuto en cuestion, no alcanzo a leer los nombres de los componentes, y si no es mucho pedir el archivo del programa de donde lo originaste.

mil gracias de antemano


----------



## juandavidsw (Feb 15, 2010)

Si que se ve bueno..


----------



## ivan147007 (Mar 15, 2010)

buenazo !! mi oegunta e si los motores pap son independientes en su movimiento( giro) uno de otro.
gracias..............
saludos..........
..........
...


----------



## lewatoto (Jul 21, 2010)

Si no es mucho problema, me podrías decir como hiciste la pinza?
gracias.
saludos.


----------



## cristian76 (Jun 9, 2011)

lo maximo esta chevere el proye, te felicito esta bien detallado el unico problema es el visual basic


----------



## ivan147007 (Jun 14, 2011)

Lo intentare con java!!!


----------



## KR0NOZ (Sep 13, 2011)

oye me podrias ayudar a hacer uno desde cero porque me piden uno com motores a paso y que pueda cargar mas de 1/2 de kilo


----------

