Tesis

257
PROTOTIPO PARA EL RECONOCIMIENTO DE OBJETOS CON ULTRASONIDO EN APLICACIONES DE INSPECCIÓN CON PATRONES PREDETERMINADOS MÓNICA PATRICIA BOTERO ACOSTA CÉSAR ANTONIO DE LA HOZ VIZCAINO FUNDACIÓN UNIVERSIDAD DEL NORTE DIVISIÓN DE INGENIERÍAS DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA PROGRAMA DE INGENIERÍA ELECTRÓNICA BARRANQUILLA 2005

description

fgrwe

Transcript of Tesis

Page 1: Tesis

PROTOTIPO PARA EL RECONOCIMIENTO DE OBJETOS CON

ULTRASONIDO EN APLICACIONES DE INSPECCIÓN CON PATRONES

PREDETERMINADOS

MÓNICA PATRICIA BOTERO ACOSTA

CÉSAR ANTONIO DE LA HOZ VIZCAINO

FUNDACIÓN UNIVERSIDAD DEL NORTE

DIVISIÓN DE INGENIERÍAS

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

PROGRAMA DE INGENIERÍA ELECTRÓNICA

BARRANQUILLA

2005

Page 2: Tesis

PROTOTIPO PARA EL RECONOCIMIENTO DE OBJETOS CON

ULTRASONIDO EN APLICACIONES DE INSPECCIÓN CON PATRONES

PREDETERMINADOS

MÓNICA PATRICIA BOTERO ACOSTA

CÉSAR ANTONIO DE LA HOZ VIZCAÍNO

Proyecto de grado presentado como requisito para optar

al título de Ingeniero Electrónico

______________________________________________

Director: ERIC VALLEJO

Doctor en Automática e Informática Industrial

FUNDACIÓN UNIVERSIDAD DEL NORTE

DIVISIÓN DE INGENIERÍAS

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA

PROGRAMA DE INGENIERÍA ELECTRÓNICA

BARRANQUILLA

2005

Page 3: Tesis

NOTA DE ACEPTACIÓN

_________________________

_________________________

_________________________

_________________________

___________________________________

Firma presidente del jurado

___________________________________

Firma del jurado

__________________________________

Firma del jurado

Barranquilla, 05 de diciembre del 2005.

Page 4: Tesis

1

AGRADECIMIENTOS

Agradecemos a Dios que siempre nos iluminó por el camino correcto y nos rodeo de gente

maravillosa que nos facilitó las labores realizadas.

También 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 Electrónica por su disposición para

ayudarnos en todo lo que estuvo a su alcance.

Page 5: Tesis

2

CONTENIDO

1 FORMULACIÓN DEL PROBLEMA 18

1.1 PLANTEAMIENTO DEL PROBLEMA 18

1.2 JUSTIFICACIÓN 18

1.3 IMPACTO ESPERADO 19

2 OBJETIVOS 20

2.1 OBJETIVO GENERAL 20

2.2 OBJETIVOS ESPECÍFICOS 20

3 ALCANCES Y LIMITACIONES 21

4 MARCO TEÓRICO 22

4.1 FUNDAMENTOS DEL ULTRASONIDO 22

4.1.1 Propiedades Generales 22

4.1.2 Propagación de las ondas ultrasónicas 24

4.1.3 Coeficientes de Reflexión y Transmisión 26

4.1.4 La señal de eco 27

4.2 SENSORES 27

4.2.1 Características de los sensores 28

4.2.2 Transductores Ultrasónicos 28

4.3 RECEPCIÓN Y ACONDICIONAMIENTO DE LA SEÑAL 30

4.3.1 Ancho de Banda 30

4.3.2 Nivel de ruido 31

4.3.3 Filtros 31

4.3.4 Detección de Envolvente 31

4.3.5 Compensación atenuación-distancia (CAD) 31

4.3.6 Imprecisión de amplitud 32

4.4 PROCESAMIENTO DIGITAL DE LA SEÑAL 32

4.4.1 Convertidor Análogo – Digital 33

4.4.2 Filtros Digitales 33

4.4.3 Dispositivos Lógicos Programables 34

4.5 PERCEPCIÓN ARTIFICIAL 35

4.5.1 Patrones y Reconocimiento de Patrones 35

4.5.2 Estimación del error de clasificación y verificación de resultados 43

4.5.3 Estimación de la función de densidad 46

Page 6: Tesis

3

4.5.4 Consideraciones computacionales 49

4.5.5 Otras consideraciones 50

4.6 ESTADO DEL ARTE 51

4.6.1 Redes Neuronales 51

4.6.2 Algoritmos Genéticos 52

4.6.3 Lógica Difusa 52

5 DESCRIPCION GENERAL DEL SISTEMA 54

5.1 DIAGRAMA DE BLOQUES 54

5.2 DIAGRAMA DE FLUJO 55

6 CRITERIOS DE DISEÑO 58

6.1 REQUERIMIENTO DE DISEÑO 58

6.2 JUSTIFICACION DE LOS ELEMENTOS DE DISEÑO 59

6.2.1 Componentes de hardware 59

6.2.2 Componentes de software 63

6.3 ANÁLISIS COMPARATIVO 65

6.3.1 Unidad de procesamiento 65

6.3.2 Sistema de adquisición 66

6.3.3 Etapa de amplificación 66

6.3.4 Convertidor análogo digital 66

7 DESCRIPCION DETALLADA DEL SISTEMA 67

7.1 FUNCIONALIDAD DEL SISTEMA 67

7.1.1 Amplificacion de la Transmisión 67

7.1.2 Multiplexor MPC509 68

7.1.3 Amplificadores de ganancia programable PGA204 - 205 69

7.1.4 Filtro Pasabanda (40KHz y 200KHz) 72

7.1.5 Rectificador de onda completa 73

7.1.6 Filtro Pasabajas 74

7.1.7 Detector de Umbral 75

7.1.8 Convertidor Analógico - Digital 76

7.1.9 Buffer CD74HCT365 77

7.1.10 Etapa de Alimentación 78

7.1.11 Microprocesador 81

7.1.12 Algoritmos del Microprocesador 82

7.1.13 Software de Visualización 95

Page 7: Tesis

4

7.2 ARQUITECTURA Y CONSTRUCCION DEL SISTEMA 109

8 PRUEBAS Y RESULTADOS 111

8.1 ETAPAS DE PRUEBA 111

8.1.1 Estructura Implementada 111

8.1.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos 111

8.1.3 Microprocesador 111

8.1.4 Pruebas Adicionales 111

8.1.5 Etapa Final 112

8.2 DISEÑO DE LOS EXPERIMENTOS 112

8.2.1 Estructura Implementada 112

8.2.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos 113

8.2.3 Microprocesador 113

8.2.4 Pruebas Adicionales 114

8.2.5 Etapa Final 114

8.3 RESULTADOS 117

8.3.1 Estructura Implementada 117

8.3.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos 118

8.3.3 Microprocesador 128

8.3.4 Pruebas Adicionales 130

8.3.5 Etapa Final 134

8.4 ANÁLISIS DE LOS RESULTADOS 137

9 ADMINISTRACION DEL PROYECTO 140

9.1.1 Cronograma del Proyecto Final 140

9.1.2 Costos y Recursos 143

10 CONCLUSIONES 145

11 RECOMENDACIONES 146

12 BIBLIOGRAFIA 147

Page 8: Tesis

5

LISTA DE TABLAS

pág.

Tabla 1 Propiedades acústicas del aire y el agua 25

Tabla 2 Combinaciones de los Parámetros 116

Tabla 3 Calculo de la Energía 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

Page 9: Tesis

6

LISTA DE FIGURAS

pág.

Figura 1 Espectro de las señales acústicas 22

Figura 2 Longitud de Onda en función de la frecuencia 23

Figura 3 Onda Longitudinal 25

Figura 4 Onda transversal 26

Figura 5 Onda superficial 26

Figura 6 Representación tridimensional del patrón de radiación acústica producido por un

transductor 29

Figura 7 Patrón de radiación acústica 30

Figura 8 Patrones de naturaleza temporal y espacial 36

Figura 9 Etapas de un sistema de reconocimiento de patrones 37

Figura 10 A) Selección de las variables más significativas B) Transformación de las

variables originales 40

Figura 11 Una matriz de confusión para un problema con 5 clases 45

Figura 12 Diagrama de bloques. a) Etapa de adquisición 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 amplificación de los pulsos que excitan a los transductores 68

Figura 16 Diagrama de selección de los transductores receptores 69

Figura 17 Etapa de amplificación de la señal recibida. A) Primera etapa de amplificación

antes del filtro pasabanda. B) Segunda etapa de amplificación después del filtrado. 71

Figura 18 Filtro Pasabanda. 73

Page 10: Tesis

7

Figura 19 Rectificador de onda completa. 74

Figura 20 Filtro Pasabajas 74

Figura 21 Detector de Umbral 76

Figura 22 Etapa de digitalización 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 Señales de control del sistema. 82

Figura 30 Reconocimiento Simple 84

Figura 31 Reconocimiento Completo 84

Figura 32 Entrenamiento 85

Figura 33 Librería 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 Función “Gráficar” 100

Page 11: Tesis

8

Figura 41 Función “Librería” 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 visualización 105

Figura 49 Aspecto físico del hardware 109

Figura 50 Aspecto físico del todo el sistema 110

Figura 51 Parámetros de la Envolvente 115

Figura 52 Señal envolvente de la esponja 117

Figura 53 Estructura Final 118

Figura 54 A) Tren de pulsos antes de la amplificación. B) Tren de pulsos después de la

amplificación. 119

Figura 55 A) Tren de pulsos antes de la amplificación. B) Tren de pulsos después de la

amplificación. 120

Figura 56 Señal de eco 121

Figura 57 Eco en la primera etapa de amplificación 122

Figura 58 Eco después del filtrado 122

Figura 59 Eco después de la segunda etapa de amplificación. 123

Figura 60 Detector de umbral y envolvente. 123

Figura 61 Señal Envolvente con 40KHz A) Cubo B) Cilindro C) Esfera D) Cono 124

Page 12: Tesis

9

Figura 62 Señal 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 Señal de Reloj y CS del A/D 130

Figura 65 Señal envolvente del cubo en A) Madera B) Aluminio C) Acero 131

Figura 66 Señal envolvente de la jeringa A) Con la aguja B) Sin la aguja 133

Figura 67 Representación de las clases con los parámetros A2 y A4 135

Figura 68 Reconocimiento de los objetos 136

Figura 69 Área libre de obstáculo para transductores de 40Khz 139

Figura 70 Encendido del Hardware 151

Figura 71 Conector serial 152

Figura 72 Esquemático de la Tarjeta de Adquisición 156

Figura 73 Esquemático de la Tarjeta de Alimentación 156

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

Figura 75 Circuito Impreso de la Tarjeta de Alimentación 158

Page 13: Tesis

10

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

Page 14: Tesis

11

GLOSARIO

CUANTIZACIÓN:

Es la pérdida de datos que se da al convertir datos de una escala a otra que no sea

exactamente coincidente en su tamaño o en las divisiones que lo componen. En este

sentido, la cuantizaciónes una simplificación de los datos al reducir los intervalos con los

que se representan.

Un ejemplo de cuantización 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.

PARAMETRIZACIÓN:

En lugar de escribir especificaciones, representaciones e implementaciones independientes

para cada tipo, se escribe una sola, donde el tipo se reemplaza por un parámetro. Este

proceso se conoce con el nombre de parametrización.

PARTICIONAR:

Es la acción de dividir conjuntos en trozos más pequeños.

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 línea, 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 geometría, el centroide o baricentro de un objeto X perteneciente a un espacio n-

dimensional es la intersección de todos los hiperplanos que dividen a X en dos partes de

Page 15: Tesis

12

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

todos los puntos de X.

En física, el centroide puede, bajo ciertas circunstancias, coincidir con el centro de masas

(El centro de masas de un sistema discreto es el punto geométrico donde la resultante de las

fuerzas gravitatorias ejercidas por todos los cuerpos del sistema se anula) del objeto y

además con el centro de gravedad. En algunos casos, esto hace utilizar estos términos de

manera intercambiable. Para que el centroide coincida con el centro de masa, el objeto tiene

que tener densidad uniforme, o la distribución de materia a través del objeto debe tener

ciertas propiedades, tales como simetría. 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.

SEGMENTACIÓN:

La operación de segmentación 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.

EXTRACCIÓN DE PROPIEDADES:

Consiste en caracterizar un objeto con medidas o cualidades cuyos “valores” tienden a ser

similares. Para objetos en la misma categoría las diferencias son mínimas y por lo tanto las

características son invariables y poco relevantes a cambios en datos leídos por el sensor.

CLASIFICACIÓN:

El objetivo en la operación de clasificación es utilizar un “vector” con las características

provistas por el extractor de propiedades para asignar el objeto (patrón) de la entrada a una

categoría. 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 matemática de cada una de las

categorías

INTERPRETACIÓN:

Es la fase en donde, tomando en cuenta la información extraída en las etapas anteriores, se

puede realizar una clasificación de los objetos a reconocer.

Page 16: Tesis

13

INTRODUCCIÓN

Existen innumerables aplicaciones con ultrasonido. Algunas de ellas están orientadas a la

detección de objetos, otras a la medición de distancias (las más comunes), algunas a

mediciones de flujo, otras más al envío de información y varias más a la inspección [4].

En la actualidad existen grupos de investigación en el ambinto nacional e internacional que

trabajan en este campo con el fin de desarrollar técnicas y sistemas con una alta

confiabilidad.

En la Universidad del Norte (propiamente al interior del Grupo de Investigación en

Robótica y Sistemas Inteligentes) se han desarrollado dos proyectos de grado basados en

ultrasonido.

El primero es un sistema de medición de distancia de objetos, utilizando un

microcontrolador de 8 bits tanto para el proceso de captura de datos como del

procesamiento de la información, desarrollada por los ingenieros José Luís Avendaño

Mendoza y Fabián R. Manotas Angulo [2].

Este sistema utiliza la teoría del pulso-eco la cual consiste en el cálculo del tiempo que

toma la onda en ir al objeto y regresar, y luego, con la aproximación de la velocidad del

sonido, se calcula la distancia a la que se encuentra el objeto con respecto al sistema. Esta

medición se realiza mediante el uso de dos pares de transductores ultrasónicos (transmisor

y receptor) que “son dispositivos que transforman la energía eléctrica en acústica y

viceversa”. Operan debido al efecto piezoeléctrico, el cual consiste en que ciertos

materiales cuando se tensionan, se polarizan eléctricamente y generan un voltaje eléctrico

entre las superficies opuestas. Esto es reversible en el sentido de que al aplicar un voltaje a

través las caras del mismo material, se produce una deformación del mismo. Este efecto

microscópico se origina por las propiedades de simetría de algunos materiales, como los

cristales. [4].

Fácilmente 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 razón se hace una combinación de técnicas para corregir errores en la medición,

logrando una técnica apropiada de umbral adaptativo y de corrección de la temperatura.

Para transformar el tiempo de vuelo en distancia, se necesita conocer la velocidad de

propagación de las ondas en el medio, la cual depende de la temperatura ambiente. Por ésta

razón, se añade un sensor de temperatura en el sistema para hacer la corrección de la

Page 17: Tesis

14

velocidad del sonido. El sensor a 0°C tiene un voltaje de salida de 0V y aumenta 10mV por

cada grado centígrado.

La frecuencia de operación 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 más complejo, pero a mayores frecuencias mejoran la

calidad de la señal 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 función que cumple el sensor no era necesario tener alta calidad, sino información

confiable, por lo tanto se utilizó transductores de baja frecuencia.

En aplicaciones como el reconocimiento de objetos donde se requiere mayor descripción se

trabaja con frecuencias más altas [3].

El rango de medición 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 León Albornoz [1].

En este proyecto se desarrolló un sensor de ultrasonido que proporciona la posición 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 efectúa la

rotación de los transductores y un procesador Rabbit 2000 con los cuales se realiza un

barrido del área a estudiar. Además de medir la distancia a la cual se encuentra el objeto,

este sistema también calcula el ángulo de objetos con respecto a la normal (en un barrido

de 180 grados) de la plataforma robótica 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 ultrasónicas, calcular la

distancia y el ángulo en el que se encuentra un objeto y establecer la comunicación con la

computadora a través del puerto serie.

También 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 fusión sensorial con

un sistema de visión artificial y ultrasonido. Dado que ultrasonido es más rápido, en realizar

un barrido de ciento ochenta grados en el área estudiada, podría luego utilizarse el sistema

Page 18: Tesis

15

de visión 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 Velásquez Moreno y Jaime Andrés y el

Diseño e implementación de un sistema para la reconstrucción tridimensional de imágenes

de ultrasonido en la Universidad Nacional de Manizales, a cargo de los ingenieros Forero

Martínez 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 Japón, en el

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

El reconocimiento y localización de objetos con escaneo ultrasónico para ambientes

óptimamente opacos, realizado en Turquía.

La imagen es adquirida a través de un escaneo ultrasónico en dos dimensiones sobre el área

donde se encuentran localizados los objetos. Las características son extraídas de los límites

más externos del objeto [8].

El reconocimiento de objetos con sensores ultrasónicos a distancias variables,

realizado en los Estados Unidos.

Los datos se reciben en un computador con sistema operativo Linux a través de una tarjeta

de adquicisión de datos, y se implementa un sistema de clasificación de redes neuronales

[6].

La arquitectura de un sistema sensorial para la identificación de partes y ensamblaje

robotizado, realizado en España.

Este sistema implementa una infraestructura física (Hardware) y lógica (Software) para

desarrollar tareas de ensamblaje de partes. Se tomó como elemento manipulador una pinza,

dotada con cuatro transductores ultrasónicos, dos de frecuencia de 220 Khz. y dos con

frecuencia de operación 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 señales de

ultrasonido. Finalmente, se entrega una base de conocimiento de diferentes señales de eco

parametrizadas para la identificación de partes y posicionamiento del robot.

Page 19: Tesis

16

Según 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, presión y el ruido, aunque no son controladas sus

efectos si se pueden reducir tomando las medidas de las señales en condiciones similares.

El método de reconocimiento utilizado presentó un excelente comportamiento llegando a

discriminar características físicas del orden de décimas de milímetros 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 discriminación de características físicas del orden de décimas de centímetros

[3].

Otro sistema de reconocimiento es el basado en la visión artificial.

El propósito de un sistema de visión artificial, es formar una imagen de un objeto o

conjunto de objetos tridimensionales y obtener de esta imagen la información necesaria y

útil para la ejecución de una tarea, sin embargo en el caso más simple, la información se

refiere solamente a la posición y orientación 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 visión se trata, se trabaja con un tasa promedio de 73,728

Mbps, para una resolución de 640 x 480 píxeles, 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 resolución de 12 bits [3].

Posterior a esto se tiene el problema de la complejidad computacional, que se refiere a la

implementación de algoritmos de reconocimiento eficientes, lo cual es de vital importancia

debido al tiempo de procesamiento, especialmente para aplicaciones prácticas [5].

Dentro de las alternativas de implementación de un sistema para el reconocimiento de

objetos con ultrasonido, se encuentran, FPGA, Microprocesadores, DSPS. Estas son las

opciones donde se hallaría el núcleo del sistema. Asimismo se necesitan dispositivos como

DsPIC, ADC, Transductores ultrasónicos, entre otros, para las demás etapas del sistema [1,

2, 6, 8,10].

Todos los elementos antes mencionados, hacen parte de los recursos de hardware. El

término recursos de hardware hace referencia a los componentes que hacen parte de un

circuito electrónico, junto con el montaje y conexiones asociadas a éstos [7].

Page 20: Tesis

17

Los resultados del sistema, pueden ser presentados al usuario a través de un LCD, o del

monitor de un computador, dependiendo de que tan detallada sea la información que se

quiere mostrar [1,2].

Page 21: Tesis

18

1 FORMULACIÓN DEL PROBLEMA

1.1 PLANTEAMIENTO DEL PROBLEMA

En la actualidad existen sistemas con diferentes instrumentos para adquirir la información

del medio, entre ellos se tienen Sensores Térmicos, Rayos-X, Magnéticos, Visión artificial,

Ultrasonido, etc [13]. Los sistemas más utilizados para el reconocimiento de objetos están

basados en visión artificial y/o el ultrasonido, siendo el primero, el de uso más frecuente.

Los sistemas basados en visión artificial son afectados por factores como la iluminación,

perspectiva y fondo, cuando éstos no son controlables; originando así interpretaciones

erradas por parte del sistema de reconocimiento.

Además, 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

característica de un objeto, a través del ultrasonido como de la visión 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 caracterización de objetos es la integración o

la fusión sensorial; propuestas en las cuales se recurre a sensores diversos como visión y

ultrasonido para determinar diferentes características 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, sólo con sistemas basados en visión

artificial. Igual ocurre en Colombia, en donde los proyectos e investigaciones que se han

desarrollado en esta área son muy escasos.

1.2 JUSTIFICACIÓN

Dadas las limitaciones que presentan las plataformas de visión artificial para el

reconocimiento de objetos, es necesario explorar nuevas alternativas que permitan darle

alguna solución a las falencias de estos sistemas. Una de las ventajas que presenta el

ultrasonido frente a la visión, es el menor requerimiento de recursos de hardware. Otra

ventaja de los transductores ultrasónicos es que tienen un costo menor que los transductores

de visión, estos se encuentran alrededor de los U$ 7 y los de visión artificial U$ 80 [11].

Si bien el ultrasonido presenta las ventajas ya mencionadas, no pasa lo mismo con el

manejo de la información proveniente de los transductores, ya que la interpretación de esa

información y la extracción de aspectos relevantes son más complejas.

Page 22: Tesis

19

La baja carga computacional que manejan los sistemas ultrasónicos con respecto a los de

visión, les permite procesar la información en un menor tiempo, con excepción de los

visores de línea, los cuales a diferencia de las cámaras sólo procesan la imagen por línea a

medida que el objeto se mueve, es decir sólo 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 cámaras [12]. Sin embargo los visores de línea tienen las mismas

limitaciones de la visión artificial.

Esto hace que los sistemas ultrasónicos sean más aptos en aplicaciones de inspección,

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 robótica 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 robótica y otras aplicaciones.

1.3 IMPACTO ESPERADO

Con este proyecto, se espera trabajar en una aplicación de las señales ultrasónicas, que no

había sido utilizada anteriormente en el grupo de robótica, y así avanzar en esta línea de

investigación. Se espera que este trabajo sirva de base para el desarrollo de un sistema

capaz de realizar tareas de inspección, en procesos de producción en serie y que, a su vez,

represente una mejor opción que los sistemas utilizados en la región actualmente.

También se espera que las empresas con sistemas de control más eficientes (relación costo-

beneficio), al tener menos costos puedan ofrecer sus productos a un menor precio.

Page 23: Tesis

20

2 OBJETIVOS

2.1 OBJETIVO GENERAL

Diseñar un prototipo para el reconocimiento de patrones utilizando ultrasonido, para

detectar componentes de algunos objetos, extrayendo características que le sean propias.

2.2 OBJETIVOS ESPECÍFICOS

Desarrollar una plataforma de reconocimiento.

Presentar una alternativa a los sistemas de reconocimiento basados en visión artificial.

Implementar un algoritmo de reconocimiento.

Implantar transductores con una frecuencia de operación, que permita obtener la

información necesaria del objeto a reconocer.

Page 24: Tesis

21

3 ALCANCES Y LIMITACIONES

ALCANCES

El sistema tendrá un porcentaje de reconocimiento mínimo del 80%.

El sistema de reconocimiento determinará si el patrón sensado es el patrón de

referencia.

Las características físicas de los objetos serán del orden de las décimas de centímetros.

LIMITACIONES

El sistema reconocerá los siguientes objetos: cubo, cono, esfera, cilindro.

El prototipo no considerará las variaciones ambientales y sus efectos sobre los

parámetros utilizados en el reconocimiento.

La distancia a la cual se realizará la medición ultrasónica será fija.

Si el patrón sensado por la señal ultrasónica no se encuentra en la base de datos, el

sistema no dará una descripción del objeto detectado.

Los objetos estarán en reposo y su orientación, con respecto al sistema de medición,

será conocida.

Page 25: Tesis

22

4 MARCO TEÓRICO

4.1 FUNDAMENTOS DEL ULTRASONIDO

El ultrasonido, perteneciente a la rama de la física Ultrasónica, que se ocupa de las ondas de

sonido de alta frecuencia, generalmente por encima de 20.000 hercios (Hz), es decir, más

allá de las frecuencias audibles, las cuales se encuentran entre los 20 Hz y 20 KHz, no hay

que confundirla con la supersónica, que trata de los fenómenos asociados al movimiento de

un objeto sólido a velocidades superiores a la del sonido. Los generadores ultrasónicos

modernos pueden producir frecuencias de varios giga hercios (1 giga hercio, abreviado

GHz, equivale a 1.000 millones de hercios) convirtiendo corrientes eléctricas alternas en

oscilaciones mecánicas. La detección y medida de ondas ultrasónicas se lleva a cabo

fundamentalmente mediante receptores piezoeléctricos o por medios ópticos, ya que estas

ondas pueden hacerse visibles a través de la difracción de la luz. [4]

Figura 1 Espectro de las señales acústicas

Tomado de [4]

4.1.1 Propiedades Generales

El Ultrasonido al igual que el sonido es una onda mecánica que se desplaza a través de

cualquier medio con ciertas características, entre las cuales se encuentran:

Amplitud: La amplitud de una onda de sonido es el grado de movimiento de las moléculas

de aire en la onda, que corresponde a la intensidad del enrarecimiento y compresión que la

acompañan.

Infra-Sonido Sonido Ultra-Sonido

20 Hz 20 KHz

f (Hz)

Page 26: Tesis

23

Frecuencia: Se define como el número 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 través de la cual se mueve la onda por periodo de ciclo. La longitud de onda cambia en

función de la velocidad del sonido y la frecuencia. Se calcula a través de la siguiente

ecuación, donde c es la velocidad del sonido y f es la frecuencia de la señal.

f

c (1)

En la siguiente gráfica se muestra la longitud de onda del sonido en función de la

frecuencia, para una temperatura ambiente.

Figura 2 Longitud de Onda en función de la frecuencia

Tomado de [16]

Velocidad acústica: Es la velocidad de transmisión de la energía sonora a través de un

medio. En el aire el sonido viaja por comprensión y expansión de las moléculas en la

dirección de viaje. La velocidad del sonido en el aire es 332 m/s a 0°C y es directamente

proporcional a la temperatura del aire. Cuando la temperatura del aire se incrementa, la

velocidad del sonido también se incrementa. Donde c (t)= velocidad del sonido en el aire en

función de la temperatura, y T es la temperatura del aire. [4]

Longitud de onda

del sonido en el

agua

Longitud de onda

del sonido en el

aire

Page 27: Tesis

24

smTTc /6,0332)( (2)

4.1.2 Propagación de las ondas ultrasónicas

Las ecuaciones fundamentales que definen la transmisión de las ondas acústicas son las

mismas para todos los medios de transmisión. Sin embargo, debido a que muchas de las

propiedades acústicas son ampliamente distintas entre medios como el agua y el aire,

existen muchas diferencias fundamentales entre los transductores y sistemas que son

diseñados para operar en ellos. Para esto se tienen en cuenta las propiedades del medio de

transmisión de la onda.

Impedancia acústica

Es la resistencia de un material a las vibraciones de las ondas ultrasónicas. Es el producto

de la velocidad máxima de vibración por la densidad del material. [fuente-fundamental of

utrasonics]

V

PZ (3)

Z Impedancia acústica

P Presión de las partículas en un punto determinado

V Velocidad de propagación de las ondas

El verdadero valor de la impedancia acústica está definido por la siguiente ecuación:

sVZ 0 (4)

0 Densidad del medio en reposo.

Vs Velocidad del sonido

Algunas propiedades acústicas comparativas del aire y el agua se ilustran en la siguiente

tabla.

Page 28: Tesis

25

Tabla 1 Propiedades acústicas del aire y el agua

Temperatura (ºC)

Densidad

(Kg/m3)

Velocidad

(m/sg)

Impedancia acústica MKS

Rayls

Agua 20 1000 1480 1.48 x 106

Agua de Mar 13 1026 1500 1.54 x 106

Aire 0 1,29 332 428

Aire 20 1,21 343 415 Tomado de [16]

Modos de propagación en sólidos

En los sólidos las ondas acústicas se pueden propaga en varios modos, los principales son,

modo longitudinal, transversal y superficial. Estos modos están basados en el camino en

que se propaga la onda.

4.1.2.1.1 Ondas Longitudinales

Las oscilaciones ocurren en la dirección longitudinal o en la dirección de propagación de la

onda. Este tipo de ondas se propaga tanto en líquido como en sólido, debido a que la

energía viaja a través de la estructura atómica por una serie de movimientos de compresión

y expansión.

Figura 3 Onda Longitudinal

Tomado de [15]

Ondas Transversales

La oscilación de las partículas ocurre en ángulo recto o de manera transversal a la dirección

de propagación. Estas ondas requieren materiales sólidos para una propagación eficiente,

por consiguiente, no se propaga eficazmente en los materiales como líquidos o gases.

Dirección de propagación

de la onda

Dirección de movimiento

de las partículas

Onda longitudinal

Partículas en una

posición de reposo

Page 29: Tesis

26

Figura 4 Onda transversal

Tomado de [15]

Ondas Superficiales

Las ondas viajan a través de la superficie del sólido, a una profundidad de una longitud de

onda. El movimiento de las partículas tiene forma de una orbita elíptica. 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 tendrían dificultad de alcanzar.

Figura 5 Onda superficial

Tomado de [15]

4.1.3 Coeficientes de Reflexión y Transmisión

Las ondas ultrasónicas se reflejan en las fronteras donde existen discontinuidades en la

impedancia acústica. Esto comúnmente se refiere al desacople de impedancia. La fracción

de la intensidad de la onda incidente en las ondas reflejadas se puede obtener debido a la

velocidad de la partícula y la presión local de la partícula que es requerida para que la

frontera de dos materiales sea continua.

Los coeficientes de reflexión y transmisión se expresan en decibeles.

21

12

ZZ

ZZ

(5)

Partículas en una

posición de reposo

Onda transversal Dirección de movimiento

de las partículas

Dirección de propagación

de la onda

Dirección de

propagación de la onda

La vibración de la

partícula mantiene

una orbita elíptica

Page 30: Tesis

27

Coeficiente de reflexión

Z1 y Z2 Impedancias acústicas de los medios 1 y 2 respectivamente

Tomado de [1]

Este coeficiente es un número complejo por la naturaleza de las impedancias acústicas. Por

lo tanto se puede dividir en módulo y fase. El módulo indica la relación de la onda

incidente y reflejada, y la fase, que indica el desfase entre la onda incidente y reflejada. [1]

4.1.4 La señal de eco

Un eco típico reflejado por una superficie plana, fundamentalmente posee dos

componentes:

p (t)= señal portadora de alta frecuencia

e (t)= señal envolvente de menor frecuencia que modula la señal

La señal medida es el producto de estas dos señales definido por la ecuación

m (t)=e (t).p (t) (6)

En donde la forma de eco, que a su vez esta definida fundamentalmente por las

características geométricas de la superficie de reflexión, está dada por la señal de

envolvente e (t). [4]

4.2 SENSORES

Se define como sensor a cualquier sistema capaz de proporcionar información sobre una o

más propiedades físicas de un sistema natural o elaborado. Acorde con esta definición se

pueden clasificar los sensores de acuerdo a la variable medida, por ejemplo sensores de

temperatura, acústicos, de esfuerzos, ópticos, etc.

Page 31: Tesis

28

4.2.1 Características de los sensores

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

entorno, es preciso considerar fundamentalmente las siguientes características del sensado:

Complejidad del dispositivo: es muy difícil describir con un modelo exacto a un sensor

cuando este esta conformado de elementos físicos, puesto que cada uno de ellos contribuye

en la extracción de las observaciones.

Errores de observaciones: Las características 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 colocación de los

dispositivos, interpretaciones incorrectas de las medidas, o a fallos en los dispositivos.

Disparidad en la observación: Los robots dotados con sensores se caracterizan por que

pueden obtener de ellos una gran diversidad de parámetros que describan el entorno:

bordes, inclinación, posiciones, peso, textura, etc. Si se puede combinar la información de

diferentes sensores, es posible transformar algún tipo de característica geométrica con

incertidumbre a otra con mayor grado de confiabilidad.

Sensado Multi-punto: Cuando se tiene dos o más sensores separados geométricamente, se

debe estar en capacidad de transformar su información en un sistema coordinado común, 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 información entre los diferentes sensores. [4]

4.2.2 Transductores Ultrasónicos

Los sensores de ultrasonido están marcados dentro de los sensores acústicos, ya que

detectan una onda sonora, auque luego utilicen esta onda para medir otras propiedades del

entorno. Históricamente este tipo de sensores ha encontrado una aplicación muy importante

como detectores de obstáculos y objetos en general (por ejemplo, el sonar en la exploración

del fondo marino en la detección de peces bajo el agua).

En robótica este tipo de sensores ha encontrado aplicación fundamentalmente como

medidor de distancia y velocidad, detectores de obstáculos o reconocedores de defectos en

procesos de fabricación. Sin embargo, como se puede observar en la naturaleza viviente y

por los desarrollos en la física de las ondas acústicas, que aún es posible mejorar y ampliar

la información que se obtiene actualmente de este tipo de sensores.

Page 32: Tesis

29

Existen muchos métodos para producir y detectar las señales ultrasónicas, Métodos

mecánicos, Térmicos, Magnéticos, entre otros.

Transductores Piezoeléctricos

Es el medio por el cual la energía eléctrica se convierte en energía mecánica (ondas

sonoras) o viceversa. Opera debido al efecto piezoeléctrico, el cual consiste en que ciertos

cristales cuando se tensionan, se polarizan eléctricamente y generan voltaje eléctrico entre

las superficies opuestas. Esto es reversible en el sentido de que al aplicar un voltaje a través

las caras de un cristal, se produce una deformación del mismo. Este efecto microscópico se

origina por las propiedades de simetría de algunos cristales. [4]

Patrón de radiación acústica

El patrón de radiación acústica, o patrón del haz, es la sensibilidad relativa de un

transductor como una función del ángulo espacial. Este patrón esta determinado por

factores como la frecuencia de operación y el tamaño, forma y características de la fase

acústica de la superficie vibratoria. Los patrones del haz de los transductores son

recíprocos, lo que significa que el patrón será el mismo si está siendo usado como

transmisor o como receptor.

Los transductores pueden ser diseñados para irradiar el sonido en varios tipos diferentes de

patrones, desde omnidireccionales hasta patrones muy directivos.

Figura 6 Representación tridimensional del patrón de radiación acústica producido

por un transductor

Page 33: Tesis

30

Tomado de [16]

El ángulo del haz es usualmente definido como la medida del ángulo total del lóbulo

principal, donde el nivel de presión del sonido ha sido reducido 3 dB en ambos lados sobre

el eje perpendicular a la superficie de radiación. También se puede utilizar una

representación 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 más utilizadas. [16]

Figura 7 Patrón de radiación acústica

Tomado de [16]

4.3 RECEPCIÓN Y ACONDICIONAMIENTO DE LA SEÑAL

Las señales que se reciben son del orden de los milivoltios o inferiores, por lo tanto se

requieren etapas de amplificación para convertirlas en niveles utilizables, por lo que

requieren unas características específicas:

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 distorsión de la señal y reducción de la resolución axial.

Page 34: Tesis

31

4.3.2 Nivel de ruido

Es necesario que los niveles de ruido ya sean de origen térmico o generado por el

amplificador sean muy bajos.

El ruido térmico sobre una resistencia está dado por:

kTBRer 4 (7)

k = constante de Boltzman

T= temperatura absoluta

B= ancho de banda

R= resistencia sobre la que se está generando el ruido térmico.

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 sólo la frecuencia para la que están

diseñados, una forma de evitar éstos inconvenientes es reducir el ancho de banda al mínimo

necesario con filtros paso banda.

4.3.4 Detección de Envolvente

Las señales entregadas por el transductor en recepción son pulsos de radiofrecuencia cuya

envolvente es del máximo interés, ya que contiene información sobre las características de

los reflectores. Anteriormente se utilizaban métodos analógicos para la detección de

envolventes, pero éstos han sido superados por las técnicas digitales.

4.3.5 Compensación atenuación-distancia (CAD)

Debido a la propagación en el medio, las señales ultrasónicas sufren una atenuación.

Debido a esto, se producirán ecos diferentes dependiendo de la profundidad en la que se

Page 35: Tesis

32

encuentren dos reflectores idénticos. Este efecto es más notorio dependiendo del coeficiente

de atenuación del material o entorno.

CAD se encarga de compensar este efecto, aumentando en factor de amplificación con el

tiempo, de esta forma se logran igualar los ecos de elementos reflectores a distintas

distancias.

4.3.6 Imprecisión de amplitud

La frecuencia de muestreo ha de ser mayor que el doble de la máxima frecuencia presente

en la señal de entrada para evitar la aparición de subarmónicos o aliasing”4 (criterio de

Nyquist). Aún verificándose este criterio, el máximo de la amplitud registrada diferirá de la

real en una cantidad que depende de la relación entre la frecuencia de muestreo y la de la

señal. Para señales sinusoidales, el error puede alcanzar un 30% si la relación fm/fs (donde

fm es la frecuencia de la señal y fs es la de muestreo) es de 4:1, reduciéndose 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 más memoria, ya que se requiere

almacenar mayor cantidad de datos).

Otra alternativa es trabajar con la envolvente de la señal, cuyas componentes de frecuencia

están por debajo de la señal de radiofrecuencia. Finalmente, diversas técnicas de

procesamiento digital de señal permitirán operar con frecuencias de muestreo más bajas sin

pérdida de precisión siempre que se verifique el criterio de Nyquist. [1]

4.4 PROCESAMIENTO DIGITAL DE LA SEÑAL

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

Con la aparición de los dispositivos de lógica programable como las FPGA’s, DSP, CPLD,

etc., se hizo mas fácil el tratamiento digital de las señales. Además estos dispositivos

permiten implementar sistemas altamente complejos, como sistemas para la clasificación e

identificación de señales.

Para realizar un procesamiento digital de la señal, se necesita que ésta se encuentre en dicho

formato inicialmente. Para esto existen los convertidores análogos digitales.

Page 36: Tesis

33

4.4.1 Convertidor Análogo – Digital

Este dispositivo tiene a su cargo realizar el muestreo y cuantización de las señales análogas.

La resolución de un convertidor análogo digital es usualmente expresada en el número de

bits en su salida digital. Por poseer salida binaria un convertidor con n bits de salida puede

representar 2n códigos diferentes y siendo el menor código asociado al nivel de referencia

bajo y el mayor código asociado al nivel de referencia alto VREFT.

En un CAD además del error de cuantización se encuentran diversos tipos de errores como

se enunciará a continuación:

Error de Offset: es la diferencia entre los puntos de offset o tensión común nominal y real.

Error no–lineal: diferencia entre el ancho real de un paso de un código a otro y el ancho

nominal de 1 LSB.

Error lineal: es la desviación de los valores en la función de transferencia actual de una

línea recta. [1]

4.4.2 Filtros Digitales

El filtrado digital es una parte muy importante en el procesamiento digital de señales

debido a las númerosas aplicaciones en las que los filtros digitales son empleados. Estas

aplicaciones que pueden ser biomédicas, acústicas, sísmicas, de instrumentación y

comunicaciones de audio y datos, se resumen en dos usos generales: la separación de

señales que han sido mezcladas y la restauración de señales que han sido distorsionadas.

El término filtro digital se entiende como cualquier procesamiento realizado en una señal

de entrada digital. Un filtro digital es la implementación en hardware o software de una

ecuación diferencial.

Estos presentan algunas ventajas como son:

Alta inmunidad al ruido

Alta precisión (limitada por los errores de redondeo en la aritmética empleada).

Fácil modificación de las características del filtro.

Bajo costo.

Page 37: Tesis

34

Diseño de filtros

Los tres pasos básicos que requiere el diseño 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 analógico: frecuencias

de rechazabanda y pasabanda, atenuaciones, ganancia dc, etc.

Determinar la función de transferencia que cumpla las especificaciones.

Realizar la función de transferencia en hardware o software. [1]

4.4.3 Dispositivos Lógicos 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

integración compuesto de muchos circuitos más 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 lógico de

propósito general o universal. Cuando se habla de programabilidad se refiere a la capacidad

que tiene el microprocesador para que su función sea definida a través de un programa. El

programa está formado por una serie de instrucciones relacionadas, ejecutadas

secuencialmente y que pueden implicar operaciones lógicas o aritméticas. Las instrucciones

se especifican por medio de un código especial que constituye el lenguaje del

microprocesador. [1]

FPGA: Una FPGA es un circuito integrado cuya tecnología se encuentra entre las Pals las

matrices de puertas a medida. Las Pals se desarrollaron en la década de los años 70 y

tuvieron muchas aplicaciones reemplazando entre 1 y 10 circuitos integrados discretos tipo

TTL en el diseño de sistemas físicos. Este tipo de dispositivos utilizaba la tecnología 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 fabricación (el punto óptimo se

encontraba en 10.000 unidades). Las FPGAs se basan en estas tecnologías pero las

interconexiones pueden ser definidas por el usuario mediante tecnología fusible (como las

Pals) y ser del tipo OTP, mediante antifusibles o mediante células tipo SRAM. El diseño de

una FPGA se lleva a cabo especificando la función lógica a desarrollar, bien mediante un

sistema CAD de dibujo de esquemas, bien mediante un lenguaje de programación de alto

nivel. Una vez definida la función a realizar, el diseño se traslada a la FPGA. Este proceso

programa los bloques lógicos configurables (CLBs) para realizar una función específica

Page 38: Tesis

35

(existen miles de bloques lógicos configurables en la FPGA). La configuración de estos

bloques y la flexibilidad de sus interconexiones son las razones por las que se pueden

conseguir diseños de gran complejidad. Las interconexiones permiten conectar los bloques

lógicos (CLBs) entre sí. [3]

4.5 PERCEPCIÓN ARTIFICIAL

Es natural que el hombre busque diseñar y construir máquinas que puedan reconocer

patrones. Desde reconocimiento de voz, Identificación de huellas dactilares,

reconocimiento de texto, identificación de la secuencia del DNA y muchas mas, es claro

que el diseño de sistemas confiables y precisos para el reconocimiento de patrones seria

muy útil.

Existen dos tipos de percepción, de Bajo y Alto Nivel. La percepción de bajo nivel detecta

propiedades sencillas de los estímulos. La percepción de alto nivel construye

representaciones estructuradas del entorno cuya complejidad no está predeterminada

rígidamente por el programador.

4.5.1 Patrones y Reconocimiento de Patrones

Mucha de la información que se maneja en la vida real se presenta en la forma de patrones

complejos: caras, textos escritos, enfermedades, música, flores, piezas industriales, etc.

Ciertas aplicaciones requieren sistemas capaces de reconocer dichos patrones con el fin de

automatizar procesos de clasificación o inspección. Esto se logra a través de las técnicas de

reconocimiento cuyas fuentes son las matemáticas, la estadística y la inteligencia artificial.

Aunque la aplicabilidad de las técnicas resulta, a priori, muy amplia, no existe un método

que sea la solución para todas las situaciones. Diversas razones hacen que los sistemas de

reconocimiento de formas operativos sean muy específicos del problema a resolver:

1. La naturaleza de los patrones: caracteres escritos, símbolos, dibujos, imágenes

biomédicas, objetos tridimensionales, firmas, huellas dactilares, espectrogramas, imágenes

de Teledetección, cromosomas.

2. Los requerimientos del sistema, especialmente en tiempo de respuesta hace que algunos

métodos de reconocimiento, aún siendo superiores en éxito no sean aplicables en la

práctica.

Page 39: Tesis

36

3. Factores económicos: 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 técnicas.

Debe considerarse, además, que el reconocimiento de patrones no constituye un campo de

estudio cerrado sino que las técnicas relacionadas con este campo pueden encontrase en

otras ramas de la Ciencia y de la Tecnología. De ahí que encontrar una definición 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. Aproximación

estadística. La aproximación más simple (y no por ello la menos eficiente) consiste en

representar cada patrón mediante un vector de números, resultantes del muestreo y

cuantificación (o binarización) de las señales 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

realización de esa variable aleatoria.

Figura 8 Patrones de naturaleza temporal y espacial

Tomado de [18]

Page 40: Tesis

37

Con esta aproximación un patrón no es más que un punto en el espacio de representación

de los patrones, que es un espacio de dimensionalidad determinada por el número de

variables consideradas. Esta aproximación concluye que es razonable que los patrones

pertenecientes a una misma clase estén cercanos en el espacio de representación mientras

que aquellos que pertenezcan a clases diferentes deberían estar en diferentes regiones del

espacio de representación.

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 estadístico de patrones.

Configuración de un Sistema de Reconocimiento de Patrones

Figura 9 Etapas de un sistema de reconocimiento de patrones

Tomado de [18]

Page 41: Tesis

38

Adquisición de datos. Representación de los patrones

La entrada a un sistema de reconocimiento estadístico de patrones es un vector numérico

que contiene los valores muestreados y cuantificados (o binarizados) de una serie de

señales naturales.

De una manera más formal, suponiendo patrones n-dimensionales, un patrón X es una

variable aleatoria n-dimensional compuesta por n componentes, x1, x2,..., xn, tales que xi Gi para i = 1, 2,..., n.

nX

X

X

X:

2

1

Espacio de representación

Con esta aproximación un patrón no es más que un punto en el espacio de representación

de los patrones que es un espacio de dimensionalidad determinada por el número de

variables consideradas. Esta aproximación concluye que es razonable que los patrones

pertenecientes a una misma clase estén cercanos en el espacio de representación mientras

que aquellos que pertenezcan a clases diferentes deberían estar en diferentes regiones del

espacio de representación.

Un patrón se representa como un punto en el espacio de patrones P. El espacio de patrones

P es un espacio de dimensionalidad determinada por el número de variables consideradas y

se define como el conjunto de todos los valores posibles que puede tomar patrón X, esto es,

i

i

n GXP 1

(8)

donde x denota el producto cartesiano.

Page 42: Tesis

39

Similaridad entre patrones

La tarea fundamental de un sistema de reconocimiento de patrones (clasificador) es la de

asignar a cada patrón de entrada una etiqueta. Dos patrones diferentes deberían asignarse a

una misma clase si son similares y a clases diferentes si no lo son.

Por ejemplo en un sistema de adquisición perfecto (sin ruido). Se puede asegurar que:

1. La adquisición repetida del mismo patrón debería proporcionar la misma representación

en el espacio de patrones.

2. Dos patrones diferentes deberían proporcionar dos representaciones diferentes.

3. Una ligera distorsión aplicada sobre un patrón debería proporcionar una pequeña

distorsión de su representación.

En definitiva, se supone que el proceso de adquisición es biunívoco y continuo. Estas

consideraciones sugieren que si las representaciones de dos patrones están muy cercanas en

el espacio de representación, 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 patrón.

Variabilidad entre patrones

La suposición de un sistema de adquisición perfecto no deja de ser eso, una suposición. Los

sistemas de adquisición introducen, indefectiblemente, cierta distorsión o ruido, lo que

produce una variabilidad en la representación de los patrones. Aunque es posible controlar

eficientemente en muchos casos esta distorsión mediante el calibrado de los sistemas de

adquisición aparece otra fuente de variabilidad por la propia naturaleza de los patrones.

Selección y extracción de características

El problema que se trata de resolver es el de extraer la información relevante para la

clasificación 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 (características) d-dimensionales

Y = [y1, y2,..., yd]T

Page 43: Tesis

40

donde nd .

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

clasificación puede ser muy alto. Muchos clasificadores están basados en cálculos de

distancias y estos cálculos pueden depender de forma cuadrática respecto a la

dimensionalidad de los patrones. Como otra consideración computacional hay que

considerar el espacio de almacenamiento adicional que supone guardar los valores de

nuevas variables. Además, algunas de las variables pueden ser redundantes con otras y no

aportar información adicional.

Las técnicas dedicadas a seleccionar las variables más relevantes se dicen de selección de

características y reducen la dimensionalidad de los patrones, es decir reducen el número de

variables a tener en cuenta.

Cambiando el espacio de representación

El objetivo es obtener una nueva representación 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 transformación sobre los datos originales. Estas

transformaciones suelen ser transformaciones lineales y el objetivo suele ser maximizar la

varianza.

Estas técnicas reciben el nombre de extracción de características y producen un nuevo

conjunto de variables. Estos procesos se ilustran en la figura 10.

Figura 10 A) Selección de las variables más significativas B) Transformación de las

variables originales

Extractor

de

características

X1

X2

X3

Xn

Y1

Y3

Y2

Yn

Selector

de

características

X1

X2

X3

Xn

Y1

d < n

Yd

A) B)

Page 44: Tesis

41

Tomado de [18]

Módulo de clasificación

El objetivo final de un sistema de Reconocimiento de Patrones es el etiquetar de forma

automática patrones de los cuales se desconoce su clase. Se supone un sistema que dispone

de un módulo de adquisición de datos, el cual ha seleccionado previamente las variables

más significativas.

El conjunto de clases

Inicialmente se supone que todos los patrones a reconocer son elementos potenciales de J

clases distintas denotadas Jjw j ,.....,2,1,

, estas recibirán el nombre de conjunto de las

clases informacionales, ,....,, 21 Jwww . Conviene tener en cuenta que una clase

informacional es la denominación que se da a una clase conocida y con significado.

Además conveniente ampliar el conjunto , incorporando una nueva clase, llamada la

clase de rechazo. Así, se define la clase de rechazo ( 0w ) 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 ,,....,, 021

* wwww J es el

conjunto extendido de clases informacionales.

El clasificador

Una vez establecido el conjunto de clases se procede a la construcción del clasificador. Este

involucra la siguiente serie de etapas:

1. La elección del modelo.

2. Aprendizaje (entrenamiento del clasificador).

3. Verificación de los resultados.

Es muy importante señalar que estas etapas no deben verse de forma secuencial. Puede

ocurrir que en un momento dado hay que volver atrás para replantearse alguno de los pasos

dados, incluso el conjunto de clases informacionales.

Un clasificador o regla de clasificación es una función d: P * definida sobre los

patrones X tal que para todo patrón X, d (X) * .

Page 45: Tesis

42

Aprendizaje

Se acostumbra a utilizar indistintamente los términos aprendizaje y entrenamiento para

referirse al proceso de construcción 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 número de clases.

Básicamente, se traduce en encontrar agrupamientos. El objetivo suele ser el de verificar la

validez del conjunto de clases informacionales para una clasificación supervisada. Las

técnicas utilizadas suelen denominarse métodos de agrupamiento o clustering.

Aprendizaje supervisado paramétrico y no paramétrico

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 demás, un problema de

clasificación supervisada puede plantearse como la búsqueda de las superficies que separan

los diferentes agrupamientos. Estas superficies se denominan superficies de decisión.

Las superficies de decisión determinan regiones de decisión de forma que cada clase tiene

asociada una región en P y la decisión sobre la clase a asignar a un nuevo patrón se hará en

base a la región en la que éste se encuentra en P.

La búsqueda de estas superficies (análogamente, regiones) de decisión se puede abordar de

dos maneras, dependiendo de si se conoce o supone un determinado modelo estadístico

para las clases.

1. Si se supone un completo conocimiento a priori de la estructura estadística de las clases,

el aprendizaje se reduce a la estimación de los parámetros que determinan las funciones de

Page 46: Tesis

43

densidad de probabilidad de las clases. Las fronteras de decisión están definidas por las

distribuciones de probabilidad de las clases. Los clasificadores construidos bajo esta

suposición se conocen como clasificadores paramétricos.

2. Si no se supone un determinado modelo estadístico, bien por desconocimiento o por la

imposibilidad de asumir un modelo paramétrico adecuado, el problema resulta más

complejo y se puede abordar desde diferentes perspectivas. Las fronteras de decisión están

definidas por los prototipos. Los clasificadores construidos sin esta suposición se conocen

como clasificadores no paramétricos.

4.5.2 Estimación del error de clasificación y verificación de resultados

La forma general de calcular el error de clasificación exacto para un problema de decisión

multiclase con patrones multidimensionales viene dado por la ecuación:

J

i Ri

ii dXwxPaciertoPerrorP1

)|(1)(1)(

(9)

Si la dimensionalidad de los datos es muy pequeña pueden utilizarse métodos numéricos

para este cálculo, pero si no es así (casi siempre) no es posible, en la práctica, hacer este

cálculo.

Afortunadamente si es posible establecer una estimación de este valor para el caso de una

clasificación supervisada.

Todos los métodos de estimación se basan en la suposición 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 proporción de prototipos incorrectamente

etiquetados por el clasificador. Para establecer una forma común entre los diferentes

estimadores que se presentan, se introduce una función indicadora, , de forma que una

vez construido el clasificador d y dado

un prototipo (Xi, ci),

)()(0

)()(1),(

aciertocXdsi

errorcXdsicX

ii

ii

ii

(10)

Page 47: Tesis

44

Estimación por resustitución

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 proporción de patrones

incorrectamente clasificados proporciona el estimador de error por resustitución.

Formalmente, el estimador por resustitución, R (d), se calcula

TcX

ii

ii

cXN

dR),(

, )(1

)(

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.

Estimación 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 estimación 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 distribución. La manera habitual de asegurar estas condiciones

es realizar una partición de T seleccionando los prototipos aleatoriamente, de forma que

TTT tl y 0 tl TT . Este conjunto se suele particionar de manera que

||3

2||||

3

1|| TTyTT lt

.

Una vez construido el clasificador d a partir de los prototipos de Tl, se clasifican todos los

patrones de Tt utilizando d y la proporción de patrones incorrectamente clasificados

proporciona el estimador de error mediante conjunto de prueba. Formalmente, el estimador

mediante conjunto de prueba, Rts(d), se calcula

Page 48: Tesis

45

t

ii TcX

iit

ts cXT

dR),(

, )(||

1)(

(11)

Estimación por validación cruzada

Este estimador es el más adecuado cuando el conjunto de prototipos es pequeño.

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.

Verificación de resultados

Una herramienta muy utilizada para la presentación y el análisis del resultado de una

clasificación es la matriz de confusión, también 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 métricas.

Figura 11 Una matriz de confusión 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 línea etiquetada con ``Total'' indica cuántos prototipos se han clasificado en la clase

referida por la columna correspondiente. La columna con la misma etiqueta indica el

número 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.

Page 49: Tesis

46

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 clasificación.

4.5.3 Estimación de la función de densidad

El objetivo final es de etiquetar un patrón X utilizando el siguiente conjunto de funciones

discriminantes:

iii wXPXg (12)

Donde no se supone nada acerca de la forma funcional de iwXP . Tan sólo se dispone de

un conjunto de prototipos, T, y a partir de él se debe estimar tanto el valor de iwXP

como el de i .

La pregunta es ¿de qué forma puede utilizarse la información proporcionada por el

conjunto de prototipos para inferir, a partir de él, el valor de la función de densidad de

probabilidad mediante una interpretación geométrica?

Si se fija un volumen v en P y se considera varias regiones en este espacio, resulta evidente

que

a) En una región en la que iwXP tiene un valor bajo, la probabilidad de encontrar un

patrón de clase iw es pequeña.

b) A la inversa, hay una alta probabilidad de encontrar un patrón de clase iw en una región

que tiene asociada un alto valor de la función de densidad.

De manera informal se podría decir que dado un conjunto de patrones, hay una alta

probabilidad de encontrar un patrón en una región densamente poblada y baja en regiones

poco pobladas en las que las observaciones están más dispersas. Con este planteamiento

simple se analizará la estimación de los k vecinos más próximos, la cual se empleará en

este sistema.

Estimación mediante los k vecinos más próximos

Page 50: Tesis

47

Si se supone un espacio de representación bidimensional y una serie de prototipos de una

misma clase representados en él. Dado un patrón cualquiera X, si se considera los k

prototipos más próximos a X, éstos estarán localizados en un círculo centrado en X.

Parece sensato pensar que el área del círculo que encierra un número fijo de puntos, k, es

menor en regiones densamente pobladas que en regiones donde los puntos están más

dispersos. Este sencillo planteamiento es la base de la estimación mediante los k vecinos

más próximos. En espacios multidimensionales, el círculo se convierte en una

hiperesfera, y el planteamiento anterior se puede extender fácilmente ya que el volumen

de la hiperesfera que encierra a k puntos está relacionado con el valor de la función de

densidad de probabilidad en el centro de la hiperesfera.

Métodos de clasificación del vecino más próximo

Un estimador de la probabilidad a posteriori es

k

XK

NXv

XK

N

N

XvN

XKwXPXwP iii

i

iii

)(

)(

)(

)(

)(ˆˆˆ (13)

A partir de este resultado se formula la siguiente regla de clasificación:

Seleccionar cw si )(....1

max)( XK

JiXK ic

(14)

Conocida como regla de clasificación por los k vecinos más cercanos o simplemente k-

NN (del inglés, k nearest neighbour). Cuando k = 1, la regla anterior se conoce como la

conocida como regla de clasificación del vecino más 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 estimación directa de la probabilidad a

posteriori de cada una de las clases y las reglas de clasificación son sencillas y fácilmente

interpretables.

Las reglas 1-NN y k-NN

Las reglas de clasificación por vecindad están basadas en la búsqueda en un conjunto de

prototipos de los k prototipos más cercanos al patrón a clasificar.

La búsqueda 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

Page 51: Tesis

48

sobre el que se buscará el(los) vecino(s) más 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 métrica

para poder medir la proximidad.

Regla 1-NN

La regla de clasificación por vecindad más simple es la regla de clasificación del vecino más cercano o simplemente 1-NN. Se basa en la suposición de que la clase del

patrón a etiquetar, X, es la del prototipo más cercano en R, al que se nota por XNN. Si | R| =

N esta regla puede expresarse como:

cwXd Si

RwX

XXXX

cNN

iNiNN

),(

),(min),( ...... 1 (15)

El efecto de esta regla es el de dividir el espacio de representación 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 clasificación por vecindad más general es la regla de clasificación de los k vecinos más cercanos o simplemente k-NN. Se basa en la suposición de que los

prototipos más cercanos tienen una probabilidad a posteriori similar.

Cotas de error de la regla 1-NN

Se parte de una suposición básica: el conjunto de aprendizaje es grande, virtualmente

infinito )( N . En la práctica 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:

##

1

#

12 E

J

JEEE (16)

Esto es, el error asociado a la regla 1-NN está acotado inferiormente por E* y superiormente

por aproximadamente dos veces E*.

Page 52: Tesis

49

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 búsqueda requiere explorar todo el conjunto de referencia. Esto significa que el coste de

la búsqueda depende linealmente de N. Ahora se debe considerar el coste del cálculo de

cada distancia ONd (coste espacial). Adicionalmente se debe considerar el espacio de

almacenamiento requerido.

Si se considera que la optimización está garantizada cuando el conjunto de referencia es lo

suficientemente grande, la aplicación de las reglas k-NN en su formulación original

(fuerza bruta) resulta, en la práctica, inaplicable si se dispone de conjuntos de referencia

númerosos 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 tamaño del conjunto de referencia, N.

Existen diferentes estrategias que permiten la aplicación de la regla del vecino más cercano

para conjuntos de referencia númerosos 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 selección 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 más

cercano en su formulación original (fuerza bruta) sobre el nuevo conjunto.

Si M es el número 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 más precisos, M < < N). No obstante, la selección de un conjunto de referencia reducido

que refleje todas las características del conjunto general no está garantizada.

Mejorar la eficiencia computacional de la búsqueda del vecino más cercano

Estos métodos trabajan con el conjunto completo de referencia y su objetivo es reducir el número de cálculos, eliminando aquellos que se consideran ``inútiles'' o ``innecesarios''.

En estos casos pueden conseguirse órdenes de complejidad del orden de O (log N) en el

mejor de los casos. La utilización de estos métodos no representa ningún peligro de

Page 53: Tesis

50

pérdidas de generalidad ya que están orientados, únicamente, a reducir el número de

cálculos.

Entre estos métodos están los basados en ordenaciones y jerárquicos.

Los métodos basados en ordenaciones organizan los patrones del conjunto de referencia de

acuerdo a alguna coordenada, y la búsqueda se realiza de acuerdo a alguna propiedad de la

métrica asociada al espacio.

Los métodos jerárquicos realizan una descomposición jerárquica del conjunto de

referencia que implica la organización de los patrones en una estructura de tipo árbol, para

después aplicar una técnica de poda y ramificación (branch and bound) para explorar el

árbol.

No obstante, hay que considerar que todos estos métodos tienen asociado un coste adicional

a la búsqueda: el coste del preprocesamiento, entendido éste como el coste asociado a la

selección del conjunto reducido o la construcción del árbol de búsqueda. En consecuencia,

para determinadas aplicaciones se ha de considerar que el coste de preprocesamiento puede

ser alto y que la elección de estos métodos como alternativa a la fuerza bruta debe

considerar, necesariamente, este coste y llegar a un compromiso entre los costes de

procesamiento y búsqueda.

4.5.5 Otras consideraciones

En primer lugar, se debe recordar que para asegurar la optimización, N debe ser muy alto

(virtualmente infinito). En la práctica, sin embargo, se encuentran conjuntos finitos de

muestras y en ocasiones muy reducidos. Otro problema que afecta seriamente a la eficacia

(en términos de tasa de acierto o bondad) de los métodos k-NN es la presencia de

prototipos erróneamente etiquetados en el conjunto de entrenamiento. Estos

prototipos suelen aparecer en zonas cercanas a las regiones de decisión y afectan

seriamente al resultado de la clasificación. Los métodos de edición eliminan esos

prototipos que inducen a una correcta clasificación. Así, además de conseguir una

reducción (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.

Edición 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

Page 54: Tesis

51

entrenamiento pueden producirse errores en el etiquetado o pueden aparecer patrones

extraños (outliers) por problemas en la captación de los datos. Estos prototipos suelen

aparecer en zonas cercanas a las regiones de decisión e influyen negativamente en el

aprendizaje ya que incrementan la tasa de error de clasificación. 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 métodos de edición es el de

seleccionar un conjunto de referencia representativo y reducido, de forma que decrezca

tanto el error de clasificación como el coste computacional de la clasificación. 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 técnicas de reconocimiento con mayor número de investigaciones se

encuentran las Redes Neuronales, Algoritmos Genéticos y la Lógica Difusa.

Estas técnicas tienen un amplio rango de aplicaciones, no sólo en el reconocimiento de

patrones, sino también en la predicción del comportamiento de modelos previamente

definidos.

4.6.1 Redes Neuronales

Las redes neuronales son sistemas formados por un conjunto de sencillos elementos de

computación llamados neuronas artificiales. Estas neuronas están interconectadas a través

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 función no lineal; el resultado sirve de entrada a las

neuronas de la capa siguiente (en redes como el perceptrón multicapa).

Uno de los algoritmos más usado para entrenar redes neuronales es el back-propagation,

que utiliza un método iterativo para propagar los términos de error (diferencia entre valores

obtenidos y valores deseados), necesarios para modificar los pesos de las conexiones

interneuronales.

Page 55: Tesis

52

Las redes neuronales han sido utilizadas con éxito en diferentes tipos de problemas:

Auto-asociación: la red genera una representación interna de los ejemplos aportados, y

responde con el más aproximado a su "memoria". Ejemplo: máquina de Boltzman.

Clasificación de patrones: la red es capaz de clasificar cada entrada en un conjunto

predefinido de clases. Ej.: back-propagation.

Detección de regularidades: la red se adapta a los ejemplos de entrada, tomando de ellos

varias características 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 Genéticos

El algoritmo genético es una técnica de búsqueda basada en la teoría de la evolución de

Darwin, que ha cobrado tremenda popularidad alrededor del mundo durante los últimos

años. Se presentarán aquí los conceptos básicos que se requieren para abordarla, así como

un sencillo ejemplo que permita a los lectores comprender cómo aplicarla al problema de su

elección. Adicionalmente, se hablará acerca de los diversos ambientes de programación

actuales basados en algoritmos genéticos y de las áreas abiertas de investigación.

Es un algoritmo matemático altamente paralelo que transforma un conjunto de objetos

matemáticos individuales con respecto al tiempo usando operaciones modeladas de acuerdo

al principio Darwiniano de reproducción y supervivencia del más apto, y tras haberse

presentado de forma natural una serie de operaciones genéticas de entre las que destaca la

recombinación sexual. Cada uno de estos objetos matemáticos suele ser una cadena de

caracteres (letras o números) de longitud fija que se ajusta al modelo de las cadenas de

cromosomas, y se les asocia con una cierta función matemática que refleja su aptitud. [5]

4.6.3 Lógica Difusa

La lógica 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 sólo conocer el grado de pertenencia a

cada uno de los conjuntos en que se ha participado el rango de variación de la variable.

El grado de pertenencia se cuantifica mediante la función de pertenencia f, que

normalmente se escoge de una forma trapezoide.

Page 56: Tesis

53

La lógica difusa es utilizada en Comúnmente se usa para toma de decisiones en presencia

de datos o conocimientos inciertos.

La lógica difusa se ha utilizado principalmente en la creación de sistemas expertos, esto es,

la elaboración de programas de cómputo con controles lineales y no lineales que permiten

el reconocimiento de patrones de conducta, evaluación de sistemas financieros, diagnóstico

médico, análisis estadístico y diseño de estrategias en juegos como el ajedrez. [5]

Page 57: Tesis

54

5 DESCRIPCION GENERAL DEL SISTEMA

5.1 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 selección 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 adquisición y preprocesamiento. b)

Procesamiento de la unidad central.

a) Etapa de adquisición y preprocesamiento.

PC

RabbitCore

3610

Amplificación

Amplificación 1

A/D

Tx1

RS232

Tx2

MUX

Rx1

Rx2

Rx4

ST SCLK

Data IN

CS: Selección del ADC

SCLK: Reloj para el

ADC

ST: Selección del

transductor

DataIN: Información de

los sensores

DataOUT: Resultado de

la conversión Rx3

CS

Data OUT

Filtrado

Paso-banda Amplificación 2

Detector de

envolvente

Page 58: Tesis

55

b) Procesamiento de la unidad central.

Los transductores receptores entregan la señal de eco recibida a la etapa de adquisición de

datos que consiste básicamente de un amplificador, filtro paso-banda, filtros pasa-bajas y

con conversor A/D, los cuales fueron previamente definidos en el marco teórico.

La función del amplificador es reducir la atenuación de la señal producida por la distancia

de vuelo del pulso sonar y por la forma de los objetos.

Luego la señal 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 comunicación con el usuario será a través 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.

Datos

UNIDAD CENTRAL

Segmentación

Clasificación

Extracción de propiedades

Interpretación

Visualización de los

resultados

Page 59: Tesis

56

Figura 13 Diagrama de flujo

El núcleo emite un tren de

pulsos y espera recibir el

eco

La señal es amplificada para

excitar a los transductores Tx

(200 ó 40KHz)

El transductor emite la

señal ultrasónica

El transductor Rx recibe

el eco

Amplificación de la señal

INICIO

1

Page 60: Tesis

57

Segmentación

Clasificación

Se realiza la conversión

A/D

Se almacenan los datos

Filtrado de los componentes de

baja frecuencia

Extracción de propiedades

1

Interpretación

Visualización de los resultados

FIN

Page 61: Tesis

58

6 CRITERIOS DE DISEÑO

6.1 REQUERIMIENTO DE DISEÑO

El objetivo del proyecto de grado fue diseñar un sistema capaz de reconocer los cuatro

objetos propuestos en el proyecto, para esto se debía hacer un estudio de los ecos reflejados

por cada uno de los objetos para identificar características que permitieran su clasificación.

Como es la primera vez que se hacía dentro del grupo de robótica este proyecto, se

establecieron algunas limitaciones como la ubicación y posición 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 tensión utilizado sólo permitía alcanzar

hasta un poco más 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 tensión mayor que los de 40 KHz, por lo

que se diseñó una fuente que suministrara las dos tensiones para ambos transductores.

La plataforma debía tener un modo de operación manual y otro controlado a través del PC,

el modo manual permite que a través de un pulsador se de la orden para reconocer y los

resultados son transmitidos a través del puerto serial al programa y visualizados. Cuando el

control es desde el PC, la tarjeta debe recibir la orden a través del puerto serial y enviar los

resultados a través del mismo y el programa se encarga de visualizarlos y le da la opción al

usuario de mostrar otras funciones como la de graficar los centroides, entrenar un objeto,

calcular la desviación estándar de las mediciones, calcular coeficientes de reflexión y

transmisión y descargar librerías con la información 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 operación del Rabbit.

Page 62: Tesis

59

6.2 JUSTIFICACION DE LOS ELEMENTOS DE DISEÑO

Los elementos de diseño 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) están 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 realización de operaciones

matemáticas, lo que facilita el algoritmo implementado. Además posee el número de

puertos suficientes para el control del conversor y de la etapa de acondicionamiento de la

señal. Su bajo costo también justifica su selección.

Figura 14 Bloques de Rabbit 3000

Page 63: Tesis

60

Convertidor Analógico - Digital AD7475

El sistema requiere que una señal analógica proveniente del detector de envolvente sea

convertida a datos digitales. Los rangos de frecuencia que maneja esta señal 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, (sólo se necesita convertir una señal),

una resolución de 12 bits y un puerto salida de datos, se escogió esta resolución debido a

que el número de bits es suficiente para obtener los datos de interés de la señal.

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 parámetros 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 análisis de otro tipo de señales, como

por ejemplo el análisis 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.

Además este conversor se alimenta con 5V al igual que la mayoría de los dispositivos

utilizados en la tarjeta.

Voltaje de Referencia AD780

El convertidor analógico – 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 sólo 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 señales que viajan a través del medio es necesaria una etapa de

amplificación que entregue niveles de voltaje suficientes para el análisis de la señal

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 configuración 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

señal y no deteriorar su forma de onda.

Page 64: Tesis

61

Otra razón que justifica la selección de estos dispositivos es que el rango de alimentación se

encuentra entre los utilizados por los demás dispositivos (+5V y -5V).

Amplificador de propósito 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 señal y produzcan

mediciones erróneas, además se requiere un filtro pasabajas que disminuya la frecuencia de

la señal del eco.

Estos filtros son construidos con amplificadores operacionales. El TL084 posee un rango de

alimentación +5V y -5V (voltaje trabajado por los demás dispositivos), reduciendo así la

necesidad de otra fuente de alimentación, por otra parte posee varios amplificadores en un

sólo 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 electrónicos Claudia Acosta Miranda y Jorge

Mario León Albornoz, se implementó el LM386 para la etapa de transmisión. Este

dispositivo es un amplificador de potencia diseñado para uso en aplicaciones de bajo

consumo, pero no posee un ancho de banda suficiente para trabajar con señales de alta

frecuencia (200KHz). Por esta razón se utilizó un comparador LM311 el cual posee una

buena respuesta a frecuencias altas. El LM311 resiste voltajes altos de alimentación (hasta

30V), lo cual es necesario para la etapa de amplificación de los transductores de 200KHz.

También se requiere un detector de umbral, el cual detecta un valor establecido (voltaje

umbral) de la envolvente.

La función de este dispositivo es comparar la señal 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 razón se requiere realizar una

conversión de voltaje. El LT1054, convierte un nivel de tensión positivo a uno negativo, la

Page 65: Tesis

62

corriente de salida es de 100mA, sus pérdidas son bajas, de 1.1 V a 100 mA y posee un

amplificador de referencia y error para regulación de la tensión de salida.

Multiplexor MPC509

Uno de los propósitos del prototipo es ser implementado en aplicaciones futuras. La tarjeta

tiene la capacidad de obtener señales de cuatro transductores receptores diferentes, pero

analiza la señal de cada transductor, por esta razón es necesaria la utilización 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 demás dispositivos.

Buffer CD74HCT365

El voltaje lógico mínimo 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 razón es necesaria la implementación de un buffer.

El CD4HCT365 es un buffer que convierte los niveles de voltaje de 3.3V a 5V, posee como

mínimo de voltaje lógico bajo 0.8V y mínimo 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 utilizaría sensores de

ultrasonido, debido a que se son menos costosos que otros sensores que utilizan algunos

sistemas de reconocimiento. La implementación de los transductores de 40KHz se debe a

su uso en la mayoría de aplicaciones con ultrasonido, además de su bajo costo. Existen

otros transductores que poseen un haz más directivo como es el caso de los transductores a

frecuencias altas. El objetivo de la utilización del par de transductores de 200KHz es

comparar su señal con el obtenido con el par de 40KHz y observar si es posible obtener

mejores resultados o datos más confiables.

El ancho del haz de los transductores implementados es de es 70º para los de 40KHz y 7º

para los de 200KHz.

Page 66: Tesis

63

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:

Rápido compilador C con compilaciones de un sólo paso

Cientos de funciones en las librerías de código fuentes y programas de muestra

Editor fácil de usar.

El desarrollo de software con Dynamic C es sencillo puesto que el código C, código

Assembler o hasta código 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 diseño 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 función.

Posee un editor de texto fácil de utilizar. Los programas pueden ser ejecutados y depurados

interactivamente en el código fuente o en el nivel de código de máquina. Además de menús

desplegables y combinaciones con el teclado para llamar ciertas funciones fácil y

rápidamente.

También soporta lenguaje de ensamblador durante la programación, por lo que no es

necesario cerrar C o el sistema de desarrollo para escribir un código en lenguaje de

ensamblador, el lenguaje C y el ensamblador pueden ser escritos en la misma ventana de

código.

La depuración incluye la posibilidad de utilizar instrucciones para mostrar las variables,

expresiones y puntos de corte además de otras características de depuración 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.

Page 67: Tesis

64

Dynamic C tiene una gran cantidad de librerías de funciones, todas escritas en código

fuente. Estas librerías ayudan a la programación en tiempo real, entradas y salidas a nivel

de máquina, y proveen códigos estándares y funciones matemáticas.

Eagle Layout Editor: Diseño 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 diseño de circuitos impresos. Básicamente consiste en

librerías donde se encuentran los diferentes dispositivos utilizados en los circuitos. Cada

dispositivo consta de un símbolo y un encapsulado los cuales corresponden al esquemático

e impreso respectivamente. Si los elementos a utilizar no se encuentran en sus librerías,

permite agregarlos. Las conexiones que se realizan entre los símbolos se reflejan en la

tarjeta.

Una vez se termina el diseño, en la tarjeta se observan todos los dispositivos seleccionados

con las conexiones tal como fueron establecidas en el esquemático, pero requieren ser

organizadas de acuerdo a las dimensiones deseadas.

Visual Basic 6.0

El software de visualización del sistema es Visual Basic 6.0 lo cual proporciona una

interfaz gráfica, fácil de utilizar por el usuario. El programa con el cual se va a realizar

dicha interfaz debe facilitar su realización.

Visual Basic 6.0 es uno de los lenguajes de programación que más 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

poquísimo 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 programación visual, también llamado lenguaje de 4ª

generación. Esto quiere decir que un gran número de tareas se realizan sin escribir código,

simplemente con operaciones gráficas realizadas con el ratón sobre la pantalla.

Visual Basic 6.0 es también un programa basado en objetos, aunque no orientado a objetos

como C++ o Java.

Visual Basic 6.0 está orientado a la realización de programas para Windows, pudiendo

incorporar todos los elementos de este entorno informático: ventanas, botones, cajas de

Page 68: Tesis

65

diálogo y de texto, botones de opción y de selección, barras de desplazamiento, gráficos,

menús, etc.

Prácticamente todos los elementos de interacción 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 ratón y la introducción a través

del teclado de algunas sentencias para disponer de aplicaciones con todas las características

de Windows 95/98/NT/XP.

Visual Basic provee un método para crear una interfaz gráfica de usuario. No requiere un

código largo para describir la apariencia y la ubicación de los elementos de la interfaz, sólo

se agregan objetos prefabricados dentro de la pantalla. Además utiliza el lenguaje Basic, un

leguaje muy utilizado por los programadores en la historia de la informática, ya que ha

evolucionado desde Basic original y ahora contiene centenares de instrucciones, funciones

y palabras claves, muchas de las cuales están directamente relacionadas con la interfaz

gráfica de Windows. Se pueden crear aplicaciones útiles con sólo aprender unas pocas

palabras claves, con la eficacia de lograr el objetivo tal y como se lograría en cualquier otro

lenguaje de programación de Windows.

6.3 ANÁLISIS COMPARATIVO

6.3.1 Unidad de procesamiento

Para el procesamiento de los datos, y la implementación del algoritmo de reconocimiento,

se consideraron tres alternativas, el microcontrolador PIC, El Rabbit y la FPGA. Después

de varias pruebas, se descartaron las opciones de la FPGA y del microcontrolador. Se

descartó la opción de la FPGA, debido a que el objetivo del proyecto está enfocado hacia la

aplicación y no hacia el hardware, es decir que no se requería una unidad de procesamiento

diseñada específicamente para esta aplicación, como hubiera sido la que se podría

desarrollar con una FPGA, por lo que su diseño requeriría de mucho más tiempo. El

microcontrolador PIC a pesar de ser una buena opción, su implementación requeriría de el

diseño de un modulo al que habría que añadirle otros elementos lo cual aumentaría su costo

y el tiempo del proyecto. Por último se tiene el Rabbit que ahorra tiempo de diseño y costo.

En el mercado se encuentran módulos con el Microprocesador Rabbit que traen

incorporados todos los elementos necesarios para que el procesador funcione, y se pueda

incorporar en otros sistemas. Su programación es sencilla debido a que es a través de un

compilador en el lenguaje dynamic C.

Page 69: Tesis

66

La frecuencia de operación de este modulo satisface los requerimientos de tiempo del

proyecto como la generación de los pulsos, la señal de reloj para el conversor y el tiempo

para realizar las operaciones del algoritmo.

El tamaño de este modulo es muy similar a los módulos que habría q diseñar para las otras

dos alternativas y un costo relativamente menor teniendo en cuenta que no hay que diseñar

ni comprar elementos extras para que funcione.

6.3.2 Sistema de adquisición

El sistema de adquisición básicamente 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 amplificación

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

Acosta y León, y el comparador lm311. Se descarto la primera debido a que no presentaba

una buena respuesta en frecuencia para las señales de 200 Khz., mientras que el LM311

funcionaba tanto para las señales de 40 y de 200 khz.

6.3.4 Convertidor análogo 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 tamaño mayor y además requiere mayor número de pines del procesador.

El AD7475 por tener una interfaz serial, tiene un tamaño menor, ocupa menos pines del

procesador y además se puede controlar con librerías ya existentes en la Rabbit diseñadas

para los convertidores seriales.

Page 70: Tesis

67

7 DESCRIPCION DETALLADA DEL SISTEMA

7.1 FUNCIONALIDAD DEL SISTEMA

El sistema desarrollado consta de los siguientes componentes:

Tarjeta de adquisición de las señales emitidas por los transductores ultrasónicos.

Microprocesador que realiza las operaciones para el reconocimiento.

Tarjeta de alimentación.

La tarjeta de adquisición de señal esta constituida por los siguientes componentes:

Etapa de Transmisión

7.1.1 Amplificacion de la Transmisión

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 razón es necesario construir una etapa de amplificación

de la señal 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 amplificación para los

dos transductores Tx1 y Tx2. Como se explicó anteriormente se utilizó el comparador

LM311 por su buena respuesta a frecuencias altas.

Básicamente el circuito cuando detecta el voltaje umbral de 2

3.3 V

genera un alto en la

salida con un valor equivalente al voltaje de alimentación, en este caso 12V para los

transductores de 40KHz y 25V para los transductores de 200KHz.

Page 71: Tesis

68

Figura 15 Etapa de amplificación de los pulsos que excitan a los transductores

Etapa de Recepción

7.1.2 Multiplexor MPC509

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

trabajando. Esta selección 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.

Page 72: Tesis

69

Figura 16 Diagrama de selección de los transductores receptores

7.1.3 Amplificadores de ganancia programable PGA204 - 205

El propósito de los amplificadores de ganancia programable es proporcionar una ganancia a

la señal que viaja a través 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 configuración 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 instrumentación al cual se le introduce una señal

diferencial proveniente del transductor receptor. De esta manera, no se afecta demasiado

con el ruido de la fuente y permite que la señal que envía el transductor receptor, que es una

señal muy débil, no se atenúe. Tienen un rango de polarización de 4.5V a 18V. En esta

aplicación, la tensión de polarización utilizada es de 5V, obteniendo en la salida una señal

con un voltaje pico a pico de máximo 10 voltios.

Page 73: Tesis

70

Para la amplificación de la señal 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 distorsión en la señal.

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 amplificación, el valor máximo de la señal es de 2.5 V voltios pico

y es la señal de entrada a la etapa de rectificación.

La conexión de los amplificadores se puede observar en la figura 17.

Page 74: Tesis

71

Figura 17 Etapa de amplificación de la señal recibida. A) Primera etapa de

amplificación antes del filtro pasabanda. B) Segunda etapa de amplificación después

del filtrado.

A)

Page 75: Tesis

72

B)

7.1.4 Filtro Pasabanda (40KHz y 200KHz)

Como se mencionó anteriormente entre los amplificadores de ganancia programable existe

un filtro pasabanda que sólo permite el paso de las señales 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 cálculo 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:

Ecuación14. Cálculo de resistencias del filtro

CentralFrecuenciaCRR

*12

141

(17)

1*193 RR

19

12

RR

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 potenciómetro 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.

Page 76: Tesis

73

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

señal de entrada, con una salida negativa.

La señal de doble polaridad proveniente del PGA2 OUT entra al circuito, inicialmente pasa

por una etapa rectificadora de media onda que la invierte, luego esta señal de doble

amplitud, alimenta a un amplificador que la suma con el otro hemiciclo de la señal de

entrada. El resultado es la inversión de la polaridad seleccionada en la señal de entrada. Las

resistencias siempre mantienen una relación de 2 a 1. La salida de este circuito se conecta a

la entrada de un filtro pasabajas.

Page 77: Tesis

74

Figura 19 Rectificador de onda completa.

7.1.6 Filtro Pasabajas

El filtro mostrado en la figura 20 de segundo orden que atenúa 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 más adelante.

Figura 20 Filtro Pasabajas

Page 78: Tesis

75

7.1.7 Detector de Umbral

Para reconocer los objetos se tienen en cuenta diferentes parámetros 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 parámetro 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

señal de entrada es la envolvente del eco recibido y la salida esta conectada al puerto I/O

PD5 del Rabbit 3610.

Page 79: Tesis

76

Figura 21 Detector de Umbral

7.1.8 Convertidor Analógico - Digital

Luego que la señal ha sido condicionada por medio de los circuitos anteriores es necesario

convertir la información análoga a datos discretos para ser procesada por el Rabbit.

El AD7475 posee una resolución 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 señal digitalizada, comenzando por el mas significativo.

El convertidor analógico – 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.

Page 80: Tesis

77

Figura 22 Etapa de digitalización 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 señal

digitalizados) como entrada.

7.1.9 Buffer CD74HCT365

Para adecuar los niveles de voltajes lógicos 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.

Page 81: Tesis

78

Figura 23 Buffer CD74HCT365

7.1.10 Etapa de Alimentación

Los voltajes requeridos para la alimentación de los dispositivos implementados y del

microprocesador son:

25V Excitación del transductor transmisor 200KHz

12V Excitación del transductor transmisor 40KHz

5V Alimentación de los dispositivos utilizados en la etapa de acondicionamiento de

señal

3.3V Alimentación 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

tensión de polaridad negativa. Para solucionar este inconveniente se utilizó un convertidor

DC - DC, que transforma una de entrada tensión positiva, en una tensión negativa con

respecto a la tierra del circuito. En la figura 28 se muestra el circuito que generar cinco

voltios negativos.

Page 82: Tesis

79

La comunicación entre el convertidor A/D 7475 y el microprocesador requiere un voltaje

de interfaz (VDRIVE) de 3.3V, debido a que el Rabbit sólo acepta este valor como voltaje

máximo, por esta razón fue necesario utilizar el regulador LM317 que con una entrada de

5V entrega el voltaje deseado dependiendo de la relación entre R1 y R2. La ecuación que

permite hallar el valor de las resistencias es:

1

2125.1

R

RVVout

(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 señal 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 conexión, como se puede observar en la figuras 25 y 26.

Page 83: Tesis

80

Figura 25 Etapa de 12V

Figura 26 Etapa 5V

Page 84: Tesis

81

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 distribución de los puertos de entrada y salida del

microprocesador.

Page 85: Tesis

82

Figura 29 Señales 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 configuración 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 definición de algunas variables y constantes.

Básicamente la tarjeta realiza cuatro funciones:

Page 86: Tesis

83

Reconocimiento Simple

Reconocimiento Completo

Entrenamiento

Librería

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 código, 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 sólo 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

través del puerto serial.

Para ejecutar la función Reconocimiento Simple se envía a través del PC el código ASCII

“a” a la tarjeta, con esta función se da la orden de reconocer el objeto que es ubicado en la

plataforma.

Una vez recibido el caracter “a”, se llama a la función pwm1 la cual genera el tren de

pulsos que excitará a los transductores, el número de pulsos y la frecuencia de estos

dependerán si se trabaja a 40 o 200 khz. Después 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 algún 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 señal 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 después se llama a la

función adc que activa el convertidor análogo digital para tomar las 4 amplitudes.

Con los 5 parámetros calculados, se pasa a la rutina de clasificación, 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 más

cercano, se va almacenando en un acumulador el número de veces que determinado objeto

fue reconocido, es así una vez terminada 100 mediciones, se cuenta cual fue el objeto más

concurrente, y es el código de este objeto el que es transmitido al PC junto con las

probabilidades de los demás objetos como se ilustra en la figura 30.

Page 87: Tesis

84

Figura 30 Reconocimiento Simple

La función de Reconocimiento Completo se realiza cuando se recibe el carácter “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 desviación estándar de

cada uno de los parámetros.

Figura 31 Reconocimiento Completo

“a”

Codigo Prob 1 Prob 2 Prob 3 . . . . Frecuencia

“a”

Codigo Prob 1 Prob 2 Prob 3 . . . .

Frecuencia Tf1 A1 A2 A3 A4

Tf1 A1 A2 A3 A4

Medición # 1

Tf1 A1 A2 A3 A4

Medición # 2

Medición # 100

. . . . . .

. . . . . .

. . . . . .

Page 88: Tesis

85

El entrenamiento de un objeto se ejecuta cuando la tarjeta recibe el carácter ASCII “s”,

luego se llama a la función entrenamiento la cual toma 300 mediciones de la misma forma

que se toman las de Reconocimiento Simple, con la diferencia que los parámetros 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 código que es consecutivo al código del último objeto

en la base de datos. Los centroides son transmitidos al programa principal donde este

también le asigna además de un código un nombre.

Figura 32 Entrenamiento

Por último se añadió a la tarjeta la función de librería. Esta función permite que si se tiene

objetos previamente entrenados y almacenado en el programa principal, estos puedan ser

descargados a la tarjeta.

Con la transmisión del carácter “f” la tarjeta esperara recibir inmediatamente después la

frecuencia del objeto, su código y los datos como se muestran en la figura 33.

Figura 33 Librería

Cuando se va a transmitir más de un objeto se repite la trama automáticamente,

dependiendo de cuantos objetos fueron seleccionados en el programa principal.

Frecuencia Código Tf1 A1 A2 A3 A4 “f” . . .

“s”

Tfpromedio A1promedio A2promedio A3promedio A4promedio Frecuencia

Page 89: Tesis

86

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

trabajar y hacer pruebas sólo con los objetos que desee, sin necesidad de volver a entrenar

la tarjeta.

Una explicación 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

difícilmente 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 diseñar 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 señal de 40 Khz, y 04 H para el contador de 200 Khz En el

registro B se almacenan el número 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 señal, se ha generado un periodo completo de la señal 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 razón se utilizó la librería que viene

con Dynamic C, para controlar convertidores seriales.

Al iniciar el programa se llama esta librería para poder usarla en el resto del programa.

Además 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 través 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 número de bytes que se van a leer del conversor, luego

se deshabilita el conversor. Esta operación se repite dependiendo de cuantas muestras se

quieran tomar.

Page 90: Tesis

87

Los 8 bits más significativos quedan almacenados en la primera posición del vector y los 8

bits menos significativos en la segunda posición del vector.

Por esto se realiza un ajuste almacenando ambos bytes en su posición 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 función de conversión.

CLASIFICACION ( )

Para reconocer el sistema toma dos parámetros, 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 parámetros debido a que se obtuvieron mejores resultados con ellos

luego de númerosas pruebas. El cálculo de la distancia de estos centroides es básicamente

el cálculo de la distancia entre dos puntos, como ejemplo se tiene el siguiente comando:

distan[j][0]=sqrt(pow((adc_sample2[0]- centro3[j][amp2]),2)+pow((adc_sample4[0]-

centro3[j][amp4]),2))

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 además cuando el reconocimiento es completo, que se transmiten

los datos de las mediciones, es decir el tiempo de vuelo y las cuatro amplitudes.

Page 91: Tesis

88

Figura 34 Diagrama de flujo de las rutinas del microprocesador

INICIO

1

Declaración de

Constantes

Declaración de

Variables

Declaración de funciones (pwm1,

pwm2, ADC, clasificación,

entrenamiento, librería)

Configuración de

Puertos

¿Modo

Manual?

NO

SI

¿Se presionó

el

interruptor?

SI

NO

2

5

Page 92: Tesis

89

1

¿Reconocim

iento

Simple?

SI

NO

2

¿Reconocim

iento

Completo?

SI

NO

2

¿Entrenamie

nto?

NO

SI

3

¿Librería?

SI

NO

4

5

Page 93: Tesis

90

2

Transmite la frecuencia a la

que 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

Calcula la distancia con cada

uno de los centroides

Identifica el objeto cuyos

centroides están más cercanos

6

7

Page 94: Tesis

91

SI

NO

¿Había escogido

inicialmente

reconocimiento

completo?

Transmite el tiempo de vuelo y

las cuatro amplitudes al PC

7

Acumula el número de veces

que la tarjeta reconoce un

código de la base de datos

¿Número de

mediciones =

100?

NO

SI

Transmite el código del objeto

con mayor probabilidad y las

probabilidades de cada objeto

5

6

Page 95: Tesis

92

3

¿Número de

mediciones =

300?

NO

SI

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

8

Page 96: Tesis

93

8

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

5

Page 97: Tesis

94

¿Frecuencia =

40?

NO

SI

Almacena los datos en la base

de datos de 40Khz

4

Se va almacenar

otro objeto?

SI

NO

5

Almacena los datos en la base

de datos de 200Khz

Se va almacenar

otro objeto?

SI

NO

5

Page 98: Tesis

95

7.1.13 Software de Visualización

El software de visualización posee una serie de menús y submenús 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 opción de

manipularla por medio del software de visualización.

Figura 35 Ventana Principal

El menú “Archivo” tiene la opción de salir del programa. El menú “Ejecutar” posee cinco

submenús, “Reconocimiento Simple”, “Reconocimiento Completo”, “Entrenamiento”,

“Gráficar” y “Librería”.

Page 99: Tesis

96

Figura 36 Menú “Ejecutar”

Reconocimiento Simple

Permite ver al usuario el objeto reconocido por el par de transductores ultrasónico, la

imagen almacenada del objeto, información adicional del usuario y el número de veces que

el sistema reconoció un objeto determinado de los n objetos que se encuentran en la base de

datos. Esta función 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 opción se envía el carácter “a”

indicándole al microprocesador que se está solicitando reconocimiento simple, luego el

Rabbit envía (tramas 8 bits) la frecuencia a la que se esta trabajando, código del objeto

identificado y el número 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

recepción se activa el evento OnComm y se guardan los datos recibidos en un vector. La

longitud del vector dependerá del número de objetos que se encuentren en la base de datos

más dos datos adicionales (frecuencia y código).

Cuando el código 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 código.

Page 100: Tesis

97

Figura 37 “Reconocimiento Simple”

Reconocimiento Completo

Esta opción además de reconocer el objeto, permite calcular la desviación estándar de cada

parámetro (Tf, A1, A2, A3, A4), y la distancia entre los centroides. La cantidad de

mediciones que se toman para determinar la desviación estándar es el número de objetos de

la base de datos, multiplicados por 25. Por ejemplo si existen 4 objetos la cantidad de

mediciones por parámetro sería 100.

Cuando el sistema envía el carácter “d” le solicita al microprocesador Reconocimiento

Completo y este responde enviando; frecuencia, mediciones de los parámetros y código del

objeto. Luego que los datos están almacenados en el vector se realiza la ecuación

correspondiente para determinar la desviación estándar de cada parámetro y se muestra en

pantalla.

Imagen del

objeto

Información

extra.

Objetos en la

base de datos

Ptrobabilidad

es de cada

objeto

Page 101: Tesis

98

La técnica de recepción de datos y reconocimiento es la misma utilizada en

“Reconocimiento Simple”.

Figura 38 “Reconocimiento Completo”

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 parámetros del

objeto entrenado (Tf, A1, A2, A3, A4), se le asigna un nombre al objeto entrenado, su

imagen correspondiente y la información de dicho objeto que se desee almacenar. Por

último se envía a la base de datos en la opción guardar. De esta manera el usuario tiene la

opción de agregar o remplazar objetos en la base de datos existente.

El carácter “s” indica al microprocesador la rutina de entrenamiento y la adición de un

nuevo objeto en su base de datos.

Centroides de

los objetos de

la base

Distancia

entre los

centroides

Desviacion

estandar

Page 102: Tesis

99

El Rabbit ejecuta 300 mediciones de cada parámetro (Tf, A1, A2, A3, A4), y envía el

promedio de estos junto con la frecuencia utilizada.

La técnica de recepción de datos es la misma utilizada en “Reconocimiento Simple”.

Figura 39 “Entrenamiento”

Gráficar

Permite gráficar los centroides de los objetos almacenados en la base de datos. Inicialmente

se escoge la frecuencia (40KHz, 200KHz), para determinar qué objetos desea gráficar, si

los entrenados con los transductores de 40KHz o los entrenados con los transductores de

200KHz, luego se seleccionan los objetos a gráficar y los parámetros. De esta manera se

puede determinar qué parámetros (Tf, A1, A2, A3, A4) son suficientes para el

reconocimiento.

Objeto Entrenado

Informacion

Extra

Envia a la

base de datos

Imagen del Objeto

Centroide

Page 103: Tesis

100

Las acciones que ejecuta este evento depende de lo que el usuario desee, en este caso no

existe ninguna comunicación 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 parámetros, se gráfican los valores almacenados en la tabla.

Figura 40 Función “Gráficar”

Librería

Esta opción 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 visualización. Ambas contienen los mismos objetos entrenados.

Parametros

Gráfica de los

centroides

Objetos en la

base de datos

Page 104: Tesis

101

Pero si el usuario desea entrenar el prototipo con ciertos objetos, esta opción 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 botón “ENVIAR LIBRERIA” se transmite el carácter “f” indicando al

microprocesador que debe borrar los centroides que existen en su base de datos y

remplazarlos por los que recibe.

Figura 41 Función “Librería”

El menú de “Complemento” contiene el submenú de “Modo Manual” y “Cálculo de

Coeficientes de Tx y Rx”.

Objetos en la

base de datos

Envia a la tarjeta

los centroides

seleccionados

Page 105: Tesis

102

Figura 42 Menú “Complemento”

Modo Manual

Realiza el “Reconocimiento Simple” de manera manual, es decir el microprocesador envía

los datos sin recibir ninguna orden del PC. Es necesario cambiar desde la tarjeta por medio

de un jumper que indica la opción que se desea trabajar. Para regresar al modo PC se debe

presionar el botón “Cerrar Modo Manual”.

Figura 43 Modo Manual

Imagen del

objetos

Informacion

Extra

Cierra Modo

Manual

Objetos en la

base de datos

Page 106: Tesis

103

Calculo de Coeficiente Tx y Rx

Calcula los la impedancia acústica, la energía transmitida y la energía reflejada del

material.

Figura 44 Ventana calcula los coeficientes de Tx y Rx

Por último el menú “Ayuda” con las opciones “Contenido” y “Acerca de” permite al

usuario conocer la función de cada submenú.

Cálculo de la

energía de los

matriales

trabajados

Cálculo de la

Energía de un

Nuevo material

Page 107: Tesis

104

Figura 45 Menú “Ayuda”

Contenido

Muestra una explicación de las funciones de cada submenú.

Figura 46 Ayuda del programa

Descripcion de

las funciones

Eleccion del

submenu

Eleccion del

Menu

Page 108: Tesis

105

Barra de Herramientas

Fueron diseñadas con el fin de facilitarle al usuario el acceso a los comandos más utilizados

de la barra de menús, en esta barra se encuentran los botones para activar los comandos

Reconocimiento Simple, Reconocimiento Completo, Entrenamiento, Gráficar 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 visualización

INICIO

Carga Base de Datos

¿Rcto Simple

Click?

NO

SI

Envía “a”, almacena

datos recibidos

1

1

10

Page 109: Tesis

106

1

¿Rcto

Completo

Click?

SI

Envía “d”, almacena

datos recibidos

NO

¿Entrenamien

to Click?

NO

SI

Envía “s”, almacena

datos recibidos

2

2

3

3

¿Librería

Click? 4

NO

SI

Revisa base datos y

envía centroides de los

objetos seleccionados

Page 110: Tesis

107

4

¿Gráficar

Click?

Gráfica los centroides de

los objetos y parámetros

seleccionados

NO

SI

5

¿Modo

Manual

Click?

Abre el puerto y almacena

datos recibidos

6

6

7

NO

NO

SI

¿Cálculos

Coeficientes

Click? 8

SI

5

6

6 NO

Page 111: Tesis

108

7

Realiza cálculos según los

datos ingresados

¿Ayuda

Click?

NO

SI

9

8

Muestra una explicación de

las funciones del software

¿Salir Click?

SI

9

10

FIN

NO

Page 112: Tesis

109

7.2 ARQUITECTURA Y CONSTRUCCION DEL SISTEMA

El software y el hardware del sistema tienen características propias de tamaño y

presentación. Estas características se muestran a continuación en unas fotografías 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 físico del hardware

Tarjeta de

Alimentación

Núcleo del

sistema

Acondiciona

miento

Page 113: Tesis

110

Figura 50 Aspecto físico del todo el sistema

Hadware del

sistema

Estructura

Page 114: Tesis

111

8 PRUEBAS Y RESULTADOS

8.1 ETAPAS DE PRUEBA

8.1.1 Estructura Implementada

En esta etapa se evaluó el diseño de la estructura que fijarían los transductores y en dónde

se realizaría el reconocimiento de los objetos.

8.1.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos

Como se explicó anteriormente, la señal de eco emitida por el transductor receptor y el

transmisor requieren una fase de amplificación y acondicionamiento para su respectivo

análisis. En esta segunda fase se analizó si la etapa de adquisición de la señal implementada

por los ingenieros Acosta Miranda y Jorge Mario León Albornoz [1], era suficiente para

obtener los datos de interés de la señal de eco.

8.1.3 Microprocesador

El núcleo del sistema es el que maneja todas las señales de control y realiza el

reconocimiento de los objetos además de todas las funciones explicadas anteriormente. Por

esta razón la determinación del microprocesador es una de las etapas de pruebas más

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

Además del reconocimiento de objetos en cuanto a su forma, se observó si era posible

reconocer el material. Por otra parte también se probó si los transductores eran capaces de

emitir un eco lo suficientemente adecuado para determinar la presencia de una aguja en una

jeringa.

Page 115: Tesis

112

8.1.5 Etapa Final

Las pruebas del prototipo final, se realizaron en esta fase. En donde junto con la estructura,

la tarjeta de alimentación, la etapa de adquisición, los transductores y el microprocesador se

evaluaron diferentes parámetros que miden la eficiencia y confiabilidad del sistema.

8.2 DISEÑO DE LOS EXPERIMENTOS

8.2.1 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

disposición de los sensores es paralela entre cada transductor. En el momento de la

operación los sensores están 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 evalúa el sistema es estática 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 reflexión de las ondas ultrasónicas 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 reflexión 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 pequeña.

Los resultados obtenidos en el diseño de la estructura fueron los esperados, debido a que se

pueden realizar mediciones precisas, en diferentes ambientes, es de fácil movilidad, no

introduce error a la señal de eco recibida y permite trabajar a las dos frecuencias (40Khz y

20Khz). Aproximadamente en tres semanas se construyó la estructura final.

Page 116: Tesis

113

8.2.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos

Esta etapa se desarrolló a partir del diagrama implementado por los ingenieros Acosta

Miranda y Jorge Mario León Albornoz [1]. Inicialmente, se realizó el montaje de la etapa

de acondicionamiento en un PCB de 10X10cm y se analizó la señal envolvente del eco

recibido utilizando los transductores de 40Khz por ser el transductor ultrasónico más

comercial que existe en el mercado. Cuando se adquirieron los transductores de 200Khz se

acondicionó la etapa de adquisición para realizar las pruebas correspondientes con estos

transductores.

El proyecto de grado de los ingenieros electrónicos Claudia Acosta Miranda y Jorge Mario

León Albornoz, se implementó el LM386 para la etapa de transmisión. Este dispositivo es

un amplificador de potencia diseñado para uso en aplicaciones de bajo consumo, pero no

posee un ancho de banda suficiente para trabajar con señales de alta frecuencia (200KHz).

Por esta razón fue necesario utilizar un comparador LM311 el cual posee una buena

respuesta a frecuencias altas, y resiste voltajes altos de alimentación (hasta 30V), lo cual es

necesario para la etapa de amplificación de los transductores de 200KHz.

En el diseño de la tarjeta final, se añadieron los multiplexores para la selección de los

transductores receptores, el detector de umbral para captar la señal de eco, el ADC para

digitalizar la señal de eco, y el microprocesador que maneja las señales de control tales

como la amplificación de los PGA y la selección de los transductores receptores por medio

del multiplexor, la señal del detector de umbral y el ADC.

Para desarrollar esta fase fue necesaria la implementación de un osciloscopio, una fuente de

voltaje y el software de diseño de las tarjetas impresas (Eagle 4.11). Aproximadamente en

3 meses se desarrollo la etapa de adquisición final.

8.2.3 Microprocesador

En las primeras pruebas se utilizó el PIC 16F873 para generar los pulsos que excitan al

transductor transmisor, después de su funcionamiento se procedió a determinar un

microprocesador que controlara las señales de la etapa de adquisición y generara el tren de

pulsos para excitar tanto los transductores de 200Khz y los de 40Khz.

Luego del escoger el Rabbit 3610 como núcleo del sistema se probó si el PWM podía

generar el tren de pulsos para excitar a los transductores, observando si la frecuencia de

reloj del microprocesador era suficiente para generarlos. También era necesario determinar

si la frecuencia de muestreo requerida, podía ser generada por el Rabbit 3610.

Page 117: Tesis

114

La realización de estas pruebas se llevó a cabo por medio de una tarjeta provisional, en

donde sólo se observaba las señales generadas por el Rabbit, y el funcionamiento del

algoritmo de reconocimiento.

Se implementó un osciloscopio para observar estas señales, una fuente de voltaje que

alimentaba la tarjeta de prueba y el software Dockligth V.13 (comunicación 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

Además de los objetos en aluminio también 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 existía

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 sólo se utilizaron los

transductores de 200Khz, debido a que su haz es mas directivo que el de los de 40Khz y de

esta manera existía mayor probabilidad que captara un objeto tan pequeño como lo es la

aguja de una jeringa.

Al igual que la etapa de acondicionamiento de señal se utilizó un osciloscopio para ver el

eco emitido por los transductores y una fuente de voltaje que alimentaba la tarjeta de

adquisición.

La difícil adquisición 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 adquisición final, el Rabbit Core 3610, estructura final, la fuente de

alimentación, los transductores y el software de visualización se da paso a las pruebas de

todo el sistema.

Page 118: Tesis

115

A partir de la envolvente del eco se calcularon cinco parámetros, 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 selección de los tiempos en los que se realizaron las mediciones, se hizo de forma

empirica. Teniendo en cuenta que mayor parte de la información 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 Parámetros de la Envolvente

Con base en los parámetros adquiridos se establecen las reglas para la construcción del

clasificador. En la tabla 2 se muestran las combinaciones realizadas en la etapa de prueba.

A partir de estos parámetros se evalúa el rendimiento a medida que se incluye cada uno de

estos en el clasificador.

Page 119: Tesis

116

Tabla 2 Combinaciones de los Parámetros

Luego de escoger el parámetro 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 opción PROG se programa el algoritmo del

microprocesador y en la opción DIAG se comunica con el puerto serial del computador, de

esta manera se ahorra construir una etapa de comunicación con el usuario.

El programa inicia con una base de datos fija, pero el usuario tiene la opción de entrenar un

nuevo objeto o remplazar uno ya existente. En el menú “Librería” se envía al

microprocesador el número de objetos entrenados que el usuario desee que el sistema

reconozca.

La opción reconocimiento simple y completo identifica el objeto que se encuentre siendo

analizado.

Page 120: Tesis

117

8.3 RESULTADOS

8.3.1 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, además esta cubierta por una

esponja para evitar cualquier reflexión 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 reflexión

de objetos extraños es nula.

Figura 52 Señal envolvente 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 pequeño agujero en el centro del plano cuadrado para ofrecerle mayor estabilidad y

realizar mediciones más 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

Amplitud de la

esponja

Page 121: Tesis

118

distancia se requiere una mayor alimentación en la etapa de transmisión y el LM311 no

resiste voltajes superiores a 25V.

Figura 53 Estructura Final

8.3.2 Etapa de adquisición de la señal de eco y transmisión del tren de pulsos

Luego de realizar númerosas pruebas con la etapa de adquisición implementada por los

ingenieros Acosta Miranda y Jorge Mario León Albornoz [1], se observó que la señal

obtenida era suficiente para su analisis.

En la etapa de adquisición se realizaron pruebas con las figuras de aluminio.

En la figura 54 se observa el tren de pulsos generador por el microprocesador antes y

después de la amplificación para los transductores de 40Khz y en la figura 55 para los

transductores 200Khz.

Transductores

de 200 KHz

Transductores

de 40 KHz

Base para

mediciones con

40Khz

Base para

mediciones con

200Khz

Page 122: Tesis

119

Figura 54 A) Tren de pulsos antes de la amplificación. B) Tren de pulsos después de la

amplificación.

A)

B)

Amplitud 3.3V

Amplitud 12V

Page 123: Tesis

120

Figura 55 A) Tren de pulsos antes de la amplificación. B) Tren de pulsos después de la

amplificación.

A)

B)

Amplitud 3.3V

Amplitud 24V

Page 124: Tesis

121

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 ningún acondicionamiento y en la

figura 57, 58, 59 y 60 cada una de las etapas de acondicionamiento de la señal hasta obtener

la envolvente de la señal.

Figura 56 Señal de eco

Amplitud

entregada por el

Rx (muy

pequeña)

Page 125: Tesis

122

Figura 57 Eco en la primera etapa de amplificación

Figura 58 Eco después del filtrado

Amplitud de la

1era etapa

amplificacion

Amplitud después del

filtro (40Khz) con una

ganancia de 10V/V

Page 126: Tesis

123

Figura 59 Eco después de la segunda etapa de amplificación.

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

de eco.

Figura 60 Detector de umbral y envolvente.

Amplitud de la

2da etapa de

amplificación

Alto que genera

el detector de

umbral

Umbral

establecido (280

mV)

Page 127: Tesis

124

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 señal 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 Señal Envolvente con 40KHz A) Cubo B) Cilindro C) Esfera D) Cono

A)

Amplitud del

cubo 40Khz

Page 128: Tesis

125

B)

C)

Amplitud del

cilindro 40Khz

Amplitud de la

esfera 40Khz

Page 129: Tesis

126

D)

Figura 62 Señal Envolvente con 200KHz A) Cubo B) Cilindro C) Esfera D) Cono

A)

Amplitud del

cono 40Khz (min

de los demás

objetos)

Amplitud del

cubo 200Khz

Page 130: Tesis

127

B)

C)

Amplitud del

cilindro 200Khz

Amplitud de la

esfera 200Khz

Page 131: Tesis

128

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 aplicación del núcleo fueron satisfactorios, ya que cumple con

los requisitos del proyecto, como número de puertos entrada salida, frecuencia de operación

y memoria.

En cuanto al PWM del Rabbit, no se logró generar el tren de pulso, debido a que este no

generaba señales con la frecuencia de 200 Khz, por lo que fue necesario realizar una rutina

en lenguaje ensamblador que nos permitiera generarla (figura 63).

Amplitud del

cono 200Khz

Page 132: Tesis

129

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

A)

B)

15 pulsos

generados para

40Khz

50 pulsos

generados para

200Khz

Page 133: Tesis

130

Cuando el voltaje umbral es detectado, la señal 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 señal

de reloj genera 16 ciclos por cada muestra, ya que los datos son de 16 bits y la señal sólo se

muestrea en estos puntos, como se observa en la figura 64.

Figura 64 Señal de Reloj y CS del A/D

8.3.4 Pruebas Adicionales

La supocisión inicial que se planteó fue que materiales con distinta densidad, posiblemente,

absorberían en diferente magnitud las ondas ultrasónicas por consiguiente se pretendía

caracterizar materiales con base en la amplitud del eco recibido.

Los coeficientes de reflexión y transmisión en la interfaz de dos materiales dependen de la

impedancia acústica de estos, entre más 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 acústica 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

sólo un porcentaje extremadamente pequeño es transmitido al material, en la tabla 3 se

Los 16 pulsos de

reloj

Activacion del CS

Page 134: Tesis

131

encuentra el resultado de la energía 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 técnica.

Por esta misma razón tampoco fue posible detectar la presencia de una aguja.

En la figura 65 se muestran las diferentes señales 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 demás materiales sólo en partes de objeto que presentaran una

superficie porosa de lo contrario el prototipo se confundía, en otras palabras no se lograba

diferenciar el material sino la superficie.

Figura 65 Señal envolvente del cubo en A) Madera B) Aluminio C) Acero

A)

Page 135: Tesis

132

B)

C)

En las siguientes gráficas, se muestran la señal de la envolvente de la jeringa con aguja y

sin aguja, como se puede observar no existe diferencia alguna entre ellas.

Page 136: Tesis

133

Figura 66 Señal envolvente de la jeringa A) Con la aguja B) Sin la aguja

A)

B)

Page 137: Tesis

134

Tabla 3 Calculo de la Energía Tx y Rx

Material Densidad (d)

Velocidad

Acústica (V)

Impedancia Acústica

(Z)

Aire 0,0013 0,033 0,0000429

Madera 0,9 0,413 0,3717

Aluminio 2,71 0,635 1,721

Acero 7,8 0,579 4,5162

polietileno 0,9 0,195 0,175

Interfaz

% Energía

transmitida

% Energía

Reflejada

Aire - Madera 0,046 99,954

Aire - Aluminio 0,01 99,99

Aire - Acero 0,004 99,996

Aire -

Polietileno 0,098 99,902

8.3.5 Etapa Final

Luego de realizar mediciones con cada una de las combinaciones mostradas en la tabla 2,

los parámetros que arrojaron mejores resultados en cuanto al reconocimiento fueron el A2 y

A4. En la figura 67 se muestra una representación bidimensional con los parámetros A2 y

A4 donde se logra distinguir los diferentes agrupamientos en el espacio de representación,

uno por cada clase considerada y así es posible asociar regiones disjuntas a cada una de las

clases representadas.

Page 138: Tesis

135

Figura 67 Representación de las clases con los parámetros A2 y A4

Mediante el software de visualización 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 continuación:

Tiempo que demora la función Reconocimiento Simple con 4 objetos en la base de

datos = 936ms

Tiempo que demora la función Reconocimiento Completo con 4 objetos en la base

de datos = 2020ms

Tiempo que demora la función entrenamiento con 4 objetos en la base de datos =

1746ms

Tiempo que demora la función librería con 4 objetos en la base de datos = 2,08s

Page 139: Tesis

136

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

cilindro de aluminio. La gráfica 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 gráfica aparece la distancia entre cada uno de los centroides con respecto al

centroide del objeto reconocido, como se puede observar la separación más corta pertenece

al objeto identificado.

Figura 68 Reconocimiento de los objetos

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.

Centroides de

los objetos de

la base

Distancia

entre los

centroides

Desviacion

estandar

Page 140: Tesis

137

Tabla 4 Matriz de contingencia usando los transductores de 40Khz

Cubo Cilindro Esfera Cono Total Éxito ( % ) Error

Cubo 1000 1000 100 0

Cilindro 918 82 1000 91,8 8,2

Esfera 177 823 1000 82,3 17,7

Cono 1000 1000 100 0

Total 1000 1095 823 1082 4000 93,525 6,475

Tabla 5 Matriz de contingencia usando los transductores de 200Khz

Cubo Cilindro Esfera Cono Total Éxito ( % ) Error

Cubo 1000 1000 100 0

Cilindro 1000 1000 100 0

Esfera 998 2 1000 99,8 0,2

Cono 1000 1000 100 0

Total 1000 1000 998 1002 4000 99,95 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 ANÁLISIS DE LOS RESULTADOS

Cada una de las etapas de prueba arrojó resultados satisfactorios, a excepción de la etapa de

pruebas adicionales.

La estructura que se diseñó para la identificación de los objetos cumple con el requisito de

no interferir en las mediciones de los objetos con el fin de sólo analizar el eco reflejado por

Page 141: Tesis

138

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 adquisición como se esperaba funcionó al igual que en el proyecto de grado de

Acosta y León. Los cambios en la etapa de filtrado para la frecuencia de 200 Khz y en la

etapa de amplificación para los transductores emisores se lograron realizar.

La detección de la envolvente, el filtrado y la amplificación permiten adecuar la señal para

el convertidor análogo digital y extraer una señal diferente para cada uno de los objetos

propuestos.

El LM386 utilizados en el Proyecto de grado de Acosta y León, no presentaba una buena

respuesta para las señales de 200 Khz, la señal 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 excitación de ambos transductores con la misma etapa.

El algoritmo de reconocimiento se implementó en un Núcleo de Rabbit 3610. Este es el

núcleo mas pequeño de la Rabbit Semiconductors, aun así cumple con los requisitos del

proyecto, como número de puertos entrada salida, frecuencia de operación y memoria.

El inconveniente que se tuvo fue con el PWM del Rabbit, pues no genera señales 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 núcleo se probaron los puertos de entrada salida, se calculo

el divisor de reloj para el convertidor análogo digital, la comunicación 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 comparación 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 aproximación lineal por segmentos,

y es probado con objetos que se encuentran tipicamente en una celda de producción. Los

clasificadores utilizados son arboles de decisión, 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.

Page 142: Tesis

139

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

aciertos fue de un 93 % en comparación 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 patrón de radiación es

bastante estrecho, posee una directividad de 7 grados, por lo que cualquier cambio en su

posición 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 pocisión 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

inclusión 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 obstáculos al alrededor del objeto de aproximadamente 50cm como se observa

en la figura 69.

Figura 69 Área libre de obstáculo para transductores de 40Khz

PLATAFORMA 50 cm

Page 143: Tesis

140

9 ADMINISTRACION DEL PROYECTO

9.1.1 Cronograma del Proyecto Final

AÑO 2004

Fases del proyecto Julio Agosto Septiembre Octubre Noviembre

Documentación

Revisión bibliográfica

Redacción de informes

Monografía

Articulo

CD’s para biblioteca

Determinación de dispositivos

Diseño de etapa

acondicionamiento 40KHz

Construcción de etapa

acondicionamiento 40KHz

Diseño de etapa

acondicionamiento 200KHz

Construcción de etapa

acondicionamiento 200KHz

Plataforma de trabajo

Técnica de reconocimiento

Evaluación del software

Implementación VHDL

Pruebas preliminares

Rediseño

Diseño final

Pruebas finales

Page 144: Tesis

141

Año 2004 AÑOAA 2005 AÑO 2005

Fases del proyecto Diciembre Enero Febrero Marzo Abril

Documentación

Revisión bibliográfica

Redacción de informes

Monografía

Articulo

CD’s para biblioteca

Determinación de dispositivos

Diseño de etapa

acondicionamiento 40KHz

Construcción de etapa

acondicionamiento 40KHz

Diseño de etapa

acondicionamiento 200KHz

Construcción de etapa

acondicionamiento 200KHz

Plataforma de trabajo

Técnica de reconocimiento

Evaluación del software

Implementación del algoritmo

de reconocimiento

Pruebas preliminares

Rediseño

Diseño final

Pruebas finales

Page 145: Tesis

142

AAAa Año 2005 AÑOAA 2005

Fases del proyecto Octubre

Documentación Revisión bibliográfica Redacción de informes

Monografía

Articulo

CD’s para biblioteca

Determinación de dispositivos

AÑOAA 2005 Año 2005

Fases del proyecto Mayo Junio Julio Agosto Septiembre

Documentación

Revisión bibliográfica

Redacción de informes

Monografía

Articulo

CD’s para biblioteca

Determinación de dispositivos

Diseño de etapa

acondicionamiento 40KHz

Construcción de etapa

acondicionamiento 40KHz

Diseño de etapa

acondicionamiento 200KHz

Construcción de etapa

acondicionamiento 200KHz

Plataforma de trabajo

Técnica de reconocimiento

Evaluación del software

Implementación del algoritmo

de reconocimiento

Pruebas preliminares

Rediseño

Diseño final

Pruebas finales

Page 146: Tesis

143

Diseño de etapa

acondicionamiento

40KHz

Construcción de etapa

acondicionamiento 40KHz

Diseño de etapa

acondicionamiento 200KHz

Construcción de etapa

acondicionamiento 200KHz

Plataforma de trabajo

Técnica de reconocimiento

Evaluación del software

Implementación del algoritmo

de reconocimiento

Pruebas preliminares

Rediseño

Diseño final

Pruebas finales

En la presentación 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 sólo existe un retraso de dos

semanas.

9.1.2 Costos y Recursos

Tabla 6 Tabla de Costos

Objeto

Costo Unitario

(Pesos) Cantidad

Costo Total

(Pesos)

Transductores 40Khz $30.000 4 $120.000

Transductores 200Khz $125.000 4 $500.000

Cable de Programación $57.500 1 $57.500

Rabbit Core 3160 $92.000 1 $92.000

Componentes Etapa adquisición $150.000 1 $150.000

Papelería $12.000 4 $48.000

Inscripción a el IEEE Computer

Society $117.500 1 $117.500

Page 147: Tesis

144

Artículos $0 50 $0

Libros $250.000 3 $750.000

Memoria USB $120.000 1 $120.000

Tarjeta de Alimentación $40.000 1 $40.000

Fuente de voltaje $8.0000 1 $80.000

Protoboard $20.000 1 $20.000

Multimetro $400.000 1 $400.000

Analizador de estados lógicos $3’500.000 1 $3’500.000

Osciloscopio $3’000.000 1 $3’000.000

Impresora $340.000 1 $340.000

Computador personal $3’250.000 1 $3’250.000

Licencia C $770.984 1 $770.984

Licencia Eagle $3’000.000 1 $3’000.000

Fabricación de la tarjeta impresa $35.000 4 $140.000

Horas del Director $40.000 96 $3’840.000

Horas de los investigadores $20.000 1240 $24’800.000

Figuras geométricas (metálicas) $15.000 10 $150.000

Figuras geométricas (madera) $5.000 4 $20.000

Estructura de los transductores $30.000 1 $3.0000

Otros $300.000 1 $300.000

Total (Pesos) $ 45’635.984

Page 148: Tesis

145

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 desempeño 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 requería de operaciones

matemáticas complejas, por lo que fue suficiente con las librerías matemáticas 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 visión. 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

mínimo 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 limitación 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 ningún objeto a reconocer el sistema lo confunde con el centroide

que tenga menor valor, para este caso el cono, debido a que la geometría que este

posee dispersa la señal 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

fabricación en comparación con la de los demás fue más compleja para nuestro caso

en particular, lo cual produjo algunas irregularidades en su superficie afectando así

las mediciones.

Page 149: Tesis

146

11 RECOMENDACIONES

Realizar más estudios de la señal ultrasónica. Analizar cómo el espectro del eco es

afectado, qué otros parámetros pueden ser extraídos de la envolvente con

información útil, analizar como el ciclo útil de la señal 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 tamaños.

Aumentar el número de transductores empleados.

Estudiar el rendimiento de otras técnicas como las redes neuronales.

Realizar una interfaz dinámica desde el software de visualización, la cual permita

escoger al usuario por medio del computador los parámetros 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

caracterización de superficies, clasificación de materiales, pruebas no destructivas

de materiales entre otras.

Page 150: Tesis

147

12 BIBLIOGRAFIA

Para los antecedentes la justificación y el marco teórico se revisaron, como documentos

básicos:

[1] ACOSTA, C.; LEÓN, J. Sistema para caracterizar mapas utilizando ultrasonido.

Barranquilla, 2003, 250p. Trabajo de Grado (Ingeniero Electrónico). Universidad del Norte.

Departamento de Ingeniería eléctrica y electrónica.

[2] AVENDAÑO, J.; MANOTAS F. Sistema de medición de posición de objetos, a través

de ultrasonido, utilizando un microcontrolador. Barranquilla, 2002, 293p. Trabajo de Grado

(Ingeniero Electrónico). Universidad del Norte. Departamento de Ingeniería eléctrica y

electrónica

Para los antecedentes y el marco teórico se revisó, como documento básico:

[3] CAICEDO B., Eduardo; Arquitectura de un sistema sensorial para identificación de

partes y ensamblaje robotizado. Madrid, 1992, p 124-146. Tesis de Maestría. Universidad

Politécnica de Madrid

Para los antecedentes y el marco teórico 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:

Page 151: Tesis

148

[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 teórico se revisó, como documento de apoyo:

[9] Ruiz, Alberto; Apuntes de Sistemas de percepción y Visión por computador. Junio 15

de 2004. Universidad de Murcia, Departamento de Informática y Sistemas. p53-57.

Disponible en Internet: http://dis.um.es/˜alberto

Para los antecedentes y la justificación 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 justificación se revisó, como documento de apoyo:

[11] _________. Sensors and Video products. Disponible en Internet:

http://www.jameco.com

[12] _________. Application Note: Line Scan Imaging Basics. DALSA technology with

vision. Disponible en Internet: http://vfm.dalsa.com/support/appnotes /00541-00_03-

32_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

Page 152: Tesis

149

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

Page 153: Tesis

150

ANEXOS

Page 154: Tesis

151

ANEXO A MANUAL DEL USUARIO

INSTRUCCIONES DE USO

Antes de iniciar, verifique que tiene en su poder todos los elementos del sistema: cable de

alimentación, cable para el puerto serial, dispositivo hardware, la estructura y el programa

del software.

Conecte la fuente de alimentación a la red eléctrica de 110V, encienda el hardware con el

switch y conecte el cable de comunicación serial, como se muestra en la figura 70 y 71

respectivamente.

Figura 70 Encendido del Hardware

Conecte el cable serial al hardware y al PC, realice esta conexión solamente como lo

indican los conectores del cable, asegúrese que el conector de la tarjeta (DIAG) quede bien

conectado.

ON/OFF del sistema

12/24 V

Page 155: Tesis

152

Los transductores de 40KHz se conectan a Tx1 y Rx1 y los transductores de 200KHz a Tx2

y Rx2.

Figura 71 Conector serial

Encienda el computador y cargue el software de visualización.

Si desea trabajar con los transductores de 40Khz cambie el switch de alimentación 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 librería que carga el programa por defecto en la opción “Ejecutar”

“Librería” (escogiendo la frecuencia correspondiente) y luego proceda a realizar el

reconocimiento simple o completo según los datos de interés que desee conocer.

También puede volverlo a entrenar cada uno de los objetos, en la opción “Ejecutar”

“Entrenamiento”.

Cable de

programacion

200KHz / 40KHz

Page 156: Tesis

153

Si desea entrenar un nuevo objeto, o remplazar uno ya existente, colóquelo en la base

correspondiente a la frecuencia que este trabajando y luego en el submenú “Entrenamiento”

envíelo a entrenar, luego en OBJETO ENTRENADO asígnele un nombre a la figura y

luego guárdela en la opción GUARDAR. Luego proceda a enviar la librería y luego envíelo

a reconocer.

MANEJO DEL SOFTWARE

El software de visualización posee una serie de menús y submenús que realizan diferentes

actividades, que se explicarán a continuación.

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 información almacenada del mismo y el número 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 máximo valor que puede tomar un

objeto es 100.

c) Ejecutar, Reconocimiento Completo

Además de reconocer el objeto y la frecuencia de trabajo, se calcula la

desviación estándar de cada parámetro, 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 añadir un nuevo objeto en la base de datos existente, utilice esta opción.

Asígnele un nombre al objeto entrenando en el cuadro de texto OBJETO

ENTRENADO, adjunte su imagen correspondiente y añada información

adicional del objeto, luego guárdelo.

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, Librería

Page 157: Tesis

154

Esta opción le permite enviar a la base de datos del microprocesador los

parámetros (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 LIBRERÍA.

f) Ejecutar, Gráficar

Esta función permite gráficar los centroides de los objetos que se encuentran en

la base de datos.

En la parte superior izquierda de la pantalla aparece la opción de escoger la

frecuencia a la cual se desea gráficar los centroides.

Luego de seleccionar las figuras y los parámetros, se envía a gráficar los

centroides.

Para limpiar la gráficar presione el botón LIMPIAR.

g) Complemento, Modo Manual

Inicialmente debe cambiar el jumper que indica el modo manual el modo PC

desde la tarjeta, luego presione reset, envíe la librería y cuando presione la

opción Modo Manual desde el software el buffer de recepción estará esperando

los datos, los cuales se envían presionando el botón STAR desde la tarjeta.

Al activar esta opción se desactivan las demás funciones que manejen

comunicación serial, con el fin de evitar conflicto.

h) Complemento, Calculo Energía Tx y Rx

En la parte izquierda de la pantalla se encuentra la energía 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 opción de

realizar el cálculo de un nuevo material, introduciendo su densidad acústica y

velocidad en los textos correspondientes.

i) Ayuda, Acerca de

Acerca del UPRS.

j) Ayuda, Contenido

Page 158: Tesis

155

Explica de manera detallada la función de cada submenú del programa.

Eligiendo el menú en donde se encuentra la función de la cual desea obtener

más información y luego presionando sobre el evento de interés, se desplegará

una explicación 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 función del software se activa con un sólo 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 algún conflicto a la hora de ejecutar alguna operación, resetee

la tarjeta, presionando el botón RESET.

e) Si el programa esta ejecutando la opción Modo Manual y se desea cambiar a

modo PC es necesario cerrar el modo manual en el botón que indica “Cerrar

modo manual” para que se activen las demás funciones.

Page 159: Tesis

156

ANEXO B ESQUEMATICO DE LATARJETA DE ADQUISICION

Figura 72 Esquemático de la Tarjeta de Adquisición

Figura 73 Esquemático de la Tarjeta de Alimentación

Page 160: Tesis

157

ANEXO C ARTE DELCIRCUITO IMPRESO

Circuito Impreso de la Tarjeta de adquisición

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

A)

B)

Page 161: Tesis

158

Circuito Impreso de la Tarjeta de Alimentación

Figura 75 Circuito Impreso de la Tarjeta de Alimentación

Page 162: Tesis

159

ANEXO D CODIGO DEL MICROPROCESADOR

/********************************************************************

Prototipo para el Reconocimiento de Objetos con Ultrasonido en

Aplicaciones de Inspección Mediante Patrones Determinados.

Programa de Ingeniería Electrónica

Universidad del Norte, 2005.

Descripción

===========

Instrucciones

============

*********************************************************************/

#class auto

/** Definiciones **/

#define MUX_A0_IN 0 // Selección del Transductor

#define MUX_A1_IN 2 //

#define PGA1_A0_IN 3 // Selección de la ganancia del primer amplificador

#define PGA1_A1_IN 4 //

#define PGA2_A0_IN 5 // Selección de la ganancia del segundo amplificador

#define PGA2_A1_IN 7 //

#define frecuencia 0 // Selección 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 // Señal proveniente del detector de umbral

#define cs 2 // (Chip Selection) Habilita la conversion del ADC

#define start 6 // Pulsador para iniciar el procesamiento

#define modo 7 // Seleccion del Modo, Manual o PC.

Page 163: Tesis

160

#define AINBUFSIZE 1023 // Tamaño del Buffer de entrada del puerto serial

A.

#define AOUTBUFSIZE 15 // Tamaño 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 cap_max 11 // Número max de objetos

#define tf 0 // Tiempo de vuelo

#define amp1 1 // Amplitud en +50us

#define amp2 2 // Amplitud en +100us

#define amp3 3 // Amplitud en +150us

#define amp4 4 // Amplitud en +200us

#define muestras 300 // Número de muestras para entrenar el sistema

#use "spi.lib" // 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; // número de mediciones para reconocer

int med_ob[11]; // 11 por que la variable cap_max tiene

ese valor. contiene el número 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 número de posibilidades

int med_max; // contiene temporalmente el número de veces que aparece un objeto

cuando se hace una medicion

int f; // indica la frecuencia para la variable que contiene el

número de objetos

Page 164: Tesis

161

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

int test1[muestras][5],test2[muestras][5]; // Se almacenan las muestras para el

entrenamiento

// 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]; // Número de objetos almacenados

int serial_rx; // Almaceno los datos del puerto Serial A

char serial_tx;

/** Funciones **/

void pwm1();

void pwm2();

int adc();

float clasificacion();

int entrenamiento();

int libreria();

/*********************** Programa Principal ***********************/

void main()

obj[1]=4; // Número de objetos base para 40

obj[0]=4; // Número 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;

Page 165: Tesis

162

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;

Page 166: Tesis

163

centro3[3][amp1]=342;

centro3[3][amp2]=502;

centro3[3][amp3]=863;

centro3[3][amp4]=1032;

/** Configuracion de los puertos **/

WrPortI(WDTTR, NULL, 0x51); // Deshabilita el WatchDog

WrPortI(WDTTR, NULL, 0x54);

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

Page 167: Tesis

164

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

Page 168: Tesis

165

else

libreria();

inicio:

if (BitRdPortI(PFDR,frecuencia)==1) f=1;

else f=0;

for(i=0;i<obj[f];i++) // borra las variables

med_ob[i]=0;

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++) // número 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

Page 169: Tesis

166

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) f=1;

else f=0;

for(l=1;l<obj[f];l++) // encontrando cual fue el objeto con mayor puntaje

if (med_ob[max]>med_ob[l])

Page 170: Tesis

167

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

******************************/

Page 171: Tesis

168

/***************************** ******************************/

/*************************************************************************

*****/

/*************************************************************************

*****/

/***************** 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 señal de 40 khz

ld b,0x0f // 15 pulsos para la señal 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 señal de 200khz

ld b,0x32 // 50 pulsos para la señal de 200k

#endasm

#asm

ini:

Page 172: Tesis

169

ld a,0x10 // 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 a,0x00

ioi ld(PFDR),a

ld c,d

cero:

dec c

jp 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 ); // 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;

#asm

ld d,0x1d // 0x1d señal de 40 khz

ld b,0x0f // 15 pulsos para la señal de 40k

#endasm

else

Page 173: Tesis

170

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 señal de 200khz

ld b,0x32 // 50 pulsos para la señal 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 a,0x00

ioi ld(PFDR),a

ld c,d

cero:

dec c

jp nz,cero

djnz ini // Decrementa registro B y salta a ini si no es 0.

#endasm

BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off

/*************************************************************************

*****/

/*********************** Conversión Análogo-Digítal **********************/

/*************************************************************************

*****/

int adc()

char adc_reading1[2];

Page 174: Tesis

171

char adc_reading2[2];

char adc_reading3[2];

char adc_reading4[2];

BitWrPortI(PDDR, &PDDRShadow, 1, busy ); // Led on

SPIinit();

// Muestra a 50us

BitWrPortI(PGDR, &PGDRShadow, 0, 2); // chip select low

SPIRead(adc_reading1, 2);

BitWrPortI(PGDR, &PGDRShadow, 1, 2); // chip select high

// Muestra a 100us

BitWrPortI(PGDR, &PGDRShadow, 0, 2); // chip select low

SPIRead(adc_reading2, 2);

BitWrPortI(PGDR, &PGDRShadow, 1, 2); // chip select high

// Muestra a 150us

BitWrPortI(PGDR, &PGDRShadow, 0, 2); // chip select low

SPIRead(adc_reading3, 2);

BitWrPortI(PGDR, &PGDRShadow, 1, 2); // chip select high

// Muestra a 200us

BitWrPortI(PGDR, &PGDRShadow, 0, 2); // chip select low

SPIRead(adc_reading4, 2);

BitWrPortI(PGDR, &PGDRShadow, 1, 2); // 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 **********************/

Page 175: Tesis

172

/*************************************************************************

*****/

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

Page 176: Tesis

173

min1=0;

min2=0;

if (BitRdPortI(PFDR,frecuencia)==1) f=1;

else f=0;

for(l=1;l<obj[f];l++)

if (distan[min1][0]<distan[l][0]) // Encontrando la distancia mas pequeña para el

primer Tx

min1=min1;

else

min1=l;

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

if(serial_rx==100) // Si se escogio el modo ' Reconocimiento

Completo ' transmite los sgtes datos

for(j=0;j<1;j++) // 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));

Page 177: Tesis

174

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

/*************************************************************************

*****/

Page 178: Tesis

175

int entrenamiento()

int m;

unsigned long sum1[1][5]; // Sumatoria de los valores para cada parametro

unsigned long sum2[1][5]; // 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];

Page 179: Tesis

176

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) f=1;

else f=0;

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;

Page 180: Tesis

177

else // Si estas trabajando a

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;

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

/* Transmisión 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

Page 181: Tesis

178

/* Transmisión 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 ************************/

/*************************************************************************

*****/

/*************************************************************************

*****

Descripción:

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

Page 182: Tesis

179

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

Page 183: Tesis

180

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++) // retardo necesario para que se guarde el dato del

puerto serial

while(1)

centro3[obj[0]-1][i]=serAgetc()*256;

for(m=0;m<10000;m++) // retardo necesario para que se guarde el dato

del puerto serial

centro3[obj[0]-1][i]=centro3[obj[0]-1][i]+serAgetc();

Page 184: Tesis

181

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;

salir:

BitWrPortI(PDDR, &PDDRShadow, 0, busy ); // Led off

Page 185: Tesis

182

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

Page 186: Tesis

183

For j = 0 To ((frmentrenamiento.variable * 25) - 1) ' se calcula la

sumatoria de la formula de la desviacion estandar

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.varianza(4) + (Moduleserie.a4(j) -

Moduleserie.promedio(4)) ^ 2)

Next j

Moduleserie.varianzad(0) = Sqr((CDbl(Moduleserie.varianza(0)) /

((frmentrenamiento.variable * 25) - 1))) ' se divide la sumatoria entre el número total de

muestras y se saca la raiz cuadrada

Moduleserie.varianzad(1) = Sqr((CDbl(Moduleserie.varianza(1)) /

((frmentrenamiento.variable * 25) - 1)))

Moduleserie.varianzad(2) = Sqr((CDbl(Moduleserie.varianza(2)) /

((frmentrenamiento.variable * 25) - 1)))

Moduleserie.varianzad(3) = Sqr((CDbl(Moduleserie.varianza(3)) /

((frmentrenamiento.variable * 25) - 1)))

Moduleserie.varianzad(4) = Sqr((CDbl(Moduleserie.varianza(4)) /

((frmentrenamiento.variable * 25) - 1)))

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

Page 187: Tesis

184

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

Page 188: Tesis

185

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

Page 189: Tesis

186

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) 'gráfica

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 = "NÚMERO = '" & 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) 'gráfica

Page 190: Tesis

187

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 gráfica

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 = "NÚMERO = '" & 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

Page 191: Tesis

188

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

Page 192: Tesis

189

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 = "CÓDIGOS = '" & 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)

Page 193: Tesis

190

buscar2 = "CÓDIGOS = '" & 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)

Page 194: Tesis

191

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

Page 195: Tesis

192

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 'si la frecuencia fue 40KHz busca el codigo del objeto en la

tabla de 40KHz

Text5.Text = "40KHz"

tx = Trim(Moduleserie.vectorcods40)

Page 196: Tesis

193

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

dbOpenDynaset)

buscar2 = "CÓDIGOS = '" & 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 = "CÓDIGOS = '" & 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 número 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

Page 197: Tesis

194

If cambios12 = True Then 'si la frecuencia fue 200KHz busca el codigo del objeto en

la tabla de 200KHz

Text5.Text = "200KHz"

tx = Trim(Moduleserie.vectorcods200(0))

Set frmentrenamiento.REGISTRO200 =

frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)

buscar2 = "CÓDIGOS = '" & 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 = "CÓDIGOS = '" & 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 número 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

Page 198: Tesis

195

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)

Page 199: Tesis

196

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" 'añade el los menu a la lista

List1.AddItem "Reconocimiento Completo"

List1.AddItem "Entrenamiento"

List1.AddItem "Gráficar"

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"

Page 200: Tesis

197

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 además del objeto reconocido por el par de

transductores ultrasónico, el número 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 opción además de reconocer el objeto, permite calcular la desviación

estándar de cada parámetro (Tf, A1, A2, A3, A4). El número de mediciones que se toman

para determinar la desviación estándar es el número de objetos de la base de datos,

multiplicados por 25. Por ejemplo si existen 4 objetos la cantidad de mediciones por

parámetro sería 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 parámetros del

objeto entrenado (Tf, A1, A2, A3, A4), luego se le asigna un nombre al objeto entrenado y

por último se envía a la base de datos en la opción guardar."

ElseIf List1.ListIndex = 3 Then

Text1.Text = "Permite gráficar los centroides de los objetos almacenados en la base de

datos. Primero escoja la frecuencia (40KHz, 200KHz), luego los objetos a gráficar y los

parametros. Esta opción le permite ver al usuario que parametros (Tf, A1, A2, A3, A4) son

suficientes para el reconocimiento "

Page 201: Tesis

198

ElseIf List1.ListIndex = 4 Then

Text1.Text = " Esta opción 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 acústica, la energía transmitida y la energìa 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

Page 202: Tesis

199

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 número40 As Integer 'lleva el conteo del número de objeto que hay en la tabla de

40KHz

Public número200 As Integer 'lleva el conteo del número 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

Page 203: Tesis

200

MsgBox "Asignele un nombre al objeto entrenado en la opción OBJETO ENTRENADO

y luego envielo a la base de datos en la opcion GUARDAR", vbOKOnly, "Información"

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 número de

objetos

número40 = número40 + 1

REGISTRO40.AddNew ' añade 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!CÓDIGOS = variable40

REGISTRO40!NÚMERO = número40

REGISTRO40.Update

Page 204: Tesis

201

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 número 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 'cierra el if de los nomatch

End If 'cierra el de texto vacio

End If 'cierra el if de la frecuencia

Page 205: Tesis

202

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

número200 = número200 + 1 'si no existe se guarda normas y se aumenta el número de

objetos

REGISTRO200.AddNew ' añade 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!CÓDIGOS = variable200

REGISTRO200!NÚMERO = número200

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

Page 206: Tesis

203

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 número 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

Page 207: Tesis

204

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 (frmgráfica)

Public comparar1 As String

Public comparar2 As String

Page 208: Tesis

205

Public ejex As Integer

Public ejey As Integer

Private Sub Command1_Click()

Dim i As Integer

Dim h As Integer

Dim NÚMERO As Integer

Picture1.DrawWidth = 7

For i = 1 To 30

If Check1(i).Value = 1 Then

NÚMERO = NÚMERO + 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

Page 209: Tesis

206

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) 'gráfica

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 gráfica

End If

Page 210: Tesis

207

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

Page 211: Tesis

208

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 gráficados

Picture1.Cls

If frecuencia.ListIndex = 0 Then 'limpia el cuadro que muestra el color de los puntos para

40KHz

Page 212: Tesis

209

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

frmgráfica.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" 'añade 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 gráficar", vbOKOnly, "advertencia"

End Sub

Private Sub Form_Unload(Cancel As Integer)

frmprincipal.Picture3.Visible = True

Page 213: Tesis

210

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 = "NÚMERO = '" & 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 gráficar", vbOKOnly,

"Advertencia"

Else

For i = 1 To 30

Check1(i).Caption = ""

Page 214: Tesis

211

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 = "NÚMERO = '" & 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 gráficar", 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

Page 215: Tesis

212

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)

Page 216: Tesis

213

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

Page 217: Tesis

214

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

Page 218: Tesis

215

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 = "NÚMERO = '" & 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 = "NÚMERO = '" & u & "'"

frmentrenamiento.REGISTRO200.FindFirst buscar7

Check(u - 1).Caption = frmentrenamiento.REGISTRO200!OBJETOS

Check(u - 1).Visible = True

Next u

Page 219: Tesis

216

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 = "NÚMERO = '" & Trim(i) & "'"

Page 220: Tesis

217

frmentrenamiento.REGISTRO40.FindFirst buscar5

frmentrenamiento.REGISTRO40.Edit 'limpia todos los codigos de los objetos en la tabla

frmentrenamiento.REGISTRO40!CÓDIGOS = "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 sólo

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

Page 221: Tesis

218

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!CÓDIGOS = 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

Page 222: Tesis

219

Set frmentrenamiento.REGISTRO200 =

frmentrenamiento.BASE.OpenRecordset("200KHz", dbOpenDynaset)

For i = 1 To frmprincipal.p Step 1

'enviar1 = Trim(i)

buscar5 = "NÚMERO = '" & Trim(i) & "'"

frmentrenamiento.REGISTRO200.FindFirst buscar5

frmentrenamiento.REGISTRO200.Edit 'limpia todos los codigos de los objetos en la

tabla

frmentrenamiento.REGISTRO200!CÓDIGOS = "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 sólo

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)

Page 223: Tesis

220

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!CÓDIGOS = 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

Page 224: Tesis

221

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" 'añade 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

Page 225: Tesis

222

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

Page 226: Tesis

223

Private Sub Form_Load()

frmnuevomaterial.WindowState = 2

frmprincipal.Picture3.Visible = False

escoger.AddItem "Acero" 'añaden los item a la caja

escoger.AddItem "Aluminio"

escoger.AddItem "Madera"

escoger.AddItem "Aire"

escoger.AddItem "Polietileno"

'escoger.AddItem "Añada 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 = "Añada un nuevo material" Then

'Unload frmnuevomaterial 'si se escoje nuevo material se carga el formulario

'Load frmnuevomaterial

'End If

End Sub

Page 227: Tesis

224

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 'sólo permite introducir números

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)

Page 228: Tesis

225

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

Page 229: Tesis

226

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

Page 230: Tesis

227

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 'identifica la frecuencia a la que se reconoce

cambios11 = True

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

vectorcods40 = vectorcods40 + 1

For V = 0 To (frmentrenamiento.variable40 - 1) Step 1 'guarda en una variable el número

de veces que identifico que objeto era por cada objeto

vectorporce(V) = vector1(V + 2)

Next V

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 número

de veces que identifico que objeto era por cada objeto

Page 231: Tesis

228

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

Page 232: Tesis

229

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 gráficar_Click() 'carga el formulario donde se muestran los datos de las

gráficas

Unload frmgráfica

Load frmgráfica

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

Page 233: Tesis

230

'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 número 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

'/////////////////////////////////////////////////////////////////////////////////'

Page 234: Tesis

231

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 = "NÚMERO = '" & Trim(Y) & "'"

frmentrenamiento.REGISTRO40.FindFirst buscar2

If frmentrenamiento.REGISTRO40!CÓDIGOS <> 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 = "NÚMERO = '" & Trim(Y) & "'"

frmentrenamiento.REGISTRO200.FindFirst buscar2

If frmentrenamiento.REGISTRO200!CÓDIGOS <> 0 Then 'se inicializa la variable del

cod del objeto con los objetos que tengan codigo

frmentrenamiento.variable200 = frmentrenamiento.variable200 + 1

Page 235: Tesis

232

frmentrenamiento.variable40 = ñ

frmentrenamiento.variable200 = p

End If

Next Y

frmentrenamiento.número40 = ñ

frmentrenamiento.número200 = 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

Page 236: Tesis

233

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

Page 237: Tesis

234

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

Page 238: Tesis

235

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

Page 239: Tesis

236

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, "Información"

Page 240: Tesis

237

'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 "gráfica" 'enlaza los botones de la barra de herramienta a los procedimientos

gráficar_Click

Case "complejo"

rctocompleto_Click

Case "simple"

rctosimple_Click

Case "entrenamiento"

entrenamiento_Click

Page 241: Tesis

238

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 número 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

Page 242: Tesis

239

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

Page 243: Tesis

240

ANEXO F HOJA DE ESPECIFICACIONES DE LOS DISPOSITIVOS

RABBIT CORE 3610

Page 244: Tesis

241

CONVERTIDOR ANALÓGICO - DIGITAL AD7475

Page 245: Tesis

242

VOLTAJE DE REFERENCIA AD780

Page 246: Tesis

243

AMPLIFICADORES DE GANANCIA PROGRAMABLE PGA204 - 205

Page 247: Tesis

244

AMPLIFICADOR DE PROPÓSITO GENERAL TL084 – 082

Page 248: Tesis

245

COMPARADOR LM311

Page 249: Tesis

246

CONVERTIDOR DC – DC LT1054

Page 250: Tesis

247

MULTIPLEXOR MPC509

Page 251: Tesis

248

BUFFER CD74HCT365

Page 252: Tesis

249

TRANSDUCTORES DE 40KHZ

Page 253: Tesis

250

TRANSDUCTORES DE 200KHZ

Page 254: Tesis

251

RESISTENCIAS

Page 255: Tesis

252

Reguladores LM7805, LM7824, LM7812

Page 256: Tesis

253

Regulador LM317

Page 257: Tesis

254

Capacitores