Sistema inalámbrico de geolocalización y aceleración
Sistema inalámbrico de geolocalización y aceleración
medición de aceleraciones.
Introducción
El proyecto busca desarrollar los algoritmos necesarios que permitirán la implementación de un
sistema de adquisición inalámbrico de geolocalización y medición de vibraciones, para realizar el
monitoreo de las actividades deportivas. El sistema de adquisición contará con un microcontrolador
que fungirá como procesador central y el cual realizará las peticiones y almacenamiento de lecturas
provenientes de los módulos con sensores de aceleración y posición. Ası́ mismo, los datos adquiridos
serán enviados a un dispositivo mediante el módulo de comunicación inalámbrica, permitiendo al
sistema la independencia de cables que pudieran causar una movilidad reducida o problemas de
comunicación a grandes distancias. A continuación se enumeran las actividades a realizar:
Componentes usados
Módulo GPS SIM808
Este módulo se muestra en la Figura 4 y sus caracterı́sticas son las siguientes:
1
• Arranque en frı́o: 100s (tı́pico)
• Arranque en caliente: 1s (tı́pico).
Comunicación USB
Protocolo de comunicación UART:
• Velocidad: 1200bps a 115200bps
2
Voltaje de alimentación: 3.3 V
Protocolo de comunicación: UART
Velocidad UART: 115200bps
Soporte 3 modos: AP, STA, AP + STA
Protocolos soportados: 802.11 b/g/n – TCP/IP
Soporte de red: 2,4 GHz
Control mediante comandos AT
Microcontrolador PIC16F877A
El microcontrolador se muestra en la figura 3 y sus caracterı́sticas son las siguientes:
3
Prueba del nuevo módulo GPS (SIM808)
El módulo GPS que se usará para la geolocalización es el SIM808, como se puede ver en la Figura
4, este módulo necesita una alimentación de entre 5V y 26V, preferentemente con una fuente distinta
a la del resto de los componentes. El módulo incluye una antena que debe conectarse al puerto
ACTIVE GPS ANTE. Para que este módulo comience a enviar los datos de ubicación, es necesario
encender la fuente de alimentación GNSS con el comando AT+CGNSPWR=1 y activar el envio
de datos recibidos desde el GNSS hacia el UART con el comando AT+CGNSTST=1. Después
de cada comando se debe esperar un tiempo para que responda el módulo SIM808. Cuando el
módulo SIM808 comienza a enviar datos hacia el PIC, tarda aproximadamente un minuto para fija
la ubicación.
4
GUI en MATLAB
Se creó una interfaz de usuario en MATLAB, como se puede ver en la figura 5, para mostrar los
datos de geolocalización y de aceleraciones. La GUI contiene 2 botones. Con el botón de Iniciar se
crea el cliente TCP y se conecta al módulo ESP8266. Cada vez que se recibe un dato, se compara
la segunda letra de ese dato para distinguir entre Latitud, Longitud, aceleracón en x o aceleración
en y y colocarlas en su respectiva caja de texto. Con el botón de Finalizar se ejecuta un break
para salir del ciclo while. También se agregaron unas lı́neas para almacenar los datos obtenidos en
una matriz y poder usarlos después para graficar e interpretar los movimientos leı́dos.
Manual de usuario
El manual de usuario se realizó de manera breve y se anexa al final del documento.
Resultados
Sistema en reposo
En la figura 5 se muestra la GUI de MATLAB mostrando los datos cuando el sistema no
está en movimiento. Para comprobar las coordenadas mostradas en la GUI, se introdujeron en el
buscador de Google Maps, y comparando con la hubicación proporcionada por el celular, se puede
ver que la ubicación es prácticamente la misma, esto se puede ver en la Figura 6. Para la prueba
del acelerómetro, el módulo se colocó de manera horizontal sobre una mesa, lo que significa que
no hay fuerzas que generen una aceleración. En un caso ideal donde el módulo esté perfectamente
horizontal, las aceleraciones deberian de ser cero. En este caso, se colocó de manera aproximada,
lo que ocasiona que el módulo este ligeramente inclinado y por eso aparecen las lecturas mostradas
en la GUI, esas lecturas son de la acción de la gravedad sobre el sensor.
Sistema en movimiento
Se realizaron diferentes pruebas tanto para el GPS como para el acelerómetro. Para el GPS se
siguieron las trayectorias mostradas en la Figura 7, siendo el Norte en dirección de la flecha 4 y el
Este en dirección de la flecha 2. Para las trayectorias 1 y 2, se colocaron todos los componentes
5
Figura 6: Comparación de ubicación del módulo vs ubicación del celular
sobre una silla, incluyendo la antena. Se desplazó la silla 4.5m hacia el Sur, 2.7m hacia el Este, y
de regreso. Para las trayectorias 3 y 4, se dejó todo el circuito sobre una mesa y se desplazó solo
la antena del GPS, primero hacia el Este y luego en forma de arco hacia el Suroeste, regresando
al final hacia el Norte. En las gráficas se puede observar un movimiento un tanto parecido al de
las trayectorias realizadas, pero no se logra obtener con buena calidad debido a que las pruebas se
realizaron en un espacio reducido. Estas trayectorias se muestran en las Figuras 8 a 15.
Trayectorias 1 y 2 Trayectorias 3 y 4
1 4.5m 2.4m 1
4
2.4m
3
2 2.7m
En las trayectorias 1 y 2, el primer cambio es una disminución en la latitud, lo que significa que
hay un desplazamiento hacia el sur, que es el primer desplazamieno, se mantine un poco mientras
se hace el desplazamiento hacia el Este y vuleve a regresar a la coordenada de inicio. En el caso
de la trayectoria 2, la latitud no alcanzó a actualizarse hasta llegar al punto de inicio. La longitud
se mantiene mientras el desplazamiento es hacia el Sur, cuando el desplazamiento cambia hacia
el Este, hay un aumento en la longitud y al regresar, la longitud vuelve a disminuir. En el caso
de la longitud 1, hubo mayor retraso en la recepción GPS y no alcanzó a seguir por completo la
trayectoria. Esto se puede ver en las Figuras 8 a 11.
En las trayectorias 3 y 4, el primer movimiento es hacia el Este, por lo que la latitud se mantiene
sin cambio, cuando el movimiento es hacia el Suroeste, hay un cambio gradual negativo ya que
se dirige hacia el Sur y finalmente regresa a la posición con un cambio positivo hacia el Norte.
En el caso de la trayectoria 3 apareció primero un cambio positivo antes de ir al Sur. La longitud
aumenta positivamente con el primer movimiento, ya que es hacia el Este, y disminuye enseguida
con el segundo movimiento manteninedose hasta regresar al punto de partida. Esto se puede ver
en las Figuras 12 a 15.
6
Latitud 1
20.55092
20.550915
20.55091
Desplazamiento
20.550905
20.5509
20.550895
20.55089
20.550885
20.55088
0 10 20 30 40 50 60 70
Muestras
Longitud 1
-101.19891
-101.19892
-101.19893
Desplazamiento
-101.19894
-101.19895
-101.19896
-101.19897
0 5 10 15 20 25 30 35
Muestras
7
Latitud 2
20.54872
20.5487
20.54868
20.54866
Desplazamiento
20.54864
20.54862
20.5486
20.54858
20.54856
20.54854
20.54852
0 10 20 30 40 50 60 70
Muestras
Longitud 2
-101.18312
-101.18314
-101.18316
Desplazamiento
-101.18318
-101.1832
-101.18322
-101.18324
-101.18326
-101.18328
0 5 10 15 20 25 30 35
Muestras
8
Latitud 3
20.55096
20.55095
20.55094
20.55093
Desplazamiento
20.55092
20.55091
20.5509
20.55089
20.55088
20.55087
0 50 100 150 200 250
Muestras
Longitud 3
-101.19894
-101.19895
-101.19896
-101.19897
Desplazamiento
-101.19898
-101.19899
-101.199
-101.19901
-101.19902
-101.19903
-101.19904
0 20 40 60 80 100 120 140
Muestras
9
Latitud 4
20.55102
20.551
20.55098
Desplazamiento
20.55096
20.55094
20.55092
20.5509
20.55088
20.55086
0 50 100 150 200 250
Muestras
Longitud 4
-101.19888
-101.19889
-101.1989
-101.19891
Desplazamiento
-101.19892
-101.19893
-101.19894
-101.19895
-101.19896
-101.19897
0 20 40 60 80 100 120 140
Muestras
10
Para las pruebas de aceleración, se desplazó el módulo acelerómetro siguiendo las formas mos-
tradas en la figura 16, estas mediciones se hicieron en un área de 20x20 cm. En las Figuras 17 a 22
se muestra el comportamiento de la aceleración de a cuerdo al movimiento realizado. Las gráficas
tienen mucho ruido debido a que los movimientos se hicieron con el módulo en la mano.
Para la aceleración 1, primero hay un movimiento hacia la izquierda, entonces hay un pico en la
aceleración y mientras la aceleración en x permanece constante, cuando el movimiento cambia hacia
atrás, ahora aparece un pico en la aceleración x con un pequeño pico contrario cuando desacelera,
de igual manera cuando el movimiento es hacia la derecha y hacia atrás. El comportamiento se
observa en las Figuras 17 y 18.
Para la aceleración 2, fue un movimiento circular constante, por lo tanto, la aceleración x estuvo
cambiando constantemente tendiendo a una forma senoidal y la aceleración y una forma senoidal
desfasada 180◦ . El comportamiento se observa en las figuras 19 y 20.
Para la aceleración 3, primero hubo un cambio en y con el movimiento horizontal del triángulo,
manteniendose x constante, al acelerar en dirección de la segunda arista, hay cambio de aceleración
en x y y, ya que es un movimiento en diagonal a los dos ejes, hay un alto y luego se acompleta
el triángulo nuevamente con cambio de aceleración en las dos direcciones. El comportamiento se
observa en las figuras 21 y 22.
Aceleración x 1
1
0.8
0.6
Aceleración
0.4
0.2
-0.2
0 10 20 30 40 50 60
Muestras
11
Aceleración y 1
0.5
0.4
0.3
0.2
Aceleración
0.1
-0.1
-0.2
-0.3
0 5 10 15 20 25 30 35 40 45
Muestras
Aceleración x 2
0.25
0.2
0.15
0.1
Aceleración
0.05
-0.05
-0.1
-0.15
0 2 4 6 8 10 12
Muestras
12
Aceleración y 2
0.3
0.2
0.1
Aceleración
-0.1
-0.2
-0.3
-0.4
0 5 10 15 20 25 30
Muestras
Aceleración x 3
0.3
0.25
0.2
0.15
Aceleración
0.1
0.05
-0.05
-0.1
-0.15
0 5 10 15 20 25 30 35 40
Muestras
13
Aceleración y 3
0.2
0.1
0
Aceleración
-0.1
-0.2
-0.3
-0.4
0 5 10 15 20 25 30 35 40 45 50
Muestras
14
Impacto de las actividades en la institución receptora y en la
formación del estudiante
El impacto del proyecto se reflejó en el incremento de las habilidades profesionales del estudian-
te mediante el diseño, análisis y solución de problemas para la creación del sistema de adquisición
inalámbrico de geolocalización y medición de vibraciones. Ası́ mismo, dicho sistema de adquisición
permitirá el desarrollo de aplicaciones y proyectos futuros de investigación en el área de procesa-
miento digital de señales mediante el análisis estadı́stico.
15
Anexo A
En las Figuras 25 y 26 se muestra el código usado en el PIC para la recepción de datos del
módulo SIM808 y el módulo MPU6050. Y el envio de datos hacia el módulo ESP8266.
#include <Integracion4_0.h>
#use RS232(BAUD = 115200, XMIT=PIN_C6, RCV=PIN_C7, parity=N, BITS=8, stream=SIM808, ERRORS) //SIM808
#use RS232(BAUD = 115200, XMIT=PIN_D2, RCV=PIN_D3, parity=N, BITS=8, stream=ESP8266, ERRORS) //ESP8266
#use I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3, SLOW, FORCE_HW) //MPU6050
void main(){
delay_ms(1000);
fprintf(SIM808, "AT\r\n"); //GPS Prueba de inicio
delay_ms(200);
fprintf(SIM808, "AT+CGNSPWR=1 \r\n"); //GPS Encender fuente de alimentación GNSS
delay_ms(800);
fprintf(SIM808, "AT+CGNSTS T=1\r\n"); //GPS Enviar datos recibidos de GNSS a AT UART
delay_ms(200);
for (int n = 6; n!=0; n--){ // Esperar a que el modulo wifi se conecte a la red
delay_ms( 1000 ); // 1 segundo
}
//printf("ATE0\r\n"); //Desactivar eco
delay_ms(200);
fprintf(ESP8266, "AT\r\n"); //Prueba de inicio
delay_ms(200);
/*printf("AT+CWMODE=3\r\n"); //Modo de cliente + servidor
delay_ms(200); //Para primera vez con nueva red, se descomenta de la 30 a la 36
printf("AT+CWJAP=\"JP\",\"2.4casajp\"\r\n"); //Conectarse a la red <ssid>,<pwd>
for (int i = 6; i!=0; i--){ //Esperar a que se conecte
delay_ms( 1000 ); // 1 segundo
}*/
fprintf(ESP8266, "AT+CIPMUX=1 \r\n"); //Habilitar multiples conexiones
delay_ms(200);
fprintf(ESP8266, "AT+CIPSERVER=1,80 \r\n"); //Crear servidor
delay_ms(400);
//Para ver el IP del ESP8266 se usa AT +CIFSR
16
MPU6050_init(); //Iniciar acelerometro
delay_ms(50);
while(TRUE){
if(kbhit() > 0){ //Se recibe un dato por UART
if(GPSRead()){ //Dato recibido de GPS
// Latitude
fprintf(ESP8266, "AT+CIPSEND=0,%d \r\n", 19); //Instruccion para mandar datos mediante wifi,
se especifica la cantidad de bytes a enviar
delay_ms(50);
fprintf(ESP8266, "Latitude: %.6f \r\n", Latitude()); //Manda el dato de la latitud
delay_ms(50);
// Longitude
fprintf(ESP8266, "AT+CIPSEND=0,%d \r\n", 22);
delay_ms(50);
fprintf(ESP8266, "Longitude: %.6f \r\n", Longitude()); //Manda el dato de la longitud
delay_ms(50);
// Aceleracion x
fprintf(ESP8266, "AT+CIPSEND=0,%d \r\n", 14);
delay_ms(50);
fprintf(ESP8266, "Ax = %.6f \r\n", MPU6050_get_Ax()); //Manda el dato de la aceleracion en x
delay_ms(50);
// Aceleracion y
fprintf(ESP8266, "AT+CIPSEND=0,%d \r\n", 14);
delay_ms(50);
fprintf(ESP8266, "Ay = %.6f \r\n", MPU6050_get_Ay()); //Manda el dato de la aceleracion en y
delay_ms(50);
}
}
}
}
17
Anexo B
En la Figura 27 se muestra el código usado en MATLAB para la recepción de datos por WiFi
y mostrarlos en las cajas de texto correspondientes. También se agregan las lı́neas para guardar
los datos de cada variable en una matriz.
18
Sistema de adquisición inalámbrica de
geolocalización y medición de aceleraciones.
Manual de uso
Introducción
En este manual de usuario se mostrará cómo hacer funcionar el sistema de ad-
quisición inalámbrica de geolocalización y medición de aceleraciones abarcando las
conexiones en los dispositivos fı́sicos, la programación del PIC para la lectura de los
módulos y el envı́o de datos y la programación de MATLAB para mostrar los datos
recibidos en una interfaz gráfica.
1
5 6
2
3 4
2
Dispositivos MATLAB
PIC (2)
físicos (1) Inicio (3)
Inicio Inicio
Fin Botón de
Iniciar MPU6050 inicio
While
While true
(TRUE)
Datos recibidos
Dato
No recibido
de GPS Verificar dato
recibido
Si
Enviar datos
por WiFi Dato No
recibido
Si
Fin
Switch case
-dato
Si Mostrar
Latitud latitud
No
Si Mostrar
Aceleración
Ax
en x
No
Si Mostrar
Longitud
longitud
No
Si Mostrar
Aceleración Ay
en y
No
No Si
Finalizar Fin
3
Conexiones del PIC
El módulo GPS se conectó al puerto UART fı́sico en los pines C6/TX y C7/RX,
tomando en cuenta que se deben conecatar cruzados con los del módulo: TX-RX,
RX-TX.
El módulo WiFi se conectó a un puerto UART por sofware en los pines D2/TX
y D3/RX, de igual manera se deben conectar cruzados.
El módulo acelerómetro se conectó al puerto I2C en los pines C4/SDA y C3/SCL.
Éstos si se conectan directos: SDA-SDA, SCL-SCL. No olvidar las resistencias pull-
up de 10kΩ.
#include <16F877A.h>
#device PASS_STRINGS = IN_RAM
#device ADC=16
#use delay(crystal=20MHz)
4
de los datos recibidos hacia el PIC. El SIM808 comenzará a buscar la ubicación y
en cuanto se fije, comenzará a parpadear el diodo 5 ubicado en el recuadro (5) de
la figura 1. Se debe dejar un tiempo de retardo entre cada comando AT para que lo
procese el módulo.
delay_ms(1000);
fprin�(SIM808, "AT\r\n"); //GPS Prueba de inicio
delay_ms(200);
fprin�(SIM808, "AT+CGNSPWR=1 \r\n"); //GPS Encender fuente de alimentación GNSS
delay_ms(800);
fprin�(SIM808, "AT+CGNSTST=1 \r\n"); //GPS Enviar datos recibidos de GNSS a AT UART
delay_ms(200);
a una red, solo resta habilitar las múltiples conexiones para crear el servidor. En
caso de que se necesite conectar a una red nueva, después de mandar la prueba de
inicio, se le manda el modo de trabajo que es Cliente + Servidor, los datos de la
red y se esperan 6 segundos mientras se hace la conexión. Finalmente se habilitan
las multiples conexiones y se crea el servidor.
5
Inicialización de módulo MPU6050
Para inicializar el acelerómetro MPU6050, se usa MPU6050 init(); que es una
función de la biblioteca MPU6050.c.
while(TRUE){
if(kbhit() > 0){ //Se recibe un dato por UART
if(GPSRead()){ //Darto recibido de GPS
// Latitude
fprintf(ESP8266, "AT+CIPSEND=0,%d\r\n", 19);//Instruccion
para mandar datos mediante wifi
delay_ms(50);
fprintf(ESP8266, "Latitude: %.6f\r\n", Latitude());
//Manda el dato de la latitud
delay_ms(50);
// Longitude
fprintf(ESP8266, "AT+CIPSEND=0,%d\r\n", 20);
delay_ms(50);
fprintf(ESP8266, "Longitude: %.6f\r\n", Longitude());
//Manda el dato de la longitud
delay_ms(50);
// Aceleracion x
fprintf(ESP8266, "AT+CIPSEND=0,%d\r\n", 14);
delay_ms(50);
fprintf(ESP8266, "Ax = %.6f\r\n", MPU6050_get_Ax());
//Manda el dato de la aceleracion en x
delay_ms(50);
// Aceleracion y
fprintf(ESP8266, "AT+CIPSEND=0,%d\r\n", 14);
delay_ms(50);
fprintf(ESP8266, "Ay = %.6f\r\n", MPU6050_get_Ay());
//Manda el dato de la aceleracion en y
delay_ms(50);
}
}
}
6
Sección (3): Programación en MATLAB
Al correr el programa de matlab (TCP GUI.m) se abre la GUI, Figura 9.
Figura 9: GUI diseñada en MATLAB para mostrar los datos de posición y aceleración
t = tcpclient("[Link]",80);
7
Figura 11: Respuesta del módulo ESP8266 al comando AT+CIFSR
set(handles.pushbutton2, 'UserData', 0);
Cuando inicia el ciclo while, a una variable a se le asignan los datos recibidos
y convertidos a char, se hace una pausa de 100ms para que no se amontonen los
datos recibidos y se verifica si el dato recibido es un caracter vacio o no con la
función isempty(a). Si el dato no es un caracter vacio, entonces se puede entrar al
switch case para imprimir los datos en las cajas de texto correspondientes. En la
figura 13 se muestran estas lı́neas de código. Para seleccionar qué dato va en la caja
correspondiente, el switch case compara la segunda letra de cada dato recibido, para
la Latitud se usa la a, para la Longitud se usa la o. Para las aceleraciones se usa x
y y respectivamente.
while true
a = char(read(t))
pause(0.1);
b = isempty(a);
if b == 0
switch a(2)
case 'a'
set(handles.edit1, 'String', a(10:end));
case 'x'
set(handles.edit3, 'String', a(5:end));
case 'o'
set(handles.edit2, 'String', a(11:end));
case 'y'
set(handles.edit4, 'String', a(5:end));
if get(handles.pushbutton2, 'UserData') == 1
break;
Figura 14: Código para salir del ciclo while y dejar de recibir datos
8
3V3
5V
C1 LEVEL CONVERTER
HV1
1 2
LV1
ESP8266
3 4 1 8
U1 HV2 LV2 GND TX
22pF CRYSTAL HV
5 6
LV IO2
2 7
EN
20MHz 13 33 7 8 3 6
C2 OSC1/CLKIN RB0/INT GND GND IO0 RST
14 34 9 10 4 5
OSC2/CLKOUT RB1 HV3 LV3 RX 3V3
35 11 12
RB2 HV4 LV4
2 36
ICSP RA0/AN0 RB3/PGM
22pF 3 37
RA1/AN1 RB4
5 4 38
PGC RA2/AN2/VREF-/CVREF RB5
4 5 39
PGD RA3/AN3/VREF+ RB6/PGC
3 6 40
GND RA4/T0CKI/C1OUT RB7/PGD 3V3
2 7
VDD RA5/AN4/SS/C2OUT
VPP
1
RC0/T1OSO/T1CKI
15 R3
8 16 100
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
R1 23
RC4/SDI/SDA 5V
1 24
MCLR/Vpp/THV RC5/SDO
100 25
RC6/TX/CK MPU6050
26
RC7/RX/DT
1
VCC
19 2
5V RD0/PSP0 GND
R2 RD1/PSP1
20 3
SCL
10k 21 4
RD2/PSP2 SDA
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
SIM808
1
TX0
2
RX0
3
GND