sistema de rastreabilidade de processo utilizando rfid com

Transcrição

sistema de rastreabilidade de processo utilizando rfid com
UNIVERSIDADE POSITIVO
SISTEMA DE RASTREABILIDADE DE PROCESSO UTILIZANDO
RFID COM TECNOLOGIA ZIGBEE
CURITIBA
2009
SERGIO A. CHEUTCHUK
TIAGO CELUPPI
SISTEMA DE RASTREABILIDADE DE PROCESSO UTILIZANDO RFID COM
TECNOLOGIA ZIGBEE
Monografia apresentada ao Curso de
Engenharia Elétrica da Universidade
Positivo, para obtenção de avaliação
parcial da disciplina de Trabalho de
Conclusão de Curso (TCC), como
requisito a obtenção do grau de
Engenheiro Eletricista, sob a orientação
do Prof. Fabiano Zaruch Chinasso
CURITIBA
2009
SERGIO A. CHEUTCHUK
TIAGO CELUPPI
SISTEMA DE RASTREABILIDADE DE PROCESSO UTILIZANDO RFID COM
TECNOLOGIA ZIGBEE
Este trabalho foi julgado adequado e aprovado para a obtenção do título de
graduação em
Engenharia de Elétrica da Universidade Positivo
Curitiba, 30 de outubro de 2009
_____________________________________
Prof. Ms. Salmo Pustilnick
Coordenador do Curso de Engenharia Elétrica
BANCA EXAMINADORA:
_____________________________________
Prof. Ms. Fabiano Zaruch Chinasso
Universidade Positivo
Orientador
_____________________________________
Prof. Esp. Leonardo Gomes Tavares
Universidade Positivo
Banca
AGRADECIMENTOS
Dedico este trabalho a minha esposa Elena, meus filhos João Gabriel e Guilherme e
aos meus pais Mariano e Maria (in memorian). Sei que a divisão do tempo entre
Universidade e vocês, não foi justa nos últimos anos, mas de coração obrigado pela
paciência e apoio. Sem vocês não teria conseguido mais esta Vitória.
Sergio Antonio Cheutchuk
Dedico este trabalho a minha esposa Fernanda, a meus pais Vanderlei e Maria
Alice(in memorian). Que me apoiaram em todos os momentos para que concluísse
este projeto.
Tiago Celuppi
Só aqueles que têm paciência para fazer coisas
simples com perfeição é que irão adquirir habilidade
para fazer coisas difíceis com facilidade.
Johann Christoph Von Schiller
RESUMO
O trabalho consiste no desenvolvimento de um Sistema de rastreabilidade de
processo, resultado de um estudo de caso numa linha de refrigeradores e aplicação
de tecnologias inovadoras do mercado como: RFID (identificação através de radio
freqüência), comunicação wirelles usando padrão ZigBee IEEE 802.15.4, software
de aquisição de dados em Django e Python (Linux) com banco de dados SQLite.
Estas tecnologias são aplicadas para o desenvolvimento de um dispositivo usando
um microcontrolador PIC 18F452 da Microchip. Este dispositivo realiza uma
interface homem máquina com o usuário operador da estação de trabalho do
processo em análise e com o servidor que é o gerenciador do Sistema de
Rastreabilidade.
O Sistema visa garantir que todos os produtos fabricados nas
linhas de montagem tenham sido aprovados nos pontos de inspeção e testes
durante o processo de montagem, sendo que os dados adquiridos durante o
processo de montagem do produto, tais como resultados dos testes são
armazenados em um banco de dados para consultas posteriores.
Palavras chaves: Rastreabilidade, RFID, Wireless e ZigBee
LISTA DE ILUSTRAÇÕES
Figura 1: Diagrama em Blocos do Sistema de Rastreabilidade.................................16
Figura 2: Esquemática do Sistema Básico de RFID...................................................22
Figura 3: Posicionamento do Padrão ZigBee.............................................................24
Figura 4: Camadas de protocolos ZigBee...................................................................26
Figura 5: Diagrama de bloco Geral.............................................................................28
Figura 6: Tag AcuProx ...............................................................................................31
Figura 7: Descrição dos pinos de conexão do PIC18F452.........................................34
Figura 8: Diagrama de caso de uso geral...................................................................38
Figura 9: Diagrama de caso de uso comunicação......................................................38
Figura 10: Diagrama de caso de uso comunicação....................................................39
Figura 11: Diagrama de caso de uso IHM..................................................................39
Figura 12: Diagrama de caso de uso consulta e inclusão banco de dados...............40
Figura 13: Desenvolvimento em Laboratório..............................................................41
Figura 14: Kit PIC Genios............................................................................................42
Figura 15: Tela 1 do LCD (Tela Inicial) ......................................................................43
Figura 16: Tela 2 do LCD (Digite a opção do menu) .................................................44
Figura 17: Tela 3 do LCD (Digite o código do operador) ...........................................44
Figura 18: Tela 4 do LCD (Digite o código da estação de trabalho) ..........................45
Figura 19: Tela 5 do LCD (Digite o código do operador) ...........................................45
Figura 20: Testes usando o software RCom Serial ...................................................46
Figura 21: Sinais recebidos na interrupção RB0 do PIC 18F452 atraves do
osciloscopio.................................................................................................................47
Figura 22: Configuração dos Módulos Xbee usando o Software X-CTU ..................48
Figura 23: placa CON-USBBEE .................................................................................49
Figura 24: Botão Reset e LEDs indicadores da placa CON-USBBEE.......................49
Figura 25: Circuito em protoboard em testes..............................................................50
Figura 26: Tela 6 do LCD (Visulalizacao dos dados sendo enviados ao Gerenciador
do Sistema de Rastreabilidade) .................................................................................51
Figura 27: Circuito final em placa definitiva................................................................52
.....................................................................................................................................52
Figura 28: Produto final ( Apresentação IV Painel de Engenharia 2009)...................53
Figura 29: Sistema de Rastreabilidade ......................................................................53
Figura 30: Tela de Consulta do Sistema de Rastreabilidade ...................................54
Figura 31: Estrutura do programa no diretório do servidor.........................................55
Figura 31: Modelagem dos dados Django..................................................................56
LISTA DE TABELAS
Tabela 1: Tabela de conexões do leitor......................................................................33
Tabela 2: Tabela de conexões de saída serial RS232 padrão ASCII.......................33
Tabela 3: Característica do LCD................................................................................36
Tabela 4: especificações dos custos..........................................................................57
Tabela 5: Tabela de Comunicação PC - PIC .............................................................60
Tabela 6: Tabela de Comunicação PC - PIC .............................................................60
LISTA DE ABREVIATURAS
ISO - International Organization for Standardization
RFID - radio frequency identification
RF - Radio frequency
WLAN - Wireless Local Area Network
WMAN -Wireless Metropolitan Area Network
WWAN - Wide Area Network
TAG - etiqueta RFID
WPAN - Wireless Personal Area Network
PAN - Personal Area Network
IEEE - Institute of Electrical and Eletronics Engineers
PC - Personal Computer
LCD - liquid crystal display
NBR - norma da Associação Brasileira de Normas Técnicas
EPC - Electronic Product Code
SUMÁRIO
1 INTRODUÇÃO.......................................................................................................12
1.1 PROBLEMA.....................................................................................................14
1.2 JUSTIFICATIVA...............................................................................................14
1.3 OBJETIVOS ESPECÍFICOS...........................................................................15
2 FUNDAMENTAÇÃO TEÓRICA..............................................................................17
2.1 RASTREABILIDADE.......................................................................................17
2.2 CARTAS DE CONTROLE DE PROCESSO...................................................18
2.3 SOFTWARE PARA RASTREABILIDADE.......................................................18
2.3.1 Nível de programação e manutenção.......................................................18
2.3.2 Nível de usuário........................................................................................19
2.4 TECNOLOGIA RFID........................................................................................20
2.4.1 RFID - Identificação por Radiofrequência.................................................20
2.4.2 Utilização...................................................................................................21
2.4.3 Processo de Comunicação.......................................................................21
2.4.4 Componentes da RFID.............................................................................21
2.4.5 Faixas de Frequência................................................................................22
2.5 TECNOLOGIA ZIGBEE...................................................................................23
2.5.1 Wireless.....................................................................................................23
2.5.2 ZigBee.......................................................................................................24
2.5.3 Características do Padrão ZigBee............................................................25
2.5.4 Camadas de Protocolos............................................................................25
2.5.5 Segurança.................................................................................................27
2.5.6 Tipos de Tráfego.......................................................................................27
3 ESPECIFICAÇÃO TÉCNICA.................................................................................28
3.1 VISÃO GERAL DO PROJETO........................................................................28
3.1.1 Tag............................................................................................................29
3.1.2 Leitor de rádio freqüência.........................................................................29
3.1.3 Microcontrolador.......................................................................................29
3.1.4 Dispositivos de Entrada............................................................................29
3.1.5 Dispositivo de Saída.................................................................................29
3.1.6 Software de aquisição e processamento dos dados................................30
3.1.7 Banco de dados........................................................................................30
3.2 DESCRIÇÃO FUNCIONAL DOS BLOCOS....................................................30
3.2.1 Tag............................................................................................................30
3.2.2 Leitor por rádio frequência........................................................................32
3.2.3 Microcontrolador.......................................................................................33
3.2.4 Dispositivos de Entrada e Saída...............................................................34
3.2.5 Software de aquisição e processamento de dados..................................35
3.2.6 Banco de dados........................................................................................35
3.3 DIMENSIONAMENTO E MEMORIAL DE CÁLCULO.....................................35
3.3.1 Circuito regulador de tensão.....................................................................35
3.3.2 Circuito do microcontrolador.....................................................................36
3.3.3 Circuito do leitor por rádio freqüência.......................................................36
3.4 PROGRAMAÇÃO............................................................................................37
3.4.1 Descrição Geral........................................................................................37
3.5 Planejamento...................................................................................................37
3.5.1 Diagramas de caso de uso.......................................................................38
3.5.1.1 Caso de uso geral..............................................................................38
3.5.1.2 Caso de uso Comunicação................................................................38
3.5.1.3 Caso de uso leitura Tag.....................................................................38
3.5.1.4 Caso de uso Interface IHM.................................................................39
3.5.1.5 Caso de uso consulta, inclusão Banco de dados..............................39
4 IMPLEMENTAÇÂO................................................................................................41
4.1 DESCRIÇÃO DA MONTAGEM.......................................................................41
4.2 TESTES, MEDIÇÕES E CONFIGURAÇÕES.................................................42
4.2.1 Testes com o Kit PicGenios......................................................................42
4.2.2 Construção dos menus de navegação usando a IHM (Teclado Matricial e
LCD).....................................................................................................................43
4.2.3 Testes com o RFID...................................................................................45
4.2.4 Testes com os módulos wireless Xbee....................................................47
4.2.5 Testes e montagem em protoboard..........................................................50
4.2.6 Testes de interface IHM e Gerenciador....................................................51
4.2.7 Testes e montagem do hardware definitivo..............................................52
4.3 SOFTWARE DO PIC E APLICAÇÃO..............................................................54
4.3.1 Estrutura do Programa do PIC18F452.....................................................54
4.3.2 Código Fonte do PIC18F452....................................................................54
4.3.3 Estrutura do Programa da Aplicação........................................................55
4.3.4 Código Fonte da Aplicação ......................................................................57
4.4 CUSTOS DO PROJETO.................................................................................57
4.5 COMPONENTES E MATERIAIS.....................................................................57
5 RESULTADOS.......................................................................................................58
5.1 Leitura da Tag – RFID ....................................................................................58
5.2 Microcontrolador PIC 18F452..........................................................................58
5.3 Display e Teclado............................................................................................59
5.4 Comunicação Wireless....................................................................................59
5.5 Software e Banco de Dados............................................................................59
6 CONSIDERAÇÕES FINAIS E CONCLUSÕES.....................................................61
7 REFERENCIAS.....................................................................................................63
1
INTRODUÇÃO
O sistema de rastreabilidade visa garantir que todos os produtos fabricados
na linha de montagem tenham sido aprovados nos pontos de inspeção e testes
durante o processo de montagem, sendo que os dados adquiridos durante o
processo de montagem do produto, tais como resultados dos testes serão
armazenados para consulta posteriores. Para a norma ISO 9000 existe o critério de
normalização e uma organização deve seguir alguns passos e atender a alguns
requisitos para serem certificadas. Um requisito entre vários outros é implementar e
manter os registros adequados e necessários para garantir a rastreabilidade do
processo. ISO (2007).
A tecnologia de RFID (Radio Frequency Identification – identificação por
radiofreqüência) nada mais é do que um termo genérico para as tecnologias que
utilizam a freqüência de rádio para captura de dados de identificação. Por isso
existem diversos métodos de identificação, mas o mais comum é armazenar um
número de série que identifique uma pessoa ou um objeto, ou outra informação, em
um microchip. Tal tecnologia permite a captura automática de dados, para
identificação de objetos com dispositivos eletrônicos, conhecidos como etiquetas
eletrônicas, tags, RF tags ou transponders, que emitem sinais de radiofreqüência
para leitores que captam estas informações. Ela existe desde a década de 40 e veio
para complementar a tecnologia de código de barras, bastante difundida no mundo.
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO (2009).
A comunicação sem fio (ou wireless) já está inclusa na sociedade há anos
como as redes WLANs, WMANs, WWANs, todas voltadas para usuários finais de
pequenas, médias e grandes empresas, onde o objetivo é a transferência de
grandes volumes de dados e voz em altas velocidades. São poucas as Redes
wireless destinadas exclusivamente ao controle de dispositivos como relês, trancas
eletromagnéticas, ventilação, aquecimento, motores, eletrodomésticos, brinquedos,
aquisição de dados de sensores, como temperatura, luminosidade, umidade,
pressão etc. WPAN (wireless PAN, wireless personal area network) está
normalmente associada ao Bluetooth. Pode ser vista com a interação entre os
12
dispositivos móveis de um usuário. A WPAN é projetada para pequena distância,
baixo custo e baixas taxas de transferência. Dentre as Redes WPAN (Wireless
Personal Área Network) existentes, a mais recente e promissora é a que usa o
padrão ZigBee IEEE 802.15.4. A ZigBee Alliance é quem desenvolve o padrão
ZigBee junto ao IEEE (Institute of Electrical and Eletronics Engineers), através da
associação de várias empresas, que juntas, trabalham em conjunto para
proporcionar e desenvolver tecnologias para criar um padrão de baixo consumo de
energia, baixo custo, segurança, confiabilidade, e com funcionamento em rede sem
fios baseado em uma norma aberta global. ROGERCOM (2009).
A integração dos Sistemas de Gerenciamento de Bancos de Dados (SGBDs)
com a Web vem sendo impulsionada pela grande expansão da tecnologia Web nos
últimos anos aliada à demanda por mais informações e por formas mais eficientes
para busca e armazenamento de dados. Como vantagens da integração, tem-se que
os SGBDs acrescentam à Web mecanismos operacionais eficientes e robustos para
o acesso e manutenção e;o da consistência dos dados. Surgiram, porém, inúmeros
problemas técnicos decorrentes do uso conjunto das duas tecnologias. A
compatibilidade entre elas é implementada em produtos de software chamados
gateways, cuja função é interfacear o ambiente Web com os SGBDs, permitindo que
as aplicações lancem mão dos recursos desenvolvidos isoladamente em cada um
deles. As arquiteturas de integração (i.e., os gateways) apresentam uma grande
diversidade de características e funcionalidades quando comparadas segundo
critérios de local de execução (cliente, servidor Web, servidor de Banco de Dados);
desempenho; facilidade para o desenvolvimento das aplicações e portabilidade;
aspectos transacionais; reaproveitamento de sistemas legados. A análise do
software integrador segundo esses parâmetros irá determinar a sua adequação ao
ambiente operacional particular da Organização. BARROSO(2009)
No presente trabalho é proposto o desenvolvimento de um sistema que utilize
a tecnologia RFID para ler o código de identificação do produto nos diversos pontos
de inspeção e teste, essa transmissão e recepção dos dados ocorrem entre a
IHM(Interface homem máquina) e o servidor, através da tecnologia das redes ZigBee
(rede wireless) onde é realizado o processamento da informação gerado pelo RFID
13
na IHM e encaminhado para o servidor, após a verificação no banco de dados é
retornado esta informações para a IHM, que fica responsável de mostrar o resultado
para o usuário e obter dados referente a rastreabilidade assim garantir que o produto
passou por todos os testes de qualidade estando pronto para ser comercializado.
1.1
PROBLEMA
A evolução do chão-de-fábrica tem sido significativa nas últimas décadas,
quando grandes investimentos têm sido realizados em infra-estrutura, automação,
treinamento e sistemas de informação, transformando-o numa área estratégica para
as empresas. O chão-de-fábrica gera hoje grande quantidade de dados que, por
estarem dispersos ou desorganizados, não são utilizados em todo o seu potencial
como fonte de informação. SCIELO (2009).
A falta de registros adequados dificulta a rastreabilidade do processo nas
fábricas nos dias de hoje, assim ocorre uma redução na qualidade do produto
processado e como conseqüência aumento do custo final.
1.2
JUSTIFICATIVA
Com um Sistema de Rastreabilidade é possível organizar estes dados
obtendo informações proporcionando maior agilidade na entrada do processo e
podendo-se rapidamente tomar ações corretivas necessárias, gerando-se também
históricos e facilidade na recuperação das mesmas para futuras consultas.
Isto pode permitir a redução dos custos de fabricação, pois quanto antes os
problemas são resolvidos durante os processos, menores serão os custos,
diminuindo-se perdas, retrabalhos, horas extras desnecessárias e aumentando-se a
produtividade.
A identificação dos funcionários que atuam no processo também é importante,
como por exemplo, se está ocorrendo um erro na montagem em um determinado
posto de trabalho, no primeiro turno das 8 às 9 horas, pode-se através do cadastro
no banco de dados identificarem o funcionário, verificar o que está acontecendo e
treiná-lo para que o problema não ocorra mais.
14
Com relação à segurança, todo produto defeituoso pode representar um sério
risco na utilização pelo usuário e como tanto deve ser imediatamente recolhidos ou,
por exemplo, se fazer um recall, portanto ter estas informações e uma rápida
identificação dos produtos pode evitar custos matérias e humanos.
1.3
OBJETIVOS ESPECÍFICOS
Estudo de caso numa linha de processo de refrigeradores, para implementar
o Sistema de Rastreabilidade.
•
Pesquisa sobre Rastreabilidade de Processos aplicados a Indústria.
•
Desenvolvimento do modelo básico do Sistema de Rastreabilidade
•
Apresentar uma solução de implementação um Sistema de Rastreabilidade
de Processos.
•
Estudo de tecnologias de identificação por radiofreqüência RFID;
•
Estudo da Tecnologia Wireless padrão ZigBee;
•
Desenvolvimento de um software para o Sistema de Rastreabilidade usando
Banco de Dados;
•
Projeto de um módulo microcontrolado coletor de dados através de
identificação por radiofreqüência RFID, com transmissão Wireless para um
PC, contendo uma interface Homem Máquina com Display de LCD e teclado.
A figura 1 representa através de diagramas os blocos do sistema de
rastreabilidade, apresentando de maneira simplificada como os módulos estão
dispostos e como são utilizados no projeto.
15
Figura 1: Diagrama em Blocos do Sistema de Rastreabilidade
Fonte: Própria
16
2
FUNDAMENTAÇÃO TEÓRICA
2.1
RASTREABILIDADE
De acordo com a NBR ISO 9001-2000 rastreabilidade é a “capacidade de
recuperar o histórico, a aplicação ou a localização daquilo que está sendo
considerado”.
Vê-se na grande maioria das empresas, que muitos processos são
burocráticos e que estão parcialmente informatizados gerando gráficos e
estatísticas, mas que não são dadas as tratativas adequadas para apresentar
propostas, ações e soluções imediatas. Segundo a NBR ISO 9001-2000 processo é
definido como "conjunto de atividades inter-relacionadas ou interativas que
transforma insumos (entradas) em produtos (saídas)”.
Com crescimento acelerado dos recursos tecnológicos torna-se possível
agrupar estas informações através de softwares de gerenciamento e disponibilizálas em um banco de dados. Com um Sistema de Rastreabilidade é possível
organizar estes dados obtendo informações proporcionando maior agilidade na
entrada do processo e podendo-se rapidamente tomar ações corretivas necessárias,
gerando-se também históricos e facilidade na recuperação das mesmas para futuras
consultas. Este ciclo pode ser definido como PDCA, segundo Slack (2002) “PDCA é
a sequência de atividades que são percorridas de maneira cíclica para melhorar
atividades” a sigla PDCA significa:
Plan = Planejamento: definir atividades e metas;
Do = Execução: treinar e executar as atividades;
Check = Verificação: medir os resultados das atividades
Act = Ação: corrigir, aprender e melhorar.
O Projeto visa a automatização da coleta dos dados em cada estação, não
somente a utilização do sistema de rastreabilidade como uma ferramenta gerencial,
mas, principalmente, como uma ferramenta de gestão para solucionar os problemas
de Produção, de Qualidade, Produtividade e de Manufatura, através da visualização
simultânea dos acontecimentos com histórico e estatísticas das principais não
17
conformidades ocorridas durante o processo de fabricação e pós-venda.
Com a implantação do sistema de rastreabilidade haverá um aumento na
qualidade do produto final. Segundo Feigenbaum (1994) apud Rossato (1996, p21).:
"qualidade é a correção dos problemas e de suas causas ao longo de toda a série
de fatores relacionados com marketing, projetos, engenharia, produção e
manutenção, que exercem influência sobre a satisfação do usuário".
2.2
CARTAS DE CONTROLE DE PROCESSO
Dentre o conjunto de técnicas disponíveis para monitorar o processo
produtivo, as mais usadas são os gráficos de controle, técnicas que fornecem
informações sobre um determinado processo, baseado em amostras periodicamente
coletadas deste processo. Os gráficos de controle auxiliam na melhoria da qualidade
contínua do produto, mostrando, quando necessário, ações no processo que já está
sendo monitorado. O objetivo é o conhecimento do processo quando se deseja
saber se o processo esta ou não sob controle.
Segundo Montgomery (1996, p43), “os gráficos de controle são uma das
ferramentas mais importantes para a estabilização de processos industriais”.
2.3
SOFTWARE PARA RASTREABILIDADE
O software para sistema de rastreabilidade deve oferecer recursos que
otimizem tempo de desenvolvimento e manutenção dos sistemas. As necessidades
podem ser divididas em duas partes: (1) nível de programação e manutenção (2)
nível de usuário. (Elipse Scada, 2009)
2.3.1
Nível de programação e manutenção
•
Interface clara, lógica e intuitiva;
•
Conectividade com a maioria dos equipamentos disponíveis no mercado ou
mesmo com outros aplicativos;
•
Biblioteca gráfica para criação de telas; Suporte à rede e arquitetura cliente /
18
servidor;
•
Configuração e reconhecimento de alarmes;
•
Relatórios formatados, graficamente customizados pelo usuário;
•
Registro de dados em disco e análise histórica;
•
Receitas que permitem a programação de valores para o envio ao processo;
•
Scripts que permitem a criação de rotinas exclusivas, definindo lógicas e
criando seqüências de atitudes através de uma linguagem de programação
interativa, personalizando ao máximo o aplicativo;
•
Suporte a banco de dados - Access, SQL Server, Oracle, dBase, etc.;
•
CEP (Controle Estatístico de Processos);
•
Módulo matemático para a formulação de equações;
•
Controle de acesso por nível de usuário;
•
Acesso remoto via Internet;
•
Captura, registro e transmissão digital de imagens;
•
Aquisição de eventos com precisão;
2.3.2
Nível de usuário
Referente ao nível de usuário deve ser observado os seguintes fatores para
que atenda as necessidades:
•
O software de rastreabilidade deve ser de fácil entendimento, fácil para
trabalhar, não causando medo aos usuários;
•
Devem ser de fácil manutenção, atualização e ter bom suporte técnico;
Telas e informações devem ser padronizadas em todos os pontos de
teste;
•
Deve ser criado um padrão de número para todos os pontos de teste,
por exemplo, o número 1 refere-se a vazamento;
•
O software deve mostrar na tela do computador um layout indicando a
localização de todos os pontos de teste;
•
Níveis de acesso ao programa e registros através de senha ou
19
matrícula dos funcionários;
•
Registro de não conformidade e recuperação de produtos por hora,
dia, mês, ano, turno e funcionário.
•
Registro de alterações e falhas no sistema;
•
Prever possibilidade para exclusão/inclusão de determinado teste;
•
Prever possibilidade de liberação de determinado teste indicando
liberação forçada através de código caso não consiga comunicação
com o teste anterior;
•
Procura de produto com impressão de gráfico de não conformidades;
•
Procura de produto através do teclado, sem leitura do código de
barras;
•
Medição da produção horária instantânea e acumulada nos diferentes
leitores;
•
Levantamento dos produtos faltantes para acompanhamento do
fechamento das ordens de produção.
2.4
TECNOLOGIA RFID
2.4.1
RFID - Identificação por Radiofrequência
RFID é a abreviação de Radio Frequency Identification – Identificação por
Radiofrequência. Diferentemente do feixe de luz utilizado no sistema de código de
barras para captura de dados, essa tecnologia utiliza a freqüência de radio.
Na década de 1980, o Massachusetts Institute of Technology (MIT),
juntamente com outros centros de pesquisa, iniciou o estudo de uma arquitetura que
utilizasse os recursos das tecnologias baseadas em radiofrequência para servir
como modelo de referência ao desenvolvimento de novas aplicações de
rastreamento e localização de produtos. Desse estudo, nasceu o Código Eletrônico
de Produtos - EPC (Electronic Product Code). O EPC definiu uma arquitetura de
identificação de produtos que utilizava os recursos proporcionados pelos sinais de
20
radiofrequência, chamada posteriormente de RFID (Radio Frequency Identification).
(ACURA TECHNOLOGIES, 2009)
2.4.2
Utilização
A necessidade de captura das informações de produtos que estivessem em
movimento incentivou a utilização da radiofreqüência em processos produtivos.
Essa tecnologia facilita o controle do fluxo de produtos por toda a cadeia de
suprimentos de uma empresa, permitindo o seu rastreamento desde a sua
fabricação até o ponto final da distribuição. Tal tecnologia utiliza as Etiquetas
Inteligentes – etiquetas eletrônicas com um microchip instalado que são colocadas
nos produtos. Esse produto pode ser rastreado por ondas de radiofrequência
utilizando uma resistência de metal ou carbono como antena.
2.4.3
Processo de Comunicação
As Etiquetas Inteligentes são capazes de armazenar dados enviados por
transmissores. Elas respondem a sinais de rádio de um transmissor e enviam de
volta informações quanto a sua localização e identificação. O microchip envia sinais
para as antenas, que captam os dados e os retransmitem para leitoras especiais,
passando em seguida por uma filtragem de informações, comunicando-se com os
diferentes sistemas da empresa, tais como Sistema de Gestão, Sistema de
Relacionamentos com Clientes, Sistemas de Suprimentos, entre outros.
Esses sistemas conseguem localizar em tempo real os estoques e
mercadorias, as informações de preço, o prazo de validade, o lote, enfim, uma gama
de informações que diminuem o processamento dos dados sobre os produtos
quando encontrados na linha de produção.
2.4.4
Componentes da RFID
O sistema RFID e composto basicamente por três componentes: dispositivo
de leitura, transponder e computador, que estão arranjados conforme a Figura 2
21
Figura 2: Esquemática do Sistema Básico de RFID
Fonte: http://www.hightechaid.com/tech/rfid/rfid_technology.htm
O dispositivo de leitura e responsável pela emissão de um campo
eletromagnético que alimenta o transponder, que, por sua vez, responde ao
dispositivo de leitura com o conteúdo de sua memória. Os dados provenientes do
transponder são encaminhados para o computador, onde e realizado o
processamento de acordo com a aplicação em questão.
O transponder, também conhecido como tag, e um dispositivo que contém a
informação (seja ela, 1 bit ou n bit). O transponde funciona como uma carteira de
identidade, porém faz uso de dispositivos eletrônicos (memória, processador,
resistores, capacitores e indutores) para guardar uma informação ou gerar um sinal.
Atualmente, os transponder estão disponíveis em diversos formatos, tais como
cartões, pastilhas e argolas, e em materiais como plástico, vidro, epoxi etc. Estão
classificados em duas categorias:
•
Ativos, que fazem uso de fonte de alimentação própria.
•
Passivos, que utilizam a energia proveniente do dispositivo de leitura para o
seu funcionamento.
2.4.5
Faixas de Frequência
Os sistemas de RFID são definidos pela faixa de frequência que operam. Os
Sistemas de Baixa Freqüência vão de 30KHz a 500KHz e servem para curta
distância de leitura. Tendo um baixo custo operacional, esses sistemas são
22
utilizados em controles de acesso, identificação e rastreabilidade de produtos, entre
outras coisas.
Os Sistemas de Alta Freqüência vão de 850MHz a 950MHz e de 2,4GHz a
2,5GHz e serve para leitura em média e longas distâncias e leituras a alta
velocidade. São utilizados em veículos e para coleta automática de dados.
2.5
TECNOLOGIA ZIGBEE
2.5.1
Wireless
Um número cada vez maior de usuários de redes de computadores tem
optado por soluções baseadas em topologias sem fio (wireless), ao invés de redes
com cabeamento convencional, especialmente quando se trata de ampliação ou
melhoria de uma rede existente.
Os avanços recentes das tecnologias de redes sem fio possibilitaram o
surgimento de várias alternativas e padrões de implementação, mas até
recentemente a grande maioria tinha como premissa principal prover um conjunto de
protocolos que garantissem a qualidade para a transmissão de voz ou de dados com
altas taxas de transferência, o que tornava os equipamentos bastante caros e pouco
atraentes para outras aplicações mais simples.
Ainda são poucos os padrões de redes sem fio para aplicações em redes
locais utilizando sensores e outros dispositivos do controle. O que temos são
basicamente sistemas proprietários, desenvolvidos para atender redes específicas,
como as redes de automação industrial, por exemplo, onde aplicações com sensores
(de temperatura, de umidade, gases, etc) e dispositivos de controle (chaves, relés,
etc) não necessitam de uma largura de banda elevada para funcionarem, mas
necessitam de uma latência baixa e consumo de energia igualmente baixo para
preservar a vida útil das baterias. Nesses casos, os sistemas wireless foram
projetados para atenderem às exigências específicas dessas aplicações.
23
2.5.2
ZigBee
ZigBee é um padrão que será definido por uma aliança de empresas de
diferentes segmentos do mercado, chamada "ZigBee Alliance". Este protocolo está
sendo projetado para permitir comunicação sem fio confiável, com baixo consumo
de energia e baixas taxas de transmissão para aplicações de monitoramento e
controle. Para implementar as camadas MAC (Medium Access Control) e PHY
(Physical Layer) o ZigBee utiliza a definição 802.15.4 do IEEE, que opera em
bandas de freqüência livres.
Atualmente, existem diversos padrões que definem transmissão em médias e
altas taxas para voz, vídeo, redes de computadores pessoais, entre outros.
Entretanto, até o presente momento ainda não surgiu um padrão que esteja de
acordo com as necessidades únicas da comunicação sem fio entre dispositivos de
controle e sensores.
Os principais requisitos deste tipo de rede são baixa latência, otimização para
baixo consumo de energia, possibilidade de implementação de redes com elevado
número de dispositivos e baixa complexidade dos nós de rede.
A figura 3, ilustra o posicionamento do padrão ZigBee no mercado de
tecnologia "Wireless".
Figura 3: Posicionamento do Padrão ZigBee
Fonte:
http://www2.eletronica.org/artigos/eletronica-digital/as-redes-com-
zigbee
24
2.5.3
Características do Padrão ZigBee
O padrão ZigBee (IEEE 802.15.4) foi projetado objetivando apresentar as
seguintes características:
Consumo de potência baixo e implementação simples, com interfaces de
baixo custo;
Dois estados principais de funcionamento: "active" para transmissão e
recepção e "sleep", quando não está transmitindo;
Simplicidade de configuração e redundância de dispositivos (operação
segura);
Densidade elevada dos nós por rede. As camadas PHY e MAC permitem que
as redes funcionem com grande número de dispositivos ativos. Este atributo é crítico
para aplicações com sensores e redes de controle;
Protocolo simples que permite a transferência confiável de dados com níveis
apropriados de segurança.(ZIGBEE ALLIANCE, 2009)
2.5.4
Camadas de Protocolos
A publicação do padrão IEEE 802.15.4, definiu interfaces com baixas taxas de
transmissão (menores que 250Kbps) e estabeleceu uma estrutura de rede que
incorpora os conceitos de redes ad hoc, características de conexão em malha e em
multi-hop (múltiplos saltos). Adicionalmente, novos algoritmos de segurança e perfis
de aplicação foram definidos objetivando garantir a segurança e a perfeita interação
entre os diversos equipamentos.
25
Figura 4: Camadas de protocolos ZigBee
Fonte:
http://www2.eletronica.org/artigos/eletronica-digital/as-redes-com-
zigbee
A camada física (PHY) foi projetada para acomodar as necessidades de
interfaces de baixo custo, permitindo níveis elevados de integração. O uso da
técnica de transmissão de Seqüência Direta (DSS) permite que os equipamentos
sejam muito simples, possibilitando implementações mais baratas.
A camada do Media Access Control (MAC) foi projetada para permitir
topologias múltiplas com baixa complexidade, onde o gerenciamento de energia, por
exemplo, não requer modos de operação complexos. A camada MAC também
permite que um dispositivo com funcionalidade reduzida (RFD) opere na rede sem a
necessidade de grandes quantidades de memória disponíveis, podendo controlar
também um grande número de dispositivos sem a necessidade de colocá-los "em
espera", como ocorre em algumas tecnologias sem fio.
A camada de rede foi projetada para possibilitar o crescimento da rede sem a
necessidade de equipamentos de transmissão de potência mais elevada. A camada
de rede também pode operar quantidades grandes de nós de rede com latências
relativamente baixas.
A camada NWK utiliza um algoritmo que permite implementações da pilha de
26
protocolos visando balancear os custos das unidades em aplicações específicas, o
consumo das baterias, buscando produzir soluções com o perfil específico de custodesempenho para a aplicação.
2.5.5
Segurança
O padrão ZigBee adotou a proposta de um novo algoritmo de segurança,
baseado na simplificação do algoritmo de roteamento AODV (Ad-hoc On-demand
Distance Vector). Esta proposta foi adotada como parte da especificação IEEE
802.15.4.
A camada MAC utiliza o padrão AES (Advanced Encryption Standard) como
seu algoritmo de criptografia, descrevendo uma variedade de rotinas de segurança.
Estas rotinas têm como objetivo prover a confidencialidade, a integridade e a
autenticidade dos frames da camada MAC. A camada MAC faz o processamento de
segurança, mas são as camadas superiores que controlam o processo, ajustando as
chaves de criptografia e determinando os níveis de segurança que deverão ser
usados. Quando a camada MAC transmite (ou recebe) um frame, verifica o destino
(a fonte do frame), recupera a chave associada com esse destino (fonte), e usa
então esta chave para processar o frame de acordo com a rotina de segurança
designada para a chave que está sendo usada. Cada chave é associada a uma
única rotina de segurança e o cabeçalho do frame MAC possui um bit que especifica
se a segurança para o frame está habilitada ou não.
2.5.6
Tipos de Tráfego
O padrão suporta diferentes tipos de tráfego de dados que exigem atributos
diferentes da camada MAC. O MAC IEEE 802.15.4 é flexível o bastante para
assegurar o transporte de cada um dos tipos de tráfego como;
•
Dados periódicos, provenientes de sensores;
•
Dados intermitentes, provenientes de interruptores e chaves;
•
Dados provenientes de dispositivos repetitivos de baixa latência.
27
3
ESPECIFICAÇÃO TÉCNICA
Neste capítulo, será apresentado visão geral do Projeto, descrição funcional
dos blocos, dimensionamento e memorial de cálculo e circuitos preliminares.
3.1
VISÃO GERAL DO PROJETO
A figura 5 representa através de diagrama como estão dispostos os modulos.
Figura 5: Diagrama de bloco Geral
Fonte: Própria
28
3.1.1
Tag
O sistema é composto por tags que estão fixadas nos refrigeradores sobre os
quais deseja efetuar a rastreabilidade. Estas tags fazem comunicação identificando
o objeto, enviando um sinal para o leitor.
3.1.2
Leitor de rádio freqüência
A comunicação entre a tag e o leitor por radio freqüência é através de ondas
eletromagnéticas que são emitidas pelo leitor induzindo desta forma a tag que
retorna através deste mesmo princípio o dado gravado em sua memória. Este dado
é decodificado pelo leitor e enviado para o microcontrolador através da comunicação
serial RS232.
3.1.3
Microcontrolador
O microcontrolador é responsável por receber o sinal do leitor, cria uma
interface com o software de aquisição de dados e controla dispositivos de entrada e
saída.
A interface entre o microcontrolador atua nos dispositivos de saída fazendo uso das
saídas digitais que este contém.
3.1.4
Dispositivos de Entrada
Os dispositivos de entrada são responsáveis pela inclusão do registro (código
da falha) pelo operador na linha de produção, através de um teclado.
3.1.5
Dispositivo de Saída
Os dispositivos de Saída são responsáveis pela visualização dos registros
para verificar se o produto esta dentro da norma da rastreabilidade, através de um
visor LCD.
29
3.1.6
Software de aquisição e processamento dos dados
Coleta informações disponibilizadas pelo leitor e realiza o registro do código
das tags, determinando onde o refrigerador esta e para onde ele deve ir.
A comunicação entre o software de aquisição de dados é através de TCP/IP.
3.1.7
Banco de dados
Responsável por armazenar as informações da rastreabilidade de processo.
Estão registrados: os operadores, e os códigos das tags dos refrigeradores e a ponto
de teste que o refrigerador se encontra.
3.2
DESCRIÇÃO FUNCIONAL DOS BLOCOS
3.2.1
Tag
A tag utilizada para identificação dos refrigeradores é a etiqueta AcuProx
Clear Disc Unique 30mm adesivada do fabricante Acura Technologies. Este modelo
de tag é adotado, pois é especifico para alocação interna ao equipamento sem
conexões elétricas com o mesmo. O material que faz proteção mecânica do circuito
emissor é o polietileno com poliéster. Esta tag pode ser aplicada a uma faixa de
temperatura de operação entre -20°C a +60°C e possui formato circular com
diâmetro 30mm, conforme ilustrado na figura 6.
30
Figura 6: Tag AcuProx
Fonte: Acura Technologies Ltda – Especificação técnica disponível no site
http://www.acura.com.br
A freqüência de operação utilizada pela tag é 125kHz. Esta faixa estipulada
pela ANATEL, de acordo com a resolução 365 (10 de maio de 2004), 237 e 238. O
sistema é classificado é então classificado como: equipamento de radiocomunicação
de radiação restrita [Fonte: www.anatel.gov.br, Maio 2009]
A tag possui capacidade de 64 bits de memória do tipo leitura comumente
chamada UNIQUE, ou seja, não possibilita a gravação de dados na mesma.
A tag é alimentada através de uma tensão induzida e captada pela antena
receptora da tag através do campo magnético, este sinal é então retificado através
de uma ponte retificadora de onda completa e disponibilizado para alimentar o
circuito. Parte da alta freqüência (125kHz) captada pela antena é direcionada para o
divisor de tempo, responsável por gerar o sinal em conjunto com dados
armazenados na memória EEPROM que contém a informação transmitida pelo
leitor.
A estrutura das memórias das tags é constituída de acordo com cada
fabricante. A transmissão começa com uma seqüência de nove bits “1” chamada de
cabeçalho, todos programados de fabrica, seguido de um bit de parada com nível
lógico “0”. É importante ressaltar que esta sequência de nove bits “1” seguidos dos
31
bits “0” não pode ser utilizada nos bits de dados, para evitar que o receptor
considere o fim da transmissão. Logo após o cabeçalho são representados os bits
que identificam o cliente sendo eles transmitidos de D00 a D03 em seguida é
acrescentado um bit de paridade P0, logo em seguida é enviado os restantes dos
bits que identificam os clientes e após isto é transmitido o segundo bit de paridade
P1. Para os dados de identificação são reservados 32 bits divididos em oito grupos
de quatro bits de dados e em seguida um bit de paridade.
A capacidade de combinação desta informação é 232 resultado num total de
4,294,967,296 combinações disponíveis. Quatro colunas de bits de paridade
seguidos de um bit de parada com nível lógico “0” encerram a transmissão da tag
para o leitor.
3.2.2
Leitor por rádio frequência
O leitor por radio freqüência tem função de emitir ondas eletromagnéticas
para alimentar o circuito tag que retorna o dado nela gravado; em seguida o leitor
recebe os dados e disponibiliza-os de maneira segura ao microcontrolador. O leitor
utilizado é o modulo RFID AP-20, que opera com freqüência de 125 kHz, compatível
com as tags definidas para identificação dos refrigeradores. Esta frequência é
especifica para aplicações como esta, em que a distância não ser muito longa. Outra
vantagem desta faixa de frequência é baixo custo da tag por ser geralmente
somente de leitura e também ser passiva ao invés de ativa; isto significa que a tag
não necessita ser alimentada por baterias ou pilhas.
A sua alimentação é através de uma fonte de tensão de 12 V, conforme
indicado na tabela 1, e a interface utilizada é a comunicação serial com o padrão
ASCII indicada na tabela 2.
32
Tabela 1: Tabela de conexões do leitor
Fonte: Acura Technologies Ltda – Especificação técnica disponível no site
http://www.acura.com.br
Tabela 2: Tabela de conexões de saída serial RS232 padrão ASCII
Fonte: Acura Technologies Ltda – Especificação técnica disponível no site
http://www.acura.com.br
3.2.3
Microcontrolador
A escolha do microcontrolador foi em função do número de portas
necessárias para interface homem máquina (IHM) com teclado e display e uma porta
33
serial para comunicação com Servidor. Outro fator importante é que a placa de
prototipação escolhida da Microgenios usa o PIC 18F452.
O microcontrolador atua como interface entre o software de aquisição de
dados e o leitor por radio freqüência.
Este dispositivo recebe os dados do leitor
AP-09 em formato RS232 / TTL após conversão por um circuito Max 232, através da
porta INT 0, no pino 33 ( interrrupção 0) e disponibiliza estas informações para o
software de aquisição de dados que efetua uma busca no banco de dados para
verificar se o registro esta no ponto da linha de produção correto.
Ver detalhes no anexo 1, circuito.
Figura 7: Descrição dos pinos de conexão do PIC18F452
Fonte: Datasheet Microchip Technology Inc. 2004
3.2.4
Dispositivos de Entrada e Saída
34
Os dispositivos a serem controlados no nosso projeto são um teclado
matriciais de 12 teclas matriciais e mais 4 teclas ligadas diretamente aos pinos do
PIC e um display LCD 16X2.
3.2.5
Software de aquisição e processamento de dados
O software de aquisição de dados recebe a informação do microcontrolador
através de comunicação serial RS232, sendo a estrutura dos dados definida como
ASCII.
A principal função do software de aquisição e processamento de dados é
identificar o código da tag enviado pelo microcontrolador, pesquisá-lo no banco de
dados e retornar uma resposta ao microcontrolador, verificando se a posição do
refrigerador na linha de produção se encontra no local correto através de consulta ao
banco de dados.
3.2.6
Banco de dados
O banco de dados é responsável pelo armazenamento das informações em
quais os pontos de teste e retrabalho se encontra o refrigerador.
3.3
DIMENSIONAMENTO E MEMORIAL DE CÁLCULO
3.3.1
Circuito regulador de tensão
A alimentação do circuito é através de uma bateria com as seguintes
características: tensão 9 V, corrente de saída 400 mA. Para alimentar o circuito do
microcontrolador e também o circuito leitor por rádio freqüência, é necessário
35
controlar a tensão de entrada e disponibilizar dois níveis distintos de tesão, 5 V e 12
V. Para isso serão utilizados os componentes LM7812 e LM7805 ligados em
cascata.
3.3.2
Circuito do microcontrolador
O dimensionamento do LCD originou-se da necessidade de criar uma
interface entre o dispositivo de segurança com o colaborador. Pela simplicidade das
informações que o mesmo apresenta definiu-se um display com as características
apresentadas na tabela 7.
Tabela 3: Característica do LCD
Fonte: Crystalfontz – Especificação técnica disponível no site
http://www.crystalfontz.com/products/1602a/CFAH1602AYYBJP.PDF
O circuito de reset foi dimensionado, com base nas recomendações presentes
no datasheet(PIC 18F452) do microcontrolador para efetuar determinada operação.
3.3.3
Circuito do leitor por rádio freqüência
A freqüência de operação das tags bem como a do leitor por rádio freqüência
foi determinada em 125 kHz, pois com esta freqüência à distância de leitura é de
aproximadamente 20 centímetros. Para a aplicação proposta torna-se a melhor
opção em termos de custos/benefícios.
36
3.4
PROGRAMAÇÃO
3.4.1
Descrição Geral
A programação aplicada ao projeto é composta por quatro etapas, nas quais
estão associados software e firmware.
O firmware está alocado no microcontrolador e é responsável por interpretar o
dado enviado pelo leitor de RFID, disponibilizando-o para a leitura do software de
aquisição de dados. O firmware é responsável pela habilitação de uma segunda
porta de comunicação serial RS232, pois uma faz a conexão do leitor com o
microcontrolador e a outra a conexão entre o microcontrolador e o microcomputador.
Ao enviar um comando através do software de aquisição de dados, o firmware
interpreta este comando e posteriormente faz o acionamento das saídas digitais.
O compilador CCS foi utilizado para o desenvolvimento do firmware do
microcontrolador, este é executado em sistema operacional Windows e o software
que faz o upload do programa para o microcontrolador é o ProgPic2.
O software de aquisição de dados foi desenvolvido com Django e Python.
Django é um framework, construído usando a linguagem Python.
Framework é um conjunto de classes que colaboram para realizar uma
responsabilidade para um domínio de um subsistema da aplicação.FAYAD e
SCHMIDT(1997)
Python é uma linguagem de programação de alto nível, interpretada,
imperativa, orientada a objetos, de tipagem dinâmica e forte.
Este software recebe o dado enviado pelo microcontrolador através da
comunicação serial RS232 e verifica no banco de dados a validade do mesmo como
está ilustrado no fluxograma.
3.5
Planejamento
37
3.5.1
Diagramas de caso de uso
Um diagrama de Caso de Uso descreve um cenário que mostra as
funcionalidades do sistema do ponto de vista do usuário.UFCG(2007)
3.5.1.1
Caso de uso geral
Diagrama do caso de uso geral, este diagrama demostra como são os
relacionamentos entre os elementos e o autor que neste caso são o operador.
Figura 8: Diagrama de caso de uso geral
Fonte: Própria
3.5.1.2
Caso de uso Comunicação
Diagrama do caso de uso comunicação, este diagrama demostra como são
os relacionamentos entre os elementos da comunicação entre os ZigBee, o autor
que neste caso são os Zigbee.
Figura 9: Diagrama de caso de uso comunicação
Fonte: Própria
3.5.1.3
Caso de uso leitura Tag
Diagrama do caso de uso leitura Tag, este diagrama demostra como são os
relacionamentos entre os elementos da leitura da Tag através do leitor do RFID , o
autor que neste caso são o leitor de RFID e a Tag.
38
Figura 10: Diagrama de caso de uso comunicação
Fonte: Própria
3.5.1.4
Caso de uso Interface IHM
Diagrama do caso de uso interface IHM, este diagrama demostra como são
os relacionamentos entre os elementos da interface da IHM através do
microcontrolador , o autor que neste caso é o microcontrolador.
Figura 11: Diagrama de caso de uso IHM
Fonte: Própria
3.5.1.5
Caso de uso consulta, inclusão Banco de dados
Diagrama do caso de uso consulta e inclusão banco de dados, este diagrama
demostra como são os relacionamentos entre os elementos da banco de dados
através do servidor, o autor que neste caso é o banco de dados.
39
Figura 12: Diagrama de caso de uso consulta e inclusão banco de dados
Fonte: Própria
40
4
IMPLEMENTAÇÂO
4.1
DESCRIÇÃO DA MONTAGEM
Na fase de especificação técnica foram definidos esquemas elétricos e
escolhidos componentes baseados em teorias e especificações de datasheets.
Nesta fase de implementação, foram realizados testes em protoboard, testes
de
comunicação
serial,
testes
com
RFID
usando
interrupção
externa
e
implementados os circuitos especificados, usando a placa (Kit PicGenios) com PIC
18F452 e elaborado programas no PIC em Linguagem C usando o compilador CCS.
Figura 13: Desenvolvimento em Laboratório
FONTE: Própria.
41
4.2
TESTES, MEDIÇÕES E CONFIGURAÇÕES
A implementação foi dividida em fases, conforme segue descrito:
4.2.1
Testes com o Kit PicGenios
Elaborado programas testes em linguaguem C usando o Compilador PCW
versão 4.057 do fabricante CCS
e o programa de gravação PicKit 2 V2.4
da
Microchip usando o teclado matricial de 3 Colunas por 4 linhas e o LCD (display de
Cristal Liquido) de 16 caracteres por 2 linhas.
Usado os programas exemplos da biblioteca do compilador CCS: lcd.c e
kbd.c. Estes programas foram configurados para trabalhar com o PIC 18F452 e na
configuração de hardware do Kit PicGenios mostrado na figura 14, após as
alterações necessárias foram salvos como mykbd.c e mylcd.c, ambos os programas
viabilizam a interface homem-máquina ( IHM ) do projeto.
Figura 14: Kit PIC Genios
FONTE: Própria.
42
4.2.2
Construção dos menus de navegação usando a IHM
(Teclado Matricial e LCD)
Realizado diversos testes de programação para construção dos menus, e
devido a configuraçao de hardware do teclado no programa mykbd.c que é:
Coluna 0 PIN_B0, Coluna 1 PIN_B1, Coluna 2 PIN_B2, Linha 0 PIN_D3, Linha 0
PIN_D2, Linha 0 PIN_D1, foi necessário alterar as teclas de navegação, pois a
interrupção INT0 seria usada no pino B0, e esta coincidência impossibilitou a
navegação do menu usando a interrupção.
Para resolver este problema, as teclas de funções para chamada de menu:
RB3 – PIN_B3 para acessar pagina de login do operador, RB4 - PIN_B4 para
acessar a página de configuração da estação de trabalho e RB5 – PIN_B5 para
acessar a página de cadastro do evento ocorrido no sistema de Rastreabilidade,
usou-se também a tecla RA5 para voltar ao menu inicial.
Assim não ocorreu mais problemas com o acionamento acidental da interrupção no
pino B0.
Seguem abaixo as telas do menu do LCD para o Sistema de Rastreabilidade:
Figura 15: Tela 1 do LCD (Tela Inicial)
FONTE: Própria.
43
Figura 16: Tela 2 do LCD (Digite a opção do menu)
FONTE: Própria.
Figura 17: Tela 3 do LCD (Digite o código do operador)
FONTE: Própria.
44
Figura 18: Tela 4 do LCD (Digite o código da estação de trabalho)
FONTE: Própria.
Figura 19: Tela 5 do LCD (Digite o código do operador)
FONTE: Própria.
4.2.3
Testes com o RFID
Para testes com o RFID, foram realizado testes de leitura na porta
serial RS232 do PC, usando o software Rcom Serial, conforme figura 20, o código
da Tag que para teste é (04159E6056).
45
Figura 20: Testes usando o software RCom Serial
FONTE: Própria.
Como a saída do leitor RFID é em RS232, para testes na interrupção teve-se
que usar um circuito integrado Max 232 da Texas Instruments, para conversão do
sinal RS232 para TTL 5V.
Nos testes com o PIC monitorou-se as interrupções por borda de descida
(de 1 para 0) no pino RB0. A cada leitura do estado da porta RB0 esse estado foi
armazenado num vetor e em uma variável.
Quando esta interrupção ocorreu, houve um delay (ou atraso) de um terço de
tempo de bit de validação para aumentarmos a tolerância de escorregamento de
amostragem do sinal, ou seja, usamos usamos um TBit de 102us pois a taxa de
transmissão do Leitor é de 9600 bps ( Bits por segundo) .
A estrutura de Dados fornecidos pelo leitor RFID é Serial ASCII, Baud 9600,
sem paridade( STX (02 HEX) DATA (10 HEX CHARACTERS) CR LF ETX (03
HEX)).
A figura 21 mostra na tela do osciloscopio a leitura da Tag atraves do Leitor
do RFID,
46
Figura 21: Sinais recebidos na interrupção RB0 do PIC 18F452 atraves do
osciloscopio
FONTE: Própria.
4.2.4
Testes com os módulos wireless Xbee
Para testes dos módulos Xbee-pro que tem uma comunicação RS232 TTL
5V, foi necessário também um circuito integrado Max 232, para conversão do sinal
TTL 5V para RS232 para comunicação com a porta serial RS232 do PIC 18F452.
Inicialmente usamos o software Rcom Serial para testes e para configuração
dos módulos usamos o software X-CTU da MaxStream, figura 22.
Basicamente os módulos XBee/XBee-Pro já vem de fabrica configurados para
serem usados mais facilmente, o mínimo que precisa ser feito para estabelecer um
link de comunicação é alimentar os módulos corretamente com uma tensão de 3.3V.
47
Figura 22: Configuração dos Módulos Xbee usando o Software X-CTU
FONTE: Própria.
Configurações realizadas no software X-CTU da MaxStream:
Módulo Terminal ( remoto )
Networking & Security
ID: 3332
DL: 1234
MY: 5678
NI: REMOTO
Módulo Coordenador ( base )
Networking & Security
ID: 3332
DL: 5678
MY:1234
NI: BASE
48
Para facilitar a conexão do módulo Base XBee/XBee-Pro™ ao computador,
seja para atualização do firmware ou mesmo para fazer coleta de dados ou controle,
através dos módulos remotos, usamos a placa CON-USBBEE, figura 23, com
facilidade de conexão estilo Pen drive.
Figura 23: placa CON-USBBEE
FONTE: Própria.
A placa CON-USBBE usa um chip conversor USB/Serial; regulador de tensão
LDO (baixa queda de tensão), comparador de tensão conectado aos LEDs (RSSI)
que simulam a força do sinal de RF; LEDs indicadores de TX, RX , módulo ligado
(ASS), e um micro-botão para "resetar" o módulo XBee/XBee-Pro™.
Segue detalhes na figura 24:
Figura 24: Botão Reset e LEDs indicadores da placa CON-USBBEE
FONTE: RogerCom
Ao instalar no computador o driver USB para (Windows 98, ME, 2000,
49
XP,Vista, x64 e também para Linux e Mac) que acompanha a placa, o windows cria
uma porta COMx virtual quando a placa CON-USBBEE é plugada. Assim, é possível
através de um programa (escrito em C/C++Builder, Delphi, VB, Java, C#, etc), se
comunicar com a placa como se fosse uma comunicação serial padrão RS232.
Também é possível acessar a placa através de uma DLL, que oferece mais recursos
na programação.
4.2.5
Testes e montagem em protoboard
Circuito desenvolvido em protoboard contendo fonte de alimentação, 5V para
circuito Max 232 e Leitor RFID, e 3,3V para modulo Xbee terminal, no protoboard
também foi montado o circuito dos CI’s Max 232 para o Xbee terminal e para o
RFID.
Será desenvolvida uma placa PCI, para substituição do circuito montado em
protoboard, a mesma será desenvolvida em Software Proteus ou Orcad.
Também será desenvolvida uma placa para a IHM contento o PIC 18F452,
circuitos auxiliares, teclado matricial e Diplay LCD, ambos os componentes e placas
serão encapsulados numa caixa que será a IHM – Coletor de Dados RFID, com
transmissão Wireless ( Zigbee).
Figura 25: Circuito em protoboard em testes
FONTE: Própria.
50
4.2.6
Testes de interface IHM e Gerenciador
Para testes de envio / recebimento de informações do módulo IHM RFID com
o Gerenciador, foram realizados testes de comunicação através dos módulos Xbee e
inicialmente o softwrare Rcom Serial, após finalizado os testes com o hardware e
firmware da IHM, realizou-se testes de interface de envio e recebimento das
informações, usando o gerenciador do Sistema com o banco de dados.
As informações enviadas são 10 bytes, conforme figura 26, que contém o
código da Tag lida pelo leitor RFID (04159E6056), a tag com 10 bytes podem por
exemplo trazer as informações dos produtos em questão como modelo, cor, tensão
e etc, outra informação que temos é um byte com a identificação do operador, um
byte com a identificação da estação de trabalho e outro byte com o evento ocorrido
no Sistema de Rastreabilidade, as informaçõe são separadas por um caracter de
ponto (.) para organização do pacote de dados.
Após o envio das informações ao Gerenciador, o mesmo consulta o Banco de dados
e retorna a resposta que é visualizada na tela do Display LCD, assim o Sistema
consulta e registra as informações necessárias para a Rastreabilidade do Processo.
Figura 26: Tela 6 do LCD (Visulalizacao dos dados sendo enviados ao
Gerenciador do Sistema de Rastreabilidade)
FONTE: Própria.
51
Sistema de Rastreabilidade conectado ao Módulo Xbee-Pro através da placa
CON-USBBEE, através da porta USB do Computador, comunicando-se com a IHM.
4.2.7
Testes e montagem do hardware definitivo
Circuito desenvolvido em placa universal e PCI, contendo fonte de
alimentação, 5V para circuito Max 232 e Leitor RFID, e 3,3V para modulo Xbee
terminal, também foi montado o circuito dos CI’s Max 232 para o Xbee terminal e
para o RFID. Esta placa é acoplada no display de LCD e na placa desenvolvida para
o teclado matricial que foram acopladas na caixa da IHM para interface com o
usuário.
Figura 27: Circuito final em placa definitiva
FONTE: Própria.
52
Figura 28: Produto final ( Apresentação IV Painel de Engenharia 2009)
FONTE: Própria.
Figura 29: Sistema de Rastreabilidade
FONTE: Própria.
53
Figura 30: Tela de Consulta do Sistema de Rastreabilidade
FONTE: Própria.
4.3. CÓDIGO FONTE
4.3
SOFTWARE DO PIC E APLICAÇÃO
4.3.1
Estrutura do Programa do PIC18F452
Segue abaixo a estrutura do programa no PIC18F452
•
mykbd.c ( programa de leitura do teclado matricial 3 colunas por 4 linhas)
•
mylcd.c ( teclado 16x2 caracteres por linha)
•
MYIHM.c (programa completo)
4.3.2
Código Fonte do PIC18F452
Segue o código do pic18f452 em anexo 2.
54
4.3.3
Estrutura do Programa da Aplicação
Segue abaixo a estrutura do programa no diretório do servidor
Figura 31: Estrutura do programa no diretório do servidor
Fonte: Própria
Para armazenar e resgatar informações do banco de dados, não é necessário
ir até ele e conhecer a linguagem dele .
Pode se usar uma ferramenta do Django chamada ORM, que interpreta o seu
código, leva aquilo até o banco de dados, e depois devolve as informações
desejadas.
A parte do código onde você configura quais são seus modelos de dados e
que tipo de informações eles devem armazenar, é um arquivo chamado models.py.
55
Figura 31: Modelagem dos dados Django
Fonte:
http://www.aprendendodjango.com/entendendo-como-o-django-
trabalha/
MVC é a sigla que resume tudo isso:
• Modelo (Model)
• Visão (View)
• Controle (Controller)
Modelo é onde estão as definições dos dados, como eles devem ser
armazenados e tratados. É lá que você diz quais campos uma tabela deve ter, seus
tipos e valores padrão e se eles são obrigatórios ou não. Dentre outras coisas.
Visão são as funções que recebem requisições e retornam respostas, ao
usuário, a outro computador, a uma impressora ou qualquer outra coisa externa. Ou
seja, as views.
E Controle são todas as coisas que ficam no meio do caminho, como o
handler, os middlewares e o URL dispatcher. A maior parte dessas coisas é feita
pelo próprio Django, e você deve se preocupar pouco ou nada com isso.
56
4.3.4
Código Fonte da Aplicação
Segue o código do aplicativo web no anexo 3.
4.4
CUSTOS DO PROJETO
O custo total do projeto foi de R$ 717,00, conforme especificado na tabela 4.
4.5
COMPONENTES E MATERIAIS
Tabela 4: especificações dos custos
Quantidade
Item
Preço Unitário
Preço Total
2
Xbee-Pro
R$ 135,00
R$ 270,00
1
PIC18F452
R$ 34,00
R$ 34,00
1
Conversor
Xbee- R$ 120,00
R$ 120,00
Pro - USB
2
Max232
R$ 3,00
R$ 3,00
1
Leitor RFID
R$ 200,00
R$ 200,00
1
Display (16x2)
R$ 20,00
R$ 20,00
1
Bateria 9V
R$ 40,00
R$ 40,00
1
TAG(RFID)
R$ 6,97
R$ 6,97
16
Capacitor
R$ 0,08
R$ 1,28
9
Resistores
R$ 0,05
R$ 0,45
1
Oscilador
R$ 2,71
R$ 2,71
5
Diodo
R$ 0,59
R$ 2,95
1
7805
R$ 0,60
R$ 0,60
1
LM317L
R$ 0,47
R$ 0,47
1
Teclado Matricial
R$ 15,00
R$ 15,00
Valor Final
R$ 717,43
57
5
RESULTADOS
No decorrer do desenvolvimento do projeto, foi necessário utilizar muitos
conceitos estudados ao longo do curso de graduação, pois foram utilizadas desde a
simples lei de ohm até técnicas de programação avançada.
O projeto realizado buscou sempre garantir a qualidade do produto,
acompanhando o processo de fabricação dos refrigeradores na linha de produção.
Os principais resultados do projeto são:
5.1
Leitura da Tag – RFID
Foram usadas tags conforme especificação do projeto, e para a leitura destas
tags, usou-se o Leitor RFID AP20 que tem um bom alcance de
aproximadamente 8cm, para
enviar os dados
para o PIC foi utilizado a
interrupção externa atráves do pino RB0. Um dos pontos que necessitou
muitos testes foi esta leitura, pois inicialmente foi especificado a leitura do
código da TAG pela serial do PIC através de multiplexação serial com a
comunicação entre a IHM ( PIC) com o servidor, assim depois de estudos e
testes verificamos que a melhor solucão seria individualizar a leitura da tag
através da interrupção externa. Os resultados apesar da dificuldade de
trabalhar com leitura bit a bit no pino de interrupção foram alcançados, após
muita análise dos dados através de osciloscópio e consulta a documentação
do leitor RFID e testes com programas em linguagem C.
5.2
Microcontrolador PIC 18F452
A escolha do Microcontrolador foi bem acertada na etapa de especificação,
bem como a utilização do Kit PIC Genios, pois além de recursos necessários
para desenvolvimento o Kit forneceu uma excelente placa de prototipação,
onde foram realizados diversos testes até que chegou-se na solução final do
Projeto, assim a escolha do kit foi de extrema importancia para a etapa de
desenvolvimento do trabalho.
Sobre o compilador, usou-se o CCS que é o que sempre esteve nas
58
disciplinas aprendidas e relacionadas, apesar que o Kit comprado não tinha
nenhum exemplo em CCS, pois a fabricante Genios trabalha com outros
compiladores, assim foram necessários diversas pesquisas sobre o
Compilador CCS usando o PIC 18F452.
5.3
Display e Teclado
Para o Display e o teclado, o trabalho principal foi estudar os drives lcd.c e
kbd.c disponíveis na Biblioteca do CCS, após estudos foram necessárias
configurações de hardware para adequação com a placa de prototipação e
posteriormente com o hardware definitivo. Um dos pontos críticos foi a
atualização de teclado em qualquer momento da utilização do Sistema de
Rastreabilidade, mas a solução foi encontrada através de laços de programa,
que aguardavam sempre estas atualizações, conforme pode ser visto nos
programas do capítulo de desenvolvimento.
5.4
Comunicação Wireless
A comunicação Wireless foi um ponto muito importante no desenvolvimento
do projeto, pois disponibilizou flexibilidade na utilização do Sistema. A escolha
dos módulos Xbee-Pro utilizando a tecnologia ZigBee foi excelente, pois os
módulos são muito confiáveis e o material técnico sobre a tecnologia está
bem acessivel, assim após configurações usando softwares do fabricante e
testes a comunicação Wireless funcionou sempre de maneira bem estável.
5.5
Software e Banco de Dados
Para implementação do software e do banco de dados utilizou um framework
para páginas WEB o Django, e o Python como linguagem de programação. Ambos
são opensource e não requerem licença para implantação nos servidores. Para o
banco de dados foi utilizado o SQLite que nos testes do projeto demostrou uma
performance adequada para o projeto.
59
Tabela 5: Tabela de Comunicação PC - PIC
Tabela Comunicação PC - PIC
código
Mensagem Display IHM
recebido
RASTREABILIDADE REALI0
ZE TESTE
1
ESTACAO 1
NAO TESTOU
2
ESTACAO 2
NAO TESTOU
3
ESTACAO 3
NAO TESTOU
4
ESTACAO 4
NAO TESTOU
5
ESTACAO 5
NAO TESTOU
6
ESTACAO 6
NAO TESTOU
7
ESTACAO 7
NAO TESTOU
8
ESTACAO 8
NAO TESTOU
9
RASTREABILIDADE
OK!
Fonte: Própria
Tabela 6: Tabela de Comunicação PC - PIC
Tabela códigos de Evento
código digitado
Descrição no PC
0
Login
1
NC - Falha 1
2
NC - Falha 2
60
3
NC - Falha 3
4
NC - Falha 4
5
NC - Falha 5
6
NC - Falha 6
7
NC - Falha 7
8
NC - Falha 8
9
Resultado dos Testes OK!
Fonte: Própria
6
CONSIDERAÇÕES FINAIS E CONCLUSÕES
De maneira geral, pode-se considerar a conclusão deste projeto bastante
positiva sendo o principal ponto a ser destacado, o elevado aumento de
conhecimento técnico, quando colocado em prática. Nem sempre tudo o que se
imagina ser possível de ser feito, realmente é possível, mesmo que os datasheets
digam o contrário. Aliás, datasheets também erram e, apesar de bastante extensos
de maneira geral, por vezes não são suficientes para sanar todas as dúvidas
referentes a determinados componentes.
Em todas as etapas do Projetos o importante é dividir em partes, determinar
quem são as prioriedades e trabalhar em uma de cada vez e quanto todas as partes
estiverem funcionando, aí então deve-se realizar a integração, aumentando assim o
nível de dificuldade.
A técnica pode ser aplicada tanto no desenvolvimento de
hardware quanto de software, e pode auxiliar no desenvolvimento de Projetos.
Segue sugestão de sofisticação ou melhoria do Sistema de Rastreabilidade
61
de Processos usando um módulo wireless Xbee Terminal para controle, sinalizaçao
e interface com o processo em questão.
Este módulo pode ser chamado de estação de controle e interface com o
projeto, possibilitando paradas de linha, quanto detectado uma falha no processo,
acionamento de transportadores para retirada dos produtos do processo e
encaminhamento para uma estação de retrabalho por exemplo, também pode-se
através desta estação relizar sinalizações visuais ou sonoras e também possibilitar
interface com o controle da linha de produção atráves de comunição com PLC, por
exemplo.
Outras melhorias podem com certeza serem desenvolvidas, pois este assunto
foi abordado e estudado para um projeto Básico, assim basta criatividade e
aplicações de algumas técnicas de engenharia e o céu é o limite.
62
7
REFERENCIAS
ACURA TECHNOLOGIES. RFID: Disponível em:
http://www.acura.com.br. Acesso em 30 de Maio de 2009.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS, NBR ISO 9001-2000,
Sistemas de gestão da qualidade - Fundamentos e vocabulário, Rio de Janeiro,
2000. p.7-11.
CRYSTALFONTZ . LCD : Disponivel em:
http://www.crystalfontz.com/products/1602a/CFAH1602AYYBJP.PDF. Acesso em 30
de Maio de 2009.
FINKENZELER, Klaus – RFID HANDBOOK segunda edição.
MONTGOMERY, Douglas C. Introdução ao controle estatístico da qualidade. 3.
ed. New York: John Wiley, 1996.
ROSSATO, Ivete de Fátima. Uma metodologia para análise e soluções de
problemas, Florianópolis, Março 1996. Disponível em: <http://www.eps.ufsc.br
/disserta96/rossato/indice/index.htm#sumario>. Acessado em 19/09/2008
ROGERCOM..Xbee/ZigBee:
Disponivel
em:
<http://www.rogercom.com/ZigBee/ZigBee.htm>. Acesso em 22 de Abril de 2009
SLACK, Nigel, Administração da produção. São Paulo: Atlas, 2002. 119p.
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO. O que é RFID?: Disponível em:
<http://www.gta.ufrj.br/grad/07_1/rfid/RFID_arquivos/o%20que%20e.htm>.
em 22 de Abril de 2009.
63
Acesso
WIKIPEDIA. ISO 9000: Disponível em: <http://pt.wikipedia.org/wiki/ISO_9000>.
Acesso em 22 de Abril de 2009.
ISO. ISO 9000: Disponível em: <http://www.iso.org/iso/survey10thcycle.pdf>. Acesso
em 22 de Abril de 2009.
FAYAD, Mohamed; Schmidt, Douglas. Object-Oriented Application Frameworks.
Communications of the ACM, New York, v. 40, n. 10, p. 32-38, Oct. 1997.
CASO
DE
USO.
Diagrama
de
cado
de
uso:
Disponível
em:
<http://www.dsc.ufcg.edu.br/~sampaio/cursos/2007.1/Graduacao/SIII/Uml/diagramas/usecases/usecases.htm>. Acesso em 22 de Abril de 2009.
The Making of Python (em inglês). Artima Developer. Página visitada em 2007-0322.
64
ANEXO 1: Circuito elétrico ( esquemático do Sistema de Rastreabilidade )
ANEXO 2: Código Fonte Pic18f452
Segue abaixo o código fonte do arquivo mykbd.c
// mykbd.C
#byte kbd_rows = 0xF83 // Port D on 18F452
#byte kbd_cols = 0xF81 // Port B on 18F452
#define set_tris_kbd_rows(x) set_tris_d(x)
#define set_tris_kbd_cols(x) set_tris_b(x)
#define Bitmask(x) (1 << (x & 7))
#define COL0
#define COL1
#define COL2
#define COL3
#define COL4
#define COL5
#define ROW0
#define ROW1
#define ROW2
#define ROW3
Bitmask(PIN_B0)
Bitmask(PIN_B1)
Bitmask(PIN_B2)
Bitmask(PIN_B3)
Bitmask(PIN_B4)
Bitmask(PIN_B5)
Bitmask(PIN_D3)
Bitmask(PIN_D2)
Bitmask(PIN_D1)
Bitmask(PIN_D0)
#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)
#define ALL_COLS (COL0|COL1|COL2|COL3|COL4|COL5)
// Keypad layout:
char const KEYS[4][3] = {{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
// Set this number to apx n/333 where
// n is the number of times you expect
// to call kbd_getc each second.
#define KBD_DEBOUNCE_FACTOR 33
void kbd_init()
{
}
char kbd_getc( )
{
static BYTE kbd_call_count;
static short int kbd_down;
static char last_key;
static BYTE col;
BYTE kchar;
BYTE row;
kchar='\0';
if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) {
switch (col) {
case 0 : set_tris_kbd_cols(ALL_COLS&~COL0);
kbd_cols=~COL0&ALL_COLS;
break;
case 1 : set_tris_kbd_cols(ALL_COLS&~COL1);
kbd_cols=~COL1&ALL_COLS;
break;
case 2 : set_tris_kbd_cols(ALL_COLS&~COL2);
kbd_cols=~COL2&ALL_COLS;
break;
}
if(kbd_down) {
if((kbd_rows & (ALL_ROWS))==(ALL_ROWS)) {
kbd_down=FALSE;
kchar=last_key;
last_key='\0';
}
} else {
if((kbd_rows & (ALL_ROWS))!=(ALL_ROWS)) {
if((kbd_rows & ROW0)==0)
row=0;
else if((kbd_rows & ROW1)==0)
row=1;
else if((kbd_rows & ROW2)==0)
row=2;
else if((kbd_rows & ROW3)==0)
row=3;
last_key =KEYS[row][col];
kbd_down = TRUE;
} else {
++col;
if(col==3)
col=0;
}
}
kbd_call_count=0;
}
set_tris_kbd_rows(ALL_ROWS);
set_tris_kbd_cols(ALL_COLS);
return(kchar);
}
Segue abaixo o codigo fonte do arquivo mylcd.c
//
mylcd.c
//
// lcd_init() Deve ser chamado antes de outras funções.
//
// lcd_putc(c) Visualiza c na posição seguinte do display.
//
Caracteres especiais de controle:
//
\f Apagar display
//
\n Passar para segunda linha
//
\b Retroceder uma posição.
//
// lcd_gotoxy(x,y) seleciona uma nova posição de escrita no display.
//
//
// lcd_getc(x,y) Devolve o caracter na posição x y do display.
//
//////////////////////////////////////////////////////////////////////////////
// Defini��o dos pinos usados para o display
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_RS PIN_E2
//#define LCD_RW PIN_E0
#define LCD_E PIN_E1
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
//#define USE_LCD_RW 1
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//------------------------------------void lcd_send_nibble(int8 nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//----------------------------------// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.
#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;
output_high(LCD_E);
delay_cycles(1);
retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
output_low(LCD_E);
return(retval);
}
#endif
//--------------------------------------// Read a byte from the LCD and return it.
#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;
output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}
#endif
//---------------------------------------// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif
if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);
#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif
output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//---------------------------void lcd_init(void)
{
int8 i;
output_low(LCD_RS);
#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif
output_low(LCD_E);
delay_ms(15);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
}
//---------------------------void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//----------------------------void lcd_putc(char c)
{
switch(c)
{
case '\f':
lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n':
lcd_gotoxy(1,2);
break;
case '\b':
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
//-----------------------------#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;
lcd_gotoxy(x,y);
// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));
output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);
return(value);
}
#endif
void lcd_setcursor_vb(short visible, short blink) {
lcd_send_byte(0, 0xC|(visible<<1)|blink);
}
Segue abaixo o código fonte do arquivo MYIHM.C
MYIHM.C
/////////////////////////////////////////////////////////////////////////
////
MYIHM.C
////
////
////
////
////
/////////////////////////////////////////////////////////////////////////
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)//Habilita as funções RS232 com velocidade de
9600 baud
#include <mylcd.c>//Inclui função de manipulação de LCD 16X2
#include <mykbd.c>//Inclui função de manipulação de teclado matricial de 3X4
/* Declaração de bytes usados para comunica�ao RS232 - obtidos no data sheet do PIC 18F452*/
#byte INTCON = 0xFF2 //Registrador INTCON
#define TBit 104 //Valor do Tempo de Bit (us) para 9600
#define MAXBUFFER 20 // Define o tamanho máximo dos buffers de transmissão e recepção
/* declaração de bytes usados para comunica�ao RS232 - obtidos no data sheet do PIC 18F452*/
#byte PIR1 = 0xF9E
#byte PIE1 = 0xF9D
#BIT TXIF = PIR1.4
#BIT TXIE = PIE1.4
byte SerialIn[MAXBUFFER]; // buffer de recepção(RX)
byte SerialOut[MAXBUFFER]; // buffer de trasnmisão (TX)
byte ReadPtr=0; // ponteiro de leitura utilizado pela rotina de interrupção
byte ReadBufPtr=0; //ponteiro de leitura indicando o dado disponível no buffer
byte WritePtr=0; // ponteiro de escrita utilizado pela rotina de interrupção
byte WriteBufPtr=0;// ponteiro de escrita indicando a posição livre no buffer de escrita
/*Fun��es*/
void ExibeT0(void);//exibe tela 0 LEITURA RFID
void ExibeT1(void);//exibe tela 1 OPERADOR
void ExibeT2(void);//exibe tela 2 ESTACAO
void ExibeT3(void);//exibe tela 3 EVENTO
void ExibeT4(void);//exibe tela 4 RESULTADOS
void ExibeT5(void);//exibe tela 5 LOGIN (OPERADOR, ESTACAO, EVENTO)
void ExibeT6(void);//exibe tela 6 REALIZE O TESTE
void ExibeT7(void);//exibe tela 7 ESTACAO 1 NAO TESTOU
void ExibeT8(void);//exibe tela 8 ESTACAO 2 NAO TESTOU
void ExibeT9(void);//exibe tela 9 ESTACAO 3 NAO TESTOU
void ExibeT10(void);//exibe tela 10 ESTACAO 4 NAO TESTOU
void ExibeT11(void);//exibe tela 11 ESTACAO 5 NAO TESTOU
void ExibeT12(void);//exibe tela 12 ESTACAO 6 NAO TESTOU
void ExibeT13(void);//exibe tela 13 ESTACAO 7 NAO TESTOU
void ExibeT14(void);//exibe tela 14 ESTACAO 8 NAO TESTOU
void ExibeT15(void);//exibe tela 15 RASTREABILIDADE OK
void ExibeT16(void);//exibe tela 16 AGUARDA RESPOSTA SERVIDOR
void UpdateTag(void);
//#int_ext
void RecPacT(void); //Recebe Pacote do RFID (interrupção RB0)
void MontaRFID(void);//Monta RFID ( 2 bytes)
/*Vari�veis Globais*/
char k=0;
char Operador=0;
char Estacao=0;
char Evento=0;
int Estado=0;
int i=0,j=0,Cont=0;
int8 Byte1[16]="000000000000000", pos=0;
int NewTag=0,upok=0;
char recebido;
char dado[20];
int EstadoCom=0;
/* PACOTE:|0|1|2|3|4|5|6|7|8|9|.|1|.|2|.|1|
| DADO RFID 10BITS |.|O|P|.|E|S|.|E|V|*/
char val3[20]="0123456789.1.2.3";// Teste constante fixa
char val4[20]="0000000000.0.0.0";// String para montagem e transmissao RFID
char val2[20]="0000000000.0.0.0";// String para montagem e tela RFID
char val0[20]="0000000000.0.0.0";// String para montagem e transmissao PACOTE VAZIO
/* rotina de tratamento da interrupção de leitura da porta serial � chamada sempre que um dado foi
recebido */
#INT_RDA // diretiva compilador
void readSerial()
{
/* coloca o dado recebido no buffer RX */
SerialIn[ReadPtr++]=getc();
/* controle do ponteiro c�clico */
if (ReadPtr == MAXBUFFER) ReadPtr=0;
}
/* rotina para retirar uma dado do buffer RX � substitui getc*/
byte readBuffer()
{
byte data;
/* esperar por haver um dado no buffer RX */
if (ReadBufPtr == ReadPtr) return 0;
data = SerialIn[ReadBufPtr++];
/* controle c�clico do ponteiro */
if (ReadBufPtr == MAXBUFFER) ReadBufPtr=0;
return data;
}
/* rotina de tratamento da interrupção de escrita da porta serial, chamada sempre que um dado foi
transmitido */
#INT_TBE // diretiva compilador
void writeSerial()
{
/* transmite quando exsite um dado no buffer TX */
if (WriteBufPtr != WritePtr)
{
putc(SerialOut[WritePtr++]);
/* controle do ponteiro c�clico */
if (WritePtr == MAXBUFFER) WritePtr=0;
}
/* disabilita a interrupção quando buffer TX est� vazio */
else
disable_interrupts(INT_TBE);
}
/* rotina para inserir uma dado no buffer TX � substitui putc */
void writeBuffer(byte data)
{
/* espera por espa�o livre no buffer TX */
while ((WriteBufPtr == (WritePtr -1)) || ((WriteBufPtr==MAXBUFFER-1) && (WritePtr == 0)));
SerialOut[WriteBufPtr++] = data; // controle c�clico do ponteiro
if (WriteBufPtr == MAXBUFFER) WriteBufPtr=0; // ativa a interrupção de TX para enviar dado se j�
n�o est� em andamento
if ((TXIF) && (TXIE == 0))
enable_interrupts(INT_TBE);
}
/* função puts utilizando o buffer de trasnmissão */
puts_int(char *ptr)
{
while (*ptr) writeBuffer(*ptr++);
writeBuffer('\r');
writeBuffer('\n');
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
struct bit
{
int1 BitRecTra; //Bit Recebido da INT RB0
};
struct bit BitRecTra[8]; //Bits recebidos da INT RB0 (Pacote)
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT0(void)
{
Estado=0;
lcd_putc("\fRASTREABILIDADE\n");//Tela inicial
lcd_putc("Leia o codigo:\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT1(void)
{
Estado=1;
delay_ms(1000);
lcd_putc("\fLOGIN OPERADOR\n");//Tela 1
lcd_putc("digite:\n");
lcd_gotoxy(8,2);
While(Estado==1)
{
k=kbd_getc();
if(k!=0)
lcd_putc(k);
Operador=k;
if(Operador!=0)
{
Estado=2;
ExibeT2();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT2(void)
{
Estado=2;
delay_ms(1000);
lcd_putc("\fLOGIN ESTACAO\n");//Tela 2
lcd_putc("digite:\n");
lcd_gotoxy(8,2);
While(Estado==2)
{
k=kbd_getc();
if(k!=0)
lcd_putc(k);
Estacao=k;
if(Estacao!=0)
{
Estado=3;
ExibeT3();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT3(void)
{
Estado=3;
delay_ms(1000);
lcd_putc("\fEVENTO\n");//Tela 3
lcd_putc("digite:\n");
lcd_gotoxy(8,2);
While(Estado==3)
{
k=kbd_getc();
if(k!=0)
lcd_putc(k);
Evento=k;
if(Evento!=0)
{
Estado=4;
ExibeT4();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT4(void)
{
Estado=4;
lcd_putc("\fMontando Login:\n");
lcd_gotoxy(4,2);
lcd_putc(Operador);
lcd_gotoxy(8,2);
lcd_putc(Estacao);
lcd_gotoxy(12,2);
lcd_putc(Evento);
delay_ms(2000);
val4[11]=Operador;
val4[13]=Estacao;
val4[15]=Evento;
lcd_putc("\f");
lcd_putc("\fMontando dados:\n");
lcd_gotoxy(1,2);
printf(lcd_putc, "%s ", val4);
delay_ms(2000);
EstadoCom=1;
Estado=0;
ExibeT16();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT5(void)
{
Estado=5;
lcd_putc("\fRASTREABILIDADE\n");//Tela inicial
lcd_putc("Digite opcao:\n");
lcd_gotoxy(15,2);
Estado=0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void UpdateTag(void)
{
for(i=0;i<10;i++)
{
val4[i]=Byte1[i+1];
}
lcd_putc("\f");
printf(lcd_putc, "%s\n ",val4);
delay_ms(500);
NewTag=0;
ExibeT5();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void MontaRFID(void) //Monta os bytes do código do RFID
{
for(j=0;j<8;j++)
{
// (MSB)Byte1(LSB) -----------------------------------------------------if(bit_test(BitRecTra[j].BitRecTra,0))
bit_set(Byte1[pos],j);
else
bit_clear(Byte1[pos],j);
}
pos++;
if (pos==14)
{
NewTag=1;
Byte1[pos]=0;
pos=0;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT6(void)
{
Estado=6;
lcd_putc("\fRASTREABILIDADE\n");//Realize os testes, Login ok, Rastreabilidade ok (Estacoes
anteriores ok)
lcd_putc("REALIZE TESTES:\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT7(void)
{
Estado=7;
lcd_putc("\fESTACAO 1\n");//Retornar a estação anterior, pois os resultados não estao ok ou nao
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT8(void)
{
Estado=8;
lcd_putc("\fESTACAO 2\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT9(void)
{
Estado=9;
lcd_putc("\fESTACAO 3\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT10(void)
{
Estado=10;
lcd_putc("\fESTACAO 4\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT11(void)
{
Estado=11;
lcd_putc("\fESTACAO 5\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT12(void)
{
Estado=12;
lcd_putc("\fESTACAO 6\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT13(void)
{
Estado=13;
lcd_putc("\fESTACAO 7\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT14(void)
{
Estado=14;
lcd_putc("\fESTACAO 8\n");//Retornar a estação anterior, pois os resultados não estão ok ou não
foram realizados
lcd_putc("NAO TESTOU!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT15(void)
{
Estado=15;
lcd_putc("\fRASTREABILIDADE\n");//Retornar a estação anterior, pois os resultados não estão ok
ou nao foram realizados
lcd_putc("OK!\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void ExibeT16(void)
{
Estado=15;
lcd_putc("\fAGUARDA RESPOSTA\n");//Aguarda Resposta do Servidor
lcd_putc("DO SERVIDOR\n");
lcd_gotoxy(15,2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
#int_ext
void RecPacT(void)
{
INTCON = 0x00; //Desabilita a interrupção (Global | Int_ext)
//----------------------------------------------------------------------delay_us(TBit);
delay_us(TBit/4);
if(!NewTag)
{
BitRecTra[0].BitRecTra = input(PIN_B0); //LSB do Byte
delay_us(TBit);
BitRecTra[1].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[2].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[3].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[4].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[5].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[6].BitRecTra = input(PIN_B0);
delay_us(TBit);
BitRecTra[7].BitRecTra = input(PIN_B0); //MSB Byte
// Fim da leitura do Pacote Recebido
MontaRFID();
}
INTCON = 0xD0; //Habilita a interrupção (Global | Int_ext)
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
char recebido;
char dado[20];
/*** Inicializa��o de interrupção externa ***/
SETUP_COUNTERS(rtcc_internal,rtcc_div_32);
ext_int_edge(H_TO_L);
INTCON = 0xD0; //Habilita a interrupção (Global | Int_ext)
/*** Inicializa��o de interrupção serial ***/
enable_interrupts(INT_RDA);//habilita interrupção de recepção
enable_interrupts(GLOBAL);//habilita interrupções
lcd_init();
kbd_init();
if(Estado!=5)
ExibeT0();
while (TRUE)
{
if(!input(PIN_B3))//Tecla de função F1 ( Operador )
{
INTCON =0;
ExibeT1();
}
else
if(!input(PIN_B4))//Tecla de função F2 ( Esta��o )
{
INTCON =0;
ExibeT2();
}
else
if(!input(PIN_B5))//Tecla de função F3 ( Evento )
{
INTCON =0;
ExibeT3();
}
else
if(!input(PIN_B2))//Tecla de função F0 ( Menu Iniciar )
{
INTCON =0;
ExibeT0();
}
INTCON = 0xD0; //Habilita a interrupção (Global | Int_ext)
if(NewTag)
UpdateTag();
/*** Rotina de leitura do buffer RX ***/
delay_ms(50);
recebido=readBuffer();
if(recebido=='t')//Caracter recebido na serial TOKEN
{
if(EstadoCom==0)
{
/*lcd_putc("\f");
lcd_putc("\fEnviando dados:\n");
lcd_gotoxy(1,2);
printf(lcd_putc, "%s ", val0);
delay_ms(4000);
*/
sprintf(dado,"%s",val0);
puts_int(dado);
//ExibeT0();
EstadoCom=0;
}
else
if(EstadoCom==1)
{
lcd_putc("\f");
lcd_putc("\fEnviando dados:\n");
lcd_gotoxy(1,2);
printf(lcd_putc, "%s ", val4);
delay_ms(4000);
sprintf(dado,"%s",val4);
puts_int(dado);
ExibeT16();
EstadoCom=0;
}
}
else
if(recebido=='0') ExibeT6();
else
if (recebido=='1') ExibeT7();
else
if (recebido=='2') ExibeT8();
else
if (recebido=='3')ExibeT9();
else
if (recebido=='4')ExibeT10();
else
if (recebido=='5') ExibeT11();
else
if (recebido=='6')ExibeT12();
else
if (recebido=='7') ExibeT13();
else
if (recebido=='8') ExibeT14();
else
if (recebido=='9')ExibeT15();
}
}
ANEXO 3: Codigo Fonte Aplicativo Web
No diretorio rprfid no arquivo settings.py, é responsável pela configuração do projeto
# Django settings for rprfid project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', '[email protected]'),
)
MANAGERS = ADMINS
DATABASE_ENGINE = 'sqlite3'
# 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or
'oracle'.
DATABASE_NAME = 'rprfid.db'
# Or path to database file if using sqlite3.
DATABASE_USER = ''
# Not used with sqlite3.
DATABASE_PASSWORD = ''
# Not used with sqlite3.
DATABASE_HOST = ''
# Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''
# Set to empty string for default. Not used with sqlite3.
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Sao_Paulo'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pt-BR'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '!fpgec(zs4ad^g&m=j#10^uw%amfv6a+v^vzct^i=5rk+9zwzl'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
ROOT_URLCONF = 'rprfid.urls'
TEMPLATE_DIRS = (
'/home/tiago/Projetos/rprfid/templates'
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'rprfid.main',
)
No diretorio rprfid no arquivo urls.py, é responsável pela direcionamentos das url.
import settings
from django.conf.urls.defaults import *
from rprfid.main.views import index
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^$', index),
(r'^admin/(.*)', admin.site.root),
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': '/home/tiago/Projetos/rprfid/static'}),
)
No diretorio rprfid no arquivo rprfid_daemon.py, é a implementação das rotinas de leitura da porta
usb.
#!/usr/bin/env python
#-*- coding: utf-8 -*import os
import sys
import time
import serial
from optparse import OptionParser
try:
import settings
except ImportError:
sys.stderr.write('Arquivo settings.py não encontrado.\n')
sys.exit(1)
try:
from django.core.management import setup_environ
except ImportError:
sys.stderr.write('Não foi possível importar django.core.management.setup_environ, verifique sua
instalação do Django.\n')
sys.exit(1)
# Configura ambiente de execução.
setup_environ(settings)
from rprfid.main.models import Registro, Operador, Estacao, Evento
def le_usb(usb):
# Abre conexão com a Serial
ser = serial.Serial("/dev/ttyUSB0", 9600)
matrizxbee=['5678','6789']
matrizteste=['ok','','','','','','','','']
s=0
while 1:
if (matrizxbee[s]=='5678'):
print("Testando xbee 5678")
# Verificação Xbee
ser.write('+++')
resultado1=ser.readline(eol='\r')
print(resultado1)
time.sleep(1)
ser.write('ATDL5678\r')
resultado2=ser.readline(eol='\r')
print(resultado2)
time.sleep(0.1)
#ser.write('ATWR\r')
#resultado3=ser.readline(eol='\r')
#print(resultado3)
time.sleep(1)
ser.write('ATCN\r')
resultado4=ser.readline(eol='\r')
print(resultado4)
#Fim verificação xbee
ser.write("t")
linha = ser.readline()
slinha = linha.split('.')
atual=int(slinha[2][0])
anterior=int(slinha[2][0])-1
#print linha
if linha!="":
if slinha[0]=="0000000000" and slinha[1][0]=="0" and slinha[2][0]=="0"
and slinha[3][0]=="0":
arquivo = open("/home/tiago/Projetos/rprfid/arq.txt", 'a')
arquivo.write("Estação não tem dados\n")
arquivo.close()
else:
# Inclusão de registro inicial estação 1
if slinha[0]!="" and slinha[1][0]!="" and slinha[2][0]=="1" and
slinha[3][0]=="0":
ser.write("0")
else:
if slinha[0]!="" and slinha[1][0]!="" and slinha[2]
[0]=="1" and slinha[3][0]=="9":
#print("Estou aqui-2")
r = Registro(
codigo=slinha[0],
operador=Operador.objects.filter(codigo=slinha[1][0])[0],
estacao=Estacao.objects.filter(codigo=slinha[2][0])[0],
evento=Evento.objects.filter(codigo=slinha[3]
[0])[0],
)
r.save()
ser.write("9")
if slinha[0]!="" and slinha[1][0]!="" and slinha[2]
[0]=="1" and slinha[3][0]!="9":
#print("Estou aqui-1")
r = Registro(
codigo=slinha[0],
operador=Operador.objects.filter(codigo=slinha[1][0])[0],
estacao=Estacao.objects.filter(codigo=slinha[2][0])[0],
evento=Evento.objects.filter(codigo=slinha[3]
[0])[0],
)
r.save()
ser.write("9")
# Termino inclusão de registro inicial estação 1
# Inicio inclusão de registro inicial demais estações
# Verificação da estação e evento Ok
if slinha[0]!="" and slinha[1][0]!="" and slinha[2][0]!="1" and
slinha[3][0]=="0":
#print("Estou aqui")
n=slinha[2][0]
if
Registro.objects.values().filter(codigo=slinha[0],
estacao=atual-1, evento=9):
for x in range(1,int(n)+1):
if
Registro.objects.values().filter(codigo=slinha[0], estacao=x):
matrizteste[x]='ok'
else:
matrizteste[x]='nok'
for i in range(1,int(n)):
if matrizteste[i]=="nok":
ser.write(str(i))
break
else:
ser.write("0")
matrizteste=['ok','','','','','','','','']
else:
ser.write(str(anterior))
else:
#print("Estou aqui 2")
if slinha[0]!="" and slinha[1][0]!="" and slinha[2][0]!="1"
and slinha[3][0]!="0":
n=slinha[2][0]
for x in range(1,int(n)+1):
if
Registro.objects.values().filter(codigo=slinha[0], estacao=x):
matrizteste[x]='ok'
else:
matrizteste[x]='nok'
for i in range(1,int(n)):
if matrizteste[i]=="nok":
ser.write(str(i))
break
if
Registro.objects.values().filter(codigo=slinha[0], estacao=atual-1, evento=9):
#print("Estou aqui3")
r = Registro(
codigo=slinha[0],
operador=Operador.objects.filter(codigo=slinha[1][0])[0],
estacao=Estacao.objects.filter(codigo=slinha[2][0])[0],
evento=Evento.objects.filter(codigo=slinha[3][0])[0],
)
r.save()
ser.write("9")
matrizteste=['ok','','','','','','','','']
else:
if
Registro.objects.values().filter(codigo=slinha[0], estacao=atual-1, evento=9):
#print("Estou aqui4")
r = Registro(
codigo=slinha[0],
operador=Operador.objects.filter(codigo=slinha[1][0])[0],
estacao=Estacao.objects.filter(codigo=slinha[2][0])[0],
evento=Evento.objects.filter(codigo=slinha[3][0])[0],
)
r.save()
matrizteste=['ok','','','','','','','','']
else:
ser.write(str(anterior))
s=1
if (matrizxbee[s]=='6789'):
print("Testando xbee 6789")
print("Não disponivel")
s=0
#Fim verificação xbee
time.sleep(5)
def le_arquivo(arq):
arquivo = open(arq, 'r')
for linha in arquivo.readlines():
linha = linha.split('.')
print linha[0], linha[1], linha[2], linha[3]
r = Registro(
codigo=linha[0],
operador=Operador.objects.filter(codigo=linha[1])[0],
estacao=Estacao.objects.filter(codigo=linha[2])[0],
evento=Evento.objects.filter(codigo=linha[3].replace('\n',''))[0],
)
r.save()
if __name__ == "__main__":
oparser = OptionParser(usage=u'%prog [opcao]')
oparser.add_option('--usb', action="store_true",
help=u'Faz a leitura dos dados da porta USB.')
oparser.add_option('--arquivo', action="store_true",
help=u'Faz a leitura dos dados de um arquivo')
options, args = oparser.parse_args()
if not options.usb and not options.arquivo:
oparser.print_help()
if options.usb:
le_usb('/dev/ttyUSB0')
if options.arquivo:
le_arquivo('arquivox.txt')
No diretorio rprfid/main, tem o arquivo models.py onde tem a estrutura do banco de dados
# -*- coding: utf-8 -*from django.db import models
from django.contrib.auth.models import User
class Evento(models.Model):
codigo = models.CharField(max_length=50)
nome = models.CharField(max_length=50)
descricao = models.TextField()
def __unicode__(self):
return '%s %s' % (self.codigo, self.nome)
class Estacao(models.Model):
codigo = models.CharField(max_length=50)
nome = models.CharField(max_length=50)
descricao = models.TextField()
def __unicode__(self):
return self.nome
class Operador(models.Model):
usuario = models.ForeignKey(User)
codigo = models.CharField(max_length=64)
setor = models.CharField(max_length=64)
cargo = models.CharField(max_length=64)
def __unicode__(self):
return '%s %s' % (self.codigo, self.usuario)
class Registro(models.Model):
codigo = models.CharField(max_length=10)
operador = models.ForeignKey('Operador')
estacao = models.ForeignKey('Estacao')
evento = models.ForeignKey('Evento')
data = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.codigo
No diretorio rprfid/main, tem o arquivo views.py onde tem o direcionamento da pagina index.html
from django.template import RequestContext
from django.shortcuts import render_to_response
from rprfid.main.models import Evento, Estacao, Operador, Registro
def index(request):
return render_to_response(
'index.html',
{'registro': Registro.objects.all(),
},
context_instance=RequestContext(request)
)
No diretorio rprfid/templates, tem o arquivo index.html
{% extends "base_header_menu_footer.html" %}
{% load i18n %}
{% block content %}
<div id="display_box">
<div class="container">
<h2>{{ registro.count }} {% trans "Registro" %}</h2>
{% if registro.count %}
<table cellspacing="0">
<thead>
<tr><th>Produto</th><th>Operador</th><th>Estacao</th><th>Evento</th><th>Data</th></tr>
</thead>
<tbody>
{% for r in registro %}
<tr class="{% cycle 'row1' 'row2' %}">
<td>{{ r.codigo }}</a></td><td>{{ r.operador }}</td><td>{{ r.estacao }}</td><td>{{ r.evento }}</td><t
d>{{ r.data }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<div id="info">
<p>Nenhum registro encontrado</p>
</div>
{% endif %}
</div>
{% endblock %}

Documentos relacionados