Você está na página 1de 58

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DA COMPUTAÇÃO E AUTOMAÇÃO

DESENVOLVIMENTO DE UM SISTEMA
DE TELEMETRIA REMOTA

Victor Hugo Freitas de Oliveira

Orientador: Prof. Dr. Andrés Ortiz Salazar

Natal, Junho de 2009


UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA DA COMPUTAÇÃO E AUTOMAÇÃO

DESENVOLVIMENTO DE UM SISTEMA
DE TELEMETRIA REMOTA

Trabalho de Conclusão de Curso,


submetido ao Departamento de
Engenharia de Computação e
Automação do Centro de Tecnologia
da Universidade Federal do Rio
Grande do Norte, como parte dos
requisitos necessários para obtenção
do grau de Graduado.

Autor: Victor Hugo Freitas de Oliveira


Orientador: Prof. Dr. Andrés Ortiz Salazar

Natal, Junho de 2009


Agradecimentos

Aos meus pais, por terem me dado oportunidade de uma boa educação.
Aos meus amigos, por me apoiarem ao longo dessa jornada.
Ao prof. Andrés Ortiz Salazar, pela ajuda ao longo de todo o curso, sendo um grande
responsável pela minha formação acadêmica e profissional.
Ao prof. André Laurindo Maitelli e a toda equipe do Laboratório de Automação em
Petróleo – LAUT, pela oportunidade de trabalho em um ambiente de muito
profissionalismo, mas ao mesmo tempo de companheirismo, resultando em uma
aprendizagem contínua.
Aos demais professores do Departamento de Engenharia de Computação e Automação,
pela dedicação ao nosso aprendizado.
Resumo
Este trabalho aborda o desenvolvimento de um sistema de telemetria remota. Ele
é capaz de se comunicar, através do protocolo de redes industriais Modbus, com um
dispositivo que realiza medições quaisquer. Essa comunicação é realizada para a
obtenção dos dados de um determinado instante. O sistema é capaz de armazenar
temporariamente esses dados e enviá-los para um servidor, através de uma conexão à
Internet.
O servidor recebe essas informações e as armazena em um banco de dados.
Então, permite que softwares clientes realizem a visualização desses dados, de acordo
com sua própria interface.
Sumário
1. Introdução................................................................................................................. 8
2. Fundamentação teórica ........................................................................................... 10
2.1. Microcontrolador PIC..................................................................................... 10
2.1.1. Arquitetura.................................................................................................... 10
2.1.2. Hardwares incorporados ............................................................................... 13
2.1.3. Interrupções .................................................................................................. 14
2.2. Rede GSM ...................................................................................................... 15
2.2.1. Estação Móvel (MS)..................................................................................... 16
2.2.2. Sistema de estação base (BSS) ..................................................................... 17
2.2.3. Sistema de comutação de rede (NSS)........................................................... 18
2.3. Tecnologia GPRS ........................................................................................... 20
2.3.1. Arquitetura GPRS................................................................................... 21
2.3.2. Protocolos da rede GPRS ....................................................................... 24
2.3.3. Tarifação................................................................................................. 25
3. Softwares e hardwares utilizados ........................................................................... 26
3.1. PIC18F2525.................................................................................................... 26
3.2. Modem GSM .................................................................................................. 28
3.3. Compilador CCS ............................................................................................ 30
3.4. Gravador PicBurner........................................................................................ 31
3.5. Relógio de Tempo Real - DS1307.................................................................. 32
3.6. Biblioteca LibModbus .................................................................................... 33
3.7. PostgreSQL..................................................................................................... 34
3.7.1. libpq ........................................................................................................ 35
4. Desenvolvimento .................................................................................................... 36
4.1. Descrição do projeto....................................................................................... 36
4.2. Módulo Embarcado ........................................................................................ 38
4.2.1. Algoritmo do microcontrolador PIC18F2525 ........................................ 41
4.3. Módulo Servidor............................................................................................. 49
4.3.1. Cliente exemplo............................................................................................ 53
5. Conclusão ............................................................................................................... 55
6. Referências ............................................................................................................. 57
Lista de figuras
Figura 2.1 – Arquitetura da rede GSM ........................................................................... 16
Figura 2.2 – Formato do IMEI ....................................................................................... 19
Figura 2.3 – Evolução do sistema de telefonia móvel celular ........................................ 21
Figura 2.4 – Arquitetura GPRS ...................................................................................... 22
Figura 2.5 – Camadas de protocolo da rede GSM.......................................................... 24
Figura 3.1 – Gravador PicBurner USB........................................................................... 31
Figura 3.2 – Diagrama de blocos do DS1307................................................................. 32
Figura 4.1 – Esquema do circuito eletrônico.................................................................. 38
Figura 4.2 – Foto do Módulo Embarcado....................................................................... 39
Figura 4.3 – Ligação entre DS1307 e o PIC18F2525 .................................................... 40
Figura 4.4 – Fluxograma da função main() .................................................................... 42
Figura 4.5 – Fluxograma da interrupção da USART...................................................... 44
Figura 4.6 – Fluxograma da função “trata_rtc()” ........................................................... 45
Figura 4.7 – Fluxograma da função “processamento()”................................................. 46
Figura 4.8 – Fluxograma da função “captura_dados()” ................................................. 47
Figura 4.9 – Fluxograma da função “conecta()” ............................................................ 47
Figura 4.10 – Fluxograma da função “envia()”.............................................................. 48
Figura 4.11 – Fluxograma da função “envia_dado()” .................................................... 49
Figura 4.12 – Fluxograma da thread main()................................................................... 51
Figura 4.13 – Fluxograma da thread servidor() ............................................................. 52
Figura 4.14 – Fluxograma da thread cliente()................................................................ 52
Figura 4.15 – Tela de login do software cliente-exemplo .............................................. 53
Figura 4.16 – Tela principal do software cliente-exemplo............................................. 54
Figura 4.17 – Tela da ação “Ver Dados da UTR” .......................................................... 54
Lista de tabelas
Tabela 2.1 – Modificações da rede GSM para se adequar à tecnologia GPRS.............. 21
Tabela 3.1 – Especificações técnicas do PIC18F2525 ................................................... 27
Tabela 3.2 – Principais comandos/respostas AT utilizados no projeto .......................... 28
Tabela 3.3 – Parâmetros de especificação do cristal ...................................................... 33
1. Introdução
Hoje em dia, o mercado mundial encontra-se bastante acirrado, com elevados
níveis de concorrência e diversas empresas buscando apenas um pequeno detalhe que a
diferencie das demais, a fim de obter maior êxito (lucro) que suas concorrentes. Pode-se
dizer que as principais buscas das empresas se resumem em três categorias: redução de
custos, maior confiabilidade de seus produtos e uma maior segurança (para seus clientes
e funcionários).
Com o avanço da tecnologia, uma das formas para acentuar essas características
é o emprego da automação. Para o trabalho em questão, é muito importante o avanço
significativo das tecnologias de transmissão sem fio, mais especificamente o avanço dos
sistemas de telefonia móvel, e a expansão da Internet, na qual ela é a protagonista de
uma convergência tecnológica, aonde os mais diversos dispositivos eletrônicos possuem
a capacidade de estabelecer comunicação com a mesma.
É neste cenário tecnológico que este trabalho apresenta um sistema de telemetria
remota, capaz de automatizar processos que necessitem enviar informações de
monitoração de um dispositivo, no qual o mesmo não se encontra conectado a nenhuma
rede local. O foco principal do trabalho são os sistemas de medição de água/luz e a
monitoração de tubulações de gás, seja para fins fiscais ou não.
O sistema proposto neste trabalho é composto por dois principais módulos:
Módulo Embarcado e o Módulo Servidor. O Módulo Embarcado tem como função
capturar as informações do dispositivo, armazená-las temporariamente e enviá-las ao
Módulo Servidor. Este último deve ser capaz de receber essas informações e armazená-
las em um banco de dados. Além disso, deve permitir que programas clientes se
conectem ao Módulo Servidor e visualizem as informações contidas no banco de dados,
de forma intuitiva e adaptável.
O capítulo 2 deste trabalho apresenta os principais conceitos teóricos necessários
para o desenvolvimento do projeto exposto. Aborda as principais características dos
microcontroladores da família PIC, detalhando sua arquitetura, os principais hardwares
incorporados internamente em seus chips e as principais interrupções.
Ainda no capítulo 2, são descritas as características da rede GSM, explicando a
sua arquitetura e seus principais componentes, servindo como base para o estudo da
tecnologia GPRS, a qual é ferramenta indispensável no projeto proposto. Sobre o
GPRS, são mostradas as alterações ocorridas da rede GSM padrão, falando sobre cada

8
mudança e novos componentes, além dos principais protocolos existentes em uma rede
GPRS.
O capítulo 3 aborda os softwares e hardwares utilizados para o desenvolvimento
do projeto. Em cada tópico é mostrado apenas as principais características do
determinado produto, enfatizando as funcionalidades exploradas pelo projeto. Os itens
abordados são: PIC18F2525, Modem GSM, compilador CCS, gravador PicBurner,
DS1307, LibModbus e PostgreSQL.
O capítulo 4 apresenta o desenvolvimento do projeto, dando uma explicação
mais detalhada sobre o funcionamento geral do sistema. Depois, mostra como foram
desenvolvidos os Módulos integrantes e os algoritmos que o compõem.
O capítulo 5 apresenta as conclusões finais do projeto, além de indicar os
detalhes que faltam para tornar o projeto um produto comercial. Também são
apresentadas algumas melhorias que podem ser desenvolvidas para tornar o projeto
ainda mais atrativo.

9
2. Fundamentação teórica

2.1. Microcontrolador PIC


O PIC pertence a uma família de microcontroladores de arquitetura Harvard
produzido pela Microchip Technology, derivado do PIC1640, originalmente
desenvolvido pela General Instrument’s Microelectronics Division. O nome PIC
inicialmente se referia a “Peripheral Interface Controller” (Controlador de Interfaces
Periféricas) [13].
Essa família de microcontroladores é bastante popular entre profissionais da área
de eletrônica, assim como com hobbystas, devido a seu baixo custo; grande
disponibilidade no mercado nacional; extenso material para consulta, como livros
especializados, artigos em revistas especializadas, fóruns e sites dedicados na internet;
disponibilidade de ferramentas de desenvolvimento de baixo custo e até mesmo grátis; e
possibilidade de programação (e re-programação com a memória flash) pela porta serial
e, ultimamente, já são encontrados hardwares que realizam a programação do PIC pela
porta USB.

2.1.1. Arquitetura
A arquitetura do PIC é tipicamente minimalista. Suas principais características
são:
• Memória de dados independente da memória de programa (arquitetura Harvard);
• Um pequeno número de instruções de tamanhos fixos;
• A maioria das instruções são executadas em um único ciclo (4 períodos de
clock), com espera de um ciclo nas instruções de desvio;
• Um único acumulador (W);
• Toda a memória de dados funciona como registradores para fonte ou destino de
funções matemáticas e outros tipos;
• Uma pilha implementada em hardware para armazenas os endereços de retornos
(usados nas chamadas de funções);
• Memória de dados mapeia os registradores da CPU, das Portas de I/O e dos
periféricos;
Diferente da maioria das CPUs existentes, não há distinção entre memória e
registradores, pois a memória RAM realiza os serviços da memória e dos registradores.

10
Assim, a memória RAM é usualmente chamada como o registrador de arquivos ou
apenas os registradores.

Espaço de dados - RAM


Os PICs possuem um grupo de registradores que funcionam como memória de
uso geral. Registradores especiais para controlar os hardwares embutidos no
microcontrolador também são mapeados no espaço de dados. O endereçamento da
memória depende da série do dispositivo, mas todas as séries possuem mais de um
banco de memória, o que facilita o endereçamento de toda a memória.

Memória de programa
Todos os PICs possuem a arquitetura Harvard, então a memória de dados e a
memória de programa são separadas. A memória de programa geralmente são
implementadas em EPROM, ROM ou flash ROM. Em geral, os dispositivos de
memória externa não são endereçados diretamente devido a falta de uma interface
própria para este fim. A exceção são alguns microcontroladores da série 18F.

Tamanho da palavra
O tamanho da palavra dos PIC’s é uma fonte de muita confusão. Todos os PIC’s
(exceto os dsPIC’s) trabalham com dados de 8 bits (1 byte), então eles deveriam ser
chamados de microcontroladores de 8 bits. Mas ao contrário da maioria das CPU’s, os
PIC’s usam a arquitetura Harvard, então o tamanho da instrução pode ser diferente do
tamanho do dado. Na verdade, famílias diferentes de PIC’s usam instruções de
tamanhos diferentes, o que torna um desafio comparar o tamanho do código de um PIC
com outros microcontroladores. Por exemplo, digamos que um microcontrolador tenha
6144 bytes de memória de programa – para um PIC de 12 bits, isso resulta em 4096
palavras ou instruções; para um PIC de 16 bits, resulta em 3072 palavras.

Pilha
Os microcontroladores da Microchip Technology possuem um hardware
chamado pilha, o qual é usado para salvar endereços de retorno quando uma função é
chamada e no uso de desvios. Essa pilha não era acessada por software, até a criação da
série 18F, o que resultou em um dispositivo mais amigável para os compiladores de
linguagens de alto nível.

11
Conjunto de instruções
Os PIC’s usam um conjunto de instruções RISC, as quais variam de 35
instruções para os PIC’s das séries 12 e 16 até cerca de 80 instruções para os da série
18. O conjunto de instruções inclui instruções que realizam uma variedade de operações
entre o acumulador e uma constante ou entre o acumulador e um endereço de memória,
bem como possibilita a inclusão de códigos condicionais, simplesmente pulando o
código ou realizando chamadas de funções, sempre retornando após a execução.
Algumas operações, como ativação e teste de bits, podem ser realizadas em
qualquer registrador, mas operações aritméticas com dois operandos sempre envolvem o
acumulador W (por exemplo, a operação soma só pode ser realizada entre um
registrador e o acumulador). O mesmo ocorre na atribuição de uma constante a um
registrador. Para realizar uma cópia entre dois registradores, apenas a série 18 permite
que seja realizada diretamente, nas séries mais antigas é necessária a copia intermediária
para o acumulador W.
A arquitetura do PIC não possui suporte de hardware para realizar
automaticamente a cópia do estado do processador quando ocorre uma interrupção. A
série 18 aprimorou esta situação, implementando registradores sombra, o qual salva as
informações contidas nos principais registradores (especialmente os propósito
específico) quando ocorre uma interrupção.
Em geral, as instruções do PIC se enquadram em uma das categorias abaixo:
1. Operações com o acumulador W e uma constante. O resultado é sempre
armazenado no próprio acumulador;
2. Operações com o acumulador W e um registrador indexado. O resultado pode
ser salvo no acumulador ou no registrador informado;
3. Operações com bits. Elas recebem como parâmetro o número do registrador e o
número do bit que se deseja operar. As ações permitidas são: ativar, desativar e
testar se o bit está ativado ou não, após o teste é realizado (ou não) um desvio;
4. Transferência de controle. São as operações “call” (chamada de função) e
“goto”;
5. Algumas operações com nenhum operando, como “return”, que retorna de uma
função, e “sleep”, que coloca o microcontrolador em um estado de baixo
consumo.

12
2.1.2. Hardwares incorporados
Os microcontroladores da família PIC possuem em seu chip vários módulos de
hardware já incorporados. Os principais são:
• Osciladores internos (geradores de clock);
• Timers de 8/16/32 bits;
• Memória EEPROM interna;
• Interface serial síncrona e assíncrona (USART);
• Comunicação serial por MSSP, que pode funcionar com os protocolos: I²C e
SPI;
• Módulos Captura/Compara e PWM (CCP);
• Conversores analógico/digital;
• Suporte para a interface USB;
• Suporte para a interface Ethernet;
• Suporte para a interface CAN;
• Transmissores de rádio-frequência integrados (PIC16F639 e rfPIC)

USART – Universal Synchronous Asynchronous Receiver Transmitter


A USART, também conhecida como SCI (“Serial Communications Interface” –
Interface de comunicação serial), é um módulo responsável pela comunicação serial
entre periféricos (inclusive entre outro microcontrolador) [14]. Ela pode ser configurada
como um sistema assíncrono full-duplex, o qual pode se comunicar com dispositivos
como terminais CRT e computadores de forma geral. Também pode ser configurada
para operar como um sistema síncrono half-duplex, se comunicando com dispositivos
conversores Analógico/Digital ou Digital/Analógico, memórias EEPROM seriais e etc.
No modo half-duplex, a USART pode operar como mestre ou como escravo.

Protocolo I²C
Com o intuito de aumentar a eficiência do hardware e diminuir a complexidade
dos circuitos eletrônicos, a Philips desenvolveu, em meados de 1996, o protocolo de
comunicação serial I²C. Algumas de suas principais vantagens são [15]:
• Organização funcional em blocos, resultando em um simples diagrama
esquemático;

13
• Endereçamento e protocolo de transferência de dados totalmente definidos via
software;
• Inclusão e exclusão de dispositivos em um barramento sem afetar o seu
funcionamento;
• Bibliotecas disponíveis pela comunidade do protocolo facilitam o
desenvolvimento de aplicações utilizando o I²C;
O barramento I²C possui duas linhas de comunicação: a SDA (Serial Data),
responsável pela transmissão dos dados; e a SCL (Serial Clock), responsável pela
transmissão do sinal de clock. Ambas as linhas são bi-direcionais e são conectadas ao
positivo do circuito através de um resitor de pull-up. A taxa de transferência máxima do
barramento é de 100kbits/s no modo padrão, chegando até a 400kbits/s no modo rápido.
Todo dispositivo possui um endereço único no barramento e qualquer
dispositivo conectado pode operar como transmissor ou receptor. O número de
interfaces conectadas ao barramento depende apenas da capacitância máxima do
barramento, que é de 400pF.
Para a comunicação ser realizada com sucesso, é necessário que a linha SDA
permaneça estável durante todo o período em que o clock esteja no nível lógico “alto”.
Quando o clock estiver em nível lógico “baixo”, é permitido realizar mudanças na linha
SDA. O procedimento para a realização da comunicação entre dispositivos é detalhado
a seguir:
1. O dispositivo master ajusta a condição inicial;
2. O dispositivo master envia 7 bits de endereçamento, caso seja utilizado o modo
padrão. Para o modo estendido são usados 10 bits;
3. O dispositivo master envia o bit de RW ;
4. O dispositivo slave envia o sinal de reconhecimento (ACK);
5. Um dispositivo envia dados em forma de pacotes de 8 bits, que são respondidos
por um sinal de reconhecimento do dispositivo destinatário;
6. O dispositivo master encerra a comunicação.

2.1.3. Interrupções
Uma funcionalidade muito importante dos microcontroladores da família PIC é
a existências das interrupções. Elas permitem que seja executado um trecho específico
de código toda vez que uma determinada ação ocorrer ou que determinada condição seja
determinada. Após a execução do código informado, a CPU retorna a execução da

14
tarefa que ora realizava. Nas séries 12 e 16, não é realizada a cópia do conteúdo de
nenhum registrador (exceto o registrador PC – Program Counter, necessário para o
retorno da execução do programa executado) [14], portanto, ela deve ser realizada via
software. Na série 18 é realizada a cópia do acumulador W e do registrador de STATUS
[1], caso essa funcionalidade não seja desejada é possível desativá-la.
As principais interrupções e suas explicações são dadas a seguir:
• Interrupção externa  Ocorre na alteração do pino RB0, de acordo com a borda
de sensibilidade configurada, que pode ser na alteração de nível lógico “baixo”
para “alto” ou o contrário. Alguns PICs possuem mais de um pino para
interrupção externa, obedecendo a seqüência RB1 e RB2;
• Overflow dos timers  Ocorre quando um timer estoura a sua capacidade de
contagem. Por exemplo, o timer0 possui 8 bits, então quando ele alcançar o
valor de 255, no próximo incremento, ocorrerá um estouro de sua capacidade e a
interrupção irá ser disparada (caso a mesma esteja ativada);
• Alteração do PORTB  Ocorre após uma alteração em qualquer dos pinos RB7
a RB4;
• USART  De acordo com sua configuração, ocorre quando um dado for
recebido ou enviado pela porta serial;
• Conversão A/D finalizada  Ocorre sempre que uma conversão
Analógico/Digital é finalizada;
• Escrita na EEPROM finalizada  Ocorre no momento em que uma escrita na
memória de dados EEPROM é concluída;
• SSP  Ocorre após um recebimento ou envio de dados nas portas destinadas a
esse tipo de comunicação. Pode ser utilizada tanto no modo I²C como no modo
SPI.

2.2. Rede GSM


A rede GSM – Global System for Móbile communications teve como objetivo
criar um padrão de telefonia celular mais abrangente possível, portanto, ela utilizou de
interfaces abertas e padronizadas, permitindo a combinação de componentes de diversos
fabricantes, resultando em uma arquitetura flexível e bastante competitiva
comercialmente.

15
Sua arquitetura é dividida em quatro grupos, que formam a PLMN (Public Land
Móbile Network – rede móvel pública terrestre). A Figura 2.1 [16] apresenta a
interligação desses grupos, os quais são descritos a seguir:

Figura 2.1 – Arquitetura da rede GSM

• Estação móvel (MS – Mobile Station)  É responsável pela conexão do


assinante à rede GSM. É considerado um MS qualquer dispositivo de
comunicação de dados, voz e imagem.
• Sistema de estação base (BSS – Base Station System)  É responsável pelas
conexões de radiofreqüência da MS para o sistema de comutação;
• Sistema de comutação de rede (NSS – Network Switching System)  Realiza o
processamento das informações através de interfaces e protocolos e o
gerenciamento do banco de dados. Assim, é possível conectar a rede GSM à
rede pública (RTPC – Rede Telefônica Pública Comutada);
• Sistema de operação e manutenção (OMS – Operations and Maintenance
System)  Realiza a administração, operação e manutenção dos grupos
componentes.

2.2.1. Estação Móvel (MS)


A estação móvel é constituída pelo equipamento móvel (ME – Mobile
Equipment) e pelo módulo de identidade do assinante (SIM – Subscriber Identity
Module). O equipamento móvel é responsável pela interligação entre o assinante e à
rede GSM. Ele possui uma identificação chamada “identidade internacional do

16
equipamento móvel” (IMEI – International Móbile Equipment Identity). Os números
IMEIs são armazenados no registro de identidade de equipamento, abordado nas
próximas seções.
O processamento e a tarifação das chamadas são realizados a partir das
informações contidas no cartão SIM e não no MS. Portanto, para obter uma linha
habilitada em um MS, é necessário adquirir um cartão SIM com uma operadora de
telefonia celular, o qual poderá ser usado em qualquer região que possua um terminal
GSM compatível com o sistema da operadora.

2.2.2. Sistema de estação base (BSS)


O sistema de estação base (BSS – Base Station System) é responsável pela
conexão entre a MS e a central de comutação celular (MSC – Mobile Services Centre).
Ele é constituído por três elementos, são eles:
• Estação transceptora base (BTS – Base Transceiver Station);
• Controlador de estação base (BSC – Base Station Controller);
• Transcodificador (XCDR – Transcoder).

Estação transceptora base (BTS)


A BTS provê as conexões na interface aérea com a MS. Ela é basicamente
composta por um hardware de radiofreqüência e de antenas. A BTS sempre está
interligada a BSC, e ambos realizam as funções de gerência dos canais de tráfego e
controle na interface aérea.

Controlador de estação base (BSC)


O BSC é responsável por controlar um grupo de BTSs. Todas as operações de
uma BTS são comandadas pelo seu respectivo BSC. Através de uma matriz de
comutação digital, as BSCs conectam os canais de RF com os circuitos terrestres
provenientes da central de comutação celular. Com essa técnica, o BSC é capaz de
realizar handovers entre os canais de RF independente da MSC, o que otimiza o tráfego
na interface aérea e reduz o trabalho da MSC.

Transcodificador (XCDR)

17
O transcodificador é o elemento encarregado de converter os sinais de voz
provenientes da MSC no padrão especificado pelas normas GSM, utilizado na
transmissão sobre a interface aérea.

2.2.3. Sistema de comutação de rede (NSS)


O sistema de comutação de rede (NSS – Network Switching System) é
responsável pelas funções de comutação, controle e gerenciamento da mobilidade e da
base de dados dos assinantes em uma rede GSM. Seus principais componentes são:
• Central de comutação móvel (MSC – Mobile services Switching Centre);
• Registro de localização local (HLR – Home Location Register);
• Registro de localização de visitante (VLR – Visitor Location Register);
• Centro de autenticação (AuC – Authentication Centre);
• Registro de identidade de equipamento (EIR – Equipment Identity Register);
• Função de interfuncionamento (IWF – InterWorking Function);
• Supressor de eco (EC – Echo Canceler).

Central de comutação móvel (MSC)


A MSC é o “coração” do sistema de comutação de rede. Ela é a encarregada de
conectar e desconectar chamadas, promover handover entre BSSs e MSCs;
supervisionar, manter e operar as bases de dados; gerenciar as interfaces entre a rede
GSM e outras redes, como a RTCP e a Rede Digital de Serviços Integrados (RDSI); e
tarifar os serviços.
Para realizar todas essas funções, a MSC precisa estar conectada aos bancos de
dados que possuem essas informações. Dois componentes possuem grande parte dessas
informações: o HLR e o VLR.

Registro de localização local (HLR)


O HLR administra, altera e atualiza a base de dados dos assinantes locais. Esses
dados são acessados remotamente pelo MSC e pelo VLR. Os principais dados
armazenados pelo HLR são:
• Identidade internacional do assinante (IMSI – International Móbile Subscriber
Identity);
• Localização corrente do assinante no VLR;

18
• Serviços suplementares associados ao assinante;
• Estado do assinante;
• Chave de autenticação.

Registro de localização de visitante (VLR)


Pode acontecer de um assinante passar para outra PLMN que não a sua de
origem, o que é óbvio em se tratando de sistemas de comunicação móveis. Para se
realizar a comunicação com esse usuário visitante, existe o VLR. Ele guarda uma cópia
dos principais dados do assinante, contidos no seu HLR de origem. Essas informações
são:
• Estado da estação móvel (livre/ocupado/não responde);
• Identidade de área de localização (LAI – Location Área Identity);
• Identidade temporária do assinante móvel (TMSI – Temporary Mobile
Subscriber Identity);
• Número da estação móvel visitante (MSRN – Mobile Station Roaming Number).

Centro de autenticação (AuC)


Normalmente instalado no mesmo hardware do HLR, o AuC tem as funções de
autenticar e criptografar as mensagens, impedindo ataques à rede, principalmente a
clonagem de MS. Esses processos são executados simultaneamente no AuC e na MS.

Registro de identidade do equipamento (EIR)


O registro de identidade de equipamento contém a base de dados centralizada
dos números de identidade internacional do equipamento móvel (IMEI). A Figura 2.2
apresenta o formato do IMEI e a seguir são dadas explicações sobre cada campo.

Figura 2.2 – Formato do IMEI

• Type Approval Code (TAC)  6 dígitos que representam o código de aprovação


do ME;

19
• Final Assembly Code (FAC)  2 dígitos que identificam o local de manufatura
ou montagem final do ME;
• Serial Number (SNR)  6 dígitos que identificam o número de série para cada
TAC e FAC de uma ME;
• Software Version Number (SVN)  2 dígitos decimais que identificam o
número da versão de software instalado no ME

Função de interfuncionamento (IWF)


O IWF é responsável por realizar o interfaceamento entre a rede GSM com
outras redes de dados, como a internet, por exemplo. É sua função adaptar a taxa de
dados e converter os protocolos quando necessário. Essas atividades são realizadas por
um conjunto de MODEMs.

Supressor de eco (EC)


O supressor de eco é responsável por eliminar o efeito de eco presente nas
conexões entre a MSC e a RTPC. Esse efeito pode ocorrer por diversos fatores, alguns
dos principais são: atraso de propagação na interface aérea; atraso de propagação devido
ao processo de transcodificação; e geração de eco na bobina híbrida.

2.3. Tecnologia GPRS


Com a evolução da comunicação sem fio e a tendência de convergência das
tecnologias, com a crescente expansão da internet, criou-se uma necessidade da
utilização de novos serviços pelos usuários dos telefones móveis celulares. Os
principais serviços demandados pela sociedade moderna podem ser classificados nos
seguintes grupos:
• Comunicação  Acesso a internet, e-mail e fax;
• Serviços de entretenimento  Jogos em modo multi-jogador, aonde é necessária
a utilização de uma rede de dados;
• Comércio eletrônico  venda de ingressos, acesso a bancas, compras pela
celular (acessando a web), informações sobre promoções, recebimento de
passagens aéreas e etc.
Com base nessa tendência, o sistema de telefonia móvel celular sofreu várias
evoluções. Atualmente se encontra implantada os sistemas de 3ª geração, e já ocorrem

20
estudos para uma nova expansão, resultando em uma 4ª geração. A Figura 2.3 apresenta
essa evolução.

Figura 2.3 – Evolução do sistema de telefonia móvel celular

Nessa seção será abordada a tecnologia GPRS (sistema 2,5G), por ainda possuir
uma abrangência maior que as novas tecnologias, mas ao mesmo tempo ser compatível
com possíveis atualizações (a 3G adotada pelas operadoras no Brasil é totalmente
compatível com a tecnologia GPRS).

2.3.1. Arquitetura GPRS


A arquitetura GPRS utiliza a mesma infra-estrutura básica utilizadas nas redes
GSM comuns, realizando a inclusão de novos elementos de rede e interfaces e
modificando alguns componentes já existentes. Essas alterações tornam possível a
transmissão de dados a uma taxa de 9,6 a 171 kbits/s (valor teórico). A Figura 2.4
apresenta a arquitetura com suas modificações.
As principais modificações são indicadas na Tabela 2.1.
Tabela 2.1 – Modificações da rede GSM para se adequar à tecnologia GPRS
Elemento de rede Modificação ou atualização da arquitetura GSM
Estação móvel (MS) É necessário uma nova MS, que permanece compatível com
todos os serviços existentes anteriormente.
Estação transceptora Necessário uma atualização de software nas BTSs existentes.

21
base (BTS)
Controlador de estação Atualização de software e instalação de hardware novo,
base (BSC) chamado unidade de controle de pacote – PCU (Packet
Control Unit), que direciona o tráfego de dados para a rede
GPRS.
SGSN e GGSN Novos elementos de rede, chamados servidor do nó de
suporte GPRS (SGSN - Serving GPRS Support Node) e
Gateway do nó de suporte GPRS (GGSN – Gateway GPRS
Support Node)
VLR, HLR, AuC, EIR Atualização do software para fornecer as funções oferecidas
e todos elementos de pelo GPRS
base de dados

Figura 2.4 – Arquitetura GPRS

A seguir serão descritos os novos elementos e serviços oferecidos pela


introdução da tecnologia GPRS.

22
Unidade de controle de pacote (PCU)
Todos os BSCs exigem a instalação de um PCU para se integrarem à rede
GPRS. Os PCUs organizam os dados vindos da BSC em pacotes e transportam-no até o
servidor do nó de suporte GPRS (SGSN). O tráfego de voz continua sendo tratado como
nas redes GSM comuns, ou seja, do BSS até a MSC.

Servidor do nó de suporte GPRS (SGSN)


O SGSN pode ser visto como uma “MSC de comutação de pacotes”, ou seja, ele
é responsável por provê o ponto de acesso das MSs à rede GPRS. Note que ele o SGSN
trata apenas o tráfego de dados, permanecendo o tratamento do tráfego de voz
inalterado. As principais funções do SGSN são:
• Detecção de novos usuários GPRS na área de serviço;
• Registro de novos usuários;
• Criptografia dos dados;
• Manutenção dos registros de localização dos usuários na área de serviço;
• Gerenciamento da mobilidade;
• Compressão dos cabeçalhos de dados dos protocolos TCP/IP;
• Tarifação das transações na rede local;
• Comunicação com o HLR, para obter dados dos usuários GPRS.

Gateway do nó de suporte (GGSN)


O GGSN provê as interfaces de conexão com as redes de pacotes externas, como
IP. Todos os pacotes transferidos entre uma rede externa e o GPRS passam pelo GGSN.
Suas principais funções são:
• Manter informações de roteamento para entregar as unidades de protocolo de
dados (PDU – Protocol Data Unit) ao SGSN que serve uma determinada MS;
• Mapeamento dos endereços de rede e assinante, através do protocolo DHCP;
• Tarifar as transações efetuadas nas redes externas.

Nome do ponto de acesso (APN – Access Point Name)


Em suma, APNs são endereços IP associados a cada interface externa que
conecta a rede GPRS ao GGSN. São usados para definir quais serviço podem ser
acessados por um certo usuário. Consiste de:

23
• Identificador de rede APN (Network ID): identifica o GGSN e o nó externo ou
serviço ao qual o usuário deseja se conectar;
• Identificador da operadora APN (Operator ID): campo opcional que identifica
em qual rede backbone GPRS o GGSN está localizado.

2.3.2. Protocolos da rede GPRS


A Figura 2.5 apresenta as camadas de protocolos da rede GPRS. É importante
destacar que, a partir do nível de rede, são usados os protocolos da Internet, como IP,
TCP, UDP e etc. A seguir será dada uma descrição dos principais protocolos da rede
GPRS.

Figura 2.5 – Camadas de protocolo da rede GSM

Camada SNDCP
A camada de protocolo de convergência dependente da sub-rede (SNDCP –
SubNetwork Dependent Convergence Protocol) é responsável pela interface das
camadas de protocolo GPRS entre os elementos de rede MS e SGSN, visando o suporte
dos protocolos IP, PPP e X-25. Adicionalmente, o SNDCP realiza a compressão de
dados e cabeçalho, aumento a eficiência do canal. A compressão de cabeçalho é
realizada apenas ao protocolo TCP, não sendo aplicada ao UDP.
Outra função de grande importância é a segmentação e remontagem das
unidades de protocolo de dados (PDU – Protocol Data Unit).

24
Camada LLC
A camada do protocolo de controle de enlace lógico (LLC – Logical Link
Control) é encarregada de provê o enlace lógico entre a MS e o SGSN. Suas principais
funções são:
• Encapsular dados da camada SNDCP em unidades tratadas pelo LLC;
• Entregar os dados da camada RLC à SNDCP na ordem certa;
• Se encarregar da criptografia;
• Controlar o fluxo de dados;
• Controlar a seqüência de pacotes;
• Detectar e corrigir erros.

Camadas RLC/MAC
A camada de protocolo de controle de rádio (RLC – Radio Link Control)
segmenta os quadros LLC em blocos RLC, associando um número de seqüência por
bloco (BSN - Block Sequence Number).
A camada de protocolo de acesso ao meio (MAC - Medium Access Control)
trata os diferentes canais lógicos a serem compartilhados por várias MSs. Sua principal
função é definir como deve ser feito o acesso ao meio, o que corresponde à função da
camada de enlace do modelo OSI. Provê também mecanismos que evitam colisões de
dados por pacotes no enlace reverso, o que acontece quando várias MSs enviam pacotes
para uma mesma BTS.

2.3.3. Tarifação
Cabe aos elementos de rede SGSN e GGSN a função de coletar as informações
de tarifação de cada MS. O SGSN coleta as informações referentes à utilização da rede
de rádio (RF), enquanto o GGSN coleta as informações referentes à utilização dos
recursos de uma rede externa de dados (tipicamente, a Internet).
As principais informações coletadas pelo SGSN são:
• Volume do tráfego (quantidade de bytes transferidos) de dados originados e
concluídos pela MS;
• Utilização dos recursos GPRS gerais. Representa a utilização de outros recursos
relacionados à rede GPRS, como por exemplo, gerenciamento de mobilidade;

25
• Localização da MS durante a utilização dos serviços da rede GPRS, se local ou
visitada;
As principais informações coletadas pelo GGSN são:
• Volume do tráfego (quantidade de bytes transferidos) de dados originado e
terminado pela MS em uma rede externa de dados;
• Utilização dos endereços do protocolo de dados por pacotes: representa o tempo
de utilização dos endereços do protocolo de dados por pacotes pela MS.

3. Softwares e hardwares utilizados

3.1. PIC18F2525
O PIC18F2525 é um microcontrolador da Microchip da família 18F, que
possuem como características gerais o alto desempenho computacional, preços
acessíveis, alta resistência e extensa memória Flash [1]. Ele é um microcontrolador de 8
bits de dados e16 bits de instrução, possui 28 pinos, podendo utilizar até 25 pinos para
funções diversas de entrada e saída (caso seja utilizado um oscilador interno). Algumas
características específicas do modelo 18F2525 são:
• Possui 3 modos de funcionamento: Execução (CPU e periféricos ativados),
Espera (CPU desativado e periféricos ativados) e Dormindo (CPU e periféricos
desativados;
• Apresenta um baixo consumo de corrente, com valores típicos de 11µA, 2µA e
100nA, nos modos Execução, Espera e Dormindo, respectivamente;
• Suporta uma velocidade de até 40 MHz, utilizando cristal externo;
• Várias configurações de uso do oscilador interno;
• Fonte de corrente de até 25mA;
• Três fontes de interrupção externa (pinos RB0, RB1 e RB2);
• Suporte ao barramento I2C nos modos Mestre e Escravo;
• Avançado módulo USART:
o Suporta os padrões RS232, RS485 e LIN/J2602 (padrão de comunicação
muito usado na indústria automotiva);
o Ativação automática do periférico (caso se encontre no modo
Dormindo), ao receber o start bit;

26
o Detecção automática da taxa de transmissão;
• Suporta 100.000 ciclos de gravação na memória de programa - Flash;
• Suporta 1.000.000 de ciclos de gravação na memória de dados – EEPROM;
• Interrupções com níveis de prioridade: caso ocorra uma interrupção durante o
tratamento de outra interrupção, a que tiver a prioridade mais alta irá ser
executada primeiro;
• Possui quatro timers;
Além das características citadas acima, é interessante destacar algumas
especificações técnicas, elas são visualizadas na Tabela 3.1.
Tabela 3.1 – Especificações técnicas do PIC18F2525
Especificações Valor
Memória de programa 49152 bytes
Memória de dados 3968 bytes
Memória de dados - EEPROM 1024 bytes
Fontes de interrupção 19
Entradas analógicas 5
Temperatura ambiente de -40 ºC a +125ºC
funcionamento
Máxima corrente de saída no 300mA
pino de terra (VSS)
Máxima corrente de entrada no 250mA
pino de alimentação (VDD)
Máxima corrente fornecida para 25mA
qualquer pino de E/S
Máxima corrente requerida para 25mA
qualquer pino de E/S
Máxima corrente fornecida para 200mA
todos os pinos de E/S
Máxima corrente requerida para 200mA
todos os pinos de E/S

27
3.2. Modem GSM
O Modem GSM utilizado no projeto é o modem iTech G24 Serial Data Modem,
fornecido pela empresa Informat Technology [17]. O equipamento nada mais é do que o
encapsulamento do módulo GSM G24 da Motorola [6]. Ele apresenta uma conexão para
antena externa, uma entrada DB9 para conexão serial, uma entrada mini-USB, uma
entrada para a fonte de alimentação e o suporte para o SIM Card.
Para o seu funcionamento é necessário o uso de um SIM Card, igual aos
utilizados nos telefones celulares atuais (GSM). O modem apresenta todas as
características de um celular comum, podendo realizar chamadas, enviar e receber SMS
e utilizar as conexões GPRS (foco principal do projeto). O motivo da não utilização de
um celular comum é que o mesmo não é projetado para as condições adversas que um
projeto específico possa apresentar.
Uma grande vantagem do módulo G24 da Motorola é que o mesmo possui a
implementação da pilha TCP/IP, o que torna bastante fácil o uso de conexões à internet.
Ele dispõe de 4 sockets internos que podem ser utilizados para as conexões TCP e as
portas no intervalo de 0 a 65535. Os comandos referentes à pilha TCP/IP são iniciados
por AT+MIP.
As principais especificações técnicas do módulo em questão são [6]:
• Quad band (850, 900, 1800 e 1900 MHz);
• Temperatura de operação: -20 a +60ºC;
• Consumo de corrente: menor que 2,5mA;
• Potência do transmissor: 1 Watt (850/900 MHz) e 2 Watts (1800/1900 MHz);
• Conexões: USB e RS232;
• Velocidade de transmissão GPRS: até 85,6 Kbps;
• SMS: modo texto e PDU;
O módulo G24 suporta os comandos AT padrões (GSM 07.05, GSM 07.07 e
GSM 07.10), além dos comandos proprietários, que em sua maioria são para acessar a
pilha TCP/IP. Os principais comandos/respostas utilizados no projeto [7] são mostrados
na Tabela 3.2.
Tabela 3.2 – Principais comandos/respostas AT utilizados no projeto
Comando/Resposta Observações
AT Comando básico para testar a comunicação. Retorna ‘OK’
ou ‘ERROR’.

28
AT&K0 Desabilita o controle de fluxo da comunicação serial.
ATE0 Desabilita o ‘eco’ da comunicação serial, ou seja, o
Modem não envia os dados recebidos pela interface serial.
AT+CMGF=1 Configura as mensagens SMS para o modo texto
AT+CNMI=3,2 Faz com que as mensagens SMS recebidas sejam
encaminhas para a interface serial. Após cada SMS, espera
o comando AT+CNMA por 60 segundos, caso não receba,
retorna a configuração para o valor padrão (armazena as
mensagens na memória, sem encaminhar para o terminal).
AT+CNMA Indica o conhecimento de que foi recebida uma nova
mensagem. Faz com que o modem mantenha a sua
configuração das mensagens SMS.
+CMT: <end. ori>, <hora>, Indica o recebimento de uma mensagem SMS. O
<CR><LF><texto> parâmetro ‘end. ori’ indica a origem da mensagem, o
parâmetro ‘hora’ indica a hora da central de serviços da
operadora, <CR><LF> indica uma nova linha e o
parâmetro ‘texto’ representa o conteúdo da mensagem.
AT+MIPCALL=1, <APN> Realiza a conexão com a APN indicada no parâmetro.
AT+MIPCALL=0 Caso o modem esteja conectado a alguma APN, realiza a
desconexão.
+MIPCALL: <parâmetro> Resposta referente a um comando ‘AT+MIPCALL’. Caso
uma conexão tenha sido estabelecida, parâmetro indica o
endereço IP obtido. Caso tenha ocorrida uma desconexão
ou a tentativa de se conectar falhou, parâmetro é igual a 0.
AT+MIPOPEN=<sock>, Abre uma conexão no socket ‘sock’, utilizando a porta de
<porta ori>,<ip>,<porta origem ‘porta ori’, com o servidor de endereço igual a ‘ip’,
dest>,<prot> pela porta de destino ‘porta dest’ e utilizando o protocolo
especificado por ‘prot’, aonde 0 significa TCP e 1 significa
UDP.
AT+MIPSEND=<sock>, Coloca os dados contidos no parâmetro ‘dado’ no buffer de
<dado> envio do socket ‘sock’. O parâmetro ‘dado’ aceita dados no
código ASCII e na sua representação hexadecimal.
AT+MIPPUSH=<sock> Força o envio imediato dos dados contidos no buffer do

29
socket ‘sock’
AT+MIPCLOSE=<sock> Finaliza a conexão do socket ‘sock’, mas não desconecta o
Modem da APN.
+MIPRUDP: <ip ori>, Informa que foi recebida uma mensagem UDP, do
<porta ori>, <sock>, endereço ‘ip ori’, pela porta ‘porta ori’ e com o conteúdo
<dado> igual a ‘dado’.

3.3. Compilador CCS


O compilador CCS é uma ferramenta muito utilizada pelos profissionais que
fazem uso dos microcontroladores da Microchip (PICs). Ele mantém uma grande
similaridade com o padrão ANSI C e fornece bibliotecas próprias com um total de 307
[9] funções específicas para tornar possível a utilização das características fornecidas
pelos microcontroladores. Ainda fornece drivers que permitem a utilização de diversos
componentes acessórios, como display LCD, teclado, grande número de memórias
EEPROM, cartões de memória MMC, sensores de temperatura, relógios de tempo real e
etc.
O projeto em questão faz uso de duas bibliotecas fornecidas pelo compilador:
modbus.c, que implementa todo o protocolo de comunicação Modbus (as principais
funções e os dois modos de funcionamento, mestre e escravo), utilizando pinos de E/S
do PIC para realizar a comunicação RS232; e ds1307.c, que fornece funções para a
configuração e a leitura dos dados desse circuito integrado, capaz de implementar um
relógio de tempo real.
Outras características do compilador podem ser citadas [9], são elas:
• Tipo de variável de 1 bit, o que permite a criação de códigos mais eficientes;
• Constantes salvas na memória de programa (mais abundante que a memória de
dados);
• Permite strings de tamanho variável;
• Apresenta várias opções de formatação para a função ‘printf()’, tornando prático
a exibição das variáveis em algum determinado modelo (hexadecimal, decimal,
binário, com N casas decimais e etc);
• Permite o uso de múltiplas portas RS232 e I2C;

30
o Para isso, faz uso de uma implementação via software de transceptores
seriais;
• Configura automaticamente a direção de cada pino (entrada ou saída) de acordo
com as funções utilizadas (input(), output_high(), output_low() e etc);
• Permite o uso de funções assembly a qualquer momento.

3.4. Gravador PicBurner


Para inserir o arquivo gerado pelo compilador CCS (arquivo.hex) em um
microcontrolador é necessário um dispositivo de hardware específico para esta
finalidade. Esse hardware é chamado de gravador ou programador (o termo em inglês é
programmer).
O gravador utilizado ao longo do projeto foi o PicBurner, o qual foi adquirido
em um site de compra e venda. Ele é baseado no projeto Brenner8 [8], o qual é um
gravador controlado por um microcontrolador em seu circuito. A sua principal
característica é ser um gravador USB, tornando possível a gravação de
microcontroladores a partir de notebooks (os quais, em geral, não possuem portas
seriais). Outras características que podem ser citadas:
• Grava PICs de 8, 14, 18, 28 e 40 pinos;
• Grava dsPICs de 8, 18, 28 e 40 pinos;
• Permite gravação In-Circuit.
• Não precisa de fonte de alimentação externa! Utiliza a propria alimentacao

Figura 3.1 – Gravador PicBurner USB

31
A conexão do microcontrolador ao PicBurner é feita através de um conector ZIF
(Zero Insertion Force – Força de Inserção Nula), evitando que os pinos do
microcontrolador sejam danificados. A Figura 3.1 apresenta o gravador em questão.

3.5. Relógio de Tempo Real - DS1307


O circuito integrado DS1307 é um relógio de tempo real que apresenta um
calendário completo, além de permitir a utilização de 56 bytes de memória [2]. Ele é
capaz de fornecer segundo, minuto, hora, dia, dia da semana, mês e ano. Os meses são
automaticamente ajustados para o seu correto número de dias, incluindo anos bissextos.
Permite a configuração da exibição da hora em formato de 12 (com indicação de AM e
PM) ou 24 horas. Seu encapsulamento é bastante simples, apresentando apenas 8 pinos.
A Figura 3.2 apresenta o seu diagrama de blocos.

Figura 3.2 – Diagrama de blocos do DS1307

O DS1307 necessita de uma bateria de 3V de backup conectada aos seus


terminais (pino 3) para um correto funcionamento. Quando a tensão de alimentação cai
abaixo de 1,25xVBAT (tensão da bateria), o circuito termina a operação que está sendo
realizado naquele momento e bloqueia novas requisições de escrita ou leitura, evitando
que dados inválidos sejam trafegados. Caso a tensão de alimentação se torne menor que
a tensão da bateria, o DS1307 muda para o modo de baixo consumo (menor que 500nA)

32
e passa a ser alimentado apenas pela bateria. No restabelecimento da tensão de
alimentação, o circuito passa a utilizá-la quando a mesma atingir uma valor maior que
VBAT + 0,2V e retorna a aceitar requisições de escrita e leitura quando a tensão de
alimentação atingir um valor maior que 1,25 x VBAT.
O dispositivo em questão faz uso de um cristal oscilador para o seu
funcionamento. O cristal deve ter uma freqüência igual a 32,768kHz e é conectado nos
pinos 1 e 2. Não é necessário o uso de capacitores de carga, mas o cristal deve obedecer
aos parâmetros expostos na Tabela 3.3. A precisão obtida pelo circuito é função da
precisão do cristal e do casamento entre a carga capacitiva do circuito interno e a carga
capacitiva para o qual o cristal foi projetado, ou seja, depende da obediência do cristal
aos parâmetros da Tabela 3.3.
Tabela 3.3 – Parâmetros de especificação do cristal
Parâmetro Típico Máximo
Freqüência 32,768kHz
Resistência série 45kΩ
Capacitência de carga 12,5 pF

Ele utiliza o barramento I2C para realizar a transferência dos dados, pinos 5
(SDA) e 6 (SCL). Além disso, possui uma saída programável (pino 7 SWQ/OUT). Essa
saída pode ser habilitada ou não, quando habilitada emite uma onda quadrada com uma
das quatro freqüências possíveis (1 Hz, 4kHz, 8kHz e 32,768kHz). Essa configuração é
feita habilitando os bits do registrador de controle do DS1307. O pino de saída é
coletor-aberto, portanto, necessita a ligação de um resistor à alimentação para um
correto funcionamento. A saída é habilitada mesmo que o circuito se encontre
alimentado apenas com a bateria.

3.6. Biblioteca LibModbus


O projeto em questão considera como o dispositivo a ser monitorado um
equipamento industrial que permita a comunicação através do protocolo Modbus. Como
é inviável a obtenção de tal dispositivo para fins de desenvolvimento do projeto, fez-se
necessário uma ferramenta que tornasse possível a simulação de tal dispositivo. Para
tanto, foi utilizado a biblioteca LibModbus [10].
Ela implementa o protocolo Modbus utilizando a porta serial para a
comunicação. Ela utiliza o compilador GNU GCC para o seu funcionamento e faz uso

33
da biblioteca libpthread. A LibModbus permite a implementação de dispositivos
mestres e escravos, além de apresentar algumas funções de configuração da porta serial.
Ela reconhece apenas as funções de escrita e leitura de registradores (funções 3, 4, 6 e
16), além das funções de diagnóstico (função 7 – retorna o status do software e função 8
– teste de linha). Mas para o projeto em questão as funções apresentadas atendem às
necessidades.
O software desenvolvido para simular o dispositivo industrial utiliza a
LibModbus para implementar um escravo Modbus. É realizada a inicialização do mapa
de registradores com 3 variáveis de 16 bits (pressão, temperatura e alarmes) e 2
variáveis de 32 bits (volume bruto e volume corrigido). Os valores são obtidos de
forma aleatória e a cada leitura são obtidos novos valores para as variáveis. A biblioteca
em questão permite que seja configurada uma função para ser executada toda vez que
um dado for recebido ou enviado, e é dessa forma que é obtido um novo valor para o
mapa de memória.

3.7. PostgreSQL
O projeto proposto necessita de uma base de dados, para tanto, foi escolhido
como o Sistema Gerenciados de Banco de Dados – SGBD, o PostgreSQL. Ele possui
código aberto e obedece ao paradigma objeto-relacional. Esta seção não irá explorar
toda a potencialidade do SGBD em questão, pois no estágio atual do projeto, o seu uso
foi bastante simplificado. Mas a opção pela escolha do PostgreSQL foi feita para que
seja possível a utilização futura de toda a sua potencialidade. Algumas de suas
principais características [11] são:
• Grande confiabilidade e integridade dos dados;
• Sua implementação da linguagem SQL é fortemente baseada no padrão ANSI-
SQL 92/99;
• Compatível com inúmeros sistemas operacionais (GNU/Linux, diversas
variações de Unix e Windows);
• Possui a maioria dos tipos de dados especificados no ISO SQL:1999;
• Suporta o armazenamento de objetos binários;
Algumas funcionalidades mais sofisticadas podem ser mencionadas, tais como:
• Controle de concorrência multiversionado;
• Recuperação em um ponto no tempo;

34
• Transações agrupadas;
• Cópias de segurança a quente;
• Suporta conjuntos de caracteres internacionais;
• Codificação de caracteres multibyte;
• Sensibilidade a caixa (maiúscula e minúscula)
O PostgreSQL oferece ainda diversas bibliotecas que fazem a interface entre o
banco de dados e uma determinada linguagem de programação. Algumas das linguagens
suportadas nativamente são: C/C++, Java, Net, Perl, Python e Ruby. A linguagem
utilizada no projeto foi C/C++ e a biblioteca disponibilizada pelo PostgreSQL é a libpq.

3.7.1. libpq
A biblioteca libpq é a interface de programação para as aplicações desenvolvidas
em C/C++ que desejam acessar as funções do PostgreSQL. Ela possui um conjunto de
funções que permitem que um programa cliente envie requisições para um servidor
PostgreSQL e receba os seus resultados. Os programas clientes que utilizam a libpq
devem incluir o arquivo de cabeçalho libpq-fe.h e utilizar a opção para realizar o link
com a biblioteca libpq.
A seguir será dada uma breve descrição das principais funções desta biblioteca,
retirados de [12]:
• PQconnectdb( char *conninfo )  Realiza a conexão com o servidor do banco
de dados de acordo com os parâmetros especificados na variável ‘conninfo’. Ela
retorna um ponteiro para a conexão (PGconn);
• PQstatus( PGconn *conn )  Indica o status da conexão passada como
parâmetro;
• PQexec( PGconn *conn, const char *command )  Executa o comando contido
na variável ‘command’ utilizando a conexão ‘conn’. A resposta é retornada
como um ponto para uma variável do tipo PGresult;
• PQresultstatus( PGresult *res )  Indica o status da resposta passada como
parâmetro;
• PQclear( PGresult *res )  Limpa o conteúdo da variável ‘res’;
• PQfinish( PGconn *conn )  Finaliza a conexão ‘conn’;
• PQnfields( PGresult *res )  Retorna o número de colunas (campos) contidos
na resposta de um comando SQL, armazenado em ‘res’;

35
• PQntuples( PGresult *res )  Retorna o número de linhas (tupla) contidos na
resposta de um comando SQL, armazenado em ‘res’;
• PQgetvalue( PGresult *res, int row_number, int column_number )  Obtém o
valor armazenado na linha e coluna indicados nos parâmetros da função. Retorna
como uma variável do tipo char*.

4. Desenvolvimento

4.1. Descrição do projeto


O projeto consiste no desenvolvimento de uma Unidade de Telemetria Remota –
UTR. Ela é ser capaz de capturar dados de um dispositivo qualquer (na aplicação em
questão, está sendo considerado um dispositivo industrial) e transmitir esses dados para
um servidor, de forma totalmente remota. Para tanto, é utilizado um Modem GSM
(descrito na seção anterior), o qual utiliza a internet para enviar os dados. O servidor
armazena esses dados em um banco de dados e os torna disponível para consulta através
de um software cliente, que tem a opção de filtrar a visualização desses dados da forma
mais conveniente.
A UTR é composta por dois módulos principais, referenciados ao longo do texto
como Módulo Embarcado e Módulo Servidor, nas próximas seções esses módulos serão
mais detalhados, mas essa definição irá ajudar na explicação do funcionamento do
projeto, que será dada a seguir.
O Módulo Embarcado possui um relógio dedicado e uma configuração do
intervalo de tempo em que deve realizar leituras do dispositivo monitorado. Esse
intervalo pode ser alterado enviando um SMS para a UTR, o número telefônico
correspondente ao chip usado no Modem de cada UTR deve ser cadastrado no banco de
dados do Módulo Servidor (o envio do SMS pode ser inserido ao Módulo Servidor, mas
atualmente esta função não está disponível). Após esse intervalo é feita uma requisição
Modbus de leitura dos registradores desejados do dispositivo monitorado, os valores
desses registradores são armazenados no Módulo Embarcado, além disso, é
acrescentada uma variável que indica o número da mensagem e a marca de tempo em
que a leitura foi realizada.
As variáveis são enviadas em uma única mensagem para o Módulo Servidor,
através do Modem GSM, o qual armazena no banco de dados os valores dos
registradores recebidos e envia uma resposta ao Módulo Embarcado contendo o número

36
da mensagem recebida. Este último compara o valor recebido com o número da
mensagem enviada, caso sejam iguais, ele considera o dado enviado e aguarda o tempo
configurado para uma nova leitura. Caso não seja igual ou o Módulo Embarcado não
receba nenhuma confirmação em vinte segundos, é realizada uma nova tentativa de
envio, até o limite de cinco tentativas. Se após as cinco tentativas, o Módulo Embarcado
não receber nenhuma confirmação, o mesmo aguarda o intervalo para uma nova leitura,
realiza esta leitura e a armazena em uma nova mensagem. Então, envia novamente a
mensagem anterior, caso obtenha sucesso, envia imediatamente a última leitura. O
Módulo Embarcado possui um buffer de até 100 mensagens.
O projeto proposto pode ser adaptado para atender diversas aplicações comerciais e
industriais. A seguir são enumerados os principais tipos de aplicações encontradas:
1. Monitoração de tubulações de gás natural (temperatura, pressão, volume e etc);
2. Sistemas de medição de água/luz;
3. Substituir sistemas que utilizam como método de transmissão rádios e que
apresentam baixa taxa de entrega.
Para o projeto em questão, foi adotado como exemplo um sistema de
monitoração de tubulações de gás natural, com o intuito de ser realizada a cobrança
mensal do volume consumido por um determinado cliente.
As principais vantagens deste projeto são:
• A redução do custo, pois torna desnecessário funcionários dedicados a
realizarem as leituras dos dispositivos;
• Uma maior segurança, já que muitas aplicações industriais oferecem riscos à
saúde do ser humano;
• Grande comodidade, as leituras são realizadas automaticamente e já são
armazenadas em banco de dados, aonde é possível gerar relatórios customizados
de acordo com a necessidade;
• Flexibilidade, pois o horário da leitura dos dispositivos pode ser facilmente
alterado de acordo com a necessidade;
• Possui uma instalação relativamente simples;
• Utiliza tecnologias que apresentam grande disponibilidade, como o protocolo
Modbus (padrão de fato na área industrial [21]) e o Modem GSM, que apresenta
uma grande área de cobertura [22].

37
A seguir serão descritos em mais detalhes os principais componentes dos
Módulos da UTR proposta.

4.2. Módulo Embarcado


O Módulo Embarcado tem como objetivo coletar as informações do dispositivo,
armazená-las temporariamente e enviá-las para o servidor. Além disso, ele é capaz de
reconhecer mensagens SMS recebidas pelo Modem e dessa forma é feita a configuração
do intervalo de tempo entre as leituras do dispositivo. Outras configurações podem ser
implementadas dessa mesma forma. Ele é composto pelo circuito eletrônico e pelo
Modem GSM. Os principais componentes do circuito eletrônico são:
• Microcontrolador PIC18F2525;
• Relógio de tempo real - DS1307;
• Conversor TTL/RS232 - MAX232;
• Regulador de tensão – 7805.
O esquema do circuito eletrônico pode ser visualizado na Figura 4.1. O protótipo
desse circuito pode ser observado na Figura 4.2, na qual apresenta o Módulo Embarcado
por completo (circuito eletrônico e Modem GSM).

Figura 4.1 – Esquema do circuito eletrônico

38
Figura 4.2 – Foto do Módulo Embarcado
O circuito eletrônico foi projetado para que fosse alimentado por uma tensão
contínua de 12V, quer seja advinda de um transformador de tensão alternada para
contínua, como também por uma bateria. Como o projeto é voltado para aplicações
industriais, é muito importante maximizar o tempo de funcionamento do circuito
quando apenas uma bateria é usada para alimentá-lo. Nesse sentido, o circuito
apresentado na Figura 4.1 pode consumir apenas 0,72mA, caso o MAX232 seja
substituído pelo MAX222. Isso resulta em mais de 2 anos e 6 meses de funcionamento
no caso de uso de uma bateria de 18Ah. Os consumos individuais são os seguintes:
• PIC18F2525 em modo de operação  11µA [1];
• DS1307 em modo standby  200µA [2];
• MAX222 em modo shutdown  2µA [4];
• Modem GSM g24 em modo idle  500µA [5].
A alimentação de 12V é conectada à entrada do CI7805, pino 1, o qual gera uma
tensão de 5V em seu terminal de saída, o qual é utilizado para alimentar os demais
componentes do circuito eletrônico. Foi usado um capacitor cerâmico de 330nF na
entrada e um capacitor eletrolítico de 100µF na saída. O CI7805 gera uma tensão de
saída regulada [20], ou seja, ela fica estável em 5V, independente de oscilações na

39
tensão de entrada. A escolha de sua utilização é óbvia, pois assim obtém-se uma tensão
para alimentar o restante do circuito bastante estável e com o nível lógico no padrão
TTL.
O principal componente do circuito eletrônico é o microcontrolador
PIC18F2525, o qual tem como função gerenciar todas as atividades do Módulo
Embarcado. Todos os dispositivos do circuito são conectados a ele, como pode ser
observado na Figura 4.1. Ele utiliza um cristal de 24MHz, logo, é capaz de realizar 6
milhões de instruções por segundo, de acordo explicações dadas em seções anteriores. O
pino de reset está atualmente desativado.
O DS1307 é um CI que funciona como um relógio de tempo real, maiores
explicações já foram fornecidas em seções anteriores. A sua ligação ao PIC18F2525
pode ser observada na Figura 4.3. Seus pinos SCL e SDA são conectados aos
respectivos pinos do PIC. Como o DS1307 utiliza o barramento I2C, são necessários
resistores de pullup para o correto funcionamento da ligação [2]. Os resistores usados
foram de 4,7 kΩ. O DS1307 é configurado pelo PIC para emitir um sinal de saída (pino
SOUT) equivalente a um trem de pulsos de freqüência igual a 1Hz. Esse pino é
conectado na porta RB2 do PIC, de forma que seja possível a utilização da interrupção
externa do microcontrolador a cada segundo. Como bateria do DS1307 está sendo
utilizado 2 pilhas alcalinas de 1,5V cada, conectadas em série, resultando nos 3V
necessários para um correto funcionamento do RTC. Nos pinos do clock externo está
conectado um cristal de 32,768kHz, de acordo com o especificado em [2].

Figura 4.3 – Ligação entre DS1307 e o PIC18F2525

40
No circuito eletrônico existem três conversores MAX232. As suas conexões de
capacitores e alimentação são como sugeridas em [3]. Um dos conversores é utilizado
para a comunicação com o Modem GSM, aonde o PIC envia comandos para o Modem e
recebe as respostas, esse MAX232 está conectado à USART de hardware do
PIC18F2525 (pinos RC6 e RC7), pois se faz necessária a utilização da interrupção
serial. Outro MAX232 é utilizado para a comunicação com o dispositivo que deseja-se
monitorar, no projeto em questão, um dispositivo industrial que oferece comunicação
através do protocolo ModBus via RS232. Ele é conectado ao PIC nas portas RB0
(recepção) e RB3 (transmissão), assim, é possível utilizar a interrupção externa 0 para o
tratamento das mensagens recebidas. O último MAX232 é utilizado apenas para
imprimir dados de depuração para qualquer dispositivo que possa receber uma conexão
RS232. Nos inúmeros testes realizados ao longo do projeto, foi utilizado um PC para
receber esses dados, tornando possível uma fácil depuração do funcionamento do
projeto, viabilizando possíveis soluções de defeitos.

4.2.1. Algoritmo do microcontrolador PIC18F2525


Como dito anteriormente, o microcontrolador PIC 18F2525 é o principal
componente do circuito eletrônico, ele é responsável pela execução de todas as ações do
Módulo Embarcado, aonde é realizada a comunicação com o dispositivo monitorado e o
Modem GSM. Portanto, para uma completa compreensão do funcionamento do Módulo
Embarcado é necessário conhecer em detalhes o algoritmo executado pelo PIC18F2525.
A seguir será explicado todo esse algoritmo, utilizando fluxogramas para facilitar o
entendimento.
O fluxograma da função principal é mostrado na Figura 4.4. O cabeçalho contém
a definição do modelo do PIC utilizado, os drivers utilizados ao longo do código
(modbus.c e ds1307.c), a freqüência do cristal escolhido (24MHz), configurações do
driver Modbus (mestre ou escravo, endereço e etc) e a configuração das interfaces
RS232 utilizadas. Nesse último, é utilizado o conceito de streams, é definida uma
stream para cada configuração e quando se deseja utilizar àquela interface, basta se
referir à stream configurada. São configuradas 3 interfaces RS232, todas com
velocidade igual a 9600bps, 8 bits de dados, sem paridade e 1 stop bit. A interface
padrão do PIC18F2525, ou seja, a implementada via hardware, é dedicado à conexão
com o Modem GSM, pois ela possui um buffer interno de 3 caracteres, indispensáveis
no tratamento das mensagens recebidas pelo Modem. Já nas outras duas interfaces,

41
dedicadas à conexão Modbus com o dispositivo e ao envio de mensagens de depuração
para um PC, são utilizadas interfaces via software, aonde o compilador simula o
funcionamento de uma USART, funcionando perfeitamente, apenas não possuindo o
buffer de 3 caracteres.

Figura 4.4 – Fluxograma da função main()

42
O programa possui um vetor de 100 posições para cada registrador de memória
lido do dispositivo monitorado (no caso do projeto atual, são 5 vetores, que armazenam
pressão, temperatura, volume bruto, volume corrigido e alarmes). Além delas, algumas
variáveis valem a pena serem explicadas, são elas:
• tempo_timeout  Armazena o tempo em que é considerado um timeout, ou seja,
a operação alcançou o tempo limite de espera.
• _tempo  Armazena o intervalo de tempo entre as leituras do dispositivo
monitorado. Ela é do tipo TEMPO, uma enumeração definida no código.
• estado  Armazena o estado atual da execução do código. Ela é importante para
não realizar comparações desnecessárias ao longo do código. Ela é do tipo
ESTADO_PROGRAMA, uma enumeração definida no código.
• flag_rtc  Indica que ocorreu uma interrupção externa 2, ou seja, a saída do
DS1307 completou um novo período e como essa saída está configurada para ter
uma freqüência de 1Hz, significa que foi transcorrido 1 segundo. Ela é
importante para a definição do momento em que uma nova leitura deve ocorrer.
A variável é do tipo int1, ou seja, possui apenas 1 bit.
• flag_tempo  Indica que foi atingido o intervalo configurado entre as leituras
do dispositivo foi alcançado. Então, são executados as ações necessárias para
realização do objetivo do código. Ela é do tipo int1.
• flag_ack_udp  Indica que foi recebida uma mensagem UDP pelo Modem e
que essa mensagem se refere à resposta do Módulo Servidor da última
mensagem enviada pelo Módulo Embarcado. Essa variável é do tipo int1.
• flag_ack_sms  Indica que foi iniciado o recebimento de uma mensagem SMS.
Ela é ativada a partir do recebimento do texto “+CMT:”, que de acordo com as
seções anteriores, significa que a próxima linha recebida pelo Modem GSM
apresenta o conteúdo da mensagem SMS. Portanto, essa variável é importante
para alertar ao programa que está sendo executado no microcontrolador, que a
próxima linha deve ser interpretada como advinda de uma mensagem SMS. Esse
alerta é indispensável, pois o único meio do Módulo Servidor iniciar uma
comunicação com o Módulo Embarcado é através de SMS.
• flag_timeout  Indica que o tempo limite de espera para a ação executada foi
alcançado. Ela é do tipo int1.

43
• flag_conectado  Indica que o Modem GSM se encontra conectado à internet
através de uma conexão PPP com a operadora do cartão SIM inserido.
A configuração do Modem é realizada através de alguns comandos necessários
para o correto funcionamento do mesmo. Eles definem que não estão sendo usados
pinos de controle na comunicação serial, que as mensagens SMS devem ser
encaminhadas para a saída RS232, garante que não existe nenhuma conexão à internet e
desabilita o eco dos comandos enviados para o Modem. O timer0 é configurado de
modo que possa monitorar corretamente o tempo passado desde sua habilitação até o
momento da interrupção.

Figura 4.5 – Fluxograma da interrupção da USART


A Figura 4.5 ilustra o fluxograma da interrupção da USART, ou seja, essa
função é executada toda vez que algum caracter for recebido na interface serial padrão.
Como esta interface está conectada ao Modem e o mesmo envia todos os dados
recebidos por sua porta serial, bem como as respostas aos comandos executados, a
função ilustrada na Figura 4.5 permite o controle sobre tudo o que ocorre referente ao
Modem GSM. Ela basicamente armazena todos os caracteres recebidos no vetor msg,
até que um ‘\n’ (código correspondente ao ENTER) seja encontrado. Quando isso
ocorre, é chamada a função “processamento()”¸ que irá analisar o conteúdo do vetor e,
de acordo com o estado do programa, irá realizar determinadas tarefas, o
funcionamento desta função é demonstrado no fluxograma da Figura 4.7. Além de

44
executar a função “processamento()”, é definido que, no momento que chegar o
próximo caracter, o vetor msg será reiniciado e o novo caracter será inserido no início
do vetor.
A Figura 4.6 apresenta o fluxograma da função “trata_rtc()”. Ela é responsável
por obter os dados do CI DS1307, através de seu driver específico, que fornece a data e
hora com uma precisão de tempo real. Com isso, é possível checar se o intervalo de
tempo configurado na variável _tempo foi alcançado. Em caso positivo, a flag_tempo é
ativada.

Figura 4.6 – Fluxograma da função “trata_rtc()”


A função “captura_dado()” pode ser visualizada no fluxograma da Figura 4.8.
Ela é responsável por obter os dados do dispositivo monitorado, enviando comandos
Modbus para o mesmo, e criar uma mensagem contendo os valores lidos do dispositivo,
o número da mensagem (para ser possível realizar o reconhecimento do envio) e a
marca da hora da leitura. Essa função é chamada pela função “main()”. Outra função
invocada pelo “main()” é a “conecta()”, que é ilustrada na Figura 4.9. Ela é
responsável por realizar a conexão do Modem GSM à internet através da operadora do
cartão SIM inserido, apenas após essa conexão é possível enviar dados para o Módulo
Servidor. A função “conecta()” coloca o estado do programa para ‘MIPCALL’, o que
faz com que a função “processamento()” procure por respostas do tipo
‘+MIPCALL:<endereço ip>’, então envia o comando de conexão para o Modem e
ativa a interrupção de timer0, para que possa ser monitorado o timeout. A função fica
bloqueada, até que o timeout seja alcançado ou a função “processamento()” identifique
que foi realizada uma conexão, o que ativa a flag_conectado. Caso não ocorra a

45
conexão, será realizada uma nova tentativa, até o limite de 10, quando a leitura
armazenada não será enviada até o próximo intervalo de tempo entre as leituras, e então
as duas leituras tentarão ser enviadas.
A função encarregada de realizar a comunicação do Módulo Embarcado com o
Módulo Servidor é a “envia()”, que pode ser visualizada no fluxograma da Figura 4.10.
Ela utiliza conceitos semelhantes à função “conecta()”. Durante a sua execução ela
realiza chamadas à função “envia_dado()”, que pode ser acompanhada pelo
fluxograma da Figura 4.11. Ao final da função “envia()” é fechada a conexão com a
operadora. Assim, um novo ciclo pode ser reiniciado e todo o processo descrito é
realizado novamente.

Figura 4.7 – Fluxograma da função “processamento()”

46
Figura 4.8 – Fluxograma da função “captura_dados()”

Figura 4.9 – Fluxograma da função “conecta()”

47
Figura 4.10 – Fluxograma da função “envia()”

48
Figura 4.11 – Fluxograma da função “envia_dado()”

4.3. Módulo Servidor


O Módulo Servidor tem como função receber os dados enviados pelo Módulo
Embarcado e armazená-los em um banco de dados, de forma que seja possível a
visualização dessas informações. Além disso, ele permite que N clientes se conectem ao
servidor e obtenham acesso ao banco de dados. Para tanto, um cliente deve fornecer um
login e uma senha, que serão usados para se conectar à base de dados, permitindo
apenas que clientes autorizados pelo administrador do sistema obtenham acesso ao
software servidor e sua base de dados (o administrador deve registrar manualmente
todos os clientes que poderão obter acesso).
O software cliente pode ser desenvolvido em qualquer linguagem e sofrer
quaisquer modificações ao longo do tempo, desde que mantenha o protocolo de
comunicação com o servidor. Assim, existe uma grande flexibilidade na forma em que
os dados podem ser visualizados, o que resulta em uma boa característica do projeto
proposto. Nas próximas seções, será citado o software cliente exemplo desenvolvido
utilizando a suíte gráfica QT.
O Módulo Servidor é composto por um computador (com uma configuração
simples) sempre conectado à internet, com um número IP real e fixo e
preferencialmente conectado a qualquer firewall que permita tráfego apenas nas portas
específicas do projeto. O outro componente do Módulo Servidor é um software,
referenciado ao longo do texto como software servidor. Ele possui três threads de
execução [19]. O seu funcionamento será descrito a seguir.

49
O software servidor foi construído utilizando apenas ferramentas livres, aonde
os principais componentes são o compilador GNU GCC e o Sistema Gerenciador de
Banco de Bados – SGBD PostgreSQL. Essa característica, além de oferecer um
baixíssimo custo de implantação, torna o sistema de fácil manutenção, pois ambos os
componentes possuem fortes comunidades de suporte.
A conexão entre o Módulo Embarcado e o Módulo Servidor é efetuada pelo
protocolo UDP, embora pareça mais adequado o conceito de transmissão confiável do
protocolo TCP [18]. Mas não foi possível a utilização do TCP, pois foram encontrados
problemas com o Modem GSM. Quando ocorria uma falha de transmissão, o Modem
GSM não era capaz de fechar a conexão já aberta e o socket se tornava inoperante.
Como o Modem GSM possui apenas quatro sockets [5], rapidamente o Módulo
Embarcado não conseguia mais realizar nenhuma conexão com o Módulo Servidor.
Então, foi implementado um protocolo de confirmação de recebimento de mensagens,
aonde o Módulo Embarcado envia o número da mensagem, junto com as informações
do dispositivo. O Módulo Servidor, ao receber uma mensagem, envia uma resposta ao
Módulo Embarcado contendo apenas o número da mensagem recebida. O Módulo
Embarcado recebe a mensagem e compara o número recebido com o número da
mensagem enviada, caso sejam iguais, considera a mensagem como enviada e apaga a
mesma de seu buffer. Caso a mensagem de confirmação não chegue até o Módulo
Embarcado, o mesmo enviará a mesma mensagem novamente, até que a confirmação
seja recebida ou um número máximo de tentativas seja alcançado. Para evitar dados
duplicados na base de dados, o software servidor está programado para descartar as
mensagens que já foram recebidas.
O funcionamento do software servidor está descrito nos fluxogramas a seguir,
nos fluxogramas estão ocultados os procedimentos de checagem de erros e validações
dos dados, com o intuito de simplificá-los. A thread main() está ilustrada na Figura
4.12, ela executa o servidor que irá receber as conexões do Módulo Embarcado e
armazenar os dados no banco de dados. A Figura 4.13 mostra o funcionamento da
thread servidor(), ela recebe conexões dos softwares clientes e realiza a sua
autenticação junto ao banco de dados, caso obtenha sucesso, inicia uma thread cliente()
para executar as ações daquele cliente e passa a aguardar novas conexões.
A thread cliente() está indicada na Figura 4.14, ela é responsável por realizar a
comunicação entre o software servidor e o software cliente. Com o intuito de permitir
uma grande compatibilidade com os clientes futuramente desenvolvidos, o protocolo de

50
comunicação entre o software servidor e o software cliente é bastante simples. O
software servidor está programado para interpretar apenas comandos SQL e, ao recebê-
los, tenta executá-los e retorna a resposta ao software cliente, cabendo ao mesmo todo o
processo de tratamento dos dados. Assim, é possível obter uma grande flexibilização
dos clientes.

Figura 4.12 – Fluxograma da thread main()

51
Figura 4.13 – Fluxograma da thread servidor()

Figura 4.14 – Fluxograma da thread cliente()

52
4.3.1. Cliente exemplo
Como dito na seção anterior, o software cliente pode sofrer modificações a
qualquer momento e essa é uma característica desejada do projeto. Portanto, não será
dada ênfase ao funcionamento do software cliente, ele apenas obedece ao protocolo de
comunicação explicitado na Figura 4.13 e Figura 4.14. Ele foi desenvolvido apenas para
comprovar a funcionalidade do Módulo Embarcado. Foi utilizada a suíte gráfica QT
para o seu desenvolvimento.
A tela de login do software cliente é apresentada na Figura 4.15. A Figura 4.16
ilustra a sua tela principal, ela possui um menu principal e um menu de ações contendo
dois itens, apenas “Ver Dados da UTR” está disponível atualmente. Além disso, ela
apresenta uma tabela contendo todas as UTRs cadastradas e algumas informações que
podem ser úteis na identificação das mesmas. Clicando sobre uma UTR e pressionando
o botão “Ver Dados da UTR” a tela da Figura 4.17. Nessa tela é possível visualizar os
dados armazenados no banco de dados a partir de dois filtros, o nome da UTR e a
data/hora da leitura. Essa última opção é permitido escolher se deseja visualizar os
dados que contenham data/hora maiores, iguais ou menores que o valor fornecido.

Figura 4.15 – Tela de login do software cliente-exemplo

53
Figura 4.16 – Tela principal do software cliente-exemplo

Figura 4.17 – Tela da ação “Ver Dados da UTR”

54
5. Conclusão
Ao longo do trabalho, foi apresentado um processo de automação simples e
prático de um tipo de sistema bastante comum, mas que em muitos casos ainda
apresenta um funcionamento bastante artesanal, os sistemas de medição fiscal. É
comum encontrarmos sistemas em que é necessário que um funcionário vá até o
equipamento medidor para coletar suas informações. Essa situação se torna mais grave,
quando se tratam de sistemas que possuem equipamentos (clientes) muito distantes uns
dos outros.
O trabalho apresenta um sistema de telemetria remota, que permite que um
Módulo Embarcado colete as informações de um dispositivo e realize o envio para um
Módulo Servidor, o qual armazena todas essas informações em um banco de dados,
permitindo que programas clientes possam visualizá-los.
A implementação desse projeto apresenta algumas vantagens, que podem ser
resumidas em:
• Garantia de que a medição irá ser realizada, independente da necessidade de um
funcionário se deslocar até o ambiente onde o dispositivo se localiza. Essa
vantagem evita possíveis atos de má fé por parte do funcionário, como não se
deslocar até o local, ou anotar medições que não condizem com a realidade;
• Permite que os dispositivos medidos sejam inseridos em locais de acesso mais
restrito, impedindo possíveis alterações no mesmo por parte do cliente;
• Pode apresentar maiores detalhes para o cliente, pois as medições podem ser
realizadas em vários intervalos de tempo pré-definidos. Dessa forma é possível
demonstrar qual consumo diário, ou por período do dia, resultando em uma
maior clareza para o consumidor;
• A empresa passa a possuir um histórico dos clientes, pois todas as informações
vão direto para um banco de dados, o qual permite um grande volume de dados;
Embora o trabalho descrito esteja totalmente funcional, o mesmo ainda necessita
da implementação de algumas funcionalidades e da definição de alguns parâmetros,
bem como a realização dos testes de campo. Na que diz respeito às funcionalidades, é
necessário a integração do envio de SMS ao Módulo Servidor, que pode ser realizada
utilizando um componente (de desenvolvimento próprio ou de terceiros) de software
que realize o acesso aos sites das operadoras de telefonia celular e efetue o envio
gratuito da mensagem, com formatos de texto padrão e o número telefônico de acordo

55
com a UTR selecionada. Outra opção seria o uso de um servidor externo de SMS, o
qual cobraria uma taxa (cerca de R$ 0,15) por cada mensagem enviada, dessa forma, o
envio da SMS poderia ser feito de forma transparente ao usuário. Outra funcionalidade
pendente é a realização do ajuste do relógio de cada Módulo Embarcado, o qual teria
que ser efetuado localmente.
No âmbito das definições, é necessário medir com certo grau de precisão o
consumo de energia total do circuito, em diversos tipos de operação. Apenas com os
dados dessas medições é possível definir qual o tipo de alimentação do circuito
eletrônico, ou seja, se é necessário que o circuito seja alimentado por alguma rede
elétrica ou se apenas baterias de alta durabilidade suportam o funcionamento do circuito
por um tempo economicamente viável.
São necessários testes de campo para confirmar a disponibilidade e o
comportamento da rede GPRS nos locais a serem instalados os Módulos Embarcados.
Além disso, deve-se realizar o teste global do funcionamento do sistema.
Além das atividades a serem realizadas antes de tornar o sistema totalmente
preparado para o funcionamento no campo, existem melhorias a serem feitas no projeto
que podem resultar em uma maior qualidade do mesmo. Pode ser aumentado o número
de ações realizadas pelo Módulo Embarcado a partir de comandos do Módulo Servidor,
realizados através de mensagens SMS, como por exemplo, a realização e o envio
imediato de uma nova leitura. Outra modificação seria a adoção de algum protocolo de
segurança da Internet para a conexão entre os Módulos, ou a utilização de criptografia
de dados.

56
6. Referências

[1] Microchip. Manual do PIC18F2525. Disponível em:


http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2046.
Acesso em: 20/06/2009
[2] Maxim. Manual do DS1307. Disponível em: http://www.maxim-
ic.com/quick_view2.cfm/qv_pk/2688. Acesso em: 20/06/2009
[3] Texas Instruments. Manual do MAX232. Disponível em:
http://focus.ti.com/docs/prod/folders/print/max232.html. Acesso em: 20/06/2009
[4] Texas Instruments. Manual do MAX222. Disponível em:
http://focus.ti.com/lit/ds/slls590d/slls590d.pdf. Acesso em: 20/06/2009
[5] Informat Technology. Manual do Modem GSM g20/g24. Disponível em:
http://www.grupoinformat.com.br/downloads.php?divisao=wireless. Acesso em:
20/06/2009
[6] Motorola. Motorola G24: Module Hardware Description. Disponível em:
http://developer.motorola.com/products/wirelessmodules/g24/. Acesso em: 20/06/2009
[7] Motorola. Motorola G24: AT Commands Reference Manual. Disponível em:
http://developer.motorola.com/products/wirelessmodules/g24/. Acesso em: 20/06/2009
[8] Bredendiek, Jörg. PIC-Brenner 8 Rev 5. Disponível em:
http://www.sprut.de/electronic/pic/projekte/brenner8/index.htm. Acesso em: 21/06/2009
[9] Custom Computer Services, Inc. http://www.ccsinfo.com. Acesso em: 21/06/2009
[10] LibModbus. http://pes.free.fr. Acesso em: 21/06/2009
[11] Comunidade brasileira de PostgreSQL. http://www.postgresql.org.br. Acesso em:
21/06/2009
[12] PostgreSQL 8.3.1 Documentation. Disponível em:
http://www.postgresql.org/docs/. Acesso em: 21/06/2009
[13] 1977 Data Calatog Micro Electronics. General Instrument Corporation. Disponível
em: http://www.rhoent.com/pic16xx.pdf. Acesso em: 22/06/2009
[14] Microchip. PICmicro – Mid-Range MCU Family: Reference Manual.
Disponível em:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1956.
Acesso em: 22/06/2009

57
[15] Filho, R. P. Protocolo de Comunicação I2C. Artigo disponível em:
http://www2.eletronica.org/artigos/eletronica-digital/protocolo-de-comunicacao-i2c/.
Acesso em: 22/06/2009
[16] Sverzut, J. U. Redes GSM, GPRS, EDGE e UMTS – Evolução a caminho da
quarta geração. 2ª Edição. São Paulo: Editora Érica 2008.
[17] Informat Technology. http://www.informattechnology.com.br. Acesso em:
20/06/2009
[18] Tanenbaum, A. S. Redes de Computadores. 4ª Edição. Rio de Janeiro: Editora
Campus 2003
[19] Tanenbaum, A. S. Sistemas Operacionais Modernos. 2ª Edição. São Paulo:
Prentice Hall 2003
[20] Texas Instruments. Manual do µA7805. Disponível em:
http://focus.ti.com/docs/prod/folders/print/ua7805.html. Acesso em: 23/06/2009
[21] Melo, W. Notas de aula – Redes industriais: Aula 4. Disponível em:
http://www.cefetrn.br/~walmy/RI_A4.pdf. Acesso em 23/06/2009
[22] GSM World. Coverage Maps. Disponível em:
http://www.gsmworld.com/roaming/gsminfo/cou_br.shtml. Acesso em: 23/06/2009

58