Professional Documents
Culture Documents
______________________________________________
Director: ERIC VALLEJO
Doctor en Automtica e Informtica Industrial
NOTA DE ACEPTACIN
_________________________
_________________________
_________________________
_________________________
___________________________________
Firma presidente del jurado
___________________________________
Firma del jurado
__________________________________
Firma del jurado
AGRADECIMIENTOS
Agradecemos a Dios que siempre nos ilumin por el camino correcto y nos rodeo de gente
maravillosa que nos facilit las labores realizadas.
Tambin agradecemos a nuestros padres porque su continuo apoyo nos motiv
enormemente para alcanzar esta meta.
A nuestro director de proyecto Ing Eric Vallejo que nos lidero durante su desarrollo por sus
consejos y respaldo en momentos importantes durante el desarrollo del mismo.
Al Ing. Mario Esmeral por el apoyo y recomendaciones que nos brindo.
A Wilmer Escorcia y las personas del Laboratorio de Electrnica por su disposicin para
ayudarnos en todo lo que estuvo a su alcance.
CONTENIDO
1
18
1.1
18
1.2
JUSTIFICACIN
18
1.3
IMPACTO ESPERADO
19
OBJETIVOS
20
2.1
OBJETIVO GENERAL
20
2.2
OBJETIVOS ESPECFICOS
20
ALCANCES Y LIMITACIONES
21
MARCO TERICO
22
4.1
FUNDAMENTOS DEL ULTRASONIDO
4.1.1
Propiedades Generales
4.1.2
Propagacin de las ondas ultrasnicas
4.1.3
Coeficientes de Reflexin y Transmisin
4.1.4
La seal de eco
22
22
24
26
27
4.2
SENSORES
4.2.1
Caractersticas de los sensores
4.2.2
Transductores Ultrasnicos
27
28
28
4.3
RECEPCIN Y ACONDICIONAMIENTO DE LA SEAL
4.3.1
Ancho de Banda
4.3.2
Nivel de ruido
4.3.3
Filtros
4.3.4
Deteccin de Envolvente
4.3.5
Compensacin atenuacin-distancia (CAD)
4.3.6
Imprecisin de amplitud
30
30
31
31
31
31
32
4.4
PROCESAMIENTO DIGITAL DE LA SEAL
4.4.1
Convertidor Anlogo Digital
4.4.2
Filtros Digitales
4.4.3
Dispositivos Lgicos Programables
32
33
33
34
4.5
PERCEPCIN ARTIFICIAL
4.5.1
Patrones y Reconocimiento de Patrones
4.5.2
Estimacin del error de clasificacin y verificacin de resultados
4.5.3
Estimacin de la funcin de densidad
35
35
43
46
2
4.5.4
4.5.5
Consideraciones computacionales
Otras consideraciones
4.6
ESTADO DEL ARTE
4.6.1
Redes Neuronales
4.6.2
Algoritmos Genticos
4.6.3
Lgica Difusa
5
51
51
52
52
54
5.1
DIAGRAMA DE BLOQUES
54
5.2
DIAGRAMA DE FLUJO
55
CRITERIOS DE DISEO
6.1
49
50
REQUERIMIENTO DE DISEO
58
58
6.2
JUSTIFICACION DE LOS ELEMENTOS DE DISEO
6.2.1
Componentes de hardware
6.2.2
Componentes de software
59
59
63
6.3
ANLISIS COMPARATIVO
6.3.1
Unidad de procesamiento
6.3.2
Sistema de adquisicin
6.3.3
Etapa de amplificacin
6.3.4
Convertidor anlogo digital
65
65
66
66
66
67
67
67
68
69
72
73
74
75
76
77
78
81
82
95
3
7.2
8
PRUEBAS Y RESULTADOS
109
111
111
111
111
111
111
112
8.2
DISEO DE LOS EXPERIMENTOS
8.2.1
Estructura Implementada
8.2.2
Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos
8.2.3
Microprocesador
8.2.4
Pruebas Adicionales
8.2.5
Etapa Final
112
112
113
113
114
114
8.3
RESULTADOS
8.3.1
Estructura Implementada
8.3.2
Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos
8.3.3
Microprocesador
8.3.4
Pruebas Adicionales
8.3.5
Etapa Final
117
117
118
128
130
134
8.4
137
8.1
ETAPAS DE PRUEBA
8.1.1
Estructura Implementada
8.1.2
Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos
8.1.3
Microprocesador
8.1.4
Pruebas Adicionales
8.1.5
Etapa Final
140
9.1.1
9.1.2
140
143
10
CONCLUSIONES
145
11
RECOMENDACIONES
146
12
BIBLIOGRAFIA
147
LISTA DE TABLAS
pg.
Tabla 1 Propiedades acsticas del aire y el agua
25
116
134
137
137
143
LISTA DE FIGURAS
pg.
Figura 1 Espectro de las seales acsticas
22
23
25
26
26
30
36
37
45
56
59
68
69
73
6
74
74
76
77
78
79
80
Figura 26 Etapa 5V
80
81
81
82
84
84
Figura 32 Entrenamiento
85
Figura 33 Librera
85
88
95
96
97
98
Figura 39 Entrenamiento
99
100
7
101
102
102
103
104
104
105
105
109
110
115
117
118
121
122
122
123
123
124
8
126
129
130
131
133
135
136
139
151
152
156
156
157
158
LISTA DE ANEXOS
151
156
157
159
182
240
10
GLOSARIO
CUANTIZACIN:
Es la prdida de datos que se da al convertir datos de una escala a otra que no sea
exactamente coincidente en su tamao o en las divisiones que lo componen. En este
sentido, la cuantizacines una simplificacin de los datos al reducir los intervalos con los
que se representan.
Un ejemplo de cuantizacin es el que se suele producir al aplicar las curvas o niveles a una
imagen de mapa de bits. Se suele reflejar en un histograma en forma de peine, donde se
producen saltos en los datos similares a los dientes de un peine.
PARAMETRIZACIN:
PARTICIONAR:
HIPERESFERA:
Las hiperesferas, son esferas 4D, las cuales poseen propiedades muy especiales. Para
entenderlo de una mejor manera se puede comparar de la siguiente manera:
La circunferencia es una lnea, cuyos puntos equidistan de otro llamado centro.
La esfera es una superficie, cuyos puntos equidistan de otro llamado centro.
La hiperesfera (4D) es un cuerpo, cuyos "puntos exteriores e interiores" equidistan de otro
llamado centro.
CENTROIDE:
En geometra, el centroide o baricentro de un objeto X perteneciente a un espacio ndimensional es la interseccin de todos los hiperplanos que dividen a X en dos partes de
11
SEGMENTACIN:
EXTRACCIN DE PROPIEDADES:
Consiste en caracterizar un objeto con medidas o cualidades cuyos valores tienden a ser
similares. Para objetos en la misma categora las diferencias son mnimas y por lo tanto las
caractersticas son invariables y poco relevantes a cambios en datos ledos por el sensor.
CLASIFICACIN:
INTERPRETACIN:
12
INTRODUCCIN
Existen innumerables aplicaciones con ultrasonido. Algunas de ellas estn orientadas a la
deteccin de objetos, otras a la medicin de distancias (las ms comunes), algunas a
mediciones de flujo, otras ms al envo de informacin y varias ms a la inspeccin [4].
En la actualidad existen grupos de investigacin en el ambinto nacional e internacional que
trabajan en este campo con el fin de desarrollar tcnicas y sistemas con una alta
confiabilidad.
En la Universidad del Norte (propiamente al interior del Grupo de Investigacin en
Robtica y Sistemas Inteligentes) se han desarrollado dos proyectos de grado basados en
ultrasonido.
El primero es un sistema de medicin de distancia de objetos, utilizando un
microcontrolador de 8 bits tanto para el proceso de captura de datos como del
procesamiento de la informacin, desarrollada por los ingenieros Jos Lus Avendao
Mendoza y Fabin R. Manotas Angulo [2].
Este sistema utiliza la teora del pulso-eco la cual consiste en el clculo del tiempo que
toma la onda en ir al objeto y regresar, y luego, con la aproximacin de la velocidad del
sonido, se calcula la distancia a la que se encuentra el objeto con respecto al sistema. Esta
medicin se realiza mediante el uso de dos pares de transductores ultrasnicos (transmisor
y receptor) que son dispositivos que transforman la energa elctrica en acstica y
viceversa. Operan debido al efecto piezoelctrico, el cual consiste en que ciertos
materiales cuando se tensionan, se polarizan elctricamente y generan un voltaje elctrico
entre las superficies opuestas. Esto es reversible en el sentido de que al aplicar un voltaje a
travs las caras del mismo material, se produce una deformacin del mismo. Este efecto
microscpico se origina por las propiedades de simetra de algunos materiales, como los
cristales. [4].
Fcilmente se puede tener el momento en que empieza a emitir el pulso para excitar a los
transductores, pero el momento exacto del regreso de los mismo no es tan sencillo, debido a
que muchos factores como la temperatura, forma del objeto y la distancia, influyen en la
forma de la onda captada por el transductor receptor.
Por esta razn se hace una combinacin de tcnicas para corregir errores en la medicin,
logrando una tcnica apropiada de umbral adaptativo y de correccin de la temperatura.
Para transformar el tiempo de vuelo en distancia, se necesita conocer la velocidad de
propagacin de las ondas en el medio, la cual depende de la temperatura ambiente. Por sta
razn, se aade un sensor de temperatura en el sistema para hacer la correccin de la
13
velocidad del sonido. El sensor a 0C tiene un voltaje de salida de 0V y aumenta 10mV por
cada grado centgrado.
La frecuencia de operacin de los transductores que se implement es de 40KHz debido a
que a medida que aumenta de frecuencia los transductores aumentan su precio y el
hardware de procesamiento es ms complejo, pero a mayores frecuencias mejoran la
calidad de la seal recibida. Esto se debe a que el ancho del haz (es la forma como se
dispersa el haz con la distancia) del transductor es mas directivo [2].
Para la funcin que cumple el sensor no era necesario tener alta calidad, sino informacin
confiable, por lo tanto se utiliz transductores de baja frecuencia.
En aplicaciones como el reconocimiento de objetos donde se requiere mayor descripcin se
trabaja con frecuencias ms altas [3].
El rango de medicin de distancia que se logr fue 18.6 cms hasta 2m y los datos se
visualizaron en una pantalla LCD [2].
El segundo sistema se basa en el primero y se utiliza para caracterizar mapas, desarrollada
por los ingenieros Claudia Acosta Miranda y Jorge Mario Len Albornoz [1].
En este proyecto se desarroll un sensor de ultrasonido que proporciona la posicin de
objetos que se encuentren en un rea determinada (2 x 4m).
El sistema est conformado por un par de transductores, un motor de pasos que efecta la
rotacin de los transductores y un procesador Rabbit 2000 con los cuales se realiza un
barrido del rea a estudiar. Adems de medir la distancia a la cual se encuentra el objeto,
este sistema tambin calcula el ngulo de objetos con respecto a la normal (en un barrido
de 180 grados) de la plataforma robtica en la que se instale. Esto se logra analizando la
amplitud del eco recibido.
El microprocesador Rabbit 2000 es el encargado de controlar el motor que mueve la tarjeta
de los transductores, enviar y tomar las muestras de las ondas ultrasnicas, calcular la
distancia y el ngulo en el que se encuentra un objeto y establecer la comunicacin con la
computadora a travs del puerto serie.
Tambin se muestran algunas de las pruebas realizadas con las cuales se evalu el
comportamiento del sensor con diferentes objetos y medios.
Como resultados de las pruebas realizadas se recomend realizar una fusin sensorial con
un sistema de visin artificial y ultrasonido. Dado que ultrasonido es ms rpido, en realizar
un barrido de ciento ochenta grados en el rea estudiada, podra luego utilizarse el sistema
14
de visin para realizar un reconocimiento de aquellos lugares en los que se detecten objetos
[1].
En Colombia se han desarrollado varios proyectos basados en ultrasonido entre los cuales
se encuentran: un Sistema de posicionamiento usando ultrasonido en la Universidad
Nacional de Bogot, a cargo de los ingenieros Velsquez Moreno y Jaime Andrs y el
Diseo e implementacin de un sistema para la reconstruccin tridimensional de imgenes
de ultrasonido en la Universidad Nacional de Manizales, a cargo de los ingenieros Forero
Martnez y David Eugenio [14].
En el contexto internacional, se han realizado investigaciones sobre el reconocimiento de
patrones con ultrasonido, como por ejemplo:
Los datos se reciben en un computador con sistema operativo Linux a travs de una tarjeta
de adquicisin de datos, y se implementa un sistema de clasificacin de redes neuronales
[6].
Este sistema implementa una infraestructura fsica (Hardware) y lgica (Software) para
desarrollar tareas de ensamblaje de partes. Se tom como elemento manipulador una pinza,
dotada con cuatro transductores ultrasnicos, dos de frecuencia de 220 Khz. y dos con
frecuencia de operacin de 40 Khz. La pinza se encontraba instalada en un Robot industrial
PUMA 700. El computador realiz las medidas y el tratamiento digital de las seales de
ultrasonido. Finalmente, se entrega una base de conocimiento de diferentes seales de eco
parametrizadas para la identificacin de partes y posicionamiento del robot.
15
16
Los resultados del sistema, pueden ser presentados al usuario a travs de un LCD, o del
monitor de un computador, dependiendo de que tan detallada sea la informacin que se
quiere mostrar [1,2].
17
1
1.1
JUSTIFICACIN
Dadas las limitaciones que presentan las plataformas de visin artificial para el
reconocimiento de objetos, es necesario explorar nuevas alternativas que permitan darle
alguna solucin a las falencias de estos sistemas. Una de las ventajas que presenta el
ultrasonido frente a la visin, es el menor requerimiento de recursos de hardware. Otra
ventaja de los transductores ultrasnicos es que tienen un costo menor que los transductores
de visin, estos se encuentran alrededor de los U$ 7 y los de visin artificial U$ 80 [11].
Si bien el ultrasonido presenta las ventajas ya mencionadas, no pasa lo mismo con el
manejo de la informacin proveniente de los transductores, ya que la interpretacin de esa
informacin y la extraccin de aspectos relevantes son ms complejas.
18
La baja carga computacional que manejan los sistemas ultrasnicos con respecto a los de
visin, les permite procesar la informacin en un menor tiempo, con excepcin de los
visores de lnea, los cuales a diferencia de las cmaras slo procesan la imagen por lnea a
medida que el objeto se mueve, es decir slo hacen un barrido horizontal y no procesan
matrices (barrido horizontal y vertical) de las diferentes tomas de la imagen en movimiento,
como lo hacen las cmaras [12]. Sin embargo los visores de lnea tienen las mismas
limitaciones de la visin artificial.
Esto hace que los sistemas ultrasnicos sean ms aptos en aplicaciones de inspeccin,
donde ambos sistemas puedan ser implementados, como por ejemplo, el proceso de control
de calidad en las industrias. Estos procesos de control pueden ser automatizados gracias a
estos sistemas de reconocimiento, teniendo en cuenta que los basados en ultrasonido
presentan un valor agregado (costo y velocidad), el cual favorece a la industria.
Por otra parte unos de los objetivos del grupo de robtica es desarrollar investigaciones en
el rea del ultrasonido y el reconocimiento de patrones, aprovechando la experiencia que ha
adquirido en proyectos de grado relacionados a estas reas [1,2].
Dados los muy buenos resultados obtenidos en trabajos como los de Eduardo Caicedo [3] y
Paolo Gaudiano [6], el ultrasonido se presenta como un sistema viable para el
reconocimiento de objetos en tiempo real, en robtica y otras aplicaciones.
1.3
IMPACTO ESPERADO
Con este proyecto, se espera trabajar en una aplicacin de las seales ultrasnicas, que no
haba sido utilizada anteriormente en el grupo de robtica, y as avanzar en esta lnea de
investigacin. Se espera que este trabajo sirva de base para el desarrollo de un sistema
capaz de realizar tareas de inspeccin, en procesos de produccin en serie y que, a su vez,
represente una mejor opcin que los sistemas utilizados en la regin actualmente.
Tambin se espera que las empresas con sistemas de control ms eficientes (relacin costobeneficio), al tener menos costos puedan ofrecer sus productos a un menor precio.
19
2
2.1
OBJETIVOS
OBJETIVO GENERAL
OBJETIVOS ESPECFICOS
20
ALCANCES Y LIMITACIONES
ALCANCES
El sistema tendr un porcentaje de reconocimiento mnimo del 80%.
El sistema de reconocimiento determinar si el patrn sensado es el patrn de
referencia.
Las caractersticas fsicas de los objetos sern del orden de las dcimas de centmetros.
LIMITACIONES
El sistema reconocer los siguientes objetos: cubo, cono, esfera, cilindro.
El prototipo no considerar las variaciones ambientales y sus efectos sobre los
parmetros utilizados en el reconocimiento.
La distancia a la cual se realizar la medicin ultrasnica ser fija.
Si el patrn sensado por la seal ultrasnica no se encuentra en la base de datos, el
sistema no dar una descripcin del objeto detectado.
Los objetos estarn en reposo y su orientacin, con respecto al sistema de medicin,
ser conocida.
21
4
4.1
MARCO TERICO
Infra-Sonido
Sonido
Ultra-Sonido
f (Hz)
20 Hz
20 KHz
Tomado de [4]
4.1.1
Propiedades Generales
El Ultrasonido al igual que el sonido es una onda mecnica que se desplaza a travs de
cualquier medio con ciertas caractersticas, entre las cuales se encuentran:
Amplitud: La amplitud de una onda de sonido es el grado de movimiento de las molculas
de aire en la onda, que corresponde a la intensidad del enrarecimiento y compresin que la
acompaan.
22
Frecuencia: Se define como el nmero de veces que ocurre un evento repetitivo (ciclo) por
unidad de tiempo. Su unida Hertz.
Longitud de onda: Es la distancia ocupada por una onda completa y es igual a la distancia
a travs de la cual se mueve la onda por periodo de ciclo. La longitud de onda cambia en
funcin de la velocidad del sonido y la frecuencia. Se calcula a travs de la siguiente
ecuacin, donde c es la velocidad del sonido y f es la frecuencia de la seal.
c
f
(1)
Longitud de onda
del sonido en el
agua
Longitud de onda
del sonido en el
aire
Tomado de [16]
c( T ) 332 0 ,6T
4.1.2
m/ s
(2)
Las ecuaciones fundamentales que definen la transmisin de las ondas acsticas son las
mismas para todos los medios de transmisin. Sin embargo, debido a que muchas de las
propiedades acsticas son ampliamente distintas entre medios como el agua y el aire,
existen muchas diferencias fundamentales entre los transductores y sistemas que son
diseados para operar en ellos. Para esto se tienen en cuenta las propiedades del medio de
transmisin de la onda.
Impedancia acstica
Es la resistencia de un material a las vibraciones de las ondas ultrasnicas. Es el producto
de la velocidad mxima de vibracin por la densidad del material. [fuente-fundamental of
utrasonics]
Z
P
V
(3)
Z Impedancia acstica
P Presin de las partculas en un punto determinado
V Velocidad de propagacin de las ondas
El verdadero valor de la impedancia acstica est definido por la siguiente ecuacin:
Z 0Vs
(4)
24
Velocidad
(m/sg)
1480
1500
332
343
Tomado de [16]
Direccin de movimiento
de las partculas
Partculas en una
posicin de reposo
Tomado de [15]
Ondas Transversales
La oscilacin de las partculas ocurre en ngulo recto o de manera transversal a la direccin
de propagacin. Estas ondas requieren materiales slidos para una propagacin eficiente,
por consiguiente, no se propaga eficazmente en los materiales como lquidos o gases.
25
Partculas en una
posicin de reposo
Direccin de propagacin
de la onda
Direccin de movimiento
de las partculas
Onda transversal
Tomado de [15]
Ondas Superficiales
Las ondas viajan a travs de la superficie del slido, a una profundidad de una longitud de
onda. El movimiento de las partculas tiene forma de una orbita elptica. Este tipo de ondas
son tiles debido a que son muy sensibles a defectos de la superficie, ya que siguen la
forma de la superficie. Esta curvatura de la onda se puede utilizar para examinar reas que
otras ondas tendran dificultad de alcanzar.
Figura 5 Onda superficial
Direccin de
propagacin de
la onda
La vibracin de la
partcula mantiene
una orbita elptica
Tomado de [15]
4.1.3
Z 2 Z1
Z1 Z 2
(5)
26
Coeficiente de reflexin
Z1 y Z2 Impedancias acsticas de los medios 1 y 2 respectivamente
Tomado de [1]
Este coeficiente es un nmero complejo por la naturaleza de las impedancias acsticas. Por
lo tanto se puede dividir en mdulo y fase. El mdulo indica la relacin de la onda
incidente y reflejada, y la fase, que indica el desfase entre la onda incidente y reflejada. [1]
4.1.4
La seal de eco
Un eco tpico reflejado por una superficie plana, fundamentalmente posee dos
componentes:
p (t)= seal portadora de alta frecuencia
e (t)= seal envolvente de menor frecuencia que modula la seal
La seal medida es el producto de estas dos seales definido por la ecuacin
m (t)=e (t).p (t)
(6)
En donde la forma de eco, que a su vez esta definida fundamentalmente por las
caractersticas geomtricas de la superficie de reflexin, est dada por la seal de
envolvente e (t). [4]
4.2
SENSORES
Se define como sensor a cualquier sistema capaz de proporcionar informacin sobre una o
ms propiedades fsicas de un sistema natural o elaborado. Acorde con esta definicin se
pueden clasificar los sensores de acuerdo a la variable medida, por ejemplo sensores de
temperatura, acsticos, de esfuerzos, pticos, etc.
27
4.2.1
Transductores Ultrasnicos
Los sensores de ultrasonido estn marcados dentro de los sensores acsticos, ya que
detectan una onda sonora, auque luego utilicen esta onda para medir otras propiedades del
entorno. Histricamente este tipo de sensores ha encontrado una aplicacin muy importante
como detectores de obstculos y objetos en general (por ejemplo, el sonar en la exploracin
del fondo marino en la deteccin de peces bajo el agua).
En robtica este tipo de sensores ha encontrado aplicacin fundamentalmente como
medidor de distancia y velocidad, detectores de obstculos o reconocedores de defectos en
procesos de fabricacin. Sin embargo, como se puede observar en la naturaleza viviente y
por los desarrollos en la fsica de las ondas acsticas, que an es posible mejorar y ampliar
la informacin que se obtiene actualmente de este tipo de sensores.
28
Existen muchos mtodos para producir y detectar las seales ultrasnicas, Mtodos
mecnicos, Trmicos, Magnticos, entre otros.
Transductores Piezoelctricos
Es el medio por el cual la energa elctrica se convierte en energa mecnica (ondas
sonoras) o viceversa. Opera debido al efecto piezoelctrico, el cual consiste en que ciertos
cristales cuando se tensionan, se polarizan elctricamente y generan voltaje elctrico entre
las superficies opuestas. Esto es reversible en el sentido de que al aplicar un voltaje a travs
las caras de un cristal, se produce una deformacin del mismo. Este efecto microscpico se
origina por las propiedades de simetra de algunos cristales. [4]
Patrn de radiacin acstica
El patrn de radiacin acstica, o patrn del haz, es la sensibilidad relativa de un
transductor como una funcin del ngulo espacial. Este patrn esta determinado por
factores como la frecuencia de operacin y el tamao, forma y caractersticas de la fase
acstica de la superficie vibratoria. Los patrones del haz de los transductores son
recprocos, lo que significa que el patrn ser el mismo si est siendo usado como
transmisor o como receptor.
Los transductores pueden ser diseados para irradiar el sonido en varios tipos diferentes de
patrones, desde omnidireccionales hasta patrones muy directivos.
Figura 6 Representacin tridimensional del patrn de radiacin acstica producido
por un transductor
29
Tomado de [16]
El ngulo del haz es usualmente definido como la medida del ngulo total del lbulo
principal, donde el nivel de presin del sonido ha sido reducido 3 dB en ambos lados sobre
el eje perpendicular a la superficie de radiacin. Tambin se puede utilizar una
representacin en 2 dimensiones como se ilustra en la figura 7, donde se muestra la
sensibilidad relativa del transductor vs. el ngulo. Las representaciones en dos dimensiones
son las ms utilizadas. [16]
Figura 7 Patrn de radiacin acstica
Tomado de [16]
4.3
Las seales que se reciben son del orden de los milivoltios o inferiores, por lo tanto se
requieren etapas de amplificacin para convertirlas en niveles utilizables, por lo que
requieren unas caractersticas especficas:
4.3.1
Ancho de Banda
El ancho de banda de los amplificadores debe ser mayor que el de los transductores, de esta
forma se evita distorsin de la seal y reduccin de la resolucin axial.
30
4.3.2
Nivel de ruido
Es necesario que los niveles de ruido ya sean de origen trmico o generado por el
amplificador sean muy bajos.
El ruido trmico sobre una resistencia est dado por:
er 4kTBR
(7)
k = constante de Boltzman
T= temperatura absoluta
B= ancho de banda
R= resistencia sobre la que se est generando el ruido trmico.
4.3.3
Filtros
El ruido afecta las medidas que se realizan, a pesar de que en ultrasonido este problema se
disminuye debido a que los transductores reciben slo la frecuencia para la que estn
diseados, una forma de evitar stos inconvenientes es reducir el ancho de banda al mnimo
necesario con filtros paso banda.
4.3.4
Deteccin de Envolvente
Las seales entregadas por el transductor en recepcin son pulsos de radiofrecuencia cuya
envolvente es del mximo inters, ya que contiene informacin sobre las caractersticas de
los reflectores. Anteriormente se utilizaban mtodos analgicos para la deteccin de
envolventes, pero stos han sido superados por las tcnicas digitales.
4.3.5
encuentren dos reflectores idnticos. Este efecto es ms notorio dependiendo del coeficiente
de atenuacin del material o entorno.
CAD se encarga de compensar este efecto, aumentando en factor de amplificacin con el
tiempo, de esta forma se logran igualar los ecos de elementos reflectores a distintas
distancias.
4.3.6
Imprecisin de amplitud
32
4.4.1
Este dispositivo tiene a su cargo realizar el muestreo y cuantizacin de las seales anlogas.
La resolucin de un convertidor anlogo digital es usualmente expresada en el nmero de
bits en su salida digital. Por poseer salida binaria un convertidor con n bits de salida puede
representar 2n cdigos diferentes y siendo el menor cdigo asociado al nivel de referencia
bajo y el mayor cdigo asociado al nivel de referencia alto VREFT.
En un CAD adems del error de cuantizacin se encuentran diversos tipos de errores como
se enunciar a continuacin:
Error de Offset: es la diferencia entre los puntos de offset o tensin comn nominal y real.
Error nolineal: diferencia entre el ancho real de un paso de un cdigo a otro y el ancho
nominal de 1 LSB.
Error lineal: es la desviacin de los valores en la funcin de transferencia actual de una
lnea recta. [1]
4.4.2
Filtros Digitales
Bajo costo.
empleada).
33
Diseo de filtros
Los tres pasos bsicos que requiere el diseo de un filtro digital son:
Establecer las especificaciones del filtro para unas determinadas prestaciones. Estas
especificaciones son las mismas que las requeridas por un filtro analgico: frecuencias
de rechazabanda y pasabanda, atenuaciones, ganancia dc, etc.
PERCEPCIN ARTIFICIAL
Es natural que el hombre busque disear y construir mquinas que puedan reconocer
patrones. Desde reconocimiento de voz, Identificacin de huellas dactilares,
reconocimiento de texto, identificacin de la secuencia del DNA y muchas mas, es claro
que el diseo de sistemas confiables y precisos para el reconocimiento de patrones seria
muy til.
Existen dos tipos de percepcin, de Bajo y Alto Nivel. La percepcin de bajo nivel detecta
propiedades sencillas de los estmulos. La percepcin de alto nivel construye
representaciones estructuradas del entorno cuya complejidad no est predeterminada
rgidamente por el programador.
4.5.1
Tomado de [18]
36
Tomado de [18]
37
X1
X
X 2
:
X n
Espacio de representacin
Con esta aproximacin un patrn no es ms que un punto en el espacio de representacin
de los patrones que es un espacio de dimensionalidad determinada por el nmero de
variables consideradas. Esta aproximacin concluye que es razonable que los patrones
pertenecientes a una misma clase estn cercanos en el espacio de representacin mientras
que aquellos que pertenezcan a clases diferentes deberan estar en diferentes regiones del
espacio de representacin.
Un patrn se representa como un punto en el espacio de patrones P. El espacio de patrones
P es un espacio de dimensionalidad determinada por el nmero de variables consideradas y
se define como el conjunto de todos los valores posibles que puede tomar patrn X, esto es,
P X ni 1 Gi
(8)
38
donde d n .
Este objetivo puede abordarse de dos formas:
Reduciendo la dimensionalidad de los datos
Si los patrones son de alta dimensionalidad, el coste computacional asociado a la
clasificacin puede ser muy alto. Muchos clasificadores estn basados en clculos de
distancias y estos clculos pueden depender de forma cuadrtica respecto a la
dimensionalidad de los patrones. Como otra consideracin computacional hay que
considerar el espacio de almacenamiento adicional que supone guardar los valores de
nuevas variables. Adems, algunas de las variables pueden ser redundantes con otras y no
aportar informacin adicional.
Las tcnicas dedicadas a seleccionar las variables ms relevantes se dicen de seleccin de
caractersticas y reducen la dimensionalidad de los patrones, es decir reducen el nmero de
variables a tener en cuenta.
X1
X2
X3
Selector
Y1
de
caractersticas
Xn
Yd
d<n
A)
X1
X2
X3
Extractor
de
caractersticas
Y1
Y2
Y3
Yn
Xn
B)
40
Tomado de [18]
Mdulo de clasificacin
El objetivo final de un sistema de Reconocimiento de Patrones es el etiquetar de forma
automtica patrones de los cuales se desconoce su clase. Se supone un sistema que dispone
de un mdulo de adquisicin de datos, el cual ha seleccionado previamente las variables
ms significativas.
El conjunto de clases
Inicialmente se supone que todos los patrones a reconocer son elementos potenciales de J
clases distintas denotadas
w j , j 1,2,....., J
clases informacionales, {w1 , w2 ,...., wJ } . Conviene tener en cuenta que una clase
informacional es la denominacin que se da a una clase conocida y con significado.
Adems conveniente ampliar el conjunto , incorporando una nueva clase, llamada la
clase de rechazo. As, se define la clase de rechazo ( w0 ) como una clase que se asigna a
todos los patrones para los que no se tiene una certeza aceptable de ser clasificados
*
correctamente en alguna de las clases de . Se dice que {w1 , w2 ,...., wJ , w0 } es el
conjunto extendido de clases informacionales.
El clasificador
Una vez establecido el conjunto de clases se procede a la construccin del clasificador. Este
involucra la siguiente serie de etapas:
1. La eleccin del modelo.
2. Aprendizaje (entrenamiento del clasificador).
3. Verificacin de los resultados.
Es muy importante sealar que estas etapas no deben verse de forma secuencial. Puede
ocurrir que en un momento dado hay que volver atrs para replantearse alguno de los pasos
dados, incluso el conjunto de clases informacionales.
Un clasificador o regla de clasificacin es una funcin d: P definida sobre los
*
patrones X tal que para todo patrn X, d (X) .
*
41
Aprendizaje
Se acostumbra a utilizar indistintamente los trminos aprendizaje y entrenamiento para
referirse al proceso de construccin del clasificador. El aprendizaje puede realizarse de dos
maneras muy diferentes.
Aprendizaje supervisado
Un aprendizaje supervisado requiere disponer de un conjunto de patrones de los cuales se
conoce su clase cierta. A este conjunto se le denomina conjunto de entrenamiento. Este
tipo de entrenamiento se denomina entrenamiento supervisado y los clasificadores as
obtenidos clasificadores supervisados.
Disponer de un conjunto de entrenamiento supone que alguien se ha preocupado de
etiquetar los patrones de ese conjunto. Esta tarea la suele realizar un experto en el campo en
el que se va a realizar el reconocimiento y generalmente viene impuesto.
Aprendizaje no supervisado
El aprendizaje no supervisado se realiza a partir de un conjunto de patrones del que no se
conoce su clase cierta. En ocasiones, ni siquiera se conoce el nmero de clases.
Bsicamente, se traduce en encontrar agrupamientos. El objetivo suele ser el de verificar la
validez del conjunto de clases informacionales para una clasificacin supervisada. Las
tcnicas utilizadas suelen denominarse mtodos de agrupamiento o clustering.
Aprendizaje supervisado paramtrico y no paramtrico
Si se considera que en un caso ideal cada agrupamiento representa a una clase y cada clase
tiene asociado un agrupamiento bien diferenciado de los dems, un problema de
clasificacin supervisada puede plantearse como la bsqueda de las superficies que separan
los diferentes agrupamientos. Estas superficies se denominan superficies de decisin.
Las superficies de decisin determinan regiones de decisin de forma que cada clase tiene
asociada una regin en P y la decisin sobre la clase a asignar a un nuevo patrn se har en
base a la regin en la que ste se encuentra en P.
La bsqueda de estas superficies (anlogamente, regiones) de decisin se puede abordar de
dos maneras, dependiendo de si se conoce o supone un determinado modelo estadstico
para las clases.
1. Si se supone un completo conocimiento a priori de la estructura estadstica de las clases,
el aprendizaje se reduce a la estimacin de los parmetros que determinan las funciones de
42
densidad de probabilidad de las clases. Las fronteras de decisin estn definidas por las
distribuciones de probabilidad de las clases. Los clasificadores construidos bajo esta
suposicin se conocen como clasificadores paramtricos.
2. Si no se supone un determinado modelo estadstico, bien por desconocimiento o por la
imposibilidad de asumir un modelo paramtrico adecuado, el problema resulta ms
complejo y se puede abordar desde diferentes perspectivas. Las fronteras de decisin estn
definidas por los prototipos. Los clasificadores construidos sin esta suposicin se conocen
como clasificadores no paramtricos.
4.5.2
P(error ) 1 P(acierto ) 1 P( x | wi ) i dX
i 1 Ri
(9)
(10)
43
1
N
( X
( X i ,ci )T
i,
ci )
1
2
| T | y | T l | | T |
3
3
.
Una vez construido el clasificador d a partir de los prototipos de Tl, se clasifican todos los
patrones de Tt utilizando d y la proporcin de patrones incorrectamente clasificados
proporciona el estimador de error mediante conjunto de prueba. Formalmente, el estimador
mediante conjunto de prueba, Rts(d), se calcula
44
R ts (d )
1
( X i , ci )
| T t | ( X i ,ci )T t
(11)
Tomado de [18]
En las filas se representan las clases reales mientras que en las columnas se representan las
clases asignadas por el clasificador.
La lnea etiquetada con ``Total'' indica cuntos prototipos se han clasificado en la clase
referida por la columna correspondiente. La columna con la misma etiqueta indica el
nmero de prototipos de cada clase en el conjunto de prototipos. La suma de los valores de
la fila etiquetada con ``Total'' debe coincidir con la suma de la columna con la misma
etiqueta.
45
Los valores de la columna etiquetada con ``xito'' indican el porcentaje de acierto por clase.
Se calculan como el cociente entre el valor de la casilla correspondiente de la diagonal y el
valor en la columna ``Total'' que le corresponde. A partir de estos valores pueden deducirse
otros valores indicativos de la calidad de la clasificacin.
4.5.3
gi X P X wi i
(12)
N i v( X ) N v( X ) N
k
(13)
max
Ki ( X )
i 1....J
(14)
Conocida como regla de clasificacin por los k vecinos ms cercanos o simplemente kNN (del ingls, k nearest neighbour). Cuando k = 1, la regla anterior se conoce como la
conocida como regla de clasificacin del vecino ms cercano o simplemente 1-NN. Con
otras palabras, se puede afirmar que los prototipos cercanos tienden a ser de la misma clase
(1-NN) o bien a tener una probabilidad a posteriori similar (k-NN).
Como se puede ver, estas reglas proporcionan una estimacin directa de la probabilidad a
posteriori de cada una de las clases y las reglas de clasificacin son sencillas y fcilmente
interpretables.
Las reglas 1-NN y k-NN
Las reglas de clasificacin por vecindad estn basadas en la bsqueda en un conjunto de
prototipos de los k prototipos ms cercanos al patrn a clasificar.
La bsqueda no se realiza necesariamente en el conjunto completo de prototipos, T, por lo
que se denominar conjunto de referencia (y se notar por R) al conjunto de prototipos
47
sobre el que se buscar el(los) vecino(s) ms cercano(s). Se debe adelantar que R no tiene
porqu ser un subconjunto de T.
En cualquier caso, sea cual sea el conjunto de referencia debe especificarse una mtrica
para poder medir la proximidad.
Regla 1-NN
La regla de clasificacin por vecindad ms simple es la regla de clasificacin del
vecino ms cercano o simplemente 1-NN. Se basa en la suposicin de que la clase del
patrn a etiquetar, X, es la del prototipo ms cercano en R, al que se nota por XNN. Si | R| =
N esta regla puede expresarse como:
( X , X NN ) mini 1......N ( X , X i )
d X w c Si
( X NN , w c ) R
(15)
E # E1 E # 2
E#
J 1
(16)
Esto es, el error asociado a la regla 1-NN est acotado inferiormente por E* y superiormente
por aproximadamente dos veces E*.
48
4.5.4
Consideraciones computacionales
El costo computacional de las reglas K-NN y 1-NN son iguales, sin importar el valor de K
la bsqueda requiere explorar todo el conjunto de referencia. Esto significa que el coste de
la bsqueda depende linealmente de N. Ahora se debe considerar el coste del clculo de
cada distancia ONd (coste espacial). Adicionalmente se debe considerar el espacio de
almacenamiento requerido.
Si se considera que la optimizacin est garantizada cuando el conjunto de referencia es lo
suficientemente grande, la aplicacin de las reglas k-NN en su formulacin original
(fuerza bruta) resulta, en la prctica, inaplicable si se dispone de conjuntos de referencia
nmerosos y con datos de alta dimensionalidad.
De todo lo anterior se deduce que dos son los factores que determinan el coste
computacional de las reglas k-NN:
La dimensionalidad de los datos, d.
El tamao del conjunto de referencia, N.
Existen diferentes estrategias que permiten la aplicacin de la regla del vecino ms cercano
para conjuntos de referencia nmerosos con un coste computacional menor que el asociado
a la fuerza bruta. Estas estrategias pueden agruparse en dos clases:
Reducir el conjunto de referencia
Se basan en la seleccin de un subconjunto del conjunto de referencia que tenga las mismas
propiedades que el conjunto original para, una vez reducido, aplicar la regla del vecino ms
cercano en su formulacin original (fuerza bruta) sobre el nuevo conjunto.
Si M es el nmero de prototipos del conjunto reducido, el orden de complejidad sigue
siendo lineal respecto a M, con la salvedad de que ahora M < N (en muchos casos, y para
ser ms precisos, M < < N). No obstante, la seleccin de un conjunto de referencia reducido
que refleje todas las caractersticas del conjunto general no est garantizada.
Mejorar la eficiencia computacional de la bsqueda del vecino ms cercano
Estos mtodos trabajan con el conjunto completo de referencia y su objetivo es reducir el
nmero de clculos, eliminando aquellos que se consideran ``intiles'' o ``innecesarios''.
En estos casos pueden conseguirse rdenes de complejidad del orden de O (log N) en el
mejor de los casos. La utilizacin de estos mtodos no representa ningn peligro de
49
Otras consideraciones
En primer lugar, se debe recordar que para asegurar la optimizacin, N debe ser muy alto
(virtualmente infinito). En la prctica, sin embargo, se encuentran conjuntos finitos de
muestras y en ocasiones muy reducidos. Otro problema que afecta seriamente a la eficacia
(en trminos de tasa de acierto o bondad) de los mtodos k-NN es la presencia de
prototipos errneamente etiquetados en el conjunto de entrenamiento. Estos
prototipos suelen aparecer en zonas cercanas a las regiones de decisin y afectan
seriamente al resultado de la clasificacin. Los mtodos de edicin eliminan esos
prototipos que inducen a una correcta clasificacin. As, adems de conseguir una
reduccin (en ocasiones notable) del conjunto de referencia proporcionan un conjunto de
``calidad'' que hace incrementar la tasa de acierto de la regla 1-NN cuando se aplica sobre
conjuntos editados.
Edicin del conjunto de entrenamiento
En las consideraciones acerca de las reglas k-NN se ha introducido los motivos por los que
resulta conveniente editar el conjunto de referencia. En primer lugar, durante el
50
se
Redes Neuronales
Las redes neuronales son sistemas formados por un conjunto de sencillos elementos de
computacin llamados neuronas artificiales. Estas neuronas estn interconectadas a travs
de unas conexiones con unos pesos asociados, que representan el conocimiento en la red.
Cada neurona calcula la suma de sus entradas, ponderadas por los pesos de las conexiones,
le resta un valor umbral y le aplica una funcin no lineal; el resultado sirve de entrada a las
neuronas de la capa siguiente (en redes como el perceptrn multicapa).
Uno de los algoritmos ms usado para entrenar redes neuronales es el back-propagation,
que utiliza un mtodo iterativo para propagar los trminos de error (diferencia entre valores
obtenidos y valores deseados), necesarios para modificar los pesos de las conexiones
interneuronales.
51
Las redes neuronales han sido utilizadas con xito en diferentes tipos de problemas:
Auto-asociacin: la red genera una representacin interna de los ejemplos aportados, y
responde con el ms aproximado a su "memoria". Ejemplo: mquina de Boltzman.
Clasificacin de patrones: la red es capaz de clasificar cada entrada en un conjunto
predefinido de clases. Ej.: back-propagation.
Deteccin de regularidades: la red se adapta a los ejemplos de entrada, tomando de ellos
varias caractersticas para clasificarlos; en este caso, el conjunto de clases no est definido
de antemano, por lo que el aprendizaje es no supervisado. Ej.: red MAXNET, ART1,
mapas de Kohonen, red de Oja, etc. [5]
4.6.2
Algoritmos Genticos
Lgica Difusa
La lgica difusa o borrosa (Fuzzy logic) descansa en la idea que en un instante dado, no es
posible precisar el valor de una variable X, sino tan slo conocer el grado de pertenencia a
cada uno de los conjuntos en que se ha participado el rango de variacin de la variable.
El grado de pertenencia se cuantifica mediante la funcin de pertenencia f, que
normalmente se escoge de una forma trapezoide.
52
53
5
5.1
DIAGRAMA DE BLOQUES
Tx1
PC
RabbitCore
Amplificacin
RS232
Tx2
3610
ST
CS SCLK
Data OUT
A/D
Data IN
del
Detector de
envolvente
Rx1
DataIN: Informacin de
los sensores
Rx2
Filtrado
DataOUT: Resultado de
la conversin
MUX
Rx3
Paso-banda
Amplificacin 2
Amplificacin 1
Rx4
54
UNIDAD CENTRAL
Visualizacin de los
resultados
Interpretacin
Clasificacin
Segmentacin
Extraccin
propiedades
de
Datos
DIAGRAMA DE FLUJO
55
INICIO
El transductor emite la
seal ultrasnica
El transductor Rx recibe
el eco
Amplificacin de la seal
56
Se realiza la conversin
A/D
Segmentacin
Extraccin de propiedades
Clasificacin
Interpretacin
FIN
57
6
6.1
CRITERIOS DE DISEO
REQUERIMIENTO DE DISEO
El objetivo del proyecto de grado fue disear un sistema capaz de reconocer los cuatro
objetos propuestos en el proyecto, para esto se deba hacer un estudio de los ecos reflejados
por cada uno de los objetos para identificar caractersticas que permitieran su clasificacin.
Como es la primera vez que se haca dentro del grupo de robtica este proyecto, se
establecieron algunas limitaciones como la ubicacin y posicin de los objetos, para lo cual
se construy una plataforma de 46 cm. de largo por 26 cm. de ancho, cubierta por una capa
de esponja para evitar las reflexiones de la madera y evitar qu estas interfieran en las
mediciones. Se colocaron dos plataformas ubicadas una a 8 cm. y la otra a 25 cm., de los
transductores. La plataforma mas cercana es utilizada para las mediciones con los
transductores de 200 KHz debido a que el nivel de tensin utilizado slo permita alcanzar
hasta un poco ms de los 8cm. La segunda plataforma que se encuentra ubicada a 25 cm. es
utilizada para los transductores de 40 KHz ya que stos tienen un alcance mayor.
Los transductores de 200 KHz requieren de una tensin mayor que los de 40 KHz, por lo
que se dise una fuente que suministrara las dos tensiones para ambos transductores.
La plataforma deba tener un modo de operacin manual y otro controlado a travs del PC,
el modo manual permite que a travs de un pulsador se de la orden para reconocer y los
resultados son transmitidos a travs del puerto serial al programa y visualizados. Cuando el
control es desde el PC, la tarjeta debe recibir la orden a travs del puerto serial y enviar los
resultados a travs del mismo y el programa se encarga de visualizarlos y le da la opcin al
usuario de mostrar otras funciones como la de graficar los centroides, entrenar un objeto,
calcular la desviacin estndar de las mediciones, calcular coeficientes de reflexin y
transmisin y descargar libreras con la informacin necesaria para identificar un objeto
entrenado.
El requerimiento de memoria era de unos 40 Kb y la memoria flash del Rabbit tiene
capacidad hasta 256 Kb. Se sobredimension este requerimiento debido a que es un
prototipo y sobre esta tarjeta se desarrollar trabajo en un futuro.
Inicialmente no se establecieron requerimientos en el tiempo de entrega de resultados
debido a que lo que interesa en este proyecto es obtener los resultados y no el tiempo que
este tome. Sin embargo los tiempos registrados fueron buenos, debido a la simplicidad del
algoritmo y la frecuencia de operacin del Rabbit.
58
6.2
Componentes de hardware
59
Otra razn que justifica la seleccin de estos dispositivos es que el rango de alimentacin se
encuentra entre los utilizados por los dems dispositivos (+5V y -5V).
Amplificador de propsito general TL084 - 082
El sistema requiere un filtro pasabanda con frecuencia central en 200KHz y 40KHz para
eliminar los componentes de ruido que se puedan introducir en la seal y produzcan
mediciones errneas, adems se requiere un filtro pasabajas que disminuya la frecuencia de
la seal del eco.
Estos filtros son construidos con amplificadores operacionales. El TL084 posee un rango de
alimentacin +5V y -5V (voltaje trabajado por los dems dispositivos), reduciendo as la
necesidad de otra fuente de alimentacin, por otra parte posee varios amplificadores en un
slo integrado lo cual ahorra espacio y consumo de potencia.
Se requieren cinco (5) amplificadores, el TL084 posee cuatro amplificadores operacionales,
y el TL082 posee dos (2) amplificadores.
Comparador LM311
En el proyecto de grado de los ingenieros electrnicos Claudia Acosta Miranda y Jorge
Mario Len Albornoz, se implement el LM386 para la etapa de transmisin. Este
dispositivo es un amplificador de potencia diseado para uso en aplicaciones de bajo
consumo, pero no posee un ancho de banda suficiente para trabajar con seales de alta
frecuencia (200KHz). Por esta razn se utiliz un comparador LM311 el cual posee una
buena respuesta a frecuencias altas. El LM311 resiste voltajes altos de alimentacin (hasta
30V), lo cual es necesario para la etapa de amplificacin de los transductores de 200KHz.
Tambin se requiere un detector de umbral, el cual detecta un valor establecido (voltaje
umbral) de la envolvente.
La funcin de este dispositivo es comparar la seal de pulsos con un voltaje de referencia y
a la salida entrega un alto o un bajo. El valor del alto es el mismo voltaje con que se
alimenta el dispositivo. Los transductores de 40KHz se alimentan con 12V y los de
200KHz con 25V.
Convertidor DC DC LT1054
Los amplificadores operacionales, los amplificadores de ganancia programable y los
multiplexores se alimentan con voltajes negativos, por esta razn se requiere realizar una
conversin de voltaje. El LT1054, convierte un nivel de tensin positivo a uno negativo, la
61
corriente de salida es de 100mA, sus prdidas son bajas, de 1.1 V a 100 mA y posee un
amplificador de referencia y error para regulacin de la tensin de salida.
Multiplexor MPC509
Uno de los propsitos del prototipo es ser implementado en aplicaciones futuras. La tarjeta
tiene la capacidad de obtener seales de cuatro transductores receptores diferentes, pero
analiza la seal de cada transductor, por esta razn es necesaria la utilizacin de un
multiplexor que seleccione el transductor receptor correspondiente al eco que se desee
analizar.
Se escogi un multiplexor de 4 entradas diferenciales y 8 entradas individuales que permita
utilizar mas de un par transductor receptor. Por otra parte el MPC509 se alimenta con +5V
y -5V, es el voltaje utilizado por los dems dispositivos.
Buffer CD74HCT365
El voltaje lgico mnimo de los amplificadores de ganancia programable y el multiplexor es
de 4V, el Rabbit 3000 no entrega voltaje superior al 70% de 3.3V lo que equivale a 2.4V,
por esta razn es necesaria la implementacin de un buffer.
El CD4HCT365 es un buffer que convierte los niveles de voltaje de 3.3V a 5V, posee como
mnimo de voltaje lgico bajo 0.8V y mnimo de voltaje bajo alto 2V y contiene seis (6)
entradas y seis (6) salidas respectivamente. Estas especificaciones se acomodan a los
requerimientos mencionados.
Transductores de 40kHz y 200KHz
Desde el comienzo del proyecto de grado se estableci que se utilizara sensores de
ultrasonido, debido a que se son menos costosos que otros sensores que utilizan algunos
sistemas de reconocimiento. La implementacin de los transductores de 40KHz se debe a
su uso en la mayora de aplicaciones con ultrasonido, adems de su bajo costo. Existen
otros transductores que poseen un haz ms directivo como es el caso de los transductores a
frecuencias altas. El objetivo de la utilizacin del par de transductores de 200KHz es
comparar su seal con el obtenido con el par de 40KHz y observar si es posible obtener
mejores resultados o datos ms confiables.
El ancho del haz de los transductores implementados es de es 70 para los de 40KHz y 7
para los de 200KHz.
62
6.2.2
Componentes de software
Dynamic C
Dynamic C es un software de desarrollo industrialmente probado, un sistema de desarrollo
de lenguaje C. Opera en PC bajo Windows 95, 98, NT, ME y 2000 e incluye:
Rpido compilador C con compilaciones de un slo paso
Cientos de funciones en las libreras de cdigo fuentes y programas de muestra
Editor fcil de usar.
El desarrollo de software con Dynamic C es sencillo puesto que el cdigo C, cdigo
Assembler o hasta cdigo intermezclado de C con assembler, pueden ser escritos,
compilados y probados sin la necesidad de salir del ambiente de desarrollo Dynamic C.
Este es un software de diseo y uso exclusivo de la familia Z-world y otros controladores
basados en los microprocesadores Rabbit. El dynamic C integra las funciones de desarrollo,
editar, enlazar, cargar y depurar.
En el programa, de hecho compilar, enlazar y depurar se encuentran en una misma funcin.
Posee un editor de texto fcil de utilizar. Los programas pueden ser ejecutados y depurados
interactivamente en el cdigo fuente o en el nivel de cdigo de mquina. Adems de mens
desplegables y combinaciones con el teclado para llamar ciertas funciones fcil y
rpidamente.
Tambin soporta lenguaje de ensamblador durante la programacin, por lo que no es
necesario cerrar C o el sistema de desarrollo para escribir un cdigo en lenguaje de
ensamblador, el lenguaje C y el ensamblador pueden ser escritos en la misma ventana de
cdigo.
La depuracin incluye la posibilidad de utilizar instrucciones para mostrar las variables,
expresiones y puntos de corte adems de otras caractersticas de depuracin avanzada.
Las expresiones de reloj pueden ser utilizadas para computar expresiones en C que
involucran variables del programa de la tarjeta o funciones. Las expresiones de reloj
pueden ser evaluadas mientras se encuentra el programa detenido en un punto de corte o
mientras se corre el programa en la tarjeta.
63
Dynamic C tiene una gran cantidad de libreras de funciones, todas escritas en cdigo
fuente. Estas libreras ayudan a la programacin en tiempo real, entradas y salidas a nivel
de mquina, y proveen cdigos estndares y funciones matemticas.
Eagle Layout Editor: Diseo del Circuito Impreso
El circuito impreso se realiz con la ayuda del software Eagle Layout Editor. Este es un
programa de dibujo adaptado para el diseo de circuitos impresos. Bsicamente consiste en
libreras donde se encuentran los diferentes dispositivos utilizados en los circuitos. Cada
dispositivo consta de un smbolo y un encapsulado los cuales corresponden al esquemtico
e impreso respectivamente. Si los elementos a utilizar no se encuentran en sus libreras,
permite agregarlos. Las conexiones que se realizan entre los smbolos se reflejan en la
tarjeta.
Una vez se termina el diseo, en la tarjeta se observan todos los dispositivos seleccionados
con las conexiones tal como fueron establecidas en el esquemtico, pero requieren ser
organizadas de acuerdo a las dimensiones deseadas.
Visual Basic 6.0
El software de visualizacin del sistema es Visual Basic 6.0 lo cual proporciona una
interfaz grfica, fcil de utilizar por el usuario. El programa con el cual se va a realizar
dicha interfaz debe facilitar su realizacin.
Visual Basic 6.0 es uno de los lenguajes de programacin que ms entusiasmo despiertan
entre los programadores de PCs, tanto expertos como novatos. En el caso de los
programadores expertos por la facilidad con la que desarrollan aplicaciones complejas en
poqusimo tiempo (comparado con lo que cuesta programar en Visual C++, por ejemplo).
En el caso de los programadores novatos por el hecho de ver de lo que son capaces a los
pocos minutos de empezar su aprendizaje. El precio que hay que pagar por utilizar Visual
Basic 6.0 es una menor velocidad o eficiencia en las aplicaciones.
Visual Basic 6.0 es un lenguaje de programacin visual, tambin llamado lenguaje de 4
generacin. Esto quiere decir que un gran nmero de tareas se realizan sin escribir cdigo,
simplemente con operaciones grficas realizadas con el ratn sobre la pantalla.
Visual Basic 6.0 es tambin un programa basado en objetos, aunque no orientado a objetos
como C++ o Java.
Visual Basic 6.0 est orientado a la realizacin de programas para Windows, pudiendo
incorporar todos los elementos de este entorno informtico: ventanas, botones, cajas de
64
ANLISIS COMPARATIVO
Unidad de procesamiento
65
6.3.2
Sistema de adquisicin
Etapa de amplificacin
En esta etapa se avaluaron dos conversores, el AD7892 y el AD7475 ambos cumplen con
los requerimiento de la frecuencia de muestreo, pero el primero por tener una interfaz
paralela es de una tamao mayor y adems requiere mayor nmero de pines del procesador.
El AD7475 por tener una interfaz serial, tiene un tamao menor, ocupa menos pines del
procesador y adems se puede controlar con libreras ya existentes en la Rabbit diseadas
para los convertidores seriales.
66
7
7.1
Tarjeta de alimentacin.
Amplificacion de la Transmisin
Los pulsos que excitan a los transductores transmisores de 40KHz y de 200KHz son
generados por el microprocesador, pero el Rabbit no posee ni la corriente ni el voltaje
necesario para excitarlos. Por esta razn es necesario construir una etapa de amplificacin
de la seal de pulsos. Para los transductores de 40KHz se eleva el voltaje de los pulsos de
3.3V a 12V y para los 200KHz de 3.3V a 25V.
En la figura 15 se observa el diagrama de conexiones de la etapa de amplificacin para los
dos transductores Tx1 y Tx2. Como se explic anteriormente se utiliz el comparador
LM311 por su buena respuesta a frecuencias altas.
3.3V
Bsicamente el circuito cuando detecta el voltaje umbral de 2 genera un alto en la
salida con un valor equivalente al voltaje de alimentacin, en este caso 12V para los
transductores de 40KHz y 25V para los transductores de 200KHz.
67
Etapa de Recepcin
7.1.2
Multiplexor MPC509
7.1.3
69
70
A)
71
B)
7.1.4
R1 R 4
1
2C1* Frecuencia Central
(17)
R3 19 * R1
R2
R1
19
La salida de cada filtro esta conectada al jumper el cual dependiendo a la frecuencia que se
este trabajando conectara el filtro correspondiente a la entrada del segundo PGA.
Ajustando el potencimetro de 10K a la entrada del filtro se obtuvo una ganancia de
10V/V.
El la figura 18 se puede observar los valores hallados para cada frecuencia.
72
7.1.5
7.1.6
Filtro Pasabajas
El filtro mostrado en la figura 20 de segundo orden que atena las frecuencias mayores a
cuatro kilohertz provenientes del rectificador.
El filtro pasabaja junto con el rectificador de onda completa, forma un detector de
envolvente que tiene con objetivo disminuir la frecuencia de muestreo del sistema. La
salida del detector de envolvente esta conectada al detector de umbral y al convertidor A/D,
los cuales se explicaran ms adelante.
Figura 20 Filtro Pasabajas
74
7.1.7
Detector de Umbral
Para reconocer los objetos se tienen en cuenta diferentes parmetros como los son
Tiempo de vuelo
75
7.1.8
Luego que la seal ha sido condicionada por medio de los circuitos anteriores es necesario
convertir la informacin anloga a datos discretos para ser procesada por el Rabbit.
El AD7475 posee una resolucin de 12 bits, una entrada y una salida. Los datos son
enviados en tramas de 16bits, de los cuales los 4 primeros son ceros y los 12 restantes son
los bits la seal digitalizada, comenzando por el mas significativo.
El convertidor analgico digital AD7475 esta conectado al AD780 debido a que es
necesario un voltaje de referencia el cual proporciona el rango de los valores de voltaje
permitidos a la entrada del ADC (0-2.5V).
El VDRIVE es el voltaje que el convertidor maneja para comunicarse con otros
dispositivos, en este caso el AD7475 se conecta directamente al microprocesador, por lo
tanto el VDRIVE es de 3.3 V.
76
Buffer CD74HCT365
Para adecuar los niveles de voltajes lgicos utilizados por los dispositivos a los niveles altos
entregados por el microprocesador se utiliz un buffer. En la figura 23 se observa sus
respectivas conexiones; 1A, 2A, 3A y 4A indican los pines que se conectan al
microprocesador y 1Y, 2Y, 3Y y 4Y indican los pines conectados a los dispositivos.
77
78
R2
Vout 1.25V 1
R1
(18)
La figura anterior muestra el circuito implementando para obtener 24V DC, consta de un
puente rectificador que recibe la seal AC del transformador, un fusible y el regulador
LM7824 que limita el voltaje de salida a 24V. Para 12V y 5V se implement el mismo
diagrama de conexin, como se puede observar en la figuras 25 y 26.
79
Figura 26 Etapa 5V
80
7.1.11 Microprocesador
El microprocesador Rabbit 3610 posee una velocidad de procesamiento de 22MHz, 33
puertos paralelos (soportan hasta 5V), posee una memoria flash de 256KHz y 128KHz de
memoria RAM.
En la figura 29 se observa la distribucin de los puertos de entrada y salida del
microprocesador.
81
Reconocimiento Simple
Reconocimiento Completo
Entrenamiento
Librera
El programa del Microprocesador posee en su base de datos los 4 objetos para los
transductores de 40 y 200 khz.
Cada objeto tiene asignado un cdigo, y por cada objeto en cada frecuencia se tiene
almacenado 5 datos, correspondientes al tiempo de vuelo, y el valor de la amplitud de la
envolvente en 4 momentos, Tiempo de vuelo + (50,100, 150 y 200) s.
Si la tarjeta se encuentra en modo manual, el programa slo espera que se presione el
pulsador de Start para ejecutar la rutina de Reconocimiento Simple, por otro lado si se
encuentra en el modo PC, el Microprocesador esperara recibir alguna orden desde el PC a
travs del puerto serial.
Para ejecutar la funcin Reconocimiento Simple se enva a travs del PC el cdigo ASCII
a a la tarjeta, con esta funcin se da la orden de reconocer el objeto que es ubicado en la
plataforma.
Una vez recibido el caracter a, se llama a la funcin pwm1 la cual genera el tren de
pulsos que excitar a los transductores, el nmero de pulsos y la frecuencia de estos
dependern si se trabaja a 40 o 200 khz. Despus de haber terminado de emitir los pulsos,
se activa un temporizador de 196 us para los transductores de 4Khz y 960 us para los de
200Khz, durante el cual no se espera recibir algn eco, con el fin de evitar interferencias
por causa del ruido u otros elementos. Una vez finalizado, se activa un contador que espera
recibir la seal del detector de umbral, este contador dar un estimado destiempo de vuelo
del eco, cuando se detecta la envolvente se detiene el contador y 50 s despus se llama a la
funcin adc que activa el convertidor anlogo digital para tomar las 4 amplitudes.
Con los 5 parmetros calculados, se pasa a la rutina de clasificacin, esta rutina calcula la
distancia euclideana entre el centroide adquirido y los centroides de cada uno de los objetos
en la base de datos del microprocesador. Cada vez se detecta cual es el centroide ms
cercano, se va almacenando en un acumulador el nmero de veces que determinado objeto
fue reconocido, es as una vez terminada 100 mediciones, se cuenta cual fue el objeto ms
concurrente, y es el cdigo de este objeto el que es transmitido al PC junto con las
probabilidades de los dems objetos como se ilustra en la figura 30.
83
Frecuencia
Codigo
Prob 1
Prob 2
Prob 3
....
Frecuencia
Tf1
A1
A2
A3
A4
Medicin # 1
Tf1
A1
A2
A3
A4
Medicin # 2
Tf1
A1
A2
A3
A4
Codigo
Prob 1
Prob 2
Medicin # 100
Prob 3
....
84
Frecuencia
Tfpromedio
Por ltimo se aadi a la tarjeta la funcin de librera. Esta funcin permite que si se tiene
objetos previamente entrenados y almacenado en el programa principal, estos puedan ser
descargados a la tarjeta.
Con la transmisin del carcter f la tarjeta esperara recibir inmediatamente despus la
frecuencia del objeto, su cdigo y los datos como se muestran en la figura 33.
Figura 33 Librera
Frecuencia Cdigo
Tf1
A1
A2
A3
A4
...
Los 8 bits ms significativos quedan almacenados en la primera posicin del vector y los 8
bits menos significativos en la segunda posicin del vector.
Por esto se realiza un ajuste almacenando ambos bytes en su posicin correspondiente en
una sola variable de tipo entero, con el siguiente comando, adc_sample1 [k] = (temp <<8) +
(adc_reading1 [1]) & 0x0fff, con este se finaliza la funcin de conversin.
CLASIFICACION ( )
Para reconocer el sistema toma dos parmetros, que son la amplitud 2 y la amplitud 4 para
calcular las distancia con los centroides de los objetos previamente almacenados. Se
escogieron estos dos parmetros debido a que se obtuvieron mejores resultados con ellos
luego de nmerosas pruebas. El clculo de la distancia de estos centroides es bsicamente
el clculo de la distancia entre dos puntos, como ejemplo se tiene el siguiente comando:
distan[j][0]=sqrt(pow((adc_sample2[0]centro3[j][amp4]),2))
centro3[j][amp2]),2)+pow((adc_sample4[0]-
La variable distan almacena las distancias con cada uno de los objetos por lo que tiene 5
pocisiones, luego se busca cual de estas distancias es la menor para determinar cual fue el
objeto mas parecido.
Es en esta rutina donde adems cuando el reconocimiento es completo, que se transmiten
los datos de las mediciones, es decir el tiempo de vuelo y las cuatro amplitudes.
87
INICIO
Declaracin de
Constantes
Declaracin de
Variables
Configuracin de
Puertos
5
SI
Modo
Manual?
Se presion
el
interruptor?
NO
NO
SI
88
SI
Reconocim
iento
Simple?
NO
SI
Reconocim
iento
Completo?
NO
Entrenamie
nto?
SI
NO
SI
Librera?
NO
5
89
Transmite la frecuencia a la
que se esta trabajando
6
Genera el tren de
pulsos
Temporizador de
tiempo muerto
Activa el ADC y
toma las 4
7
90
Haba escogido
inicialmente
reconocimiento
completo?
SI
NO
Nmero de
mediciones =
100?
SI
NO
91
3
Transmite la frecuencia a
la q se esta trabajando
Genera el tren de
pulsos
Temporizador de
tiempo muerto
Activa el ADC y
toma las 4
Nmero de
mediciones =
300?
SI
NO
92
93
NO
Frecuencia =
40?
SI
Se va almacenar
otro objeto?
SI
Se va almacenar
otro objeto?
NO
SI
NO
94
El men Archivo tiene la opcin de salir del programa. El men Ejecutar posee cinco
submens, Reconocimiento Simple, Reconocimiento Completo, Entrenamiento,
Grficar y Librera.
95
Reconocimiento Simple
Permite ver al usuario el objeto reconocido por el par de transductores ultrasnico, la
imagen almacenada del objeto, informacin adicional del usuario y el nmero de veces que
el sistema reconoci un objeto determinado de los n objetos que se encuentran en la base de
datos. Esta funcin tiene la capacidad de mostrar 30 objetos almacenados en la base de
datos en pantalla.
En el momento que el usuario presione click en esta opcin se enva el carcter a
indicndole al microprocesador que se est solicitando reconocimiento simple, luego el
Rabbit enva (tramas 8 bits) la frecuencia a la que se esta trabajando, cdigo del objeto
identificado y el nmero de veces que el sistema reconoci cada uno de los objetos que se
encuentran en la base de datos. Cuando el software detecta que existen datos en el buffer de
recepcin se activa el evento OnComm y se guardan los datos recibidos en un vector. La
longitud del vector depender del nmero de objetos que se encuentren en la base de datos
ms dos datos adicionales (frecuencia y cdigo).
Cuando el cdigo recibido y almacenado en el vector, el software lo ubica en la base de
datos y muestra en pantalla el objeto al cual pertenece dicho cdigo.
96
Objetos en la
base de datos
del
Ptrobabilidad
es de cada
objeto
Informacin
extra.
Reconocimiento Completo
Esta opcin adems de reconocer el objeto, permite calcular la desviacin estndar de cada
parmetro (Tf, A1, A2, A3, A4), y la distancia entre los centroides. La cantidad de
mediciones que se toman para determinar la desviacin estndar es el nmero de objetos de
la base de datos, multiplicados por 25. Por ejemplo si existen 4 objetos la cantidad de
mediciones por parmetro sera 100.
Cuando el sistema enva el carcter d le solicita al microprocesador Reconocimiento
Completo y este responde enviando; frecuencia, mediciones de los parmetros y cdigo del
objeto. Luego que los datos estn almacenados en el vector se realiza la ecuacin
correspondiente para determinar la desviacin estndar de cada parmetro y se muestra en
pantalla.
97
Desviacion
estandar
Distancia
entre
los
centroides
Entrenamiento
Este evento entrena el sistema, incluyendo en la base de datos nuevos objetos. Cuando se
presiona click en este submen se reciben un promedio de cada uno los parmetros del
objeto entrenado (Tf, A1, A2, A3, A4), se le asigna un nombre al objeto entrenado, su
imagen correspondiente y la informacin de dicho objeto que se desee almacenar. Por
ltimo se enva a la base de datos en la opcin guardar. De esta manera el usuario tiene la
opcin de agregar o remplazar objetos en la base de datos existente.
El carcter s indica al microprocesador la rutina de entrenamiento y la adicin de un
nuevo objeto en su base de datos.
98
El Rabbit ejecuta 300 mediciones de cada parmetro (Tf, A1, A2, A3, A4), y enva el
promedio de estos junto con la frecuencia utilizada.
La tcnica de recepcin de datos es la misma utilizada en Reconocimiento Simple.
Figura 39 Entrenamiento
Objeto Entrenado
Envia a la
base de datos
Informacion
Extra
Centroide
Grficar
Permite grficar los centroides de los objetos almacenados en la base de datos. Inicialmente
se escoge la frecuencia (40KHz, 200KHz), para determinar qu objetos desea grficar, si
los entrenados con los transductores de 40KHz o los entrenados con los transductores de
200KHz, luego se seleccionan los objetos a grficar y los parmetros. De esta manera se
puede determinar qu parmetros (Tf, A1, A2, A3, A4) son suficientes para el
reconocimiento.
99
Las acciones que ejecuta este evento depende de lo que el usuario desee, en este caso no
existe ninguna comunicacin con el microprocesador.
Cuando la frecuencia es seleccionada el software busca la tabla correspondiente y muestra
en pantalla los objetos almacenados en dicha tabla. Luego de estar seleccionado los objetos
y los parmetros, se grfican los valores almacenados en la tabla.
Figura 40 Funcin Grficar
Grfica de los
centroides
Objetos en la
base de datos
Parametros
Librera
Esta opcin permite descargar en el microprocesador los centroides de los objetos que sean
seleccionados por el usuario.
Existen dos bases de datos; la primera es la manejada por el microprocesador y la segunda
es la del software de visualizacin. Ambas contienen los mismos objetos entrenados.
100
Pero si el usuario desea entrenar el prototipo con ciertos objetos, esta opcin le permite
remplazar los centroides que existen en el Rabbit por los centroides de los objetos
seleccionados por l. En la figura 41 se puede observar los objetos entrenados a una
frecuencia de 40KHz.
En el botn ENVIAR LIBRERIA se transmite el carcter f indicando al
microprocesador que debe borrar los centroides que existen en su base de datos y
remplazarlos por los que recibe.
Figura 41 Funcin Librera
Objetos en la
base de datos
Envia a la tarjeta
los
centroides
seleccionados
101
Modo Manual
Realiza el Reconocimiento Simple de manera manual, es decir el microprocesador enva
los datos sin recibir ninguna orden del PC. Es necesario cambiar desde la tarjeta por medio
de un jumper que indica la opcin que se desea trabajar. Para regresar al modo PC se debe
presionar el botn Cerrar Modo Manual.
Figura 43 Modo Manual
Objetos en la
base de datos
Imagen
objetos
del
Informacion
Extra
Cierra
Manual
Modo
102
Calculo de Coeficiente Tx y Rx
Calcula los la impedancia acstica, la energa transmitida y la energa reflejada del
material.
Figura 44 Ventana calcula los coeficientes de Tx y Rx
Clculo de la
energa de los
matriales
trabajados
Clculo de la
Energa de un
Nuevo material
Por ltimo el men Ayuda con las opciones Contenido y Acerca de permite al
usuario conocer la funcin de cada submen.
103
Contenido
Muestra una explicacin de las funciones de cada submen.
Figura 46 Ayuda del programa
Eleccion
Menu
del
Descripcion de
las funciones
Eleccion
submenu
del
104
Barra de Herramientas
Fueron diseadas con el fin de facilitarle al usuario el acceso a los comandos ms utilizados
de la barra de mens, en esta barra se encuentran los botones para activar los comandos
Reconocimiento Simple, Reconocimiento Completo, Entrenamiento, Grficar y Ayuda.
El comportamiento de los botones en la barra de herramientas es igual a la de todas las
aplicaciones de Microsoft Windows que utilicen una barra de herramientas.
Figura 47 Barra de Herramientas
INICIO
10
Carga Base de Datos
NO
Rcto Simple
Click?
SI
Enva a, almacena
datos recibidos
1
105
Rcto
Completo
Click?
NO
SI
Enva d, almacena
datos recibidos
2
NO
Entrenamien
to Click?
SI
Enva s, almacena
datos recibidos
3
NO
Librera
Click?
SI
106
NO
Grficar
Click?
SI
NO
Modo
Manual
Click?
6
6
SI
NO
6
6
Clculos
Coeficientes
Click?
NO
SI
107
8
NO
Ayuda
Click?
SI
9
NO
Salir Click?
10
SI
FIN
108
7.2
del
Tarjeta
de
Alimentacin
Acondiciona
miento
109
Estructura
Hadware
sistema
del
110
8
8.1
8.1.1
PRUEBAS Y RESULTADOS
ETAPAS DE PRUEBA
Estructura Implementada
En esta etapa se evalu el diseo de la estructura que fijaran los transductores y en dnde
se realizara el reconocimiento de los objetos.
8.1.2
Microprocesador
El ncleo del sistema es el que maneja todas las seales de control y realiza el
reconocimiento de los objetos adems de todas las funciones explicadas anteriormente. Por
esta razn la determinacin del microprocesador es una de las etapas de pruebas ms
importantes y delicadas del proyecto, debido a que con una buena escogencia de la misma,
se facilita el desarrollo de las pruebas finales
8.1.4
Pruebas Adicionales
111
8.1.5
Etapa Final
Las pruebas del prototipo final, se realizaron en esta fase. En donde junto con la estructura,
la tarjeta de alimentacin, la etapa de adquisicin, los transductores y el microprocesador se
evaluaron diferentes parmetros que miden la eficiencia y confiabilidad del sistema.
8.2
8.2.1
El sistema esta conformado por dos transductores de 40KHz, un (1) transmisor y un (1)
receptor, y dos transductores de 200KHz, un (1) transmisor y un (1) receptor, las
disposicin de los sensores es paralela entre cada transductor. En el momento de la
operacin los sensores estn enfocados a la pieza a detectar, formando un plano paralelo
con la superficie donde se encuentran ubicados los objetos.
La estructura en la cual se realiza el entrenamiento y se evala el sistema es esttica y
consta de 2 perforaciones en las cuales ubican 2 tubos de aluminio que sostiene a la
estructura que les da soporte a los dos (2) transductores
Con el fin de evitar la reflexin de las ondas ultrasnicas en la superficie de madera, esta
fue recubierta con una capa de esponja de 4 cm. de espesor.
Este espesor fue escogido luego de realizar varias pruebas, en las cuales se obtuvo como
resultado que a partir de un espesor de 4 cm, se lograba eliminar la reflexin de estas ondas
cerca de su totalidad.
Inicialmente se opt por una estructura en la cual los transductores formaban un plano
perpendicular a la superficie en donde se encontraban los objetos a detectar, pero esta
plataforma present problemas al realizar pruebas con el cono debido a que la forma de este
objeto dispersaba la onda transmitida por consiguiente, la amplitud del eco recibido era
muy pequea.
Los resultados obtenidos en el diseo de la estructura fueron los esperados, debido a que se
pueden realizar mediciones precisas, en diferentes ambientes, es de fcil movilidad, no
introduce error a la seal de eco recibida y permite trabajar a las dos frecuencias (40Khz y
20Khz). Aproximadamente en tres semanas se construy la estructura final.
112
8.2.2
Esta etapa se desarroll a partir del diagrama implementado por los ingenieros Acosta
Miranda y Jorge Mario Len Albornoz [1]. Inicialmente, se realiz el montaje de la etapa
de acondicionamiento en un PCB de 10X10cm y se analiz la seal envolvente del eco
recibido utilizando los transductores de 40Khz por ser el transductor ultrasnico ms
comercial que existe en el mercado. Cuando se adquirieron los transductores de 200Khz se
acondicion la etapa de adquisicin para realizar las pruebas correspondientes con estos
transductores.
El proyecto de grado de los ingenieros electrnicos Claudia Acosta Miranda y Jorge Mario
Len Albornoz, se implement el LM386 para la etapa de transmisin. Este dispositivo es
un amplificador de potencia diseado para uso en aplicaciones de bajo consumo, pero no
posee un ancho de banda suficiente para trabajar con seales de alta frecuencia (200KHz).
Por esta razn fue necesario utilizar un comparador LM311 el cual posee una buena
respuesta a frecuencias altas, y resiste voltajes altos de alimentacin (hasta 30V), lo cual es
necesario para la etapa de amplificacin de los transductores de 200KHz.
En el diseo de la tarjeta final, se aadieron los multiplexores para la seleccin de los
transductores receptores, el detector de umbral para captar la seal de eco, el ADC para
digitalizar la seal de eco, y el microprocesador que maneja las seales de control tales
como la amplificacin de los PGA y la seleccin de los transductores receptores por medio
del multiplexor, la seal del detector de umbral y el ADC.
Para desarrollar esta fase fue necesaria la implementacin de un osciloscopio, una fuente de
voltaje y el software de diseo de las tarjetas impresas (Eagle 4.11). Aproximadamente en
3 meses se desarrollo la etapa de adquisicin final.
8.2.3
Microprocesador
En las primeras pruebas se utiliz el PIC 16F873 para generar los pulsos que excitan al
transductor transmisor, despus de su funcionamiento se procedi a determinar un
microprocesador que controlara las seales de la etapa de adquisicin y generara el tren de
pulsos para excitar tanto los transductores de 200Khz y los de 40Khz.
Luego del escoger el Rabbit 3610 como ncleo del sistema se prob si el PWM poda
generar el tren de pulsos para excitar a los transductores, observando si la frecuencia de
reloj del microprocesador era suficiente para generarlos. Tambin era necesario determinar
si la frecuencia de muestreo requerida, poda ser generada por el Rabbit 3610.
113
La realizacin de estas pruebas se llev a cabo por medio de una tarjeta provisional, en
donde slo se observaba las seales generadas por el Rabbit, y el funcionamiento del
algoritmo de reconocimiento.
Se implement un osciloscopio para observar estas seales, una fuente de voltaje que
alimentaba la tarjeta de prueba y el software Dockligth V.13 (comunicacin serial) por el
cual se observaban los datos que enviaba el microprocesador.
En tres semanas se logr el funcionamiento total del algoritmo del microprocesador.
8.2.4
Pruebas Adicionales
Adems de los objetos en aluminio tambin se construyeron en acero, madera e icopor con
el fin de observar si era posible determinar la diferencia de material entre ellos.
En este caso se utilizaron ambas frecuencias (40Khz y 200Khz) y se analiz si exista
alguna diferencia entre los ecos recibidos del mismo objeto pero de diferente material.
Estos materiales fueron escogidos por su diferencia notoria en cuanto a sus densidades
Del mismo modo se prob con las agujas a diferencia que slo se utilizaron los
transductores de 200Khz, debido a que su haz es mas directivo que el de los de 40Khz y de
esta manera exista mayor probabilidad que captara un objeto tan pequeo como lo es la
aguja de una jeringa.
Al igual que la etapa de acondicionamiento de seal se utiliz un osciloscopio para ver el
eco emitido por los transductores y una fuente de voltaje que alimentaba la tarjeta de
adquisicin.
La difcil adquisicin de los transductores de 200Khz demor un poco tres semanas mas el
desarrollo de esta fase, en aproximadamente un mes se finalizaron las pruebas.
8.2.5
Etapa Final
Con la tarjeta de adquisicin final, el Rabbit Core 3610, estructura final, la fuente de
alimentacin, los transductores y el software de visualizacin se da paso a las pruebas de
todo el sistema.
114
A partir de la envolvente del eco se calcularon cinco parmetros, el tiempo de vuelo tf, la
amplitud en un tiempo tf + 50 s = A1, en un tiempo tf + 100 s = A2, en un tiempo tf + 150
s = A3 y en un tiempo tf + 200 s = A4, estos se muestran en la figura 51.
La seleccin de los tiempos en los que se realizaron las mediciones, se hizo de forma
empirica. Teniendo en cuenta que mayor parte de la informacin se encuentra contenida
antes de llegar al maximo de la envolvente que esta aproximadamente en tf + 200 s, se
inicio tomando dos muestras, una en tf + 100 s y la otra en tf + 200 s. Posteriormente se
tomaron dos mediciones adicionales, una en tf + 50 s y la otra en tf + 150 y as determinar
si los resultados obtenidos con stas eran mejores.
Figura 51 Parmetros de la Envolvente
Con base en los parmetros adquiridos se establecen las reglas para la construccin del
clasificador. En la tabla 2 se muestran las combinaciones realizadas en la etapa de prueba.
A partir de estos parmetros se evala el rendimiento a medida que se incluye cada uno de
estos en el clasificador.
115
116
8.3
8.3.1
RESULTADOS
Estructura Implementada
Amplitud de la
esponja
El plano que soporta a los objetos es removible, posee una forma cuadrada y un borde de tal
manera que le ofrece estabilidad a los objetos. En el caso de la esfera fue necesario realizar
un pequeo agujero en el centro del plano cuadrado para ofrecerle mayor estabilidad y
realizar mediciones ms precisas.
En la parte inferior se encuentran fijados los transductores de 200Khz con un ngulo entre
ellos debido a la directividad del haz que poseen. La base que soporta a los objetos se
encuentra a una distancia de 5cm de los transductores ya que si se desea una mayor
117
Transductores
de 40 KHz
Transductores
de 200 KHz
Base
para
mediciones con
200Khz
Base
para
mediciones con
40Khz
8.3.2
Luego de realizar nmerosas pruebas con la etapa de adquisicin implementada por los
ingenieros Acosta Miranda y Jorge Mario Len Albornoz [1], se observ que la seal
obtenida era suficiente para su analisis.
En la etapa de adquisicin se realizaron pruebas con las figuras de aluminio.
En la figura 54 se observa el tren de pulsos generador por el microprocesador antes y
despus de la amplificacin para los transductores de 40Khz y en la figura 55 para los
transductores 200Khz.
118
Amplitud 3.3V
A)
Amplitud 12V
B)
119
Amplitud 3.3V
A)
Amplitud 24V
B)
120
Como se puede observar en las figuras anteriores los pulsos generados por el
microprocesador posee un voltaje de 3.3V y son amplificados a 12.1V para 40Khz y 24.3V
para 200Khz.
Utilizando como objeto de prueba el cilindro y frecuencia de 40Khz, en la figura 56 se
puede observar el eco que entregan los transductores sin ningn acondicionamiento y en la
figura 57, 58, 59 y 60 cada una de las etapas de acondicionamiento de la seal hasta obtener
la envolvente de la seal.
Figura 56 Seal de eco
Amplitud
entregada por el
Rx
(muy
pequea)
121
Amplitud de la
1era
etapa
amplificacion
122
Amplitud de la
2da etapa de
amplificacin
Umbral
establecido
mV)
(280
123
Amplitud
cubo 40Khz
del
A)
124
Amplitud
del
cilindro 40Khz
B)
Amplitud de
esfera 40Khz
la
C)
125
Amplitud
del
cono 40Khz (min
de los dems
objetos)
D)
Figura 62 Seal Envolvente con 200KHz A) Cubo B) Cilindro C) Esfera D) Cono
Amplitud
del
cubo 200Khz
A)
126
Amplitud
del
cilindro 200Khz
B)
Amplitud de la
esfera 200Khz
C)
127
Amplitud
del
cono 200Khz
D)
En la envolvente de los objetos tanto para los de 40Khz como para los de 200Khz se puede
observar la diferencia en cuanto voltaje entre cada una de ellas, permitiendo as diferenciar
entre cada objeto.
8.3.3
Microprocesador
Los resultados en cuanto a la aplicacin del ncleo fueron satisfactorios, ya que cumple con
los requisitos del proyecto, como nmero de puertos entrada salida, frecuencia de operacin
y memoria.
En cuanto al PWM del Rabbit, no se logr generar el tren de pulso, debido a que este no
generaba seales con la frecuencia de 200 Khz, por lo que fue necesario realizar una rutina
en lenguaje ensamblador que nos permitiera generarla (figura 63).
128
15
pulsos
generados
para
40Khz
A)
50
pulsos
generados
para
200Khz
B)
129
Cuando el voltaje umbral es detectado, la seal del CS del conversor se activa y empieza a
tomar muestras cada 50us, es decir la A (50us), A (100us), A (150us), A (200us). La seal
de reloj genera 16 ciclos por cada muestra, ya que los datos son de 16 bits y la seal slo se
muestrea en estos puntos, como se observa en la figura 64.
Figura 64 Seal de Reloj y CS del A/D
Los 16 pulsos de
reloj
Activacion del CS
8.3.4
Pruebas Adicionales
La supocisin inicial que se plante fue que materiales con distinta densidad, posiblemente,
absorberan en diferente magnitud las ondas ultrasnicas por consiguiente se pretenda
caracterizar materiales con base en la amplitud del eco recibido.
Los coeficientes de reflexin y transmisin en la interfaz de dos materiales dependen de la
impedancia acstica de estos, entre ms cerca se encuentren los valores de las impedancias
de los dos materiales, existir un menor desacople y un mayor porcentaje de la onda ser
transmitida.
Para el caso del aire, el cual posee una impedancia acstica muy baja, el desacople con
cualquiera de los 4 materiales que se trataron (madera, aluminio, acero y polietileno), es
muy grande, por lo que casi la totalidad de la onda que llega a la interfaz, es reflejada, y
slo un porcentaje extremadamente pequeo es transmitido al material, en la tabla 3 se
130
encuentra el resultado de la energa transmitida y reflejada para cada uno de los materiales
trabajados en el proyecto.
Es por esto que es casi imposible determinar el material de un objeto mediante esta tcnica.
Por esta misma razn tampoco fue posible detectar la presencia de una aguja.
En la figura 65 se muestran las diferentes seales de envolvente del cubo en diferentes
materiales, se puede notar una leve diferencia entre ellas, pero no lo suficiente para
discriminarlas.
En el caso de polietileno se alcanz a diferenciar con otro tipo de material, pero en realidad
lo que marcaba la diferencia era la superficie porosa que este posee, es decir el sistema lo
diferenciaba de los dems materiales slo en partes de objeto que presentaran una
superficie porosa de lo contrario el prototipo se confunda, en otras palabras no se lograba
diferenciar el material sino la superficie.
Figura 65 Seal envolvente del cubo en A) Madera B) Aluminio C) Acero
A)
131
B)
C)
En las siguientes grficas, se muestran la seal de la envolvente de la jeringa con aguja y
sin aguja, como se puede observar no existe diferencia alguna entre ellas.
132
A)
B)
133
Densidad (d)
Velocidad
Acstica (V)
Impedancia Acstica
(Z)
Aire
Madera
Aluminio
Acero
polietileno
0,0013
0,9
2,71
7,8
0,9
0,033
0,413
0,635
0,579
0,195
0,0000429
0,3717
1,721
4,5162
0,175
Interfaz
% Energa
transmitida
% Energa
Reflejada
0,046
0,01
0,004
99,954
99,99
99,996
0,098
99,902
Aire - Madera
Aire - Aluminio
Aire - Acero
Aire Polietileno
8.3.5
Etapa Final
Luego de realizar mediciones con cada una de las combinaciones mostradas en la tabla 2,
los parmetros que arrojaron mejores resultados en cuanto al reconocimiento fueron el A2 y
A4. En la figura 67 se muestra una representacin bidimensional con los parmetros A2 y
A4 donde se logra distinguir los diferentes agrupamientos en el espacio de representacin,
uno por cada clase considerada y as es posible asociar regiones disjuntas a cada una de las
clases representadas.
134
Mediante el software de visualizacin se realizaron las ltimas pruebas del sistema final.
Las funciones que este contiene tardan un tiempo determinado en realizar sus funciones,
que se muestran a continuacin:
Tiempo que demora la funcin librera con 4 objetos en la base de datos = 2,08s
135
Desviacion
estandar
Distancia
entre
los
centroides
En la etapa final se realizaron mil pruebas tanto con los transductores de 40Khz como con
los de 200Khz, arrojando los resultados que se encuentran en la tabla 4y 5 respectivamente,
mostrando un mayor acierto los transductores de 200Khz.
Estas mediciones se dividieron en cinco partes, es decir doscientas veces se envi a
reconocer el objeto y luego se rotaba para reconocerlo desde su otra cara.
136
Cubo
1000
1000
Cilindro
Esfera
918
177
823
1095
Cono
82
823
1000
1082
Total
1000
1000
1000
1000
4000
xito ( % )
100
91,8
82,3
100
93,525
Error
0
8,2
17,7
0
6,475
Cubo
1000
Cilindro
Esfera
Cono
998
2
1000
1002
1000
1000
1000
998
Total
1000
1000
1000
1000
4000
xito ( % )
100
100
99,8
100
99,95
Error
0
0
0,2
0
0,05
Cada una de las etapas de prueba arroj resultados satisfactorios, a excepcin de la etapa de
pruebas adicionales.
La estructura que se dise para la identificacin de los objetos cumple con el requisito de
no interferir en las mediciones de los objetos con el fin de slo analizar el eco reflejado por
137
cada objeto. Esto se logr luego de probar con tres tipos de esponjas y determinar el grosor
necesario para recubrir la estructura.
La etapa de adquisicin como se esperaba funcion al igual que en el proyecto de grado de
Acosta y Len. Los cambios en la etapa de filtrado para la frecuencia de 200 Khz y en la
etapa de amplificacin para los transductores emisores se lograron realizar.
La deteccin de la envolvente, el filtrado y la amplificacin permiten adecuar la seal para
el convertidor anlogo digital y extraer una seal diferente para cada uno de los objetos
propuestos.
El LM386 utilizados en el Proyecto de grado de Acosta y Len, no presentaba una buena
respuesta para las seales de 200 Khz, la seal era distorsionada, fue por esto que se opt
por utilizar el comparador lm311 que tiene buena respuesta en frecuencia a 40 Khz como a
200 khz. Esto permite la excitacin de ambos transductores con la misma etapa.
El algoritmo de reconocimiento se implement en un Ncleo de Rabbit 3610. Este es el
ncleo mas pequeo de la Rabbit Semiconductors, aun as cumple con los requisitos del
proyecto, como nmero de puertos entrada salida, frecuencia de operacin y memoria.
El inconveniente que se tuvo fue con el PWM del Rabbit, pues no genera seales con la
frecuencia de 200 Khz, por lo que fue necesario realizar una rutina en lenguaje
ensamblador que permitiera generarla.
Durante la etapa de prueba del ncleo se probaron los puertos de entrada salida, se calculo
el divisor de reloj para el convertidor anlogo digital, la comunicacin serial con el PC y se
prob el algoritmo de reconocimiento, satisfactoriamente.
Una vez con la tarjeta definitiva en mano se establecieron las ganancias de los
amplificadores, se ajustaron las resistencias a las entradas de los filtros, se establecieron
algunos tiempos de retardo, y se probaron todas las funciones que realizaba la tarjeta.
En comparacin con otros sistemas, el resultado obtenido fue bueno, en particular con el
trabajo de Ian Sillitoe y Antonio Visioli. Este trabajo presenta un sistema que utiliza un
metodo para el reconocimiento de objetos basado en la aproximacin lineal por segmentos,
y es probado con objetos que se encuentran tipicamente en una celda de produccin. Los
clasificadores utilizados son arboles de decisin, contruidos a partir de caracteristicas
simples obtenidas de los ecos de un sonar monoestatico sostenido en un brazo robotico que
se ubica en varias pocisiones alrededor del objeto, esto con el fin de incluir la posibilidad
de rotar a los objetos. Los resultados fueron muy parecidos, como era de esperarse debido a
que este trabajo esta basado en el de ellos.
138
50 cm
PLATAFORMA
139
9
9.1.1
Julio
Agosto
AO 2004
Septiembre
Octubre
Noviembre
140
AO 2005
AOAA
Ao2005
2004
Diciembre
Enero
Febrero
Marzo
Abril
141
AOAA 2005
Mayo
Ao 2005
Junio
Julio
Agosto
Septiembre
AOAA
AAAa
Ao2005
2005
Octubre
Documentacin
Revisin bibliogrfica
Redaccin de informes
Monografa
Articulo
CDs para biblioteca
Determinacin de dispositivos
142
Diseo de etapa
acondicionamiento
40KHz
Construccin de etapa
acondicionamiento 40KHz
Diseo de etapa
acondicionamiento 200KHz
Construccin de etapa
acondicionamiento 200KHz
Plataforma de trabajo
Tcnica de reconocimiento
Evaluacin del software
Implementacin del algoritmo
de reconocimiento
Pruebas preliminares
Rediseo
Diseo final
Pruebas finales
Costos y Recursos
Costo Unitario
(Pesos)
$30.000
$125.000
$57.500
$92.000
$150.000
$12.000
Cantidad
4
4
1
1
1
4
Costo Total
(Pesos)
$120.000
$500.000
$57.500
$92.000
$150.000
$48.000
$117.500
$117.500
143
Artculos
Libros
Memoria USB
Tarjeta de Alimentacin
Fuente de voltaje
Protoboard
Multimetro
Analizador de estados lgicos
Osciloscopio
Impresora
Computador personal
Licencia C
Licencia Eagle
Fabricacin de la tarjeta impresa
Horas del Director
Horas de los investigadores
Figuras geomtricas (metlicas)
Figuras geomtricas (madera)
Estructura de los transductores
Otros
Total (Pesos)
$0
$250.000
$120.000
$40.000
$8.0000
$20.000
$400.000
$3500.000
$3000.000
$340.000
$3250.000
$770.984
$3000.000
$35.000
$40.000
$20.000
$15.000
$5.000
$30.000
$300.000
50
3
1
1
1
1
1
1
1
1
1
1
1
4
96
1240
10
4
1
1
$0
$750.000
$120.000
$40.000
$80.000
$20.000
$400.000
$3500.000
$3000.000
$340.000
$3250.000
$770.984
$3000.000
$140.000
$3840.000
$24800.000
$150.000
$20.000
$3.0000
$300.000
$ 45635.984
144
10 CONCLUSIONES
A lo largo del desarrollo del proyecto se fueron superando uno a uno los objetivos
propuestos al inicio del mismo.
Los resultados obtenidos demuestran que este sistema presenta una alternativa en
ciertas aplicaciones a los sistemas de reconocimiento por visin. Es una buena
alternativa en costo y en rendimiento.
Se logr construir una plataforma sobre la cual se montaron los transductores, y las
bases para ubicar los objetos. Esta plataforma permite realizar las pruebas con un
mnimo de interferencia.
Si existen objetos alrededor (mediciones con 40KHz) que no sean los objetos a
reconocer pueden interferir en las mediciones, confundiendo de esta manera al
sistema. Esta limitacin no sucede con los transductores de 200KHz, debido a que
su directividad limita el rea en la que se transmite el eco.
11 RECOMENDACIONES
146
12 BIBLIOGRAFIA
147
[8] Kiragi, H.; Ersak, A. Object recognition and localization with ultrasonic scanning. Dept.
of Electr. & Electron. Eng., Middle East Tech. Univ., Ankara, Turkey, En: Electrotechnical
Conference, 1994. Proceedings., 7th Mediterranean
Para los antecedentes y el marco terico se revis, como documento de apoyo:
[9] Ruiz, Alberto; Apuntes de Sistemas de percepcin y Visin por computador. Junio 15
de 2004. Universidad de Murcia, Departamento de Informtica y Sistemas. p53-57.
Disponible en Internet: http://dis.um.es/alberto
Para los antecedentes y la justificacin se revisaron, como documentos de apoyo:
[10] WATANABE, S.; YONEYAMA, M. An ultrasonic 3D object recognition method
based on the unified neural network theory. RICOH Co., Ltd., Yokohama, Japan, En:
Ultrasonics Symposium, 1992. Proceedings., IEEE 1992
Para la justificacin se revis, como documento de apoyo:
[11] _________. Sensors
http://www.jameco.com
and
Video
products.
Disponible
en
Internet:
[12] _________. Application Note: Line Scan Imaging Basics. DALSA technology with
vision. Disponible en Internet: http://vfm.dalsa.com/support/appnotes /00541-00_0332_Linescan_Imaging_Basics.pdf
Para el planteamiento se revis, como documento de apoyo:
[13]__________. Machine Vision Systems Specifications. Disponible en internet:
http://www.globalspec.com/specifications/spechelpall?name=Machine_Visio
n_
Systems&comp=1178
Para los antecedentes se revis, como documento de apoyo:
[14]__________. Base de datos de la Biblioteca de la Universidad Nacional de Colombia.
Disponible en Internet: http://www.unal.edu.co/paginas/ bibliotecas_un.html
Para el marco teorico se revisaron, como documentos de apoyo:
[15]
http://www.ndt-ed.org/EducationResources/CommunityCollege/Ultrasonics
/cc_ut_index.htm
[16] www.massa.com/fundamentals.htm
148
[17] http://perso.wanadoo.es/chyryes/glosario/FPGA.htm
[18] http://www-etsi2.ugr.es/depar/ccia/rf/www/tema1_00-01_www/node5. html
[19] www.vhdl-online.de/~vhdl/tutorial/
149
ANEXOS
150
INSTRUCCIONES DE USO
Antes de iniciar, verifique que tiene en su poder todos los elementos del sistema: cable de
alimentacin, cable para el puerto serial, dispositivo hardware, la estructura y el programa
del software.
Conecte la fuente de alimentacin a la red elctrica de 110V, encienda el hardware con el
switch y conecte el cable de comunicacin serial, como se muestra en la figura 70 y 71
respectivamente.
Figura 70 Encendido del Hardware
12/24 V
Conecte el cable serial al hardware y al PC, realice esta conexin solamente como lo
indican los conectores del cable, asegrese que el conector de la tarjeta (DIAG) quede bien
conectado.
151
Los transductores de 40KHz se conectan a Tx1 y Rx1 y los transductores de 200KHz a Tx2
y Rx2.
Figura 71 Conector serial
Cable
de
programacion
200KHz / 40KHz
El software de visualizacin posee una serie de mens y submens que realizan diferentes
actividades, que se explicarn a continuacin.
a) Archivo, Salir
Permite al usuario salir del programa
b) Ejecutar, Reconocimiento Simple
Permite reconocer el objeto entrenado, la frecuencia a la cual se reconoci, la
imagen del objeto, la informacin almacenada del mismo y el nmero de veces
que el sistema reconoci cada uno de los objetos que se encuentran en la base de
dato, ya que se realizaron 100 mediciones el mximo valor que puede tomar un
objeto es 100.
c) Ejecutar, Reconocimiento Completo
Adems de reconocer el objeto y la frecuencia de trabajo, se calcula la
desviacin estndar de cada parmetro, se calcula e ilustra la distancia a la que
se encuentran los objetos que se encuentran en la base de datos. La distancia
mas corta ser el objeto reconocido.
d) Ejecutar, Entrenamiento
Si desea aadir un nuevo objeto en la base de datos existente, utilice esta opcin.
Asgnele un nombre al objeto entrenando en el cuadro de texto OBJETO
ENTRENADO, adjunte su imagen correspondiente y aada informacin
adicional del objeto, luego gurdelo.
Si el nombre ya existe en la base de datos, el software preguntar si desea
remplazarlo, si presiona SI, sobrescribir los nuevos centroides sobre el ya
existente si presiona NO deber colocarle otro nombre al objeto entrenado.
e) Ejecutar, Librera
153
155
156
A)
B)
157
158
Instrucciones
============
*********************************************************************/
#class auto
/** Definiciones **/
#define MUX_A0_IN 0
#define MUX_A1_IN 2
#define PGA1_A0_IN 3
#define PGA1_A1_IN 4
#define PGA2_A0_IN 5
#define PGA2_A1_IN 7
2
// (Chip Selection) Habilita la conversion del ADC
// Pulsador para iniciar el procesamiento
// Seleccion del Modo, Manual o PC.
159
#define AINBUFSIZE
A.
#define AOUTBUFSIZE
1023 //
#define SPI_SER_C
// Activa el puerto serial sincrono C.
#define SPI_CLK_DIVISOR 9 // Frecuencia del reloj para el conversor.
#define
#define
#define
#define
#define
#define
cap_max
tf
amp1 1
amp2 2
amp3 3
amp4 4
#define
muestras
#use "spi.lib"
int frec_lib;
int test1[muestras][5],test2[muestras][5];
entrenamiento
int serial_rx;
char serial_tx;
centro1[1][tf]=23;
centro1[1][amp1]=1645;
centro1[1][amp2]=2658;
centro1[1][amp3]=1860;
centro1[1][amp4]=1706;
centro1[2][tf]=28;
centro1[2][amp1]=1357;
centro1[2][amp2]=1863;
centro1[2][amp3]=2336;
centro1[2][amp4]=2687;
centro1[3][tf]=41;
centro1[3][amp1]=1082;
centro1[3][amp2]=1265;
centro1[3][amp3]=1386;
centro1[3][amp4]=1424;
centro3[3][amp1]=342;
centro3[3][amp2]=502;
centro3[3][amp3]=863;
centro3[3][amp4]=1032;
// Deshabilita el WatchDog
// Puerto B
BitWrPortI(PBDDR, &PBDDRShadow, 1, MUX_A0_IN );
BitWrPortI(PBDDR, &PBDDRShadow, 1, MUX_A1_IN );
BitWrPortI(PBDDR, &PBDDRShadow, 1, PGA1_A0_IN );
BitWrPortI(PBDDR, &PBDDRShadow, 1, PGA1_A1_IN );
BitWrPortI(PBDDR, &PBDDRShadow, 1, PGA2_A0_IN );
BitWrPortI(PBDDR, &PBDDRShadow, 1, PGA2_A1_IN );
// Puerto D
BitWrPortI(PDDDR, &PDDDRShadow, 1, busy );
BitWrPortI(PDDDR, &PDDDRShadow, 0, umbral );
// Puerto F
BitWrPortI(PFFR, &PFFRShadow, 0, frecuencia ); // funcion : normal
BitWrPortI(PFFR, &PFFRShadow, 0, amp_1 ); // funcion : normal
BitWrPortI(PFFR, &PFFRShadow, 0, amp_2 ); // funcion : normal
BitWrPortI(PFDDR, &PFDDRShadow, 0, frecuencia ); // PF0 = input
BitWrPortI(PFDDR, &PFDDRShadow, 1, amp_1 ); // PF4 = output
BitWrPortI(PFDDR, &PFDDRShadow, 1, amp_2 ); // PF5 = output
// Puerto G
BitWrPortI(PGDDR, &PGDDRShadow, 1, cs);
// PG2 = output
BitWrPortI(PGDDR, &PGDDRShadow, 0, start); // PG6 = input
BitWrPortI(PGDDR, &PGDDRShadow, 0, modo); // PG7 = input
163
while(1){
serial_rx = 0; // Abriendo el puerto serial A
serAopen(9600); // Estableciendo la tasa de baudios a 9600
while(1){
// Constantemente esta revisando
if (BitRdPortI(PGDR,modo)==0)
// el modo
{
if (BitRdPortI(PGDR,start)==0){
goto inicio;
}
}
else
{
while ((serial_rx = serAgetc()) == 97 || serial_rx == 115 || serial_rx == 100 ||
serial_rx == 102){
if (serial_rx == 97){
goto inicio;
}
if (serial_rx == 100){
goto inicio;
}
if (serial_rx == 115)
{
goto entre;
164
}
else
{
libreria();
}
}
}
}
inicio:
if (BitRdPortI(PFDR,frecuencia)==1){
else{ f=0; }
for(i=0;i<obj[f];i++){
med_ob[i]=0;
}
f=1;
if (BitRdPortI(PFDR,frecuencia)==1){
serAputc(40);
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
else{
serAputc(200);
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
for(ir=0;ir<obj[f]*25;ir++){
if (BitRdPortI(PFDR,frecuencia)==1){
k=0;
// Indicando que se va a trabajar con el Primer Tx
BitWrPortI(PBDR, &PBDRShadow, 0, MUX_A0_IN ); // seleccionando el primer
transductor receptor
pwm1();
// Transmite el tren de pulsos
}
else{
k=0;
// Indicando que se va a trabajar con el Primer Tx
165
clasificacion();
if (BitRdPortI(PFDR,frecuencia)==1){ f=1;
else{ f=0; }
f=1;
for(l=1;l<obj[f];l++){
// encontrando cual fue el objeto con mayor puntaje
if (med_ob[max]>med_ob[l])
166
{
max=max;
}
else
{
max=l;
}
}
serAputc(max);
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
if (BitRdPortI(PFDR,frecuencia)==1){ f=1;
else{ f=0; }
for(i=0;i<obj[f];i++){
serAputc((med_ob[i]*100)/(obj[f]*25));
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
goto final;
entre:
entrenamiento();
final:
}
}
/*************************************************************************
*****/
/*****************************
******************************/
/***************************** FUNCIONES
******************************/
167
/*****************************
******************************/
/*************************************************************************
*****/
/*************************************************************************
*****/
/***************** Tren de pulsos para el primer transductor ****************/
/*************************************************************************
*****/
void pwm1()
{
BitWrPortI(PDDR, &PDDRShadow, 1, busy );
// Led on
if (BitRdPortI(PFDR,frecuencia)==1)
{
BitWrPortI(PBDR, &PBDRShadow, 1, PGA1_A0_IN );
// Ganancia para 40khz
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA2_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A1_IN );
tm=200;
// tiempo de espera para el eco
#asm
ld d,0x1d
// 0x1d
seal de 40 khz
ld b,0x0f
// 15 pulsos para la seal de 40k
#endasm
}
else
{
BitWrPortI(PBDR, &PBDRShadow, 1, PGA1_A0_IN );
// Ganancia para 200khz
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A1_IN );
tm=30;
// tiempo de espera para el eco
#asm
ld d,0x04
// 0x04
seal de 200khz
ld b,0x32
// 50 pulsos para la seal de 200k
#endasm
}
#asm
ini:
168
ld
ioi
c,d
ld
uno:
dec
jp nz, uno
ld
ioi
ld
cero:
jp
a,0x10
// cargando el bit4 con 1
ld(PFDR),a // encendiendo el pin 4 del puerto F
a,0x00
ld(PFDR),a
c,d
dec
c
nz,cero
djnz ini
// Decrementa registro B y salta a ini si no es 0.
#endasm
BitWrPortI(PDDR, &PDDRShadow, 0, busy );
// Led off
}
/*************************************************************************
*****/
/***************** Tren de pulsos para el segundo transductor ****************/
/*************************************************************************
*****/
void pwm2()
{
BitWrPortI(PDDR, &PDDRShadow, 1, busy ); // Led on
if (BitRdPortI(PFDR,frecuencia)==1)
{
BitWrPortI(PBDR, &PBDRShadow, 1, PGA1_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA2_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A1_IN );
tm=200;
#asm
ld d,0x1d
// 0x1d
seal de 40 khz
ld b,0x0f
// 15 pulsos para la seal de 40k
#endasm
}
else
169
{
BitWrPortI(PBDR, &PBDRShadow, 1, PGA1_A0_IN );
// Ganancia para 200khz
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 1, PGA2_A1_IN );
tm=30;
// tiempo de espera para el eco
#asm
ld d,0x04
// 0x04
seal de 200khz
ld b,0x32
// 50 pulsos para la seal de 200k
#endasm
}
#asm
ini:
ld
a,0x20
// cargando el bit4 con 1
ioi
ld(PFDR),a // encendiendo el pin 4 del puerto F
ld
c,d
uno:
dec
c
jp nz, uno
ld
ioi
ld
cero:
jp
a,0x00
ld(PFDR),a
c,d
dec
c
nz,cero
djnz ini
// Decrementa registro B y salta a ini si no es 0.
#endasm
BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off
}
/*************************************************************************
*****/
/*********************** Conversin Anlogo-Digtal **********************/
/*************************************************************************
*****/
int adc()
{
char adc_reading1[2];
170
char adc_reading2[2];
char adc_reading3[2];
char adc_reading4[2];
BitWrPortI(PDDR, &PDDRShadow, 1, busy );
SPIinit();
//
Muestra a 50us
BitWrPortI(PGDR, &PGDRShadow, 0, 2);
SPIRead(adc_reading1, 2);
BitWrPortI(PGDR, &PGDRShadow, 1, 2);
//
Muestra a 100us
BitWrPortI(PGDR, &PGDRShadow, 0, 2);
SPIRead(adc_reading2, 2);
BitWrPortI(PGDR, &PGDRShadow, 1, 2);
//
Muestra a 150us
BitWrPortI(PGDR, &PGDRShadow, 0, 2);
SPIRead(adc_reading3, 2);
BitWrPortI(PGDR, &PGDRShadow, 1, 2);
//
Muestra a 200us
BitWrPortI(PGDR, &PGDRShadow, 0, 2);
SPIRead(adc_reading4, 2);
BitWrPortI(PGDR, &PGDRShadow, 1, 2);
// Led on
temp = (adc_reading1[0]);
// se pasa a una variable de 16 bits
adc_sample1[k] = (temp <<8) + (adc_reading1[1]) & 0x0fff;
// se desplaza a 8 bits
temp, y se suman con los 8 bits restantes 0,0,0,0,b11,b10,....b0
temp = (adc_reading2[0]);
adc_sample2[k] = (temp <<8) + (adc_reading2[1]) & 0x0fff;
temp = (adc_reading3[0]);
adc_sample3[k] = (temp <<8) + (adc_reading3[1]) & 0x0fff;
temp = (adc_reading4[0]);
adc_sample4[k] = (temp <<8) + (adc_reading4[1]) & 0x0fff;
BitWrPortI(PDDR, &PDDRShadow, 0, busy );
// Led off
/*************************************************************************
*****/
/********************** Reconocimiento de Patrones **********************/
171
/*************************************************************************
*****/
float clasificacion(){
float distan[cap_max][2]; // distan={{Primer Tx, Segundo Tx}, ..... # de objetos};
int
j;
// Led on
distan[j][0]=sqrt(pow((adc_sample2[0]centro1[j][amp2]),2)+pow((adc_sample4[0]-centro1[j][amp4]),2));
//
distan[j][0]=sqrt(pow((tiempo_vuelo[0]-centro1[j][tf]),2)+pow((adc_sample3[0]centro1[j][amp3]),2));
}
}
else{
for(j=0;j<obj[0];j++){
200khz
/* Se utilizaron los parametros tf y Amplitud en tf+150us */
distan[j][0]=sqrt(pow((adc_sample2[0]centro3[j][amp2]),2)+pow((adc_sample4[0]-centro3[j][amp4]),2));
}
}
172
min1=0;
min2=0;
if (BitRdPortI(PFDR,frecuencia)==1){
else{ f=0; }
f=1;
for(l=1;l<obj[f];l++){
if (distan[min1][0]<distan[l][0]) // Encontrando la distancia mas pequea para el
primer Tx
{
min1=min1;
}
else
{
min1=l;
}
}
serAputc(adc_sample1[j]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
/* Transmision de la amplitud en +100us */
serAputc(adc_sample2[j]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(adc_sample2[j]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
/* Transmision de la amplitud en +150us */
serAputc(adc_sample3[j]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(adc_sample3[j]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
/* Transmision de la amplitud en +200us */
serAputc(adc_sample4[j]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(adc_sample4[j]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
}
BitWrPortI(PDDR, &PDDRShadow, 0, busy );
// Led off
/*************************************************************************
*****/
/********************** Entrenamiento del Sistema **********************/
/*************************************************************************
*****/
174
int entrenamiento(){
int m;
unsigned long sum1[1][5];
unsigned long sum2[1][5];
for(m=0;m<muestras;m++){
if (BitRdPortI(PFDR,frecuencia)==1){
k=0;
// Indicando que se va a trabajar con el Primer Tx
BitWrPortI(PBDR, &PBDRShadow, 0, MUX_A0_IN ); // seleccionando el primer
transductor receptor
pwm1();
// Transmite el tren de pulsos
}
else{
k=0;
// Indicando que se va a trabajar con el Primer Tx
BitWrPortI(PBDR, &PBDRShadow, 1, MUX_A0_IN ); // seleccionando el segundo
transductor receptor
pwm2();
// Transmite el tren de pulsos
}
BitWrPortI(PDDR, &PDDRShadow, 1, busy ); // Led on
for(i=1;i<tm;i++){} // Tiempo en que no va a aparecer el eco
tiempo_vuelo[k]=0; // inicializando la variable en cero
while(BitRdPortI(PDDR,umbral)==0 && tiempo_vuelo[k]<70 ){
tiempo_vuelo[k]=tiempo_vuelo[k]+1;}
// Detecta el umbral y calcula el tiempo
de vuelo
for(i=1;i<4;i++){}
// Retraso de 50us para tomar la primera
muestra
BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off
adc();
// Se adquieren 4 muestras de la envolvente tf
(+50us),(+100us),(+150us),(+200us)
test1[m][tf]=tiempo_vuelo[k];
test1[m][amp1]=adc_sample1[k];
test1[m][amp2]=adc_sample2[k];
test1[m][amp3]=adc_sample3[k];
test1[m][amp4]=adc_sample4[k];
175
}
for(m=0;m<muestras;m++){ // Suma todas las muestras para cada parametro
sum1[0][tf]=sum1[0][tf]+test1[m][tf];
sum1[0][amp1]=sum1[0][amp1]+test1[m][amp1];
sum1[0][amp2]=sum1[0][amp2]+test1[m][amp2];
sum1[0][amp3]=sum1[0][amp3]+test1[m][amp3];
sum1[0][amp4]=sum1[0][amp4]+test1[m][amp4];
}
if (BitRdPortI(PFDR,frecuencia)==1){
else{ f=0; }
f=1;
obj[f]=obj[f]+1;
m=0;
if (BitRdPortI(PFDR,frecuencia)==1) // Si esta trabajando a 40 khz, utiliza los
centroides de 40 khz
{
for(m=0;m<5;m++){
// Calculando los promedios
centro1[obj[1]-1][m]=sum1[0][m]/muestras;
}
}
176
else{
200 khz, utiliza los centroides de 200 khz.
for(m=0;m<5;m++){
// Calculando los promedios
centro3[obj[0]-1][m]=sum1[0][m]/muestras;
// Si estas trabajando a
}
}
/************** Transmision de los nuevos Centroides al Programa ************/
if (BitRdPortI(PFDR,frecuencia)==1) // Si esta trabajando a 40 khz, utiliza los
centroides de 40 khz
{
serAputc(40);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
for(m=0;m<5;m++){ // Transmite los promedios de cada parametro(tf,amp1..)
// donde m indica el parametro que se va a transmitir
/*
serAputc(centro1[obj[1]-1][m]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(centro1[obj[1]-1][m]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
BitWrPortI(PDDR, &PDDRShadow, 0, busy );
// Led off
}
else{
serAputc(200);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
for(m=0;m<5;m++){ // Transmite los promedios de cada parametro(tf,amp1..)
// donde m indica el parametro que se va a transmitir
177
/*
serAputc(centro3[obj[0]-1][m]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(centro3[obj[0]-1][m]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
}
BitWrPortI(PDDR, &PDDRShadow, 0, busy );
// Led off
/*************************************************************************
*****/
/************************ Descargando libreria ************************/
/*************************************************************************
*****/
/*************************************************************************
*****
Descripcin:
El programa espera un caracter de inicio, la letra a, que en codigo ascii es
97, una ves lo recibe incrementa la variable obj, y almacena los 8 valores
correspondiente a los promedios de las cuatro variables(tf,amp1,..) de cada
uno de los transductores.
*************************************************************************
*****/
int libreria(){
178
/*
Borrando los centroides existentes */
BitWrPortI(PDDR, &PDDRShadow, 1, busy ); // Led on
for(m=0;m<10000;m++){} // retardo necesario para que se guarde el dato del puerto serial
frec_lib=serAgetc();
for(m=0;m<10000;m++){} // retardo necesario para que se guarde el dato del puerto serial
if( frec_lib == 40 ){
for(i=0;i<obj[1];i++){
// Indica el objeto (frecuencia de 40khz)
for(m=0;m<5;m++){ // Indica el parametro
centro1[i][m]=0;
centro2[i][m]=0;
}
}
}
else{
for(i=0;i<obj[0];i++){
// Indica el objeto (frecuencia de 200khz)
for(m=0;m<5;m++){ // Indica el parametro
centro3[i][m]=0;
centro4[i][m]=0;
}
}
}
libini:
i=0;
if( frec_lib == 40 ){
obj[1]=serAgetc();
for(m=0;m<10000;m++){} // retardo necesario para que se guarde el dato del puerto serial
while(1){
179
while(1){
centro1[obj[1]-1][i]=serAgetc()*256;
for(m=0;m<10000;m++){}
// retardo necesario para que se guarde el dato
del puerto serial
centro1[obj[1]-1][i]=centro1[obj[1]-1][i]+serAgetc();
for(m=0;m<10000;m++){}
// retardo necesario para que se guarde el dato
del puerto serial
i=i+1;
if (i==5){
// Checkea si se va a transmitir otro dato de la libreria
serial_rx=serAgetc();
for(m=0;m<10000;m++){}
// retardo necesario para que se guarde el dato
del puerto serial
if(serial_rx == 102){
frec_lib=serAgetc();
for(m=0;m<10000;m++){} // retardo
necesario para que se guarde el dato del puerto serial
goto libini;
}
goto salir;
}
}
}
}
else{
for(m=0;m<10000;m++){} // retardo necesario para que se guarde el dato
del puerto serial
obj[0]=serAgetc();
while(1){
for(m=0;m<10000;m++){}
puerto serial
while(1){
centro3[obj[0]-1][i]=serAgetc()*256;
for(m=0;m<10000;m++){}
// retardo necesario para que se guarde el dato
del puerto serial
centro3[obj[0]-1][i]=centro3[obj[0]-1][i]+serAgetc();
180
for(m=0;m<10000;m++){}
del puerto serial
i=i+1;
if (i==5){
// Checkea si se va a transmitir otro dato de la libreria
serial_rx=serAgetc();
for(m=0;m<10000;m++){}
// retardo necesario para que se guarde el dato
del puerto serial
if(serial_rx == 102){
frec_lib=serAgetc();
for(m=0;m<10000;m++){} // retardo
necesario para que se guarde el dato del puerto serial
goto libini;
}
goto salir;
}
}
}
}
salir:
BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off
}
181
182
' se calcula la
(Moduleserie.varianza(4)
(Moduleserie.a4(j)
Next j
Moduleserie.varianzad(0)
=
Sqr((CDbl(Moduleserie.varianza(0))
/
((frmentrenamiento.variable * 25) - 1))) ' se divide la sumatoria entre el nmero total de
muestras y se saca la raiz cuadrada
Moduleserie.varianzad(1)
=
((frmentrenamiento.variable * 25) - 1)))
Sqr((CDbl(Moduleserie.varianza(1))
Moduleserie.varianzad(2)
=
((frmentrenamiento.variable * 25) - 1)))
Sqr((CDbl(Moduleserie.varianza(2))
Moduleserie.varianzad(3)
=
((frmentrenamiento.variable * 25) - 1)))
Sqr((CDbl(Moduleserie.varianza(3))
Moduleserie.varianzad(4)
=
((frmentrenamiento.variable * 25) - 1)))
Sqr((CDbl(Moduleserie.varianza(4))
If Moduleserie.promedio(0) = 0 Then
tf.Text = "Indeterminado"
num2 = ((Moduleserie.varianzad(1) / (Moduleserie.promedio(1))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num2 = Format(num2, "##0.00")
183
a1.Text = num2
num3 = ((Moduleserie.varianzad(2) / (Moduleserie.promedio(2))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num3 = Format(num3, "##0.00")
a2.Text = num3
num4 = ((Moduleserie.varianzad(3) / (Moduleserie.promedio(3))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num4 = Format(num4, "##0.00")
a3.Text = num4
num5 = ((Moduleserie.varianzad(4) / (Moduleserie.promedio(4))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num5 = Format(num5, "##0.00")
a4.Text = num5
tfd.Text = "Indeterminado" 'se muestran en el texto los valores el valor de la desviacion
estandar
num22 = (Moduleserie.varianzad(1))
num22 = Format(num22, "###0.00")
a1d.Text = num22
num33 = (Moduleserie.varianzad(2))
num33 = Format(num33, "###0.00")
a2d.Text = num33
num44 = (Moduleserie.varianzad(3))
num44 = Format(num44, "###0.00")
a3d.Text = num44
num55 = (Moduleserie.varianzad(4))
num55 = Format(num55, "###0.00")
a4d.Text = num55
Else
num1 = ((Moduleserie.varianzad(0) / (Moduleserie.promedio(0))) * 100)
num1 = Format(num1, "##0.00")
184
tf.Text = num1
num2 = ((Moduleserie.varianzad(1) / (Moduleserie.promedio(1))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num2 = Format(num2, "##0.00")
a1.Text = num2
num3 = ((Moduleserie.varianzad(2) / (Moduleserie.promedio(2))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num3 = Format(num3, "##0.00")
a2.Text = num3
num4 = ((Moduleserie.varianzad(3) / (Moduleserie.promedio(3))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num4 = Format(num4, "##0.00")
a3.Text = num4
num5 = ((Moduleserie.varianzad(4) / (Moduleserie.promedio(4))) * 100) 'el porcentaje de
la desviacion estandar normalizada y se muestran en el texto
num5 = Format(num5, "##0.00")
a4.Text = num5
'se muestran en el texto los valores el valor de la desviacion
estandar
num11 = (Moduleserie.varianzad(0))
num11 = Format(num11, "###0.00")
tfd.Text = num11
num22 = (Moduleserie.varianzad(1))
num22 = Format(num22, "###0.00")
a1d.Text = num22
num33 = (Moduleserie.varianzad(2))
num33 = Format(num33, "###0.00")
a2d.Text = num33
num44 = (Moduleserie.varianzad(3))
num44 = Format(num44, "###0.00")
a3d.Text = num44
185
num55 = (Moduleserie.varianzad(4))
num55 = Format(num55, "###0.00")
a4d.Text = num55
ejex = frmentrenamiento.REGISTRO40!AMPLITUD2_PRIMER_PAR_40
ejey = frmentrenamiento.REGISTRO40!AMPLITUD4_PRIMER_PAR_40
Label(i - 1).Visible = True 'carga los check y los picture invisible
Picture2(i - 1).Visible = True
Label(i - 1).Caption = frmentrenamiento.REGISTRO40!OBJETOS
r = 255 * Rnd ' me da de manera aleatoria varios colores
g = 255 * Rnd
b = 255 * Rnd
Picture1.Circle (ejex, (6281.525 - ejey)), 5, RGB(r, g, b) 'grfica
186
Next i
For i = 1 To frmentrenamiento.variable40
Next i
End If
For i = 0 To 4
Moduleserie.varianza(i) = 0 ' se limpian las variables
Moduleserie.varianzad(i) = 0
Moduleserie.promedio(i) = 0
Next i
buscar4 = ""
End Sub
Private Sub Form_Load()
Dim tx As String
For i = 0 To 29
Label(i).Visible = False 'carga los check y los picture invisible
Picture2(i).Visible = False
Next i
188
For i = 0 To 19
Label11(i).Visible = False 'carga los check y los picture invisible
Text1(i).Visible = False
Label12(i).Visible = False
Next i
Calculos.WindowState = 2 'muestra la ventana maximazada
frmprincipal.Picture3.Visible = False
Label28.Caption = "0"
Label15.Caption = "0.48"
Label27.Caption = "0.96"
Label16.Caption = "1.44"
Label26.Caption = "1.92"
Label17.Caption = "2.4"
Label25.Caption = "2.88"
Label24.Caption = "3.36"
Label18.Caption = "3.84"
Label14.Caption = "0"
Label13.Caption = "0.48"
Label11(20).Caption = "0.96"
Label12(20).Caption = "1.44"
Label19.Caption = "1.92"
Label20.Caption = "2.4"
Label21.Caption = "2.88"
Label22.Caption = "3.36"
Label23.Caption = "3.84"
Picture1.DrawWidth = 7
Call Command1_Click
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
End Sub
CODIGO DEL FORMULARIO (calculosimple)
190
Public l As Integer
Public h As Integer
Public W As Integer
Private Sub Command1_Click()
If frmprincipal.serial1.PortOpen = True Then
frmprincipal.serial1.PortOpen = False
End If
modo1 = False
frmprincipal.modo.Enabled = True
frmprincipal.rctosimple.Enabled = True
frmprincipal.rctocompleto.Enabled = True
frmprincipal.entrenamiento.Enabled = True
Command1.Visible = False
End Sub
Private Sub Command2_Click()
XX = 0
YY = 0
zz = 0
WW = 0
End Sub
Private Sub Form_Load()
Dim X As Picture
Text5.Text = ""
Text6.Text = ""
Frame3.Visible = False
Frame4.Visible = False
If modo1 = True Then
191
Command1.Visible = True
End If
If modo1 = True Then
calculosimple.Caption = "Modo Manual"
Else
calculosimple.Caption = "Reconocimiento Simple"
End If
frmprincipal.Picture3.Visible = False
If cambios11 = True Then
If frmentrenamiento.variable40 > 14 Then
Frame3.Visible = True
Frame4.Visible = True
End If
End If
If cambios12 = True Then
If frmentrenamiento.variable200 > 14 Then
Frame3.Visible = True
Frame4.Visible = True
End If
End If
For h = 0 To 27
'carga los textos invisible
Text(h).Visible = False
Next h
calculosimple.WindowState = 2
Dim buscar2 As String
Dim BUSCAR3 As String
Dim buscar4 As String
Text5.Text = "40KHz"
tx = Trim(Moduleserie.vectorcods40)
192
Set X = LoadPicture(frmentrenamiento.REGISTRO40!IMAGEN)
Set Image1.Picture = X
Text6.Text = frmentrenamiento.REGISTRO40!INFORMACION
For W = 1 To frmentrenamiento.variable40 Step 1 ' aparece en el nombre de los label el
objeto que hay en la base de datos
buscar4 = "CDIGOS = '" & Trim(W) & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar4
Label(W - 1).Caption = frmentrenamiento.REGISTRO40!OBJETOS
Next W
End If
193
tx = Trim(Moduleserie.vectorcods200(0))
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
buscar2 = "CDIGOS = '" & tx & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar2
txtobjeto.Text = frmentrenamiento.REGISTRO200!OBJETOS
Text6.Text = frmentrenamiento.REGISTRO200!INFORMACION
Set X = LoadPicture(frmentrenamiento.REGISTRO200!IMAGEN)
Set Image1.Picture = X
frmentrenamiento.REGISTRO200.FindFirst buscar4
Label(W - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS
Next W
End Sub
frmprincipal.Picture3.Visible = True
End Sub
196
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
End Sub
Private Sub List1_Click()
If Combo1.ListIndex = 0 Then
If List1.ListIndex = 0 Then 'dependiendo lo que el usuario escoja aparecera la explicacion
correspondiente al menu escogido
Text1.Text = "Permite ver al usuario adems del objeto reconocido por el par de
transductores ultrasnico, el nmero de veces que el sistema reconoci un objeto
determinado de los n objetos que se encuentran en la base de datos."
If Combo1.ListIndex = 1 Then
If List1.ListIndex = 0 Then
Text1.Text = "Calcula la impedancia acstica, la energa transmitida y la energa reflejada
del material. "
ElseIf List1.ListIndex = 1 Then
Text1.Text = "Realiza el Reconocimiento Simple de manera manual, es decir el
microprocesador envia los datos sin recibir ninguna orden del PC"
End If
End If
End Sub
REGISTRO40.MoveLast
frmprincipal. = REGISTRO40.RecordCount
REGISTRO40.Close
Case 7
MsgBox "Cambie el nombre", vbOK, "Advertencia" 'si la persona presiona no o cancelar
entonces se le pide que cambie el nombre
Case 2
MsgBox "Cambie el nombre", vbOK, "Advertencia"
End Select
End If
End If
End If
201
202
Case 7
MsgBox "Cambie el nombre", vbOK, "Advertencia" 'si la persona presiona no o cancelar
entonces se le pide que cambie el nombre
Case 2
MsgBox "Cambie el nombre", vbOK, "Advertencia"
End Select
End If
'cierra el if de los nomatch
End If
'cierra el de los textos vacios
End If 'cierra el if de la frecuencia
buscar = ""
End Sub
frmprincipal.Picture3.Visible = False
If cambios40 = True Then
txttvuelop140.Text = vectormenos40(0) 'tiempo de vuelo del 1tx a frecuencia de 40
txtampp50140.Text = vectormenos40(1) 'amplitud 50 del 1tx de 40
txtampp100140.Text = vectormenos40(2) 'amplitud 100 del 1tx de 40
txtampp150140.Text = vectormenos40(3) 'amplitud 150 del 1tx de 40
txtampp200140.Text = vectormenos40(4) 'amplitud 200 del 1tx de 40
txp40.Caption = "TRANSDUCTORES DE 40KHz"
End If
If cambios200 = True Then
txttvuelop140.Text = vectormenos200(0) 'tiempo de vuelo del 1tx a frecuencia de 40
txtampp50140.Text = vectormenos200(1) 'amplitud 50 del 1tx de 40
txtampp100140.Text = vectormenos200(2) 'amplitud 100 del 1tx de 40
txtampp150140.Text = vectormenos200(3) 'amplitud 150 del 1tx de 40
txtampp200140.Text = vectormenos200(4) 'amplitud 200 del 1tx de 40
txp40.Caption = "TRANSDUCTORES DE 200KHz"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
End Sub
For i = 1 To frmprincipal.
If Check1(i).Value = 1 Then 'si el objeto esta chequeado
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb" 'abre la base de datos
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
buscar4 = "OBJETOS = '" & Trim(Check1(i).Caption) & "'" 'busca en la tabla de 40 el
objeto chequeado
frmentrenamiento.REGISTRO40.FindFirst buscar4
If comparar1 = "Tiempo de Vuelo" Then 'dependiendo el parametro que haya seleccionado
el usuario guarda en una variable el datos que se encuentre en la base
ejex = Int(frmentrenamiento.REGISTRO40!TIEMPO_PRIMER_PAR_40)
ejex = ejex * 80
205
End If
r = 255 * Rnd ' me da de manera aleatoria varios colores
g = 255 * Rnd
b = 255 * Rnd
Picture1.Circle (ejex, (6281.525 - ejey)), 5, RGB(r, g, b) 'grfica
Picture2(i - 1).BackColor = RGB(r, g, b) 'coloca en el cuadro que se encuentra al lado del
objeto el color del punto en la grfica
End If
206
Next i
End If
If frecuencia.ListIndex = 1 Then 'si la frecuencia escogida es 200KHz
For i = 1 To frmprincipal.p
If Check1(i).Value = 1 Then 'si el objeto esta chequeado
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb" 'abre la base de datos
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
buscar4 = "OBJETOS = '" & Trim(Check1(i).Caption) & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar4
'busca en la tabla de 200 el objeto
chequeado
If comparar1 = "Tiempo de Vuelo" Then
'dependiendo el parametro que haya
seleccionado el usuario guarda en una variable el datos que se encuentre en la base
ejex = Int(frmentrenamiento.REGISTRO200!TIEMPO_PRIMER_PAR_200)
ejex = ejex * 80
ejey = frmentrenamiento.REGISTRO200!TIEMPO_PRIMER_PAR_200
ejey = ejey * 80
ElseIf comparar2 = "Amplitud 1" Then
ejey = frmentrenamiento.REGISTRO200!AMPLITUD1_PRIMER_PAR_200
ElseIf comparar2 = "Amplitud 2" Then
ejey = frmentrenamiento.REGISTRO200!AMPLITUD2_PRIMER_PAR_200
ElseIf comparar2 = "Amplitud 3" Then
ejey = Int(frmentrenamiento.REGISTRO200!AMPLITUD3_PRIMER_PAR_200)
ElseIf comparar2 = "Amplitud 4" Then
ejey = frmentrenamiento.REGISTRO200!AMPLITUD4_PRIMER_PAR_200
End If
r = 255 * Rnd ' me da de manera aleatoria varios colores
g = 255 * Rnd
b = 255 * Rnd
Picture1.Circle (ejex, (6281.525 - ejey)), 5, RGB(r, g, b) 'dibuja los valores de los
parametros escogidos
Picture2(i - 1).BackColor = RGB(r, g, b)
End If
Next i
End If
End Sub
Private Sub Command2_Click()
Option3.Value = False 'si se da click en limpiar se borra los puntos grficados
Picture1.Cls
If frecuencia.ListIndex = 0 Then 'limpia el cuadro que muestra el color de los puntos para
40KHz
208
For i = 1 To frmprincipal.
Picture2(i - 1).BackColor = &H8000000F
Next i
End If
If frecuencia.ListIndex = 1 Then 'limpia el cuadro que muestra el color de los puntos para
40KHz
For i = 1 To frmprincipal.p
Picture2(i - 1).BackColor = &H8000000F
Next i
End If
End Sub
End Sub
Private Sub frecuencia_Click()
Option3.Visible = True
Dim i As Integer
Else
For i = 1 To 30
Check1(i).Caption = ""
210
Check1(i).Visible = False
Picture2(i - 1).Visible = False
Next i
Option3.Visible = True 'si la frecuencia es 40KHz
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb"
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
For k = 1 To frmprincipal.p Step 1 'coloque el nombre de los objetos que se encuentren en
la tabla
nombre = Trim(k)
buscar4 = "NMERO = '" & k & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar4
Check1(k).Caption = frmentrenamiento.REGISTRO200!OBJETOS
Check1(k).Visible = True
Picture2(k - 1).Visible = True
Next k
End If
End Sub
Private Sub Option1_Click(c As Integer)
If Option1(c).Value = True Then 'guarda en comparar1 el parametro escogido por el
usuario
comparar1 = Option1(c).Caption
Label2.Caption = comparar1
211
Label13.Caption = "us"
Else
Label4.Caption = "0"
Label15.Caption = "0.48"
Label5.Caption = "0.96"
Label16.Caption = "1.44"
Label6.Caption = "1.92"
Label17.Caption = "2.4"
Label7.Caption = "2.88"
Label8.Caption = "3.36"
Label18.Caption = "3.84"
Label13.Caption = "V"
End If
End If
End Sub
Private Sub Option2_Click(p As Integer)
212
End If
End Sub
213
For i = 1 To frmprincipal.
Check1(i).Value = 1
Next i
End If
If frecuencia.ListIndex = 1 Then
For i = 1 To frmprincipal.p
Check1(i).Value = 1
Next i
End If
End Sub
Check(i).Caption = ""
Check(i).Visible = False
Next i
Next u
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
For u = 1 To frmprincipal.p Step 1 'aparecen los objetos de la tabla 200 en pantalla
nombre = Trim(u)
buscar7 = "NMERO = '" & u & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar7
Check(u - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS
Check(u - 1).Visible = True
Next u
215
End If
End Sub
Private Sub Command1_Click()
Dim dbname As String
Dim buscar4 As String
Dim buscar5 As String
Dim z As Integer
Dim F As Integer
Dim prueba As Integer
Dim prueba1 As Integer
'Dim enviar As String
'Dim enviar1 As String
Dim i As Integer
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb" 'abre la base de datos
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
If serialenviar.PortOpen = False Then 'abre el puerto serial
serialenviar.PortOpen = True
End If
serialenviar.Output = "f" 'envia la f que indica la procesador que se enviara unos nuevos
centroides
frmentrenamiento.REGISTRO40.FindFirst buscar5
frmentrenamiento.REGISTRO40.Edit 'limpia todos los codigos de los objetos en la tabla
frmentrenamiento.REGISTRO40!CDIGOS = "0"
frmentrenamiento.REGISTRO40.Update
Next i
serialenviar.Output = "(" 'manda la frencuencia
For z = 0 To (frmprincipal. - 1) Step 1
If Check(z).Value = 1 Then 'si el check esta seleccionado
prueba = 0
prueba1 = 0
If frmentrenamiento.variable40 = 0 Then 'mando nuevamente la f y la frecuencia pero slo
la primera vez
Else: serialenviar.Output = "f"
serialenviar.Output = "("
End If
frmentrenamiento.variable40 = frmentrenamiento.variable40 + 1 'aumento la variable del
codigo del objeto por cada check seleccionado
'enviar = Trim(Check(z).Caption)
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
buscar4 = "OBJETOS = '" & Trim(Check(z).Caption) & "'" 'cambio
frmentrenamiento.REGISTRO40.FindFirst buscar4
Moduleserie.objeto(0) = frmentrenamiento.variable40 'guarda en un vector los centroides
Moduleserie.objeto(1) = frmentrenamiento.REGISTRO40!TIEMPO_PRIMER_PAR_40
Moduleserie.objeto(2) =
frmentrenamiento.REGISTRO40!AMPLITUD1_PRIMER_PAR_40
Moduleserie.objeto(3) =
frmentrenamiento.REGISTRO40!AMPLITUD2_PRIMER_PAR_40
217
Moduleserie.objeto(4) =
frmentrenamiento.REGISTRO40!AMPLITUD3_PRIMER_PAR_40
Moduleserie.objeto(5) =
frmentrenamiento.REGISTRO40!AMPLITUD4_PRIMER_PAR_40
For F = 1 To 5
serialenviar.Output = Chr((Val(Moduleserie.objeto(F) / 256))) 'envia los centroides
prueba1 = Val(Moduleserie.objeto(F))
prueba = (prueba1 And &HFF&)
Moduleserie.objeto(F) = prueba
serialenviar.Output = Chr(Val(Moduleserie.objeto(F)))
Next F
End If
Next z
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
For i = 1 To frmprincipal.p Step 1
'enviar1 = Trim(i)
buscar5 = "NMERO = '" & Trim(i) & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar5
frmentrenamiento.REGISTRO200.Edit
'limpia todos los codigos de los objetos en la
tabla
frmentrenamiento.REGISTRO200!CDIGOS = "0"
frmentrenamiento.REGISTRO200.Update
Next i
serialenviar.Output = "" 'manda la frencuencia
For z = 0 To (frmprincipal.p - 1) Step 1
If Check(z).Value = 1 Then 'si el check esta seleccionado
prueba = 0
prueba1 = 0
If frmentrenamiento.variable200 = 0 Then 'mando nuevamente la f y la frecuencia pero slo
la primera vez
Else: serialenviar.Output = "f"
serialenviar.Output = ""
End If
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
buscar4 = "OBJETOS = '" & Trim(Check(z).Caption) & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar4
Moduleserie.objeto(0) = Str(frmentrenamiento.variable200)
Moduleserie.objeto(1) = frmentrenamiento.REGISTRO200!TIEMPO_PRIMER_PAR_200
'guarda en un vector los centroides
Moduleserie.objeto(2) =
frmentrenamiento.REGISTRO200!AMPLITUD1_PRIMER_PAR_200
Moduleserie.objeto(3) =
frmentrenamiento.REGISTRO200!AMPLITUD2_PRIMER_PAR_200
Moduleserie.objeto(4) =
frmentrenamiento.REGISTRO200!AMPLITUD3_PRIMER_PAR_200
Moduleserie.objeto(5) =
frmentrenamiento.REGISTRO200!AMPLITUD4_PRIMER_PAR_200
frmentrenamiento.REGISTRO200.Edit 'asigna en la tabla correspondiente el nuevo codigo
del objeto
frmentrenamiento.REGISTRO200!CDIGOS = frmentrenamiento.variable200
frmentrenamiento.REGISTRO200.Update
serialenviar.Output = Chr(Val(Moduleserie.objeto(0))) 'envia el codigo del objeto de 8 bits
For F = 1 To 5
serialenviar.Output = Chr((Val(Moduleserie.objeto(F) / 256))) 'envia los centroides
prueba1 = Val(Moduleserie.objeto(F))
prueba = (prueba1 And &HFF&)
Moduleserie.objeto(F) = prueba
serialenviar.Output = Chr(Val(Moduleserie.objeto(F)))
Next F
End If
Next z
220
End If
End Sub
Private Sub Form_Load()
frmprincipal.Picture3.Visible = False
Combo1.AddItem "40KHz" 'aade los items
Combo1.AddItem "200KHz"
frmlibreria.WindowState = 2
For q = 0 To 29 'coloca invisible los checks
Check(q).Visible = False
Next q
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
End Sub
Private Sub Option1_Click()
Dim z As Integer
If Combo1.ListIndex = 0 Then 'selecciona todos los objetos para enviarlos
For z = 1 To frmprincipal.
Check(z - 1).Value = 1
Next z
End If
If Combo1.ListIndex = 1 Then
221
For z = 1 To frmprincipal.p
Check(z - 1).Value = 1
Next z
End If
Option1.Value = False
End Sub
CODIGO DEL FORMULARIO (frmnuevomaterial)
Option Explicit
Const porcentaje = 100
Const aire = 0.0000429
End Sub
Private Sub escoger_Click() 'muestra los resultados de los materiales escogidos en la lista
If escoger.Text = "Acero" Then
txtresultado.Text = "4,5162": txttransmitida.Text = "0,004": txtreflejada.Text = "99,996"
End If
If escoger.Text = "Aluminio" Then
txtresultado.Text = "1,721": txttransmitida.Text = "0,01": txtreflejada.Text = "99,99"
End If
If escoger.Text = "Madera" Then
txtresultado.Text = "0,3717": txttransmitida.Text = "0,046": txtreflejada.Text = "99,954"
End If
If escoger.Text = "Polietileno" Then
txtresultado.Text = "0,175": txttransmitida.Text = "0,098": txtreflejada.Text = "99,902"
End If
If escoger.Text = "Aire" Then
txtresultado.Text = "0,0000429": txttransmitida.Text = "": txtreflejada.Text = ""
End If
'If escoger.Text = "Aada un nuevo material" Then
'Unload frmnuevomaterial
'si se escoje nuevo material se carga el formulario
'Load frmnuevomaterial
'End If
End Sub
223
Public i As Integer
Public j As Integer
Public k As Integer
Public F As Integer
Public n As Integer 'cuenta el vector de entrenamiento
Public m As Integer 'cuenta el vector de rcto simple
Public s As Long 'cuenta el vector de rcto completo
Public V As Integer
Public a As Integer 'cuenta el vector de rcto completo convertido
Public b As Integer 'cuenta el vector de porcentaje
Public As Integer 'No de objetos en 40
Public p As Integer 'No de objetos en 200
a=0
For b = 0 To ((frmentrenamiento.variable * 25) - 1) Step 1 'guarda en diferentes variables
los datos de cada parametro
tf(b) = vectormenosc(a)
a1(b) = vectormenosc(a + 1)
a2(b) = vectormenosc(a + 2)
a3(b) = vectormenosc(a + 3)
a4(b) = vectormenosc(a + 4)
a=a+5
Next b
Moduleserie.vectorcode(0) = Moduleserie.vector2((frmentrenamiento.variable * 25 * 10) +
1) 'aumenta en 1 el codigo recibido
Moduleserie.vectorcode(0) = Moduleserie.vectorcode(0) + 1
226
Unload Calculos
Load Calculos
End Sub
m=0
serial1.PortOpen = False ' despues de recibir los datos cierra el puerto
vectorporce(V) = vector1(V + 2)
Next V
End If
Unload calculosimple 'carga el formulario donde se muestran los datos
Load calculosimple
End Sub
Private Sub contenido_Click()
Unload frmcontenido ' carga el formulario correspondiente
Load frmcontenido
End Sub
Private Sub entrenamiento_Click()
n=0
'frmprincipal.j = 0
cambios40 = False 'inicializa las variables booleana que identifican la frecuencia
cambios200 = False
For Y = 0 To 4
Moduleserie.vectormas40(Y) = 0 'limpia las variables
Moduleserie.vectormenos40(Y) = 0
Moduleserie.vectormas200(Y) = 0
Moduleserie.vectormenos200(Y) = 0
Next Y
For Y = 0 To 10
Moduleserie.vector(Y) = 0
Next Y
228
serial.Output = "s" 'manda el caracter que indica al microprocesador que se esta solicitando
entrenamiento
End Sub
Private Sub enviar_Click()
Unload frmlibreria 'carga el formulario donde se muestran los datos de los centroides
existentes
Load frmlibreria
End Sub
Private Sub grficar_Click() 'carga el formulario donde se muestran los datos de las
grficas
Unload frmgrfica
Load frmgrfica
End Sub
Private Sub MDIForm_Load()
frmanimacion.Show
muestras = False
modo1 = False
cambios40 = False 'inicializa la variables booleanas que indican la frecuencia a la cual se
esta trabajando
cambios200 = False
cambiosm = False
'cambios1 = False
cambios11 = False 'indica la frecuencia en rcto simple 40
cambios12 = False 'indica la frecuencia en rcto simple 200
'cambios13 = False
cambios2 = False
' frecuencia40 = False
229
'frecuencia200 = False
Dim buscar2 As String
'frmentrenamiento.variable40 = 0
serial.CommPort = 1
'declara los parametros de la transmision serial del entrenamiento
serial.Settings = "9600,N,8,1"
'serial.InBufferSize = 16
serial.InputLen = 1
serial.InBufferCount = 0
serial2.CommPort = 1
serial2.Settings = "9600,N,8,1" 'declara los parametros de la transmision serial del rcto
completo
'serial.InBufferSize = 16
serial2.InputLen = 1
serial2.InBufferCount = 0
serial1.CommPort = 1
serial1.Settings = "9600,N,8,1" 'declara los parametros de la transmision serial del rcto
simple
'serial.InBufferSize = 16
serial1.InputLen = 1
serial1.InBufferCount = 0
variable = 0 'abre la base de datos existente y cuenta el nmero de objetos que hay y se lo
asigna al contador para 40 y p para 200
frmprincipal.WindowState = 2
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb"
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
frmentrenamiento.REGISTRO40.MoveLast
= frmentrenamiento.REGISTRO40.RecordCount
frmentrenamiento.REGISTRO40.Close
'/////////////////////////////////////////////////////////////////////////////////'
230
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
frmentrenamiento.REGISTRO200.MoveLast
p = frmentrenamiento.REGISTRO200.RecordCount
frmentrenamiento.REGISTRO200.Close
'/////////////////////////////////////////////////////////////////////////////////'
For Y = 1 To
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
buscar2 = "NMERO = '" & Trim(Y) & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar2
If frmentrenamiento.REGISTRO40!CDIGOS <> 0 Then 'se inicializa la variable del cod
del objeto con los objetos que tengan codigo
frmentrenamiento.variable40 = frmentrenamiento.variable40 + 1
frmentrenamiento.variable40 =
frmentrenamiento.variable200 = p
End If
Next Y
'///////////////////////////////////////////////////////////////////////////////'
For Y = 1 To p
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
buscar2 = "NMERO = '" & Trim(Y) & "'"
frmentrenamiento.REGISTRO200.FindFirst buscar2
If frmentrenamiento.REGISTRO200!CDIGOS <> 0 Then 'se inicializa la variable del
cod del objeto con los objetos que tengan codigo
frmentrenamiento.variable200 = frmentrenamiento.variable200 + 1
231
frmentrenamiento.variable40 =
frmentrenamiento.variable200 = p
End If
Next Y
frmentrenamiento.nmero40 =
frmentrenamiento.nmero200 = p
frmprincipal.Hide
Picture3.Visible = True
End Sub
Private Sub modo_Click()
modo1 = True
modo.Enabled = False
rctosimple.Enabled = False
rctocompleto.Enabled = False
entrenamiento.Enabled = False
m=0
vectorcods40 = 0 'inicializa las variables
vectorcods200(0) = 0
For F = 0 To 29
vectorporce(F) = 0
Next F
For F = 0 To 31
vector1(F) = 0
Next F
If serial1.PortOpen = False Then 'abre el puerto serial
serial1.PortOpen = True
End If
'Call serial1_OnComm
232
End Sub
Private Sub rctocompleto_Click()
Moduleserie.vectorcode(0) = 0
s=0
233
End Sub
Private Sub salir_Click()
Unload frmprincipal
End Sub
Private Sub serial_OnComm() 'evento que se activa cada vez que existe algo en el buffer de
recepcion en entrenamiento
If serial.CommEvent = comEvReceive Then
vector(n) = Asc(serial.Input)
'guarda en una variable todos los datos
recibidos por el serial
n=n+1
If n = 11 Then
'cuando termine de guardar los datos se va al procedimiento donde se
organizan los datos recibidos
Call Command1_Click
End If
End If
End Sub
Private Sub serial1_OnComm() 'evento que se activa cada vez que existe algo en el buffer
de recepcion en rcto simple
If serial1.CommEvent = comEvReceive Then
vector1(m) = Asc(serial1.Input)
'guarda en una variable todos los datos
recibidos por el serial
m=m+1
If m = 1 Then
If vector1(0) = "40" Then
frmentrenamiento.variable = frmentrenamiento.variable40
ElseIf vector1(0) = "200" Then
frmentrenamiento.variable = frmentrenamiento.variable200
234
End If
End If
calculosimple.Text4.Text = WW
If serial.PortOpen = True Then
serial1.PortOpen = False
End If
End If
End If
End If
End If
End Sub
Private Sub serial2_OnComm() 'evento que se activa cada vez que existe algo en el buffer
de recepcion en rcto completo
If serial2.CommEvent = comEvReceive Then
vector2(s) = Asc(serial2.Input)
'guarda en una variable todos los datos
recibidos por el serial
s=s+1
If s = 1 Then
If vector2(0) = "40" Then
frmentrenamiento.variable = frmentrenamiento.variable40
ElseIf vector2(0) = "200" Then
frmentrenamiento.variable = frmentrenamiento.variable200
End If
End If
'If s = 2 Then
'If vector2(1) = "255" Then
'frmprincipal.Picture3.Visible = False
'MsgBox "No se encontr objeto", vbOKOnly, "Informacin"
236
'serial2.PortOpen = False
's = 0
'End If
'End If
If s = ((10 * (frmentrenamiento.variable * 25)) + frmentrenamiento.variable + 2) Then
'cuando termine de guardar los datos se va al procedimiento donde se organizan los datos
recibidos
Call Command2_Click
End If
End If
End Sub
Private Sub Timer1_Timer()
Unload frmanimacion
frmprincipal.Show
Timer1.Enabled = False
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "grfica" 'enlaza los botones de la barra de herramienta a los procedimientos
grficar_Click
Case "complejo"
rctocompleto_Click
Case "simple"
rctosimple_Click
Case "entrenamiento"
entrenamiento_Click
237
Case "ayuda"
contenido_Click
End Select
End Sub
Private Sub txrx_Click()
Unload frmnuevomaterial 'carga el formulario del calculo de la energia tx y rx
Load frmnuevomaterial
End Sub
Private Sub uprs_Click()
Unload frmacercade 'carga el formulario del calculo de la energia tx y rx
Load frmacercade
End Sub
CODIGO DEL MODULO (moduleserie)
Public vector(10) As String 'almacena datos de entrenamiento
Public vector1(31) As String 'almacena datos de rcto simple
Public vector2(7600) As String 'almacena datos de rcto completo
Public vectormas40(4) As String 'almacena datos mas significativos de entrenamiento
Public vectormenos40(4) As Integer 'almacena datos de 16bits
Public vectormas200(4) As String
Public vectormenos200(4) As Integer
'Public vectormasc(499) As Integer
Public vectormenosc(3800) As Integer 'almacena datos de 16bits
'Public vectorcods(2) As String
'Public vectorcods4(1) As String
'Public vectorcods20(1) As String
Public vectorcods40 As Integer 'almacena el cod del objeto en rcto simple
Public vectorcods200(0) As String
Public vectorcode(0) As String 'almacena el cod del objeto en rcto completo
Public vectorporce(29) As String 'almacena el nmero de veces que dijo que era
determinado objeto
Public objeto(5) As String
Public tf(760) As Integer 'almacena las x mediciones de cada parametro
238
239
240
241
242
243
244
COMPARADOR LM311
245
CONVERTIDOR DC DC LT1054
246
MULTIPLEXOR MPC509
247
BUFFER CD74HCT365
248
TRANSDUCTORES DE 40KHZ
249
TRANSDUCTORES DE 200KHZ
250
RESISTENCIAS
251
252
Regulador LM317
253
Capacitores
254