0% encontró este documento útil (0 votos)
6 vistas9 páginas

Manual

Cargado por

Sofia Martinez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas9 páginas

Manual

Cargado por

Sofia Martinez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

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

Sección (1): Dispositivos fı́sicos


De acuerdo con el diagrama de flujo de la Figura 3, para iniciar el sistema se
deben alimentar los módulos del GPS (SIM808), Acelerómetro (MPU6050) y WiFi
(ESP8266).
Comenzando con el módulo SIM808 mostrado en la Figura 1:

1. Conecte la antena en la terminal ubicada en el recuadro 6.

2. Conecte la alimentación en el recuadro 1 (Debe ser entre 5V y 26V y 2A).

3. Mueva el switch del recuadro 2 hacia ON.

4. Enciende el led del recuadro 3.

5. Presione el botón del recuadro 4 durante 3 segundos.

6. En los primeros 2 segundos se encenderá el diodo 3 y diodo 4, ubicados en el


recuadro 5, con una intensidad baja.

7. Después del tercer segundo, los diodos 3 y 4, ya estarán encendidos a la inten-


sidad normal.

Ya que el módulo SIM808 está encendido, se procede a encender los módulos


restantes, se puede encender primero el módulo ESP8266 y después el PIC y el
acelerómetro o encender todos al mismo tiempo. El módulo ESP8266 funciona a
3.3V y el PIC necesita una alimentación de 5V. Para poder comunicar correctamente
el ESP8266 con el PIC, se necesita un convertidor de nivel lógico para no quemar el
módulo con 5V. Al contrario, si se necesitan mandar datos del ESP8266 hacia el PIC
con 3.3V, el PIC no reconoce los niveles altos recibidos porque necesita por lo menos

1
5 6
2

3 4

Figura 1: Módulo SIM808

un voltaje de 4V (80 % del voltaje de alimentación del PIC) para reconocerlos. En


la figura 2 se muestra el convertidor de nivel lógico. Este convertidor cuenta con 4
canales individuales de 3.3V a 5V y de 5V a 3.3V.

Figura 2: Convertidor de nivel lógico bidireccional de 4 canales

2
Dispositivos MATLAB
PIC (2)
físicos (1) Inicio (3)
Inicio Inicio

Encender Definir puertos Correr programa


GPS UART e I2C para acceder a
la GUI

Presionar 3s Iniciar SIM808


botón de GPS con comandos Esperar a que el
AT ESP8266
comience con la
Alimentar transmisión
todo el Iniciar ESP8266
circuito con comandos
AT

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

Figura 3: Diagrama de flujo del proyecto

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

Sección (2): Programación del PIC


Después de inicializar el pic (Integracion3 0.h) con el código de la Figura 4, se
inicializan los puertos UART e I2 C.
El puerto UART para el ESP8266 se define como puerto por software, lo que
implica que consume mucho procesamiento del PIC y no es recomendable para
recibir datos, puesto que muchas de las veces no se recibirán ya que no existe un
registro fı́sico para interrupción por recepción.
Ambos puertos trabajan a 115200 baudios por segundo para no cambiar la razón
de baudios del ESP8266 y aprovechando que el SIM808 detecta automáticamente la
velocidad a la que se trabajará.
Para el I2C se trabaja con una velocidad de 100 Kbit/s. En la Figura 5 se
muestran las lı́neas de código usadas.

#include <16F877A.h>
#device PASS_STRINGS = IN_RAM
#device ADC=16

#FUSES HS //20 MHz


#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming

#use delay(crystal=20MHz)

Figura 4: Código para inicializar el PIC

#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

Figura 5: Código para inicializar los puertos UART e I2C

Inicialización de módulo SIM808


En la Figura 6 se muestran las lı́neas de código con las que se inicializa el SIM808.
Primero se enciende la fuente de alimentación GNSS y después se habilita el envı́o

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

Figura 6: Inicialización del SIM808

Inicialización de módulo ESP8266


Para inicializar el ESP8266 se necesitan las lı́neas de la figura 7, después de cada
comando AT se le debe dar un tiempo al módulo para que procese la instrucción.
Al encender, el ESP8266 trata de conectarse a la última red guardada, se le dan 6
segundos para esta operación. Enseguida se le manda una prueba de inicio a la que
el módulo debe responder con un OK, en caso de que sı́ se conecte automáticamente

for (int n = 6; n!=0; n--){ // Esperar a que el modulo wifi se


conecte a la red
delay_ms( 1000 );
}
//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); //Primera vez con nueva red, se descomentan estas lineas
printf("AT+CWJAP=\"Nombre\",\"contraseña\"\r\n"); //Conectarse a la red
<ssid>,<pwd>
for (int i = 6; i!=0; i--){ //Esperar a que se conecte
delay_ms( 1000 );
}*/
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

Figura 7: Inicialización del ESP8266

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.

Envı́o de datos hacia el ESP826


Una vez que se ha concluido con la inicialización de los tres módulos, se comienza
con el envı́o de datos de aceleración y posición hacia el ESP8266. Los datos se envı́an
cuando se reciba un dato del SIM808. No se pueden enviar los datos del MPU6050
independientemente de los datos del SIM808, ya que, el MPU6050 manda datos más
rápido que el SIM808 y esto provoca que no alcance a detectar la recepción del
SIM808. En la Figura 8 se muestra el código.

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

Figura 8: Código para el envı́o de datos hacia el ESP8266

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

Antes de presionar el botón de inicio en la GUI se debe esperar a que el ESP8266


halla creado el servidor. Viendo el módulo fı́sico, se sabe que se ha creado el servidor
y ha comenzado a enviar datos cuando el diodo LED azul comienza a parpadear
constantemente, esto es aproximadamente 8 segundos cuando se conecta a una red
conocida y 13 segundos cuando es una red nueva.
Cuando se presiona el botón de Iniciar, el programa entra a la función de ese
botón llamada pushbutton1 ; dentro de esta función, se crea el cliente, como se mues-
tra en la Figura 10. A esta función se le especifica la dirección IP del módulo WiFi
ESP8266 que en este caso es 192.168.50.113 y el puerto que se le ha asignado (Puer-
to 80). Esa dirección IP se la asigna el modem al módulo pero se puede cambiar con
el comando siguiente, por ejemplo: AT+CIPSTA=”192.168.6.100”.

t = tcpclient("192.168.50.113",80);

Figura 10: Lı́nea de código para crear cliente TCP

Para conocer la dirección IP del módulo ESP8266, es necesario que el módulo


esté conectado ya a una red WiFi, esto se puede hacer usando el código del PIC de
inicializar el módulo ESP8266 para el caso de que sea una red nueva. Si el módulo
ESP8266 ya tiene una red conocida, entonces se necesita un programa de monitor
RS232 configurado a 115200 baudios por segundo (se puede usar el monitor serie de
Arduino). Cuando en el monitor aparezca que se ha conectado a la red WiFi, se le
manda la instrucción siguiente al módulo: AT+CIFSR, el módulo responde como se
muestra en la figura 11 y se debe usar el IP llamado STAIP. Otra forma de conocer
la dirección IP, es asignandole una IP manualmente, como se describió en el parrafo
anterior.
Al botón de finalizar se le asigna un 0 para que el programa se mantenga en el
ciclo while, Figura 12.

7
Figura 11: Respuesta del módulo ESP8266 al comando AT+CIFSR
set(handles.pushbutton2, 'UserData', 0);

Figura 12: Lı́nea de código para asignar un 0 al botón de finalizar

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 la aceleración en x y en y
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));

Figura 13: Código para mostrar los datos recibidos en MATLAB

Si se presiona el botón de finalizar, su valor cambia a 1 y con las lı́neas de la


Figura 14 se sale del ciclo while y se dejan de recibir datos.

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

También podría gustarte