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 %}