Escolar Documentos
Profissional Documentos
Cultura Documentos
SANTO ANDRÉ
2015
2
Orientador:
SANTO ANDRÉ
2015
3
Aprovado ( )
4
Nota: ______
AGRADECIMENTOS
Ao Prof. Dr. Marcos Forte pela dedicação durante a orientação deste trabalho,
sempre apontando o melhor caminho a ser trilhado;
ao Centro Universitário Fundação Santo André e seu corpo docente que durantes os
anos dedicados nesta graduação pavimentaram o caminho do conhecimento sem o
qual este trabalho não seria possível;
aos amigos, familiares e a minha noiva e futura esposa Ariadina Arrais Ribeiro pelo
carinho, compreensão e apoio nos momentos mais árduos.
5
Albert Einstein
6
RESUMO
ABSTRACT
LISTA DE ILUSTRAÇÕES
LISTA DE TABELAS
RF Rádio Frequência
SS Slave Select
1. SUMÁRIO
1. INTRODUÇÃO 13
2. ESTUDO DA ARTE 14
3. PROJETO 24
3.1. COMPONENTES 25
3.1.1. Arduino UNO 25
3.1.2. Módulo de aquisição de imagem 27
3.1.3. Módulo de armazenamento 28
3.1.4. Módulo GPS e Módulo GSM/GPRS 29
3.2. PROTÓTIPO – HARDWARE 31
3.2.1. Módulo GPS e Módulo GSM/GPRS 31
3.2.2. Módulo GPS e Módulo GSM/GPRS 32
3.3. PROTÓTIPO – SOFTWARE 34
3.3.1. Modelo de operação 34
3.3.2. Configuração de hardware 35
3.3.3. Aquisição de localização GPS 38
3.3.4. Aquisição de imagem e armazenamento de arquivos 40
3.3.5. Envio de informações por GSM/GPRS e FTP 42
3.4. SERVIDOR 44
3.4.1. Banco de Dados 44
3.4.2. Armazenamento de dados 45
3.4.3. Exposição de dados 45
4. RESULTADOS 47
5. CONCLUSÃO 54
REFERENCIAS 55
APÊNDICE B – CODIFICAÇÃO 58
13
CODIFICAÇÃO ARDUINO 58
CRIAÇÃO DA TABELA NO BANCO DE DADOS 66
WEBSITE – AQUISIÇÃO DE DADOS 66
WEBSITE – EXIBIÇÃO DE DADOS 66
2. INTRODUÇÃO
3. ESTUDO DA ARTE
a) Link 1 (L1)
Modulação: Em fase.
b) Link 2 (L2)
Modulação: Em fase.
- Códigos de identificação
Tanto o código P quanto o código C/A são do tipo Pseudo Random Noise
(PRN) e permitem que a mensagem de posição transmitida pelo satélite seja
acrescida de ruído, deteriorando a precisão da determinação do posicionamento,
porém garantindo uma precisão da ordem de 10 a 20 metros. O departamento de
defesa americano, por motivos de segurança utiliza técnicas de degradação dos
sinais, limitando a precisão do sistema disponível ao uso civil. As principais técnicas
são a de Selective Disponibility (AS) e Anti-Spoofing (A-S), ambas geram ruídos não
gaussianos que impedem a localização exata do receptor (MONICO,2000).
19
O filtro RGB mais comum é a matriz de Bayer (Figura 2-3), que alterna
linhas de vermelho e verde com linhas de verde e azul. Tendo em vista que o olho
humano é mais sensível a cor verde do que ao vermelho e o azul (KIMMEL,1999), a
matriz possui duas vezes mais filtros da cor verde, ou seja, na matriz de Bayer para
cada conjunto de 2x2 pixels, duas diagonais opostas possuem filtros verdes, e as
outras duas possuem filtros vermelho e azul, sendo assim o olho humano pode
detectar mais detalhes do que se as três cores possuíssem a mesma distribuição no
filtro.
Fonte: CambridgeinColor.com
celular
Global System for Mobile (GSM) sendo baseado em tecnologia Time Division
Multiple Access (TDMA) onde cada usuário possui uma parcela de tempo para envio
de informações.
Fonte: Teleco.com
4. PROJETO
4.1. Componentes
Fonte: Arduino.cc
26
Fonte: Arduino.cc
27
Fonte: Adafruit.com
28
Fonte: WaveShare.com
Fonte: SimCom.com
Fonte: DFRobots.com
31
Figura 3-10 - ProtoShield instalado junto ao Arduino UNO e Shield DFRobots SIM908
4.4. Servidor
5. Resultados
S=i∗U [Watt ]
(4.1)
−3
S=175 x 10 A∗12 v =2,1W (4.2)
utilização de uma antena com maior ganho no receptor. Esta solução não foi
adotada no projeto, pois para estudo de viabilidade de um rastreador com aquisição
de imagem, as respostas do módulo GPS mostraram-se satisfatórias com o veículo
em trânsito.
1024 2∗G
A= (4-
K
3)
1024 2∗2
A= =38.130[arquivos ] (4-4)
55
O envio da imagem para o servidor por FTP foi um dos pontos críticos do
projeto, uma vez que para realizar o carregamento da imagem por uma página
HTML seria necessário que o protótipo acessasse a página e preenche-se campos
com a localização da imagem no cartão de memória, realizando uma carga
temporária no servidor para somente após submissão do formulário HTML ser
realizado o armazenamento (W3SCHOOLS,2015). A carga temporária em uma
página web além de ser mais lento, torna o processo de desenvolvimento do
servidor muito mais complexo, e para este projeto o desenvolvimento de um servidor
de grande capacidade encontra-se fora de escopo. O FTP além de mais rápido, trata
o arquivo de imagem, disponibilizando-o diretamente no armazenamento do servidor
52
C=
31∗24∗n∗b Mb
1024 mês [ ] (4-
5)
C=
31∗24∗12∗55 Mb
1024 mês [ ]
= 479,53
Mb
mês [ ] (4-
6)
55
C=1,1∗ ( 31∗24∗12∗55
1024 )[ mês
Mb
]=527,48[ mês
Mb
] (4-7)
6. Conclusão
7. Referencias
BRASIL (Governo). Departamento Nacional de Transito. Resolução Nº 417. Diário Oficial da União: Conselho
Nacional de Transito, Brasília, 12 de setembro de 2012. Disponível em
<http://www.denatran.gov.br/download/Resolucoes/(RESOLU%C3%87%C3%83O%20417.2012).pdf>. Acesso
em 30 de março 2015.
ERL. Thomas. Service Oriented Architeture Concepts, Technology and Desing. 2005. Pearson Education.
ESTADOS UNIDOS (Governo). Forças Aéreas. The Global Positioning System. 03 de mar 2015. Disponível em
<http://www.gps.gov/systems/gps/>. Acesso em 08 de maio de 2015.
IDC BRASIL, Estudo sobre tendências veiculares no Brasil, São Paulo, 11 setembro de 2013. Disponível em
<http://br.idclatin.com/releases/>. Acesso em 28 de março 2015.
KIMMEL, R. Demosaicing: Image reconstruction from color CCD samples. IEEE transactions on image
processing, v. 8, n. 9, p. 1221, set 1999.
LAPORTA, M. Z; FOGO, M; FUZARI, D.F. Manual para elaboração de trabalhos acadêmicos. 4. ed. Santo André,
2013.
58
MONICO, J.F.G. Posicionamento pelo NAVSTAR-GPS: Descrição, fundamentos e aplicações. 1.ed. Presidente
Prudente: UNESP, 2000.
SÃO PAULO (Estado). Secretaria de Segurança Pública do Estado de São Paulo. Dados Estatísticos do Estado de
São Paulo. São Paulo, 2015. Disponível em <http://www.ssp.sp.gov.br/novaestatistica/Pesquisa.aspx>. Acesso
em 30 de março 2015.
SVERZUT, J. U. Redes GSM, GPRS, EDGE e UMTS: Evolução a Caminho da Terceira Geração. São Paulo: Érica,
2007.
TATEOKI, G. T. Monitoramento de Dados via Internet baseado em Telefonia Celular. 2007. 123 f. Dissertação
(mestrado) - Universidade Estadual Paulista. Faculdade de Engenharia de Ilha Solteira, 2007.
9. Apêndice B – Codificação
/****************************************************************************************
* Código: GPS_System.ino
* Autor.: Israel Zanata Escorizza (israel.escorizza@gmail.com)
* Data...: 22/10/2015
* Versão: 1.0
*****************************************************************************************/
//- Bibliotecas ------------------------------------------------------------------------------------------------------------------------------
#include <Adafruit_VC0706.h> //- Biblioteca para comunicação com câmera serial.
#include <SPI.h> //- Biblioteca para comunicação SPI
#include <SD.h> //- Biblioteca para a gravação/leitura de cartão SD
#include <SoftwareSerial.h> //- Biblioteca para comunicação serial virtuais
int8_t nCont = 0;
if (!GetGPSInfo()){
sprintf(cCodErr,"GPS01");
}
else{
while (nCont <= 3 && !GetImagem()){
nCont++;
delay(5000);
}
if (nCont > 3){
sprintf(cCodErr,"CAM01");
}
else {
nCont = 1;
while (nCont <= 3 && !SendGPRS()){
nCont++; delay(5000);
}
if (nCont > 3){
sprintf(cCodErr,"GPR01");
}
}
}
61
strcpy(cCamFile,"");
nUtcTime = 0.0;
nLatitude = 0.0;
nLongitude= 0.0;
digitalWrite(5,HIGH);
delay(2000);
digitalWrite(5,LOW);
delay(3000);
while(Serial.available()) Serial.read();
if (ReadGPS(cDataRead)){
ReadFile(cSetup,"UTC_A",cAjust);
if(!(nUtcTime = GPSInfo(cDataRead,7,0,-1,ConvDouble(cAjust,0)))) return 0;
if(nUtcTime < 0.0) nUtcTime+=240000.00;
ReadFile(cSetup,"LAT_A",cAjust);
if(!(nLatitude =(GPSInfo(cDataRead,18,6,0,ConvDouble(cAjust,6))))) return 0;
ReadFile(cSetup,"LON_A",cAjust);
if(!(nLongitude=(GPSInfo(cDataRead,32,6,1,ConvDouble(cAjust,6))))) return 0;
return 1;
}
return 0;
}
/****************************************************************************************
63
Função....: ReadGPS()
Parâmetros: cDataRead - Retorno da informação obtida pelo receptor GPS.
Resposta..: 1 - Execução com sucesso.
0 - Falha.
*****************************************************************************************/
char ReadGPS(char *cDataRead){
int nX = 0;
char cProt[6] = {'$','G','P','G','G','A'}; //- Protocolo GPGGA
/****************************************************************************************
Função....: GPSInfo()
Parâmetros: cDataRead - Informação obtida pelo receptor GPS.
nMod - Posicionador da linha.
nDec - Quantidade de casa decimais esperada.
nDir - Informa se calcula direção
[-1] Não calcula
[0] Latitude
[1] Longitude
nAjust - Ajuste a ser realizado antes do retorno.
if (nDir == -1)
return (ConvDouble(cReturn,nDec) + nAjust);
else
64
/****************************************************************************************
Função....: GPSDir()
Parâmetros: cDataRead - Informação obtida pelo receptor GPS.
nDir - Informa deslocamento na string para cálculo de direção
[0] Latitude
[1] Longitude
//- Realiza leitura do buffer enquanto existir bytes a serem lidos e escreve no arquivo
while(nJPGLen > 0){
uint8_t cBytesLeft = min(64, nJPGLen);
uint8_t *cBuffer = Cam.readPicture(cBytesLeft);
fSDFile.write(cBuffer,cBytesLeft);
nJPGLen -= cBytesLeft;
}
fSDFile.close(); //- Fecha arquivo no SD.
Serial.println(cCamFile);
return 1;
}
else{
return 0; //- Falha de execução.
65
}
}
else {
return 0; //- Falha de execução.
}
}
SendAt("AT+HTTPINIT","",2000);
SendAt("AT+HTTPPARA=\"CID\",1","",2000);
Serial.print("AT+HTTPPARA=\"URL\",\""); //- Estrutura da requisição HTML
ReadFile(cSetup,"SERVER",cRet); //- Servidor
Serial.print(cRet);
Serial.print("id="); //- ID de usuário
ReadFile(cSetup,"ID",cRet);
Serial.print(cRet);
Serial.print("&utc="); //- Horário
Serial.print(nUtcTime);
Serial.print("&lat="); //- Latitude
Serial.print(nLatitude,6);
Serial.print("&lon="); //- Longitude
Serial.print(nLongitude,6);
Serial.print("&file="); //- Arquivo
Serial.print(cCamFile);
SendAt("\"","",2000);
/****************************************************************************************
Função....: SendFTP()
Parâmetros: cID - ID do usuario.
Resposta..: 1 - Execução com sucesso.
0 - Falha.
*****************************************************************************************/
char SendFTP(char *cID){
File fSDFile;
int nX = 0;
char cRead[100];
sprintf(cRead,"AT+FTPPUTNAME=\"%s\"",cCamFile);
SendAt(cRead,"",2000);
sprintf(cRead,"AT+FTPPUTPATH=\"%s\"",cID);
SendAt(cRead,"",2000);
66
if (SendAt("AT+FTPPUT=1","+FTPPUT:1,1",5000)){
fSDFile = SD.open(cCamFile,FILE_READ);
while(fSDFile.available()){
cRead[nX] = fSDFile.read();
nX++;
if(nX > 100){
//- Realiza o envio ao FTP, em caso de falha, retorna 0.
if(!SendAt("AT+FTPPUT=2,100","+FTPPUT:",5000) && !SendAt(cRead,"+FTPPUT:",5000)){
fSDFile.close();
return 0;
}
}
}
cRead[nX] = '\0';
if(!SendAt("AT+FTPPUT=2,100","+FTPPUT:",5000) && !SendAt(cRead,"+FTPPUT:",5000)){
fSDFile.close();
return 0;
}
return 1;
}
}
if (!strlen(cEsper)) sprintf(cEsper,"OK");
return nResp;
}
/****************************************************************************************
Função....: ConvDouble
Parâmetros: cValor - String de entrada que será convertida.
nNum - Numero de casas decimais.
*****************************************************************************************/
double ConvDouble (char *cValor, int nNum){
double dTemp = 0.0; //- Variável de retorno
67
while(cValor[cI] != '.' && cValor[cI] != '\0') //- Enquanto caractere não for '.' compõe a parte inteira.
dTemp = dTemp * 10 + (cValor[cI++] - 0x30);
for (cJ=0;cJ<nNum;cJ++) //- Divide a parte inteira para compor ponto flutuante
dTemp = dTemp / 10;
/****************************************************************************************
Função....: ReadFile
Parametros: cArq - Arquivo de configuração que será lido.
cBusca - Configuração a ser lida do arquivo.
cRet - Resposta obtida do arquivo de configuração.
*****************************************************************************************/
void ReadFile(char *cArq, char *cBusca, char *cRet){
int nX = 0;
File fSDFile;
fSDFile = SD.open(cArq,FILE_READ);
if (fSDFile){
while (fSDFile.available() && fSDFile.read() != '$');
while(fSDFile.available() && nX < strlen(cBusca)-1){
if(fSDFile.read() == cBusca[nX]){
nX++;
}
else{
nX = 0;
while(fSDFile.available() && fSDFile.read() != '$');
}
}
while(fSDFile.available() && fSDFile.read() != ':');
nX = 0;
while(fSDFile.available()){
cRet[nX] = fSDFile.read();
if(cRet[nX] == ';') break;
nX++;
}
cRet[nX] = '\0';
}
fSDFile.close();
}
/****************************************************************************************
Função....: Logger
Parametros: cFile - Arquivo que será escrito o log
cErrCod - Código do Erro.
*****************************************************************************************/
void Logger(char *cFile, char *cCodErr){
68
char cErro[100];
File fSDFile;
ReadFile(cFile,cCodErr,cErro);
fSDFile=SD.open("Erro.log",FILE_WRITE);
fSDFile.println(cErro);
Serial.println(cCodErr);
Serial.println(cErro);
fSDFile.close();
}
69
<?php
?>
<?php
//- Variaveis PHP
$ID = $_GET['id'];
if ($ID != NIL){
$myquery= $myquery." where id = $ID";
}
$query_res=mysqli_query($conn,$myquery);
?>
70
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<title>GPS Tracker</title>
<style>
div.linha_topo {
border-bottom: solid black 1px;
width: 50%;
text-align: center;
}
div.linha{
z-index:99px;
width: 50%
}
div.linha:hover{
background: #2980b9
}
div.coluna{
width: 10%;
display: table-cell;
text-align: center;
}
div.coluna_img{
width: 10%;
display: table-cell;
text-align: center;
}
div.coluna_img:hover {
cursor: pointer;
}
div.coluna_img:hover span{
background: black;
position: absolute;
z-index: 200px;
padding: 10px;
margin-left: 30px;
margin-top: 5px;
width: 500px;
height: 400px;
border: solid black 2px;
display: block;
}
div.coluna_img span{
display: none;
}
.img_cam {
width: 100%;
height: 100%;
}
</style>
<script>
</script>
</head>
<body>
<section id="topo">
<div>
<h1> GPS Tracker - Informação </h1>
</div>
</section>
<section id="tabela">
<div class='linha_topo'>
71