UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERIA
DEPARTAMENTO DE INGENIERIA EN ELECTRICIDAD
“ESTUDIO, OPTIMIZACION Y CONSTRUCCION DE SISTEMAS DE
MONITOREO, SEGUIMIENTO Y/O ALARMA BASADO EN TELEFONIA MOVIL A BAJO COSTO”.
Richard Francisco Ojeda Ilnao 2008
UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERIA
DEPARTAMENTO DE INGENIERIA EN ELECTRICIDAD
“ESTUDIO, OPTIMIZACION Y CONSTRUCCION DE SISTEMAS DE
MONITOREO, SEGUIMIENTO Y/O ALARMA BASADO EN TELEFONIA MOVIL A BAJO COSTO”.
Trabajo de titulación presentado en conformidad a los requisitos para obtener el título de Ingeniero de Ejecución en Electricidad. Profesor Guía: Rolando Aguilar Cárdenas
Richard Francisco Ojeda Ilnao 2008
i
RESUMEN
En este trabajo se presenta el diseño de un sistema de alarma, utilizando un
microcontrolador NXP LPC2106, el que tiene como función: monitorear, controlar, y realizar las
tareas de comunicación del sistema.
El sistema de alarma diseñado permite escoger dos modos de funcionamiento. Que permite
conectar una gran variedad sensores que se pueden activar por medio de: cambio de la
temperatura ambiente (PT100 ~100Ω - Termistor ~10k Ω), detección de movimiento mediante
PIR (Pyroelectric Infrared), detección de vibraciones mediante medidores de aceleración,
detección de presión mediante sensores de presión tipo puente con desequilibrios de ±0.25% ó
±4%, detección capacitiva de personas o elementos por cambios de la permitividad eléctrica,
detección desde otros circuitos lógicos TTL, y/o circuitos análogos por medio de conversor A/D
de 1 MSPS.
El sistema de alarma permite informar al usuario final por medio de su teléfono móvil
que la alarma se ha activado ya sea por: mensajes SMS o una llamada de voz. Adicionalmente, el
sistema de alarma permite que el usuario final pueda controlar en forma remota y decidir una
determinada acción tal como abrir el canal de voz para escuchar que está sucediendo,
almacenamiento del audio por un periodo corto de tiempo, solicitar la toma y envío de una
fotografía e incluso grabar un video y/o activación de bocina.
Finalmente se desea destacar que existen dos canales de comunicación disponibles para el
teléfono móvil del usuario: por medio del teléfono móvil conectado al sistema de alarma
mediante su módulo GSM (siendo la limitante el tener una señal celular) y por medio del módulo
Bluetooth integrado al sistema de alarma, con un rango de distancia nominal de 100mts
extensible a 1000mts con antena opcional.
ii
ÍNDICE GENERAL
CAPÍTULO I. INTRODUCCION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.1 Identificación del problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2 Solución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3 Alcance del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
CAPÍTULO II. MICROCONTROLADOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1 Selección del Microcontrolador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2 Arquitectura ARM7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3 Familia ARM7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3.1 ARM7TDMI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.2 ARM7TDMI-S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.3 ARM7EJ-S. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.4 ARM720T. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Modulo de aceleración de memoria MAM. . . . . . . . . . . . . . . . . . . . . .
15
2.5 Herramientas de desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
CAPÍTULO III. ACONDICIONAMIENTO DE SEÑALES. . . . . . . . . . . . . . . . . . . . . .
18
3.1 Módulo Universal Transducer Interface (UTI). . . . . . . . . . . . . . . . . .
18
3.1.1 Características Generales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.2 Técnica de la tres señales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1.3 Técnica de las dos puertas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.4 El Oscilador Martín Modificado. . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.5 Comunicación con el microcontrolador. . . . . . . . . . . . . . . . . . . . .
28
3.2 Módulo ADC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.2.1 Características. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.2 Aproximaciones sucesivas (SAR). . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.2.3 El Registro de control del convertidor. . . . . . . . . . . . . . . . . . . . . . 33 3.2.4 Interfaz serial SPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2.5 Diagrama de conexión típico. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.3 Otras posibilidades de conexión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
CAPÍTULO IV. COMUNICACIÓN INALÁMBRICA BLUETOOTH. . . . . . . . . . . .
40
4.1 Generalidades del Protocolo Bluetooth. . . . . . . . . . . . . . . . . . . . . . . .
40
4.2 Ventajas de la tecnología Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.3 ¿Qué son los Protocolos?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.4 Protocolos fundamentales de Bluetooth. . . . . . . . . . . . . . . . . . . . . . . .
44
iii
4.4.1 Banda Base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.4.2 Protocolo de gestor de enlace (LMP). . . . . . . . . . . . . . . . . . . . . . . 46 4.4.3 Protocolo de adaptación y control del enlace lógico (L2CAP). . . . 46 4.4.4 Protocolo de descubrimiento de servicios (SDP). . . . . . . . . . . . . .
47
4.5 Protocolos de sustitución de cable. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.5.1 RFCOMM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.5.2 Protocolos de control de telefonía. . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6 Perfiles generales de Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.6.1 Perfil de acceso genérico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.6.2 Perfil de Puerto Serie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
CAPÍTULO V. MÓVILES GSM Y COMANDOS AT. . . . . . . . . . . . . . . . . . . . . . . . . .
56
5.1 GSM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
5.2 Comandos AT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
5.2.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2.2 Propósito de los comandos AT. . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2.3 Notación de los comandos AT. . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2.4 Ejecución de los comandos AT. . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
5.3 Mensajes SMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5.3.1 Definición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.2 Comandos AT de SMS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.3 Modo texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.3.4 Modo PDU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
CAPÍTULO VI. FUNCIONAMIENTO DEL SISTEMA. . . . . . . . . . . . . . . . . . . . . . . . .
71
6.1 Diagrama de bloques del sistema de alarma. . . . . . . . . . . . . . . . . . . .
71
6.1.1 Interfaz de Acondicionamiento de Señales. . . . . . . . . . . . . . . . . . . 73 6.1.2 La Interfaz Bluetooth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
6.2 Hardware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
6.3 Diagrama de bloque, flujo según aplicación. . . . . . . . . . . . . . . . . . . .
77
6.3.1 Interfaz Universal UTI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.3.2 Interfaz para señales análogas Conversor análogo/digital. . . . . . .
86
6.4 Activación de la alarma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
6.5 Aportes originales de este trabajo. . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
6.6 Trabajos Futuros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
iv
CAPÍTULO VII. CONCLUSIONES. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
BIBLIOGRAFÍA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
104
ANEXO A - Código fuente programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
106
ANEXO B - Características NXP LPC2106. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
B.1 Diagrama de bloques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 B.2 Descripción de pines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
129
ANEXO C - Esquemático y PCB del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
130
C.1 Esquemático del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 C.2 PCB del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132
ANEXO D - Características ADXL103. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133
D.1 Diagrama de bloques funcional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 D.2 Especificaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 D.3 Valores máximos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 D.4 Configuración de pines y descripción. . . . . . . . . . . . . . . . . . . . . . . . . . . 135
ANEXO E - Resumen de estado y resumen de comandos AT módulo Bluetooth . . . . . 136
E.1 Modos de operación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 E.2 Seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 E.3 Estado de operación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 E.4 Símbolos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 E.5 Categorías de los comandos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
138
CAPÍTULO I
INTRODUCCIÓN
1
1 Introducción
En este capítulo se presenta la introducción del proyecto de tesis “Estudio, optimización y
construcción de sistemas de monitoreo, seguimiento y/o alarma basado en telefonía móvil a bajo
costo”.
1.1 Identificación del problema
La percepción de los niveles de delitos de mayor connotación publica son dramáticamente
influenciados por los medios de comunicación. Un solo delito como un robo con características
extremadamente violentas y ampliamente difundidas, puede fácilmente incrementar el nivel de
inseguridad en una población, por un determinado periodo de tiempo.
Según estadísticas del ministerio del Interior de Chile, la Región de Magallanes y
Antártica Chilena presenta una tasa de denuncia promedio de 152.9 por cada 100 mil habitantes
para el periodo comprendido desde Enero del 2001 a Junio del 2006. Sin embargo las denuncias
de robo con fuerza y hurto simple representan mas del 60% de las denuncias (ver figura 1.1).
Estas denuncias se concentran principalmente en autos y casas. Sin embargo, actualmente no
existe en el mercado un sistema de monitoreo flexible de alarma optimizado a un usuario con
poder adquisitivo limitado.
Fig. 1.1. Distribución de tipos de denuncias en la región de Magallanes y Antártica Chilena.
2
Por otro lado, actualmente Chile ocupa el primer lugar en el uso de celulares en Latinoamérica.
La cantidad de celulares llegó en marzo del 2007 a una proporción de 6.1 aparatos activos por
cada 10 habitantes, según datos difundidos por el Instituto Nacional de Estadística. El masivo uso de
los celulares ha logrado penetrar incluso hasta los estratos socioeconómicos mas bajo, con una gran
gama de accesorios disponibles en el mercado local.
En este trabajo se propone el estudio, optimización y construcción de un accesorio universal
para diferentes modelos de celulares que permita convertir un celular en un sistema de (a)
monitoreo, (b) seguimiento, y/o (c) alarma.
1.2 Solución
El sistema de seguridad propuesto para este estudio considera el diseño de módulos compatibles
con diferentes modelos de celulares. El objetivo final es que todo usuario de telefonía móvil podría
en el futuro aumentar sus prestaciones de servicio como:
1. monitoreo de niños,
2. seguimiento de vehículos o personas,
3. sistema de alarmas de bajo costo activadas por:
o detección de movimiento (sensor infrarrojo)
o vibración (sensor de impactos)
o detección de aumento de temperatura sobre un nivel preprogramado
o capacitiva (detección de la presencia humana).
Los usuarios más beneficiados serian aquellos con menos recursos, que ven la compra de un
sistema de alarma y/o seguimiento dedicado como un bien de no fácil acceso.
3
1.3 Alcance del proyecto
El tamaño reducido del sistema, su gran flexibilidad y variedad de funcionalidades a diferentes
tipos de señales resulta en una amplia gama de posibles aplicaciones a detectar como:
1. Activación del sistema por cambios del nivel de sonido del ambiente: Este tipo de
función puede incorporar por ejemplo el monitoreo de bebés, quiebre de vidrios (autos,
casas y/o cabañas en localidades rurales pero con señal de telefonía móvil) y uso de fuerza
para abrir ventanas y/o puertas.
2. Activación del sistema por sensores de movimiento: El sistema detecta el
movimiento de personas basados en sensores infrarrojos conocidos como PIR
(Pyroelectric Infrared). Este tipo de función puede ser usado para el monitoreo de
espacios abiertos hasta alrededor de 15 metros de distancia.
3. Activación del sistema por sensores de vibraciones: El sistema detecta vibraciones
o impacto sobre objetos específicos basados en sensores de aceleración. Este tipo de
función puede ser usado desde el monitoreo de movimiento de un bebé y/o impacto sobre
un auto o caja fuerte.
4. Activación del sistema por sensores capacitivos: El sistema detecta cambios de la
constante dieléctrica en el medio ambiente en forma pasiva. Su gran ventaja con respecto
a los sensores de movimientos es su capacidad de monitoreo en espacios obstruidos por
objetos y la posibilidad de convertir el objeto que se desea proteger en parte del sensor.
Además su gran flexibilidad de instalación permite ser camuflado a un muy bajo costo.
Este tipo de función puede ser usado desde el monitoreo de casas hasta la protección de
objetos de alto valor como joyas, pinturas en un museo y obras de arte en general.
4
5. Activación del sistema por cambios de temperatura: Al sistema se pueden conectar
sensores de temperatura tales como PT100, PT1000 y termistores. Un cambio de
temperatura a un determinado nivel podría ser considerado como un posible incendio, mal
funcionamiento de un equipo y/o proceso.
6. Activación del sistema desde otro sistema digital y/o análogo: El convertidor A/D
y sus entradas digitales TTL 5V y 3.6 V permite conectar directamente otros sistemas
electrónicos para complementar al sistema. Por ejemplo un anemómetro podría ser usado
para detectar condiciones de viento extrema, un sensor de humedad o el convertidor A/D
para detectar un problema de baja tensión en un banco de condensadores de un lugar
remoto.
Sin embargo las posibilidades no terminan aquí. La activación del sistema permite una gran
variedad de opciones de la forma de interacción con el usuario final tales como:
1. Programar el discado automático a un segundo celular del sistema: Esto permite en
un tiempo muy reducido (alrededor de 10 segundos) informar al usuario final que algún
evento está sucediendo. Durante el llamado existe la posibilidad de monitorear el tiempo
y tecla presionada en el celular modem, lo que el microcontrolador del sistema puede
traducir en un comando para activar o desactivar una sirena, toma y envío de una foto de
lo que está sucediendo, grabado de audio o video, bloquear el sistema eléctrico de un
auto, etc.
5
2. Programar el envió de mensajes SMS (Short Message Service): Esto permite la
posibilidad de entregar mayores detalles sobre el origen específico que disparó la alarma.
En forma similar el usuario puede responder con un mensaje SMS, el que puede ser
interpretado por el microcontrolador para la ejecución de una acción similar a las
mencionadas en el punto 1. Programar el discado en modo de transferencia de datos: Esto
permitiría conectarse a un fax o modem para transferir el valor de una determinada
variable. Si una EEPROM se incluye en el sistema, se podría tener una datalogger remoto
con la capacidad de recuperar la información almacenada en un momento determinado.
CAPÍTULO II
MICROCONTROLADOR
6
2 Microcontrolador
Se ha decidido construir el sistema de alarma y/o monitoreo basado en un
microcontrolador por su versatilidad y bajo costo. El objetivo inicial es evitar la utilización de
PLCs (Programmable logic controller) debido a que su costo es superior al valor que debería
tener el sistema total terminado.
2.1 Selección del Microcontrolador
La mayoría de los microcontroladores modernos poseen en su interior un generador de
reloj integrado, memoria RAM y ROM/EPROM/EEPROM/FLASH. Adicionalmente, para
hacerlos funcionar necesitan una cantidad reducida de código para su configuración, alimentación
continua típicamente 1.8 V ó 3.3 V y cristal de sincronización. Adicionalmente según la
aplicación a la que se destine el microprocesador se puede encontrar un gran espectro de
dispositivos de entrada/salida, convertidores analógicos a digital, temporizadores, UARTs
(Universal Asynchronous Receiver-Transmitter) y buses de interfaz serie especializados como
I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) y CAN (Controller Area
Network).
Por este motivo, las principales familias que más se utilizan según su aplicación son los:
• MSP430 (Mixed Signal Processors)
• PIC (Peripheral Interface Controller)
• AVR (Advanced Virtual Risc)
• ARM (Advanced RISC Machine)
A continuación se detallan brevemente.
7
MSP430
El microcontrolador MSP430 de la empresa Texas Instruments es de ultra bajo consumo,
con un core de 16-Bit arquitectura RISC. Pueden correr hasta 8 Mhz y tiene un consumo de tan
solo 250uA por MIPS, lo que lo hace perfecto para dispositivos portátiles. Es posible, vía
software, configurar cada uno de los dispositivos que deberán desconectarse en forma
intermitente o permanente para la optimización del consumo energético.
Lo Positivo
• Muy bajo consumo: 250uA por MIPS
• Un producto muy desarrollado con una arquitectura limpia, permite portar código
a otro miembro de la familia MSP430 casi sin necesidad de modificación.
• Disponible en bajas cantidades a través de los distribuidores de Texas Instruments
• Muchas aplicaciones desarrolladas y códigos de ejemplo.
• Muy buen rango de periféricos: ADC y DAC de precisión, Comparadores,
OAMPs, LCD Drivers, SPI, UART, DMA.
• Extremadamente bajo costo por debajo del dólar americano en cantidades
industriales
Lo negativo
• Posee una arquitectura Von Neuman, las instrucciones se toman de 1 a 4 bytes y
utilizan de 1 a 6 ciclos de reloj.
• No existe versiones disponibles para aplicaciones de alta frecuencia (sobre 50
MHz)
8
PIC
Los microcontroladores PIC son unos de los más populares de 8-bit para aplicaciones de
a nivel de principiante y aplicaciones de poco requerimiento tecnológico. La empresa Microchip
tiene cientos de diferentes microcontroladores desde los pequeños en encapsulados SOT23 hasta
los 84-PLCC. Ellos pueden correr hasta 40Mhz y ejecutar instrucciones cada 4 ciclos de reloj.
Lo Positivo
• Los dispositivos como el PIC10Fxx llegan a costar $0.40 cuando se compran en
volúmenes.
• Software de desarrollo en assembler gratuito (MPLAB)
• Se encuentra una gran gama de dispositivos con diferentes tamaños de memorias y
cantidad de periféricos.
• Los puertos GPIO pueden entregar hasta 20mA, permitiendo manejar LED`s y
otros dispositivos directamente.
• Hay disponibles para rangos de temperaturas extendidos de -40 a +125ºC
Lo Negativo
• Escribir un programa en assembler es un arte que no muchos dominan y puede
extender el código a cientos de líneas.
• Algunos de los nuevos dispositivos tienen bugs de hardware y no son tan estables
como los antiguos OTP (One-Time-Programmable).
9
ARM
Los microcontroladores ARM [1] son dispositivos de altas prestaciones, con un core
RISC de 16/32bits. El mercado de los ARM es uno de los que ha crecido más rápido en cuanto a
microcontroladores se refiere. Los precios de los ARM son similares a los dispositivos de 8 bit,
sin embargo proveen mucho más poder de procesamiento y mayor número de periféricos que
cualquier dispositivo de 8 bit. Se encuentran disponibles desde distintos proveedores como:
Texas Instruments, Atmel, Philips, OKI, ST, Cirrus Logic, Analog Devices y otros.
Muchos expertos en el tema dicen que dentro de 5 años los ARM reemplazaran la
industria ocupada por la arquitectura 8051 en la mayoría de las aplicaciones. Actualmente la
arquitectura ARM está dominando en el uso de PDA y celulares inteligentes, y sus últimas
versiones están orientadas a los juegos como los Nintendos que requieren un gran potencial para
procesamiento de datos e imágenes.
Lo positivo
• Muy rápidos: la mayoría de los ARM7 trabajan al menos a 60 MHz reales (una
instrucción ejecutada por ciclo de reloj) y los ARM9 al menos desde 150MHz
siendo mucho más poderosos que los antiguos procesadores Intel 386.
• Bajo Consumo: Los ARM7 necesitan aproximadamente 0.5-1mA por Mhz.
• Gran rango de Periféricos: ADC, DAC, USB, SPI, UART, I2C, CAN, Ethernet,
SDRAM.
• Memoria Flash Interna: 32-512KB.
• Memoria Ram Interna: 4-64KB.
• Programación ISP (In-System Programming) sin necesidad de hardware adicional
pueden programarse incluso desde la puerta RS-232 de un computador personal.
• Acelerador de memoria por hardware con predicción de saltos.
10
Lo Negativo
• Complejo de utilizar para principiantes: Definitivamente no es un
microcontrolador con el que se puedan dar los primeros pasos para aprender
sobre microcontroladores sin un guía a nivel de hardware y/o software.
Comparando las características de cada uno de los tipos de microcontroladores antes
expuestos se eligió un microcontrolador de la arquitectura ARM, debido principalmente a que
integra un módulo de aceleración de memoria (MAM). Este módulo hace que la frecuencia de
trabajo real sea la velocidad máxima de trabajo.
El modelo elegido fue el NXP LPC2106 [2] de la empresa Philips y tiene las siguientes
características:
Procesador 16/32-bit ARM7TDMI-S [3].
64 kB de RAM estática en el chip.
128 kB memoria de programación flash en el chip. Ancho de 128-bit con
interfaz/acelerador habilitado para una velocidad máxima de operación a 60 Mhz.
Programación en el sistema (ISP) y programación en aplicación (IAP) en el chip por
medio de software. La programación flash tiene un tiempo de 1mseg por líneas de 512 B.
En un sector o en todo el chip se borra en 400 mseg.
Controlador de interrupciones vectorizadas con configuración de prioridades y
direcciones de vectores.
Múltiples interfases serial las que incluyen dos UARTs (16C550), bus I2C (400 kbit/s) y
SPI.
11
Dos temporizadores de 32-bit (7 canales de captura/comparación), un PWM (6 salidas),
reloj en tiempo real y Watchdog.
32 pines I/O de propósito general con 5 V de tolerancia con un encapsulado LQFP48 (7 ´
7 mm2).
60 Mhz máximo reloj de CPU disponible para programación en el chip con un tiempo de
configuración de 100 mseg.
Oscilador de cristal en el chip con un rango de operación de 1 Mhz a 30 Mhz.
Dos modos de bajo consumo de energía y de apagado
Procesador modo activo o modo apagado vía interrupción externa.
Activación/desactivación individual de función de periféricos para optimización de
energía.
Dos Fuentes de alimentación:
o CPU opera a un rango de tensión de 1.65 V a 1.95 V (1.8 V ± 8.3 %).
o I/O fuente de alimentación con un rango de 3.0 V a 3.6 V (3.3 V ± 10 %) con
pines I/O tolerantes a 5 V.
2.2 Arquitectura ARM
Se denomina ARM a una familia de microprocesadores RISC diseñados por la empresa
Acorn Computers en conjunto con la compañía Advanced RISC Machines Ltd., una empresa
derivada de la anterior.
El juego de instrucciones del ARM es similar al del MOS 6502, pero incluye
características adicionales que le permiten conseguir un mejor rendimiento en su ejecución.
12
Para mantener el concepto tradicional de RISC, se incluyó el comando de ejecución en un
tiempo optimizado, siendo por lo general en un ciclo. La característica más interesante es el uso
de 4 bits como código condicional en la parte superior de cada instrucción, haciendo que cada
instrucción pueda ser una condición.
Este corte permite aumentar el espacio para algunos desplazamientos en el acceso a la
memoria, pero también permite evitar caer en ciclos fuera de control cuando la aplicación sea
para pequeñas instrucciones condicionadas. Además el procesador ARM tiene algunas
características que son raras en otras arquitecturas consideradas RISC, como el direccionamiento
relativo, y el pre y post incremento en el modo de direccionamiento.
Tiene dos modos de funcionamiento: el ARMI con instrucciones que ocupan 4 bytes, más
rápidas y potentes (hay instrucciones que sólo están en este modo) pero con mayor consumo de
memoria y de energía. Y el modo THUMB, más limitado, con instrucciones que ocupan 2 bytes y
con menor consumo de energía.
Quizás en parte por el uso condicional de usar 4 bits adicionales por cada instrucción, los
procesadores más recientes traen una instrucción de 16 bits, llamada Thumb. Este pretende
disminuir la cantidad de código escrito. Así como mejorar la densidad del código, el rendimiento
puede ser superior a un código de 32 bits en donde el puerto de memoria o ancho del bus de
comunicaciones son menores a 32 bits. El primer procesador con la tecnología Thumb fue el
ARM7TDMI.
La arquitectura ARM esta basada en los principios RISC.
• Posee 37 registros de 32 bits (16 disponibles)
• Algunas microprocesadores incluyen memoria caché.
• Estructura del bus tipo Von Neuman (ARM7), tipo Harvard (ARM9).
• Tipos de datos de 8/16/32 bits.
• Estructura simple que proporciona una excelente velocidad y un bajo consumo de potencia
• Todas las familias de procesadores ARM comparten el mismo conjunto de instrucciones.
13
2.3 Familia ARM7
La familia ARM7 actualmente está formada por ARM7TDMI, ARM7TDMI-S, ARM7EJ
y ARM720T, cada uno de los cuales está dirigido a diferentes mercados; los que se describen a
continuación:
2.3.1 ARM7TDMI
ARM7TDMI es la versión más utilizada de la familia ARM7. Las siglas TDMI significan:
- T: “Thumb”, soporta esta extensión.
- D: “Debug-interface”.
- M: “Multiplier”, posee hardware multiplicador.
- I: “Interrupt”, la velocidad de interrupciones optimizadas.
Tiene una arquitectura de bus unificada, una lógica de depuración Embedded ICE-RT y
una Interfaz ETM (Embedded Trace Macrocell).
2.3.2 ARM7TDMI-S
Es la versión sintetizable del ARM7TDMI, con los mismos niveles de rendimiento y
características en conjunto. Está optimizado para las tendencias modernas de diseño donde
portabilidad y flexibilidad son clave, es decir, recorta el tiempo de entrega al mercado,
reduciendo el tiempo de desarrollo a la vez que aumenta la flexibilidad en diseño.
14
2.3.3 ARM7EJ-S
Es la versión sintetizable, incorpora las bondades del ARM7TDMI. Su principal
característica es que soporta una ejecución acelerada de Java y operaciones DSP. Emplea
tecnología ARM Jazelle.
2.3.4 ARM720T
Está recomendado para los sistemas que requieren un manejo completo de memoria
virtual y espacios de ejecución protegidos, este es el caso de aplicaciones de plataforma abierta
como Windows CE, Linux, Palm OS y Symbian OS. Los aspectos destacables de este procesador
son:
• Memoria caché de 8K
• MMU: unidad controladora de memoria.
• Buffer de escritura.
• Bus de interfaz AMBA AHB.
• Coprocesador de interfaz ETM para expansión del sistema y debug en tiempo real.
• Coprocesador para control interno de la memoria caché y la MMU.
• Memoria externa puede soportar procesadores adicionales o canales DMA, con pérdida mínima
de rendimiento.
15
2.4 Modulo de aceleración de memoria MAM
El Módulo del Acelerador de Memoria (MAM) es el encargado de optimizar la velocidad
de ejecución de instrucciones de la familia del LPC2100. Está presente en el bus local y se sitúa
entre la memoria Flash y la CPU (ARM). Básicamente permite acelerar el tiempo de acceso a la
Flash. La CPU es capaz de alcanzar una frecuencia de operación de 60 MHz, sin embargo la
memoria flash tiene un tiempo de acceso de 50ns (20 Mhz).
Debido a esto existen las siguientes posibilidades:
Solución 1. Ejecutar el programa en RAM.
Problema Escasa capacidad disponible
Solución 2. Memoria caché de instrucciones, almacena la zona de memoria más
reciente accedida.
Problema. Periférico complejo que consume un número elevado de
puertas lógicas.
MAM es un compromiso entre la complejidad de la caché y la facilidad para acceder la
CPU a la Flash.
Los modos de funcionamiento (ver figura 2.1) son:
o Deshabilitado (OFF): Los accesos a memoria se realizan directamente desde la
Flash.
o Parcialmente habilitado: Sólo los accesos a datos y los saltos se realizan
directamente desde la memoria flash.
o Habilitación total: Cada uno de los posibles accesos al módulo de memoria flash
están administrados por el MAM.
16
ARM7
MAM
FLASH
ARM7
MAM
FLASH
ARM7
MAM
FLASH
MAM Disabled
Sequencial Code
Branches & Code Data
Instruction Prefetch Enable
All Code & DataPresent in Latches
Instruction Prefetch Enable
a) b) c)
Fig. 2.1: Modos de funcionamiento MAM a) Deshabilitado, b) Parcialmente habilitado, c)
Habilitación total.
Un único acceso a la memoria flash puede cargar 4 instrucciones (modo ARM) o hasta 8
(modo Thumb). La memoria de programa está interpolada entre 2 bancos de memoria (ver figura
2.2), haciendo que durante la ejecución de un código secuencial, una fase de búsqueda se ejecuta
en un banco, mientras se preparan los siguientes 128 bits. Esto asegura que estarán listos una vez
que los últimos 128 bits se hayan ejecutado.
Este mecanismo funciona mejor en modo ARM dónde el uso de los códigos de condición
para provocar los saltos, hace que el flujo del programa se mantenga lineal la mayor parte del
tiempo. En el caso de bucles o saltos cortos, los buffers intermedios retienen las instrucciones que
serán re-ejecutadas si así son requeridas.
Fig. 2.2: La memoria FLASH es arreglada como dos bancos interpaginados con un ancho de
memoria de 128 bit.
17
2.5 Herramientas de desarrollo
Para el desarrollo de los programas se ha utilizado el software Keil µVisión 3, que
básicamente se trata de un compilador para lenguaje C, con la opción de herramientas tales como:
configuración del microcontrolador ARM LPC2106, depurador por simulación o en hardware,
programador y simulador de periféricos.
Se ha utilizado este software porque facilita la programación, la detección de errores en el
código y la simulación del funcionamiento de los programas. Cabe destacar que existe la
posibilidad de emular los periféricos existentes en el microcontrolador, y ver paso a paso los
procesos del programa.
Keil, permite escribir programas de más de 64 Kbytes, manejando de forma automática la
paginación que se haya podido implementar.
Los beneficios de Instrumentos de Desarrollo de Keil/ARM
Editor de código fuente
Base de datos del dispositivo para configurar el ambiente de desarrollo de herramientas.
Un administrador de proyecto que le permite crear y mantener los proyectos que se van
desarrollando.
Facilidad de desarrollo integrada para ensamblar, compilar, depurar y unir las
aplicaciones para sistemas embebidos.
Diálogos para todos los ambientes de herramientas para desarrollo.
Verdadera corrección de errores integrado con un simulador de CPU periférico de gran
velocidad.
Vínculos a los manuales, herramientas de desarrollo, hojas de datos de los dispositivos a
ser utilizados y guías de desarrollo.
CAPÍTULO III
ACONDICIONAMIENTO DE SEÑALES
18
3 Acondicionamiento de señales
En este capitulo se presentan las diferentes interfaces que serán utilizadas para adquirir
señales desde diferentes tipos de sensores y circuitos electrónicos. En la sección 3.1 se presentará
una interfaz Universal para sensores capacitivos, resistivos y desbalances de puentes resistivos.
Se explicará a grandes rasgos su principio de funcionamiento, eliminación de interferencias y
finalmente la auto-calibración de las mediciones en forma continua. En la sección 3.2 se
introduce el conversor análogo/digital utilizado para este proyecto. Finalmente, en la sección 3.3
se presentan las posibilidades de conectar este sistema a otro circuito digital.
3.1 Módulo Universal Transducer Interface (UTI)
En esta sección se describirán las características generales de la UTI, el método de
medición empleado, las técnicas de eliminación de efectos parásitos, principio de
funcionamiento, conexión con el microcontrolador y los diferentes modos de funcionamiento.
3.1.1 Características Generales
La UTI (Universal Transducer Interface) [4 - 5] es una interfaz que convierte señales
desde diferentes tipos de sensores a una señal modulada en el tiempo. Esta interfaz es
básicamente un oscilador de primer orden denominado Modified Martin-Oscillator, donde el
periodo es modulado por el sensor bajo medición. Los sensores bajo medición pueden ser
conectados directamente a la interfaz UTI sin necesidad de electrónica adicional.
19
El UTI es una interfaz para:
• Sensores capacitivos en el rango de 0-2pF, 0-12pF, y 0-300pF
• Sensores resistivos tales como Pt100, Pt1000
• Termistores en el rango de 1-25KΩ
• Sensores basados en puentes resistivos en el rango de 250Ω-10KΩ con máximo
desequilibrio de +/- 4% ó +/- 0.25%
• Potenciómetros en el rango de 1KΩ-50KΩ
• Combinaciones de los sensores anteriores
Características más importantes:
Resolución y linealidad en el rango de 13-14 bits para los diferentes tipos de
sensores con un tiempo total de medición de 100ms
No requiere circuitos adicionales
Señal de salida simple que es compatible con casi todos los microcontroladores
Alimentación de 2.9 - 5.5 V (corriente < 2.5mA @ 5 V)
Interfaz para implementar medidas simultáneas que permiten la auto-calibración
de las mediciones mediante la técnica de las tres señales.
A continuación se describe el método de las tres señales, el que permite eliminar la
necesidad de implementar costosos procedimientos de calibración. Este método puede ser
utilizado en cualquier sistema lineal no-variable durante el período de medición.
3.1.2 Técnica de las tres señales
El método de las tres señales [6] se utiliza para implementar una calibración continua a
muy bajo costo. Supóngase un sistema lineal con una función de transferencia como:
i i offM k E M= ⋅ + (3.1)
20
El principal requerimiento es que el sistema de medición debe tener una respuesta lineal
donde su sensibilidad y/o offset pueden cambiar en el tiempo con una constante de tiempo mucho
mayor al tiempo total de implementación de las tres mediciones.
Con el objetivo de obtener un resultado con alta resolución se tiene implementado en la
UTI la medición de tres mediciones: la del parámetro mensurado, la de una referencia y la del
offset del sistema de medición. Las tres señales medidas pueden ser representadas como:
off offM M= (3.2)
ref ref offM K E M= ⋅ + (3.3)
x x offM K E M= ⋅ + (3.4)
Al calcular el cuociente entre el parámetro mensurado y su referencia previa eliminación
de los offsets, se obtiene la siguiente proporción del resultado:
x off x
ref off ref
M M EMM M E
−= =
−
(3.5)
Cuando el sistema es lineal y no-variable durante las mediciones, se puede aseverar que el
offset y la ganancia (de la interfaz) permanecen constantes. Como resultado de la proporción
anterior, no depende de las constantes internas de la interfaz. Se desea enfatizar que la precisión
final de las mediciones depende de la precisión del elemento de referencia. Adicionalmente se
puede obtener 13-bit a 16-bit de resolución según el modo de operación. Como resultado el
sistema es más inmune a las variaciones de temperatura, envejecimiento de la electrónica, etc.
Según el principio de funcionamiento de la técnica de tres señales se necesita una memoria para
almacenar cada una de las mediciones.
21
Por este motivo se utiliza un microcontrolador (NXP-LPC2106), que realiza el
almacenamiento de datos para hacer posteriormente el cálculo. Además, el microcontrolador se
utiliza para la medida de las señales moduladas en período. Tal sistema, combinado con un
elemento de sensado (sensor), el procesamiento de señal como la UTI, y un microcontrolador se
llama sistema inteligente de sensores basado en microcontrolador.
3.1.3 Técnica de las dos puertas
La técnica anterior permite eliminar los efectos de cambios lentos en la respuesta del
sistema, sin embargo no considera los efectos de conexiones. Comúnmente los alambres que se
conectan a los sensores agregan impedancias que se denominan impedancias parásitas, las que
afectan la exactitud del sistema. Por ejemplo, un cable coaxial típico de 50 ohms tiene una
capacidad asociada de alrededor de 100 pF/m que imposibilita cualquier medición si el sensor
trabaja en un rango de sólo 2 pF. Para una medida y conexión correcta del sensor, el efecto
parásito tiene que ser reducido al máximo o eliminado.
Una primera solución para la medición de impedancias es formar una red π como se
muestra en la figura 3.1.a donde el elemento sensado Zx con el elemento parásito son modelados.
Al elemento sensado se le aplica una tensión de excitación Vm y se mide la corriente de corto
circuito Im. La proporción Vm/Im depende sólo de la impedancia Zx si se tiene una fuente de
tensión ideal. El caso análogo para mediciones de admitancias se muestra en la figura 3.1.b.
Ahora Zx y los elementos parásitos forman una red escalera. Al elemento sensado se le aplica una
corriente de excitación Im y se mide la tensión Vm. Otra vez, la proporción Vm/Im depende sólo de
Zx. Ésta técnica se denomina la “Técnica de las dos puertas” [6], la que adicionalmente puede
generar excitaciones síncronas para eliminar los efectos de polarización en los electrodos.
Cuando el elemento sensado no puede ser modelado exactamente con uno de los circuitos
mostrado en figura 3.1, las mediciones finales son función del elemento sensado más las
impedancias parásitas.
22
Vm Im
Zx
a)
VmIm Zx
b)
Zp1 Zp2
Zp1 Zp2
Zp4Zp3
Fig. 3.1: Dos tipos de mediciones del puerto para elementos sensados, donde el elemento sensado
y los elementos parásitos forman una red de π (a) y una red escalera (b)
En la práctica es usual tener que medir más de un elemento. El circuito mostrado en la
figura 3.2 muestra la medida de dos elementos sensados, donde los elementos parásitos y el
elemento sensado forman una red π. La tensión Vm es usada para detectar los elementos medidos
Zx1 y Zx2. Se desea destacar que este es el modelo simplificado, porque el interruptor mostrado en
la figura es multiplexado en el tiempo y la señal Vm es alterna sincronizada con cada fase.
Adicionalmente, es posible conectar a tierra los elementos que no están siendo sensados para
reducir los efectos entre impedancias. Lo más importante es que no se requiere multiplexación en
el lado del elemento sensado. La proporción Vm/Im depende sólo de Zx1 ó Zx2.
23
VmIm
Zx1
Zx2
Fig. 3.2: Medida de dos elementos sensados donde el elemento sensado y los parásitos forman
una red π.
El circuito mostrado en la figura 3.3 muestra la medida de dos elementos sensados donde
los elementos sensados y los elementos parásitos forman una red escalera. La multiplexación en
el lado de excitación no se requiere, pero se necesita multiplexación adicional en el lado de los
elementos sensados. La proporción Vm/Im depende sólo de los elementos sensados Zx1 ó Zx2, y de
los interruptores. Se desea destacar que al aplicar el método de las tres señales, se necesita
implementar tres de estos circuitos en forma paralela con sus interruptores sincronizados.
Zx1
Zx2
Im Vm
Fig. 3.3: Medida de dos elementos de sensado donde el elemento sensado y los parásitos forman
una red escalera.
24
Comúnmente, los modelos de los elementos sensados y los elementos parásitos son
mucho más complejos que los circuitos discutidos anteriormente. Los efectos extras de los
elementos parásitos pueden ser reducidos considerablemente usando señales correctas de
excitación y conexiones adecuadas. Consideraremos el circuito de la figura 3.4 como ejemplo.
Esta figura describe la medida de dos condensadores, donde Cx1 es seleccionado para la medida.
La capacitancia C1,2 modela el condensador parásito entre los dos electrodos transmisores. La
resistencia Ron,1 y Ron,2 modelan la resistencia equivalente de encendido de los interruptores.
R0
Vtr
Ron,1
Ron,2
C1,2
Vtr,1
Vtr,2
Im
Cx1
Cx2
Cp1a Cp1b
Cp2a Cp2b
Fig. 3.4: Medida de dos condensadores. La capacitancía C1,2 modela los condensadores parásitos
entre los dos electrodos transmisores.
Un buen método para reducir el efecto de C1,2 es conectar el electrodo transmisor de un
condensador no seleccionado a GND (el condensador Cx2 en la figura 3.4). Esto reducirá
notablemente la señal Vtr,i en el electrodo transmisor del condensador no seleccionado. El tipo de
señal adecuada para Vtr también puede ayudar.
25
Aunque actualmente no existe un estándar del tipo de señal a utilizar, si se reconoce que la
señal sinuosidad pura y la señal cuadrada producen los mejores resultados. Cuando Vtr es una
onda cuadrada, la carga creada por Im representa el condensador Cx1 ó Cx2. Cuando Cx1 es
seleccionado, la contribución de Cx2 para esta carga decrece exponencialmente con el período de
Vtr, desde entonces la tensión Vtr,2 en el electrodo transmisor de Cx2 decrece exponencialmente.
Cuando Vtr es una onda sinusoidal, el tamaño de Im representa un condensador
seleccionado. Cuando Cx1 es seleccionado, la contribución de Cx2 para Im es proporcional a la
frecuencia de Vtr (para las frecuencias muy por debajo del polo de alta frecuencia).
Adicionalmente, cuando los valores de impedancias son función de la frecuencia de excitación se
debe considerar a lo menos la medición de la misma impedancia a diferentes valores de
frecuencias. Estos resultados más un complejo análisis de los resultados puede derivar en un
modelo más real del elemento sensado.
La aplicación de todas las técnicas anteriormente mencionadas en un solo sistema resulta
en un sistema de medición de bajo costo y robusto. La técnica de las tres señales es una auto-
calibración continua. La aplicación de esta técnica resulta en medidas con alta resolución con
respecto al elemento de referencia a un bajo costo. Adicionalmente la técnica de elemento
dinámico puede ser utilizada en circuitos integrados para mejorar la precisión de la ganancia de
los amplificadores a bajo costo. Por último la detección síncrona es poderosa para suprimir
interferencia entre señales. La aplicación de la medida de dos puertas es una técnica que reduce
fuertemente el efecto parásito de las conexiones de los elementos sensados como de los
elementos parásitos.
3.1.4 El Oscilador Martín Modificado
Uno de los modos de producir un corto-circuito y a la vez realizar la medición de esta
corriente como es requerido por el modelo de las dos puertas es usando un integrador. Su entrada
está virtualmente a tierra, por lo que la impedancia vista desde el elemento sensado es
prácticamente cero. Esta implementación se muestra en la figura 3.5.
26
Cuando se agregan un comparador y un condensador de offset Coff al circuito mostrado en
la figura 3.5 y un lazo de retroalimentación negativo para generar una oscilación, se obtiene el
modulador mostrado en la figura 3.6. En esta figura se simplifica para efectos explicativos el lado
de excitación y se entrega información adicional de cómo el elemento sensado influye en la
frecuencia de oscilación. También se muestra la selección de fase que está obligada a aplicar la
técnica de tres señales. Este modulador es conocido como el Oscilador de Martín Modificado [6],
esta basado en el oscilador de primer orden de relajación. Todo lo anteriormente presentado se
utiliza con amplificadores de diferentes ganancias con la finalidad de realizar mediciones en
diferentes rangos capacitivos, resistivos y los desbalances en puentes.
Vtr,ref
Integrador+
-
Iint
Cint
Vint
Cref
Cx
Vtr,x
VLF
+-
Fig. 3.5: Posible medida de dos capacitancías.
Vtr
Integrador ComparadorSelección Fase+
-
+
-
+-Vcomp
Iint
Cint
Vint
Coff
Cref
Cx
Fig. 3.6: El Oscilador Martín Modificado, adaptado para aplicar la técnica de las tres señales.
27
La salida del comparador Vtr se aplica directamente en los electrodos transmisores y
controla la corriente Iint. Un condensador Coff inyecta carga en el integrador en paralelo con Cref o
Cx. Esto asegura oscilación correcta cuando Cx es cero. Tres fases diferentes de medida son
seleccionadas sucesivamente, según la técnica de tres señales. Durante estas fases, Coff, Coff +Cref
y Coff +Cx se miden sucesivamente. Algunas señales son mostradas en la figura 3.7.
Tmm
VcompVint
Vtr
Iint
Vtr^
2Iint^
0
Fig. 3.7: Señales del Oscilador Martín Modificado
El período del Oscilador Martín Modificado Tmm,x durante la medida de Cx, es dada por:
( ),
int
2 x offmm x
V C CT
I
∧
∧
+=
ii
(3.6)
Donde V∧
tr es la amplitud peak- to- peak de Vtr e I∧
int la amplitud de Iint.
El Oscilador Martín Modificado es adecuado para medir condensadores, con un rango
completo de medida de 2pF, los artículos [6] reportaron a una linearidad de 14 el bit y una
resolución de hasta 50aF (casi 16 bits) dentro de un tiempo de medida de 100ms.
28
Este tiempo se obtiene al introducir un contador digital de 10-bits a la salida del
comparador (no mostrado en la figura 3.7), cuya finalidad es reducir los errores de cuantización
de los períodos de oscilación y controlar el cambio de cada fase.
3.1.5 Comunicación con el microcontrolador
Como se explicó en la sección anterior, cada fase (medición de offset, referencia y
elemento sensado) finalmente genera un pulso cuyo periodo es proporcional y lineal
(requerimiento básico introducido para el sistema) en el rango de medición. Como ejemplo, la
figura 3.8 muestra dos ciclos completos de la señal de salida de nuestro transductor universal para
sensores UTI, cada uno consistente en tres fases.
Fig. 3.8: Señal de salida de la UTI, modo tres fases
En la primera fase Toff se mide el offset del sistema, sin embargo esta fase es doblemente
modulada con la intencionalidad de reconocer en tiempo-real cual modulación corresponde a la
medición del offset. Gran parte de la complejidad en la programación del microcontrolador
consiste en reconocer y sincronizar las fases de cada medición (más detalle será presentado en el
capitulo 6 de este trabajo). Durante la segunda fase Tref, se mide la señal de referencia y en la
última fase Tx se mide la señal sensada.
La duración de cada fase es proporcional a la señal que se midió durante esa fase, las que
para señales capacitivas puede ser representadas como:
29
1 0offT N k C= ⋅ ⋅ (3.7)
( )1 0reff refT N k C C= ⋅ ⋅ + (3.8)
( )1 0x xT N k C C= ⋅ ⋅ + (3.9)
Para medidas resistivas:
2 0offT N k V= ⋅ ⋅ (3.10)
( )2 0reff refT N k V V= ⋅ ⋅ + (3.11)
( )2 0x xT N k V V= ⋅ ⋅ + (3.12)
Donde Cx ó Vx son las señales medidas, Cref ó Vref son las señales de referencia, C0 ó V0
son constantes (incluyendo las tensiones de offset, etc.) y K1 ó K2 son las ganancias. El factor N
representa el número de períodos internos del oscilador por cada fase que fue programado en el
contador digital de 10-bits explicado anteriormente. Finalmente existen dos modos de operación,
en el modo lento N = 1024 que representa que el contador digital utiliza sus 10-bits para reducir
los errores de cuantización y el modo rápido con N = 128 donde el contador digital utiliza sólo 8-
bits.
La señal de salida del UTI puede ser digitalizada por un contador de ciclos por parte del
microcontrolador, cuya resolución va directamente proporcional a la frecuencia de trabajo del
microprocesador. Para este trabajo el microprocesador LPC2106 se configuró para trabajar a una
frecuencia de 58.9824 MHz cuya resolución en el tiempo alcanza los 17 nseg. Esto tiene como
resultado los números digitales Noff, Nref y Nx correspondiente a cada fase. La proporción Cx/Cref
ó Vx/Vref ahora puede ser calculada internamente por el microcontrolador:
30
REF
X
OFFREF
OFFX
CC
NNNNM =−−
=
ó
REF
X
OFFREF
OFFX
VV
NNNNM =−−
=
(3.13)
Esta proporción no depende del offset ni de la ganancia que tiene el sistema durante la
medición. Aun en el caso que existan variaciones en los valores del offset y la ganancia, estos
efectos son eliminados si los cambios se producen lentamente en el tiempo. Esta es una gran
ventaja para sistema que deben trabajar en un rango de temperaturas desde -30 C a +70 C.
El número de fases en un ciclo completo puede ser 3, 5 ó un número seleccionado por el
usuario en el modo 3, donde se utiliza un multiplexor externo [14]. Los modos de funcionamiento
se muestran en la siguiente tabla:
SEL1 SEL2 SEL3 SEL4 Función Num. de
fases 0 0 0 0 5 Condensadores, 0-2pF 5 0 0 0 1 3 Condensadores, 0-2pF 3 0 0 1 0 5 Condensadores, 0-12pF 5 0 0 1 1 Condensadores, 0-2pF/0-12pF, MUX externo - 0 1 0 0 3 Condensadores, 0-300pF 3 0 1 0 1 Resistencias de platino Pt100-Pt1000, 4 hilos 4 0 1 1 0 Termistores 1kΩ-25kΩ, 4 - hilos 4 0 1 1 1 2 ó 3 Resistencias de platino Pt100-Pt1000 5 1 0 0 0 2 ó 3 Termistores 1kΩ-25kΩ 5 1 0 0 1 Puentes resistivos, ref. es Vpuente, +/- 200mV 3 1 0 1 0 Puentes resistivos, ref. es Vpuente, +/- 12.5mV 3 1 0 1 1 Puentes resistivos, ref. es Ipuente, +/- 200mV 3 1 1 0 0 Puentes resistivos, ref. es Ipuente, +/- 12.5mV 3 1 1 0 1 Puentes resistivos y dos resistencias, +/-
200mV 5
1 1 1 0 Puentes resistivos y dos resistencias, +/- 12.5mV
5
1 1 1 1 3 Potenciómetros 1kΩ-25kΩ 5
Tabla 3.1. Modos UTI
31
3.2 Módulo ADC
En esta sección se describirá el convertidor análogo digital, incluye sus características,
método de conversión, configuración y conexión con el microcontrolador.
3.2.1 Características
El convertidor análogo-digital seleccionado fue el AD7904 [7] de Analog Devices con 8-
bits de resolución, 4 canales multiplexados y una capacidad de muestrear hasta 1 MSPS. Este
dispositivo es compatible con la lógica de control del microprocesador seleccionado. El
convertidor A/D usa aproximaciones sucesivas como técnica de conversión. El multiplexor de 4
canales puede acceder directamente cualquier señal analógica en modo común.
Características:
Tasa máxima de rendimiento: 1 MSPS
VDD de 2.7 V a 5.25 V
Bajo consumo:
o 6 mW máx. a 1 MSPS con 3 V de alimentación
o 13.5 mW máx. a 1 MSPS con 5 V de alimentación
4 entradas con secuenciador
Amplio ancho de banda de entrada
o AD7904, 70 dB SNR con frecuencia de entrada de 50 kHz
Potencia Flexible / Gestión de la velocidad de reloj de serie
Alta velocidad de interfaz serie SPITM/QSPITM
Compatible MICROWIRETM/DSP
Modo de auto-apagado: 0.5 _A Max
32
3.2.2 Aproximaciones sucesivas (SAR)
Los conversores por registros de aproximaciones sucesivas (SAR - successive
approximation register) son frecuentemente la arquitectura elegida por las aplicaciones de media
a alta resolución a tasas de muestreo medias (ver figura 3.9).
Fig. 3.9: Resolución Vs. Velocidad de muestreo
Los conversores SAR tienen una resolución entre los 8 y 18 bits, y usualmente no superan
las 10 millones de muestras por segundo (10MSPS). Una de sus ventajas es su bajo consumo
(tabla 3.2), razón por la cual fue seleccionado para este proyecto.
SAR Delta-Sigma Pipeline Flash
Velocidad ~ 10MSPS < 1MSPS ~ 100MSPS > GSPS
Resolución
hasta 16
bits
entre 10 y 16
bits
entre 8 y 14
bits
hasta 8~10
bits
Consumo
Bajo
(~10mW)
Muy bajo
(~1mW)
Medio
(~100mW)
Alto
(~1000mW)
Tabla 3.2. Comparación de tipos de muestreo
33
Este tipo de conversores funcionan de una manera similar a una balanza antigua de
escalas. Es decir, de un lado se coloca el peso desconocido, y del otro se van colocando diferentes
pesos conocidos, hasta que se logra el equilibrio. Finalmente, el peso desconocido se obtiene por
la suma de los pesos conocidos colocados en el otro plato de la balanza. De igual forma ocurre
con los ADC del tipo SAR. La tensión analógica desconocida a la entrada es comparada con
diferentes tensiones sucesivas generadas por el ADC. Una vez completadas todas las
comparaciones, el resultado de cada comparación es exactamente la salida que entrega el
conversor. Sin embargo, al tratarse de un componente electrónico de alta velocidad, estas
comparaciones ocurren mucho más rápido que lo que esperamos de una balanza real.
Dado que estos tipos de conversores utilizan la técnica del sample & hold (muestreo y
retención), la arquitectura en ningún momento asume nada sobre la naturaleza de la señal de
entrada, y por lo tanto esta señal no tiene que ser continua. Esto hace que los SAR sean una
arquitectura ideal para aplicaciones donde se debe muestrear muchas señales y se utiliza un
multiplexor a la entrada del mismo, o bien cuando las muestras no son tomadas una seguida de la
otra sino que son tomadas cada algunos segundos o más, o también donde se requiera una
conversión rápida.
Los conversores SAR son ideales para aplicaciones de tiempo real, tales como el control
industrial, control de motores, instrumentos portables o a batería, y equipos de adquisición de
datos o señales.
Características más relevantes:
• Muy empleados (especialmente con μProcesadores)
• Alta resolución: 16 bits.
• Alta velocidad: Tc = n·TCLK ≈ μs (en teoría).
• Cada conversión es única e independiente de la anterior.
34
• Su exactitud, linealidad y velocidad son el resultado directo de las características
del DAC (junto con su tensión de referencia) y del A.O.
3.2.3 El Registro de control del convertidor
Todas las operaciones del convertidor A/D son controladas por los bits del registro de
control (ver tabla 3.3). Los bits de este registro pueden seleccionar la entrada analógica a
convertir, el modo de conversión de un sólo canal o múltiples canales y el modo de conversión
continua o única.
Tabla 3.3. Registro de control
WRITE: El valor escrito en este bit del registro de control determina si los siguientes 11 bits van
a ser cargados en el registro de control o no.
SEQ1, SEQ0: El bit del SEQ1 en el registro de control es usado en conjunto con el bit del SEQ0
para controlar el uso de la función de secuencia (ver tabla 3.4).
SEQ1 SEQ0 Tipo de secuencia
0 X Con esta configuración la función de secuencia no se usa. El canal de entrada de
datos analógico seleccionado por cada conversión individual se determina por el
contenido de los bits de la dirección del canal ADD1, ADD0 antes de cada
operación de escritura. Este modo de operación refleja la operación tradicional
de un ADC multi-canal sin usar la función de secuencia, dónde se selecciona el
siguiente canal para la conversión (ver figura 3.10)
1 0 Si el SEQ1 y los bits SEQ0 se configura de este modo, entonces la función de
secuencia no será interrumpida en la finalización de la operación de escritura.
Esto permite que otros bits en el registro de control puedan ser modificados
35
entre conversiones en una misma secuencia sin terminar el ciclo.
1 1 Esta configuración es usada en conjunto con los bits de la dirección del canal
ADD1, ADD0 para programar conversiones continuas en una secuencia
consecutiva de canales desde el Canal 0 hasta un canal final seleccionado por los
bits de la dirección del canal en el Registro de Control.
Tabla 3.4. Opciones para las funciones de secuencia
Fig. 3.10: Diagrama de flujo con SEQ1 Bit = 0, SEQ0 Bit = X.
ADD1, ADD0: Estos dos bits de la dirección están cargados al final de la secuencia de
conversión y seleccionan cuál canal analógico de entrada de datos debe ser convertido en la
siguiente transferencia serial, o pueden seleccionar el canal final en una secuencia consecutiva
descrito en la tabla 3. El canal seleccionado de entrada de datos es decodificado como se muestra
en tabla 3.5. Los bits de la dirección correspondiente al resultado de conversión son también
salida en DOUT antes de los 12 bits de datos. El siguiente canal en convertirse será seleccionado
por el MUX en el catorceavo ciclo por flanco de bajada de SCLK.
36
ADD1 ADD0 Canales de entradas análogas
0 0 VIN0
0 1 VIN1
1 0 VIN2
1 1 VIN3
Tabla 3.5. Selección de canal.
PM1, PM0: Bits de Administración de Energía. Estos dos bits decodifican la modalidad de
operación del AD7904 como se muestra en la tabla 3.6.
PM1 PM0 Modo
1 1 Operación normal: En este modo, el AD7904 permanecer en el modo de máxima
potencia independientemente del estado lógico. Este modo permite que la tasa de
rendimiento sea la más rápido posible.
1 0 Apagado completo: En este modo, el AD7904 está en modo de apagado total con
todo el sistema de circuitos del AD7904 apagados. El AD7904 retiene la
información en el Registro de Control mientras esta apagado.
0 1 Auto apagado: En este modo, el AD7904 automáticamente entra modo apagado
total al final de cada conversión cuando el registro de control es actualizado. Se
enciende del apagado total en un tiempo de 1us y el usuario debería asegurar que
1us han transcurrido antes de tratar de realizar una conversión válida.
0 0 Operación inválida: Esta configuración no se admite.
Tabla 3.6. Modos de administración de energía.
37
RANGE: Este bit selecciona el rango de la entrada analógica para ser usado en el AD7904. Si es
puesto a 0 el rango de la entrada analógica se extenderá de 0 V a 2 × REFIN. Si es puesto a 1 el
rango de la entrada analógica se extenderá de 0 V a REFIN (para la siguiente conversión). Para 0
V a 2 × REFIN, VDD 4.75 V a 5.25 V.
CODING: Este bit selecciona el tipo de codificación que se usara en la salida como resultado de
conversión. Si este bit es configurado como 0 se codificara la salida en complemento de dos. Si el
bit es configurado como 1 la salida será directamente binaria (para la siguiente conversión).
3.2.4 Interfaz serial SPI
Este conversor posee comunicación SPI (Serial Peripheral Interface) el que fue
implementado en el microprocesador LPC2106 [8] según las siguientes especificaciones:
La señal CS inicia la transferencia de datos y el proceso de conversión. Cuando se
produce un flanco de bajada en el CS se mantiene en el modo hold, saca al bus de datos del
tercer estado y procesa los datos analógicos a partir de ese momento. Se inicia la conversión en
este punto y se requiere de 16 ciclos SCLK para completar la conversión.
En los catorceavo flanco de caída SCLK termina el envió de los datos convertidos como
se muestra en figura 3.11 en Punto B. En el decimosexto flanco de bajada SCLK, la línea DOUT
regresará en tercer estado. Si se produce un flanco de subida en CS antes de que 16 SCLKs
hayan transcurrido, la conversión será finalizada, la línea DOUT regresará en tercer estado, y el
Registro de Control no estará actualizado; de otra manera DOUT regresa a tercer estado en el
decimosexto flanco de bajada de SCLK como se muestra en figura 3.11.
Fig. 3.11: Diagrama de tiempos del conversor AD7904
38
El resultado de conversión en la salida DOUT es una palabra de 16 bits. Esta secuencia de
datos de 16 bits (ver figura 3.11) consiste de dos ceros al inicio, dos bits de la dirección indicando
el canal correspondiente a la conversión, seguido por 8 bits de datos de conversión y 4 ceros
seguidos, respectivamente.
3.2.5 Diagrama de conexión típico
La figura 3.12 muestra un diagrama de conexión típico para el AD7904. En este esquema
el pin GND está conectado en el plano analógico de tierra del sistema. En figura 3.12, REFIN está
conectado a 5V como fuente de referencia, para proveer un rango analógico de entrada de datos
de 0V a 5V (si el bit de RANGO es 1). Aunque el AD7904 está relacionado a un VDD de 5V, la
interfaz serial está relacionada a un microprocesador 3.3 V. El pin VDRIVE del AD7904 está
relacionado a la misma alimentación de 3.3 V del microprocesador para permitir una interfaz de
lógica de 3.3V.
Fig. 3.12: Conexión con el microcontrolador
39
3.3 Otras posibilidades de conexión
El microcontrolador utilizado tiene 32 pines I/O de propósito general de los cuales 4 pines
están disponibles para otras aplicaciones. Estos pines soportan tensiones TTL de 5V. Existen
cinco fuentes de alimentación diferentes en el PCB que son: 1.8V, 3.3V, 5V, -15V y +15V. En
consecuencia se pueden agregar circuitos digitales externos que trabajen con tensiones de este
orden, los que pueden ingresar señales digitales que causen el disparo de la alarma (previa
reprogramación del microcontrolador).
CAPÍTULO IV
COMUNICACIÓN INALAMBRICA BLUETOOTH
40
4 Comunicación inalámbrica Bluetooth
Se implementó la comunicación inalámbrica Bluetooth principalmente por la
estandarización gradual que ha tenido esta tecnología en el mercado de los teléfonos móviles.
Actualmente casi todos los modelos de teléfonos móviles de gama media ya tienen integrado un
módulo Bluetooth. Esto facilita la tarea de selección del teléfono móvil el que es controlado por
el microcontrolador vía su MODEM Bluetooth.
En este capitulo se explicarán los conceptos relacionados a la comunicación inalámbrica
Bluetooth que se estudió para seleccionar el módulo Bluetooth y el teléfono móvil que se conecta
directamente al sistema de alarma. Además se describirán los protocolos y perfiles asociados que
se utilizaron para establecer la comunicación inalámbrica Bluetooth.
4.1 Generalidades del protocolo Bluetooth
Bluetooth define un estándar global, tanto a nivel de hardware como de software para la
comunicación inalámbrica. Esta Tecnología posibilita la transmisión de voz y datos entre
diferentes equipos mediante un enlace por radiofrecuencia a distancias cortas.
Uno de los objetivos de esta tecnología es la posibilidad de reemplazar o eliminar la gran
cantidad de cables y conectores que enlazan unos dispositivos con otros. Además esta tecnología
pretende facilitar la interacción y sincronización de los diferentes dispositivos tanto móviles
como fijos que se desee, todo ello sin necesidad de visión directa entre ellos.
41
4.2 Ventajas de la tecnología Bluetooth
La especificación Bluetooth puede facilitar la conexión no sólo al sistema telefónico o a
Internet, sino también entre dispositivos. De hecho, el enfoque de alto nivel de tecnología
inalámbrica Bluetooth y facilidad de configuración tiene el potencial de cambiar los actuales
paradigmas de conectividad de redes y computadoras móviles. Además, como la tecnología
inalámbrica Bluetooth soporta tanto voz como datos y una amplia gama de aplicaciones reforzará
las ofertas de computadoras móviles de todos los fabricantes.
La elección de una red de área local inalámbrica que utilice las especificaciones
Bluetooth, de infrarrojos, HomeRF u 802.11 dependerá de las aplicaciones que haya que
soportar: A menudo se encontrará con que requiere más de una de esas tecnologías para cumplir
con sus necesidades. La Tabla 4.1 resume las aplicaciones típicas de estas tecnologías.
Existen puntos de convergencia entre Bluetooth y otras tecnologías inalámbricas. Por
ejemplo, las tecnologías inalámbricas, infrarroja y Bluetooth ofrecen implementaciones
complementarias para intercambio de datos y aplicaciones de voz. Las capacidades de los
dispositivos inalámbricos Bluetooth complementan las facilidades de uso, tipo apuntar y
disparar, de los infrarrojos con envío de señales omni-direccionales, comunicaciones a mayor
distancias y la capacidad de penetrar superficies sólidas. Para algunos dispositivos, tener
componentes Bluetooth e infrarrojos proporciona la solución óptima inalámbrica para corto
alcance. Para otros dispositivos, la elección de añadir componentes Bluetooth o infrarrojos se
basará en los modelos de aplicaciones y la utilización deseada. La Historia de las comunicaciones
inalámbricas de corto alcance aún se está escribiendo: tanto la infrarroja como la tecnología
Bluetooth serán los motores principales para el desarrollo de esta área.
42
Tecnología Aplicaciones típicas
Bluetooth Eliminación de cables, comunicación entre dispositivos para voz y datos,
redes PAN, control remoto de dispositivos, comercio electrónico móvil.
Infrarrojos Eliminación de cables, transferencia de archivos a alta velocidad entre
dispositivos, control local de dispositivos.
HomeRF Eliminación de cables, comunicación de datos entre computadoras y entre
computadoras y periféricos, en el hogar o en una oficina pequeña.
Lan inalámbrica
802.11
Eliminación de cables, comunicación de datos entre computadoras y entre
computadoras y periféricos, en oficinas corporativas.
Tabla 4.1. Aplicaciones típicas de las tecnologías inalámbricas.
Principales ventajas del Bluetooth:
• Facilitar las comunicaciones entre equipos móviles y fijos.
• Eliminar cables y conectores entre éstos.
• Conecta entre sí teléfonos móviles, computadores portátiles, manos libres para el coche,
reproductores de MP3 y otros dispositivos.
• Las conexiones han mejorado con el Bluetooth y consigue transmitir sonido estéreo,
transferir datos o establecer comunicaciones de voz.
• El bajo consumo de energía, su reducido tamaño y el escaso coste de los chips debido a su
masificación permite emplearlo en los dispositivos más pequeños.
• Es sencillo de instalar y configurar. La conexión se realiza sin cables. El proceso resulta
muy sencillo para los nuevos usuarios: una vez adquirido el producto Bluetooth, basta con
comprobar los perfiles disponibles y conectarlo a otro dispositivo Bluetooth con los
mismos perfiles. A continuación, se debe introducir un código PIN, similar al que se
emplea al sacar dinero en un cajero.
43
Principales desventajas del Bluetooth:
• Problemas de seguridad
• Necesidad de protocolos para la conectividad, que a nivel de usuario es simple, sin
embargo cuando se automatiza resulta en un gran desafío para el usuario principiante.
4.3 ¿Qué son los Protocolos?
Los protocolos son de una forma consensuada en la que los dispositivos intercambian
información. Para cada tipo de tecnología de red, incluyendo la de la especificación Bluetooth,
hay un conjunto de protocolos que definen exactamente cómo se pasan los mensajes por el
enlace. El protocolo define el formato de esos mensajes, incluyendo qué partes se reservan para
cosas como la dirección, el control de errores y los datos de usuario.
Los protocolos definen cómo se pasa el trafico de señales por el enlace, se parecen mucho
a los protocolos que todos observamos en la vida diaria.
Si no hubiera protocolos comúnmente aceptados, una red no podría funcionar
correctamente, ya que los fabricantes de hardware y los desarrolladores de software harían las
cosas a su manera. El resultado sería productos propios que no podrían comunicarse entre sí en la
misma red.
44
4.4 Protocolos fundamentales de Bluetooth
Los protocolos fundamentales son específicos de la tecnología inalámbrica Bluetooth [9],
los que fueron desarrollados por el SIG Bluetooth. RFCOMM y el protocolo TCS BIN también
fueron desarrollados por el SIG Bluetooth, pero se basan en estándares existentes: ETSI TS 07.10
y la Recomendación ITU-T Q.931. Los protocolos fundamentales, mas la radio Bluetooth (como
se muestra en la figura 4.1), son requeridos por la mayoría de dispositivos Bluetooth, mientras
que el resto de protocolos sólo se utilizan cuando se necesitan.
vCard/vCal
OBEX
WAE
WAP
UDP TCP
IP
PPP
RFCOMM
ComandosAT
TCS BIN SDP
L2CAP
Audio
LMP
Banda Base
Radio Bluetooth
Fig. 4.1: Las aplicaciones interoperables que soportan los modelos de uso de Bluetooth se
construyen encima de esta pila de protocolos Bluetooth.
45
4.4.1 Banda Base
El nivel de banda base permite el enlace físico de RF entre unidades Bluetooth dentro de
una Picorred (red formada por dos o más unidades o equipos que comparten un canal). Como los
sistemas RF Bluetooth utilizan la tecnología de expansión de espectro por saltos de frecuencia,
donde los paquetes se transmiten en franjas de tiempo predefinidas por frecuencias predefinidas,
este nivel utiliza procedimientos de averiguación y localización para sincronizar la frecuencia de
saltos de transmisión y los relojes de los diferentes dispositivos Bluetooth.
Este nivel proporciona los dos tipos diferentes de enlaces físicos, con sus
correspondientes paquetes de banda base: síncrono orientado a la conexión (SCO, Synchronous
Connetion-Oriented) y asíncrono sin conexión (ACL, Asynchronous Connetionless), que se
pueden transmitir de forma multiplexada sobre el mismo enlace RF. Los paquetes ACL sólo se
utilizan para datos, mientras que un paquete SCO puede contener sólo audio y de datos pueden
ofrecerse con diferentes niveles de corrección de errores, y se pueden cifrar para asegurar la
confidencialidad. Además, a los mensajes de control y de gestión de enlace se le asigna un canal
especial a cada uno.
Los paquetes que contienen datos de audio se pueden transferir entre uno o más
dispositivos Bluetooth, haciendo posible la existencia de varios modelos de uso. Los datos de
audio en los paquetes SCO se encaminan directamente hacia y desde la banda base, y no pasan
por L2CAP. El modelo de audio es relativamente sencillo dentro de la especificación Bluetooth;
dos dispositivos Bluetooth cualesquiera pueden enviar y recibir datos de audio entre ellos
simplemente abriendo un enlace de audio.
46
4.4.2 Protocolo de gestor de enlace (LMP)
LMP es el responsable de la configuración y control del enlace entre dispositivos
Bluetooth, incluyendo el control y negociación del tamaño de los paquetes de banda base.
También se utiliza para la seguridad; autenticación y cifrado; generación, intercambio y
comprobación de las claves de cifrado y de enlace. LMP también controla los modos de
administración de energía y los ciclos de trabajo del dispositivo de radio Bluetooth, y los estados
de conexión de una unidad Bluetooth dentro de una picorred.
El gestor de enlace del lado receptor filtra e interpreta los mensajes LMP, por lo que
nunca pasan a los niveles superiores. Los mensajes LMP tienen una prioridad más elevada que
los datos del usuario. Si un gestor de enlace necesita enviar un mensaje, no se verá retrasado por
el tráfico L2CAP. Además, los mensajes LMP no se confirman explícitamente, ya que el canal
lógico ofrece un enlace suficientemente fiable, lo que hace a las confirmaciones innecesarias.
4.4.3 Protocolo de adaptación y control del enlace lógico (L2CAP)
El protocolo de adaptación y control del enlace lógico (L2CAP) soporta la multiplexación
de protocolos del nivel superior, la segmentación y reensamblado de paquetes, y los mecanismos
de calidad de servicio (QoS, Quality of Service). L2CAP permite que protocolos y aplicaciones
de nivel superior transmitan y reciban paquetes de datos de hasta 64 kilobytes de longitud.
Aunque el protocolo de banda base ofrece los tipo de enlace SCO y ACL, L2CAP está definido
sólo para enlaces ACL y no hay planeado soporte para enlaces SCO. Los canales con calidad de
voz para aplicaciones de audio y telefonía pueden funcionar sobre enlaces SCO de banda base.
Sin embargo, los datos de audio pueden ensamblarse en paquetes y enviarse utilizando protocolos
de comunicación que funcionen sobre L2CAP.
47
4.4.4 Protocolo de descubrimiento de servicios (SDP)
Los servicios de descubrimientos son un elemento importante en la arquitectura Bluetooth
ya que proporcionan la base para todos los modelos de uso. Por medio de SDP, se puede
consultar la información de los dispositivos, los servicios que ofrecen las características de dichos
servicios. Habiendo localizado los servicios disponibles en las cercanías, el usuario puede elegir
cualquiera de ellos. Después de eso, se puede establecer una conexión entre dos o más
dispositivos Bluetooth.
4.5 Protocolos de sustitución de cable
La especificación Bluetooth incluye dos protocolos que suministran señalización de
control a través de enlaces inalámbricos, emulando el tipo de señalización que normalmente se
asocia con los enlaces por cable.
4.5.1 RFCOMM
RFCOMM es un protocolo de emulación de línea serie basado en un subconjunto del
estándar TS 07.10 del Instituto Europeo de Estándares de Telecomunicaciones (ETSI, European
Telecommunications Standards Institute), que también se utiliza para los dispositivos de
comunicaciones GSM (Global System for Mobile, sistema global para móviles). El ETSI es una
organización sin ánimo de lucro que elabora los estándares de telecomunicaciones que se utilizan
en Europa.
48
El protocolo RFCOMM proporciona una emulación de los puertos serie RS–232 sobre el
protocolo L2CAP. Este protocolo de “sustitución de cable” emula las señales de control y datos
RS–232 sobre la banda base, proporcionando ambas capacidades de transporte a los servicios de
niveles superiores que utilizan el cable serie como mecanismo de transporte.
RFCOMM soporta aplicaciones que hacen uso del puerto serie de un dispositivo. En una
aplicación simple, el segmento de comunicaciones es un enlace Bluetooth de un dispositivo a
otro. Donde el segmento de comunicaciones es otra red, se utiliza la tecnología inalámbrica
Bluetooth para la ruta entre el dispositivo y un dispositivo de conexión a la red, como un módem.
RFCOMM solo se ocupa de la conexión entre dispositivos Bluetooth en el caso de una conexión
directa, o entre el dispositivo Bluetooth y un módem en el caso de una red. RFCOMM puede
soportar otras configuraciones, como módulos que se comunican vía tecnología inalámbrica
Bluetooth por un lado y ofrecen una interfaz de cable por el otro. Estos dispositivos no son
realmente un módem, pero ofrecen un servicio similar.
4.5.2 Protocolos de control de telefonía
TCS Binary o TCS BIN es un protocolo orientado a bit que define las señalizaciones de
control de llamada para establecer llamadas de voz y datos entre dispositivos Bluetooth. También
define los procedimientos de gestión de movilidad para manejar grupos de dispositivos TCS
Bluetooth. TCS BIN se basa en la recomendación Q.931 emitida por la Unión Internacional de
Telecomunicación (ITU-T), una agencia de las Naciones Unidas que coordina los estándares para
redes y servicios de telecomunicación globales. Q.931 es la especificación ITU-T para el control
básico de llamadas bajo RDSI (Red Digital de Servicios Integrados).
49
Además de TCS BIN, el SIG Bluetooth ha definido un conjunto de comandos AT que
definen cómo pueden controlarse un módem y un teléfono móvil en varios modelos de uso; éstos
se verán más adelante. Los comandos AT están basados en las recomendaciones ITU-T V.250 y
ETS 300.916 (GSM 07.07).
4.6 Perfiles generales de Bluetooth
El SIG Bluetooth ha identificado varios modelos de uso, cada uno de los cuales está
acompañado por un “perfil”. Los perfiles definen los protocolos y características que soporta un
modelo de uso particular. Si dispositivos de distintos fabricantes cumplen con la misma
especificación de un perfil Bluetooth, podemos esperar que interactúen correctamente entre ellos
cuando se utilicen para un servicio y un uso particular.
Un perfil define los mensajes específicos y los procedimientos usados para implementar
una característica. Algunas características son obligatorias, otras son opcionales y algunas
pueden ser condicionales. Todas las características están definidas de manera unívoca, es decir,
que si una característica se halla implementada, debe estarlo de una manera específica. Esto
asegura que la misma característica trabaje de la misma forma en cada dispositivo, independiente
del fabricante.
Se usan cuatro perfiles generales en los diferentes modelos de uso: el Perfil de acceso
genérico (GAP, Generis Access Profile), el Perfil de puerto serie (SPP, Serial Port Profile), el
Perfil de aplicación de descubrimiento de servicios (SDAP, Service Discovery Application
Profile) y el Perfil genérico de intercambio de objetos (GOEP, Generic Object Exchange Profile).
Este capítulo trata dos perfiles generales: Perfil de acceso genérico y perfil de puerto serie.
50
4.6.1 Perfil de acceso genérico (GAP)
El perfil de acceso genérico define los procedimientos generales para descubrir
dispositivos Bluetooth, así como los procedimientos de gestión de enlace para establecer una
conexión entre ellos. Así, el principal propósito de este perfil es describir el uso de los niveles
inferiores de la pila de protocolos Bluetooth: el control de enlace LC y el protocolo de gestión de
enlace LMP. También están definidos en este perfil los procedimientos relacionados con la
seguridad, en cuyo caso entran en juego los niveles más altos: L2CAP, RFCOMM y OBEX.
Además, el perfil contempla los requisitos de formato comunes para los parámetros
accesibles desde la interfaz de usuario. En otras palabras, el perfil de acceso genérico describe
como deben de comportarse los dispositivos mientras se encuentran en los estados de espera y de
establecimiento de conexión. Esto garantiza, a su vez, que siempre se puedan establecer enlaces y
canales entre dispositivos Bluetooth. Si los dispositivos operan de acuerdo con varios perfiles
simultáneamente, el perfil GAP describe los mecanismos para gestionarlos todos.
El perfil GAP define los procedimientos generales para descubrir las identidades, nombres
capacidades básicas de otros dispositivos Bluetooth que se encuentren en modo “descubrible”.
Un dispositivo en el modo descubrible está listo para aceptar conexiones y solicitudes de
servicios de otro dispositivo. Incluso si dos dispositivos Bluetooth no comparten una aplicación
común, deben ser capaces de comunicarse entre ellos para determinar esto. Cuando dos
dispositivos Bluetooth comparten la misma aplicación, pero pertenecen a fabricantes distintos, la
capacidad para establecer una conexión no debe verse impedida porque los fabricantes hayan
utilizado nombres diferentes para las capacidades básicas Bluetooth en el nivel interfaz de
usuario, o porque sus productos implementen los procedimientos básicos en una secuencia
diferente.
51
Los dispositivos Bluetooth que no cumplan cualquier otro perfil Bluetooth deben, al
menos, cumplir con el perfil GAP. Esto asegura la interoperabilidad básica y la coexistencia entre
todos los dispositivos Bluetooth, independientemente del tipo de aplicación que soporten. Los
dispositivos que cumplan otro perfil Bluetooth pueden usar adaptaciones de los procedimientos
genéricos, tal como se especifiquen en ese perfil. Sin embargo, deben seguir siendo compatibles
con el perfil GAP en el nivel de los procedimientos genéricos (ver figura 4.2).
Perfil de acceso genérico Perfiles TCS BIN
Perfil de Telefoníainalámbrica
Perfil deintercomunicación
Perfil de descubrimientode servicios
Perfil genérico de intercambio de objetos
Perfil de sincronización
Perfil de carga de objetos
Perfil de transferenciade archivos
Perfil de acceso telefónicoa redes
Perfil de acceso a redes Lan
Perfil de Fax
Perfil de auriculares
Perfil de puerto serie
Fig. 4.2: Relación entre el perfil de acceso genérico y el resto de los perfiles y modelos de
uso Bluetooth.
52
4.6.2 Perfil de Puerto Serie (SPP)
Cuando la tecnología inalámbrica Bluetooth se utiliza para sustituir el cable, se emplea el
Perfil de puerto serie (SPP) para el canal resultante orientado a conexión.
Este perfil está construido sobre el perfil de acceso genérico y define cómo deben
configurarse los dispositivos Bluetooth para emular una conexión a través de un cable serie
utilizando RFCOMM, un protocolo de transporte sencillo que emula los puertos serie RS-232
entre dos dispositivos homólogos (ver figura 4.3). RFCOMM se utiliza para el transporte de los
datos de usuario, de las señales de control de módem y de los comandos de configuración. La
sesión RFCOMM se ejecuta sobre un canal L2CAP.
Aplicación A
RFCOMM
LMP L2CAP
Banda base
Dispositivo A
Emulación del puerto serie u otra API
SDP
Aplicación B
RFCOMM
LMP L2CAP
Banda base
Dispositivo B
Emulación del puerto serie u otra API
SDP
Fig. 4.3: Modelo de protocolo para una conexión mediante cable serie emulado.
Las aplicaciones de ambos son normalmente aplicaciones heredadas que esperan que la
comunicación tenga lugar a través de un cable serie, que es el que emula el perfil. Cualquier
aplicación heredada puede ser ejecutada sobre cualquiera de los dos dispositivos, utilizando el
puerto serie virtual como si un cable serie físico, con señalización de control RS-232, estuviese
conectando los dos dispositivos.
53
En una configuración de puerto serie simple, en la que haya dos computadoras conectadas
mediante el cable serie emulado, un dispositivo toma la iniciativa para crear una conexión con el
otro dispositivo. Este dispositivo se llama Iniciador, mientras que el dispositivo a que se le
solicita la conexión se denomina Aceptador. Cuando un Iniciador inicia el establecimiento del
enlace, se realizan procedimientos de servicios para establecer la conexión de cable serie
emulado.
Bajo el perfil SPP, se soportan velocidades de datos de hasta 128 Kbps. Aunque la
especificación Bluetooth describe una conexión de puerto serie emulado simple entre dos
dispositivos en una configuración punto a punto, nada evita que haya varias instancias del SPP
ejecutándose de forma concurrente en el mismo dispositivo para soportar varias conexiones. En
tales casos, los dispositivos pueden incluso tomar los dos papeles de Iniciador y Aceptador al
mismo tiempo. No hay papeles maestros–esclavos fijos en este perfil, ya que se supone que
ambos dispositivos son homólogos. Si se desear usar características de seguridad, los dos
dispositivos serán emparejados durante la fase de establecimiento de la conexión. El
acoplamiento no se usa explícitamente en el Perfil de puerto serie, por lo que el soporte para
acoplamiento es opcional.
En la especificación Bluetooth hay descritos tres procedimientos de nivel de aplicación,
que son necesarios para establecer una conexión de cable serie emulado entre dos dispositivos.
i) Establecimiento del enlace/configuración de la conexión serie virtual.
Este procedimiento describe los pasos necesarios para establecer una conexión con un
puerto serie emulado de un dispositivo remoto. Enviar una solicitud utilizando el protocolo de
descubrimiento de servicios SDP, para determinar el número de canal del servidor RFCOMM
correspondiente a la aplicación del dispositivo remoto.
54
Si hay disponible algún tipo de capacidad de navegación, el usuario puede hacer una
selección entre los puertos (o servicios) disponibles en el dispositivo homólogo. Si el usuario
conoce exactamente con qué servicio quiere contactar, sólo es necesario buscar los parámetros
correspondientes, utilizando el identificador de clase de servicio asociado con ese servicio.
1. Como opción, el dispositivo remoto puede ser requerido para que se autentifique; también
el cifrado puede activarse de manera opcional.
2. Solicitar un canal L2CAP nuevo a la entidad RFCOMM remota.
3. Iniciar una sesión RFCOMM en el canal L2CAP.
4. Iniciar una conexión de enlace de datos nueva sobre la sesión RFCOMM, utilizando el
número del canal del servidor (mencionado en el paso 1).
Cuando este procedimiento está completo, la conexión de cable serie virtual está lista para
ser usada por las aplicaciones de ambos dispositivos. Si ya existe una conexión RFCOMM entre
los dispositivos cuando se establece una nueva conexión de enlace de datos, la nueva conexión se
establece sobre la sesión RFCOMM existente, en cuyo caso los pasos 3 y 4 son necesarios.
ii) Aceptación del enlace/establecimiento de la conexión serie virtual.
Este procedimiento requiere que el Aceptador realice los pasos siguientes:
1. Proporcionar autenticación si es requerido para ello y, si se produce la correspondiente
solicitud, activar el cifrado.
2. Aceptar la indicación de establecimiento de un nuevo canal desde L2CAP.
3. Aceptar el establecimiento de una sesión RFCOMM en ese canal.
4. Aceptar una nueva conexión de enlace de datos sobre la sesión RFCOMM.
55
Si el usuario que solicita el puerto serie emulado necesita seguridad y los procedimientos
aún no han sido llevados a cabo, el último paso puede desencadenar una solicitud local de
autenticar al dispositivo remoto e iniciar el cifrado.
iii) Almacenamiento del registro de servicio en la base de datos SDP local.
Todos los servicios/aplicaciones accesibles a través de RFCOMM deben tener un registro
de servicio SDP que incluya los parámetros necesarios para acceder al correspondiente
servicio/aplicación. Esto requiere una base de datos de servicios y la capacidad de responder a
consultas SDP. Para soportar aplicaciones heredadas que se ejecuten sobre puertos series
virtuales, el registro de servicios es realizado por una aplicación auxiliar, la cual asiste al usuario
en la configuración del puerto.
CAPÍTULO V
MÓVILES GSM Y COMANDOS AT
56
5 Móviles GSM y comandos AT
En este capítulo se describe brevemente la tecnología móvil GSM (Global System for
Mobile communications), el cual fue utilizado en el sistema de alarma y monitorización. También
describen básicamente como son usados comandos AT, y posteriormente se explicará como se
envían los mensajes SMS a través de comandos AT.
5.1 GSM
En los comienzos de los años ochenta, muchos países en Europa habían desarrollado su
propio sistema de telefonía celular análoga que impedía la interoperabilidad más allá de las
fronteras de cada país. En 1982, el CEPT (Conference of European Postand
Telecommunications) estableció un grupo de trabajo para desarrollar un sistema paneuropeo al
que se denominó GSM-Groupe Speciale Mobile.
El grupo propuso desarrollar un nuevo sistema inalámbrico móvil con las siguientes
premisas: itinerancia (roaming) internacional, soporte para la introducción de nuevos servicios,
eficiencia espectral y compatibilidad con la ISDN (Integrated Services Digital Network). En
1989, la responsabilidad por el desarrollo de GSM fue transferida al ETSI-European
Telecommunications Standards Institute que denominó al proyecto como Global System for
Mobile Communications.
La evolución de GSM ha estado marcada por tres fases de evolución, la fase 1, en la que
se produjeron sus especificaciones; la fase 2, en la que se propuso la inclusión de servicios de
datos y de fax; y finalmente, la fase 3, en la que se realizan mejoras sobre la codificación de voz
y se implementan servicios de transmisión de datos avanzados, entre ellos GPRS (General Packet
Radio Service) y EDGE (Enhanced Data rates for Global Evolution).
GSM es un sistema de conmutación de circuitos, diseñado originalmente para voz, al que
posteriormente se le adicionaron algunos servicios de datos: servicio de mensajes cortos, un
57
servicio de entrega de mensajes de texto de hasta 256 caracteres y un servicio de datos GSM, que
permite una tasa de transferencia de 9.6 kbps.
5.2 Comandos AT
En esta sección se describe el uso de los comandos AT, su propósito, las notaciones
básicas y los diferentes modos de ejecución.
5.2.1 Introducción
Los comandos AT son instrucciones codificadas que conforman un lenguaje de
comunicación entre el hombre y un terminal denominado modem. En un principio, el juego de
comandos AT fue desarrollado en 1977 por Dennis Hayes como un interfaz de comunicación con
un modem para así poder configurarlo y proporcionarle instrucciones, tales como marcar un
número de teléfono. Más adelante, con el avance del baudio, fueron las compañías Microcomm y
US Robotics las que siguieron desarrollando y expandiendo el juego de comandos hasta
universalizarlo. Los comandos AT se denominan así por la abreviatura de ATTENTION.
Aunque la finalidad principal de los comandos AT es la comunicación con módems, la
telefonía móvil GSM también ha adoptado como estándar este lenguaje para poder comunicarse
con sus terminales. De esta forma, todos los teléfonos móviles GSM poseen un juego de
comandos AT específico que sirve de interfaz para configurar y proporcionar instrucciones a los
terminales. Este juego de instrucciones puede encontrarse en la documentación técnica de los
terminales GSM y permite acciones tales como realizar llamadas de datos o de voz, leer y escribir
en la agenda de contactos y enviar mensajes SMS, además de muchas otras opciones de
configuración del terminal.
58
La implementación de los comandos AT corre a cuenta del dispositivo GSM y no depende
del canal de comunicación a través del cual estos comandos sean enviados, ya sea cable de serie,
canal Infrarrojos, Bluetooth, etc. De esta forma, es posible distinguir distintos teléfonos móviles
del mercado que permiten la ejecución total del juego de comandos AT o sólo parcialmente. Por
ejemplo, algunos modelos de celulares no permite la ejecución de comandos AT relativos al
manejo de la memoria de agenda de contactos y llamadas pero sí que permite acceder al servicio
SMS; y otros modelos no permiten la ejecución de comandos AT relativos a la gestión de la
agenda ni de SMS pero si permiten hacer llamadas de voz y datos respectivamente.
5.2.2 Propósito de los comandos AT
Los Comandos AT se usan principalmente para ajustar las propiedades avanzadas del
teléfono. Esto lo podemos desglosar de la siguiente forma:
• Configurar el teléfono para una conexión inalámbrica, a través de infrarrojos o por el
sistema de bus o cable.
• Configurar el módem interno del teléfono para una conección inalámbrica, a través de
infrarrojos o por el sistema de bus o cable.
• Solicitar información sobre la configuración actual o estado operativo del teléfono o
módem.
• Probar la disponibilidad del teléfono o módem.
• Solicitar el rango valido de parámetros aceptados y cuando éstos son aplicables.
5.2.3 Notación de los comandos AT
El envío de comandos AT requiere la siguiente estructura:
59
Petición:
AT + CMG <CR>
Carriage Return
Command
Respuesta correcta:
<CR> <LF> OK <CR> <LF>Start Sequence End Sequence
Line Feed
Respuesta Incorrecta:
<CR> <LF> ERROR<CR> <LF>Start Sequence End Sequence
5.2.4 Ejecución de los comandos AT
En el modo de comandos on-line, hay cuatro tipos de comandos para cada situación:
• Comando de Configuración: para ajustar los parámetros operativos del módem
integrado. Su formato estándar es:
AT<command>=<parameters><CR>
60
Dónde:
AT: Notifica el módem incorporado que se ha ingresado una orden.
<command>: Nombre de la orden que se ha ingresado
<parameters>: Valores que son usados por el comando.
<CR>: Todas las líneas de comando terminan presionando la tecla <CR> (Return o
Enter).
• Comando de ejecución: Para una acción inmediata sin la necesidad de un parámetro.
Este tipo de comando es muy similar al anterior y usualmente no requiere de parámetros,
su formato es:
AT<command>
Por ejemplo para saber el estado de la batería del teléfono el comando a enviarle sería:
AT+CBC
Su respuesta sería:
CBC: 0,60
Lo que significa que su batería esta conectada (0) y que su carga remanente es de un 60%
(60).
• Comando de Lectura: Para ver la configuración del comando actual. Para comprobar la
configuración actual del comando, es necesario usar la opción “?”, su formato es:
AT<command>?
61
Por ejemplo para ver la configuración actual se ingresa
AT+CBST?
Lo que eventualmente devolvería algo como:
+CBST: 0, 0, 1
Esto significa la configuración de baudios es automática (0), conección asíncrona
(0) y por defecto (1).
• Comando de Prueba: Para probar la accesibilidad de un comando y el rango de los
parámetros, se usa la opción de la “=?” con el comando, su formato es:
AT<command>=?
Por ejemplo para saber los formatos disponibles para redactar un mensaje SMS se
ejecuta el siguiente comando:
AT+CMGF=?
Su respuesta sería:
+CMGF: (list of supported<mode>)
Lo eventualmente podría devolver:
+CMGF: 0
+CMGF: 1
+CMGF: 0,1
Siendo “0” modo ACCII y “1” modo PDU.
62
5.3 Mensajes SMS
En esta sección se describirá los comandos AT asociados al envío de los mensajes SMS y
los dos formatos posibles para la escritura de los mensajes con un ejemplo para cada caso.
5.3.1 Definición
SMS son las siglas de Servicio de Mensaje Corto. Disponible en redes digitales GSM
permitiendo enviar y recibir mensajes de texto de hasta 160 caracteres a teléfonos móviles vía el
centro de mensajes de un operador de red (como Entel, Claro o Movistar).
Si el teléfono al que se envía el mensaje está apagado o fuera de cobertura el mensaje se
almacena en la red y se entrega en cuanto el teléfono se conecta de nuevo a la red.
5.3.2 Comandos AT de SMS
En la tabla 5.1 se listan todos los comandos que se usan para la gestión de mensajes SMS
[10].
Comandos AT Función
AT+CSMS Selecciona los servicios de SMS
AT+CPMS Seleccionar lugar de almacenamiento de los SMS
AT+CMGF Seleccionar formato de los mensaje:
Modo ASCII o Modo PDU
AT+CSCA Establecer el Centro de mensajes a usar
AT+CSAS Guardar configuración
AT+CRES Restaurar configuración
AT+CNMI Activa indicación de mensajes entrantes
AT+CMGL Listar los mensajes almacenados
63
AT+CMGR Leer un mensaje SMS almacenado
AT+CMGS Enviar mensaje SMS
AT+CMSS Enviar mensaje almacenado
AT+CMGW Almacenar mensaje en memoria
AT+CMGD Borrar Mensaje
AT+CMGC Enviar Comando
Tabla 5.1. Comandos AT para mensajes SMS
5.3.3 Modo Texto
Para enviar un mensaje SMS se puede realizar de dos maneras diferentes. Se puede
utilizar el modo texto (ASCII, acrónimo inglés de American Standard Code for Information
Interchange), en que sólo hay que indicar el número de teléfono y el contenido del mensaje y el
modo PDU. El modo texto es el que se usa por defecto y es que normalmente se emplea si sólo
queremos transmitir un mensaje.
La configuración del módem para funcionar en uno u otro modo se realiza mediante el
comando AT+CMGF=<modo>, donde <modo> puede tener los siguientes valores:
• <modo>=1: Modo ASCII
• <modo>=0: Modo PDU (Modo por defecto)
Para enviar un mensaje en modo texto, se utiliza el comando AT+CMGS. Primero se
especifica el número de teléfono, seguido de un carácter retorno carro <CR>. El modem responde
enviando el carácter “>” que indica que se puede escribir el mensaje que se quiere enviar. Para
delimitar el mensaje hay que enviar el carácter <control-z> (carácter ASCII 26).
Si el mensaje se ha enviado correctamente, devuelve la cadena “+CMGS:<nr>” seguida
de OK. El campo <nr> es el número de referencia del mensaje, que se va incrementando,
tomando los valores comprendidos entre 0 y 255, cada vez que se envía un SMS.
64
AT+CMGS=" 85438822"<CR>
>Mensaje de prueba <control-z>
+CMGS: 2
OK
Puesto que se ha enviado un auto-mensaje (un mensaje SMS con destino al mismo móvil
que lo ha originado), al cabo de un cierto tiempo se recibe el mensaje, por lo que aparece en el
terminal lo siguiente:
+CMTI: "SM",14
Que indica que se ha recibido un mensaje SMS y se ha almacenado con el número 14. Si
ahora leemos el mensaje:
AT+CMGR=14
+CMGR: "REC UNREAD"," +5691600130"„"07/08/23,11:57:20+00"
Mensaje de prueba
OK
La información que se obtiene es la siguiente. Primero el estado del mensaje, “REC
UNREAD”, para indicar que es un mensaje nuevo que no se había leído. A continuación el
teléfono del remitente, la fecha y la hora en la que se ha recibido y finalmente el mensaje
recibido. Si ahora se vuelve a leer el mensaje, el estado será “REC READ”.
En caso de no haber cobertura a la hora de enviar el mensaje, el comando AT+CMGS
devuelve la cadena ERROR.
AT+CMGS="630672901"<CR>
65
>Mensaje de prueba <control-z>
ERROR
5.3.4 Modo PDU
En el modo PDU los datos se transmiten mediante una cadena de caracteres codificados
en hexadecimal (excepto algunos datos que se transmiten en decimal).
Cada valor hexadecimal se representa por 4 bits. Esto implica que cada byte (8 bits)
contiene 2 valores hexadecimales. El modo PDU requiere de un formato especial. Para obtener
los datos necesarios se ha utilizado un conversor ya existente llamado Javascript PDU
Converter escrito por Swen-Peter Ekkebus.
Como ejemplo en la figura 5.2 se ha dividido este mensaje en PDU en tres grupos y
detallado sus aspectos más importantes:
06916519061003 01000891854388220000 04E8373B0C
InformaciónSMSC
InformaciónPDU
Mensaje
Fig. 5.2: Cadena de caracteres dividida en 3 grupos
66
Información SMSC
Se ha denominado así al primer grupo de caracteres (ver figura 5.1) que se transmitirá al
terminal móvil conectado al computador. Estos datos contienen la información del número de
teléfono del centro de mensajería y la longitud de dicha información.
Como se puede observar en la figura 5.2, la longitud de los caracteres que contienen la
información del SMSC es de “06” bytes. Esta medida se obtiene dividiendo la cantidad de
caracteres que forman la información del SMSC (en este caso 12) por 2.
Esto se debe a que cada byte equivale a 2 de estos valores (éste también es el motivo de
que el resultado sea 06 en vez de 6, ya que el formato exige que se especifique mediante un byte
y, por lo tanto, se tiene que representar con 2 valores). Esta agrupación de 2 valores también se
conoce como octeto, debido a que está formado por 8 bits. Una vez se tiene la medida, llega el
momento de codificar el número del centro de mensajería. Se puede observar que antes de la
secuencia de números que llevan la información del número del SMSC, hay un octeto (91). Lo
que nos indica este valor es que el formato del número de teléfono que se está utilizando es el
internacional. Éste es el formato más común y se puede utilizar aunque el destinatario del
mensaje se encuentre en el mismo país que el remitente.
06 91 6519061003
Número del SMSCLongitud de la información
Fig. 5.2: Caracteres del grupo “Información SMSC”
Los octetos restantes son los que forman el número del SMSC. Como ya se vio en el
envío de mensajes en modo texto, el número es “5691600130”.
67
Este número no se codificará a hexadecimal pero tampoco se escribe directamente. La
forma de enviar el número es la siguiente: Primero se separa el número en octetos empezando por
la izquierda y, en caso de que sea una cifra impar, se añade una F a la última cifra. Después, en
cada octeto se intercambia la secuencia de sus números y el resultado es la secuencia de
caracteres que se enviarán (ver figura 5.3).
5691600130
56 91 60 01 30
65 19 06 10 03
Número de teléfonooriginal
Intercambio de posiciónde los números de cadaocteto
Caracteres que indicanel numero de teléfonoen el formato PDU
Fig. 5.3: Codificación de un número de teléfono.
Información PDU
Los parámetros más importantes de este grupo son los que indican el número del
destinatario y el primer octeto, que permite especificar que se va a añadir una cabecera adicional.
Esta cabecera se conoce como UDH (User Data Header) y es la que nos permitirá especificar el
puerto por el que enviar el mensaje (ver figura 5.3).
01 08 9185438822 00 00000
Número de teléfono destinoLongitud número de teléfono
Parámetros del mensaje
Fig. 5.4: Caracteres del grupo “Información PDU”
68
Si se utiliza un conversor para codificar los datos, el valor por defecto que se obtendrá en
el primer octeto será “11”. Si no se modifica este valor no se puede introducir la UDH (de hecho
sí que se podría introducir, pero el móvil no la interpretaría y el resultado sería un mensaje con
caracteres extraños y sin cumplir las especificaciones indicadas en la UDH). Sin embargo, al
modificar este valor y poner 01 ya se indica que en el campo de datos se incluirá una cabecera
adicional. La razón de este valor la encontramos en las especificaciones del formato PDU.
Cada bit del octeto hace referencia a diferentes parámetros de transferencia del mensaje.
El valor por defecto del octeto es 11 en hexadecimal, es decir 00010001 en binario. Las
especificaciones del formato dicen que para indicar que se añade una UDH, el valor de bit menos
significativo debe ser 1. De esta manera se obtiene en hexadecimal es 01. Éste deberá ser el valor
del octeto siempre que se desee enviar un mensaje con una cabecera adicional.
Por otra parte se observa que la longitud del número de teléfono en hexadecimal es 08. El
cálculo de esta longitud es diferente respecto al que se hacía en el de la información del SMSC.
La longitud de este grupo calcula el número de dígitos que componen el número de teléfono
donde se envía el mensaje. En nuestro ejemplo, este teléfono es “85438822” que se compone de 8
dígitos (de ahí se obtiene la longitud de “08”).
La codificación del número de teléfono sí que es idéntica al del caso anterior y también el
formato internacional se indica mediante el octeto 91 (aunque vemos que en este caso no se tiene
en cuenta este octeto a la hora de calcular la longitud, ya que no se considera un dígito del
número de teléfono). El resto de octetos de este grupo hacen referencia a la codificación de datos,
periodo de validez del mensaje, etc. En nuestro caso son valores que no se han modificado ya que
no afectan al diseño, así que se han dejado los valores típicos.
69
Datos
El último grupo en que hemos dividido la cadena de caracteres incluye la longitud del campo de
datos y el mensaje a enviar codificado (ver figura 5.5).
04 E8373B0C
Longitud del campo datos
Mensaje
Fig. 5.5: Caracteres de grupo datos
El primer octeto que forma el grupo “datos” es el que indica la longitud. Si se enviase un
mensaje sin cabecera adicional, este grupo sólo estaría formado por el mensaje. En tal caso la
longitud sería la de los caracteres que forman el mensaje a enviar (no los del mensaje codificado).
El mensaje “hola” tiene una longitud de 4 caracteres (los espacios también se cuentan), así que en
este caso el valor del primer octeto sería esta longitud en hexadecimal, es decir, “04”.
Se ha de tener en cuenta que los caracteres del mensaje que se desea enviar están
codificados en ASCII de 7 bits. Esto quiere decir que cada carácter del mensaje está representado
por 7 bits.
Por último tenemos el mensaje codificado. Esta codificación es necesaria ya que cada
carácter del mensaje está compuesto por 7 bits, pero el formato PDU está compuesto por octetos.
Por lo tanto se han de transformar los septetos de cada carácter en un conjunto de 8 bits.
Para realizar la transformación, se escribe cada carácter del mensaje en binario. El bit de la
derecha del segundo carácter se inserta en la izquierda del primero y así se obtiene el primer
octeto.
Como el segundo carácter ahora tiene 6 bits, se cogen los dos de la derecha del tercer
carácter y se añaden a la izquierda del segundo para así formar el segundo octeto.
70
De esta forma se van creando los octetos (para codificar el último carácter, se añaden los
ceros necesarios hasta formar el octeto). Una vez se tiene el mensaje agrupado en octetos, se
convierte cada octeto a hexadecimal y así se obtiene el mensaje codificado. En la tabla 5.4 se
puede observar cómo se codifica la palabra “Hola ” (seguida de un espacio):
Hex E8 37 3B 0C 02
Octetos 11101000 00110111 00111011 00001100 00000010
Septetos 1101000 1101111 1101100 1100001 0100000
Carácter h o l a
Tabla 5.4. Codificación del mensaje
Envío del mensaje modo PDU
Una vez que se tiene toda la información codificada ya se pueden ejecutar los comandos
para enviar el mensaje. De nuevo, el primer comando que se ha de ejecutar es CMGF para indicar
el formato del mensaje. En este caso le pasaremos el valor “0” para indicar el modo PDU. Una
vez especificado el formato, se escribe el comando de envío del mensaje (CMGS). El parámetro
que hay que pasarle a este comando es la longitud de la cadena de datos que vamos a transmitir.
Al calcular esta longitud no se tienen en cuenta los octetos que componen la información del
SMSC. En nuestro caso, si contamos los octetos que forman los grupos “Información PDU” y
“Datos” obtenemos una longitud de 15.
Una vez ejecutado el comando se deberá escribir la cadena de caracteres entera y
presionar (Ctrl. Z) para enviar el mensaje y se obtiene lo siguiente.
AT+CMGS=15 <CR>
> 069165190610030100089158348822000004E8373B0C <Control-z>
+CMGS: 8
OK
CAPÍTULO VI
FUNCIONAMIENTO DEL SISTEMA
71
6 Funcionamiento del sistema
En este capitulo se describirá el funcionamiento general del sistema de alarma. Se
entregará más detalle del hardware empleado, y se indicaran los pasos necesarios para programar
el microcontrolador. Además se explicará cada uno de los modos de funcionamiento (UTI -
ADC), a través de diagramas de flujo y en el caso del convertidor ADC se explicará paso a paso
el código del programa.
6.1 Diagrama de bloques del sistema de alarma
En la figura 6.1 muestra el diagrama general de las diferentes funcionalidades del sistema.
Un microcontrolador ARM7 NXP LPC2106 es el encargado de monitorear y controlar cada una
de las funciones del sistema. Su bajo costo, alta velocidad y capacidad de predicción de saltos
implementada en hardware permite monitorear cualquier evento a una velocidad 58.9824 Mhz.
72
MICROPROCESADOR32 - BITCON ACELERACIÓN DEMEMORIA POR HARDWARE
MODULOBLUETOOTH
CELULARGSM
CELULARGSM
INTERCAMBIO SMS
CAPTURAR FOTOGRAFÍA
GRABAR AUDIO
GRABAR VIDEO
ACTIVAR - DESACTIVAR ALARMA
LLAMADA DE DATO
POSIBILIDADES DE SELECCIÓN USUARIO
DetecciónInfrarroja
DetecciónVibración
DetecciónCapacitiva
DetecciónMovimiento
DetecciónTemperatura
DetecciónPresión
INTERFAZ
EntradaAnáloga
EntradaDigital
RS-232
RS-232SPI
Ciclo de trabajo
BluetoothLlamada de dato y/o vozSMS
Bluetooth
PC
RS-232
Fig. 6.1: Diagrama de bloques representando las funcionalidades del sistema.
El Microprocesador consta principalmente de tres canales de comunicación. El primero
está compuesto de un canal RS-232 que permite la actualización “In-System” del código fuente
del microcontrolador a ejecutar, sin la necesidad de ningún tipo de hardware externo. Sólo se
utiliza el programa “Philips LPC2000 Flash utility” [11] que permite cargar los archivos HEX
generados por el compilador Keil al microcontrolador. Este canal también se utiliza para realizar
la depuración del sistema en hardware, adicional al modo de depuración que existe en el
programa Keil.
Un segundo canal de comunicación es el encargado de interactuar con el módulo
Bluetooth del sistema, que es utilizado para controlar y comunicarse los diferentes estados desde
un celular. En realidad la comunicación se realiza con el MODEM del celular que incorpora
igualmente un módulo Bluetooth (medio de la comunicación), que es el medio para habilitar
diferentes funciones incorporadas en el celular; por ejemplo: comunicación a través del módulo
GSM.
73
Finalmente y quizás el más importante, un tercer multi-canal de comunicación es el
encargado de acondicionar las señales eléctricas provenientes desde diferentes tipos de sensores,
sistemas análogos y/o digitales. Este canal multipropósito prácticamente es la interfaz que
permite aumentar el número de aplicaciones finales que se le puede dar al sistema como se verá
mas adelante.
6.1.1 Interfaz de Acondicionamiento de Señales
La interfaz de acondicionamiento de señales está compuesta por tres diferentes tipos de
interfaz para ingresar información externa al microcontrolador.
a) Interfaz digital: El sistema es capaz de reconocer directamente señales digitales TTL
de 5V y 3.6V (LowV). Esta alternativa permite conectar cualquier sistema con salida digital TTL
(Transistor–Transistor Logic) existente en el mercado para combinar con el presente sistema.
Adicionalmente, existen señales de ±15 V disponible en el sistema, las que podría ampliar el
espectro de sistema digitales que podrían interactuar con el presente trabajo.
b) Interfaz Universal a sensores de bajo costo (UTI): Esta interfaz es utilizada para
acondicionar señales eléctricas provenientes desde diferentes tipos de sensores al
microcontrolador. Esta interfaz es capaz de alcanzar una resolución entre 13-bit y 14-bit para
cualquiera de los siguientes tipos de sensores: PT100, PT1000, Termistor 1KΩ - 25KΩ, sensores
tipos puentes con desequilibrios de 0.25% ó 4%, sensores capacitivos en el rango de 0-2 pF,
sensores capacitivos en el rango 0-12 pF, sensores capacitivos en el rango de 300 pF y sensores
resistivos en el rango de 1 kΩ – 25 kΩ. Independiente del modo de operación de la interfaz
universal, la información de salida es convertida en ciclos modulados en el tiempo sin señal de
reloj, lo que permite separar la interfaz del microcontrolador a una distancia considerable y con
un sólo par de cables.
74
Los ciclos modulados en el tiempo son muestreados a 58.9824 Mhz por el
microcontrolador para ser convertido de información en el dominio del tiempo al dominio
original de la variable bajo monitoreo.
Todo este proceso de recuperación de la información considera la utilización de señales
sincrónicas, filtros activos para la eliminación de interferencias de baja frecuencia tales como la
red de alimentación y la calibración de la información usando el método de las tres señales que
elimina errores acumulativos y multiplicativos del sistema. Además, con el objetivo de cubrir un
gran rango de aplicaciones se ha incorporado un circuito acondicionador de nivel en las señales
de excitación capacitivas que transforman señales de 0V a 5V en ±15V. Como consecuencia la
flexibilidad del sistema permite conectar sensores capacitivos desde un par de milímetros
cuadrados de área hasta 2x2 m de magnitud.
c) Interfaz a señales análogas: Se incorporó un conversor A/D de 8/bit con capacidad de
realizar muestreo hasta 1 MSPS, configurado y controlado vía comunicación serial SPI
(Comunicación Serial Sincrónica). Para esta aplicación se configuró el microprocesador como
maestro y el convertidor análogo digital como esclavo. Esta interfaz permite conectar sensores
análogos con señales de salida en el rango de 0-5 V.
6.1.2 La Interfaz Bluetooth
La interfaz Bluetooth está compuesta en dos partes. La primera parte considera la
comunicación bi-direccional entre el microcontrolador y el módulo Bluetooth [12] para el
intercambio de información. La segunda parte de la interfaz considera la comunicación del
módulo Bluetooth incorporado en el PCB con el módulo Bluetooth de un celular. Esto permite
utilizar un solo celular cuando el usuario se encuentra ubicado a una distancia inferior de 250m,
de otra forma la utilización de dos celulares permite eliminar la limitación de distancia.
75
6.2 Hardware
La primera versión (demo) del sistema completo implementado en hardware se muestra
en la figura 6.2. El sistema consta de una tarjeta de evaluación [13] desarrollada por la empresa
OLIMEX para el microcontrolador NXP LPC2106. Con esta tarjeta se desarrolló la primera
etapa de configuración y programación del microcontrolador. Gran parte del tiempo significó
implementar los programas de adquisición y configuración para lectura de los sensores a bajo
costo.
Lo pasos empleados para la programación del microcontrolador son los siguientes:
1. Conectar el cable serial al DB9 de la placa al puerto del computador COM 1
2. Conectar la fuente de poder al conector PWR
3. Cerrar el Jumper BSL
4. Hacer clic en el botón RST
5. Cargar el archivo *.hex generado por el software Keil por medio de la aplicación
“LPC 2000 Flash Utility”
6. Quitar el Jumper BSL
7. Hacer clic en el botón RST (con este paso el microcontrolador sale del modo de
programación y ejecuta el programa )
Fig. 6.2: Primera versión del sistema de alarma.
76
Después de haber completado la etapa de programación y conexión de todos los
componentes en la placa demo, se inició la etapa de diseño de la placa final por medio del
software NXP ALTIUM 2004 (ver anexo – C).
La figura 6.3 muestra la placa final la que comprende principalmente de las siguientes
partes:
a) Fuente de alimentación
b) Comunicación serial RS-232
c) Microcontrolador NPX LPC2106
d) Interfaz Universal para sensores de bajo costo (UTI)
e) Multiplexor Serial de la empresa Smartec Bv
f) Conversor ADC
g) Módulo Bluetooth
h) Buffers
Fig. 6.3: Versión final del sistema de alarma (dimensiones de la placa: 89.84mm x 127.46mm)
77
Adicionalmente el sistema de alarma consta de:
a) 6 entradas análogas en la Interfaz universal UTI (A, B, C, D, E y F)
b) 4 entradas análogas acondicionadas para el conversor análogo-digital AD7904
c) 4 entradas digitales TTL de uso general controladas por el microcontrolador
d) 9 entradas adicionales acondicionadas por medio del multiplexor serie
6.3 Diagrama de bloque, flujo según aplicación
A continuación se describirán cada de las partes del programa principal a través de su
respectivo diagrama de flujo y código fuente que se considera más importante de mencionar
(código completo del programa principal se encuentra en el anexo A).
6.3.1 Interfaz Universal UTI
Esta interfaz entrega su información a través de modulación de pulsos, de acuerdo lo
explicado anteriormente en el capítulo 3.1. Esta información es una secuencia continua de pulsos
rectangulares (ver figura 6.4). Los intervalos de tiempo Txi (de acuerdo al modo seleccionado los
intervalos de tiempo podrían ser 1, 2 o 3) y el intervalo de tiempo Tref, están entre dos flancos de
subida adyacentes, contienen la información de los valores mensurados Mx (en la figura 6.4 se
muestra únicamente el intervalo de tiempo Tx) y el elemento de referencia Mx. El intervalo de
tiempo Toff se representa como la suma de dos períodos. Este intervalo de tiempo corresponde
usualmente al offset del sistema bajo una determinada condición y generalmente depende de la
tecnología de la placa, cables, etc. El orden de las fases se muestra en la figura 6.4.
78
Tref
1 ciclo
TX
Toff
Tref TX ToffToff1 Toff2
Fig. 6.4: Señales moduladas en la salida de la Interfaz Universal.
En la figura 6.5 se muestra el diagrama de flujo representando los pasos más importantes
que el microcontrolador debe realizar para aplicar la técnica de las tres señales. Esto permite la
auto-calibración continua del sistema independiente del tipo de sensor conectado al sistema.
Inicio
Selección de modo
Captura de los datosmedidos durante los
n periodos consecutivos
Reconocimiento del número de fases más
sincronización
Cálculo del resultado
Mostrar Resultado
Salida de datos vía interface
RS-232
Configuración por medio de software o hardware
Fig. 6.5: Diagrama de flujo del proceso de captura y conversión del microcontrolador con la
Interfaz Universal UTI
79
Selección de modo: El modo de funcionamiento de la interfaz universal se puede
seleccionar automáticamente por software o por hardware. La selección mediante software se
puede hacer de dos maneras: en el programa principal con el modo ya configurado o en el
hiperterminal de Windows vía comunicación RS-232. La selección por hardware puede ser
realizada a través de switches.
La Interfaz Universal UTI consta de 16 diferentes modos de operación (ver figura 6.6), los
que son seleccionables dependiendo del tipo de sensor(es) que se desea leer y su rango de
operación. Además en el modo 3 existe la posibilidad de configurar la opción de utilizar un
multiplexor externo, el que permite trabajar hasta con 9 sensores a la vez seleccionables a través
del microprocesador.
A nivel de usuario, el modo de operación de la Interfaz Universal es seleccionable a través
de 4-bits para los 16 modos disponibles. La selección del modo configura automáticamente un
número fijo n (n = 3, 4 o 5) de la cantidad máxima de mediciones a realizar denominada fases
Ph. Adicionalmente, se considera M períodos necesario obtener un ciclo completo de medida, el
cual es siempre igual a M = n + 1. Esto es debido a que la fase correspondiente a la medición del
offset del sistema Toff, es divida en dos fases. Como resultado, las fases generadas por las
mediciones del offset son muchos más pequeñas que las demás mediciones y aproximadamente
iguales. Esto permite su identificación en tiempo real por parte del microcontrolador, eliminando
la necesidad de sincronización y utilización de reloj (en la práctica permite transferir los datos en
un canal de sólo dos cables a muy bajo costo). Esta gran flexibilidad permite cambiar el modo
después de cada medición, para medir un conjunto de sensores de distintas naturalezas en forma
simultánea (multiplexada en el tiempo).
Además por medio de software es posible colocar la Interfaz Universal en ahorro de
energía, permitiendo incluso tener varias interfases en paralelo y activar cada una según la
aplicación.
80
La Interfaz Universal UTI trabaja con dos velocidades de conversión diferentes: el modo
rápido (fast) y modo lento (slow). En el modo rápido un ciclo completo de medición toma
alrededor de 10 ms para cinco fases, mientras que en el modo lento un ciclo completo de
medición toma alrededor de 100 ms para cinco fases. Esto se explicó en más detalle en el capítulo
3.1.5, donde la diferencia entre las velocidades viene dado por la selección del número de bits
utilizado en el contador binario al final de la oscilación. Por lo tanto como es de esperar, la
resolución de la Interfaz Universal es alrededor de 2-bits de resolución mejor que su versión
rápida.
Fig. 6.6: Menú de selección de la UTI
Captura de los datos medidos: El número mínimo de períodos consecutivos a medir
para obtener al menos una ciclo completo de medición es: M = n + 1. Sin embargo, para
implementar la sincronización de la información se programó la medición de k ciclos sucesivos
(el número total de los períodos en este caso será L = k · (n + 1) = k · M), antes de obtener un
resultado.
En el programa principal se utilizó k = 2, debido a que se tomaron dos ciclos completos
para poder efectuar el reconocimiento de los intervalos de tiempos adquiridos.
81
La medida de un número de períodos consecutivos puede ser efectuada de diferentes
maneras. Lo que se necesita es un contador que continuamente monitoree los pulsos del reloj. El
contador tiene que ser leído cada vez que aparece una nueva fase, el que es detectado por los
flancos de subida a la salida de la Interfaz Universal. Una forma simple para medir períodos de la
Interfaz es usar el modo "captura" disponible en los timers del microcontrolador. Cada flanco de
subida produce una interrupción que permite recuperar el valor del timer (32-bits) al momento de
la interrupción desde el registro de captura. Este método es sencillo y fácil de programar, sin
embargo es necesario implementar la detección de la condición de desbordamiento del contador.
El desbordamiento del contador se detectó implementando el modo de comparación, el
cual activa una interrupción cuando el contador es igual a un registro auxiliar programable (un
valor preestablecido igual a 0xFFFFFFFF es suficiente para cumplir esta función). La detección
de esta bandera permite la corrección de los tiempos entre interrupciones de la siguiente manera:
if (flag_overflow)
tie = 0xFFFFFFFF – timerold + timer;
flag_overflow = 0;
Siendo tie el periodo medido, timerold el tiempo capturado en la interrupción anterior y
timer el tiempo actual capturado.
Reconocimiento del número de fases más sincronización: Para reconocer las diferentes
fases entregadas por la Interfaz Universal, se muestra las diferentes posibilidades de información
según el modo de operación con excepción del modo con multiplexor externo (ver figura 6.7).
Dos ciclos completos son capturados para implementar vía software en el microcontrolador la
detección de cada fase.
82
Fig. 6.7: Señales generadas por la Interfaz Universal según el número de fases a
reconocer.
Se definió físicamente una entrada de la Interfaz Universal como defecto para la medición
del offset del sistema, la que llamaremos terminal "B". De este modo, aún cuando los valores de
las otras señales del sensor son muy pequeños y casi igualan a la señal de offset, el período de
tiempo Txi, correspondiente a estas fases, será aproximadamente el doble con respecto a los dos
períodos Toff. Esto permite fácilmente realizar el reconocimiento de las fases que se muestran en
la figura 6.7.
Se pueden aplicar diferentes técnicas para el método de reconocimiento de fases. La
técnica empleada consiste en medir dos ciclos completos (2 · (Phases + 1)) almacenados en
forma consecutiva en un arreglo de captura en el microcontrolador. Los datos almacenados en el
arreglo de captura se asignan a un nuevo arreglo auxiliar para poder identificar las fases. Por
medio de un ciclo “For” se buscar el periodo de tiempo más pequeño (Tmin), que puede ser Toff1 o
Toff2 como se muestra en la figura 6.8.
Toff Tref TX Toff Tref TX Toff Tref TX Toff Tref TX
Toff Tref Tx1
Toff Tref TX
Tx2 Toff Tref Tx1 Tx2
Toff Tref Tx1 Tx2
Toff Tref Tx1 Tx2 Toff Tref Tx1
Tx3 Toff Tref Tx1 Tx2 Tx3Toff Tref Tx1 Tx2 Tx3
3 Fases
4 Fases
5 Fases
83
TXn Toff1 Toff2
Tmin-1 Tmin Tmin+1
Tref
Fig. 6.8: Señales analizadas para la búsqueda del offset.
Para que el periodo de tiempo Tmin sea Toff1 se tiene que cumplir lo siguiente:
Tmin-1 > Tmin+1
Esto se debe a que el periodo de tiempo Txn debería ser siempre mayor que Toff2, si se
reconociera como mínimo a Toff2 no se cumpliría esta condición debido a que el periodo de
tiempo anterior a este es Toff1 y este es siempre menor a Tref.
Con esto se asegura el reconocimiento del primer offset (Toff1). Al momento de reconocer
la posición donde se encuentra el primer offset, se almacena la posición a la variable bp (en el
programa principal). Si bp es mayor de cero entonces se ajusta el índice de posición del arreglo
de captura para que sea retrasado bp veces, de tal manera que en la próxima captura sean
capturados dos ciclos completos comenzando el almacenamiento con el primer offset. Si todo
esto resulta exitoso, se activa la bandera de sincronización y se habilita la posibilidad de transferir
todas las mediciones a un computador personal vía RS232. Adicionalmente como se verá más
adelante, las mediciones son procesadas en el microcontrolador para tomar decisiones de disparo
en alguna condición de alarma.
84
Cálculo del resultado: Se aplica la técnica de las tres señales (descritas en el capitulo
3.1.2) y el resultado del elemento mensurado con respecto a una diferencia esta dado por:
x off x
ref off ref
M M EMM M E
−= =
−
(6.1)
El microcontrolador consta de un multiplicador por hardware, lo que permite la
realización de una multiplicación en sólo 0.424 useg. Esto permite realizar una serie de cálculos
entre mediciones continuas de la interfaz universal (en el caso más rápido debería existir una
interrupción cada 10 mseg).
Mostrar resultado: Existe dos tipos de datos disponibles para cada fase de medición con
excepción del offset del sistema. El primer tipo corresponde a los valores instantáneos medidos
por la interfaz universal (un procedimiento análogo se implemento más adelante con el conversor
análogo/digital). Estos valores pueden ser utilizados directamente según el tipo de aplicación se
le quiera dar a los datos. Sin embargo, se detectó que para la aplicación del sistema de alarma, en
la mayoría de los casos es necesario detectar cambios relativos. Por lo tanto, se implemento
internamente en el microprocesador un filtro digital pasa-bajo del tipo IIR recursivo (Infinite
Impulse Response). Su implementación se basó en la determinación de los coeficientes de las
ecuaciones de diferencias representadas como:
a(1) y(n) = b(1) x(n) + b(2) x(n-1) + ... + b(nb+1) x(n-nb) - a(2) y(n-1) - ... - a(na+1) y(n-na)
i i i ii i
(6.2)
Siendo b(n) y a(n) los coeficientes del filtro, n orden del filtro, x(n) los datos de entrada e
y(n) los datos de salida. El filtro pasa-bajo implementado fue de la clase Butterworth debido a su
respuesta plana. Por lo tanto, diseñando un filtro a una frecuencia de corte wc se pueden
comparar los cambios instantáneos con respecto a una referencia (señal filtrada).
85
En una primera etapa se implementó el filtro pasa-bajo y el despliegue de las mediciones
en el software Labview. En forma experimental se determinó el orden del filtro y la frecuencia de
corte para el caso de detección de personas por medio de cuatro sensores capacitivos. Con estos
datos obtenidos se utilizó el software Matlab para la determinación de los coeficientes del filtro,
que luego fue implementado en el microcontrolador.
La figura 6.9 muestra los resultados de la implementación ya en el microprocesador.
Inicialmente las fases en estado estacionario (los valores de offset no son representados en este
gráfico) y luego se muestra cuando el sistema es activado por la aproximación de una persona a
los sensores capacitivos. Sólo una fase filtrada se muestra para mayor claridad del gráfico.
Claramente la comparación entre la señal filtrada y los valores instantáneos es suficiente para
detectar cambios rápidos debidos al acercamiento de una persona. Los cambios en los valores
absolutos de los sensores capacitivos producidos por cambios de humedad, temperatura y/o
diferentes acoplamientos capacitivos por la instalación misma del sistema son calibrados
automáticamente por el sistema.
Señal Filtrada
Fig. 6.9: Gráfico de muestreo de las fases, sistema activado por medio de sensores capacitivos.
86
6.3.2 Interfaz para señales análogas Conversor análogo/digital
Un conversor análogo-digital de 4-canales fue agregado en el proyecto para ofrecer la
posibilidad de conectar sensores análogos al sistema. Se seleccionó la comunicación SPI (Serial
Peripheral Interface) como canal de comunicación entre el conversor y el microprocesador, donde
el microcontrolador fue configurado como master y el conversor como esclavo.
En la figura 6.10 se muestra el diagrama de bloques del programa principal para controlar
el conversor análogo-digital (AD7904) [7].
Inicio
SPI configuración
Enviar encabezadoal conversor
Configuración del conversor
Captura de datos
Mostrar Resultado
Procesar datos
Fig. 6.10: Diagrama de bloques del proceso de conversión y captura para el conversor análogo
digital
87
SPI configuración: Se configura la interrupción del canal SPI. Esto permite que el
microcontrolador se encargue de cualquier otra tarea necesaria, y sólo cuando se ha terminado la
conversión, una interrupción por hardware anuncie la disponibilidad del dato. Además, en esta
configuración se selecciona la prioridad que tiene esta interrupción sobre otras del sistema. La
interrupción en si ejecuta una subrutina que se encarga de procesar los datos recibidos.
A continuación se muestra la subrutina de configuración SPI utilizada en el programa
principal.
void SPI_config(void)
VICVectAddr0 = (unsigned int) SPI_Isr; // Prioridad 0 para la
// interrupción SPI
VICVectCntl0 = 0x2A; // Asignado canal 10 (SPI) a la prioridad 0
VICIntEnable = 0x400; // Interrupción SPI habilitada
S0SPCCR = 0x36; // Se estable el reloj y se calcula como:
// (PCLK rate / SPCCR) = (58.9824Mhz/54) = 10.9226Mhz
S0SPCR = 0xB0; // Se configura el registro de control del reloj
IOSET = 0x40000000; // SS_AD7904 = 1 Chip select high al conversor
anf = 0.99874; // Coeficientes del filtro del medidor de aceleración
bnf = 0.00062792; // Coeficientes del filtro del medidor de aceleración
Enviar encabezado al conversor: El encabezado consiste en enviar datos de
inicialización al conversor para configuración de su funcionamiento. La activación del conversor
análogo-digital consiste en una trama de 16-bit en estado alto, seguido de los datos de
configuración del registro de control. El encabezado se envía por medio de una subrutina
especialmente acondicionada para enviar datos a través del canal de comunicación SPI, la que se
muestra a continuación:
88
static void AD7904_Write(unsigned char add, unsigned char val)
spiBuf[0] = add; // Guardar el valor almacenado en add al arreglo spibuf
spiBuf[1] = val; // Guardar el valor almacenado en val al arreglo spibuf
msg = spiBuf; // Asignar puntero msg a spibuf
count = 2; // Número de bytes
state = SPI_BUSY; // Asignar estado de ocupado
IOCLR = 0x40000000; // SS_AD7904 = 0 Chip select LOW al conversor
S0SPDR = *msg; // Enviar el primer byte
while (state == SPI_BUSY) ; // Esperar hasta que se termine la
// transferencia
IOSET = 0x40000000; // SS_AD7904 = 1 Chip select high al conversor
La subrutina se llama desde el programa principal de la siguiente manera:
AD7904_Write(0xFF,0xFF);
El envió del encabezado se hace por medio de dos tramas de 8 bit debido que el buffer del
bloque SPI del microcontrolador es de 8 bits.
Configuración del conversor: En esta etapa se configura el registro de control del
conversor análogo-digital por medio de una trama de 16 bit que establece: La secuencia de
conversión, el canal a utilizar, el modo de administración de energía, el valor de la tensión de
referencia para la conversión y el tipo de codificación de los datos a la salida del conversor.
Los datos enviados de detallan en la figura 6.11 mostrado a continuación:
W RITE SEQ1 ADD1 ADD0 PM1 SEQ0 RANGE CODINGDONTCDONTC PM0 DONTC
1 0 1 1 110 00 0 00
MSB LSB
0x83h 0x30h
Fig. 6.11: Configuración del registro del control del ADC
89
El comando es el siguiente:
AD7904_Write(0x83,0x30)
Captura de datos: Cuando el conversor recibe los datos correspondientes al registro de
control, se inicializa el proceso de conversión y envían los datos convertidos al microcontrolador.
Cuando el microcontrolador recibe el primer bit por flanco de subida, se activa el registro de
interrupción y se cargan los datos recibidos a un arreglo para posteriormente ser procesado.
La subrutina empleada para la captura de datos mediante interrupción es la siguiente:
void SPI_Isr(void) __irq
if ((S0SPSR & 0xF8) == 0x80)
*msg++ = S0SPDR; // Leer byte del esclavo
if (--count > 0)
S0SPDR = *msg; // Enviar próximo byte
else
state = SPI_OK; // Transferencia completada
else // SPI error
*msg = S0SPDR; // Lectura ficticia para despejar banderas
state = SPI_ERROR;
S0SPINT = 0x01; // Reset bandera de interrupción
VICVectAddr = 0; // Reset VIC
90
Procesar datos: Los datos recibidos corresponden al valor análogo de la tensión en la
entrada del conversor con respecto a la tensión de referencia.
Para la demostración de su buen funcionamiento, se conectó un medidor de aceleración
(ver figura 6.12) el cual se implemento en la entrada del conversor análogo digital, debidamente
acondicionada por medio de un amplificador operacional (OPA2340PA) en modo seguidor de
tensión que tiene como objetivo actuar como buffer.
El medidor de aceleración empleado es el modelo ADXL103 (ver Anexo - D) de la
empresa Analog Device. Es un sensor de alta sensibilidad, bajo consumo de energía, detección
unidimensional y la señal de salida es proporcional a la aceleración de gravedad en el rango de
±1.7g. El pequeño tamaño del sensor de aceleración (vibración) lo hace muy apropiado para ser
camuflado fácilmente en la instalación del mismo, reduciendo el impacto visual producto de la
instalación del sistema.
Fig. 6.12: Medidor de aceleración ADXL103
Los datos capturados se filtran por medio de un filtro digital pasa-bajo del tipo IIR
nuevamente. El modelo recursivo del filtro está dado por medio de ecuaciones de diferencias.
91
Los datos de diseño del filtro fueron los siguientes:
500sf Hz= Frecuencia de muestreo
0.1cf Hz= Frecuencia de corte
El diseño del filtro se realizó directamente en el software Matlab se obtuvo un filtro de
primer orden y el modelo en ecuaciones de diferencias con los coeficientes es el siguiente:
( )( ) 0.00062792 ( ) ( 1) 0.98875 ( 1)y n x n x n y n= + − + −i i 6.3
La figura 6.13 y 6.14 se muestran las respuestas del medidor de aceleración cuando está
sin activar y activado respectivamente.
Fig. 6.13: Respuesta del medidor de aceleración sin activar
92
Fig. 6.14: Respuesta del medidor de aceleración activado
La línea azul representa los datos filtrados por el filtro pasa-bajo, cuyo valor absoluto
cambia según la orientación de instalación final del sensor. Sin embargo para tomar la decisión
del disparo de la alarma, se comparan los valores relativos de la señal filtrada con respecto a la
instantánea. Si ésta sobrepasa un límite predeterminado, entonces será activada la alarma.
6.4 Activación Alarma
En esta sección se describirá el proceso que se implementó a modo de demostración
cuando se activa la alarma. Se desea destacar que existe una gran flexibilidad del sistema, lo que
permite modificar esta demostración según las necesidades. En la figura 6.15 se muestra el
diagrama de flujo de la activación de la alarma, a continuación se detallarán los pasos realizados
en el programa principal.
93
Inicio
Alarma Activada
Establecer conección del sistema con teléfono móvil vía Bluetooth
Captura de Fotografía(s)
Realizar llamada(s)y/o
Enviar mensaje(s) de texto
Si
No
Deshabilitar conexión del sistema con
teléfono móvil vía Bluetooth
Fig. 6.15: Diagrama de flujo de la activación de la alarma
Después de haber completado la etapa de filtrado, ya sea en el modo de la Interfaz
Universal o en el modo del conversor ADC se activa una bandera (flag_filtro). Con esta bandera
se inicializa el proceso de detección de cambios que consiste básicamente en una sustracción
entre los valores mensurados con respecto a la salida del filtro digital. El resultado de la
sustracción se almacena en una variable auxiliar (alm) para posteriormente compararla con un
valor preestablecido. Este valor se define en función de la sensibilidad que se requiera.
A continuación a modo de ejemplo se explicará el código implementado para realizar el
proceso de detección de cambios señalado anteriormente.
94
if(flag_filtro)
alm = arry[2] - arry2[2]; // Diferencia entre el dato filtrado y el sin
// filtrar
if(alm >= 0x1F4) // Si la diferencia es superior a 500 unidades
alarma = 1; // Se activa la bandera de la alarma
if(alarma)
alarmax(); // Subrutina de alarma
flag_filtro = 0; // Se deja en cero para volver a filtrar los datos
turn = 200; // Se configura a 200 la vuelta de datos filtrados
La variable “turn” tiene como objetivo producir un retraso al momento posterior de
activarse la alarma. Para que el sistema no vuelva a activarse mientras se está ejecutando el
procedimiento de notificación de alarma activa.
Alarmax() : Agrupa todas las subrutinas encargadas de realizar las funciones descritas en
el diagrama de flujo figura 6.15 en el momento que se activa la alarma. Su principal objetivo es la
de gestionar la comunicación inalámbrica Bluetooth a través de comandos AT (ver anexo E) por
medio de funciones ya preestablecidas. La subrutina de este programa se describirá a
continuación.
void alarmax(void)
IOCLR = 0x80000; // Apaga LED verde 2
IOSET |= 0x100000; // Encender LED rojo 2
connect_MBT(); // Subrutina de conección Bluetooth
foto(); // Subrutina de captura de fotografía
call_cell(); // Subrutina de llamada de voz y/o dato
if(IOPIN & p031) send_sms(); // Enviar SMS
disconnect_MBT(); // Subrutina de desconexión Bluetooth
alarma = 0; // Bandera de alarma apagada
95
A continuación se detallará brevemente las funciones de cada una de las subrutinas
mostradas anteriormente.
connect_MBT() : Establece la conección del sistema con el teléfono móvil vía Bluetooth
y configura el teléfono móvil por medio de comandos AT. Hay parámetros del teléfono móvil
que son necesarios configurarlos como por ejemplo quitar el eco del celular, cambiar el modo de
texto, habilitar las teclas de navegación, enviar PIN si el celular está protegido, etc.
foto() : Realiza la captura de una o más fotografías por medio de discado automático
por teclado controlado en forma remota, esta función se realiza por medio del comando
AT+CKPD. Este comando permite la emulación de digitación de cualquier tecla del celular. Se
utilizó este comando debido a su flexibilidad de uso, debido a que no todos los celulares utilizan
el mismo comando AT para capturar fotografía.
call_cell() : Realiza una llamada por medio de discado automático por teclado, se
utiliza el mismo comando descrito anteriormente (AT+CKPD), con la diferencia de que se usó la
opción de configurar los tiempos de discado y ejecución de cada tecla. Esto permite tener más
control que el comando básico ATD que normalmente se utiliza para este propósito.
disconnect_MBT() : Realiza la desconexión del sistema con el teléfono móvil vía
Bluetooth por medio de comandos AT. Con esto, la utilización de energía se optimiza y permite
alargar la vida útil de la batería del teléfono móvil.
96
6.5 Aportes Originales de este trabajo
Los aportes originales realizados en este trabajo son:
La programación del código fuente (en lenguaje C) para el control, captura,
sincronización y filtrado de las señales enviadas por la Interfaz Universal.
La programación del código fuente (en lenguaje C) para el control, captura y filtrado de
las señales enviadas por el multiplexor serie.
La programación del código fuente (en lenguaje C) para la configuración del Módulo
Bluetooth.
La programación del código fuente (en lenguaje C) para el envío y recepción de
comandos AT
La programación del código fuente (en lenguaje C) para el filtrado los datos enviados por
el conversor análogo digital.
Diseño completo del sistema a nivel hardware que incluyó selección sistemática de
componentes y conectores para la implementación final en PCB con doble cara.
Disponer de un sistema inalámbrico capaz de monitorear y disparar eventos.
Adicionalmente, se agregó la familia de sensores capacitivos de tamaños de unos mm
hasta un par de metros para detección de personas. Esta tecnología no se encuentra
disponible en los sistemas de alarma actuales.
97
Diseño de un sistema de bajo costo, que aporta mayor funcionalidades a nuestro equipo
celular. Además, su bajo consumo de energía (alrededor de 50 mA) permite la operación
del sistema con baterías.
Aunque se presenta una demostración para cada interfaz, el sistema permite conectar
directamente una gran cantidad de sensores de diferentes naturalezas. Donde se
conectaron los sensores capacitivos es posible conectar sensores de diferentes naturalezas
como: sensores de temperatura (PT100, PT1000, termistores), sensores de presión y/o
aceleración basados en des-balances de impedancias (strange gauge), sensores de
humedad, etc.
Lo más importante en el desarrollo de este trabajo, es el profundo conocimiento de cada
una de las partes que permitiría en un tiempo corto adaptarlo a otras necesidades; como
por ejemplo agregarle una memoria externa para almacenar eventos y transmitirlos vía
celular a otro lugar.
98
6.6 Trabajos futuros
Los resultados obtenidos durante el desarrollo del presente trabajo han sido satisfactorios
y concordantes con lo esperado. Originalmente el sistema no incluía Bluetooth sino solo la
conexión del celular vía cable RS232. Sin embargo, la incorporación del control del celular vía
Bluetooth y el funcionamiento de los diferentes modos de activación del sistema de alarma ha
resultado en una gran flexibilidad. Sin embargo, convendría profundizar y desarrollar las
siguientes tareas para trabajos futuros:
• Implementar una interfaz en el celular del usuario final que permita tener una
interacción inmediata con el sistema de alarma. Esto se logra estudiando el
lenguaje de programación Java 2 Platform Micro Edition que permite desarrollar
aplicaciones para dispositivos limitados más específicamente para teléfonos
móviles. También es necesario estudiar los API (Application Programming
Interface) JSR 82 que básicamente permite desarrollar aplicaciones de bajo nivel
del Bluetooth.
• Integrar en lo posible más componentes de superficie y montaje de los mismos por
las dos caras del PCB, para lograr un tamaño aun más reducido que el obtenido
actualmente (89.84mm x 127.46mm). Con este cambio es posible reducir el
tamaño PCB en un tercio del tamaño actual.
• Depurar la subrutina de sincronización del programa principal para que se haga
solamente una sincronización inicial.
• Es posible agregar un módulo OEM GPS, que permitiría hacer un seguimiento
físico de un objeto móvil.
• Por último se propone una continuación de la investigación sobre la Interfaz
Universal UTI, de la que en este trabajo sólo se han presentado brevemente los
fundamentos teóricos (capitulo 3.1) y algunos resultados de experimentales
mostrados en el capitulo 6.4.1.
CAPÍTULO VII
CONCLUSIONES
100
7 Conclusiones
Se propuso como objetivo principal de este trabajo el estudio, optimización y construcción
de un sistema universal compatible con diferentes modelos de celulares de tal manera que
permitan convertir un celular en un sistema de: monitoreo, seguimiento y/o alarma a bajo costo.
Para poder alcanzar estos objetivos se realizó un estudio exhaustivo del tipo de interfases para
sensores, de los protocolos de comunicación inalámbrica Bluetooth y comandos AT para el
control del teléfono móvil.
En una primera etapa se estudió e implementó una Interfaz Universal UTI. Esta es capaz
de medir señales desde múltiples sensores pasivos sin la necesidad de hardware adicional. Esta
interfaz convierte las mediciones en señales moduladas en el tiempo, sin la necesidad de
amplificadores de instrumentación ni convertidores análogos digitales, manteniendo el sistema a
bajo costo. Esta interfaz tiene la capacidad transformar la señal de diversos tipos de sensores
capacitivos, resistivos y modularlos para ser transmitido directamente al microcontrolador. La
interfaz es capaz de funcionar en 15 modos diferentes tales como: sensores capacitivos en el
rango de 2pF y sensores capacitivos en el rango de 300pF, sensores resistivos, PT100, PT1000,
termistores, puentes resistivos, potenciómetros y sus combinaciones. Adicionalmente se obtuvo
una velocidad de muestreo aproximada de 100ms con una linealidad y precisión 13 y 14 bit
respectivamente con respecto a una variable de referencia.
El estudio del estándar Bluetooth consideró los protocolos de: banda base, gestor de
enlace, descubrimiento de servicios, adaptación y control de enlace. Estos protocolos están
asociados directamente al uso del perfil de puerto serie utilizado para establecer la comunicación
inalámbrica entre el sistema diseñado y el teléfono móvil vía Bluetooth.
101
No existieron problemas al comunicarse con el módulo Bluetooth utilizado en el sistema
de alarma, sin embargo la distancia fue la única de las limitaciones para su uso limitado en el
mejor de los casos a 200mt de alcance (hasta 1000mt con antena opcional). Se desea destacar que
la comunicación inalámbrica vía Bluetooth no tiene costo para el usuario final comparado con las
otras tecnologías existentes en el celular (mensajes SMS, y conexión a la red GSM), lo cual
resulta atractivo para este tipo de aplicación.
Adicional a la comprensión de cómo funciona el sistema en su totalidad, la programación
fue la tarea que demandó más tiempo debido a la necesidad de operar todo el sistema en tiempo
real y responder a las diferentes interrupciones de comunicación y sensado. Cada uno de los
módulos que comprenden el diseño del sistema de alarma fue implementado por separado y
posteriormente se integró al programa final.
La implementación de la interfaz universal (UTI) resultó ser lo más complejo y difícil de
desarrollar. El programa realiza las tareas de: control, captura, identificación y sincronización de
las señales mensuradas. También se consideraron los desbordamientos periódicos del reloj del
microcontrolador y posteriormente la implementación de filtros digitales para poder activar la
alarma en forma óptima.
La implementación del convertidor análogo-digital resulto ser el más sencillo, sin
embargo se tuvo que familiarizarse con la comunicación SPI. Esto permite en un futuro
implementar sin problemas otras interfaces tal como memorias EEPROM, etc.
102
La implementación del control y monitoreo del celular significo un tiempo considerable
de programación y pruebas. Las dos principales tareas realizadas fueron el envío y recepción de
mensajes de texto mediante la utilización de comandos AT específicos para teléfonos móviles.
En el capitulo 5 se explicaron los dos formatos disponibles para enviar mensajes: el modo
texto y el modo PDU. En un principio se enviaron mensajes en modo texto, ya que el teléfono
móvil utilizado admitía los dos formatos. Sin embargo, el teléfono móvil no incluía el juego
completo de comandos AT. Por este motivo se trabajo con otro teléfono móvil, el cual se tuvo
que elegir de acuerdo a nuevos criterios (juego de comandos AT completo y perfil de puerto serie
en su módulo Bluetooth). Como resultado se selecciono un modelo de la marca Sony Ericsson.
Pero este modelo sólo admite el modo PDU, finalmente se implemento en el envío y recepción de
mensajes de texto en modo PDU. La complejidad del formato PDU radica en la necesidad de
codificar los datos. Por otro lado, su principal ventaja es la compatibilidad con todos los teléfonos
móviles, indistintamente la marca o la compañía. Por lo tanto, con este trabajo se aumento
considerablemente la compatibilidad con diferentes teléfonos móviles independiente de su
modelo o compañía (Entel-Movistar -Claro).
La alimentación del sistema de alarma es de 6 Volts nominal. Su bajo consumo de sólo
150mA permite su alimentación mediante baterías para obtener mayor autonomía frente a cortes
de energía y/o mayor robustez del sistema.
Finalmente el sistema desarrollado en este trabajo permite conectar una gran variedad
sensores para producir el disparo de la alarma, sin embargo, a modo de demostrar su potencial se
desarrollo una aplicación para cada tipo de interfaz. Para el caso de la interfaz universal se
conectó un detector capacitivo de posición. Este se calibra automáticamente a los parámetros del
medio, gracias a la implementación de los filtros pasabajo digitales. La aproximación de una
persona al detector resulta en un cambio abruto de las señales instantáneas con respecto a la
salida de los filtros. La diferencia entre las mediciones instantáneas y las salidas de los filtros es
utilizado como criterio para disparar la alarma según sensibilidad previamente programada.
103
En forma similar se implementó un detector de vibración para el conversor análogo-
digital. El cual es utilizado para detectar vibraciones o movimientos sobre un sensor de inercia.
Este finalmente entrega la información necesaria para dispara la alarma según una sensibilidad
previamente programada.
El disparó del sistema permite avisar al celular del usuario final por medio de una llamada
de voz, datos y/o mensajes SMS. Adicionalmente, el usuario final puede controlar en forma
remota y decidir un determinado perfil predeterminado tal como realizar llamada de voz,
almacenamiento del audio por un periodo corto de tiempo, solicitar la toma y envió de una
fotografía e incluso grabar un video y/o activación de una bocina u otro dispositivo eléctrico.
Como resultado final se demostró que este sistema desarrollado aumenta la funcionalidad
de un celular para ser utilizado como un sistema de alarma y/o monitoreo multipropósito.
Por último, se desea recalcar que en el futuro de la telefonía móvil seguirá creciendo y
cubriendo necesidades del usuario inimaginable hasta el día de hoy, donde el presente trabajo
espera contribuir de alguna forma en este progreso.
104
Bibliografía
[1] Trevor Martín BSc. (hons) CEng. MIEE, “The Insider’s Guide to the Philips ARM 7”, An
Engineer’s Introduction to the LPC2100 Series.
[2] Koninklijke Philips Electronics, “LPC2104/2105/2106”, Data Sheet, Rev. 05 Ñ 22
December 2004
[3] “ARM7TDMI-S”, Technical Reference Manual, 28 September 2001.
[4] SMARTEC BV, “Universal Transducer Interface (UTI)”, Revolution in Sensor
Interfacing, Data Sheet, Version 3.0.
[5] SMARTEC BV, “Pre-processing and digitising of sensor signals”, Fact sheet UTI,
Version: 1.0 April 1998.
[6] F. M. L. Van Der Goes, "Low-cost smart sensor interfacing," vol. PhD. Delft: Technology
University of Delft, 1996.
[7] Analog Devices, “AD7904/AD7914/AD7924”, Data Sheet, Rev. 0, 2002.
[8] Philips Electronics, “LPC2106/2105/2104 USER MANUAL”, Preliminary User Manual,
September 17, 2003.
[9] Nathan J. Muller, “Tecnología Bluetooth”, Mcgraw-Hill / Interamericana de España, S.A.,
Primera edición en español 2002,498 paginas.
105
[10] Sony Ericsson, “AT commands for Sony Ericsson phones”, Developers guidelines,
Version R6A, 2007.
[11] Paúl Aguayo S, “Compilando una aplicación para ARM con Elipse”, Basado en el tutorial
de James P. Lynch.
[12] Sena Technologies, Inc, “Parani-ESD100/110/200/210”, User Guide, Version 1.0.3, 2006-
10-18, Available from: URL: http://www.lemosint.com/bluetooth_specs/manual_parani_esd-
v1.0.1.pdf
[13] OLIMEX Ltd, “LPC-P2106 PROTOTYPE BOARD FOR LPC2106 ARM7TDMI-S
MICROCONTROLLER”, Manual Evaluation Board, Version: 2004
ANEXO - A
CÓDIGO FUENTE
DEL
MICROCONTROLADOR
108
/* |-------------------------------- |-------------------------------- | Nombre del archivo : Capture.c | Autor : Richard Ojeda. |-------------------------------- |-------------------------------- */ #include"lpc210x.h" #define CR 0x0D #define CTRZ 0X1A #define ESC 0x1B #define SPI_OK 0 #define SPI_BUSY 1 #define SPI_ERROR 2 int putchar (int ch); // Enviar caracter al puerto serial 0 int getchar (void); // Leer caracter del puerto serial 0 int putchar1 (int ch); // Enviar caracter al puerto serial 1 void sendstr1 (char *p); // Enviar string al puerto serial 1 void Initialize0(void); // Inicialización UART 0 void Initialize1(void); // Inicialización UART 1 void T0isr(void) __irq; // Interrupción por captura de datos void uart1(void) __irq; // Interrupción por recepción de datos UART void SPI_Isr(void) __irq; // Interrupción por recepción de datos SPI void SPI_Init(void); // Inicialización SPI void SPI_config(void); // Configuración SPI void alarmax(void); // Alarma void foto(void); // Sacar foto void Sincro(void); // Sincronización datos UTI void ShowHelp(void); // Menu de ayuda void SetMode(int S1,int S2,int S3,int S4,int Ph); // Selección de modo void SetSlowMode(void); // Modo Slow desactivado void SetFastMode(void); // Modo Fast activado void SetPDMode(void); // Modo Power Down activado void SetCML(void); // CML activado void ClrCML(void); // CML desactivado void NewShowMeasurement(void); // Subrutina de medida void sendhex (int hex); // Enviar caracter hexadecimal void sendstr (char *p); // Enviar string void num_mostrar(unsigned long val); // Enviar string hexadecimal void connect_MBT(void); // Conectar modulo bluetooth void disconnect_MBT(void); // Desconectar modulo bluetooth void call_cell(void); // Llamar a celular void send_sms(void); // Enviar sms void read_sms(void); // Leer sms static void AD7904_Write(unsigned char add, unsigned char val); // Envio // datos SPI
109
int main(void) PINSEL0 = 0x00055525; Initialize0(); Initialize1(); VPBDIV = 0x1; IODIR |= 0x5FB93F00; VICVectAddr6 = (unsigned)uart1; VICVectCntl6 = 0x27; VICIntEnable = 0x90; while(IOPIN & p029) SPI_Init(); T0MCR = 0x1; T0MR0 = 0xFFFFFF00; T0PR = 0x0; T0TCR = 0x2; T0CCR = 0x5; T0TCR = 0x1; VICVectAddr4 = (unsigned)T0isr; VICVectCntl4 = 0x24; ShowHelp(); do answer = getchar(); switch(answer) case'H':ShowHelp(); break; case'h':ShowHelp(); break; case'?':ShowHelp(); break; case'0':SetMode(0,0,0,0,5); sendstr (" Select Mode 0\n"); break; case'1':SetMode(0,0,0,1,3); sendstr (" Select Mode 1\n"); break; case'2':SetMode(0,0,1,0,5); sendstr (" Select Mode 2\n"); break; case'3':SetMode(0,0,1,1,9); MODE3_FLG = 1; sendstr (" Select Mode 3\n"); sendstr (" Select nº Phases: \n"); answer = getchar();
110
switch(answer) case'1': Phases = 1; sendstr (" Phase = 1\n\n"); break; case'2': Phases = 2; sendstr (" Phases = 2\n\n"); break; case'3': Phases = 3; sendstr (" Phases = 3\n\n"); break; case'4': Phases = 4; sendstr (" Phases = 4\n\n"); break; case'5': Phases = 5; sendstr (" Phases = 5\n\n"); break; case'6': Phases = 6; sendstr (" Phases = 6\n\n"); break; case'7': Phases = 7; sendstr (" Phases = 7\n\n"); break; case'8': Phases = 8; sendstr (" Phases = 8\n\n"); break; case'9': Phases = 9; sendstr (" Phases = 9\n\n"); break; default: break; break; case'4':SetMode(0,1,0,0,3); sendstr (" Select Mode 4\n"); break; case'5':SetMode(0,1,0,1,4); sendstr (" Select Mode 5\n"); break; case'6':SetMode(0,1,1,0,4); sendstr (" Select Mode 6\n"); break; case'7':SetMode(0,1,1,1,5); sendstr (" Select Mode 7\n"); break; case'8':SetMode(1,0,0,0,5); sendstr (" Select Mode 8\n"); break; case'9':SetMode(1,0,0,1,3); sendstr (" Select Mode 9\n"); break; case'A':SetMode(1,0,1,0,3); sendstr (" Select Mode 10\n");
111
break; case'B':SetMode(1,0,1,1,3); sendstr (" Select Mode 11\n"); break; case'C':SetMode(1,1,0,0,3); sendstr (" Select Mode 12\n"); break; case'D':SetMode(1,1,0,1,5); sendstr (" Select Mode 13\n"); break; case'E':SetMode(1,1,1,0,5); sendstr (" Select Mode 14\n"); break; case'F':SetMode(1,1,1,1,5); sendstr (" Select Mode 15\n"); break;default: break; answer = 0; while (!RESET_FLG); do IOSET = 0x80000; if(flag_capture) Sincro(); if(answer == 0) answer = getchar(); switch(answer) case'H':ShowHelp(); break; case'h':ShowHelp(); break; case'?':ShowHelp(); break; case's':SetSlowMode(); sendstr (" Set Slow Mode\n"); break; case'f':SetFastMode(); sendstr (" Set Fast Mode\n"); break; case'p':SetPDMode(); sendstr (" Power down\n"); break; case't':SetCML(); sendstr (" CML = 1 \n"); break; case'n':ClrCML(); sendstr (" CML = 0 \n"); break; case'm':NewShowMeasurement(); break; case'M':NewShowMeasurement(); break; default:break;
112
while (TRUE); void Initialize0() U0FCR = 0x7; U0LCR = 0x83; U0DLL = 0x20; U0DLM = 0x0; U0LCR = 0x3; void Initialize1() U1FCR = 0x7; U1LCR = 0x83; U1DLL = 0x80; U1DLM = 0x1; U1LCR = 0x3; U1IER = 0x1; void T0isr (void) __irq static int value; unsigned int tie; unsigned int timer; if (T0IR & 0x00000010) if(MODE3_FLG) i++; if (!(i & 0x01)) IOCLR = 0x800; IOCLR = 0x1000; value = T0CR0; VICVectAddr = 0x0; timer = value; tie = timer - timerold; if (flag_overflow == 1) tie = 0xFFFFFFFF - timerold + timer; flag_overflow = 0; T0IR |= 0x00000001; periodos[i] = tie; timerold = timer; if (flag_capture2) arry[1] = periodos[3]; arry[2] = periodos[4]; arry[3] = periodos[6]; arry[4] = periodos[8]; arry[5] = periodos[10]; arry[6] = periodos[12]; arry[7] = periodos[14]; arry[8] = periodos[16]; arry[9] = periodos[18]; EnableTransmission = 1;
113
else value = T0CR0; VICVectAddr = 0x0; timer = value; tie = timer-timerold; if (flag_overflow == 1) tie = 0xFFFFFFFF - timerold + timer; flag_overflow = 0; T0IR |= 0x00000001; periodos[i] = tie; timerold = timer; if(!(i < (Phases << 1))) IOCLR = 0x2000; IOSET = 0x800; i = 0; for(l=0;l >= 0x200;l++) IOCLR = 0x10000; IOSET = 0x2000; flag_capture2 = 1; else IOSET = 0x10000; IOSET = 0x1000; else value = T0CR0; VICVectAddr = 0x0; timer = value; if(i == bp) i = 0; bp = 0; if(i >= fin) i = 0; flag_capture = 1; tie = timer - timerold; if (flag_overflow == 1) tie = 0xFFFFFFFF - timerold + timer; flag_overflow = 0; T0IR |= 0x00000001; timerold = timer; periodos[i] = tie; i++;
114
else flag_overflow = 1; VICVectAddr = 0x0; T0IR |= 0x00000001; void Sincro(void) if(!MODE3_FLG) fin2 = fin/0x2; min = 0xFFFFFF; for( k = 0 ; k <= fin ;k++) arry[k] = periodos[k]; for( k = 1 ; k < fin2 ;k++) if(min > arry[k]) bp = k; min = arry[k]; if(arry[bp-1] < arry[bp+1]) bp--; EnableTransmission = 1; flag_capture = 0; void ShowHelp(void) sendstr ("\n\n U T I E V A L U A T I O N B O A R D H E L P \n\n"); sendstr (" s -> Set Slow Mode f -> Set Fast Mode\n"); sendstr (" t -> CML = 1 (CMUX12) n -> CML = 0 (CMUX02)\n"); sendstr (" m -> Single measurement M -> Infinite measurement cycle p -> Power down \n\n"); sendstr (" 0 -> Mode 0 - 5 Capacitors, 0÷2 pF\n"); sendstr (" 1 -> Mode 1 - 3 Capacitors, 0÷2 pF\n"); sendstr (" 2 -> Mode 2 - 5 Capacitors, 0÷12 pF\n"); sendstr (" 3 -> Mode 3 - Capacitors, 0÷2 pF if CML=0 / 0÷12 pF if CML=1\n"); sendstr (" 4 -> Mode 4 - 3 Capacitors, variable range to 300 pF\n"); sendstr (" 5 -> Mode 5 - Platinium resistor Pt100 - Pt1000, 4 wire\n"); sendstr (" 6 -> Mode 6 - Termistor 1k÷25k, 4 wire\n"); sendstr (" 7 -> Mode 7 - 2 or 3 platinium resistors Pt100 - Pt1000\n"); sendstr (" 8 -> Mode 8 - 2 or 3 termistors 1k÷25k\n"); sendstr (" 9 -> Mode 9 - Resistive bridge, ref. is Vbridge,+/- 200 mV\n"); sendstr (" A -> Mode 10 - Resistive bridge, ref. is Vbridge,+/- 12.5 mV\n"); sendstr (" B -> Mode 11 - Resistive bridge, ref. is Ibridge,+/- 200 mV\n");
115
sendstr (" C -> Mode 12 - Resistive bridge, ref. is Ibridge,+/- 12.5 mV\n"); sendstr (" D -> Mode 13 - Resistive bridge and 2 resistors,+/- 200 mV\n"); sendstr (" E -> Mode 14 - Resistive bridge and 2 resistors,+/- 12.5 mV\n"); sendstr (" F -> Mode 15 - 3 Potentiometers 1k÷50k\n\n"); sendstr (" Please Make a Choise :\n\n"); answer = 0; void SetMode(int S1,int S2,int S3,int S4,int Ph) if(S1 == 0) IOCLR = 0x10000000; else IOSET = 0x10000000; if(S2 == 0) IOCLR = 0x8000000; else IOSET = 0x8000000; if(S3 == 0) IOCLR = 0x4000000; else IOSET = 0x4000000; if(S4 == 0) IOCLR = 0x2000000; else IOSET = 0x2000000; IOCLR = 0x400; IOSET = 0x800000; Phases = Ph; fin = ((Phases+1)*2); answer = 0; RESET_FLG = 1; void SetSlowMode(void) IOCLR = 0x1000000; IOSET = 0x800000; anf = 0.82727; bnf = 0.086364; fin_turn = 100; answer = 0; void SetFastMode(void) IOSET = 0x1000000; IOSET = 0x800000; anf = 0.98133; bnf = 0.0093371 fin_turn = 250; answer = 0; void SetPDMode(void) IOCLR = 0x800000; answer = 0; void SetCML(void) if (MODE3_FLG) IOSET = 0x400; IOSET = 0x800000; answer = 0;
116
void ClrCML(void) IOCLR = 0x400; IOSET = 0x800000; answer = 0; void NewShowMeasurement(void) int j; if(IOPIN & 0x800000) if (MODE3_FLG) if (!EnableTransmission); EnableTransmission = 0; for (j = 1; !(j > Phases); j++) if(arry[j] != 0) num_mostrar(arry[j]); sendstr (" "); sendstr ("\n"); if (answer == 'm') answer=0; else if (EnableTransmission) EnableTransmission = 0; if(turn <= 1) IOSET = 0x200000; turn++; if(turn == 2) bp_1 =Phases+1; arry2[0] = arry[2]; arry2[1] = arry[bp_1+2]; ynf = bnf*(arry2[0] + arry2[1]) + anf*ynfold; arry2[3] = ynf; ynfold = ynf; turn++; if(turn >= 3) arry2[0] = arry2[1]; arry2[1] = arry[2]; ynf = bnf*(arry2[0] + arry2[1]) + anf*ynfold; arry2[2] = ynf; ynfold = ynf; arry2[0] = arry2[1]; arry2[1] = arry[bp_1+2]; ynf = bnf*(arry2[0] + arry2[1]) + anf*ynfold;
117
arry2[3] = ynf; ynfold = ynf; if(turn <= fin_turn) turn++; if(turn >= fin_turn) flag_filtro = 1; IOCLR = 0x200000; if(flag_filtro) alm = arry[2] - arry2[2]; if(alm >= 0x1F4) alarma = 1; alm = arry[bp_1+2] - arry2[3]; if(alm >= 0x1F4) alarma = 1; if(alarma) flag_filtro = 0; turn = 200; alarmax(); if(bp == 0) z = 1; else z = 0; for(x = 0 ; x <= z ; x++) if(bp == 0) bp_0 = x*(Phases+1); else bp_0 = bp; pnt = arry[bp_0+0] + arry[bp_0+1]; if(pnt != 0) num_mostrar(pnt); sendstr (" "); for (j = 2; j <= Phases; j++) if(arry[bp_0+j] != 0) num_mostrar(arry[bp_0+j]); sendstr (" "); sendstr (" "); sendstr ("\n"); if (answer == 'm') answer = 0; void sendhex (int hex) if (hex > 9) putchar('A' + (hex - 10)); else putchar('0' + hex);
118
void sendstr (char *p) while (*p) putchar (*p++); void sendstr1 (char *p) while (*p) putchar1 (*p++); void num_mostrar(unsigned long val) sendhex((val >> 28) & 0x0F); sendhex((val >> 24) & 0x0F); sendhex((val >> 20) & 0x0F); sendhex((val >> 16) & 0x0F); sendhex((val >> 12) & 0x0F); sendhex((val >> 8) & 0x0F); sendhex((val >> 4) & 0x0F); sendhex (val & 0x0F); int putchar (int ch) if (ch == '\n') while (!(U0LSR & 0x20)); U0THR = CR; while (!(U0LSR & 0x20)); return (U0THR = ch); int getchar (void) while (!(U0LSR & 0x01)); return (U0RBR); int putchar1 (int ch) if (ch == '\n') while (!(U1LSR & 0x20)); U1THR = CR; while (!(U1LSR & 0x20)); return (U1THR = ch); void connect_MBT(void) while (connect != 1) sendstr1 ("ATD001B596ED690\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x43) connect = 1; ok = 1; ok =0;
119
connect = 0; while(ate != 1) VICIntEnable = 0x0; U1THR = 'A'; U1THR = 'T'; U1THR = 'E'; U1THR = '='; U1THR = '0'; U1THR = '\r'; U1THR = '\n'; VICIntEnable = 0x80; while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; ate = 1; if(buffer[1] == 0x45) ok = 1; ate = 0; ok = 0; while(cpms != 1) sendstr1 ("AT+CPMS="); U1THR = 0x22; U1THR = 0x4D; U1THR = 0x45; U1THR = 0x22; sendstr1 ("\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; cpms = 1; if(buffer[1] == 0x45) ok = 1; cpms = 0; ok = 0;
120
while(cnmi != 1) sendstr1 ("AT+CNMI=2,1,2,0,0\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; cnmi = 1; if(buffer[1] == 0x45) ok = 1; cnmi = 0; ok = 0; while(CSCS != 1) sendstr1 ("AT+CSCS="); U1THR = 0x22; U1THR = '8'; U1THR = '8'; U1THR = '5'; U1THR = '9'; U1THR = 0x2D; U1THR = '1'; U1THR = 0x22; sendstr1 ("\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; CSCS = 1; if(buffer[1] == 0x45) ok = 1; ok = 0; void send_sms(void) while(mensaje != 1) sendstr1 ("AT+CMGS=67\r\n"); while(rx_sms != 1); rx_completa = 0;
121
if (buffer[1] == 0x3E) sendstr1 ("069165190610030100089198679358000040201048146487E5ED302838A6A7ED617258A45014DDF674580E828 U1THR = CTRZ; //U1THR = ESC; mensaje = 1; void uart1(void) __irq w++; buffer[w] = U1RBR; if(buffer[w] == 0x0A) rx_completa = 1; w = 0; if(buffer[w] == 0x3E) rx_sms = 1; w = 0; if(buffer[w] == 0x2B) almacenar = 1; if(flag_save_sms) if(w == 0) flag_save_sms = 0; flag_read_sms = 1; sms[w] = buffer[w]; if(flag_save_index) if(w == 12) n0 = buffer[w]; if(w == 13) n1 = buffer[w]; flag_save_index = 0; if(almacenar == 1) if(w == 3) switch(buffer[w]) case 0x54: flag_save_index = 1; break; case 0x47: flag_save_sms = 1;
122
break; almacenar = 0; U1IIR; VICVectAddr = 0x0; void read_sms(void) sendstr1 ("AT+CMGR="); U1THR = n0; U1THR = n1; sendstr1 ("\r\n"); while(flag_read_sms != 1); if(sms[38]=='0') alarma = 0; sendstr (" Alarma desactivada\n\n"); if(sms[38]=='1') alarma = 1; sendstr (" Alarma activada\n\n"); void SPI_config(void) VICVectAddr0 = (unsigned int) SPI_Isr; VICVectCntl0 = 0x2A; VICIntEnable = 0x400; S0SPCCR = 0x36; S0SPCR = 0xB0; IOSET = 0x40000000; anf = 0.99874; bnf = 0.00062792; void SPI_Isr(void) __irq if ((S0SPSR & 0xF8) == 0x80) *msg++ = S0SPDR; if (--count > 0) S0SPDR = *msg; else state = SPI_OK; else *msg = S0SPDR; state = SPI_ERROR; S0SPINT = 0x01; VICVectAddr = 0; static void AD7904_Write(unsigned char add, unsigned char val) spiBuf[0] = add; spiBuf[1] = val;
123
msg = spiBuf; count = 2; state = SPI_BUSY; IOCLR = 0x40000000; S0SPDR = *msg; while (state == SPI_BUSY) ; IOSET = 0x40000000; void disconnect_MBT(void) while (disconnect != 1) sendstr1 ("+++\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; next = 1; if(buffer[1] == 0x45) ok = 1; next = 0; ok = 0; if(next == 1) sendstr1 ("ATH\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; disconnect = 1; if(buffer[1] == 0x45) ok = 1; disconnect = 0; ok = 0; disconnect = 0; IOCLR |= 0x100000; void call_cell(void)
124
if(CSCS == 1) while(CKPD != 1) sendstr1 ("AT+CKPD="); U1THR = 0x22; U1THR = ':'; U1THR = 'R'; U1THR = '8'; U1THR = '9'; U1THR = '7'; U1THR = '6'; U1THR = '3'; U1THR = '9'; U1THR = '8'; U1THR = '5'; U1THR = '['; U1THR = 0x22; sendstr1 (",1,1\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; CKPD = 1; if(buffer[1] == 0x45) ok = 1; ok = 0; CSCS = 0; CKPD = 0; while(CKPD != 1) sendstr1 ("AT+CKPD="); U1THR = 0x22; U1THR = 'C'; U1THR = ']'; U1THR = 0x22; sendstr1 (",5,150\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; CKPD = 1;
125
if(buffer[1] == 0x45) ok = 1; ok = 0; CKPD = 0; void SPI_Init(void) SPI_config(); AD7904_Write(0xFF,0xFF); while(1) IOSET = 0x80000; if(alarma) sendstr ("Alarma Activada \n"); alarmax(); AD7904_Write(0x83,0x30); if (state == SPI_OK) sendstr ("\n"); sendstr (" "); spiBuf[0] = spiBuf[0] << 3; spiBuf[1] = spiBuf[1] >> 4; spiBuf[2] = spiBuf[0] | spiBuf[1]; if(turn <= 1) IOSET = 0x200000; // Led on arry2[0] = spiBuf[2]; turn++; if(turn >= 2) arry2[1] = spiBuf[2]; ynf = bnf*(arry2[0] + arry2[1]) + anf*ynfold; arry2[2] = ynf; ynfold = ynf; arry2[0] = arry2[1]; turn++; if(turn >= 4000) flag_filtro = 1; IOCLR = 0x200000; if(flag_filtro) alm = spiBuf[2] - arry2[2]; num_mostrar(spiBuf[2]); sendstr (" "); num_mostrar(arry2[2]); sendstr ("\n");
126
if(alm >= 0x21) alarma = 1; void alarmax(void) IOCLR = 0x80000; IOSET |= 0x100000; connect_MBT(); foto(); call_cell(); if(IOPIN & p031) send_sms(); disconnect_MBT(); alarma = 0; void foto(void) while(CKPD != 1) sendstr1 ("AT+CKPD="); U1THR = 0x22; // " U1THR = ':'; U1THR = 'R'; U1THR = ':'; U1THR = 'R'; U1THR = ':'; U1THR = 'C'; U1THR = ':'; U1THR = 'J'; U1THR = ':'; U1THR = 'R'; U1THR = ':'; U1THR = 'R'; U1THR = 0x22; // " sendstr1 (",5,1\r\n"); while(ok != 1) while(rx_completa != 1); rx_completa = 0; if(buffer[1] == 0x4F) ok = 1; CKPD = 1; if(buffer[1] == 0x45) ok = 1; ok = 0; CKPD = 0;
ANEXO – B
CARACTERISTICAS NXP LPC2106
128
B.1 Descripción de pines microcontrolador NXP LPC2106
Fig. B.1: Configuración de pines LQFP48
129
B.2 Diagrama de bloques
ANEXO - C
ESQUEMÁTICO
Y
PCB DEL SISTEMA
131
C.1 Esquemático del sistema
132
C.2 PCB del sistema
ANEXO - D
CARACTERISTICAS ADXL103
134
D.1 Diagrama de bloques funcional del medidor de aceleración
D.2 Especificaciones Técnicas
135
D.3 Valores máximos
D.4 Configuración de pines y descripción
Fig. D.4: Configuración de pines
Tabla. D.4: Descripción de pines ADXL103
ANEXO - E
RESUMEN DE ESTADO
Y
RESUMEN DE COMANDOS AT
DEL
MÓDULO BLUETOOTH
137
E.1 Modos de operación
E.2 Seguridad
E.3 Estados de operación
E.4 Símbolos
138
E.5 Categorías de los comandos