You are on page 1of 257

PROTOTIPO PARA EL RECONOCIMIENTO DE OBJETOS CON

ULTRASONIDO EN APLICACIONES DE INSPECCIN CON PATRONES


PREDETERMINADOS

MNICA PATRICIA BOTERO ACOSTA


CSAR ANTONIO DE LA HOZ VIZCAINO

FUNDACIN UNIVERSIDAD DEL NORTE


DIVISIN DE INGENIERAS
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA
PROGRAMA DE INGENIERA ELECTRNICA
BARRANQUILLA
2005

PROTOTIPO PARA EL RECONOCIMIENTO DE OBJETOS CON


ULTRASONIDO EN APLICACIONES DE INSPECCIN CON PATRONES
PREDETERMINADOS

MNICA PATRICIA BOTERO ACOSTA


CSAR ANTONIO DE LA HOZ VIZCANO

Proyecto de grado presentado como requisito para optar


al ttulo de Ingeniero Electrnico

______________________________________________
Director: ERIC VALLEJO
Doctor en Automtica e Informtica Industrial

FUNDACIN UNIVERSIDAD DEL NORTE


DIVISIN DE INGENIERAS
DEPARTAMENTO DE INGENIERA ELCTRICA Y ELECTRNICA
PROGRAMA DE INGENIERA ELECTRNICA
BARRANQUILLA
2005

NOTA DE ACEPTACIN
_________________________
_________________________
_________________________
_________________________

___________________________________
Firma presidente del jurado

___________________________________
Firma del jurado

__________________________________
Firma del jurado

Barranquilla, 05 de diciembre del 2005.

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

FORMULACIN DEL PROBLEMA

18

1.1

PLANTEAMIENTO DEL PROBLEMA

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

DESCRIPCION GENERAL DEL SISTEMA

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

DESCRIPCION DETALLADA DEL SISTEMA


7.1
FUNCIONALIDAD DEL SISTEMA
7.1.1
Amplificacion de la Transmisin
7.1.2
Multiplexor MPC509
7.1.3
Amplificadores de ganancia programable PGA204 - 205
7.1.4
Filtro Pasabanda (40KHz y 200KHz)
7.1.5
Rectificador de onda completa
7.1.6
Filtro Pasabajas
7.1.7
Detector de Umbral
7.1.8
Convertidor Analgico - Digital
7.1.9
Buffer CD74HCT365
7.1.10
Etapa de Alimentacin
7.1.11
Microprocesador
7.1.12
Algoritmos del Microprocesador
7.1.13
Software de Visualizacin

67
67
67
68
69
72
73
74
75
76
77
78
81
82
95
3

7.2
8

ARQUITECTURA Y CONSTRUCCION DEL SISTEMA

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

ANLISIS DE LOS RESULTADOS

ADMINISTRACION DEL PROYECTO

140

9.1.1
9.1.2

140
143

Cronograma del Proyecto Final


Costos y Recursos

10

CONCLUSIONES

145

11

RECOMENDACIONES

146

12

BIBLIOGRAFIA

147

LISTA DE TABLAS

pg.
Tabla 1 Propiedades acsticas del aire y el agua

25

Tabla 2 Combinaciones de los Parmetros

116

Tabla 3 Calculo de la Energa Tx y Rx

134

Tabla 4 Matriz de contingencia usando los transductores de 40Khz

137

Tabla 5 Matriz de contingencia usando los transductores de 200Khz

137

Tabla 6 Tabla de Costos

143

LISTA DE FIGURAS
pg.
Figura 1 Espectro de las seales acsticas

22

Figura 2 Longitud de Onda en funcin de la frecuencia

23

Figura 3 Onda Longitudinal

25

Figura 4 Onda transversal

26

Figura 5 Onda superficial

26

Figura 6 Representacin tridimensional del patrn de radiacin acstica producido por un


transductor
29
Figura 7 Patrn de radiacin acstica

30

Figura 8 Patrones de naturaleza temporal y espacial

36

Figura 9 Etapas de un sistema de reconocimiento de patrones

37

Figura 10 A) Seleccin de las variables ms significativas B) Transformacin de las


variables originales
40
Figura 11 Una matriz de confusin para un problema con 5 clases

45

Figura 12 Diagrama de bloques. a) Etapa de adquisicin y preprocesamiento. b)


Procesamiento de la unidad central.
54
Figura 13 Diagrama de flujo

56

Figura 14 Bloques de Rabbit 3000

59

Figura 15 Etapa de amplificacin de los pulsos que excitan a los transductores

68

Figura 16 Diagrama de seleccin de los transductores receptores

69

Figura 17 Etapa de amplificacin de la seal recibida. A) Primera etapa de amplificacin


antes del filtro pasabanda. B) Segunda etapa de amplificacin despus del filtrado.
71
Figura 18 Filtro Pasabanda.

73
6

Figura 19 Rectificador de onda completa.

74

Figura 20 Filtro Pasabajas

74

Figura 21 Detector de Umbral

76

Figura 22 Etapa de digitalizacin de la envolvente

77

Figura 23 Buffer CD74HCT365

78

Figura 24 Etapa de 24V

79

Figura 25 Etapa de 12V

80

Figura 26 Etapa 5V

80

Figura 27 Etapa de 3.3V

81

Figura 28 Etapa -5V

81

Figura 29 Seales de control del sistema.

82

Figura 30 Reconocimiento Simple

84

Figura 31 Reconocimiento Completo

84

Figura 32 Entrenamiento

85

Figura 33 Librera

85

Figura 34 Diagrama de flujo de las rutinas del microprocesador

88

Figura 35 Ventana Principal

95

Figura 36 Men Ejecutar

96

Figura 37 Reconocimiento Simple

97

Figura 38 Reconocimiento Completo

98

Figura 39 Entrenamiento

99

Figura 40 Funcin Grficar

100
7

Figura 41 Funcin Librera

101

Figura 42 Men Complemento

102

Figura 43 Modo Manual

102

Figura 44 Ventana calcula los coeficientes de Tx y Rx

103

Figura 45 Men Ayuda

104

Figura 46 Ayuda del programa

104

Figura 47 Barra de Herramientas

105

Figura 48 Diagrama de flujo del software de visualizacin

105

Figura 49 Aspecto fsico del hardware

109

Figura 50 Aspecto fsico del todo el sistema

110

Figura 51 Parmetros de la Envolvente

115

Figura 52 Seal envolvente de la esponja

117

Figura 53 Estructura Final

118

Figura 54 A) Tren de pulsos antes de la amplificacin. B) Tren de pulsos despus de la


amplificacin.
119
Figura 55 A) Tren de pulsos antes de la amplificacin. B) Tren de pulsos despus de la
amplificacin.
120
Figura 56 Seal de eco

121

Figura 57 Eco en la primera etapa de amplificacin

122

Figura 58 Eco despus del filtrado

122

Figura 59 Eco despus de la segunda etapa de amplificacin.

123

Figura 60 Detector de umbral y envolvente.

123

Figura 61 Seal Envolvente con 40KHz A) Cubo B) Cilindro C) Esfera D) Cono

124
8

Figura 62 Seal Envolvente con 200KHz A) Cubo B) Cilindro C) Esfera D) Cono

126

Figura 63 Tren de pulsos generado por el Rabbit. A) 40Khz B) 200Khz

129

Figura 64 Seal de Reloj y CS del A/D

130

Figura 65 Seal envolvente del cubo en A) Madera B) Aluminio C) Acero

131

Figura 66 Seal envolvente de la jeringa A) Con la aguja B) Sin la aguja

133

Figura 67 Representacin de las clases con los parmetros A2 y A4

135

Figura 68 Reconocimiento de los objetos

136

Figura 69 rea libre de obstculo para transductores de 40Khz

139

Figura 70 Encendido del Hardware

151

Figura 71 Conector serial

152

Figura 72 Esquemtico de la Tarjeta de Adquisicin

156

Figura 73 Esquemtico de la Tarjeta de Alimentacin

156

Figura 74 Circuito impreso tarjeta. A) Superior B) Inferior

157

Figura 75 Circuito Impreso de la Tarjeta de Alimentacin

158

LISTA DE ANEXOS

ANEXO A MANUAL DEL USUARIO

151

ANEXO B ESQUEMATICO DE LATARJETA DE ADQUISICION

156

ANEXO C ARTE DELCIRCUITO IMPRESO

157

ANEXO D CODIGO DEL MICROPROCESADOR

159

ANEXO E CODIGO DEL SOFTWARE DE VISUALIZACION

182

ANEXO F HOJA DE ESPECIFICACIONES DE LOS DISPOSITIVOS

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:

En lugar de escribir especificaciones, representaciones e implementaciones independientes


para cada tipo, se escribe una sola, donde el tipo se reemplaza por un parmetro. Este
proceso se conoce con el nombre de parametrizacin.

PARTICIONAR:

Es la accin de dividir conjuntos en trozos ms pequeos.

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

igual cantidad de movimiento con respecto al hiperplano. Informalmente, es el promedio de


todos los puntos de X.
En fsica, el centroide puede, bajo ciertas circunstancias, coincidir con el centro de masas
(El centro de masas de un sistema discreto es el punto geomtrico donde la resultante de las
fuerzas gravitatorias ejercidas por todos los cuerpos del sistema se anula) del objeto y
adems con el centro de gravedad. En algunos casos, esto hace utilizar estos trminos de
manera intercambiable. Para que el centroide coincida con el centro de masa, el objeto tiene
que tener densidad uniforme, o la distribucin de materia a travs del objeto debe tener
ciertas propiedades, tales como simetra. Para que un centroide coincida con el centro de
gravedad, el centroide debe coincidir con el centro de masa y el objeto debe estar bajo la
influencia de un campo gravitatorio uniforme.

SEGMENTACIN:

La operacin de segmentacin ocurre cuando el sistema determina o que un elemento,


objeto o muestra, finaliza y da comienzo a otro. Los patrones individuales deben ser
segmentados y focalizados.

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:

El objetivo en la operacin de clasificacin es utilizar un vector con las caractersticas


provistas por el extractor de propiedades para asignar el objeto (patrn) de la entrada a una
categora. En muchos casos este paso de clasificar es lejanamente perfecto y por ende se
convierte en un trabajo en el que se averigua la probabilidad matemtica de cada una de las
categoras

INTERPRETACIN:

Es la fase en donde, tomando en cuenta la informacin extrada en las etapas anteriores, se


puede realizar una clasificacin de los objetos a reconocer.

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:

El reconocimiento de objetos en 3D con redes neuronales, realizado en Japn, en el


cual los objetos no slo eran clasificados sino identificados por la red neuronal [10].

El reconocimiento y localizacin de objetos con escaneo ultrasnico para ambientes


ptimamente opacos, realizado en Turqua.

La imagen es adquirida a travs de un escaneo ultrasnico en dos dimensiones sobre el rea


donde se encuentran localizados los objetos. Las caractersticas son extradas de los lmites
ms externos del objeto [8].

El reconocimiento de objetos con sensores ultrasnicos a distancias variables,


realizado en los Estados Unidos.

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].

La arquitectura de un sistema sensorial para la identificacin de partes y ensamblaje


robotizado, realizado en Espaa.

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

Segn los resultados obtenidos el sistema de reconocimiento con ultrasonido, alcanz un


nivel de aciertos superior al 90%, pero bajo condiciones ambientales de laboratorio en
donde la temperatura, humedad relativa, presin y el ruido, aunque no son controladas sus
efectos si se pueden reducir tomando las medidas de las seales en condiciones similares.
El mtodo de reconocimiento utilizado present un excelente comportamiento llegando a
discriminar caractersticas fsicas del orden de dcimas de milmetros con el sensor de
ultrasonido de 220Khz.
Para el desarrollo de un prototipo se considera aceptable un nivel de acierto del 80% y una
capacidad de discriminacin de caractersticas fsicas del orden de dcimas de centmetros
[3].
Otro sistema de reconocimiento es el basado en la visin artificial.
El propsito de un sistema de visin artificial, es formar una imagen de un objeto o
conjunto de objetos tridimensionales y obtener de esta imagen la informacin necesaria y
til para la ejecucin de una tarea, sin embargo en el caso ms simple, la informacin se
refiere solamente a la posicin y orientacin de un objeto aislado; en otros casos se deben
reconocer los objetos y determinar sus relaciones especiales.
La carga computacional, se refiere a la cantidad de datos que tienen que ser procesados por
unidad de tiempo. Cuando de visin se trata, se trabaja con un tasa promedio de 73,728
Mbps, para una resolucin de 640 x 480 pxeles, 8 bits de profundidad (niveles de grises) y
frecuencia de 30Hz [9]; mientras que con ultrasonido utiliza una tasa promedio de 12
Mbps, para una frecuencia de muestreo de 1 Mhz y una resolucin de 12 bits [3].
Posterior a esto se tiene el problema de la complejidad computacional, que se refiere a la
implementacin de algoritmos de reconocimiento eficientes, lo cual es de vital importancia
debido al tiempo de procesamiento, especialmente para aplicaciones prcticas [5].
Dentro de las alternativas de implementacin de un sistema para el reconocimiento de
objetos con ultrasonido, se encuentran, FPGA, Microprocesadores, DSPS. Estas son las
opciones donde se hallara el ncleo del sistema. Asimismo se necesitan dispositivos como
DsPIC, ADC, Transductores ultrasnicos, entre otros, para las dems etapas del sistema [1,
2, 6, 8,10].
Todos los elementos antes mencionados, hacen parte de los recursos de hardware. El
trmino recursos de hardware hace referencia a los componentes que hacen parte de un
circuito electrnico, junto con el montaje y conexiones asociadas a stos [7].

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

FORMULACIN DEL PROBLEMA

PLANTEAMIENTO DEL PROBLEMA

En la actualidad existen sistemas con diferentes instrumentos para adquirir la informacin


del medio, entre ellos se tienen Sensores Trmicos, Rayos-X, Magnticos, Visin artificial,
Ultrasonido, etc [13]. Los sistemas ms utilizados para el reconocimiento de objetos estn
basados en visin artificial y/o el ultrasonido, siendo el primero, el de uso ms frecuente.
Los sistemas basados en visin artificial son afectados por factores como la iluminacin,
perspectiva y fondo, cuando stos no son controlables; originando as interpretaciones
erradas por parte del sistema de reconocimiento.
Adems, el trabajar con video representa una mayor carga computacional con respecto al
ultrasonido. Esto se debe a que en las situaciones donde se puede extraer la misma
caracterstica de un objeto, a travs del ultrasonido como de la visin artificial, este ltimo
requiere mayor cantidad de datos para obtener el mismo resultado. Una alternativa que se
ha dado, en muchos casos, al problema de la caracterizacin de objetos es la integracin o
la fusin sensorial; propuestas en las cuales se recurre a sensores diversos como visin y
ultrasonido para determinar diferentes caractersticas de objetos o entornos. Sin embargo, el
problema de la carga computacional se incrementa.
Al interior de la Universidad del Norte y en Barranquilla, no se ha trabajado en este campo
del reconocimiento de objetos con ultrasonido, slo con sistemas basados en visin
artificial. Igual ocurre en Colombia, en donde los proyectos e investigaciones que se han
desarrollado en esta rea son muy escasos.
1.2

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

Disear un prototipo para el reconocimiento de patrones utilizando ultrasonido, para


detectar componentes de algunos objetos, extrayendo caractersticas que le sean propias.
2.2

OBJETIVOS ESPECFICOS

Desarrollar una plataforma de reconocimiento.


Presentar una alternativa a los sistemas de reconocimiento basados en visin artificial.
Implementar un algoritmo de reconocimiento.
Implantar transductores con una frecuencia de operacin, que permita obtener la
informacin necesaria del objeto a reconocer.

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

FUNDAMENTOS DEL ULTRASONIDO

El ultrasonido, perteneciente a la rama de la fsica Ultrasnica, que se ocupa de las ondas de


sonido de alta frecuencia, generalmente por encima de 20.000 hercios (Hz), es decir, ms
all de las frecuencias audibles, las cuales se encuentran entre los 20 Hz y 20 KHz, no hay
que confundirla con la supersnica, que trata de los fenmenos asociados al movimiento de
un objeto slido a velocidades superiores a la del sonido. Los generadores ultrasnicos
modernos pueden producir frecuencias de varios giga hercios (1 giga hercio, abreviado
GHz, equivale a 1.000 millones de hercios) convirtiendo corrientes elctricas alternas en
oscilaciones mecnicas. La deteccin y medida de ondas ultrasnicas se lleva a cabo
fundamentalmente mediante receptores piezoelctricos o por medios pticos, ya que estas
ondas pueden hacerse visibles a travs de la difraccin de la luz. [4]
Figura 1 Espectro de las seales acsticas

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)

En la siguiente grfica se muestra la longitud de onda del sonido en funcin de la


frecuencia, para una temperatura ambiente.
Figura 2 Longitud de Onda en funcin de la frecuencia

Longitud de onda
del sonido en el
agua

Longitud de onda
del sonido en el
aire

Tomado de [16]

Velocidad acstica: Es la velocidad de transmisin de la energa sonora a travs de un


medio. En el aire el sonido viaja por comprensin y expansin de las molculas en la
direccin de viaje. La velocidad del sonido en el aire es 332 m/s a 0C y es directamente
proporcional a la temperatura del aire. Cuando la temperatura del aire se incrementa, la
velocidad del sonido tambin se incrementa. Donde c (t)= velocidad del sonido en el aire en
funcin de la temperatura, y T es la temperatura del aire. [4]
23

c( T ) 332 0 ,6T

4.1.2

m/ s

(2)

Propagacin de las ondas ultrasnicas

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)

0 Densidad del medio en reposo.


Vs Velocidad del sonido
Algunas propiedades acsticas comparativas del aire y el agua se ilustran en la siguiente
tabla.

24

Tabla 1 Propiedades acsticas del aire y el agua


Densidad
Temperatura (C) (Kg/m3)
Agua
20
1000
Agua de Mar 13
1026
Aire
0
1,29
Aire
20
1,21

Velocidad
(m/sg)
1480
1500
332
343

Impedancia acstica MKS


Rayls
1.48 x 106
1.54 x 106
428
415

Tomado de [16]

Modos de propagacin en slidos


En los slidos las ondas acsticas se pueden propaga en varios modos, los principales son,
modo longitudinal, transversal y superficial. Estos modos estn basados en el camino en
que se propaga la onda.
4.1.2.1.1 Ondas Longitudinales
Las oscilaciones ocurren en la direccin longitudinal o en la direccin de propagacin de la
onda. Este tipo de ondas se propaga tanto en lquido como en slido, debido a que la
energa viaja a travs de la estructura atmica por una serie de movimientos de compresin
y expansin.
Figura 3 Onda Longitudinal
Direccin de propagacin
de la onda
Onda longitudinal

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

Figura 4 Onda transversal

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

Coeficientes de Reflexin y Transmisin

Las ondas ultrasnicas se reflejan en las fronteras donde existen discontinuidades en la


impedancia acstica. Esto comnmente se refiere al desacople de impedancia. La fraccin
de la intensidad de la onda incidente en las ondas reflejadas se puede obtener debido a la
velocidad de la partcula y la presin local de la partcula que es requerida para que la
frontera de dos materiales sea continua.
Los coeficientes de reflexin y transmisin se expresan en decibeles.

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

Caractersticas de los sensores

En el proceso de modelar la capacidad de los sensores para realizar observaciones del


entorno, es preciso considerar fundamentalmente las siguientes caractersticas del sensado:
Complejidad del dispositivo: es muy difcil describir con un modelo exacto a un sensor
cuando este esta conformado de elementos fsicos, puesto que cada uno de ellos contribuye
en la extraccin de las observaciones.
Errores de observaciones: Las caractersticas reconstruidas por el tratamiento de los datos
del sensor, tiene mas incertidumbre asociada a ellas por si mismas, que al ruido introducido
al sensor. El error puede verse, por ejemplo, a imprecisiones en la colocacin de los
dispositivos, interpretaciones incorrectas de las medidas, o a fallos en los dispositivos.
Disparidad en la observacin: Los robots dotados con sensores se caracterizan por que
pueden obtener de ellos una gran diversidad de parmetros que describan el entorno:
bordes, inclinacin, posiciones, peso, textura, etc. Si se puede combinar la informacin de
diferentes sensores, es posible transformar algn tipo de caracterstica geomtrica con
incertidumbre a otra con mayor grado de confiabilidad.
Sensado Multi-punto: Cuando se tiene dos o ms sensores separados geomtricamente, se
debe estar en capacidad de transformar su informacin en un sistema coordinado comn, de
tal forma que los valores puedan coordinarse. Para ellos es fundamental considerar primero,
la forma de involucrar los modelos de ruido en la estructura, y segundo un mecanismo para
comunicar informacin entre los diferentes sensores. [4]
4.2.2

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

RECEPCIN Y ACONDICIONAMIENTO DE LA SEAL

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

Compensacin atenuacin-distancia (CAD)

Debido a la propagacin en el medio, las seales ultrasnicas sufren una atenuacin.


Debido a esto, se producirn ecos diferentes dependiendo de la profundidad en la que se
31

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

La frecuencia de muestreo ha de ser mayor que el doble de la mxima frecuencia presente


en la seal de entrada para evitar la aparicin de subarmnicos o aliasing4 (criterio de
Nyquist). An verificndose este criterio, el mximo de la amplitud registrada diferir de la
real en una cantidad que depende de la relacin entre la frecuencia de muestreo y la de la
seal. Para seales sinusoidales, el error puede alcanzar un 30% si la relacin fm/fs (donde
fm es la frecuencia de la seal y fs es la de muestreo) es de 4:1, reducindose por debajo del
4% nicamente cuando esta llega a ser 12:1. Para reducir este error, el convertidor A/D
debe operar a muy alta velocidad (lo que consume ms memoria, ya que se requiere
almacenar mayor cantidad de datos).
Otra alternativa es trabajar con la envolvente de la seal, cuyas componentes de frecuencia
estn por debajo de la seal de radiofrecuencia. Finalmente, diversas tcnicas de
procesamiento digital de seal permitirn operar con frecuencias de muestreo ms bajas sin
prdida de precisin siempre que se verifique el criterio de Nyquist. [1]
4.4

PROCESAMIENTO DIGITAL DE LA SEAL

Luego de que la seal es acondicionada, se procede al procesamiento de la seal.


Con la aparicin de los dispositivos de lgica programable como las FPGAs, DSP, CPLD,
etc., se hizo mas fcil el tratamiento digital de las seales. Adems estos dispositivos
permiten implementar sistemas altamente complejos, como sistemas para la clasificacin e
identificacin de seales.
Para realizar un procesamiento digital de la seal, se necesita que sta se encuentre en dicho
formato inicialmente. Para esto existen los convertidores anlogos digitales.

32

4.4.1

Convertidor Anlogo Digital

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

El filtrado digital es una parte muy importante en el procesamiento digital de seales


debido a las nmerosas aplicaciones en las que los filtros digitales son empleados. Estas
aplicaciones que pueden ser biomdicas, acsticas, ssmicas, de instrumentacin y
comunicaciones de audio y datos, se resumen en dos usos generales: la separacin de
seales que han sido mezcladas y la restauracin de seales que han sido distorsionadas.
El trmino filtro digital se entiende como cualquier procesamiento realizado en una seal
de entrada digital. Un filtro digital es la implementacin en hardware o software de una
ecuacin diferencial.
Estos presentan algunas ventajas como son:

Alta inmunidad al ruido

Alta precisin (limitada por los errores de redondeo en la aritmtica

Fcil modificacin de las caractersticas del filtro.

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.

Determinar la funcin de transferencia que cumpla las especificaciones.

Realizar la funcin de transferencia en hardware o software. [1]


4.4.3

Dispositivos Lgicos Programables

El procesamiento de los datos, se pueden llevar a cabo en dispositivos como:


Microprocesadores : Esencialmente, un microprocesador es un circuito de alta escala de
integracin compuesto de muchos circuitos ms simples tales como flip-flops, contadores,
registros, decodificadores, etc., todos se encuentran dentro de la misma pastilla de silicio,
de tal forma que el microprocesador puede ser considerado como un dispositivo lgico de
propsito general o universal. Cuando se habla de programabilidad se refiere a la capacidad
que tiene el microprocesador para que su funcin sea definida a travs de un programa. El
programa est formado por una serie de instrucciones relacionadas, ejecutadas
secuencialmente y que pueden implicar operaciones lgicas o aritmticas. Las instrucciones
se especifican por medio de un cdigo especial que constituye el lenguaje del
microprocesador. [1]
FPGA: Una FPGA es un circuito integrado cuya tecnologa se encuentra entre las Pals las
matrices de puertas a medida. Las Pals se desarrollaron en la dcada de los aos 70 y
tuvieron muchas aplicaciones reemplazando entre 1 y 10 circuitos integrados discretos tipo
TTL en el diseo de sistemas fsicos. Este tipo de dispositivos utilizaba la tecnologa de
fusibles, es decir eran del tipo OTP (programables una sola vez). Por otro lado, los
dispositivos a medida se utilizaban para grandes series de fabricacin (el punto ptimo se
encontraba en 10.000 unidades). Las FPGAs se basan en estas tecnologas pero las
interconexiones pueden ser definidas por el usuario mediante tecnologa fusible (como las
Pals) y ser del tipo OTP, mediante antifusibles o mediante clulas tipo SRAM. El diseo de
una FPGA se lleva a cabo especificando la funcin lgica a desarrollar, bien mediante un
sistema CAD de dibujo de esquemas, bien mediante un lenguaje de programacin de alto
nivel. Una vez definida la funcin a realizar, el diseo se traslada a la FPGA. Este proceso
programa los bloques lgicos configurables (CLBs) para realizar una funcin especfica
34

(existen miles de bloques lgicos configurables en la FPGA). La configuracin de estos


bloques y la flexibilidad de sus interconexiones son las razones por las que se pueden
conseguir diseos de gran complejidad. Las interconexiones permiten conectar los bloques
lgicos (CLBs) entre s. [3]
4.5

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

Patrones y Reconocimiento de Patrones

Mucha de la informacin que se maneja en la vida real se presenta en la forma de patrones


complejos: caras, textos escritos, enfermedades, msica, flores, piezas industriales, etc.
Ciertas aplicaciones requieren sistemas capaces de reconocer dichos patrones con el fin de
automatizar procesos de clasificacin o inspeccin. Esto se logra a travs de las tcnicas de
reconocimiento cuyas fuentes son las matemticas, la estadstica y la inteligencia artificial.
Aunque la aplicabilidad de las tcnicas resulta, a priori, muy amplia, no existe un mtodo
que sea la solucin para todas las situaciones. Diversas razones hacen que los sistemas de
reconocimiento de formas operativos sean muy especficos del problema a resolver:
1. La naturaleza de los patrones: caracteres escritos, smbolos, dibujos, imgenes
biomdicas, objetos tridimensionales, firmas, huellas dactilares, espectrogramas, imgenes
de Teledeteccin, cromosomas.
2. Los requerimientos del sistema, especialmente en tiempo de respuesta hace que algunos
mtodos de reconocimiento, an siendo superiores en xito no sean aplicables en la
prctica.
35

3. Factores econmicos: un sistema equipado con diferentes sensores y equipos de


procesamiento muy potentes pueden dar resultados muy satisfactorios pero no pueden ser
asumidos por los usuarios.
Estos factores hacen que un sistema adecuado para un problema sea inaplicable para otro,
lo que posibilita el estudio y desarrollo de nuevas tcnicas.
Debe considerarse, adems, que el reconocimiento de patrones no constituye un campo de
estudio cerrado sino que las tcnicas relacionadas con este campo pueden encontrase en
otras ramas de la Ciencia y de la Tecnologa. De ah que encontrar una definicin formal
para un campo tan diversificado sea imposible.
Aproximaciones al Reconocimiento de Patrones
En la literatura pueden encontrarse diferentes aproximaciones a ese problema, motivadas
por la diversidad de tareas de reconocimiento que pueden abordarse. Aproximacin
estadstica. La aproximacin ms simple (y no por ello la menos eficiente) consiste en
representar cada patrn mediante un vector de nmeros, resultantes del muestreo y
cuantificacin (o binarizacin) de las seales externas (figura 8) y cada clase por uno o
varios patrones prototipo. Dado que existe variabilidad en las medidas registradas, cada
componente del vector es una variable aleatoria y cada uno de sus valores es una
realizacin de esa variable aleatoria.
Figura 8 Patrones de naturaleza temporal y espacial

Tomado de [18]

36

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.
El estudio del conjunto apropiado de variables, la variablidad de los patrones de una clase,
las medidas de similaridad entre patrones y entre patrones y clases constituye el
reconocimiento estadstico de patrones.
Configuracin de un Sistema de Reconocimiento de Patrones
Figura 9 Etapas de un sistema de reconocimiento de patrones

Tomado de [18]

37

Adquisicin de datos. Representacin de los patrones


La entrada a un sistema de reconocimiento estadstico de patrones es un vector numrico
que contiene los valores muestreados y cuantificados (o binarizados) de una serie de
seales naturales.
De una manera ms formal, suponiendo patrones n-dimensionales, un patrn X es una
variable aleatoria n-dimensional compuesta por n componentes, x1, x2,..., xn, tales que xi
Gi para i = 1, 2,..., n.

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)

donde x denota el producto cartesiano.

38

Similaridad entre patrones


La tarea fundamental de un sistema de reconocimiento de patrones (clasificador) es la de
asignar a cada patrn de entrada una etiqueta. Dos patrones diferentes deberan asignarse a
una misma clase si son similares y a clases diferentes si no lo son.
Por ejemplo en un sistema de adquisicin perfecto (sin ruido). Se puede asegurar que:
1. La adquisicin repetida del mismo patrn debera proporcionar la misma representacin
en el espacio de patrones.
2. Dos patrones diferentes deberan proporcionar dos representaciones diferentes.
3. Una ligera distorsin aplicada sobre un patrn debera proporcionar una pequea
distorsin de su representacin.
En definitiva, se supone que el proceso de adquisicin es biunvoco y continuo. Estas
consideraciones sugieren que si las representaciones de dos patrones estn muy cercanas en
el espacio de representacin, entonces los patrones deben tener un alto grado de
similaridad. No obstante, no puede afirmarse tajantemente que a mayor distancia mayor
disimilaridad ya que la medida (absoluta) de distancia depende de la escala en la que se
cuantifiquen las variables asociadas al patrn.
Variabilidad entre patrones
La suposicin de un sistema de adquisicin perfecto no deja de ser eso, una suposicin. Los
sistemas de adquisicin introducen, indefectiblemente, cierta distorsin o ruido, lo que
produce una variabilidad en la representacin de los patrones. Aunque es posible controlar
eficientemente en muchos casos esta distorsin mediante el calibrado de los sistemas de
adquisicin aparece otra fuente de variabilidad por la propia naturaleza de los patrones.
Seleccin y extraccin de caractersticas
El problema que se trata de resolver es el de extraer la informacin relevante para la
clasificacin entre la suministrada por los sensores (datos en bruto). De forma general este
problema puede plantearse como sigue. Dado un conjunto de patrones n-dimensionales
X = [x1, x2,..., xn]T
se trata de obtener un nuevo conjunto (caractersticas) d-dimensionales
Y = [y1, y2,..., yd]T
39

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.

Cambiando el espacio de representacin


El objetivo es obtener una nueva representacin de los patrones en la que los agrupamientos
aparezcan bien separados si son de diferente clase y que haya un agrupamiento por clase.
Esto puede conseguirse aplicando alguna transformacin sobre los datos originales. Estas
transformaciones suelen ser transformaciones lineales y el objetivo suele ser maximizar la
varianza.
Estas tcnicas reciben el nombre de extraccin de caractersticas y producen un nuevo
conjunto de variables. Estos procesos se ilustran en la figura 10.
Figura 10 A) Seleccin de las variables ms significativas B) Transformacin de las
variables originales

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

, estas recibirn el nombre de conjunto de las

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

Estimacin del error de clasificacin y verificacin de resultados

La forma general de calcular el error de clasificacin exacto para un problema de decisin


multiclase con patrones multidimensionales viene dado por la ecuacin:
J

P(error ) 1 P(acierto ) 1 P( x | wi ) i dX
i 1 Ri

(9)

Si la dimensionalidad de los datos es muy pequea pueden utilizarse mtodos numricos


para este clculo, pero si no es as (casi siempre) no es posible, en la prctica, hacer este
clculo.
Afortunadamente si es posible establecer una estimacin de este valor para el caso de una
clasificacin supervisada.
Todos los mtodos de estimacin se basan en la suposicin de la existencia de un conjunto
de entrenamiento, T, compuesto por N prototipos de J clases. Este conjunto se utilizar para
construir y evaluar el clasificador.
Los estimadores de error se basan en calcular la proporcin de prototipos incorrectamente
etiquetados por el clasificador. Para establecer una forma comn entre los diferentes
estimadores que se presentan, se introduce una funcin indicadora,
, de forma que una
vez construido el clasificador d y dado
un prototipo (Xi, ci),
1 si d ( X i ) ci (error )
( X i , ci )
0 si d ( X i ) ci (acierto )

(10)
43

Estimacin por resustitucin


A partir de T se construye el clasificador d utilizando los N prototipos. Una vez construido
se clasifican todos los patrones de T utilizando d y la proporcin de patrones
incorrectamente clasificados proporciona el estimador de error por resustitucin.
Formalmente, el estimador por resustitucin, R (d), se calcula
R(d )

1
N

( X

( X i ,ci )T

i,

ci )

El problema fundamental de este estimador es que se calcula usando el mismo conjunto de


prototipos que se usa para construir el clasificador por lo que proporciona un estimador
sesgado optimista de la bondad de d.
Estimacin mediante un conjunto de prueba
Este estimador solventa el problema de la dependencia entre el conjunto usado para
construir el clasificador y el usado para realizar la estimacin dividiendo el conjunto inicial
de prototipos, T, en dos conjuntos independientes Tl y Tt de forma que:
1. Los prototipos de Tl constituyen el conjunto de aprendizaje y se usan nicamente para
construir d.
2. Los prototipos de Tt constituyen el conjunto de prueba y se usan nicamente para
estimar el error.
Debe tenerse cuidado de asegurarse que los prototipos de Tt sean independientes de los de
Tl pero que sigan la misma distribucin. La manera habitual de asegurar estas condiciones
es realizar una particin de T seleccionando los prototipos aleatoriamente, de forma que
l
t
T l T t T y T T 0 . Este conjunto se suele particionar de manera que
| T t |

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)

Estimacin por validacin cruzada


Este estimador es el ms adecuado cuando el conjunto de prototipos es pequeo.
El gran inconveniente de este estimador es el gran esfuerzo computacional que requiere:
todos los prototipos de T se usan para construir d, y cada uno de ellos se usa exactamente
una vez para prueba.
Verificacin de resultados
Una herramienta muy utilizada para la presentacin y el anlisis del resultado de una
clasificacin es la matriz de confusin, tambin llamada matriz de contingencia. Se puede
considerar como una matriz cuadrada de orden N x N. que tiene anexas una serie de filas y
columnas auxiliares para contabilizar totales y otras mtricas.
Figura 11 Una matriz de confusin para un problema con 5 clases

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

Estimacin de la funcin de densidad

El objetivo final es de etiquetar un patrn X utilizando el siguiente conjunto de funciones


discriminantes:

gi X P X wi i

(12)

Donde no se supone nada acerca de la forma funcional de P X wi . Tan slo se dispone de


un conjunto de prototipos, T, y a partir de l se debe estimar tanto el valor de P X wi
como el de i .
La pregunta es de qu forma puede utilizarse la informacin proporcionada por el
conjunto de prototipos para inferir, a partir de l, el valor de la funcin de densidad de
probabilidad mediante una interpretacin geomtrica?
Si se fija un volumen v en P y se considera varias regiones en este espacio, resulta evidente
que
a) En una regin en la que P X wi tiene un valor bajo, la probabilidad de encontrar un
patrn de clase wi es pequea.
b) A la inversa, hay una alta probabilidad de encontrar un patrn de clase wi en una regin
que tiene asociada un alto valor de la funcin de densidad.
De manera informal se podra decir que dado un conjunto de patrones, hay una alta
probabilidad de encontrar un patrn en una regin densamente poblada y baja en regiones
poco pobladas en las que las observaciones estn ms dispersas. Con este planteamiento
simple se analizar la estimacin de los k vecinos ms prximos, la cual se emplear en
este sistema.
Estimacin mediante los k vecinos ms prximos
46

Si se supone un espacio de representacin bidimensional y una serie de prototipos de una


misma clase representados en l. Dado un patrn cualquiera X, si se considera los k
prototipos ms prximos a X, stos estarn localizados en un crculo centrado en X.
Parece sensato pensar que el rea del crculo que encierra un nmero fijo de puntos, k, es
menor en regiones densamente pobladas que en regiones donde los puntos estn ms
dispersos. Este sencillo planteamiento es la base de la estimacin mediante los k vecinos
ms prximos. En espacios multidimensionales, el crculo se convierte en una
hiperesfera, y el planteamiento anterior se puede extender fcilmente ya que el volumen
de la hiperesfera que encierra a k puntos est relacionado con el valor de la funcin de
densidad de probabilidad en el centro de la hiperesfera.
Mtodos de clasificacin del vecino ms prximo
Un estimador de la probabilidad a posteriori es
K ( X ) Ni
K ( X ) Ki ( X )
P w X P X wi i i
i

N i v( X ) N v( X ) N
k

(13)

A partir de este resultado se formula la siguiente regla de clasificacin:


Seleccionar wc si K c ( X )

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)

El efecto de esta regla es el de dividir el espacio de representacin en N ``regiones de


influencia'', una por cada prototipo. Cada una de esas regiones tiene forma poligonal y los
bordes corresponden a los puntos situados a igual distancia entre prototipos.
Regla k-NN
La regla de clasificacin por vecindad ms general es la regla de clasificacin de los k
vecinos ms cercanos o simplemente k-NN. Se basa en la suposicin de que los
prototipos ms cercanos tienen una probabilidad a posteriori similar.
Cotas de error de la regla 1-NN
Se parte de una suposicin bsica: el conjunto de aprendizaje es grande, virtualmente
infinito ( N ) . En la prctica pocas veces se dispone de un conjunto de esta naturaleza.
Error asociado a la regla 1-NN
Si se nota por E* al error de Bayes y E1 al error asociado a la regla 1-NN, puede
demostrarse que:

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

prdidas de generalidad ya que estn orientados, nicamente, a reducir el nmero de


clculos.
Entre estos mtodos estn los basados en ordenaciones y jerrquicos.
Los mtodos basados en ordenaciones organizan los patrones del conjunto de referencia de
acuerdo a alguna coordenada, y la bsqueda se realiza de acuerdo a alguna propiedad de la
mtrica asociada al espacio.
Los mtodos jerrquicos realizan una descomposicin jerrquica del conjunto de
referencia que implica la organizacin de los patrones en una estructura de tipo rbol, para
despus aplicar una tcnica de poda y ramificacin (branch and bound) para explorar el
rbol.
No obstante, hay que considerar que todos estos mtodos tienen asociado un coste adicional
a la bsqueda: el coste del preprocesamiento, entendido ste como el coste asociado a la
seleccin del conjunto reducido o la construccin del rbol de bsqueda. En consecuencia,
para determinadas aplicaciones se ha de considerar que el coste de preprocesamiento puede
ser alto y que la eleccin de estos mtodos como alternativa a la fuerza bruta debe
considerar, necesariamente, este coste y llegar a un compromiso entre los costes de
procesamiento y bsqueda.
4.5.5

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

entrenamiento pueden producirse errores en el etiquetado o pueden aparecer patrones


extraos (outliers) por problemas en la captacin de los datos. Estos prototipos suelen
aparecer en zonas cercanas a las regiones de decisin e influyen negativamente en el
aprendizaje ya que incrementan la tasa de error de clasificacin. En segundo lugar, se ha
discutido con profundidad acerca del alto coste computacional de las reglas k-NN aplicadas
al conjunto completo de prototipos. El objetivo de los mtodos de edicin es el de
seleccionar un conjunto de referencia representativo y reducido, de forma que decrezca
tanto el error de clasificacin como el coste computacional de la clasificacin. El
mecanismo utilizado es el de descartar patrones inmersos en otros agrupamientos o en
zonas de alto solapamiento entre clases.
Una vez editado el conjunto de prototipos, se procede a clasificar patrones, independientes
del conjunto de prototipos, aplicando la regla 1-NN y tomando como conjunto de referencia
el conjunto editado.
4.6

ESTADO DEL ARTE

Dentro de las tcnicas de reconocimiento con mayor nmero de investigaciones


encuentran las Redes Neuronales, Algoritmos Genticos y la Lgica Difusa.

se

Estas tcnicas tienen un amplio rango de aplicaciones, no slo en el reconocimiento de


patrones, sino tambin en la prediccin del comportamiento de modelos previamente
definidos.
4.6.1

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

El algoritmo gentico es una tcnica de bsqueda basada en la teora de la evolucin de


Darwin, que ha cobrado tremenda popularidad alrededor del mundo durante los ltimos
aos. Se presentarn aqu los conceptos bsicos que se requieren para abordarla, as como
un sencillo ejemplo que permita a los lectores comprender cmo aplicarla al problema de su
eleccin. Adicionalmente, se hablar acerca de los diversos ambientes de programacin
actuales basados en algoritmos genticos y de las reas abiertas de investigacin.
Es un algoritmo matemtico altamente paralelo que transforma un conjunto de objetos
matemticos individuales con respecto al tiempo usando operaciones modeladas de acuerdo
al principio Darwiniano de reproduccin y supervivencia del ms apto, y tras haberse
presentado de forma natural una serie de operaciones genticas de entre las que destaca la
recombinacin sexual. Cada uno de estos objetos matemticos suele ser una cadena de
caracteres (letras o nmeros) de longitud fija que se ajusta al modelo de las cadenas de
cromosomas, y se les asocia con una cierta funcin matemtica que refleja su aptitud. [5]
4.6.3

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

La lgica difusa es utilizada en Comnmente se usa para toma de decisiones en presencia


de datos o conocimientos inciertos.
La lgica difusa se ha utilizado principalmente en la creacin de sistemas expertos, esto es,
la elaboracin de programas de cmputo con controles lineales y no lineales que permiten
el reconocimiento de patrones de conducta, evaluacin de sistemas financieros, diagnstico
mdico, anlisis estadstico y diseo de estrategias en juegos como el ajedrez. [5]

53

5
5.1

DESCRIPCION GENERAL DEL SISTEMA

DIAGRAMA DE BLOQUES

En la figura 12 se puede apreciar en el diagrama de bloques del sistema.


Los transductores son activados uno a la vez para poder diferenciar los ecos respectivos, y
evitar que exista interferencia entre ellos. La seleccin del transductor que transmite el eco
es controlada por el microprocesador, por me dio de dos puertos de salida.
Figura 12 Diagrama de bloques. a) Etapa de adquisicin y preprocesamiento. b)
Procesamiento de la unidad central.

Tx1

PC

RabbitCore

Amplificacin

RS232

Tx2

3610
ST
CS SCLK

CS: Seleccin del ADC

Data OUT
A/D

SCLK: Reloj para el


ADC
ST:
Seleccin
transductor

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

a) Etapa de adquisicin y preprocesamiento.

54

UNIDAD CENTRAL
Visualizacin de los
resultados

Interpretacin

Clasificacin

Segmentacin

Extraccin
propiedades

de

Datos

b) Procesamiento de la unidad central.


Los transductores receptores entregan la seal de eco recibida a la etapa de adquisicin de
datos que consiste bsicamente de un amplificador, filtro paso-banda, filtros pasa-bajas y
con conversor A/D, los cuales fueron previamente definidos en el marco terico.
La funcin del amplificador es reducir la atenuacin de la seal producida por la distancia
de vuelo del pulso sonar y por la forma de los objetos.
Luego la seal es digitalizada por medio del CAD y luego enviada a la tarjeta de desarrollo,
en donde se realiza el proceso de reconocimiento.
Luego de obtener los datos del conversor A/D se procede a realizar el procesamiento en la
unidad central, que est conformada por los bloques que se observan en la figura 12.
La comunicacin con el usuario ser a travs de una interfaz RS232, en donde el usuario
puede observar el resultado del reconocimiento.
5.2

DIAGRAMA DE FLUJO

En la figura 13 se observa el diagrama de flujo general del sistema.

55

Figura 13 Diagrama de flujo

INICIO

El ncleo emite un tren de


pulsos y espera recibir el
eco

La seal es amplificada para


excitar a los transductores Tx
(200 40KHz)

El transductor emite la
seal ultrasnica

El transductor Rx recibe
el eco

Amplificacin de la seal

56

Filtrado de los componentes de


baja frecuencia

Se realiza la conversin
A/D

Se almacenan los datos

Segmentacin

Extraccin de propiedades

Clasificacin

Interpretacin

Visualizacin de los resultados

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

JUSTIFICACION DE LOS ELEMENTOS DE DISEO

Los elementos de diseo que se utilizaron en el prototipo son:


6.2.1

Componentes de hardware

Rabbit Core 3610


El microprocesador Rabbit 3000 posee una velocidad de procesamiento de 22MHz, 33
puertos paralelos (soportan hasta 5V), de los cuales treinta y uno (31) pueden ser
configurados como entrada o salida y dos (2) estn configurados como salidas, posee una
memoria flash de 256KHz y 128KHz de memoria RAM.
El Rabbit 3000 posee un buen procesamiento en cuanto a la realizacin de operaciones
matemticas, lo que facilita el algoritmo implementado. Adems posee el nmero de
puertos suficientes para el control del conversor y de la etapa de acondicionamiento de la
seal. Su bajo costo tambin justifica su seleccin.
Figura 14 Bloques de Rabbit 3000

59

Convertidor Analgico - Digital AD7475


El sistema requiere que una seal analgica proveniente del detector de envolvente sea
convertida a datos digitales. Los rangos de frecuencia que maneja esta seal se encuentra
entre 4KHz y 6KHz y los rangos de voltajes entre 0V a 2.5V.
El convertidor A/D AD7475 posee una sola entrada, (slo se necesita convertir una seal),
una resolucin de 12 bits y un puerto salida de datos, se escogi esta resolucin debido a
que el nmero de bits es suficiente para obtener los datos de inters de la seal.
La frecuencia de muestreo que maneja es de 1MSPS, y el rango de voltaje en la entrada
(depende del voltaje de referencia) es de 0V a 2.5V. Estos parmetros se ajustan a las
necesidades del prototipo, por una parte la frecuencia de muestreo permite el uso de este en
aplicaciones futuras que requieran velocidades altas o anlisis de otro tipo de seales, como
por ejemplo el anlisis del eco recibido en vez de la envolvente, por otra parte el rango de
la envolvente se encuentra dentro de los aceptados por el convertidor A/D.
Adems este conversor se alimenta con 5V al igual que la mayora de los dispositivos
utilizados en la tarjeta.
Voltaje de Referencia AD780
El convertidor analgico digital AD7475 requiere de un voltaje de referencia el cual
proporciona el rango de los valores de voltaje permitidos a la entrada del ADC. Debido a
que slo se necesitan rangos de 0 a 2.5V se selecciono el AD780 el cual genera un voltaje a
la salida de 2.5V.
Amplificadores de ganancia programable PGA204 - 205
Cuando se trabaja con seales que viajan a travs del medio es necesaria una etapa de
amplificacin que entregue niveles de voltaje suficientes para el anlisis de la seal
recibida. Por ejemplo, los rangos de voltaje que se reciben del eco sin amplificar, esta en el
orden de los mV (milivoltios) y los amplificadores de ganancia programable permite
convertirlos al orden de los V (voltios).
El PGA 204 posee las siguientes ganancias programables, 1, 10, 100 y 1000 V/V y las
ganancias del PGA 205 son 1, 2, 4 y 8 V/V. La configuracin de los amplificadores
(cascada) permite que se pueda obtener una ganancia hasta 8000V/V.
El ancho de banda de los amplificadores debe ser lo suficientemente amplio para recibir la
seal y no deteriorar su forma de onda.
60

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

dilogo y de texto, botones de opcin y de seleccin, barras de desplazamiento, grficos,


mens, etc.
Prcticamente todos los elementos de interaccin con el usuario de los que dispone
Windows 95/98/NT/XP pueden ser programados en Visual Basic 6.0 de un modo muy
sencillo. En ocasiones bastan unas pocas operaciones con el ratn y la introduccin a travs
del teclado de algunas sentencias para disponer de aplicaciones con todas las caractersticas
de Windows 95/98/NT/XP.
Visual Basic provee un mtodo para crear una interfaz grfica de usuario. No requiere un
cdigo largo para describir la apariencia y la ubicacin de los elementos de la interfaz, slo
se agregan objetos prefabricados dentro de la pantalla. Adems utiliza el lenguaje Basic, un
leguaje muy utilizado por los programadores en la historia de la informtica, ya que ha
evolucionado desde Basic original y ahora contiene centenares de instrucciones, funciones
y palabras claves, muchas de las cuales estn directamente relacionadas con la interfaz
grfica de Windows. Se pueden crear aplicaciones tiles con slo aprender unas pocas
palabras claves, con la eficacia de lograr el objetivo tal y como se lograra en cualquier otro
lenguaje de programacin de Windows.
6.3
6.3.1

ANLISIS COMPARATIVO
Unidad de procesamiento

Para el procesamiento de los datos, y la implementacin del algoritmo de reconocimiento,


se consideraron tres alternativas, el microcontrolador PIC, El Rabbit y la FPGA. Despus
de varias pruebas, se descartaron las opciones de la FPGA y del microcontrolador. Se
descart la opcin de la FPGA, debido a que el objetivo del proyecto est enfocado hacia la
aplicacin y no hacia el hardware, es decir que no se requera una unidad de procesamiento
diseada especficamente para esta aplicacin, como hubiera sido la que se podra
desarrollar con una FPGA, por lo que su diseo requerira de mucho ms tiempo. El
microcontrolador PIC a pesar de ser una buena opcin, su implementacin requerira de el
diseo de un modulo al que habra que aadirle otros elementos lo cual aumentara su costo
y el tiempo del proyecto. Por ltimo se tiene el Rabbit que ahorra tiempo de diseo y costo.
En el mercado se encuentran mdulos con el Microprocesador Rabbit que traen
incorporados todos los elementos necesarios para que el procesador funcione, y se pueda
incorporar en otros sistemas. Su programacin es sencilla debido a que es a travs de un
compilador en el lenguaje dynamic C.

65

La frecuencia de operacin de este modulo satisface los requerimientos de tiempo del


proyecto como la generacin de los pulsos, la seal de reloj para el conversor y el tiempo
para realizar las operaciones del algoritmo.
El tamao de este modulo es muy similar a los mdulos que habra q disear para las otras
dos alternativas y un costo relativamente menor teniendo en cuenta que no hay que disear
ni comprar elementos extras para que funcione.

6.3.2

Sistema de adquisicin

El sistema de adquisicin bsicamente fue el mismo, debido a que era un hardware ya


probado y que funcionaba. Se realizaron algunos ajustes para adaptar los sensores de 200
khz.
6.3.3

Etapa de amplificacin

En esta etapa se avaluaron dos alternativas el LM386 utilizado en el proyecto de grado de


Acosta y Len, y el comparador lm311. Se descarto la primera debido a que no presentaba
una buena respuesta en frecuencia para las seales de 200 Khz., mientras que el LM311
funcionaba tanto para las seales de 40 y de 200 khz.
6.3.4

Convertidor anlogo digital

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

DESCRIPCION DETALLADA DEL SISTEMA

FUNCIONALIDAD DEL SISTEMA

El sistema desarrollado consta de los siguientes componentes:

Tarjeta de adquisicin de las seales emitidas por los transductores ultrasnicos.

Microprocesador que realiza las operaciones para el reconocimiento.

Tarjeta de alimentacin.

La tarjeta de adquisicin de seal esta constituida por los siguientes componentes:


Etapa de Transmisin
7.1.1

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

Figura 15 Etapa de amplificacin de los pulsos que excitan a los transductores

Etapa de Recepcin
7.1.2

Multiplexor MPC509

El objetivo del multiplexor es seleccionar el transductor receptor con el cual se esta


trabajando. Esta seleccin se realiza por medio de los pines A0 y A1 los cuales son
controlados por el microprocesador. Los voltajes V+ y V- son +5V y -5V respectivamente.
La salida del multiplexor se conecta a la entrada del primer PGA, como se observa en la
figura 16.
68

Figura 16 Diagrama de seleccin de los transductores receptores

7.1.3

Amplificadores de ganancia programable PGA204 - 205

El propsito de los amplificadores de ganancia programable es proporcionar una ganancia a


la seal que viaja a travs del medio.
El PGA204 puede variar su ganancia en 1, 10, 100 y 1000, y el PGA205 puede variar su
ganancia en 1, 2, 4 y 8. Estos dos integrados se conectaron en configuracin cascada, de
manera que ofrecen un rango de ganancias de 1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800,
1000, 2000, 4000 y 8000.
Este circuito, es un amplificador de instrumentacin al cual se le introduce una seal
diferencial proveniente del transductor receptor. De esta manera, no se afecta demasiado
con el ruido de la fuente y permite que la seal que enva el transductor receptor, que es una
seal muy dbil, no se atene. Tienen un rango de polarizacin de 4.5V a 18V. En esta
aplicacin, la tensin de polarizacin utilizada es de 5V, obteniendo en la salida una seal
con un voltaje pico a pico de mximo 10 voltios.

69

Para la amplificacin de la seal de los transductores de 40KKz se utilizaron ganancia de


200, 100 para PGA1 y 2 para el PGA2 y para los transductores de 200KKz se utilizaron
ganancia de 800, 100 para PGA1 y 8 para el PGA2.
Estos valores fueron escogidos debido a que con ganancias menores el eco no tenia la
suficiente potencia ganancias y con ganancias mayores se amplifica el ruido generado por
los dispositivos del sistema, provocando distorsin en la seal.
Entre los dos amplificadores en cascada existe un filtro pasabanda el cual se encarga de
eliminar los ruidos que se encuentren por encima y por debajo de la frecuencia de los
transductores (40Khz o 200KHz), que afectan el sistema.
La salida del PGA1 esta conectada a un jumper, el cual dependiendo la frecuencia que se
este trabajando conectar la PGA1 OUT a la entrada del filtro correspondiente.
La salida de la etapa de amplificacin, el valor mximo de la seal es de 2.5 V voltios pico
y es la seal de entrada a la etapa de rectificacin.
La conexin de los amplificadores se puede observar en la figura 17.

70

Figura 17 Etapa de amplificacin de la seal recibida. A) Primera etapa de


amplificacin antes del filtro pasabanda. B) Segunda etapa de amplificacin despus
del filtrado.

A)

71

B)
7.1.4

Filtro Pasabanda (40KHz y 200KHz)

Como se mencion anteriormente entre los amplificadores de ganancia programable existe


un filtro pasabanda que slo permite el paso de las seales cuya frecuencia sea de cuarenta
kilohertz (40KHz) o doscientos kilohertz (200KHz), para as eliminar los ruidos producidos
por diferentes fuentes, tales como los sesenta hertz de la red.
El clculo de cada una de las resistencias y capacitancias con los cuales se obtuvo una
frecuencia central de cuarenta kilohertz se realiz de la siguiente forma:
Ecuacin14. Clculo de resistencias del filtro

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

Figura 18 Filtro Pasabanda.

7.1.5

Rectificador de onda completa

El circuito mostrado en la figura 19 funciona como rectificador de onda completa de la


seal de entrada, con una salida negativa.
La seal de doble polaridad proveniente del PGA2 OUT entra al circuito, inicialmente pasa
por una etapa rectificadora de media onda que la invierte, luego esta seal de doble
amplitud, alimenta a un amplificador que la suma con el otro hemiciclo de la seal de
entrada. El resultado es la inversin de la polaridad seleccionada en la seal de entrada. Las
resistencias siempre mantienen una relacin de 2 a 1. La salida de este circuito se conecta a
la entrada de un filtro pasabajas.
73

Figura 19 Rectificador de onda completa.

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

Amplitud de la onda en un tiempo = tiempo de vuelo + 50us

Amplitud de la onda en un tiempo = tiempo de vuelo + 100us

Amplitud de la onda en un tiempo = tiempo de vuelo + 150us

Amplitud de la onda en un tiempo = tiempo de vuelo + 200us

Para obtener el primer parmetro se estableci un voltaje umbral de 281mV, y en el


momento en que el umbral es detectado el contador del Tiempo de Vuelo se activa.
El umbral escogido es superior a todos los niveles de voltaje que introduce el ruido del
sistema y la red.
En la figura 21 se puede observar el diagrama de conexiones del detector de umbral. La
seal de entrada es la envolvente del eco recibido y la salida esta conectada al puerto I/O
PD5 del Rabbit 3610.

75

Figura 21 Detector de Umbral

7.1.8

Convertidor Analgico - Digital

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

Figura 22 Etapa de digitalizacin de la envolvente

De la figura 22 se puede observar los puertos del microprocesador que manejan al


conversor. PC1 (controla el CS del AD) y PF1 (controla el SCLK del A/D) se encuentran
configurados como puertos de salida, mientras que el puerto PC3 (datos de la seal
digitalizados) como entrada.
7.1.9

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

Figura 23 Buffer CD74HCT365

7.1.10 Etapa de Alimentacin


Los voltajes requeridos para la alimentacin de los dispositivos implementados y del
microprocesador son:
25V Excitacin del transductor transmisor 200KHz
12V Excitacin del transductor transmisor 40KHz
5V Alimentacin de los dispositivos utilizados en la etapa de acondicionamiento de
seal
3.3V Alimentacin del microprocesador
En los circuitos de las figuras 24, 25 y 26 se obtiene 24V, 12V y 5V respectivamente con
una entrada de 24, 12 y 5 voltios no regulado. Por medio de un interruptor se selecciona el
voltaje deseado (12V o 25V) dependiendo a la que frecuencia que este trabajando el
sistema.
Los amplificadores de ganancia programable y amplificadores operacionales requieren
tensin de polaridad negativa. Para solucionar este inconveniente se utiliz un convertidor
DC - DC, que transforma una de entrada tensin positiva, en una tensin negativa con
respecto a la tierra del circuito. En la figura 28 se muestra el circuito que generar cinco
voltios negativos.

78

La comunicacin entre el convertidor A/D 7475 y el microprocesador requiere un voltaje


de interfaz (VDRIVE) de 3.3V, debido a que el Rabbit slo acepta este valor como voltaje
mximo, por esta razn fue necesario utilizar el regulador LM317 que con una entrada de
5V entrega el voltaje deseado dependiendo de la relacin entre R1 y R2. La ecuacin que
permite hallar el valor de las resistencias es:

R2
Vout 1.25V 1

R1

(18)

Figura 24 Etapa de 24V

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 25 Etapa de 12V

Figura 26 Etapa 5V

80

Figura 27 Etapa de 3.3V

Figura 28 Etapa -5V

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

Figura 29 Seales de control del sistema.

El Rabbit 3610 posee internamente un regulador que convierte de 5V a 3.3V.


Software
7.1.12 Algoritmos del Microprocesador
El programa del Microprocesador es el encargado de controlar y sincronizar todos los
elementos digitales que hacen parte de la tarjeta, ejecuta los algoritmos de reconocimiento y
se comunica con el computador.
El inicio del programa consiste en la configuracin de los puertos como entradas o salidas,
as como el establecimiento de los estados iniciales para configurar el multiplexor y los
PGA`s y la definicin de algunas variables y constantes.
Bsicamente la tarjeta realiza cuatro funciones:
82

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

Figura 30 Reconocimiento Simple

Frecuencia

Codigo

Prob 1

Prob 2

Prob 3

....

La funcin de Reconocimiento Completo se realiza cuando se recibe el carcter d, esta


realiza el mismo procedimiento que la de reconocimiento simple, pero se diferencian en
que esta transmite el tiempo de vuelo y las 4 amplitudes de las 100 mediciones. Estos datos
son utilizados luego en el programa del principal para calcular la desviacin estndar de
cada uno de los parmetros.
Figura 31 Reconocimiento Completo

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

El entrenamiento de un objeto se ejecuta cuando la tarjeta recibe el carcter ASCII s,


luego se llama a la funcin entrenamiento la cual toma 300 mediciones de la misma forma
que se toman las de Reconocimiento Simple, con la diferencia que los parmetros tiempo
de vuelo y las 4 amplitudes son acumuladas para que al finalizar la toma de muestras, se
calcule el promedio de cada uno. Con los promedios se forman los centroides. Una vez
entrenado el objeto, se le asigna un cdigo que es consecutivo al cdigo del ltimo objeto
en la base de datos. Los centroides son transmitidos al programa principal donde este
tambin le asigna adems de un cdigo un nombre.
Figura 32 Entrenamiento

Frecuencia

Tfpromedio

A1promedio A2promedio A3promedio A4promedio

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

...

Cuando se va a transmitir ms de un objeto se repite la trama automticamente,


dependiendo de cuantos objetos fueron seleccionados en el programa principal.
85

Esto da mayor flexibilidad al usuario en cuanto a pruebas se refiere, ya que le permite


trabajar y hacer pruebas slo con los objetos que desee, sin necesidad de volver a entrenar
la tarjeta.
Una explicacin especial se dar de la rutina que genera los pulsos, la que controla el ADC
y la que realiza el reconocimiento.
PWM1 / PWM2 ( )
El Rabbit posee dos puertos que pueden ser configurados como PWM, pero estos
difcilmente alcanzaba a generar la frecuencia de 40 Khz, por lo que no se pueden utilizar
para los transductores de 200 khz.
Por esto fue necesario disear una rutina en lenguaje ensamblador que permitiera alcanzar
la frecuencia de 200 Khz para excitar los transductores.
En esta rutina se establece la ganancia de los amplificadores dependiendo de la frecuencia
con la que se va a trabajar, luego se carga en el registro D del microprocesador el valor 1D
H para el contador que genera la seal de 40 Khz, y 04 H para el contador de 200 Khz En el
registro B se almacenan el nmero de pulsos que es 15 para 40 Khz y 50 para 200 Khz.
Dependiendo de la frecuencia los pulsos son generados en el puerto PF4 para 40 Khz y en
PF5 para 200 Khz.
El valor del contador es almacenado luego en el registro C tanto para el estado de alto como
para el estado de bajo de la seal, se ha generado un periodo completo de la seal se
disminuye el contador de los pulsos, y se verifica si ha llegado a cero, si es as el programa
sale de la rutina y regresa al programa principal.
ADC ( )
La interfaz del conversor utilizado es serial, por esta razn se utiliz la librera que viene
con Dynamic C, para controlar convertidores seriales.
Al iniciar el programa se llama esta librera para poder usarla en el resto del programa.
Adems hay que configurar el reloj del conversor definiendo el divisor del reloj #define
SPI_CLK_DIVISOR 9 y hay que habilitar el puerto serial sincrono C con el siguiente
comando #define SPI_SER_C. Para tomar una muestra con el conversor, se habilita el
conversor a travs de PG2, y luego se ejecuta el comando SPIRead (adc_reading1, 2) donde
adc_reading1 corresponde un vector de 2 pocisiones de tipo char donde se quiere almacenar
el dato, y el valor 2 corresponde al nmero de bytes que se van a leer del conversor, luego
se deshabilita el conversor. Esta operacin se repite dependiendo de cuantas muestras se
quieran tomar.
86

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

Figura 34 Diagrama de flujo de las rutinas del microprocesador

INICIO

Declaracin de
Constantes

Declaracin de
Variables

Declaracin de funciones (pwm1,


pwm2, ADC, clasificacin,
entrenamiento, librera)

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

Detecta el umbral y calcula el


tiempo de vuelo

Activa el ADC y
toma las 4

Calcula la distancia con cada


uno de los centroides

Identifica el objeto cuyos


centroides estn ms cercanos

7
90

Haba escogido
inicialmente
reconocimiento
completo?

SI

Transmite el tiempo de vuelo y


las cuatro amplitudes al PC

NO

Acumula el nmero de veces


que la tarjeta reconoce un
cdigo de la base de datos

Nmero de
mediciones =
100?

SI

Transmite el cdigo del objeto


con mayor probabilidad y las
probabilidades de cada objeto

NO

91

3
Transmite la frecuencia a
la q se esta trabajando

Genera el tren de
pulsos

Temporizador de
tiempo muerto

Detecta el umbral y calcula el


tiempo de vuelo

Activa el ADC y
toma las 4

Acumula las variables de


tiempo de vuelo y las 4
amplitudes

Nmero de
mediciones =
300?

SI

NO

92

Calcula el promedio del tiempo


de vuelo y de las cuatro
amplitudes

Calcula el promedio del tiempo


de vuelo y de las cuatro
amplitudes

Transmite la frecuencia a la que


se esta trabajando

Transmite los promedios del


tiempo de vuelo y de las
amplitudes

93

NO

Frecuencia =
40?

SI

Almacena los datos en la base


de datos de 40Khz

Se va almacenar
otro objeto?

Almacena los datos en la base


de datos de 200Khz

SI

Se va almacenar
otro objeto?

NO

SI

NO

94

7.1.13 Software de Visualizacin


El software de visualizacin posee una serie de mens y submens que permiten observar
al usuario la respuesta del sistema a diferentes objetos. Cuando inicia el programa se carga
una base de datos que contiene como objeto entrenados cubo, cilindro, esfera y cono. Esta
base de datos se cre en Microsoft Access por medio Visual Studio, si se desea modificarla
es necesario realizar los cambios por medio de Microsoft Access, no existe la opcin de
manipularla por medio del software de visualizacin.
Figura 35 Ventana Principal

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

Figura 36 Men Ejecutar

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

Figura 37 Reconocimiento Simple


Imagen
objeto

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

La tcnica de recepcin de datos y reconocimiento es la misma utilizada en


Reconocimiento Simple.
Figura 38 Reconocimiento Completo
Centroides de
los objetos de
la base

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

Imagen del Objeto

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

El men de Complemento contiene el submen de Modo Manual y Clculo de


Coeficientes de Tx y Rx.

101

Figura 42 Men Complemento

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

Figura 45 Men Ayuda

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

Figura 48 Diagrama de flujo del software de visualizacin

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

Revisa base datos y


enva centroides de los
objetos seleccionados

106

NO

Grficar
Click?

SI

Grfica los centroides de


los objetos y parmetros
seleccionados

NO

Modo
Manual
Click?

6
6
SI
NO

Abre el puerto y almacena


datos recibidos

6
6
Clculos
Coeficientes
Click?

NO

SI

107

Realiza clculos segn los


datos ingresados

8
NO

Ayuda
Click?

SI

Muestra una explicacin de


las funciones del software

9
NO

Salir Click?

10

SI

FIN

108

7.2

ARQUITECTURA Y CONSTRUCCION DEL SISTEMA

El software y el hardware del sistema tienen caractersticas propias de tamao y


presentacin. Estas caractersticas se muestran a continuacin en unas fotografas del
aspecto de cada etapa y de todo el sistema conectado.
El hardware est conectado a la plataforma en la cual se encuentran los transductores.
Figura 49 Aspecto fsico del hardware
Ncleo
sistema

del
Tarjeta
de
Alimentacin

Acondiciona
miento

109

Figura 50 Aspecto fsico del todo el sistema

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

Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos

Como se explic anteriormente, la seal de eco emitida por el transductor receptor y el


transmisor requieren una fase de amplificacin y acondicionamiento para su respectivo
anlisis. En esta segunda fase se analiz si la etapa de adquisicin de la seal implementada
por los ingenieros Acosta Miranda y Jorge Mario Len Albornoz [1], era suficiente para
obtener los datos de inters de la seal de eco.
8.1.3

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

Adems del reconocimiento de objetos en cuanto a su forma, se observ si era posible


reconocer el material. Por otra parte tambin se prob si los transductores eran capaces de
emitir un eco lo suficientemente adecuado para determinar la presencia de una aguja en una
jeringa.

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

DISEO DE LOS EXPERIMENTOS


Estructura Implementada

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

Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos

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

Tabla 2 Combinaciones de los Parmetros

Luego de escoger el parmetro para reconocer se procede a probar todo el sistema


integrando cada una de las etapas anteriores. Como se puede observar en la seccion 8.3.5
Utilizando el cable de 1.27mm del Rabbit en la opcin PROG se programa el algoritmo del
microprocesador y en la opcin DIAG se comunica con el puerto serial del computador, de
esta manera se ahorra construir una etapa de comunicacin con el usuario.
El programa inicia con una base de datos fija, pero el usuario tiene la opcin de entrenar un
nuevo objeto o remplazar uno ya existente. En el men Librera se enva al
microprocesador el nmero de objetos entrenados que el usuario desee que el sistema
reconozca.
La opcin reconocimiento simple y completo identifica el objeto que se encuentre siendo
analizado.

116

8.3
8.3.1

RESULTADOS
Estructura Implementada

Luego de realizar numerables pruebas en la figura 53 se pude observar la estructura final.


En la parte superior se encuentran los transductores de 40Khz y la base que soporta a cada
objeto se encuentra a 25cm de distancia de los transductores, adems esta cubierta por una
esponja para evitar cualquier reflexin que no pertenezca al objeto analizado (figura 52), a
diferencia de los transductores de 200Khz que no se encuentra cubierta, debido a que el haz
de los de 40Khz es de 70 mientras que los de 200Khz es de 7 y la posibilidad de reflexin
de objetos extraos es nula.
Figura 52 Seal envolvente de la esponja

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

distancia se requiere una mayor alimentacin en la etapa de transmisin y el LM311 no


resiste voltajes superiores a 25V.
Figura 53 Estructura Final

Transductores
de 40 KHz

Transductores
de 200 KHz
Base
para
mediciones con
200Khz

Base
para
mediciones con
40Khz

8.3.2

Etapa de adquisicin de la seal de eco y transmisin del tren de pulsos

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

Figura 54 A) Tren de pulsos antes de la amplificacin. B) Tren de pulsos despus de la


amplificacin.

Amplitud 3.3V

A)
Amplitud 12V

B)

119

Figura 55 A) Tren de pulsos antes de la amplificacin. B) Tren de pulsos despus de la


amplificacin.

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

Figura 57 Eco en la primera etapa de amplificacin

Amplitud de la
1era
etapa
amplificacion

Figura 58 Eco despus del filtrado

Amplitud despus del


filtro (40Khz) con una
ganancia de 10V/V

122

Figura 59 Eco despus de la segunda etapa de amplificacin.

Amplitud de la
2da etapa de
amplificacin

En la figura 60 se puede observa el detector de umbral junto con la envolvente de la seal


de eco.
Figura 60 Detector de umbral y envolvente.

Alto que genera


el detector de
umbral

Umbral
establecido
mV)

(280

123

En la anterior figura se puede observar en el momento que el detector de umbral capta el


nivel de umbral (281mV) genera un alto en su salida.
El umbral escogido es superior a todos los niveles de voltaje que introduce el ruido del
sistema y la red, en los diferentes lugares en los cuales se prob el sistema.
En la figura 61 se observa la seal de envolvente que se obtiene con los transductores de
40Khz para cada uno de los objetos y en la figura 62 para los transductores de 200Khz.
Figura 61 Seal Envolvente con 40KHz A) Cubo B) Cilindro C) Esfera D) Cono

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

Figura 63 Tren de pulsos generado por el Rabbit. A) 40Khz B) 200Khz

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

Figura 66 Seal envolvente de la jeringa A) Con la aguja B) Sin la aguja

A)

B)

133

Tabla 3 Calculo de la Energa Tx y Rx


Material

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

Figura 67 Representacin de las clases con los parmetros A2 y A4

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 Reconocimiento Simple con 4 objetos en la base de


datos = 936ms

Tiempo que demora la funcin Reconocimiento Completo con 4 objetos en la base


de datos = 2020ms

Tiempo que demora la funcin entrenamiento con 4 objetos en la base de datos =


1746ms

Tiempo que demora la funcin librera con 4 objetos en la base de datos = 2,08s

135

En la figura 68 se observa el resultado del reconocimiento de un objeto, en este caso la


cilindro de aluminio. La grfica que se encuentra en la parte izquierda se muestran los
centroides de cada uno de los objetos que se encuentran en la base de datos y en la parte
inferior de la grfica aparece la distancia entre cada uno de los centroides con respecto al
centroide del objeto reconocido, como se puede observar la separacin ms corta pertenece
al objeto identificado.
Figura 68 Reconocimiento de los objetos
Centroides de
los objetos de
la base

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

Tabla 4 Matriz de contingencia usando los transductores de 40Khz


Cubo
Cilindro
Esfera
Cono
Total

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

Tabla 5 Matriz de contingencia usando los transductores de 200Khz


Cubo
Cilindro
Esfera
Cono
Total

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

Otros resultados obtenidos fueron el consumo de corriente para:


Tarjeta sin los transductores= 160mA
Los transductores de 40 Khz= 30mA
Los transductores de 200 Khz= 50mA
El consumo total de potencia en el peor de los casos es de 2 W.
De esta manera se ha cumplido con los objetivos trazados en el proyecto, ya que el sistema
es capaz de reconocer las figuras preestablecidas con un buen porcentaje de acierto.
8.4

ANLISIS DE LOS RESULTADOS

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

La matriz de contingencia resume los resultados obtenidos. A 40 Khz el porcentaje de


aciertos fue de un 93 % en comparacin con los de 200 Khz que tuvieron un 99 %. Esto
muestra la mayor confiabilidad que poseen los transductores de 200 Khz, siempre y cuando
estos se conserven el ngulo formando entre ellos, debido a que su patrn de radiacin es
bastante estrecho, posee una directividad de 7 grados, por lo que cualquier cambio en su
posicin con respecto a la plataforma puede causar una diferencia considerable en las
mediciones.
Como se estableci en los alcances y limitaciones del proyecto, la plataforma donde se
realizan las mediciones est a una distancia fija para los transductores de ambas frecuencias
y su pocisin con respecto a la plataforma ser la misma durante el entrenamiento como en
la etapa de reconocimiento.
El sistema se dise para reconocer los siguientes objetos: cubo, cono, esfera, cilindro. La
inclusin de otros objetos es posible pero no se garantiza su eficiencia.
Por otra parte, las mediciones que se realicen con los transductores de 40Khz requiere un
rea libre de obstculos al alrededor del objeto de aproximadamente 50cm como se observa
en la figura 69.
Figura 69 rea libre de obstculo para transductores de 40Khz

50 cm
PLATAFORMA

139

9
9.1.1

ADMINISTRACION DEL PROYECTO

Cronograma del Proyecto Final

Fases del proyecto


Documentacin
Revisin bibliogrfica
Redaccin de informes
Monografa
Articulo
CDs para biblioteca
Determinacin de dispositivos
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 VHDL
Pruebas preliminares
Rediseo
Diseo final
Pruebas finales

Julio

Agosto

AO 2004
Septiembre

Octubre

Noviembre

140

AO 2005

AOAA
Ao2005
2004

Fases del proyecto


Documentacin
Revisin bibliogrfica
Redaccin de informes
Monografa
Articulo
CDs para biblioteca
Determinacin de dispositivos
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

Diciembre

Enero

Febrero

Marzo

Abril

141

AOAA 2005

Fases del proyecto


Documentacin
Revisin bibliogrfica
Redaccin de informes
Monografa
Articulo
CDs para biblioteca
Determinacin de dispositivos
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

Mayo

Ao 2005
Junio

Julio

Agosto

Septiembre

AOAA
AAAa
Ao2005
2005

Fases del proyecto

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

En la presentacin del Proyecto de Grado se plante un cronograma hasta el mes de Agosto


del 2005 pero, luego fue modificado por el que se presenta en este documento; el cambio se
debi a la tardanza de los transductores de 200Khz.
El actual cronograma fue cumplido casi en su totalidad, ya que slo existe un retraso de dos
semanas.
9.1.2

Costos y Recursos

Tabla 6 Tabla de Costos


Objeto
Transductores 40Khz
Transductores 200Khz
Cable de Programacin
Rabbit Core 3160
Componentes Etapa adquisicin
Papelera
Inscripcin a el IEEE Computer
Society

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.

Se implementaron transductores de 40 y 200 Khz. para realizar la tarea de reconocer


4 objetos y evaluar el desempeo de ambas frecuencias por separado. Este objetivo
se logro con xito ya que con ambas frecuencias se logr reconocer los objetos.

Se implement un algoritmo de reconocimiento que no requera de operaciones


matemticas complejas, por lo que fue suficiente con las libreras matemticas de
Dynamic C, pero a pesar de que el algoritmo de reconocimiento implementado es
sencillo, los resultados fueron buenos, alcanzando un porcentaje de reconocimiento
superior al 90 %.

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.

Cuando no existe ningn objeto a reconocer el sistema lo confunde con el centroide


que tenga menor valor, para este caso el cono, debido a que la geometra que este
posee dispersa la seal ultrasonica.

Al aumentar la frecuencia se obtuvieron un porcentaje de reconocimiento mayor,


debido a la directividad que poseen los transductores que trabajan a altas
frecuencias.

El objeto con menor porcentaje de reconocimiento fue la esfera, debido a que su


fabricacin en comparacin con la de los dems fue ms compleja para nuestro caso
en particular, lo cual produjo algunas irregularidades en su superficie afectando as
las mediciones.
145

11 RECOMENDACIONES

Realizar ms estudios de la seal ultrasnica. Analizar cmo el espectro del eco es


afectado, qu otros parmetros pueden ser extrados de la envolvente con
informacin til, analizar como el ciclo til de la seal con que se excitan los
transductores afecta el eco recibido.

Realizar el reconocimiento del mismo objeto a diferentes distancias.

Realizar el reconocimiento del mismo objeto con diferentes tamaos.

Aumentar el nmero de transductores empleados.

Estudiar el rendimiento de otras tcnicas como las redes neuronales.

Realizar una interfaz dinmica desde el software de visualizacin, la cual permita


escoger al usuario por medio del computador los parmetros del clasificador y la
frecuencia de muestreo, con el fin de tener mayor control sobre el sistema.

Aumentar la etapa de potencia para los transductores de 200KHz.

Estudiar posibles aplicaciones con los transductores de 200KHz, como la


caracterizacin de superficies, clasificacin de materiales, pruebas no destructivas
de materiales entre otras.

146

12 BIBLIOGRAFIA

Para los antecedentes la justificacin y el marco terico se revisaron, como documentos


bsicos:
[1] ACOSTA, C.; LEN, J. Sistema para caracterizar mapas utilizando ultrasonido.
Barranquilla, 2003, 250p. Trabajo de Grado (Ingeniero Electrnico). Universidad del Norte.
Departamento de Ingeniera elctrica y electrnica.
[2] AVENDAO, J.; MANOTAS F. Sistema de medicin de posicin de objetos, a travs
de ultrasonido, utilizando un microcontrolador. Barranquilla, 2002, 293p. Trabajo de Grado
(Ingeniero Electrnico). Universidad del Norte. Departamento de Ingeniera elctrica y
electrnica
Para los antecedentes y el marco terico se revis, como documento bsico:
[3] CAICEDO B., Eduardo; Arquitectura de un sistema sensorial para identificacin de
partes y ensamblaje robotizado. Madrid, 1992, p 124-146. Tesis de Maestra. Universidad
Politcnica de Madrid
Para los antecedentes y el marco terico se revisaron, como documentos de apoyo:
[4] CHEEKE, David N. Fundamentals and Applications of Ultrasonic Waves Physics
Department, Concordia University, Montreal, Canada, CRC Press LLC, 2002. 8p
[5] DUDA, R.; HART, P.; STORK, D. Pattern Classification 2nd ed. 1998 by John Wiley
& Sons, Inc. 13p
[6] Ecemis, M.; Gaudiano, P. Object recognition with ultrasonic sensors. Boston Univ.,
MA, USA, En: Computational Intelligence in Robotics and Automation, 1999. CIRA '99.
Proceedings
[7] Gibilisco, Stan; The Illustrated Dictionary of Electronics Eighth Edition. 2001 by The
McGraw-Hill Companies, Inc. p 330
Para los antecedentes y el planteamiento del problema se revis, como documento de
apoyo:

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

ANEXO A MANUAL DEL USUARIO

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

ON/OFF del sistema

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

Encienda el computador y cargue el software de visualizacin.


Si desea trabajar con los transductores de 40Khz cambie el switch de alimentacin a 12V y
coloque el jumper a la frecuencia de 40Khz, si desea trabajar con 200Khz cambie el switch
a 25V y el jumper a 200Khz, luego resetee la tarjeta.
Proceda a enviar la librera que carga el programa por defecto en la opcin Ejecutar
Librera (escogiendo la frecuencia correspondiente) y luego proceda a realizar el
reconocimiento simple o completo segn los datos de inters que desee conocer.
Tambin puede volverlo a entrenar cada uno de los objetos, en la opcin Ejecutar
Entrenamiento.
152

Si desea entrenar un nuevo objeto, o remplazar uno ya existente, colquelo en la base


correspondiente a la frecuencia que este trabajando y luego en el submen Entrenamiento
envelo a entrenar, luego en OBJETO ENTRENADO asgnele un nombre a la figura y
luego gurdela en la opcin GUARDAR. Luego proceda a enviar la librera y luego envelo
a reconocer.

MANEJO DEL SOFTWARE

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

Esta opcin le permite enviar a la base de datos del microprocesador los


parmetros (Tf, A1, A2, A3 y A4) de los objetos que desee. Primer debe escoger
la frecuencia, luego seleccionar los objetos y por ltimo enviarlos a la Rabbit,
presionando el boton ENVIAR LIBRERA.
f) Ejecutar, Grficar
Esta funcin permite grficar los centroides de los objetos que se encuentran en
la base de datos.
En la parte superior izquierda de la pantalla aparece la opcin de escoger la
frecuencia a la cual se desea grficar los centroides.
Luego de seleccionar las figuras y los parmetros, se enva a grficar los
centroides.
Para limpiar la grficar presione el botn LIMPIAR.
g) Complemento, Modo Manual
Inicialmente debe cambiar el jumper que indica el modo manual el modo PC
desde la tarjeta, luego presione reset, enve la librera y cuando presione la
opcin Modo Manual desde el software el buffer de recepcin estar esperando
los datos, los cuales se envan presionando el botn STAR desde la tarjeta.
Al activar esta opcin se desactivan las dems funciones que manejen
comunicacin serial, con el fin de evitar conflicto.
h) Complemento, Calculo Energa Tx y Rx
En la parte izquierda de la pantalla se encuentra la energa Tx y Rx de los
materiales con los cuales se trabaj en este proyecto (aluminio, madera,
polietileno, acero) y en la parte derecha de la pantalla existe la opcin de
realizar el clculo de un nuevo material, introduciendo su densidad acstica y
velocidad en los textos correspondientes.
i) Ayuda, Acerca de
Acerca del UPRS.
j) Ayuda, Contenido
154

Explica de manera detallada la funcin de cada submen del programa.


Eligiendo el men en donde se encuentra la funcin de la cual desea obtener
ms informacin y luego presionando sobre el evento de inters, se desplegar
una explicacin del submen escogido.

CONSIDERACIONES AL MANEJO DEL HARDWARE


a) Para las mediciones con los transductores de 40Khz debe existir un espacio
libre alrededor del objeto a reconocer de aproximadamente 50cm.
b) Cada funcin del software se activa con un slo click, dado el caso que se
presione doble click puede crear conflicto en el programa, es recomendable
esperar que el software realice el proceso correspondiente.
c) No es posible mantener la base de datos abierta mientras el programa se este
ejecutando.
d) Si se presenta algn conflicto a la hora de ejecutar alguna operacin, resetee
la tarjeta, presionando el botn RESET.
e) Si el programa esta ejecutando la opcin Modo Manual y se desea cambiar a
modo PC es necesario cerrar el modo manual en el botn que indica Cerrar
modo manual para que se activen las dems funciones.

155

ANEXO B ESQUEMATICO DE LATARJETA DE ADQUISICION

Figura 72 Esquemtico de la Tarjeta de Adquisicin

Figura 73 Esquemtico de la Tarjeta de Alimentacin

156

ANEXO C ARTE DELCIRCUITO IMPRESO

Circuito Impreso de la Tarjeta de adquisicin

Figura 74 Circuito impreso tarjeta. A) Superior B) Inferior

A)

B)
157

Circuito Impreso de la Tarjeta de Alimentacin

Figura 75 Circuito Impreso de la Tarjeta de Alimentacin

158

ANEXO D CODIGO DEL MICROPROCESADOR


/********************************************************************
Prototipo para el Reconocimiento de Objetos con Ultrasonido en
Aplicaciones de Inspeccin Mediante Patrones Determinados.
Programa de Ingeniera Electrnica
Universidad del Norte, 2005.
Descripcin
===========

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

// Seleccin del Transductor


//
// Seleccin de la ganancia del primer amplificador
//
// Seleccin de la ganancia del segundo amplificador
//

#define frecuencia 0 // Seleccin de la frecuencia de operacion


#define sclk 1 // Reloj para el ADC
#define amp_1
4 // PWM 1
#define amp_2
5 // PWM 2
#define busy 4 // Led que indica que la tarjeta se encuentra procesando
#define umbral
5 // Seal proveniente del detector de umbral
#define cs
#define start 6
#define modo 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 //

Tamao del Buffer de entrada del puerto serial

15 // Tamao del Buffer de salida del puerto serial A.

#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"

11 // Nmero max de objetos


0
// Tiempo de vuelo
// Amplitud en +50us
// Amplitud en +100us
// Amplitud en +150us
// Amplitud en +200us
300

// Nmero de muestras para entrenar el sistema

// Activando la libreria para manejar el puerto serial C.

/** Variables Globales **/


int i,m;
// Contador para el retraso de 50 us
int tiempo_vuelo[2];
// Tiempo de vuelo
int k;
// Indica el transductor, 0 = Primer Tx, 1 = Segundo Tx
int adc_sample1[2];
// Muestra en 50us
int adc_sample2[2]; // Muestra en 100us
int adc_sample3[2]; // Muestra en 150us
int adc_sample4[2]; // Muestra en 200us
int temp,temp2;
// Variables temporales en el calculo de las muestras
int tm;
// Tiempo muerto, en el que no va a aperecer el
eco.
int ir;
// nmero de mediciones para reconocer
int med_ob[11];
// 11 por que la variable cap_max tiene
ese valor. contiene el nmero de veces que se repitio cada objeto en un reconociemiento
int l;
int min1,min2;
// distancia minima entre los datos de la medicon con los del
centroide
int max;
// corresponde al codigo del objeto con mayor nmero de posibilidades
int med_max;
// contiene temporalmente el nmero de veces que aparece un objeto
cuando se hace una medicion
int f;
// indica la frecuencia para la variable que contiene el
nmero de objetos
160

int frec_lib;

// frecuencia del objeto que se va a almacenar en la libreria

int test1[muestras][5],test2[muestras][5];
entrenamiento

// Se almacenan las muestras para el

// centro1(1 Transductor) y centro2(2 Transductor) , centroides para 40 kh


// centro3(1 Transductor) y centro4(2 Transductor) , centroides para 200 khz
int centro1[cap_max][5],centro2[cap_max][5],centro3[cap_max][5],centro4[cap_max][5];
int obj[2];

// Nmero de objetos almacenados

int serial_rx;
char serial_tx;

// Almaceno los datos del puerto Serial A

/** Funciones **/


void pwm1();
void pwm2();
int
adc();
float clasificacion();
int
entrenamiento();
int
libreria();
/*********************** Programa Principal ***********************/
void main()
{
obj[1]=4;
obj[0]=4;

// Nmero de objetos base para 40


// Nmero de objetos base para 200

// Centroides del primer transductor


/***** 40 kHz *****/
centro1[0][tf]=17;
centro1[0][amp1]=2605;
centro1[0][amp2]=1253;
centro1[0][amp3]=2683;
centro1[0][amp4]=2933;
161

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;

/***** 200 khz *****/


centro3[0][tf]=0;
centro3[0][amp1]=1439;
centro3[0][amp2]=1705;
centro3[0][amp3]=1833;
centro3[0][amp4]=1857;
centro3[1][tf]=0;
centro3[1][amp1]=1259;
centro3[1][amp2]=1514;
centro3[1][amp3]=1613;
centro3[1][amp4]=1627;
centro3[2][tf]=4;
centro3[2][amp1]=1115;
centro3[2][amp2]=1243;
centro3[2][amp3]=1285;
centro3[2][amp4]=1248;
centro3[3][tf]=36;
162

centro3[3][amp1]=342;
centro3[3][amp2]=502;
centro3[3][amp3]=863;
centro3[3][amp4]=1032;

/** Configuracion de los puertos **/

WrPortI(WDTTR, NULL, 0x51);


WrPortI(WDTTR, NULL, 0x54);

// 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

/** Inicializacion de los puertos **/


BitWrPortI(PBDR, &PBDRShadow, 0, MUX_A0_IN ); //
BitWrPortI(PBDR, &PBDRShadow, 0, MUX_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA1_A1_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA2_A0_IN );
BitWrPortI(PBDR, &PBDRShadow, 0, PGA2_A1_IN );
BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off
BitWrPortI(PGDR, &PGDRShadow, 1, cs );
// Desactivando la conversion
BitWrPortI(PFDR, &PFDRShadow, 0, amp_1 ); // Apagando los PWM
BitWrPortI(PFDR, &PFDRShadow, 0, amp_2 ); //

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;

// borra las variables

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++){

// nmero de veces que se repiten las mediciones

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

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)

for(i=1;i<1000;i++){} // retraso para esperar que se estabilize el transductor

clasificacion();

// Calculo de las distancias con los centroides

if (BitRdPortI(PFDR,frecuencia)==1){ f=1;
else{ f=0; }

for(l=0;l<obj[f];l++){ // Sumando cada vez q aparece un objeto en esta medicion


if(min1==l){
med_ob[l]=med_ob[l]+1;
}
}
}
max=0;
if (BitRdPortI(PFDR,frecuencia)==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

// Ganancia para 40khz

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

// chip select low


// chip select high
// chip select low
// chip select high
// chip select low
// chip select high
// chip select low
// chip select high

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;

BitWrPortI(PDDR, &PDDRShadow, 1, busy );

// Led on

/*** Calculo de la distancia con los Centroides ***/


j=0;
if (BitRdPortI(PFDR,frecuencia)==1) // Si esta trabajando a 40 khz, utiliza los
centroides de 40 khz
{
for(j=0;j<obj[1];j++){
/* Se utilizaron los parametros tf y Amplitud en tf+150us */

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++){

// Si esta trabajando a 200 khz, utiliza los centroides de

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;
}
}

/**** Transmision de los datos adquiridos *****/


if(serial_rx==100){
Completo ' transmite los sgtes datos
for(j=0;j<1;j++){

// Si se escogio el modo ' Reconocimiento

// j=0 --> Primer Transductor ; j=1 --> Segundo Transductor

/* Transmision del tiempo de vuelo */


serAputc(tiempo_vuelo[j]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
serAputc(tiempo_vuelo[j]);
// Transmitiendo del 7 al 0
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
/* Transmision de la amplitud en +50us */
serAputc(adc_sample1[j]/256);
// Transmitiendo del 15 al 8
while (serAwrFree() != AOUTBUFSIZE);
while (BitRdPortI(SASR, 3) || BitRdPortI(SASR, 2));
173

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];

// Sumatoria de los valores para cada parametro


// Sumatoria de los valores para cada parametro

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(i=1;i<1000;i++){} // retraso para esperar que se estabilize el transductor


}
/************************* Calculo del Centroide *************************/
m=0;
for(m=0;m<muestras;m++){ // Limpiando los acumuladores
sum1[0][tf]=0;
sum1[0][amp1]=0;
sum1[0][amp2]=0;
sum1[0][amp3]=0;
sum1[0][amp4]=0;

}
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
/*

Transmisin para el Primer transductor */

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

/*

Transmisin para el Primer transductor */

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){

// retardo necesario para que se guarde el dato del

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

// retardo necesario para que se guarde el dato

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

ANEXO E CODIGO DEL SOFTWARE DE VISUALIZACION

CODIGO DEL FORMULARIO (Calculos)

Private Sub Command1_Click()


Dim q As Integer
Dim num1 As String
Dim num2 As String
Dim num3 As String
Dim num4 As String
Dim num5 As String
Dim num11 As String
Dim num22 As String
Dim num33 As String
Dim num44 As String
Dim num55 As String
Dim num66 As String
Dim distancia As Double
Dim r As Single
Dim g As Single
Dim b As Single
For i = 0 To ((frmentrenamiento.variable * 25) - 1)

Moduleserie.promedio(0) = (Moduleserie.promedio(0) + Moduleserie.tf(i))


Moduleserie.promedio(1) = (Moduleserie.promedio(1) + Moduleserie.a1(i))
Moduleserie.promedio(2) = (Moduleserie.promedio(2) + Moduleserie.a2(i))
Moduleserie.promedio(3) = (Moduleserie.promedio(3) + Moduleserie.a3(i))
Moduleserie.promedio(4) = (Moduleserie.promedio(4) + Moduleserie.a4(i))
Next i

Moduleserie.promedio(0) = (Moduleserie.promedio(0) / (frmentrenamiento.variable * 25))


Moduleserie.promedio(1) = (Moduleserie.promedio(1) / (frmentrenamiento.variable * 25))
Moduleserie.promedio(2) = (Moduleserie.promedio(2) / (frmentrenamiento.variable * 25))
Moduleserie.promedio(3) = (Moduleserie.promedio(3) / (frmentrenamiento.variable * 25))
Moduleserie.promedio(4) = (Moduleserie.promedio(4) / (frmentrenamiento.variable * 25))

182

For j = 0 To ((frmentrenamiento.variable * 25) - 1)


sumatoria de la formula de la desviacion estandar

' se calcula la

Moduleserie.varianza(0) = (Moduleserie.varianza(0) + (Moduleserie.tf(j) Moduleserie.promedio(0)) ^ 2)


Moduleserie.varianza(1) = (Moduleserie.varianza(1) + (Moduleserie.a1(j) Moduleserie.promedio(1)) ^ 2)
Moduleserie.varianza(2) = (Moduleserie.varianza(2) + (Moduleserie.a2(j) Moduleserie.promedio(2)) ^ 2)
Moduleserie.varianza(3)
=
(Moduleserie.varianza(3)
+
(Moduleserie.a3(j)
Moduleserie.promedio(3)) ^ 2)
Moduleserie.varianza(4)
=
Moduleserie.promedio(4)) ^ 2)

(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

End If 'cierra el if de los tf 0

Picture1.Circle (Moduleserie.promedio(2), (6281.525 - Moduleserie.promedio(4))), 5,


RGB(255, 0, 255) 'grfica
Picture3.BackColor = RGB(255, 0, 255)
If vector2(0) = "40" Then
For i = 1 To frmentrenamiento.variable40
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 = "NMERO = '" & Trim(i) & "'" 'busca en la tabla de 40 el objeto chequeado
frmentrenamiento.REGISTRO40.FindFirst buscar4

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

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

Text1(i - 1).Visible = True


Label11(i - 1).Visible = True
Label12(i - 1).Visible = True
distancia = ((Sqr((((Moduleserie.promedio(2) - ejex)) ^ 2 + ((Moduleserie.promedio(4) ejey) ^ 2)))) * 0.0006103515625)
num66 = distancia
num66 = Format(num66, "####0.00")
Text1(i - 1).Text = num66
Label11(i - 1).Caption = frmentrenamiento.REGISTRO40!OBJETOS

Next i

ElseIf vector2(0) = "200" Then

For i = 1 To frmentrenamiento.variable40

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 = "NMERO = '" & Trim(i) & "'" 'busca en la tabla de 40 el objeto chequeado
frmentrenamiento.REGISTRO200.FindFirst buscar4
ejex = frmentrenamiento.REGISTRO200!AMPLITUD2_PRIMER_PAR_200
ejey = frmentrenamiento.REGISTRO200!AMPLITUD4_PRIMER_PAR_200
Label(i - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS
187

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)
Text1(i - 1).Visible = True
Label11(i - 1).Visible = True
Label12(i - 1).Visible = True
distancia = ((Sqr((((Moduleserie.promedio(2) - ejex)) ^ 2 + ((Moduleserie.promedio(4) ejey) ^ 2)))) * 0.0006103515625)
num66 = distancia
num66 = Format(num66, "####0.00")
Text1(i - 1).Text = num66
Label11(i - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS

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

Dim buscar2 As String 'busca el objeto en la base de datos dependiendo el codigo


recibido e imprime en pantalla tanto el objeto como la frencuencia a la cual se esta
trabajando
dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb"
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)

If vector2(0) = "40" Then


frecu.Text = "40KHz"
tx = Trim(Moduleserie.vectorcode(0))
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
buscar2 = "CDIGOS = '" & tx & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar2
objeto.Text = frmentrenamiento.REGISTRO40!OBJETOS
End If
If vector2(0) = "200" Then
frecu.Text = "200KHz"
tx = Trim(Moduleserie.vector2(((frmentrenamiento.variable200 * 25) * 10) + 1) + 1)
Set frmentrenamiento.REGISTRO200 =
frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)
189

buscar2 = "CDIGOS = '" & tx & "'"


frmentrenamiento.REGISTRO200.FindFirst buscar2
objeto.Text = frmentrenamiento.REGISTRO200!OBJETOS
End If

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

dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb"


'abre la base de datos
Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
If cambios11 = True Then
tabla de 40KHz

'si la frecuencia fue 40KHz busca el codigo del objeto en la

Text5.Text = "40KHz"
tx = Trim(Moduleserie.vectorcods40)
192

Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",


dbOpenDynaset)
buscar2 = "CDIGOS = '" & tx & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar2
txtobjeto.Text = frmentrenamiento.REGISTRO40!OBJETOS

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

For l = 0 To (frmentrenamiento.variable40 - 1) Step 1 'aparece el texto en donde se


colocan los datos del nmero de veces que
'dijo que era cada uno de los objetos que se encuentran
en la base de datos
Text(l).Visible = True
Text(l).Text = Moduleserie.vectorporce(l)
Next l
buscar4 = "" 'se limpian las variables
buscar2 = ""

End If

193

If cambios12 = True Then


la tabla de 200KHz
Text5.Text = "200KHz"

'si la frecuencia fue 200KHz busca el codigo del objeto en

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

For W = 1 To frmentrenamiento.variable200 Step 1 ' aparece en el nombre de los label el


objeto que hay en la base de datos

buscar4 = "CDIGOS = '" & Trim(W) & "'"

frmentrenamiento.REGISTRO200.FindFirst buscar4
Label(W - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS
Next W

For l = 0 To (frmentrenamiento.variable200 - 1) Step 1 'aparece el texto en donde se


colocan los datos del nmero de veces que
'dijo que era cada uno de los objetos que se encuentran
en la base de datos
Text(l).Visible = True
Text(l).Text = Moduleserie.vectorporce(l)
Next l
194

buscar4 = "" 'se limpian las variables


buscar2 = ""
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
End Sub

CODIGO DEL FORMULARIO (frmacercade)

Private Sub Command1_Click()


Unload frmacercade 'descarga el formulario
frmprincipal.Picture3.Visible = True 'coloca visible el dibujo de la pagina principal
End Sub
Private Sub Form_Load()
frmprincipal.Picture3.Visible = False 'cuando carga el formulario coloca ivisible el dibujo
de la pagina principal
frmacercade.WindowState = 2

End Sub

Private Sub Form_Resize()


frmprincipal.Picture3.Visible = False
frmacercade.Picture1.Refresh
End Sub
Private Sub Form_Unload(Cancel As Integer)
195

frmprincipal.Picture3.Visible = True
End Sub

CODIGO DEL FORMULARIO (frmcontenido)


Option Explicit
Private Sub Label1_Click()
End Sub
Private Sub Combo1_click()
If Combo1.ListIndex = 0 Then
List1.Clear
List1.AddItem "Reconocimiento Simple" 'aade el los menu a la lista
List1.AddItem "Reconocimiento Completo"
List1.AddItem "Entrenamiento"
List1.AddItem "Grficar"
List1.AddItem "Libreria"
End If
If Combo1.ListIndex = 1 Then
List1.Clear 'los submenu que no corresponden al menu
List1.AddItem "Calculo de Coeficientes Tx y Rx"
List1.AddItem "Modo Manual"
End If
End Sub
Private Sub Form_Load()
frmprincipal.Picture3.Visible = False
frmcontenido.WindowState = 2
Combo1.AddItem "Ejecutar"
Combo1.AddItem "Complemento"

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."

ElseIf List1.ListIndex = 1 Then


Text1.Text = "Esta opcin adems de reconocer el objeto, permite calcular la desviacin
estndar de cada parmetro (Tf, A1, A2, A3, A4). El nmero 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."

ElseIf List1.ListIndex = 2 Then


Text1.Text = "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), luego se le asigna un nombre al objeto entrenado y
por ltimo se enva a la base de datos en la opcin guardar."
ElseIf List1.ListIndex = 3 Then
Text1.Text = "Permite grficar los centroides de los objetos almacenados en la base de
datos. Primero escoja la frecuencia (40KHz, 200KHz), luego los objetos a grficar y los
parametros. Esta opcin le permite ver al usuario que parametros (Tf, A1, A2, A3, A4) son
suficientes para el reconocimiento "
197

ElseIf List1.ListIndex = 4 Then


Text1.Text = " Esta opcin permite descargar en la tarjeta los centroides de los objetos que
seleccione el usuario"
End If
End If

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

CODIGO DEL FORMULARIO (frmentrenamiento)


Public BASE As Database 'declara la base de datos
Public FIELD1 As Field 'declara los campos es decir el nombre de las columnas de la
tabla
Public FIELD2 As Field
Public FIELD3 As Field
Public FIELD4 As Field
Public FIELD5 As Field
Public FIELD6 As Field
Public FIELD12 As Field
Public FIELD13 As Field
Public FIELD14 As Field
Public FIELD15 As Field
Public FIELD16 As Field
Public FIELD17 As Field
Public FIELD23 As Field
198

Public FIELD24 As Field


Public FIELD25 As Field '40
Public FIELD26 As Field '200
Public REGISTRO40 As Recordset ' se declara los registros donde se guardan los datos
Public REGISTRO200 As Recordset
Public TABLE1 As TableDef ' se declara la tabla para los de 40KHz
Public TABLE2 As TableDef ' se declara la tabla para los de 40KHz
Public V As Integer
Public nmero40 As Integer 'lleva el conteo del nmero de objeto que hay en la tabla de
40KHz
Public nmero200 As Integer 'lleva el conteo del nmero de objeto que hay en la tabla de
40KHz
Public variable40 As Integer 'conteo el codigo de objeto que hay tanto en el procesador
como en la base en la tabla de 40KHz
Public variable200 As Integer 'conteo el codigo de objeto que hay tanto en el procesador
como en la base en la tabla de 200KHz
Public enviar1 As Byte
Public variable As Integer
Public envio As Integer
Private Sub Command1_Click()
CommonDialog1.Action = 2
nombre = CommonDialog1.FileName
Picture1.Picture = dbname(nombre)
End Sub

Private Sub Command3_Click()


Dim buscar As String
Dim MENSAJE As Integer
If Text1.Text = "" Then
199

MsgBox "Asignele un nombre al objeto entrenado en la opcin OBJETO ENTRENADO


y luego envielo a la base de datos en la opcion GUARDAR", vbOKOnly, "Informacin"
End If

dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb" ' se abre la base de datos


Set BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
If cambios40 = True Then ' si la frecuencia es 40KHz
Set REGISTRO40 = BASE.OpenRecordset("40KHz", dbOpenDynaset)

buscar = "OBJETOS = '" & Trim(Text1.Text) & "'"


REGISTRO40.FindFirst buscar
If Text1.Text <> "" Then
If REGISTRO40.NoMatch = True Then ' se revisa si el nombre del objeto asignado ya
existe en la tabla
variable40 = variable40 + 1 'si no existe se guarda normas y se aumenta el nmero de
objetos
nmero40 = nmero40 + 1

REGISTRO40.AddNew ' aade el nuevo objeto


REGISTRO40!OBJETOS = Text1.Text
REGISTRO40!TIEMPO_PRIMER_PAR_40 = txttvuelop140.Text
REGISTRO40!AMPLITUD1_PRIMER_PAR_40 = txtampp50140.Text
REGISTRO40!AMPLITUD2_PRIMER_PAR_40 = txtampp100140.Text
REGISTRO40!AMPLITUD3_PRIMER_PAR_40 = txtampp150140.Text
REGISTRO40!AMPLITUD4_PRIMER_PAR_40 = txtampp200140.Text
REGISTRO40!CDIGOS = variable40
REGISTRO40!NMERO = nmero40
REGISTRO40.Update
200

REGISTRO40.MoveLast
frmprincipal. = REGISTRO40.RecordCount
REGISTRO40.Close

ElseIf REGISTRO40.NoMatch = False Then ' si existe en el objeto entonces se pregunta si


desea remplazarlo
MENSAJE = MsgBox("Este objeto ya existe en la base de datos. Desea remplazarlo?",
vbYesNoCancel, "Advertencia")
Select Case MENSAJE
Case 6 'si la persona presiona que si entonces se edita el existente y no se aumento ni el
codigo ni el nmero de objetos
REGISTRO40.Edit
REGISTRO40!OBJETOS = Text1.Text
REGISTRO40!TIEMPO_PRIMER_PAR_40 = txttvuelop140.Text
REGISTRO40!AMPLITUD1_PRIMER_PAR_40 = txtampp50140.Text
REGISTRO40!AMPLITUD2_PRIMER_PAR_40 = txtampp100140.Text
REGISTRO40!AMPLITUD3_PRIMER_PAR_40 = txtampp150140.Text
REGISTRO40!AMPLITUD4_PRIMER_PAR_40 = txtampp200140.Text
REGISTRO40.Update

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

'cierra el if de los nomatch


'cierra el de texto vacio
'cierra el if de la frecuencia

201

If cambios200 = True Then ' si la frecuencia es 200KHz


Set REGISTRO200 = BASE.OpenRecordset("200KHz", dbOpenDynaset)

buscar = "OBJETOS = '" & Trim(Text1.Text) & "'"


REGISTRO200.FindFirst buscar
If Text1.Text <> "" Then
If REGISTRO200.NoMatch = True Then ' se revisa si el nombre del objeto asignado ya
existe en la tabla
variable200 = variable200 + 1
nmero200 = nmero200 + 1 'si no existe se guarda normas y se aumenta el nmero de
objetos

REGISTRO200.AddNew ' aade el nuevo objeto


REGISTRO200!OBJETOS = Text1.Text
REGISTRO200!TIEMPO_PRIMER_PAR_200 = txttvuelop140.Text
REGISTRO200!AMPLITUD1_PRIMER_PAR_200 = txtampp50140.Text
REGISTRO200!AMPLITUD2_PRIMER_PAR_200 = txtampp100140.Text
REGISTRO200!AMPLITUD3_PRIMER_PAR_200 = txtampp150140.Text
REGISTRO200!AMPLITUD4_PRIMER_PAR_200 = txtampp200140.Text
REGISTRO200!CDIGOS = variable200
REGISTRO200!NMERO = nmero200
REGISTRO200.Update
REGISTRO200.MoveLast
frmprincipal.p = REGISTRO200.RecordCount
REGISTRO200.Close

ElseIf REGISTRO200.NoMatch = False Then ' si existe en el objeto entonces se pregunta


si desea remplazarlo

202

MENSAJE = MsgBox("Este objeto ya existe en la base de datos. Desea remplazarlo?",


vbYesNoCancel, "Advertencia")
Select Case MENSAJE
Case 6 'si la persona presiona que si entonces se edita el existente y no se aumento ni el
codigo ni el nmero de objetos
REGISTRO200.Edit
REGISTRO200!OBJETOS = Text1.Text
REGISTRO200!TIEMPO_PRIMER_PAR_200 = txttvuelop140.Text
REGISTRO200!AMPLITUD1_PRIMER_PAR_200 = txtampp50140.Text
REGISTRO200!AMPLITUD2_PRIMER_PAR_200 = txtampp100140.Text
REGISTRO200!AMPLITUD3_PRIMER_PAR_200 = txtampp150140.Text
REGISTRO200!AMPLITUD4_PRIMER_PAR_200 = txtampp200140.Text
REGISTRO200.Update

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

Private Sub Form_Load()


Command2.Visible = False
frmentrenamiento.WindowState = 2
203

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

CODIGO DEL FORMULARIO (frmgrfica)


Public comparar1 As String
Public comparar2 As String
204

Public ejex As Integer


Public ejey As Integer
Private Sub Command1_Click()
Dim i As Integer
Dim h As Integer
Dim NMERO As Integer
Picture1.DrawWidth = 7
For i = 1 To 30
If Check1(i).Value = 1 Then
NMERO = NMERO + 1
End If
Next i
If frecuencia.ListIndex = 0 Then 'si la persona escogio 40KHz

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

ElseIf comparar1 = "Amplitud 1" Then


ejex = frmentrenamiento.REGISTRO40!AMPLITUD1_PRIMER_PAR_40
ElseIf comparar1 = "Amplitud 2" Then
ejex = frmentrenamiento.REGISTRO40!AMPLITUD2_PRIMER_PAR_40
ElseIf comparar1 = "Amplitud 3" Then
ejex = frmentrenamiento.REGISTRO40!AMPLITUD3_PRIMER_PAR_40
ElseIf comparar1 = "Amplitud 4" Then
ejex = frmentrenamiento.REGISTRO40!AMPLITUD4_PRIMER_PAR_40
End If

If comparar2 = "Tiempo de Vuelo" Then


ejey = frmentrenamiento.REGISTRO40!TIEMPO_PRIMER_PAR_40
ejey = ejey * 80
ElseIf comparar2 = "Amplitud 1" Then
ejey = frmentrenamiento.REGISTRO40!AMPLITUD1_PRIMER_PAR_40
ElseIf comparar2 = "Amplitud 2" Then
ejey = frmentrenamiento.REGISTRO40!AMPLITUD2_PRIMER_PAR_40
ElseIf comparar2 = "Amplitud 3" Then
ejey = Int(frmentrenamiento.REGISTRO40!AMPLITUD3_PRIMER_PAR_40)
ElseIf comparar2 = "Amplitud 4" Then
ejey = frmentrenamiento.REGISTRO40!AMPLITUD4_PRIMER_PAR_40

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

ElseIf comparar1 = "Amplitud 1" Then


ejex = frmentrenamiento.REGISTRO200!AMPLITUD1_PRIMER_PAR_200
ElseIf comparar1 = "Amplitud 2" Then
ejex = frmentrenamiento.REGISTRO200!AMPLITUD2_PRIMER_PAR_200
ElseIf comparar1 = "Amplitud 3" Then
ejex = frmentrenamiento.REGISTRO200!AMPLITUD3_PRIMER_PAR_200
ElseIf comparar1 = "Amplitud 4" Then
ejex = frmentrenamiento.REGISTRO200!AMPLITUD4_PRIMER_PAR_200
End If

If comparar2 = "Tiempo de Vuelo" Then


207

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

Private Sub Form_Load()


frmgrfica.WindowState = 2
frmprincipal.Picture3.Visible = False
For i = 1 To 30
Check1(i).Visible = False 'carga los check y los picture invisible
Picture2(i - 1).Visible = False
Next i
frecuencia.AddItem "40KHz" 'aade las frecuencia a la caja
frecuencia.AddItem "200KHz"
Option3.Visible = False
Dim buscar4 As String
Dim BUSCAR3 As String

'MsgBox "Escoja la frencuencia a la cual desea grficar", vbOKOnly, "advertencia"


End Sub
Private Sub Form_Unload(Cancel As Integer)
frmprincipal.Picture3.Visible = True
209

End Sub
Private Sub frecuencia_Click()
Option3.Visible = True
Dim i As Integer

If frecuencia.ListIndex = 0 Then 'si la frecuencia es 40KHz


For i = 1 To 30
Check1(i).Caption = ""
Check1(i).Visible = False
Picture2(i - 1).Visible = False
Next i

dbname = App.Path & "\DATOS_ENTRENAMIENTO.mdb"


Set frmentrenamiento.BASE = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
For k = 1 To frmprincipal. Step 1 'coloque el nombre de los objetos que se encuentren en
la tabla
nombre = Trim(k)
buscar4 = "NMERO = '" & Trim(k) & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar4
Check1(k).Caption = frmentrenamiento.REGISTRO40!OBJETOS
Check1(k).Visible = True
Picture2(k - 1).Visible = True
Next k
MsgBox "Seleccione los objetos y parametros que desea grficar", vbOKOnly,
"Advertencia"

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

MsgBox "Seleccione los objetos y parametros que desea grficar", vbOKOnly,


"Advertencia"

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

If comparar1 = "Tiempo de Vuelo" Then


Label4.Caption = "960"
Label15.Caption = "1080"
Label5.Caption = "1200"
Label16.Caption = "1310"
Label6.Caption = "1430"
Label17.Caption = "1550"
Label7.Caption = "1670"
Label8.Caption = "1750"
Label18.Caption = "1900"

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

If Option2(p).Value = True Then 'guarda en comparar2 el parametro escogido por el


usuario
comparar2 = Option2(p).Caption
Label3.Caption = comparar2
If comparar2 = "Tiempo de Vuelo" Then
Label9.Caption = "960"
Label10.Caption = "1080"
Label11.Caption = "1200"
Label12.Caption = "1310"
Label19.Caption = "1430"
Label20.Caption = "1550"
Label21.Caption = "1670"
Label22.Caption = "1750"
Label23.Caption = "1900"
Label14.Caption = "us"
Else
Label9.Caption = "0"
Label10.Caption = "0.48"
Label11.Caption = "0.96"
Label12.Caption = "1.44"
Label19.Caption = "1.92"
Label20.Caption = "2.4"
Label21.Caption = "2.88"
Label22.Caption = "2.36"
Label23.Caption = "3.84"
Label14.Caption = "V"
End If

End If

End Sub
213

Private Sub Option3_Click()


Dim i As Integer
If frecuencia.ListIndex = 0 Then 'cuando se seleccione esta opcion se seleccionan todos los
objetos mostrados

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

CODIGO DEL FORMULARIO (frmlibreria)


Option Explicit
Public q As Integer
Private Sub Combo1_click()
Dim dbname As String
Dim buscar7 As String
Dim u As Integer
Dim nombre 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 Combo1.ListIndex = 0 Then ' si la frecuencia escogida es 40
For i = 0 To 29
214

Check(i).Caption = ""
Check(i).Visible = False
Next i

Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",


dbOpenDynaset)
For u = 1 To frmprincipal. Step 1 'aparecen los objetos de la tabla 40 en pantalla
nombre = Trim(u)
buscar7 = "NMERO = '" & u & "'"
frmentrenamiento.REGISTRO40.FindFirst buscar7
Check(u - 1).Caption = frmentrenamiento.REGISTRO40!OBJETOS
Check(u - 1).Visible = True

Next u

ElseIf Combo1.ListIndex = 1 Then ' si la frecuencia escogida es 200


For i = 0 To 29
Check(i).Caption = ""
Check(i).Visible = False
Next i

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

If Combo1.ListIndex = 0 Then 'si la frecuencia es 40


frmentrenamiento.variable40 = 0 'limpia el codigo de los objetos
Set frmentrenamiento.REGISTRO40 = frmentrenamiento.BASE.OpenRecordset("40KHz",
dbOpenDynaset)
For i = 1 To frmprincipal. Step 1
'enviar1 = Trim(i)
buscar5 = "NMERO = '" & Trim(i) & "'"
216

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

serialenviar.Output = Chr(Val(Moduleserie.objeto(0))) 'envia el codigo del objeto de 8 bits

frmentrenamiento.REGISTRO40.Edit 'asigna en la tabla correspondiente el nuevo codigo


del objeto
frmentrenamiento.REGISTRO40!CDIGOS = frmentrenamiento.variable40
frmentrenamiento.REGISTRO40.Update

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

If serialenviar.PortOpen = True Then 'cierra el puerto serial


serialenviar.PortOpen = False
End If
End If

If Combo1.ListIndex = 1 Then 'si la frecuencia es 200


frmentrenamiento.variable200 = 0 'limpia el codigo de los objetos
218

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

frmentrenamiento.variable200 = frmentrenamiento.variable200 + 1 'aumento la variable del


codigo del objeto por cada check seleccionado
'enviar = Trim(Check(z).Caption)
219

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

If serialenviar.PortOpen = True Then 'cierra el puerto serial


serialenviar.PortOpen = False
End If

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

Private Sub cmdresultado_click()


Dim num1 As String
Dim num2 As String
Dim formato As String
Dim result As String
Cmdresultado.Enabled = True 'realiza el calculo de la impedancia
Txtimpedancia.Text = (Txtdensidad.Text) * (Txtvelocidad.Text)
num2 = (Txtimpedancia.Text)
'num2 = Format(num2, "0.0###")
result = ((((num2 - aire) / (num2 + aire)) ^ 2) * porcentaje) 'calcula la energia reflejada
'num1 = (txtresultadorx.Text)
num1 = Format(result, "0.0###")
txtresultadorx.Text = num1
result = ("100" - num1) 'calcula la energia transmitida
formato = Format(result, "0.0###")
'formato = txtresultadotx.Text
txtresultadotx.Text = formato
End Sub
222

Private Sub Form_Load()


frmnuevomaterial.WindowState = 2
frmprincipal.Picture3.Visible = False
escoger.AddItem "Acero" 'aaden los item a la caja
escoger.AddItem "Aluminio"
escoger.AddItem "Madera"
escoger.AddItem "Aire"
escoger.AddItem "Polietileno"
'escoger.AddItem "Aada un nuevo material"

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

Private Sub Form_Unload(Cancel As Integer)


frmprincipal.Picture3.Visible = True
End Sub
Private Sub newmaterial_Click()
Txtmaterial.Text = ""
Txtdensidad.Text = ""
Txtvelocidad.Text = ""
Txtimpedancia.Text = ""
txtresultadorx.Text = ""
txtresultadotx.Text = ""
End Sub
Private Sub Txtdensidad_LostFocus()
If Txtdensidad.Text = "" Then 'evita dejar el espacio en blanco
MsgBox "El valor de la densidad no se puede dejar en blanco", vbOKOnly, "advertencia"
End If
End Sub

Private Sub Txtmaterial_KeyPress(KeyAscii As Integer)


Dim comp As Boolean 'slo permite introducir nmeros
comp = Chr(KeyAscii) Like "[A-Za-z]"
If comp = False Then
KeyAscii = 0
End If
End Sub
Private Sub Txtvelocidad_LostFocus()
If Txtvelocidad.Text = "" Then 'evita dejar el espacio en blanco
MsgBox "El valor de la velocidad no se puede dejar en blanco", vbOKOnly, "advertencia"
End If
End Sub
CODIGO DEL FORMULARIO (frmprincipal)
224

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

Private Sub Command1_Click() 'rutina donde se guarda los datos de entrenamiento


n=0
serial.PortOpen = False ' despues de recibir los datos cierra el puerto
If vector(0) = "40" Then 'si el primer dato recibido es 40KHz
cambios40 = True 'activa la variable booleana
For i = 0 To 4
vectormas40(i) = vector((i * 2) + 1) * 256 'se realiza la conversion de 8 a datos de 16 bits
vectormenos40(i) = (Int(vectormas40(i)) + Int(vector((i + 1) * 2)))
Next i
End If
If vector(0) = "200" Then 'si el primer dato recibido es 200KHz
cambios200 = True
'activa la variable booleana
For j = 0 To 4
225

vectormas200(j) = vector((j * 2) + 1) * 256 'se realiza la conversion de 8 a datos de 16 bits


vectormenos200(j) = (Int(vectormas200(j)) + Int(vector((j + 1) * 2)))
Next j
End If
Unload frmentrenamiento 'luego carga el formulario donde se visualizan los datos
Load frmentrenamiento
End Sub
Private Sub Command2_Click() 'rutina donde se guardan los datos de reconocimiento
completo
s=0
serial2.PortOpen = False ' despues de recibir los datos cierra el puerto

For a = 0 To ((5 * ((frmentrenamiento.variable) * 25)) - 1) Step 1


vectormenosc(a) = (Int((vector2((2 * a) + 1)) * 256) + Int(vector2((2 * a) + 2))) 'convierte
los datos de 8 bits a 16 bits
Next a

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

Private Sub Command3_Click() 'rutina donde se guardan los datos de reconocimiento


simple

m=0
serial1.PortOpen = False ' despues de recibir los datos cierra el puerto

If modo1 = True Then


If serial1.PortOpen = False Then
serial1.PortOpen = True
End If
End If
If vector1(0) = "40" Then
cambios11 = True

'identifica la frecuencia a la que se reconoce

vectorcods40 = vector1(1) ' aumenta el cod del objeto a 1


vectorcods40 = vectorcods40 + 1
For V = 0 To (frmentrenamiento.variable40 - 1) Step 1
de veces que identifico que objeto era por cada objeto
vectorporce(V) = vector1(V + 2)
Next V

'guarda en una variable el nmero

ElseIf vector1(0) = "200" Then 'identifica la frecuencia a la que se reconoce


cambios12 = True
vectorcods200(0) = vector1(1) ' aumenta el cod del objeto a 1
vectorcods200(0) = vectorcods200(0) + 1
For V = 0 To (frmentrenamiento.variable200 - 1) Step 1 'guarda en una variable el nmero
de veces que identifico que objeto era por cada objeto
227

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

If serial.PortOpen = False Then 'abre el puerto


serial.PortOpen = True
End If

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

If serial2.PortOpen = False Then 'abre el puerto


serial2.PortOpen = True
End If
serial2.Output = "d" 'manda el caracter que indica al microprocesador que se esta
solicitando rcto completo
End Sub
Private Sub rctosimple_Click()
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
serial1.Output = "a" 'manda el caracter que indica al microprocesador que se esta
solicitando rcto simple

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

If m = (2 + frmentrenamiento.variable) Then 'cuando termine de guardar los datos se va al


procedimiento donde se organizan los datos recibidos
If muestras = False Then
Call Command3_Click
End If
If muestras = True Then
vectorcods40 = vector1(1)
' aumenta el cod del objeto a 1
vectorcods40 = vectorcods40 + 1
If vectorcods40 = 1 Then
XX = XX + 1
ElseIf vectorcods40 = 2 Then
YY = YY + 1
ElseIf vectorcods40 = 3 Then
zz = zz + 1
ElseIf vectorcods40 = 4 Then
WW = WW + 1
End If
cantidad = cantidad + 1
muestras = False
serial1.PortOpen = False
If cantidad <> 200 Then
Call Command4_Click
End If

If cantidad = 200 Then


calculosimple.Text1.Text = XX
calculosimple.Text2.Text = YY
calculosimple.Text3.Text = zz
235

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

Public a1(760) As Integer


Public a2(760) As Integer
Public a3(760) As Integer
Public a4(760) As Integer
Public promedio(4) As Long ' realiza el promedio de los vectores anteriores
Public varianza(4) As Long
Public varianzad(4) As Double 'realiza la desviacion estandar
CODIGO DEL MODULO (moduleaction)
Public cambios40 As Boolean 'indica en entrenamiento que frecuencia es
Public cambios200 As Boolean
Public cambiosm As Boolean
Public cambios1 As Boolean
Public cambios11 As Boolean 'indica en RCTO SIMPLE que frecuencia es
Public cambios12 As Boolean
Public cambios13 As Boolean
Public cambios2 As Boolean
Public contdoc As Integer
Public modo1 As Boolean
Public muestras As Boolean

239

ANEXO F HOJA DE ESPECIFICACIONES DE LOS DISPOSITIVOS

RABBIT CORE 3610

240

CONVERTIDOR ANALGICO - DIGITAL AD7475

241

VOLTAJE DE REFERENCIA AD780

242

AMPLIFICADORES DE GANANCIA PROGRAMABLE PGA204 - 205

243

AMPLIFICADOR DE PROPSITO GENERAL TL084 082

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

Reguladores LM7805, LM7824, LM7812

252

Regulador LM317

253

Capacitores

254

You might also like