Monografia - Sistema de Monitoramento Automotivo Remoto - V - Final
Monografia - Sistema de Monitoramento Automotivo Remoto - V - Final
Monografia - Sistema de Monitoramento Automotivo Remoto - V - Final
São Paulo
2018
Erivaldo Junior
Gustavo Luiz da Silva
Orientador:
São Paulo
2018
2
LISTA DE PRESENÇA
3
"Penso, logo existo"
Descartes, René
4
AGRADECIMENTOS
Gustavo L. da Silva
Meus sinceros agradecimentos a todos aqueles que de alguma forma doaram um pouco
de si para que a conclusão deste trabalho se tornasse possível
Felipe A. V. Fagundes
5
RESUMO
6
ABSTRACT
This project aims to the simulation data of a vehicle (speed, RPM, temperature, load
and TPS) from the reading of the OBD (On-Board Diagnosis) of data processing through a
microcontroller for sending from system telemetry via mobile data network (GSM) and read-
ing from an internet browser. With this system the user will be able to monitor the real-time
vehicle checking vehicle behavior at that moment.
7
SUMÁRIO
1. Introdução........................................................................................................................14
1.1. Justificava...................................................................................................................14
1.2. Objetivos....................................................................................................................15
2. Referencial teórico...........................................................................................................16
2.1. Introdução à telemetria...............................................................................................16
2.2. Interface de comunicação veicular (OBD II).............................................................18
2.3. Kit de desenvolvimento EVK2..................................................................................22
2.3.1. Conteúdo do Kit..................................................................................................23
2.4. ECU Ford EEC–V......................................................................................................27
2.4.1. Novos componentes............................................................................................27
3. Metodologia......................................................................................................................28
3.1. Analise do Scanner ODBII – ELM 327.....................................................................28
3.2. Analise do Kit de desenvolvimento EVK2................................................................31
3.2.1. Instalação:...........................................................................................................32
3.2.2. Comandos...........................................................................................................33
3.3. Giga de testes ECU Fiesta..........................................................................................37
3.3.1. Velocidade..........................................................................................................37
3.3.2. Rotação...............................................................................................................38
3.3.3. Temperatura do liquido de arrefecimento...........................................................40
3.3.4. Posição da válvula borboleta..............................................................................41
3.4. Hardware do projeto...................................................................................................42
3.5. Software do projeto....................................................................................................43
3.6. Servidor do projeto.....................................................................................................49
4. Analise dos resultados.....................................................................................................53
4.1. Simulação...................................................................................................................53
4.2. Leitura e tratativa.......................................................................................................55
4.3. Telemetria...................................................................................................................56
5. Conclusão.........................................................................................................................57
5.1. Projetos futuros..........................................................................................................57
6. Referências.......................................................................................................................58
7. Apêndice...........................................................................................................................60
APÊNDICE A – Circuito placa OBD 2 EVK2.....................................................................60
APÊNDICE B – Esquema elétrico Placa Rotação................................................................61
8
APÊNDICE C – Esquema elétrico placa do sensor de velocidade.......................................62
APÊNDICE D – Código do programa..................................................................................63
8. Anexos...............................................................................................................................82
ANEXO A – DIAGRAMA ELETRICO EEC-V..................................................................82
ANEXO B – COMANDO AT – ELM327............................................................................83
9
INDICE DE ILUSTRAÇÕES
FIGURA 1– TOPOLOGIA DE UM SISTEMA DE TELEMETRIA......................................16
FIGURA 2 - DIAGRAMA EM BLOCOS DO PROJETO.......................................................17
FIGURA 3 - CONECTOR OBD II FÊMEA ...........................................................................17
FIGURA 4 - PINAGEM CONECTOR OBD II ......................................................................18
FIGURA 5 - FORMATO MENSAGEM OBD2 FONTE: DATASHEET – ELM327............18
FIGURA 6 - SINAIS DO BARRAMENTO J1850 -................................................................19
FIGURA 7 - EXEMPLO DE TRANSMISSÃO DE MENSAGEM J1850 PWM....................19
FIGURA 8- SCANNER OBDII GENÉRICO ESCOLHIDO ..................................................20
FIGURA 9 - CIRCUITO INTERNO DO LEITOR GENÉRICO OBDII.................................20
FIGURA 10 - MODEM TELIT EVK2 - FONTE: TELIT EVK2 USERGUIDE....................23
FIGURA 11 - POSICIONAMENTO DOS CIRCUITOS.........................................................24
FIGURA 12 - PLACA ADAPTADORA GSM/GPS – HE910 – CS1467C.............................24
FIGURA 13 - MODEM TELIT HE910 FONTE: DATASHEET - HE 910 SERIES..............26
FIGURA 14 - ECU FIESTA 99 TICO UTILIZADA...............................................................27
FIGURA 15 - PROGRAMA TELIT – TERMINAL –VIA SERIAL USB..............................33
FIGURA 16- SISTEMA SENSOR VELOCIDADE ECU FIESTA ........................................39
FIGURA 17 - CIRCUITO FINALIZADO...............................................................................41
FIGURA 18-SISTEMA SENSOR ROTAÇÃO ECU FIESTA................................................41
FIGURA 19-SISTEMA SENSOR TEMPERATURA ECU FIESTA......................................42
FIGURA 20-SISTEMA SENSOR POSIÇÃO VALVULA BORBOLETA ECU FIESTA ....43
FIGURA 21 - HARDWARE FINALIZADO RODA FONICA...............................................44
FIGURA 22 - TRANSFORMA STRING EM NUMERO.......................................................45
FIGURA 23 - TRANSFORMA NÚMERO EM STRING.......................................................46
FIGURA 24 - ENVIO DE DADOS E TRATAMENTO..........................................................47
FIGURA 25- CÁLCULO DOS VALORES OBTIDOS...........................................................47
FIGURA 26 – AMOSTRAGEM DOS DADOS RECEBIDOS...............................................48
FIGURA 27 - INICIALIZAÇÃO DO MODEM EVK2M M...................................................48
FIGURA 28 - INICIALIZAÇÃO DO SCANNER OBD II......................................................48
FIGURA 29 - FUNÇÃO, RECEBE DADOS DO GPS............................................................49
FIGURA 30 - IMPRIME O HORÁRIO MUNDIAL...............................................................49
FIGURA 31 - IMPRIME LATITUDE E LONGITUDE..........................................................50
FIGURA 32 - FLUXOGRAMA DO SOFTWARE..................................................................50
FIGURA 33 - CHATSERVERENDPOINT.JAVA..................................................................51
FIGURA 34 - CHATMESSAGEENCODER.JAVA................................................................51
FIGURA 35 - CHATMESSAGE.JAVA...................................................................................52
FIGURA 36 - CHATMESSAGEDECODER.JAVA................................................................52
FIGURA 37 - FORMATANDO O ESTILO DA PAGINA......................................................53
FIGURA 38 - SIMULAÇÃO DO WEB BROWSER...............................................................53
FIGURA 39-VELOCIDADE EM FUNÇAÕ DA FREQUENCIA..........................................54
FIGURA 40 - SINAL ROTAÇÃO – FONTE: SISTEMA EEC-V FLAVIO XAVIER..........55
FIGURA 41 - POSIÇÃO DA VÁLVULA BORBOLETA EM FUNÇÃO DA TENSÃO .....56
FIGURA 42 - TESTE DE LEITURA DOS DADOS ECU - OBD2 VIA PC..........................56
FIGURA 43 - TELEMETRIA DOS DADOS VIA SMS.........................................................58
FIGURA 44 - ESQUEMA ELÉTRICO EEC-V.......................................................................85
10
LISTA DE TABELAS
11
LISTA DE ABREVIAÇOES
12
UART - Universal asynchronous receiver/transmitter
ADC - Application delivery controller
DAC - Digital-to-Analog Converter
SIM - subscriber identity module
I/O – In/Out
SPI - Serial Peripheral Interface
I2C - Inter-Integrated Circuit
UDP - User Datagram Protocol
FTP - File Transfer Protocol
SMTP - Simple Mail Transfer Protocol
TCP - Transmission Control Protocol
TTFF - Time To First Fix
EEPROM – Electrically Erasable Programmable Read Only Memory
NMEA - National Marine Electronics Association
dBm - decibel miliwatt
EEC - Electronic Engine Control
PCM - Powertrain Control Module
DTC – Diagnostic Trouble Codes
VSS – Vehicle Speed Sensor
NTC - Negative Temperature Coefficient
MAF – Mass Air Flow
13
1. Introdução
1.1. Justificava
A maioria dos sistemas de telemetria faz a leitura dos dados de forma invasiva, tendo a
necessidade de fazer corte em chicotes e atuadores para conseguir efetuar as leituras dos
sinais dos mesmos e assim invalidando garantias de fábrica e comprometendo a
confiabilidade do sistema elétrico e eletrônico do veículo, além do sistema ter a necessidade
de ser desenvolvido de acordo com a arquitetura de cada veículo, já que lendo diretamente
nos sensores a leitura terá de ser feita com base nos valores do mesmo por não existir um
padrão para as leituras devido a cada sensor ter sua característica especifica, assim, por sua
vez encarecendo muito ter que desenvolver uma interface diferente para cada sistema de
injeção de um carro. Por desconhecermos a existência de um sistema de telemetria que faça a
leitura dos dados via tomada de diagnostico, decidimos desenvolver uma interface que
efetuasse a leitura dos sensores de uma forma menos invasiva e que pudesse ser feita na
maioria dos veículos sem a necessidade de alterar o hardware e software e por isso a leitura
foi feita via padrão OBDII.
14
1.2. Objetivos
15
2. Referencial teórico
Wireless
Bluetooth
É uma especificação industrial para a comunicação em curta distância de redes sem fio
(10 metros) com um baixo custo e alta operabilidade para dados ou voz com largura da banda
de 1MBit/s e velocidade máxima de 783KBit/s. A tecnologia Bluetooth opera na faixa de
frequência de 2.4 GHz com conexão ponto a ponto ou ponto a rede, a segurança na troca de
informações é garantida trocando a frequência 1600 vezes por segundo entre 79 canais (2402
MHz a 2480 MHz), o algoritmo de troca é randômico e baseado no endereço do máster, todos
os 79 canais (1 MHz cada) são usados antes de um canal ser reutilizado.
GSM
No local remoto onde esses dados serão obtidos existem vários sensores que serão
neste caso a fonte de dados da nossa aplicação. A saída do sensor é convertida em dados
digitais por algum dispositivo ou computador, esse dispositivo é ligado a um modem que
converte esses dados digitais para um sinal analógico que pode ser transmitido através do ar.
O sinal é enviado para um receptor e esse processo é executado inversamente. O modem
converte o sinal analógico recebido para um sinal digital para que possa ser processado ou
visualizado por algum equipamento (Figura 1).
Vantagens:
Flexibilidade: comunicação sem restrições e alcance onde redes com fios estariam
impossibilitadas de chegar.
Redução do Custo e facilidade: Como uma rede GSM não necessita de fios sua
construção é muito mais barata
Desvantagens:
Qualidade de serviço: por depender da qualidade do sinal emitido uma rede sem fio
pode se tornar muito lenta.
Segurança: redes sem fio são mais suscetíveis a ataques externos não desejados. O uso
de ondas para comunicação pode ocasionar interferência nos demais equipamentos
17
Figura 2 - Diagrama em Blocos do Projeto
A aplicação do projeto consiste na simulação dos dados para ECU, esses dados serão
recebidos pelo scanner ODBII e o hardware de controle tem a função de receber, tratar e
enviar esses dados via conexão GSM juntamente com os dados de localização recebidos pelo
modem GPS. Esses dados poderão ser visto a partir de um servidor que pode ser um
computador pessoal ou um celular conforme diagrama em blocos na figura acima.
18
A especificação OBDII define a padronização do conector de diagnostico conforme
figura acima, o conector possui 16 pinos de acordo com a norma SAE J1962 ou ISO 15031-3.
19
O protocolo J1850 possui dois tipos de comunicação o VPW (variable pulse width)
que utiliza largura de pulso variável para reconhecimento do bit dominante e recessivo e o
PWM (pulse width modulation) que utiliza modulação de largura de pulso, conforme figura
abaixo.
O J1850 PWM utilizado no projeto possui como características a utilização dos pinos
2, 4, 5, 10, 16 no conector OBDII, a velocidade de transferência é de 41,6Kbps, o
comprimento da mensagem é restrita a 11 bytes incluindo o checksum, a tensão no barramento
é de 5V e o comprimento máximo da arquitetura é de 40 metros contendo até 32 nós.
Figura 7 - Exemplo de transmissão de mensagem J1850 PWM - Fonte: In-Vehicle Networking - Marvin Stone
Foi utilizado no projeto o ODBII Scan conforme figura abaixo (leitor genérico), foi
escolhido para o projeto devido ao custo baixo. Este conector utiliza um PIC18F2460 que
simula o circuito integrado ELM327, este CI é projetado para traduzir os protocolos do
OBDII realizando a leitura dos dados originados no veículo.
20
Figura 8- Scanner OBDII genérico utilizado
O scanner OBD Scan foi projetado para funcionar com comunicação via Bluetooth e
para conseguirmos retirar os dados e utilizar no hardware do projeto foi implementado três
cabos: RX / TX / GND conforme figura abaixo, com os cabos ligados a um MAX232 foi
possível através de um data logger serial instalado no computador verificar todos os dados
utilizados pelo OBD2 na comunicação via Bluetooth.
Para a leitura do conector ODBII Scan foi utilizado comando AT, é uma forma padrão
na qual os modems estão configurados internamente e se comunicam com o PC. Com o
terminal aberto, para enviar um comando para o OBDII o usuário precisa digitar o comando
“AT+” seguido do parâmetro desejado, como exemplo “AT+SP0”, com esse comando o
usuário está definindo que o protocolo utilizado será reconhecido automaticamente pelo
ODBII.
21
O projeto realizara a leitura dos seguintes dados:
Velocidade: A leitura da velocidade é realizada no endereço 010D, esse dado
será utilizado para verificar se o condutor está excedendo os limites de
velocidade da legislação.
Rotação: A leitura da rotação é realizada no endereço 010C, esse dado é
utilizado para verificar se o condutor está utilizando o veículo de forma
agressiva.
Temperatura: A leitura da temperatura do liquido de arrefecimento do veículo
é realizado no endereço 0105, com esse valor podemos verificar se a condição
de trabalho do motor é a ideal.
TPS: a leitura da posição angular da válvula borboleta é realizada no endereço
0111.
2.2.3. Características:
Modelo ELM327
Alcance Bluetooth 10 m
Protocolo de envio de dados RS232
Velocidade comunicação
9600 / 38400
PC – OBD (kbps)
Protocolos leitura do veiculo ISO15765-4(CAN)
IS014230-4(KWP2000)
ISO9141-2
J1850 VPW
J1850 PWM
Comunicação Bluetooth
Tabela 1- Características do leitor genérico OBDII - Fonte: http://www.southtrader.co.za/shop/bluetooth-obd-ii-scan-tool-
for-motor-vehicles/ (01/05/2015)
O projeto utiliza o kit de desenvolvimento EVK2 que foi fornecido pela empresa Telit,
esse kit possui inúmeras funções, tal como a transferência de dados via GSM e o sistema de
localização GPS, essas são as tecnologias do modem que serão utilizadas no projeto. A
empresa Telit forneceu o kit para utilização do projeto no concurso realizado por eles.
22
2.3.1. Conteúdo do Kit
A placa mãe inclui as interfaces básicas, tais como entrada de alimentação, suporte de
cartão SIM, saído de monitor de áudio, RS-232 e USB; bem como um botão de Reset e
interruptor de alimentação. O circuito implementado na placa mãe EVK2 é baseado no design
de referência recomendados para componentes periféricos do módulo e conexões I / O
(Telit.com).
Antena GSM
Sim Card
Fonte
Cabo USB
23
O modem utilizado pelo grupo foi o EVK2, fornecido pela empresa Telit, seu
ambiente robusto e flexível viabiliza o rápido desenvolvimento de aplicações para uma gama
completa de família de módulos GSM/GPRS, UMTS/HSDPA e CDMA, possui recursos e
periféricos básicos, tais como entrada de alimentação, SIM card, saídas de áudio, RS-232 e
USB 1.1, botão de reset, chave liga/desliga, entre outros. Enfim, ela reuniu os recursos
referenciais que uma solução deve possuir. Outros recursos específicos como, antena,
entradas/saídas de uso geral (GPIO), ADC / DAC, UART, etc. São encontrados nas Interfaces
que, através de 2 conectores machos, permitem a conexão com a aplicação do usuário, placas
de extensão, ou outras ferramentas de desenvolvimento e equipamentos de medição. É
possível controlar o módulo através da interface de Terminal que pode ser conectado via USB
ou RS-232 (Telit).
24
Figura 12 - Placa adaptadora GSM / GPS – HE910 – CS1467C
A comunicação via GSM será realizado através modem HE910 localizado na placa
adaptadora CS1467C, os dados serão enviados através de conexão via socket para um
servidor e este terá a função de exibir esses dados em um web browser. O modem GPS
também está localizado na placa acima descrita e terá a função de enviar as coordenadas da
latitude, longitude e horário mundial, com esses dados será possível estimar a localização do
veículo em estudo. A comunicação entre esses módulos e o hardware do projeto será feita
através de Terminal uma linguagem bastante utilizada na configuração de modens.
Modem GSM:
25
Modem GPS:
Desde que as novas normas ambientais (OBDII) entraram em vigor nos Estados
Unidos, em meados dos anos 90, a Ford Motor Company necessitou desenvolver um novo
sistema de controle eletrônico para os motores de seus carros. Ela reaproveitou a plataforma
do já conhecido e amplamente utilizado EEC-IV que ainda participava do sistema OBDI Para
desenvolver o seu sucessor, a EEC-V.
Figura 14 – EEC-V
27
3. Metodologia
O scanner OBD genérico utiliza comunicação via Bluetooth e para sua configuração foi
selecionado a comunicação RS232 através de um terminal, via computador assim
conseguimos enviar os comandos.
Protocolo Descrição
0 Automático
1 SAE J1850 PWM (41.6 kbaud)
2 SAE J1850 VPW (10.4 kbaud)
3 ISO 9141-2 (5 baudinit)
4 ISO 14230-4 KWP (5-baud init)
5 ISO 14230-4 KWP (fast init)
6 ISO 15765-4 CAN (11 bit ID, 500 kbaud)
7 ISO 15765-4 CAN (29 bit ID, 500 kbaud)
8 ISO 15765-4 CAN (11 bit ID, 250 kbaud)
9 ISO 15765-4 CAN (29 bit ID, 250 kbaud)
A SAE J1939 CAN (29 bit ID, 250* kbaud)
B User1 CAN (11* bit ID, 125* kbaud)
Tabela 4- Seleção de protocolo OBD2 Fonte: Datasheet – ELM327
28
3.1.2. Formato das mensagens:
29
Temperatura do liquido de arrefecimento (°C):
05 → PID 05;
123−40=83 ℃
Solicitar a rotação instantânea do motor – PID 0C do modulo – 01: (>01 0C) caso
tenhamos uma resposta do tipo: (>41 0C 1A F8) significa:
0C → PID 0C;
Solicitar a carga instantânea do motor – PID 11 do modulo – 01: (>01 11) caso
tenhamos uma resposta do tipo: (>41 11 3C) significa:
04 → PID 04;
1E → 3D hexa = 61 decimais.
30
Representa o valor do TPS do veículo dividida em oito bytes e para obter o valor em
porcentagem:
( 61∗100 ) ÷ 255=23 %
Solicitar a carga instantânea do motor – PID 0D do modulo – 01: (>01 0D) caso
tenhamos uma resposta do tipo: (>41 0D48) significa:
72 Decimal=72 km /h
Com os dados obtidos com a leitura dos códigos vindo do ODBII Scan o próximo
passo é analise do Kit de desenvolvimento EVK2 fornecido pela Telit a fim de enviar as
mensagens obtidas para o servidor de internet.
O kit de desenvolvimento fornecido pela Telit o EVK2 possui inúmeras funções desde
a envio de SMS via GSM a pequenas configurações em linguagem Python (Python é uma
linguagem de programação de alto nível, interpretada, imperativa, orientada a objetos,
funcional, de tipagem dinâmica e forte), mas nesta parte abordaremos apenas os tópicos
utilizados no projeto.
31
3.2.1. Instalação:
O projeto tem objetivo o envio de pacote de dados via GSM para internet, o modo de
envio escolhido através do modem EVK2 foi a transferência via socket PDP, esse tipo de
comunicação cria um túnel entre servidor e cliente onde é transferido o pacote de dados, após
a transferência é necessário fechar esse túnel. Para que essa transferência de dados aconteça é
necessário registrar o modem na rede e com isso obter um número de IP, configurar o socket
de acordo com as suas necessidades, abrir o socket, enviar os dados e fechar o socket. Abaixo
serão descritos os comandos utilizados neste projeto.
32
3.2.2. Comandos
35
11. Ler mensagens enviadas. Execução de comando permite que o
usuário leia os dados enviados através de um socket conectado.
AT#SRECV <x> 1 Especifica o socket
<x>,<y> <y> 20 Especifica o tamanho
da mensagem a ser lida
(bytes);
AT# SRECV=?- Mostra as configurações possíveis;
Tabela 16 - Comando #SRECV – Modem EVK2
Com os valores definidos o próximo passo foi criar a sequência de programação a ser
executada pelo hardware do projeto, a fim de receber os valores do OBDII, armazená-los em
vetores e enviar via socket PDP para o servidor.
AT+CGDCONT=1,”IP”,INTERNETM2M.AIR.COM
AT#SGACT=1,1
AT$GPSACP
AT#SD=1,0,10510,177.102.220.XXX
AT#SSEND=1
ENVIA PACOTES,
3.3.1. Velocidade
37
DC, toda vez que o mesmo receber estes impulsos negativos. (Sistema EEC-V ZETEC
ROCAM - Flavio Xavier - Elói Training).
Figura 16- Sistema Sensor Velocidade ECU Fiesta - Fonte: Sistema EEC-V ZETEC ROCAM -Flavio Xavier
Para simular a frequência do veiculo foi utilizado um circuito com o CI555, que foi
ajustado para uma frequência de 15 à 700 Hz onde podemos observar a variação de
velocidade aferida pelo Scanner OBDII. Quanto maior a frequência maior a velocidade.
3.3.2. Rotação
A rotação utilizada na ECU é aferida a partir de uma roda fônica localizada no eixo de
manivelas do motor de 36 dentes sendo 2 ausentes representando a falha, com esse sistema a
ECU sabe exatamente em qual posição estão os cilindros do motor e assim executa a função
de ignição nas velas no momento exato de máxima compressão e injeção de combustíveis nos
bicos injetores que está na fase de admissão. Para simular esse sinal foi utilizado um
microcontrolador (PIC18F2220) onde a variação é simulada a partir da leitura na entrada
38
analógica de um potenciômetro quanto maior o valor lido menor a frequência simulada,
representa pela tabela 6.
39
Figura 18-Sistema Sensor Rotação ECU Fiesta - Fonte: Sistema EEC-V ZETEC ROCAM -Flavio Xavier.
40
Figura 19-Sistema Sensor Temperatura ECU Fiesta - Fonte: Sistema EEC-V ZETEC ROCAM -Flavio Xavier
Para que o hardware do projeto fosse robusto para suportar o ambiente hostil de um
veículo e diminuir as interferências externas colocamos os seguintes materiais:
42
10 Led - 3mm LD1 a LD10
1 LM7805 CI1
1 MAX232 CI3
1 PIC 18F4620 CI2
2 Push Button S1/S2
1 Resistor - 10 k R1
2 Resistor - 270r R3/R4
1 Resistor - 330r R2
1 Cristal - 20 Mhz XTAL
Tabela 21 - Lista de Materiais
O software do projeto foi produzido com o compilador CCS, que possui várias
bibliotecas de programas de exemplo para muitas aplicações comuns. A seguir será explicado
o passo a passo na execução do programa.
Para execução dos cálculos dos valores aferidos foi feita a função abaixo, pois as
variáveis estão em forma de “string” e com sua execução o valor da variável de retorno é a
quantidade correspondente.
43
Figura 22 - Transforma String em numero
44
Primeiramente o valor do indexador de caractere é colocado em zero para garantir que
o valor recebido seja gravado no primeiro caractere do buffer de entrada, pois os dados
recebidos são tratados na interrupção externa do microcontrolador, após essa execução os
dados do buffer de entrada são zerados e enviados o endereço correspondente ao comando
indicando o valor correspondente ao valor a ser lido, após enviar essa informação o scanner
responde e o valor é gravado no buffer de entrada, para verificação do dado recebido o
programa procura os caracteres “41” (corresponde a resposta do valor perguntado ao scanner
OBDII) no buffer, caso o valor recebido não seja o correto um LED de erro será aceso e só irá
se apagar caso o valor recebido esteja correto. O valor obtido é transformado de string para
número para ser realizado as devidas contas e envio para o servidor
45
caso foi a resposta do valor a ser lido “41” assim o caractere de reposta está no vetor “+4” e
“+5”, com isso o valor é convertido de string para número, o valor recebido é tratado e
transformado na velocidade atual do veículo, para que esse valor seja enviado para o modem
EVK2 ele é transformado para string novamente e enviado para a mensagem.
46
mensagem conforme figura abaixo, bem como a inicialização do modulo OBD2 mudando
apenas o stream.
47
Figura 29 - Função, recebe dados do GPS
Para criação do servidor do projeto foi utilizado o software Eclipse (O Eclipse é uma
plataforma de desenvolvimento de software livre extensível, baseada em Java.
http://www.ibm.com/developerworks/br/library/os-eclipse-platform/ – 25/05/2015) utilizando
linguagem JAVA (linguagem de programação orientada ao objeto - www.java.com –
25/05/2015) e para operação e desenvolvimento deste servidor foi utilizado o Glassfish 4.1,
com isso é possível enviar sockets do kit de desenvolvimento EVK2 ao servidor e ser
visualizado em um web browser, também conhecidos como páginas na web.
Figura 34 - ChatMessageEncoder.java
Figura 35 - ChatMessage.java
50
Figura 36 - ChatMessageDecoder.java
51
Figura 38 - Simulação do web browser
52
dificuldades devido à falta de conhecimento técnico sobre o assunto, um exemplo disso foi a
tentativa de criar um servidor de internet para receber as informações, mas para realizar é
necessário um grande conhecimento em JAVA e o foco do nosso curso não é este, com isso
dedicamos a maior parte do tempo em realizar as comunicações com o veículo. Abaixo
explicaremos mais detalhadamente cada etapa do projeto e tentativa de solução dos problemas
encontrados.
4.1. Simulação
O projeto teve como objetivo simular cinco dados provenientes da ECU do veículo:
velocidade, rotação, temperatura do liquido de arrefecimento, posição da válvula borboleta
(TPS) do veículo.
53
Figura 40 - Sinal Rotação – Fonte: Sistema EEC-V Flavio Xavier
54
Figura 41 - Posição da válvula borboleta em função da tensão - – Fonte: Sistema EEC-V Flavio Xavier
A leitura dos dados vindas da ECU realizadas pelo ODBII funcionou conforme o
esperado, os dados são obtidos via comunicação serial pelo microcontrolador da placa
interface e são tratados e convertidos para visualização e envio. Conforme figura abaixo
podemos verificar um teste realizado, onde mostra o valor da velocidade de 65 Km/h, uma
rotação de 4163 RPM, 65°C a temperatura do liquido de arrefecimento, abertura da válvula
borboleta de 45%.
A leitura dos dados de posicionamento global feita pelo modem EVK2 e realizada
pelo microcontrolador do projeto não funcionou conforme o esperado, o PIC escolhido para o
projeto possui apenas uma porta serial via hardware, mas é possível emular portas seriais via
software, o problema encontrado pelo grupo foi na recepção dos dados via interrupção externa
através da porta serial emulada, os dados recebidos via hardware funcionam perfeitamente
55
enquanto os dados via software não são identificados de forma correta pelo microcontrolador,
tentamos executar essa leitura diretamente no programa excluindo a leitura via interrupção
externa, o problema encontrado nesta solução foi o travamento do programa, pois seu
ocorresse qualquer anomalia no programa ele ficaria travado. Uma solução proposta pelo
grupo foi a utilização de um microcontrolador com duas portas seriais via hardware, com isso
o programa se torna muito mais confiável. O envio dos dados via porta serial emulada do
microcontrolador para o modem funcionou corretamente e assim foi possível enviar os dados
via GSM.
4.3. Telemetria
Para envio dos dados via SMS temos que configurar o modem para modo texto
(AT+CMGF=1) e para enviarmos a mensagem precisamos digitar o código
(AT+CMGS=”+n°Celular”) assim será aberto um túnel de comunicação. Enviamos todas as
mensagens e finalizamos com o caractere 0x1A (CTRL+Z).
56
5. Conclusão
O principal objetivo deste projeto foi o desenvolvimento de uma interface que fizesse
a leitura dos valores dos sensores de um veículo utilizando o padrão de comunicação OBD II
e que esses valores lidos pudessem ser transmitidos sem a utilização de fios através de algum
formato de transmissão que também tivesse um formato padrão e que fosse largamente
utilizado, por isso a escolha da transmissão via GSM. Podemos concluir que obtivemos êxito,
pois foi possível coletar, tratar, exibir e enviar estes dados de forma fácil e coerente.
No entanto, uma das maiores dificuldades enfrentadas no nosso projeto foi a de efetuar
uma comunicação segura e estável utilizando a comunicação RS 232, um protocolo antigo e
que é facilmente corrompível sob a influência de alguma interferência eletromagnética
externa. Também enfrentamos dificuldades na transmissão de dados utilizando transmissão
via GPRS, devido ao baixo conhecimento na aplicação desta tecnologia não foi possível
exibir as informações enviadas de uma maneira global e por isso optamos pela transmissão
via SMS, onde também obtivemos sucesso.
Uma das dificuldades encontradas, por falta de conhecimento técnico foi a criação de
um site para exibir os dados tratados, portanto temos como proposta futura a exibição destes
dados via um servidor remoto apresentando o conteúdo em uma webpage onde será possível a
visualização em um site podendo ser exibido em qualquer dispositivo com um navegador
web.
Outra proposta para um trabalho futuro é a simulação dos demais sensores presentes
na EEC – V, tais como o sensor MAF, rotação e o sensor de oxigênio.
57
6. Referências
59
7. Apêndice
60
APÊNDICE B – Esquema elétrico Placa Rotação
61
APÊNDICE C – Esquema elétrico placa do sensor de velocidade
62
APÊNDICE D – Código do programa
#include <18F4620.h>
#fuses HS,NOWDT
#use delay(clock=20000000)
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=OBD2,bits=8)
#use rs232(baud=9600,parity=N,xmit=PIN_B1,rcv=PIN_B0,stream=EVK2,bits=8)
#define RX_BUFFER_SIZE 30
char Rx_Buffer[RX_BUFFER_SIZE+1];
char RX_Wr_Index = 0;
char RX_Rd_Index = 0;
char RX_Counter = 0;
63
#define RX_BUFFER_SIZE_EVK2 50
char Rx_Buffer_EVK2[RX_BUFFER_SIZE_EVK2+1];
char RX_Wr_Index_EVK2 = 0;
char RX_Counter_EVK2 = 0;
#int_rda
void serial_rx_isr()
{
Rx_Buffer[RX_Wr_Index] = fgetc(OBD2);
if(++RX_Wr_Index > RX_BUFFER_SIZE) RX_Wr_Index = 0;
64
if(++RX_Counter > RX_BUFFER_SIZE)
{
RX_Counter = RX_BUFFER_SIZE;
}
}
#int_ext
void serial_rx_ext()
{
Rx_Buffer_EVK2[RX_Wr_Index_EVK2] = fgetc(EVK2);
if(++RX_Wr_Index_EVK2 > RX_BUFFER_SIZE_EVK2) RX_Wr_Index_EVK2 = 0;
if(++RX_Counter_EVK2 > RX_BUFFER_SIZE_EVK2)
{
RX_Counter = RX_BUFFER_SIZE;
}
}
void zera_Rx_Buffer()
{
for(RX_Wr_Index=0;RX_Wr_Index <= RX_BUFFER_SIZE;RX_Wr_Index++)
{
Rx_Buffer[RX_Wr_Index]=0;
}
}
void zera_Rx_Buffer_EVK2()
{
for(RX_Wr_Index2=0;RX_Wr_Index2 <= RX_BUFFER_SIZE2;RX_Wr_Index2++)
{
Rx_Buffer2[RX_Wr_Index2]=0;
}
}
65
{
switch (c)
{
case '0': c=0; return c; break;
case '1': c=1; return c; break;
case '2': c=2; return c; break;
case '3': c=3; return c; break;
case '4': c=4; return c; break;
case '5': c=5; return c; break;
case '6': c=6; return c; break;
case '7': c=7; return c; break;
case '8': c=8; return c; break;
case '9': c=9; return c; break;
case 'A': c=10; return c; break;
case 'B': c=11; return c; break;
case 'C': c=12; return c; break;
case 'D': c=13; return c; break;
case 'E': c=14; return c; break;
case 'F': c=15; return c; break;
}
}
66
}
}
67
case 29: d='0'; e='5'; f='8'; return d,e,f;
case 30: d='0'; e='6'; f='0'; return d,e,f;
case 31: d='0'; e='6'; f='2'; return d,e,f;
case 32: d='0'; e='6'; f='4'; return d,e,f;
case 33: d='0'; e='6'; f='6'; return d,e,f;
case 34: d='0'; e='6'; f='8'; return d,e,f;
case 35: d='0'; e='7'; f='0'; return d,e,f;
case 36: d='0'; e='7'; f='2'; return d,e,f;
case 37: d='0'; e='7'; f='4'; return d,e,f;
case 38: d='0'; e='7'; f='6'; return d,e,f;
case 39: d='0'; e='7'; f='8'; return d,e,f;
case 40: d='0'; e='8'; f='0'; return d,e,f;
case 41: d='0'; e='8'; f='2'; return d,e,f;
case 42: d='0'; e='8'; f='4'; return d,e,f;
case 43: d='0'; e='8'; f='6'; return d,e,f;
case 44: d='0'; e='8'; f='8'; return d,e,f;
case 45: d='0'; e='9'; f='0'; return d,e,f;
case 46: d='0'; e='9'; f='2'; return d,e,f;
case 47: d='0'; e='9'; f='4'; return d,e,f;
case 48: d='0'; e='9'; f='6'; return d,e,f;
case 49: d='0'; e='9'; f='8'; return d,e,f;
case 50: d='1'; e='0'; f='0'; return d,e,f;
case 51: d='1'; e='0'; f='0'; return d,e,f;
}
}
void calcula_velocidade()
{
velocidade_nova[0]=String_to_number(rx_buffer[RX_Wr_Index+8]);
velocidade_nova[1]=String_to_number(rx_buffer[RX_Wr_Index+9]);
velocidade_total=((velocidade_nova[0]*16)+(velocidade_nova[1]));
velocidade_imprime0=velocidade_total%10;
velocidade_total=velocidade_total/10;
velocidade_imprime1=velocidade_total%10;
velocidade_total=velocidade_total/10;
velocidade_imprime[0]=number_to_string(velocidade_imprime0);
68
velocidade_imprime[1]=number_to_string(velocidade_imprime1);
velocidade_imprime[2]=number_to_string(velocidade_total);
}
void recebe_velocidade()
{
zera_Rx_Buffer();
RX_Wr_Index=0;
bputc(0x30);//"0"
bputc(0x31);//"1"
bputc(0x30);//"0"
bputc(0x44);//"D"
bputc(0x0D);//ENTER
bputc(0x0A);
delay_ms(1000);
for(RX_Wr_Index=0;RX_Wr_Index <= RX_BUFFER_SIZE;RX_Wr_Index++)
{
if((Rx_Buffer[RX_Wr_Index]=='4') & (Rx_Buffer[RX_Wr_Index+6]=='1'))
{
calcula_velocidade();
LED_ERRO_VELOCIDADE_OFF;
return;
}
}
LED_ERRO_VELOCIDADE_ON;
}
69
fputc(0x41,EVK2);
fputc(0x44,EVK2);
fputc(0x45,EVK2);
fputc(0x3D,EVK2);
ESPACOe fputc(0x20,EVK2);
fputc(velocidade_imprime[2],EVK2);
fputc(velocidade_imprime[1],EVK2);
fputc(velocidade_imprime[0],EVK2);
fputc(0x20,EVK2);
fputc(0x4B,EVK2);
fputc(0x4D,EVK2);
fputc(0x2F,EVK2);
fputc(0x48,EVK2);
fputc(0x0D,EVK2);
fputc(0x0A,EVK2);
}
void calcula_rotacao()//rotacao[8] - 41 0C 00
{
rotacao_nova[0]=String_to_number(rx_buffer[RX_Wr_Index+8]);
rotacao_nova[1]=String_to_number(rx_buffer[RX_Wr_Index+9]);
rotacao_nova[2]=String_to_number(rx_buffer[RX_Wr_Index+11]);
rotacao_nova[3]=String_to_number(rx_buffer[RX_Wr_Index+12]);
rotacao_total=((rotacao_nova[0]*4096)+(rotacao_nova[1]*256)+(rotacao_nova[2]*16)+
(rotacao_nova[3]))/4;
rotacao_imprime0=rotacao_total%10;
rotacao_total=rotacao_total/10;
rotacao_imprime1=rotacao_total%10;
rotacao_total=rotacao_total/10;
rotacao_imprime2=rotacao_total%10;
rotacao_total=rotacao_total/10;
rotacao_imprime[0]=number_to_string(rotacao_imprime0);
rotacao_imprime[1]=number_to_string(rotacao_imprime1);
rotacao_imprime[2]=number_to_string(rotacao_imprime2);
rotacao_imprime[3]=number_to_string(rotacao_total);
}
70
void recebe_rotacao()
{
zera_Rx_Buffer();
RX_Wr_Index=0;
bputc(0x30);//"0"
bputc(0x31);//"1"
bputc(0x30);//"0"
bputc(0x43);//"C"
bputc(0x0D);//ENTER
delay_ms(1000);
for(RX_Wr_Index=0;RX_Wr_Index <= RX_BUFFER_SIZE;RX_Wr_Index++)
{
if((Rx_Buffer[RX_Wr_Index]=='4') & (Rx_Buffer[RX_Wr_Index+6]=='1'))
{
calcula_rotacao();
LED_ERRO_ROTACAO_OFF;
return;
}
LED_ERRO_ROTACAO_ON;
}
}
71
fputc(rotacao_imprime[1],EVK2);
fputc(rotacao_imprime[0],EVK2);
fputc(0x20,EVK2);
fputc(0x52,EVK2);
fputc(0x50,EVK2);
fputc(0x4D,EVK2);
fputc(0x20,EVK2);
fputc(0x0D,EVK2);
fputc(0x0A,EVK2);
}
void calcula_temperatura()
{
temperatura_nova[0]=String_to_number(rx_buffer[RX_Wr_Index+8]);
temperatura_nova[1]=String_to_number(rx_buffer[RX_Wr_Index+9]);
temperatura_total=((temperatura_nova[0]*16)+(temperatura_nova[1]))-40;
temperatura_imprime0=temperatura_total%10;
temperatura_total=temperatura_total/10;
temperatura_imprime1=temperatura_total%10;
temperatura_total=temperatura_total/10;
temperatura_imprime[0]=number_to_string(temperatura_imprime0);
temperatura_imprime[1]=number_to_string(temperatura_imprime1);
temperatura_imprime[2]=number_to_string(temperatura_total);
}
void recebe_temperatura()
{
zera_Rx_Buffer();
RX_Wr_Index=0;
bputc(0x30);//"0"
bputc(0x31);//"1"
bputc(0x30);//"0"
bputc(0x35);//"5"
bputc(0x0D);//ENTER
delay_ms(1000);
for(RX_Wr_Index=0;RX_Wr_Index <= RX_BUFFER_SIZE;RX_Wr_Index++)
72
{
if((Rx_Buffer[RX_Wr_Index]=='5') & (Rx_Buffer[RX_Wr_Index+6]=='5'))
{
calcula_temperatura();
LED_ERRO_TEMPERATURA_OFF;
return;
}
LED_ERRO_TEMPERATURA_ON; // caso tenha falha acende led de erro
}
}
void calcula_borboleta()
73
{
borboleta_nova[0]=String_to_number(rx_buffer[RX_Wr_Index+6]);
borboleta_nova[1]=String_to_number(rx_buffer[RX_Wr_Index+7]);
borboleta_total=(borboleta_nova[0]*16)+(borboleta_nova[1]);
borboleta_total=borboleta_total/5;
imprimi_porcento(borboleta_total);
borboleta_imprime[0]=d;
borboleta_imprime[1]=e;
borboleta_imprime[2]=f;
}
void recebe_borboleta()
{
zera_Rx_Buffer();
RX_Wr_Index=0;
bputc(0x30);//"0"
bputc(0x31);//"1"
bputc(0x31);//"1"
bputc(0x31);//"1"
bputc(0x0D);//ENTER
delay_ms(1000);
for(RX_Wr_Index=0;RX_Wr_Index <= RX_BUFFER_SIZE;RX_Wr_Index++)
{
if((Rx_Buffer[RX_Wr_Index]=='4') & (Rx_Buffer[RX_Wr_Index+1]=='1'))
{
calcula_borboleta();
LED_ERRO_BORBOLETA_OFF;
return;
}
LED_ERRO_BORBOLETA_ON;
}
}
74
fputc(0x4F,EVK2);
fputc(0x52,EVK2);
fputc(0x42,EVK2);
fputc(0x4F,EVK2);
fputc(0x4C,EVK2);
fputc(0x45,EVK2);
fputc(0x54,EVK2);
fputc(0x41,EVK2);
fputc(0x3D,EVK2);
fputc(0x20,EVK2);
fputc(borboleta_imprime[0],EVK2);
fputc(borboleta_imprime[1],EVK2);
fputc(borboleta_imprime[2],EVK2);
fputc(0x20,EVK2);
fputc(0x25,EVK2);
fputc(0x0D,EVK2);
fputc(0x0A,EVK2);
}
void recebe_gps()
{
zera_Rx_Buffer_EVK2();
RX_Wr_Index_EVK2=0;
fputc(0x41,EVK2);//A
fputc(0x54,EVK2);//T
fputc(0x24,EVK2);//$
fputc(0x47,EVK2);//G
fputc(0x50,EVK2);//P
fputc(0x53,EVK2);//S
fputc(0x41,EVK2);//A
fputc(0x43,EVK2);//C
fputc(0x50,EVK2);//P
delay_ms(1000);
for(RX_Wr_Index_EVK2=0;RX_Wr_Index_EVK2<=
RX_BUFFER_SIZE_EVK2;RX_Wr_Index++_EVK2)
{
75
if(Rx_Buffer_EVK2[RX_Wr_Index_EVK2]==':')
{
LED_ERRO_GPS_OFF;
return;
}
LED_ERRO_GPS_ON;
}
}
void mostra_horario( )
{
fputc(0x48,EVK2);//H
fputc(0x4F,EVK2);//O
fputc(0x52,EVK2);//R
fputc(0x41,EVK2);//A
fputc(0x3D,EVK2);//=
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//HORA
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//HORA
fputc(0x3A,EVK2);//:
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//MINUTO
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//MINUTO
fputc(0x3A,EVK2);//:
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//SEGUNDO
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+1],EVK2);//SEGUNDO
}
void mostra_latitude()
{
fputc(0x4C,EVK2);//L
fputc(0x41,EVK2);//A
fputc(0x54,EVK2);//T
fputc(0x49,EVK2);//I
fputc(0x54,EVK2);//T
fputc(0x55,EVK2);//U
76
fputc(0x44,EVK2);//D
fputc(0x45,EVK2);//E
fputc(0x3D,EVK2);//=
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+12],EVK2);//GRAUS
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+13],EVK2);//GRAUS
fputc(0xF8,EVK2);//°
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+14],EVK2);//MINUTOS
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+15],EVK2);//MINUTOS
fputc(0x6E,EVK2);//m
}
void mostra_lONGITUDE()
{
fputc(0x4C,EVK2);//L
fputc(0x4F,EVK2);//O
fputc(0x4E,EVK2);//N
fputc(0x47,EVK2);//G
fputc(0x49,EVK2);//I
fputc(0x54,EVK2);//T
fputc(0x55,EVK2);//U
fputc(0x44,EVK2);//D
fputc(0x45,EVK2);//E
fputc(0x3D,EVK2);//=
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+24],EVK2);//GRAUS
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+25],EVK2);//GRAUS
fputc(0xF8,EVK2);//°
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+26],EVK2);//MINUTOS
fputc(Rx_Buffer_EVK2[RX_Wr_Index_EVK2+27],EVK2);//MINUTOS
fputc(0x6E,EVK2);//m
}
void inicia_OBD2()
{
bputc(0x41);//A
bputc(0x54);//T
77
bputc(0x5A);//Z
bputc(0x0D);//ENTER
delay_ms(1000);
bputc(0x41);//A
bputc(0x54);//T
bputc(0x53);//S
bputc(0x50);//P
bputc(0x30);//0
bputc(0x0D);//ENTER
delay_ms(5000);
bputc(0x30);
bputc(0x31);
bputc(0x30);
bputc(0x30);
bputc(0x0D);
delay_ms(1000);
bputc(0x30);
bputc(0x31);
bputc(0x30);
bputc(0x30);
bputc(0x0D);
delay_ms(1000);
}
VOID inicia_EVK2()
{
zera_Rx_Buffer();
fputc(0x41,EVK2); // "A"
fputc(0x54,EVK2); // "T"
fputc(0x2B,EVK2); // "+"
fputc(0x43,EVK2); // "C"
fputc(0x4D,EVK2); // "M"
fputc(0x47,EVK2); // "G"
fputc(0x46,EVK2); // "F"
fputc(0x3D,EVK2); // "="
fputc(0x31,EVK2); // "1"
78
fputc(0x0A,EVK2); // "\n"
fputc(0x0D,EVK2); // "\R"
delay_ms(500);
}
79
{
if(Rx_Buffer2[RX_Wr_Index2]!=0)
{
LED_ERRO_SMS_OFF;
return;
}
}
LED_ERRO_SMS_ON;
}
void main(void)
{
set_tris_a(0x00); // DEFINIÇAO DAS PORTAS A
set_tris_b(0b00001000); // DEFINIÇAO DAS PORTAS B
set_tris_c(0x00); // DEFINIÇAO DAS PORTAS C
set_tris_d(0x00); // DEFINIÇAO DAS PORTAS D
set_tris_e(0b00); // DEFINIÇAO DAS PORTAS E
LED1OFF;
LED2OFF;
LED_ERRO_VELOCIDADE_OFF;
LED_ERRO_ROTACAO_OFF ;
LED_ERRO_TEMPERATURA_OFF ;
LED_ERRO_BORBOLETA_OFF ;
LED_ERRO_SMS_OFF;
LED_ERRO_GPS_OFF;
LED_ERRO_E0_OFF ;
LED_ERRO_E1_OFF;
enable_interrupts(global);
enable_interrupts(int_rda);
enable_interrupts(int_ext);
inicia_OBD2();
inicia_EVK2();
while(1)
{
80
LED1ON;
LED2ON;
delay_ms(1000);
LED1OFF;
LED2OFF;
delay_ms(1000);
recebe_velocidade();
recebe_rotacao();
recebe_temperatura();
recebe_borboleta();
recebe_gps();
delay_ms(1000);
envia_SMS();
delay_ms(1000);
mostra_velocidade();
mostra_rotacao();
mostra_temperatura();
mostra_borboleta();
mostra_horario();
mostra_latitude();
mostra_longitude();
81
8. Anexos
82
ANEXO B – COMANDO AT – ELM327
83
84
85
86