Programación Específica > Robótica

 Creación De Un Robot

<< < (2/4) > >>

piyey:
gracias kimera por tu ayuda  ;)
ey, creo que se te olvidó algo  :P
je-je, la investigación  :lol:

sería interesante leerla y poder aplicarla... :smartass:

see you!!! :hola:
piyey.

bebito_tqm:
:angel:hola

sabes yo tambien estoy en un proyecto acerca de robots pero la creacion es de un brazo robotico nosotros ya tenemos la parte mecanica osea el brazo lo construimos abase de motores paso paso y de engranes esto es para darle el moviento que sera en una dimension de 180 grados pero tambien necesitamos de codigos para poder programarlo y asi lograr el moviento y el lenguaje en el que lo queremos hacer es Visual Basic el cula controlaremos atravez de puerto paralelo LPT1 ya que cuentra con los dispositivos de entrada  osea status port y el de salida data port , pero tambien posee el control port que se utiliza como entrada y salida .
la verdad es que nosotros lo presentaremos como proyecto final este jueves y lo unico que necesitamos son los codigos

podriamos ayudarnos mutuamente


gracias
besos

DrakerDG:
:comp: Tengo un brazo que realicé hace como 8 años (está viejito), lo controlé por el puerto paralelo por medio de un programa hecho en Visual Basic.   El movimiento de cada articulación es por medio de stepers, dos de ellos son de drives de discos de 3.5., otros 3 son de maquinas fotocopiadoras (uno de mayor potencia que los otros dos).  

Puedo ayudar, transmitiendo lo poco que sé, por medio de este foro.

Hace poco termine una maquina que elabora bobinas (inductores), esta es controlada por una aplicación en Visual Basic por medio del puerto paralelo.  Tiene la capacidad de controlar cuantas espiras (vueltas) se enrollan en el núcleo del inductor y se detiene en él numero de espiras programado.  La aplicación funciona en WinXP.

El internas del software es una librería que baje de Internet, pero no me acuerdo de la pagina, sin embargo tengo la librería y se las puedo enviar por correo.

Adelantando les muestro el código para declarar las distintas funciones de la librería.


--- Código: Text --- Option ExplicitPublic Const LPT1x = &H378 Public Declare Sub PortOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Byte)Public Declare Sub PortWordOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Integer)Public Declare Sub PortDWordOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Long)Public Declare Function PortIn Lib &#34;IO.DLL&#34; (ByVal Port As Integer) As BytePublic Declare Function PortDWordIn Lib &#34;IO.DLL&#34; (ByVal Port As Integer) As LongPublic Declare Sub SetPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)Public Declare Sub ClrPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)Public Declare Sub NotPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)Public Declare Function GetPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte) As BooleanPublic Declare Function RightPortShift Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Val As Boolean) As BooleanPublic Declare Function LeftPortShift Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Val As Boolean) As BooleanPublic Declare Function IsDriverInstalled Lib &#34;IO.DLL&#34; () As Boolean  '********************************************************'*********    Function Descriptions   *******************'******************************************************** 'PortOut - Outputs a byte to the specified port.   'PortWordOut - Outputs a word (16-bits) to the specified port.   'PortDWordOut - Outputs a double word (32-bits) to the specified port.   'PortIn - Reads a byte from the specified port.   'PortWordIn - Reads a word (16-bits) from the specified port.   'PortDWordIn - Reads a double word (32-bits) from the specified port.   'SetPortBit - Sets the bit of the specified port.   'ClrPortBit - Clears the bit of the specified port.   'NotPortBit - Nots (inverts) the bit of the specified port.   'GetPortBit - Returns the state of the specified bit.   'RightPortShift - Shifts the specified port to the right. The LSB is'                 returned, and the value passed becomes the MSB.   'LeftPortShift - Shifts the specified port to the left. The MSB is'                returned, and the value passed becomes the LSB.   'IsDriverInstalled - Returns non-zero if io.dll is installed and'                    functioning. The primary purpose of this function'                    is to ensure that the kernel mode driver for'                    NT/2000/XP has been installed and is accessible.     
Y unas funciones personalizadas para el caso.


--- Código: Text --- Public Function OutPort1(ByVal Num As Byte) As Byte    PortOut LPT1x, Num    OutPort1 = NumEnd Function Public Function InPort2() As ByteDim XB As Byte    XB = PortIn(LPT1x + 1)    InPort2 = XBEnd Function Public Function OutPort3(ByVal Num As Byte) As Byte    PortOut LPT1x + 2, Num    OutPort3 = NumEnd Function Public Function InPort3() As ByteDim XB As Byte    XB = PortIn(LPT1x + 2)    InPort3 = XBEnd Function   
El principio mecánico del brazo robotico es él sube y baja.  Específicamente cada articulación como el codo y el hombro, que es donde más se necesita potencia mecánica, se pueden utilizar contra pesos, de manera que si colocamos un eje la articulación esta se mantiene horizontal, es decir ninguna de sus partes flotantes no ejerce ningún torque hacia el eje, solamente su peso, por lo que es fácil de girar, es decir se requiere poca fuerza.  Con un motor pequeño se puede generar movimiento, el cual hay que incluir cuando se coloque contrapeso, de hecho este puede funcionar como contrapeso.  Bueno, son ideas que me funcionaron muy bien, revisen la foto adjunto ese es mi brazo mecánico.

 :suerte:

DrakerDG:
:comp: Este es el esquema básico del brazo.  Por cierto también tengo el circuito electrónico que le da potencia a los motores (cinco motores en total), el principio del funcionamiento (frecuencia de estados), y la forma de controlarlo a través del programa y por un joystick o joypad (cualquiera, USB o DB15).  El sistema está diseñado para realizar una rutina, grabarla y luego reproducirla cuantas veces sea.

A manera de historia, les cuento que al principio me costó mucho que reprodujera secuencias con exactitud, pues utilicé midiendo el tiempo en que el brazo permanecía en determinado estado (Ej.: estado de giro de muñeca, estado de giro de codo, estado de giro de hombro, etc., y todas las combinaciones posibles).  Pero, como Windows es un sistema multitarea, en ocasiones si funcionaba y en otras no, por ejemplo cuando iniciaba otra aplicación y esta requería de mas atención del sistema, el programa fallaba en los lapsos de tiempo, por lo que la reproducción colapsaba.

La solución, fue simple pero 100% efectiva.  El principio radica en el funcionamiento de los motores paso a paso (stepers), esto realizan un giro de determinado ángulo por cada cambio de estado en sus voltajes de entrada, es decir giran así como cambios que reciben, por lo que relacioné la cantidad de grados de giro con la cantidad de cambios necesarios, y listo me dedique a contar cambios realizados en determinado estado.  Y si la compu se retardaba en responder, el brazo sencillamente se detiene (como hacen las impresoras) y continuaban con su trabajo cuando la PC ya esta de nuevo lista.

Espero que todo este palabrerío les ayude en algo :suerte:  :beer:

DrakerDG:
:comp: Otra fotografía  :wacko:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa