Post on 23-Dec-2015
description
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
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
NOTA DE ACEPTACIÓN
_________________________
_________________________
_________________________
_________________________
___________________________________
Firma presidente del jurado
___________________________________
Firma del jurado
__________________________________
Firma del jurado
Barranquilla, 05 de diciembre del 2005.
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.
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
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
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
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
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
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
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
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
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
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
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.
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
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
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.
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].
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].
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.
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.
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.
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.
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)
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
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.
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
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
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.
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.
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
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.
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
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.
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.
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
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.
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]
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]
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.
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
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)
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) * .
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
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)
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
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.
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
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
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*.
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
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
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.
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.
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]
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
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
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
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
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.
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
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.
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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)
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.
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.
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
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.
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.
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.
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.
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.
80
Figura 25 Etapa de 12V
Figura 26 Etapa 5V
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.
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:
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.
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
. . . . . .
. . . . . .
. . . . . .
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
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.
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.
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
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
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
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
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
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
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
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”.
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
110
Figura 50 Aspecto físico del todo el sistema
Hadware del
sistema
Estructura
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.
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.
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.
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.
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.
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.
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
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
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
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
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)
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
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)
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
125
B)
C)
Amplitud del
cilindro 40Khz
Amplitud de la
esfera 40Khz
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
127
B)
C)
Amplitud del
cilindro 200Khz
Amplitud de la
esfera 200Khz
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
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
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
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)
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.
133
Figura 66 Señal envolvente de la jeringa A) Con la aguja B) Sin la aguja
A)
B)
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.
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
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
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
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.
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
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
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
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
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
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
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.
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.
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:
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
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/
150
ANEXOS
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
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
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
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
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.
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
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)
158
Circuito Impreso de la Tarjeta de Alimentación
Figura 75 Circuito Impreso de la Tarjeta de Alimentación
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.
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
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;
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;
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
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;
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
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])
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
******************************/
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:
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
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];
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 **********************/
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));
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));
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 **********************/
/*************************************************************************
*****/
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];
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;
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
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()
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)
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();
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
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))
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")
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")
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
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
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
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
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)
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)
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
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)
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
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
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)
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"
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 "
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
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
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
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
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
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
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
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
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
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
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
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
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 = ""
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
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)
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
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
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
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) & "'"
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
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
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)
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
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
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
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
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)
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
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
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
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
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
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
'/////////////////////////////////////////////////////////////////////////////////'
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
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
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
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
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
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"
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
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
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
240
ANEXO F HOJA DE ESPECIFICACIONES DE LOS DISPOSITIVOS
RABBIT CORE 3610
241
CONVERTIDOR ANALÓGICO - DIGITAL AD7475
242
VOLTAJE DE REFERENCIA AD780
243
AMPLIFICADORES DE GANANCIA PROGRAMABLE PGA204 - 205
244
AMPLIFICADOR DE PROPÓSITO GENERAL TL084 – 082
245
COMPARADOR LM311
246
CONVERTIDOR DC – DC LT1054
247
MULTIPLEXOR MPC509
248
BUFFER CD74HCT365
249
TRANSDUCTORES DE 40KHZ
250
TRANSDUCTORES DE 200KHZ
251
RESISTENCIAS
252
Reguladores LM7805, LM7824, LM7812
253
Regulador LM317
254
Capacitores