Vous êtes sur la page 1sur 78

ROBOT FRESADOR

INDICE

1. INTRODUCCION

2. OBJETIVOS

3. JUSTIFICACION

4. MARCO TEORICO

4.1. PARTE MECNICA.

4.1.1. PARMETROS DE CORTE DEL FRESADO.

4.1.1.1. METODO DE LA PRESION DE CORTE PARA DETERMINACION DE FUERZAS


DE CORTE.

4.1.2. DISEO DE TORNILLOS.

4.1.2.1. MECNICA DE LOS TORNILLOS DE FUERZA O DE POTENCIA.

4.1.2.2. TORNILLO DE POTENCIA

4.2. PARTE ELECTRNICA

4.2.1. MOTORES PASO A PASO

4.2.2. TRANSISTORES.

4.2.3. FLIP-FLOPS.

4.2.4. COMPUERTAS DIGITALES.(X-OR)

4.2.5. OPTOCOUPLERS

4.3. PARTE DE PROGRAMACIN.

4.3.1. PUERTO PARALELO.

5. INGENIERIA DEL PROYECTO

5.1 PARTE MECANICA


5.1. 1 DISEO PRELIMINAR DEL ROBOT

5.1.2. DISEO FINAL DEL ROBOT Y PLANOS

5.1.3. CALCULOS

5.2. PARTE ELECTRONICA

5.2.1. DISEO DEL CIRCUITO ELECTRONICO

5.3 .PARTE DE PROGRAMACION.

5.3.1. DISEO DEL PROGRAMA.

6. CONCLUSIONES.

7. BIBLIOGRAFIA

8. ANEXOS

ROBOT FRESADOR

1. INTRODUCCION.

Actualmente el tallado en madera, es realizado mediante instrumentos cortantes, brocas y


abrasivos. Dicho tallado conlleva un tiempo de mecanizado para obtener la pieza final
que depende de la complejidad de la figura y de la habilidad de la persona que va a
realizarlo.

Hoy en da es posible enfrentar problemas a partir de la tecnologa, automatizando


procesos complejos o que llevan demasiado tiempo realizarlos.
El proyecto del robot fresa puede desarrollar movimientos adecuados a las necesidades
de exactitud y respetabilidad en fresado de figuras permitindonos lograr acabados de
mayor precisin.

2. OBJETIVOS.

Objetivo general

Disear e implementar un robot, capaz de realizar movimientos preestablecidos para el


tallado en madera.

Objetivos especficos

Definir Caractersticas generales.


Disear una maquina capaz de cumplir con nuestras expectativas.
Calcular las fuerzas de corte y seleccionar los motores ms adecuados.
Disear el circuito electrnico que controlara la fresadora.
Desarrollar el software que controlara el circuito electrnico.

3. JUSTIFICACION

La necesidad principal para que se realice este diseo, se debe al tiempo de fabricacin
que implican las geometras complejas, este tiempo, dependen mucho de la habilidad de
la persona que va a realizar la pieza y de la dificultad en el diseo de la misma. Con la
fresadora Router las formas ms difciles podrn ser realizadas en el tiempo ms ptimo,
y con una precisin alta.

En cuanto a la factibilidad, el proyecto es totalmente realizable, ya que se cuenta en el


medio con toda la maquinaria, software y dems implementos que requiere la fresa, para
que esta pueda ser fabricada; Adems que la realizacin de la misma, no implica un
costo muy elevado.
4. MARCO TEORICO.

4.1. PARTE MECNICA.

4.1.1. PARMETROS DE CORTE DEL FRESADO.

4.1.1.1. METODO DE LA PRESION DE CORTE PARA DETERMINACION DE FUERZAS


DE CORTE.
4.1.2.2. TORNILLO DE POTENCIA
4.2 PARTE ELECTRNICA

4.2.1 Motores paso a paso

Introduccin

Hoy en da es casi imposible pensar en aplicaciones de control o de robtica en las que


no estn presentes los motores paso a paso. Donde se requieren movimientos precisos,
hay un motor paso a paso. Pero qu diferencia hay entre un motor paso a paso a un
motor convencional, ya sea de continua o de alterna? En siguiente escrito se explica el
funcionamiento de estos dispositivos y cmo se realiza su control por medio de una
computadora, utilizando una interfaz para puerto paralelo.

Controlador de Motor Paso a Paso sin necesidad de Computadora


Los motores paso a. paso son ideales para la construccin de mecanismos en donde se
requieren movimientos muy precisos. La caracterstica principal de estos motores es el
hecho de poder moverlos un paso a la vez, por cada pulso que se le aplique. Esto paso
puede variar desde 90 hasta pequeos movimientos de tan slo 1.8, es decir, que se
necesitarn 4 pasos en el primer caso (90) y 200 para el segundo caso (1.8), para
completar un giro completo de 360. Estos motores poseen la habilidad de poder quedar
enclavados en una posicin o bien totalmente libres. Si una o ms de sus bobinas est
energizada, el motor estar enclavado en la posicin correspondiente y por el contrario
quedar completamente libre si no circula corriente por ninguna de sus bobinas. En este
caso trataremos solamente los motores P-P del tipo de imn permanente, ya que stos
son los ms usados en robtica.

Principio de Funcionamiento

Bsicamente, estos motores estn constituidos normalmente por un rotor sobre el que van
aplicados distintos imanes permanentes y por un cierto nmero de bobinas excitadoras
bobinadas en su estator. Las bobinas son parte del estator y el rotor es un imn
permanente. Toda la conmutacin (o excitacin de las bobinas) deber ser externamente
manejada por un controlador.

En la figura 1 se puede apreciar la imagen de un rotor tpico y en la figura 2 el aspecto de


un estator de 4 bobinas. Existen dos tipos de motores paso a paso de imn permanente:
Bipolar:

Estos tienen generalmente, cuatro cables de salida (ver figura 3). Necesitan ciertos trucos
para ser controlados, debido a que requieren del cambio de direccin del flujo de corriente
a travs de las bobinas en la secuencia apropiada para realizar un movimiento. En la
figura 5A podemos apreciar un ejemplo de control de estos motores mediante el uso de un
puente en H (H-Bridge).
Como se aprecia, ser necesario un H-Bridge por cada bobina del motor, es decir que
para controlar un motor paso a paso de 4 cables (dos bobinas), necesitaremos usar dos
H-Bridges iguales al de la figura 5. El circuito de la figura 5 es a modo ilustrativo y no
corresponde con exactitud a un H-Bridge. En general, es recomendable el uo de H-Bridge
integrados, como son los casos del 1293 (ver figura 5B).

Unipolar:

Estos motores suelen tener 6 o 5 cables de salida, dependiendo de su conexionado


interno (ver figura 4). Este tipo se caracteriza por ser ms simple de controlar. En la figura
6 podemos apreciar un ejemplo de conexionado para controlar un motor paso a paso
unipolar mediante el uso de un ULN2803, el cual es una array de 8 transistores tipo
Oarlington capaces de manejar cargas de hasta 500mA. Las entradas de activacin
(Activa A, 8 , C y D) pueden ser directamente activadas por un microcontrolador.
Secuencias para Manejar Motores Paso a Paso Bipolares:

Como se dijo anteriormente, estos motores necesitan la inversin de la corriente que


circula en sus bobinas en una secuencia determinada. Cada inversin de la polaridad
provoca el movimiento del eje en un paso, cuyo sentido de giro est determinado por la
secuencia seguida.

En la figura 7 se puede ver la tabla con la secuencia necesaria para controlar motores
paso a paso del tipo Bipolares.

Secuencias para Manejar Motores Paso a Paso Unipolares

Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a
continuacin. Todas las secuencias comienzan nuevamente por el paso 1 una vez
alcanzado el paso final (4 u 8). Para revertir el sentido de giro, simplemente se de ejecutar
las secuencias en modo inverso.

Secuencia Normal: Esta es la secuencia ms usada y la que generalmente recomienda


el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que
siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de
retencin (figura 8).
Secuencia del tino wave drive: En esta secuencia se activa slo una bobina a la vez. En
algunos motores esto brinda un funcionamiento ms suave. La contrapartida es que al
estar slo una bobina activada, el torque de paso y retencin es menor (figura 9).

Secuencia del tipo medio paso; En esta secuencia se activan las bobinas de tal forma de
brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2
bobinas y luego slo 1 y as sucesivamente.

Como vemos en la tabla, la secuencia completa consta de 8 movimientos en lugar de 4


(figura 10).

Como comentario final, cabe destacar que debido a que los motores paso a paso son
dispositivos mecnicos y como tal deben vencer ciertas inercias, el tiempo de duracin y
la frecuencia de los pulsos aplicados es un punto muy importante a tener en cuenta. En tal
sentido el motor debe alcanzar el paso antes que la prxima secuencia de pulsos
comience. Si la frecuencia de pulsos es muy elevada, el motor puede reaccionar en
alguna de las siguientes formas:

Puede que no realice ningn movimiento en absoluto.


Puede comenzar a vibrar pero sin llegar a girar
Puede girar errticamente.
O puede llegar a girar en sentido opuesto.

Para obtener un arranque suave y preciso, es recomendable comenzar con una


frecuencia de pulso baja y gradualmente ir aumentndola hasta la velocidad deseada sin
superar la mxima tolerada. El giro en reversa debera tambin ser realizado previamente
bajando la velocidad de giro y luego cambiar el sentido de rotacin.
Cmo Identificar los Terminales

Cuando se trabaja con motores P-P usados o bien nuevos, pero de los cuales no tenemos
hojas de datos. Es posible averiguar la distribucin de los cables a los bobinados y el
cable comn en un motor de paso unipolar de 5 o 6 cables siguiendo las instrucciones
que se detallan a continuacin:

1. Aislando el cable(s) comn que va a la fuente de alimentacin:

Como se aprecia en las figuras anteriores, en el caso de motores con 6 cables, stos
poseen dos cables comunes, pero generalmente poseen el mismo color, por lo que es
mejor unirlos antes de comenzar las pruebas. Usando un multmetro para verificar la
resistencia entre pares de cables, el cable comn ser el nico que tenga la mitad del
valor de la resistencia entre ella y el resto de los cables.

Esto es debido a que el cable comn tiene una bobina entre ella y cualquier otro cable,
mientras que cada uno de los otros cables .tienen dos bobinas entre ellos. De ah la mitad
de la resistencia medida cable comn.

Recordar
Un motor de paso con 5 cables es casi seguro de 4 fases y unipolar.
Un motor de paso
con 6 cables tambin puede ser de 4 fases y unipolar, pero con 2 cables comunes
para
alimentacin, pueden ser del mismo color.

Un motor de pasos con solo 4 cables es comnmente bipolar.

4.2.2.-Transistores.-

El transistor es un dispositivo electrnico semiconductor que cumple funciones de


amplificador, oscilador, conmutador o rectificador. El trmino "transistor" es la contraccin
en ingls de transfer resistor ("resistencia de transferencia"). Actualmente se los
encuentra prcticamente en todos los aparatos domsticos de uso diario: radios,
televisores, grabadoras, reproductores de audio y video, hornos de microondas,
lavadoras, automviles, equipos de refrigeracin, alarmas, relojes de cuarzo,
computadoras, calculadoras, impresoras, lmparas fluorescentes, equipos de rayos X,
tomgrafos, ecgrafos, reproductores mp3, telfonos mviles, etc.

Existen dos tipos transistores: el NPN y el PNP, y la direccin del flujo de la corriente en
cada caso, lo indica la flecha que se ve en el grfico de cada tipo de transistor.
El transistor es un dispositivo de 3 patillas con los siguientes nombres: base (B), colector
(C) y emisor (E), coincidiendo siempre, el emisor, con la patilla que tiene la flecha en el
grfico de transistor.

El transistor bipolar es un amplificador de corriente, esto quiere decir que si le


introducimos una cantidad de corriente por una de sus patillas (base), el entregar por
otra (emisor) , una cantidad mayor a sta, en un factor que se llama amplificacin.

Este factor se llama (beta) y es un dato propio de cada transistor.

Segn la frmula anterior las corrientes no dependen del voltaje que alimenta el circuito
(Vcc), pero en la realidad si lo hace y la corriente Ib cambia ligeramente cuando se
cambia Vcc. Ver figura.

En el segundo grfico las corrientes de base (Ib) son ejemplos para poder entender que a
ms corriente la curva es ms alta.

4.2.3 Flip flops.


Como puede verse en el smbolo del flip-flop J-K, este posee dos salidas

complementarias Q y Q al igual que el flip-flop R-S.

Las caractersticas del flip-flop J-K son las siguientes:

(1) Cuando J=1 y K=1, al ir la entrada de la terminal de reloj C (clock) de 1 a 0 nada


ocurre y el flip-flop J-K retiene el estado que posea anteriormente.

(2) Cuando J=1 y K=0, al ir la entrada C de 1 a0 el flip-flop J-K tomar el estado Q=1
independientemente del estado en el que se encontraba anteriormente.

(3) Cuando J=0 y K=1, al ir la entrada C de 1 a 0 el flip-flop J-K tomar el estado Q=0
independientemente del estado en el que se encontraba anteriormente.

(4) Cuando J=0 y K=0, al ir la entrada C de 1 a 0 el flip-flop J-K tomar un estado opuesto
a aqul en el cual se encontraba anteriormente. Esto quiere decir que si antes de la
transicin en la terminal C de 1 a 0 el flip-flop J-K se encontraba en el estado Q=1,
entonces tomar el estado Q=0 despus de la transicin. Asimismo, si se encontraba en
el estado Q=0 antes de la transicin, entonces tomar el estado Q=1 despus de la
transicin.

Obsrvese que la transicin de 0 a 1 en la terminal C no produce efecto alguno en la


salida Q. nicamente la transicin de 1 a 0 es la que puede producir efecto alguno.
Puesto que es una cada de 1 a 0 o una transicin negativa la que produce esta accin,
este flip-flop J-K es reconocido como uno accionado por una seal de reloj negativa en la
terminal de "reloj" (clock).

Existen tambin en el mercado flip-flops J-K en los cuales la transicin que produce la
accin en la terminal de salida Q es una transicin positiva de 0 a 1 y no la transicin
negativa de 1 a 0 (precaucin: aqu no hay voltajes negativos involucrados). Estos flip-
flops J-K son conocidos en el mercado como flip-flops accionados por una seal de reloj
positiva.
Obsrvese cuidadosamente que es nicamente una transicin en la terminal C la que
puede producir accin alguna a la salida del flip-flop J-K. Si la entrada en la terminal C
permanece constante, cualesquier variacin en las terminales J yK no podr producir
efecto alguno en la salida Q del flip-flop J-K.

En forma similar al flip-flop R-S, el flip-flop J-K tambin posee dos salidas
complementarias, Q y Q, con la diferencia de que el filp flop j k no posee estados no
definidos.

El flip-flop J-K, al igual que todos los bloques fundamentales dentro de los circuitos
lgicos, se construye utilizando funciones lgicas bsicas.

4.2.4 Compuertas lgicas X- OR

En la electrnica digital hay unas compuertas que no son comunes. Una de ellas es la
compuerta XOR compuerta O exclusiva compuerta O excluyente.

El siguiente diagrama muestra e smbolo de una compuerta XOR (O exclusiva) de 2


entradas:

Comprender el funcionamiento de esta compuerta digital es muy importante para despus


poder implementar lo que se llama un comparador digital.

La figura de la derecha muestra la tabla de verdad de una compuerta XOR de 2


entradas.
Y se representa con la siguiente funcin booleana

X = A.B + A.B

A diferencia de la compuerta OR, la compuerta XOR tiene una salida igual a "0" cuando
sus entradas son iguales a 1.

Si se comparan las tablas de verdad de la compuerta OR y la compuerta XOR se


observa que la compuerta XOR tendr un uno ("1") en su salida cuando la suma de los
unos "1" en las entradas sea igual a un nmero impar.

La ecuacin se puede escribir de dos maneras:

X = A.B + A.B

La siguiente figura muestra la tabla de verdad de una compuerta XOR de 3 entradas

De la misma manera que el caso anterior se puede ver que se cumple que X = 1 slo
cuando la suma de las entradas en "1" sea impar

Circuito equivalente.-

Tambin se puede implementar la compuerta XOR con una combinacin de otras


compuertas ms comunes.

En el siguiente diagrama se muestra una compuerta


XOR de dos entradas implementada con
compuertas bsicas: la compuerta AND, la compuerta
OR y la compuerta NOT
4.2.5. Optoacopladores.-

Un optoacoplador, tambin llamado optoaislador o aislador acoplado pticamente,


es un dispositivo de emisin y recepcin que funciona como un interruptor excitado
mediante la luz emitida por un diodo LED que satura un componente optoelectrnico,
normalmente en forma de fototransistor o fototriac. De este modo se combinan en un solo
dispositivo semiconductor, un fotoemisor y un fotorreceptor cuya conexin entre ambos es
ptica. Estos elementos se encuentran dentro de un encapsulado que por lo general es
del tipo DIP. Se suelen utilizar para aislar electricamente a dispositivos muy sensibles.

La figura de la derecha muestra un optoacoplador 4N35 formado por un LED y un


fototransistor. La tensin de la fuente de la izquierda y la resistencia en serie establecen
una corriente en el LED emisor cuando se cierra el interruptor S1. Si dicha corriente
proporciona un nivel de luz adecuado, al incidir sobre el fototransistor lo saturar,
generando una corriente en R2. De este modo la tensin de salida ser igual a cero con
S1 cerrado y a V2 con S1 abierto.

Si la tensin de entrada vara, la cantidad de luz tambin lo har, lo que significa que la
tensin de salida cambia de acuerdo con la tensin de entrada. De este modo el
dispositivo puede acoplar una seal de entrada con el circuito de salida, aunque hay que
tener en cuenta que las curvas tensin/luz del LED no son lineales, por lo que la seal
puede distorsionarse. Se venden optoacopladores especiales para este propsito,
diseados de forma que tengan un rango en el que la seal de salida sea casi idntica a
la de entrada.

La ventaja fundamental de un optoacoplador es el aislamiento elctrico entre los circuitos


de entrada y salida. Mediante el optoacoplador, el nico contacto entre ambos circuitos es
un haz de luz. Esto se traduce en una resistencia de aislamiento entre los dos circuitos del
orden de miles de M. Estos aislamientos son tiles en aplicaciones de alta tensin en las
que los potenciales de los dos circuitos pueden diferir en varios miles de voltios.
4.3. PARTE DE PROGRAMACIN.

4.3.1. PUERTO PARALELO.

Comenzando con el Puerto Paralelo Uso


Descripcin:
Puerto y tiene como Registro Base 378H (As q por ahora ser tomado como un
Standard). Para poder acceder al Puerto, se usara fcilmente en C o en Asm Inxx(Port) y
Outxx(Port,Dato). Pero actualmente los sistemas operativos son mezquinos as q para
poder acceder a ellos debemos hacerlo mediante Drivers.
Pero para no preocuparnos por eso. Se va a usar la DLL InpOut32.Dll que
mediante 2 rutinas Inp32 y Out32, Resuelve el problema.

Terminologa:
El uso de ciertos trminos deben ser considerados.
Bit 1 : Significa que la salida de esta puerta es 5V.
Bit 0 : Significa que la salida es 0v.
Bit X : Significa que no importa el valor de este bit, puede ser 1 o 0
Bit ~X : Significa que este dato es negado.
Registro: Arreglos de 8 Bits, que sirven para la configuracin del Puerto Paralelo

Un Poco de Teora.

Algo de Logica: And, Or, Xor:


Para comenzar, Estas operaciones son muy importantes, ya que nos permiten el
manejo del Puerto, cambiar Bits, invertirlos, enmascaralos. Como se vera a
continuacin:
And: Dato = Op1 And Op2 = Op1 & Op2
En pocas palabras, si Op2=1, no importa como sea Op1=X, la respuesta seria
Dato=X ; Ahora si Op2=0 el dato=0
Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y
queremos quedarnos con el dato D7, D5, y D4. y que el resto sea 0. Lo que
tendramos que hacer es:
Result=Byte And 10110000b;// Result = Byte & B0;
Y nos quedaria:
Byte = D7 D6 D5 D4 D3 D2 D1 D0 Operador
1 0 1 1 0 0 0 0 & = And
Result = D7 0 D5 D4 0 0 0 0 //Muy interesante
Es decir que nos sirve para colocar los bits que deseamos a 0
Indicindose en la Programacin y simulacin con el Puerto Paralelo
Or: Dato = Op1 Or Op2 = Op1 | Op2
En pocas palabras, si Op2=1 , no importa como sea Op1=X, la respuesta seria
Dato=1 ; Ahora si Op2=0 el dato=X
Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y
queremos que D7,D6, D4,D2 sean 1 y el resto quede igual tendramos que hacer:
Result=Byte or 11010100b;// Result= Byte | 0xD4
Y nos quedara:
Byte = D7 D6 D5 D4 D3 D2 D1 D0 Operador
1 1 0 1 0 1 0 0 | = or
Result = 1 1 D5 1 D3 1 D1 D0 //Muy interesante
Es decir, que mediante una Or podemos obligar a que la respuesta sea 1.
Xor: Dato = Op1 Xor Op2 = Op1 ^ Op2
En pocas palabras, si Op2=1 , no importa como sea Op1=X, la respuesta seria
Dato=~X ; Ahora si Op2=0 el dato=X. Es decir que invierte el Bit donde
encuentra Op=1
Es decir que si tenemos un Byte=(D7) (D6) (D5) (D4) (D3) (D2) (D1) (D0). Y
queremos invertir D7, D5, y D4. lo que tendramos que hacer es:
Result = Byte Xor 10110000b;// Result = Byte ^ B0
Y nos quedaria:
Byte = D7 D6 D5 D4 D3 D2 D1 D0 Operador
1 0 1 1 0 0 0 0 ^ =Xor
Result = ~D7 D6 ~D5 ~D4 D3 D2 D1 D0
Es decir, nos permite invertir el Bit donde esta con 1
Bueno, Espero que este claro lo de las operaciones lgicas. Si no revisen su libro de
principios de sistemas digitales.

Como funciona el Puerto Paralelo:

La direccin de la mayora de Pcs, esta en 378h. Aunque puede variar.


Descripcin de Registros:

Registro de Datos. (Su direccin es 378h = Direccin Base).


D7 D6 D5 D4 D3 D2 D1 D0
Este registro es de 8 bits. Es por aqu q enviamos la informacin hacia el exterior.
Ejm Activamos un Led, un Rel, Motores DC, Motores a pasos.
Una Alarma. Lo q nos imaginemos. O tambin recibimos datos. Ejm: Seal de un
ADC para digitalizar una seal externa.
Por defecto, solo funciona como Salidas, pero es posible Hacerla funcionar como
entrada. Para esto hay q modificar en Bit 5 del Registro de Control.
Esto se explica mas abajo con mucho mas cuidado
Dependiendo del lenguaje de programacin q uses, la sintaxis es :
Outxxx (378h,Dato).

Registro de Estado (Su direccin es 379h) (Direccin Base +1).


~S7 S6 S5 S4 S3 X X X
Este registro es de solo Entradas, pero solo es de 5 Bits.
Donde:
~S7 :Significa que este dato esta invertido.
X :Significa que su valor es indeterminado.
Indicindose en la Programacin y simulacin con el Puerto Paralelo
Para obtener el Valor Real de Este registro, tenemos que enmascarlo, Haciendo un
Xor con 128 o su equivalente 80h 0x80 para C o &H80 en Basic o en binario
10000000b , donde se observa q el bit a cambiar debe ser el 8vo. Y luego un And
por 248=0xF80=11111000b (En este ultimo se observa que los valores con los que
te debes quedar son los 5 ultimos).
Este Registro lo podemos usar por ejemplo para ver la entrada de sensores.
Donde para obtener el valor Real su Sintaxis seria:
Estado = Inxxx(379H) Xor 0x80 And 0xF8.
En C: Estado = (Inp32(0x379) ^ 0x80) & 0xF8

Registro de Control. (37Ah) (Direccin Base +2)


Este registro, es bidireccional. Sus datos son
X X X X ~C3 C2 C1 C0
Ahora para invertir las seales C3, C1 y C0
Tenemos que hacerle un xor con 00001011b y para quedarnos con el dato valido, le
hacemos un And con 0xF=00001111b
Ejm:
control = (Outxx(37AH) Xor 1011b ) And 0xF.
En C: control = (Out32(37AH) ^0x0B ) & 0xF.
Este Registro es muy importante, ya nos permite colocar al puerto paralelo en
modo Bidireccional. Es decir se puede tambin recibir datos por el Registro de
Datos.
La Sintaxis para hacerlo Bidireccional es:
Int Caso=1 o 0 ;Segn quiera 1=Input, 0=Output
control= Outxx(0x37A,((caso <<5) or (Inxxx(0x37A) And 11011111)
En C: control =Out32(0x37A,((caso<<5) | (Inp32(0x37A) & 0xDF
Con caso<<5, significa rotamos 5 veces a la Izq a caso .
Indicindose en la Programacin y simulacin con el Puerto Paralelo

Ejemplo:
Para comenzar, he hecho un pequeo programa. En visual Basic.
Bueno, Sabemos que Visual Basic no permite manejar el Puerto Paralelo, pero
nuestra DLL S, ES por eso que lo adjuntaremos, mediante un archivo obj:
InpOut32.bas
'Declaramos las Variables de la Dll
'Aqu declaramos como funcin a Inp32
'Ya q lo que hace es devolvernos el valor q indica la direccin que se le Asigne.
Public Declare Function Leer Lib "Inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Byte
'Aqu declaramos como una Subrutina a Out32
'Ya que no devuelve ningun valor.
Public Declare Sub Escribir Lib "Inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Byte)
'Aqu estoy declarando esta Api de Windows, para usarlo en los retardos.
Public Declare Sub Sleep Lib "Kernel32.dll" (ByVal PortAddress As Integer)
Nuestro Programita tiene la Forma:
Las caracteristicas basicas de los controles son:
Control Nombre Caption
Form FrmLeds Prendiendo Leds
Button CmdD0 D&0
Button CmdD1 D&1
Button CmdD2 D&2
Button CmdD3 D&3
Button CmdD4 D&4
Button CmdD5 D&5
Button CmdD6 D&6
Button CmdD7 D&7
Button CmdEfe1 &Derecha
Button CmdEfe1 &Izquierda
Button CmdAbout &About
Donde su Cdigo Correspondiente es:
Form1.frm
'Declaramos las variables generales
Dim Dato As Byte 'Dato es usado por todos las Subrutinas
Private Sub CmdAbout_Click()
'Muestro Mensaje en Pantalla: el vbCrLf es equivalente a ENTER
MsgBox "Prendiendo Leds " + vbCrLf + vbCrLf + " por:" + vbCrLf + " Yoel Ocmin " +
vbCrLf + vbCrLf + "yoelocmin@hotmail.com" + vbCrLf + "http://proyectosfie.tk",
vbQuestion, "Acerca..."
End Sub
Private Sub CmdD0_Click()
Dato = Leer(&H378) Xor &H1 'Cambio el Bit 1=Lsb=D0
Envia
End Sub
Private Sub CmdD1_Click()
Dato = Leer(&H378) Xor &H2 'Cambio el Bit 2
Envia
End Sub
Private Sub CmdD2_Click()
Dato = Leer(&H378) Xor &H4 'Cambio el Bit 3
Envia
End Sub
Private Sub CmdD3_Click()
Dato = Leer(&H378) Xor &H8 'Cambio el Bit 4
Envia
End Sub
Private Sub CmdD4_Click()
Dato = Leer(&H378) Xor &H10 'Cambio el Bit 5
Envia
End Sub
Private Sub CmdD5_Click()
Dato = Leer(&H378) Xor &H20 'Cambio el Bit 6
Envia
End Sub
Private Sub CmdD6_Click()
Dato = Leer(&H378) Xor &H40 'Cambio el Bit 7
Envia
End Sub
Private Sub CmdD7_Click()
Dato = Leer(&H378) Xor &H80 'Cambio el Bit 8 =MsB=D7
Envia
End Sub
Private Sub CmdEfe1_Click()
'Efecto '1':
'Rotamos un Bit del LSB -> MSB
'VB, no tiene la funcion rotar Bit, haci que lo q
'Colocar en Dato=00000001 y multiplicarlo por 2
' Dato=00000010 ->Roto un Bit
'Si lo multiplico nuevamente.
' Dato=00000100 ->Roto un Bit
'Y asi sucesivamente hasta q llega al Octavo Bit.
Dato = 1
While Dato < &H80
Envia
Sleep 250 'Ocaciono un retardo de 250 milisegundos
Dato = Dato * 2
Wend
Envia ' como no se envio el ultimo bit se lo envia recien
Sleep 250 '
Dato = 0 'Reseteamos el Puerto.
Envia
Sleep 250
End Sub
Private Sub CmdEfe2_Click()
'Efecto '2':
'Rotamos un Bit del MSB -> LSB
'VB, no tiene la funcion rotar Bit, haci que lo q
'Colocar en Dato=10000000 y Dividimos por 2
' Dato=01000000 ->Roto un Bit
'Si lo multiplico nuevamente.
' Dato=00100000 ->Roto un Bit
'Y asi sucesivamente hasta q llega al Primer Bit.
Dato = &H80
While Dato > &H1
Envia
Sleep 250
Dato = Dato / 2
Wend
Envia
Dato = 0
Sleep 250
Envia
Sleep 250
End Sub
Private Sub Form_Load()
'Al iniciar a cargar el Form, reiniciamos el Puerto
Escribir &H378, 0
End Sub
Private Sub Envia()
'Solo envia el Dato al Pueto Paralelo
Escribir &H378, Dato
End Sub
Bueno Eso es Todo con Respecto a Visual Basic.

5. INGENIERIA DEL PROYECTO

5.1 PARTE MECANICA

5.1. 1 DISEO PRELIMINAR DEL ROBOT

Inicialmente se diseo el modelo:


5.1.2. DISEO FINAL DEL ROBOT Y PLANOS

El resultado final fue:


PLANOS:

5.1.3. CALCULOS

CALCULO DEL MOMENTO TORSOR

Fc = ks * Ac Ac = e*b Ks = 37 N/mm2

Ac=0.5 * 1 = 0.5 mm2

Fc = 37 [N/mm2] * 0.5 [mm2] = 18.85 [N]


Fr = 0.4 * Fc = 0.4 * 18.25 [N] = 7.3 [N]

Fr Fr
F

+
F

Fr X
Fx=Fr+ sen ( 60 )Fc+cos ( 60 )Frcos ( 60 )Fr + sen ( 60 )Fc

( 60 )18.25= 38.9[ N ]
Fx=Fr +2 sen ( 60 )Fc=7.3+2sen

Fy=Fc+ sen ( 60 )Frcos ( 60 )Fc +cos ( 60 )Fc+ sen ( 60 )Fr

( 60 )7.3=5.6[ N ]
Fy=Fc +2 sen ( 60 )Fr=18.25+ 2sen

Mt
F=
dm
2

+
F=Fa( )

dm
Mt=F
2

+
Mt=Fa
( )

MT = 215,49 [N*mm]
5.2. PARTE ELECTRONICA

5.2.1. DISEO DEL CIRCUITO ELECTRONICO

Inicialmente se parti del diseo sacado de internet mostrado a continuacin:

Controladores para los motores paso a paso.-

5.3 .PARTE DE PROGRAMACION.

5.3.1. DISEO DEL PROGRAMA.


Public Class Form1

Dim fin1 As Integer

Dim fin2 As Integer

Dim iniciartoma As Integer

Function llevar_posicion_inicial()

VAR = 1

num = 0

'M_CONT = 0

If fc1 = 1 Then

giro1 = 0

reset_cont()

ax = 10000

'Timer1.Interval = 25

reloj1_intervalo = 1

'Timer1.Enabled = True

reloj1_activar = "verdad"

End If
If fc2 = 1 Then

giro2 = 0

reset_cont()

by = 10000

'Timer2.Interval = 25

reloj2_intervalo = 1

'Timer2.Enabled = True

reloj2_activar = "verdad"

End If

End Function

Function ABC()

If FIN3 = 0 And FIN4 = 0 Then

If num <= Tamao Then

If cambio = 1 Then

numero = 0

cambio = 0

End If

If letra = "por_puntos" Then

Else

letra = Mid(frase, 1 + num, 1)

If letra = " " Then

letra = "ESPACIO"

End If

End If

Select Case letra

Case "A"

codigo_A()
Case "B"

codigo_B()

Case "C"

codigo_C()

Case "D"

codigo_D()

Case "E"

codigo_E()

Case "F"

codigo_F()

Case "G"

codigo_G()

Case "H"

codigo_H()

Case "I"

codigo_I()

Case "J"

codigo_J()

Case "K"

codigo_K()

Case "L"

codigo_L()

Case "M"

codigo_M()

Case "N"

codigo_N()

Case ""
codigo_()

Case "O"

codigo_O()

Case "P"

codigo_P()

Case "Q"

codigo_Q()

Case "R"

codigo_R()

Case "S"

codigo_S()

Case "T"

codigo_T()

Case "U"

codigo_U()

Case "V"

codigo_V()

Case "W"

codigo_W()

Case "X"

codigo_X()

Case "Y"

codigo_Y()

Case "Z"

codigo_Z()

Case "ESPACIO"

codigo__()
Case "por_puntos"

codigo__por_puntos()

End Select

End If

End If

End Function

Function alternador1()

If ALTX = 0 Then

ALTX = 1

Timer4.Enabled = True

End If

End Function

Function alternador2()

If ALTY = 0 Then

ALTY = 1

Timer6.Enabled = True

End If

End Function

Function contador1()

'If M_CONT = 0 Then

If cont_ax = ax Then

'Timer1.Enabled = False

reloj1_activar = "falso"

End If

'End If

'If M_CONT <> 0 Then


'If Timer2.Enabled = True Then

'Else

'If cont_ax = ax Then

'Timer1.Enabled = False

'End If

'End If

'End If

cont_ax = cont_ax + 1

End Function

Function contador2()

'If M_CONT = 0 Then

If cont_by = by Then

'Timer2.Enabled = False

reloj2_activar = "falso"

End If

'End If

'If M_CONT <> 0 Then

'If Timer1.Enabled = True Then

'If cont_by = by Then

'Timer1.Enabled = False

'Timer2.Enabled = False

'End If

'Else
'If cont_by = by Then

'Timer2.Enabled = False

'End If

'End If

'End If

cont_by = cont_by + 1

End Function

Function inicio1()

'M_CONT = 0

giro1 = 1

ax = 3

giro2 = 1

by = 39

reset_cont()

'Timer1.Enabled = True

reloj1_activar = "verdad"

'Timer1.Interval = 50

reloj1_intervalo = 1

'Timer2.Enabled = True

reloj2_activar = "verdad"

'Timer2.Interval = 50

reloj2_intervalo = 1

int_palab = 2

condicion = 1

Timer3.Enabled = True
End Function

Function reset_cont()

cont_ax = 1

cont_by = 1

End Function

Function codigo_A()

Select Case numero

Case 1

bajar_m3()

Case 2

ALTX = 0

giro1 = 1

ax = 2 * modo

ALTY = 0

giro2 = 1

by = 8 * modo

reset_cont()

'Timer1.Interval = 4000

reloj1_intervalo = 4

'Timer2.Interval = 1000

reloj2_intervalo = 1

'Timer1.Enabled = True

reloj1_activar = "verdad"

'Timer2.Enabled = True

reloj2_activar = "verdad"

cambio = 0

condicion = 1
Case 3

ALTX = 0

giro1 = 1

ax = 1 * modo

ALTY = 0

giro2 = 0

by = 4 * modo

reset_cont()

'Timer1.Enabled = True

reloj1_intervalo = 4

reloj2_intervalo = 1

reloj1_activar = "verdad"

reloj2_activar = "verdad"

'Timer1.Interval = 100

'Timer2.Enabled = True

'Timer2.Interval = 25

condicion = 1

Case 4

ALTX = 0

giro1 = 0

ax = 2 * modo

reset_cont()

'Timer1.Enabled = True

'Timer1.Interval = 25

reloj1_intervalo = 1

reloj1_activar = "verdad"

condicion = 1
Case 5

ALTX = 0

giro1 = 1

ax = 2 * modo

reset_cont()

'Timer1.Enabled = True

'Timer1.Interval = 25

reloj1_intervalo = 1

reloj1_activar = "verdad"

condicion = 1

Case 6

ALTX = 0

giro1 = 1

ax = 1 * modo

ALTY = 0

giro2 = 0

by = 4 * modo

reset_cont()

'Timer1.Enabled = True

'Timer1.Interval = 100

'Timer2.Enabled = True

'Timer2.Interval = 25

reloj1_intervalo = 4

reloj2_intervalo = 1

reloj1_activar = "verdad"

reloj2_activar = "verdad"

cambio = 0
condicion = 1

Case 7

subir_m3()

Case 8

ALTX = 0

giro1 = 1

ax = 3 * modo

reset_cont()

'Timer1.Enabled = True

'Timer1.Interval = 25

reloj1_intervalo = 1

reloj1_activar = "verdad"

condicion = 1

Case 9

cambio = 1

num = num + 1

condicion = 1

End Select

End Function

Function codigo__por_puntos()

ALTX = 0

ALTY = 0

If comparador = lista3(numero) Then

If numero = 0 Then

giro1 = 1

ax = lista1(numero) * 100

giro2 = 1
by = lista2(numero) * 100

End If

If numero > 0 Then

If lista1(numero) > lista1(numero - 1) Then

giro1 = 1

Else

giro1 = 0

End If

If lista1(numero) <= lista1(numero - 1) Then

ax = (lista1(numero - 1) - lista1(numero)) * 100

Else

ax = (lista1(numero) - lista1(numero - 1)) * 100

End If

If lista2(numero) > lista2(numero - 1) Then

giro2 = 1

Else

giro2 = 0

End If

If lista2(numero) <= lista2(numero - 1) Then

by = (lista2(numero - 1) - lista2(numero)) * 100

Else

by = (lista2(numero) - lista2(numero - 1)) * 100

End If

End If

reset_cont()
If ax = 0 And by <> 0 Then

reloj2_intervalo = 1

reloj2_activar = "verdad"

cambio = 0

condicion = 1

End If

If by = 0 And ax <> 0 Then

reloj1_intervalo = 1

reloj1_activar = "verdad"

cambio = 0

condicion = 1

End If

If ax = 0 And by = 0 Then

reloj1_intervalo = 1

reloj1_activar = "falso"

reloj2_intervalo = 1

reloj2_activar = "falso"

End If

If ax <> 0 And by <> 0 Then

If lista3(numero) = 0 Then

reloj1_intervalo = 1

reloj2_intervalo = 1

reloj1_activar = "verdad"

reloj2_activar = "verdad"

cambio = 0

condicion = 1

Else
If ax >= by Then

numerador = ax

denominador = by

k=0

Else

numerador = by

denominador = ax

k=1

End If

For l = 2 To denominador

If (numerador - Int(numerador / l) * l) = 0 And (denominador -


Int(denominador / l) * l) = 0 Then

numerador = numerador / l

denominador = denominador / l

l=l-1

End If

Next

If k = 0 Then

reloj1_intervalo = denominador

reloj2_intervalo = numerador

reloj1_activar = "verdad"

reloj2_activar = "verdad"

cambio = 0

condicion = 1

Else

reloj1_intervalo = numerador

reloj2_intervalo = denominador
reloj1_activar = "verdad"

reloj2_activar = "verdad"

cambio = 0

condicion = 1

End If

End If

End If

Else

If lista3(numero) = 1 Then

bajar_m3()

comparador = lista3(numero)

numero = numero - 1

If numero < 0 Then

numero = 0

End If

Else

subir_m3()

comparador = lista3(numero)

numero = numero - 1

If numero < 0 Then

numero = 0

End If

End If

End If

num = numero - 1

TextBox16.Text = lista1(numero)

TextBox17.Text = lista2(numero)
TextBox18.Text = lista3(numero)

End Function

Function bajar_m3()

Timer5.Enabled = True

Timer3.Interval = 2000

Timer3.Enabled = True

m3 = 1

End Function

Function subir_m3()

Timer5.Enabled = True

Timer3.Interval = 2000

Timer3.Enabled = True

m3 = 0

End Function

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As


System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

Out(&H378, 0)

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load

giro1 = 1

p1 = 1

giro2 = 1

p2 = 1

modo = 50

cont_ax = 1
cont_by = 1

Out(&H378, 0)

fin1 = 1

fin2 = 1

reloj1_activar = "falso"

reloj2_activar = "falso"

Timer3.Enabled = True

Reloj_puerto_paralelo.Enabled = True

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button1.Click

Kx = 0

Ky = 0

numero = 0

ALTX = 0

Tamao = Len(Trim(TextBox1.Text))

frase = UCase(Trim(TextBox1.Text))

If Tamao <> 0 Then

letra = "INICIANDO"

End If

int_palab = 1

llevar_posicion_inicial()

Timer1.Enabled = True

Timer3.Enabled = True

Reloj_puerto_paralelo.Enabled = True

End Sub
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer3.Tick

If VAR <> 3 Then

If Kx = 0 Then

If fc1 = 0 Or fin1 = 0 Then

'Timer1.Enabled = False

reloj1_activar = "falso"

VAR = VAR + 1

X=0

Kx = 1

fin1 = 1

End If

End If

If Ky = 0 Then

If fc2 = 0 Or fin2 = 0 Then

'Timer2.Enabled = False

reloj2_activar = "falso"

VAR = VAR + 1

Y=0

Ky = 1

fin2 = 1

End If

End If

End If

Select Case int_palab

Case 1
'M_CONT = 0

'If Timer1.Enabled = False And Timer2.Enabled = False Then

If reloj1_activar = "falso" And reloj2_activar = "falso" Then

inicio1()

End If

Case 2

'If Timer1.Enabled = False And Timer2.Enabled = False Then

If reloj1_activar = "falso" And reloj2_activar = "falso" Then

If condicion = 1 Then

numero = numero + 1

End If

' M_CONT = 10

ABC()

End If

End Select

TextBox2.Text = X

TextBox3.Text = Y

TextBox4.Text = VAR

TextBox5.Text = Timer1.Interval

TextBox6.Text = Timer2.Interval

TextBox7.Text = numero

TextBox8.Text = condicion

TextBox9.Text = int_palab

TextBox12.Text = letra

TextBox13.Text = giro1

TextBox21.Text = modo

TextBox22.Text = modo / 12.5


If letra <> "por_puntos" And posc_origen = 0 Then

If Len(letra) <> 0 Then

If num = Tamao Then

int_palab = 0

Kx = 0

Ky = 0

VAR = 1

llevar_posicion_inicial()

End If

End If

End If

If posc_origen = 1 Then

Button3.PerformClick()

posc_origen = 0

End If

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Timer1.Tick

If reloj1_activar = "verdad" Then

If reloj1_intervalo = reloj1 Then

If giro1 = 1 Then

X=X+1

Else

X=X-1

End If
alternador1()

contador1()

reloj1 = 0

End If

reloj1 = reloj1 + 1

Else

reloj1 = 0

End If

If reloj2_activar = "verdad" Then

If reloj2_intervalo = reloj2 Then

If giro2 = 1 Then

Y=Y+1

Else

Y=Y-1

End If

alternador2()

contador2()

reloj2 = 0

End If

reloj2 = reloj2 + 1

Else

reloj2 = 0

End If

timer22 = timer22 + 1

End Sub
'Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer2.Tick

' If giro2 = 1 Then

' Y=Y+1

' Else

' Y=Y-1

' End If

' alternador2()

' contador2()

' timer22 = timer22 + 1

'End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button3.Click

Kx = 0

Ky = 0

llevar_posicion_inicial()

int_palab = 10

Reloj_puerto_paralelo.Enabled = True

Timer3.Enabled = True

subir_m3()

End Sub

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Timer4.Tick

ALTX = 0

Timer4.Enabled = False

End Sub
Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer5.Tick

Timer3.Interval = 100

Timer5.Enabled = False

End Sub

Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Reloj_puerto_paralelo.Tick

If ALTX = q1 Then

If ALTX = 0 Then

If 1 <= bit Then

bit = bit - 1

End If

q1 = 1

Else

bit = bit + 1

q1 = 0

End If

End If

If giro1 = p1 Then

If giro1 = 0 Then

If 2 <= bit Then

bit = bit - 2

End If

p1 = 1

Else
bit = bit + 2

p1 = 0

End If

End If

If ALTY = q2 Then

If ALTY = 0 Then

If 4 <= bit Then

bit = bit - 4

End If

q2 = 1

Else

bit = bit + 4

q2 = 0

End If

End If

If giro2 = p2 Then

If giro2 = 1 Then

If 8 <= bit Then

bit = bit - 8

End If

p2 = 0

Else

bit = bit + 8

p2 = 1

End If

End If

If m3 = qm3 Then
If m3 = 0 Then

If 16 <= bit Then

bit = bit - 16

End If

qm3 = 1

Else

bit = bit + 16

qm3 = 0

End If

End If

Out(&H378, bit)

ingreso = Inp(&H379)

If ingreso = 62 Or ingreso = 46 Or ingreso = 54 Then

fc1 = 0

Else

fc1 = 1

End If

If ingreso = 94 Or ingreso = 78 Or ingreso = 86 Then

fc3 = 0

Else

fc3 = 1

End If

If ingreso = 110 Or ingreso = 46 Or ingreso = 78 Then

fc2 = 0

Else

fc2 = 1
End If

If ingreso = 118 Or ingreso = 54 Or ingreso = 86 Then

fc4 = 0

Else

fc4 = 1

End If

If fc3 = 1 Then

FIN3 = 0

End If

If FIN3 = 0 Then

If fc3 = 0 Then

'Timer1.Enabled = False

reloj1_activar = "falso"

Timer3.Enabled = False

Reloj_puerto_paralelo.Enabled = False

FIN3 = 1

End If

End If

If fc4 = 1 Then

FIN4 = 0

End If

If FIN4 = 0 Then

If fc4 = 0 Then

reloj2_activar = "falso"

Timer3.Enabled = False

Reloj_puerto_paralelo.Enabled = False

FIN4 = 1
End If

End If

If fc4 = 1 Then

FIN4 = 0

End If

TextBox10.Text = bit

TextBox11.Text = ingreso

End Sub

Private Sub Timer6_Tick_1(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Timer6.Tick

ALTY = 0

Timer6.Enabled = False

End Sub

Private Sub Button4_Click_1(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button4.Click

modo = TextBox14.Text

End Sub

Private Sub Button5_Click_1(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button5.Click

ALTX = 0

giro1 = 1

ax = 200

ALTY = 0

reloj1_intervalo = 1

reloj1_activar = "verdad"
End Sub

Private Sub ModoPuntosToolStripMenuItem_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles ModoPuntosToolStripMenuItem.Click

Form2.Show()

End Sub

Private Sub SalirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles SalirToolStripMenuItem.Click

Out(&H378, 0)

End

End Sub

Private Sub Timer7_Elapsed(ByVal sender As System.Object, ByVal e As


System.Timers.ElapsedEventArgs) Handles Timer7.Elapsed

If iniciartoma = 1 Then

MATRIZ_X(MATRIZ) = X

MATRIZ_Y(MATRIZ) = Y

MATRIZ = MATRIZ + 1

ListBox1.Items.Add(X)

ListBox2.Items.Add(Y)

End If

TextBox19.Text = num

TextBox20.Text = Tamao

End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click

iniciartoma = 1

End Sub

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button8.Click

iniciartoma = 0

End Sub

Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button9.Click

For i = 1 To MATRIZ

FileOpen(1, "C:\CONTROL1.txt", OpenMode.Append)

Print(1, MATRIZ_X(i))

FileClose(1)

FileOpen(2, "C:\CONTROL2.txt", OpenMode.Append)

Print(2, MATRIZ_Y(i))

FileClose(2)

Next i

End Sub

Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button10.Click

fin1 = 0

End Sub
Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button11.Click

fin2 = 0

End Sub

Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As


System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll

Timer1.Interval = HScrollBar1.Value

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

modo = ComboBox1.Text

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles PictureBox1.Click

End Sub

End Class
Public Class Form2

Dim datos(10000) As Object

Dim contador As Integer

Dim N_digitos As Integer

Dim Ub_listas(3) As Integer

Dim i3 As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

list1.Items.Add(TextBox1.Text)

list2.Items.Add(TextBox2.Text)

list3.Items.Add(ComboBox1.Text)

TextBox1.Clear()

TextBox2.Clear()

Me.TextBox1.Focus()

End Sub

Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged

On Error GoTo err

DirListBox1.Path = DriveListBox1.Drive

If errr = 1000 Then

err:

MsgBox("La unidad especificada no se encuentra")

End If

End Sub

Private Sub DirListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As


System.EventArgs) Handles DirListBox1.SelectedValueChanged

FileListBox1.Path = DirListBox1.Path

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button2.Click

On Error GoTo error1


ruta_del_documento = FileListBox1.Path & FileListBox1.FileName

TextBox3.Text = ruta_del_documento

FileOpen(1, ruta_del_documento, OpenMode.Input)

While Not EOF(1)

Ub_listas(0) = 0

Ub_listas(1) = 0

Ub_listas(2) = 0

Ub_listas(3) = 0

i3 = 0

datos(contador) = LineInput(1)

N_digitos = Len(datos(contador))

For i2 = 1 To N_digitos Step 1

If Asc(Mid(datos(contador), i2, 1)) = 9 Then

Ub_listas(i3) = i2

i3 = i3 + 1

End If

Next i2

list1.Items.Add(Mid(datos(contador), 1, Ub_listas(0) - 1))

list2.Items.Add(Mid(datos(contador), Ub_listas(0) + 1, Ub_listas(1) - Ub_listas(0) -


1))

list3.Items.Add(Mid(datos(contador), Ub_listas(1) + 1, N_digitos - Ub_listas(1)))

contador = contador + 1

End While

FileClose(1)

If list1.Items.Count = -1 Then

error1:
MsgBox("INGRESAR UN ARCHIVO COMPATIBLE")

End If

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button3.Click

For i = 0 To list1.Items.Count - 1

lista1(i) = list1.Items(i)

lista2(i) = list2.Items(i)

lista3(i) = list3.Items(i)

Next i

VAR = 1

Kx = 0

Ky = 0

condicion = 0

comparador = 0

num = 0

numero = 0

int_palab = 2

Tamao = list1.Items.Count - 1

letra = "por_puntos"

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load

Me.TextBox1.Focus()
End Sub

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

On Error Resume Next

If Asc(e.KeyChar) = 13 Then

Me.TextBox2.Focus()

End If

End Sub

Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

On Error Resume Next

If Asc(e.KeyChar) = 13 Then

Me.ComboBox1.Focus()

End If

End Sub

Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As


System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress

On Error Resume Next

If ComboBox1.Text = 0 Or ComboBox1.Text = 1 Then

If Asc(e.KeyChar) = 13 Then

Me.Button1.Focus()

End If

Else

MsgBox("INGRESAR 1 0")
End If

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles Button5.Click

posc_origen = 1

End Sub

Private Sub AbrirToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles AbrirToolStripMenuItem1.Click

list1.Items.Clear()

list2.Items.Clear()

list3.Items.Clear()

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles PictureBox1.Click

End Sub

End Class

Module Module1

Public posc_origen As Integer

Public numerador As Integer

Public denominador As Integer

Public k As Integer

Public reloj1_activar As Object

Public reloj2_activar As Object

Public reloj1 As Integer


Public reloj2 As Integer

Public reloj1_intervalo As Integer

Public reloj2_intervalo As Integer

Public timer11 As Integer

Public timer22 As Integer

Public VARIABLE As Object

Public M_CONT As Integer

Public MATRIZ As Integer

Public MATRIZ_X(1000000) As Integer

Public MATRIZ_Y(1000000) As Integer

Public CONTROL As Integer

Public CONTROLADOR_DERELOJPPP As Integer

Public relojPP As Integer

Public comparador As Integer

Public lista1(10000) As Integer

Public lista2(10000) As Integer

Public lista3(10000) As Integer

Public contador_form2 As Integer

Public sd As Object

Public ruta_del_documento As Object

Public errr As Integer

Public numero As Integer

Public q1 As Integer

Public p1 As Integer

Public q2 As Integer

Public p2 As Integer

Public qm3 As Integer


Public bit As Integer

Public m3 As Integer

Public motor3 As Integer

Public Kx As Integer

Public Ky As Integer

Public X As Integer

Public Y As Integer

Public VAR As Integer

Public fc1 As Integer

Public fc2 As Integer

Public fc3 As Integer

Public fc4 As Integer

Public giro1 As Integer

Public giro2 As Integer

Public Tamao As Integer

Public frase As String

Public letra As String

Public ALTX As Integer

Public ALTY As Integer

Public num As Integer

Public ax As Integer

Public by As Integer

Public cont_ax As Integer

Public cont_by As Integer

Public int_palab As Integer


Public cambio As Integer

Public condicion As Integer

Public ingreso As Integer

Public FIN3 As Integer

Public FIN4 As Integer

Public modo As Integer

Public o As Integer

Public Declare Function Inp Lib "Inpout32.dll" _

Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Public Declare Sub Out Lib "Inpout32.dll" _

Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

End Module

6. CONCLUSIONES.

* Se pudo alcanzar la precisin deseada gracias al adecuado uso de los dispositivos ,


programacin , etc.

*Se ha podido observar que es posible alcanzar una buena precisin y repetividad con los
motores paso a paso.

7. BIBLIOGRAFIA

1. DISEO EN INGENIERA MECNICA, JOSEPH EDWARD SHIGLEY,


(Profesor de la universidad de Michigan), LARRY D. MITCHELL, (Profesor de
Ingeniera mecnica del Virginia Polytechnic Institute and State University
universidad de Michigan), Cuarta edicin.

2. TEORA DE CIRCUITOS Y DISPOSITIVOS ELECTRNICOS, BOYLESTAD


NASHELSKY, Octava edicin, (2003), por Pesaron Educacin de Mxico.

3. VISUAL BASIC 6.0 ORIENTADO A BASES DE DATOS, CARLOS M.


RODRIGUEZ BUCARELLY,(Ing. En sistemas , Maestro de INFOTEP), segunda
edicin.
8. ANEXOS

Vous aimerez peut-être aussi