PDF - Universidade Federal de São Carlos
Transcrição
PDF - Universidade Federal de São Carlos
UNIVERSIDADE FEDERAL DE SÃO CARLOS CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELÉTRICA PAULO ROGÉRIO FERREIRA SISTEMA ADAPTATIVO DE FARÓIS PARA VEÍCULOS AUTOMOTORES SÃO CARLOS 2014 1 PAULO ROGÉRIO FERREIRA SISTEMA ADAPTATIVO DE FARÓIS PARA VEÍCULOS AUTOMOTORES Trabalho de Conclusão de Curso apresentado ao Departamento de Engenharia Mecânica, da Universidade Federal de São Carlos, como parte dos requisitos para obtenção de grau em Engenharia Elétrica. Orientador: Dr. Roberto Santos Inoue São Carlos 2014 2 “Dedico este trabalho primeiramente а Deus que iluminou о meu caminho durante esta longa caminhada, à minha mãe que me deu muito apoio nos momentos mais difíceis da minha vida, à minha namorada que esteve ao meu lado, me ajudou e nunca mediu esforços para me ajudar.” 3 AGRADECIMENTOS Ao Prof. Dr. Roberto Santos Inoue pela paciência е incentivo na orientação, que tornou possível а conclusão desta monografia. Ao Prof. Dr. Arlindo Neto Montagnoli e Prof. Dr. Osmar Ogashawara pela contribuição, não somente neste trabalho, mas em diversos momentos durante esta graduação. Aos professores membros da banca examinadora, pela presença e contribuição dedicada a esse trabalho. Aos professores do Departamento de Engenharia Elétrica por contribuírem para o meu crescimento profissional e pessoal. Aos técnicos e secretários do Departamento de Engenharia Elétrica, em especial ao Sr. José Roberto Esperança. Aos grandes amigos da primeira turma de Engenharia Elétrica da UFSCAR. Por fim, agradeço aos amigos da moradia estudantil Raimundo Gomides e Allan Fabossi pela amizade. 4 RESUMO A segurança nas rodovias é uma preocupação crescente em todas as partes do mundo e as estatísticas mostram que grande parte dos acidentes fatais em tráfego noturno ocorre devido à iluminação inadequada. É importante melhorar a visibilidade para o motorista para, assim, alcançar um aumento significativo na segurança e conforto na condução. Isto exige uma luz frontal flexível nos veículos, tanto para iluminar a estrada à frente durante a noite quanto para manobras em estradas sinuosas. Neste trabalho é apresentado o desenvolvimento de um protótipo conceitual do AFS (Sistema de Faróis Adaptativos), implementando um algoritmo de controle para movimentar os faróis em ambos os eixos horizontal e vertical de acordo com o ângulo de direção, velocidade e suspensão. 5 ABSTRACT The road safety is a growing concern in all over the world and statistics show that most fatalities in night traffic occurs due to inadequate lighting. It is important to improve visibility for the driver to, thereby, achieve a significant increase in safety and driving comfort. This requires a flexible front light on vehicles, both to illuminate the road ahead at night and for maneuvers on winding roads. This paper presents the development of a conceptual prototype of AFS (Adaptive Frontlighting System), implementing a control algorithm to move the headlights on both horizontal and vertical axes in accordance with the steering angle, speed and suspension. 6 LISTA DE FIGURAS Figura 1 - Distribuição do facho luminoso para Town Light (SCHMIDT, KALZE e EICHHORN, 2007) .................................................................................................................. 12 Figura 2 - Distribuição do facho luminoso para Country Light (SCHMIDT, KALZE e EICHHORN, 2007) .................................................................................................................. 12 Figura 3 - Distribuição do facho luminoso para Motorway Light (SCHMIDT, KALZE e EICHHORN, 2007) .................................................................................................................. 12 Figura 4 - Distribuição do facho luminoso para Adverse Weather Light (SCHMIDT, KALZE e EICHHORN, 2007) ............................................................................................................... 13 Figura 5 - Distribuição do facho luminoso para High Beam (SCHMIDT, KALZE e EICHHORN, 2007) .................................................................................................................. 13 Figura 6 - Distribuições dos fachos luminosos do AFS ........................................................... 13 Figura 7 - Modo de Iluminação Dinâmica ............................................................................... 14 Figura 8 - Módulo de projeção de farol HID de xenônio equipado com AFS (SCHMIDT, KALZE e EICHHORN, 2007) ............................................................................................... 14 Figura 9 - Modo de Iluminação Estática .................................................................................. 15 Figura 10 - Condição Ackermann (GRANDA, J, 2010) .......................................................... 18 Figura 11 - Direção do veículo e ângulo das rodas interna e externa (GRANDA, J, 2010) .... 19 Figura 12 - Modelo equivalente para a direção de um veículo (GRANDA, J, 2010) .............. 20 Figura 13 - Ângulo de correção do modelo cinemático horizontal do AFS (XU e GUOYU, 2011) ......................................................................................................................................... 21 Figura 14 - Modelo analítico para cinemática vertical do AFS................................................ 22 Figura 15 - Suporte da Lâmpada projetado em CAD ............................................................... 25 Figura 16 - Montagem completa do Protótipo em CAD .......................................................... 25 Figura 17 - Suporte da Lâmpada confeccionado em impressora 3D........................................ 25 Figura 18 - Montagem completa do Protótipo ......................................................................... 26 Figura 19 - Processo de impressão 3D ..................................................................................... 26 Figura 20 - Software de impressão 3D ..................................................................................... 27 Figura 21 - Suporte da lâmpada impresso em 3D .................................................................... 27 Figura 22 - Sensor de nível automotivo (DE AMERTEK CORPORATION) ......................... 28 Figura 23 - Sensor de ângulo automotivo (DE AMERTEK CORPORATION) ...................... 29 Figura 24 - Fluxograma de funcionamento do AFS proposto .................................................. 30 Figura 25 - Esquematização do AFS em módulos ................................................................... 31 7 Figura 26 - Diagrama de pinos do microcontrolador (MICROCHIP TECHNOLOGY INC, 2006) ......................................................................................................................................... 32 Figura 27 - Barramento I2C ...................................................................................................... 33 Figura 28 - Condição de START e STOP (NXP SEMICONDUCTORS, 2012) ..................... 34 Figura 29 - Lista de endereços reservados (NXP SEMICONDUCTORS, 2012) .................... 34 Figura 30 - Comunicação com endereçamento de 7bits (NXP SEMICONDUCTORS, 2012) 35 Figura 31 - Transmitindo um Byte para um dispositivo Slave (NXP SEMICONDUCTORS, 2012) ......................................................................................................................................... 36 Figura 32 - Recebendo um Byte de um dispositivo Slave (NXP SEMICONDUCTORS, 2012) .................................................................................................................................................. 36 Figura 33 - Conversor A/D (MIYADAIRA, 2012) .................................................................. 39 Figura 34 - Imagem 3D dos Módulos Slave 01 e Slave02 ....................................................... 40 Figura 35 – Módulos Slave 01 e Slave 02 ................................................................................ 40 Figura 36 - Servomotor ............................................................................................................ 41 Figura 37 - Imagem 3D do Módulo Slave03 ............................................................................ 42 Figura 38 – Módulo Slave 03 ................................................................................................... 42 Figura 39 - Imagem 3D do Módulo Master.............................................................................. 43 Figura 40 – Módulo Master ...................................................................................................... 43 Figura 41 - Esquema elétrico da simulação no Proteus ............................................................ 44 Figura 42 - LPKF Protomat E33 .............................................................................................. 45 Figura 43 – Processo de exportação dos arquivos de layout no formato Gerber ..................... 46 Figura 44 – Processo de desenho das trilhas com a máquina LPKF Protomat E33 ................. 46 Figura 45 - Processo de furação e recorte da placa com a máquina LPKF Protomat E33 ....... 47 Figura 46 – Placa confeccionada com a máquina LPKF Protomat E33 ................................... 47 8 LISTA DE TABELAS Tabela 1 – Define o modo de operação da interface I2C (MIYADAIRA, 2012) ..................... 37 Tabela 2 – Tratamento de borda da interface I2C (MIYADAIRA, 2012) ................................ 37 9 SUMÁRIO AGRADECIMENTOS ................................................................................................................................3 RESUMO ...................................................................................................................................................4 ABSTRACT ...............................................................................................................................................5 LISTA DE FIGURAS .................................................................................................................................6 LISTA DE TABELAS ................................................................................................................................8 1. INTRODUÇÃO ...............................................................................................................................10 1.1. MOTIVAÇÃO ............................................................................................................................. 10 1.2. SISTEMA DE FARÓIS ADAPTATIVOS (ADAPTIVE FRONTLIGHTING SYSTEM - AFS).......................... 11 1.3. SISTEMA DE ILUMINAÇÃO LIGADO A CÂMERAS (CAMERA-LINKED LIGHTING SYSTEMS - CLS) .......... 15 1.4. REVISÃO BIBLIOGRÁFICA .......................................................................................................... 16 2. MODELAGEM ................................................................................................................................18 2.1. TEORIA DE DIREÇÃO ................................................................................................................. 18 2.2. MODELAGEM CINEMÁTICA HORIZONTAL DO AFS........................................................................ 21 2.3. MODELAGEM CINEMÁTICA VERTICAL DO AFS ............................................................................ 22 3. PROJETO MECÂNICO ..................................................................................................................24 4. PROJETO ELETRÔNICO ..............................................................................................................28 4.1. AFS COMERCIAL ...................................................................................................................... 28 4.2. AFS PROPOSTO....................................................................................................................... 29 4.3. MICROCONTROLADOR .............................................................................................................. 31 4.3.1. Comunicação I2C .................................................................................................................. 33 4.3.2. Conversor A/D........................................................................................................................ 38 4.3.3. Timers .................................................................................................................................... 39 4.4. MÓDULOS SLAVE ..................................................................................................................... 39 4.4.1. Slave 01 ................................................................................................................................. 39 4.4.2. Slave 02 ................................................................................................................................. 40 4.4.3. Slave 03 ................................................................................................................................. 40 4.4.4. Módulo Master ....................................................................................................................... 42 4.5. SIMULAÇÃO .............................................................................................................................. 43 4.6. FABRICAÇÃO DAS PLACAS ......................................................................................................... 45 5. CONCLUSÃO .................................................................................................................................48 REFERÊNCIAS BIBLIOGRÁFICAS.......................................................................................................49 APÊNDICE A ..........................................................................................................................................51 ANEXO ....................................................................................................................................................53 10 1. INTRODUÇÃO 1.1. Motivação Os sistemas de iluminação presentes nos veículos automotores enfrentam grande número de problemas devido a visibilidade inadequada e desconforto para o motorista em tráfego noturno. Um dos principais motivos para esses problemas é que o sistema de iluminação do veículo é estático. Ele não muda em relação à rodovia, tráfego, veículos, tempo e condições atmosféricas. Entretanto, já existem sistemas que foram desenvolvidos para solucionar essa situação e que estão presentes em alguns modelos de veículos. Durante anos, muitos estudos mostraram que os sistemas convencionais de iluminação presentes nos veículos de hoje não são adequados. Em particular, o farol baixo apresenta problemas em relação à segurança (detecção de distâncias, identificação de objetos, localização de trajetos) e ao conforto (desconforto por reflexão e sensação de insegurança). Consequentemente, existem fortes argumentos que motivam o desenvolvimento de novos sistemas de iluminação. (JOHANSSON, BERGSTROM, et al., 1963) apud (RUMAR, 1997) Em geral, a maioria dos acidentes se deve a má qualidade de iluminação, seja pela falta de luz em vias ou pelo sistema de iluminação inadequado. A Companhia de Engenharia de Tráfego de São Paulo (CET) - constatou que 40% dos acidentes graves ocorridos em São Paulo acontecem à noite, apesar de essas viagens diárias representarem apenas 20% do total. Isto significa que o risco de acidente à noite é 3,2 vezes maior. (COMPANHIA DE ENGENHARIA DE TRÁFEGO (CET), 2012) Pesquisas realizadas na Inglaterra em locais que sofreram adoção de melhoramentos da iluminação mostraram uma redução de 47% nos acidentes noturnos envolvendo pedestres e de 20% nos outros tipos de acidentes. Houve também 46% de redução nos acidentes fatais e 27% de redução nos acidentes graves. (AKISHINO) Quanto menor a iluminação mais difícil é para o motorista perceber o pedestre. Já com relação ao pedestre, ele tem dificuldade de avaliar a distância e a velocidade com que o veículo se desloca, principalmente, quando o motorista utiliza luz alta ao invés da luz baixa exigida pela lei. 11 Muitos sistemas de iluminação inteligente já têm sido desenvolvidos e aplicados em veículos, porém, ainda busca-se reduzir os custos e simplificar tais sistemas a fim de tornar acessível em larga escala. Um desses sistemas são os Faróis Adaptativos que serão discutidos na próxima seção. 1.2. Sistema de Faróis Adaptativos (Adaptive Frontlighting System - AFS) As discussões de especialistas em iluminação nas últimas décadas formou a visão de um conceito de farol inteligente. Uma das soluções encontradas foi a criação de um sistema de iluminação adaptativo, que muda conforme as circunstâncias durante à direção do veículo. Segundo (SCHMIDT, KALZE e EICHHORN, 2007), em meados de 2006, o primeiro carro equipado com um AFS entrou em produção em série e, até agora, gerou uma reação muito positiva na imprensa de todo o mundo. O sistema introduz ao mercado novas configurações de iluminação frontal, que reproduzem diferentes tipos de distribuição de luz, cada uma específica para uma determinada condição. Assim, temos as seguintes configurações: • Town Light (luz para cidade) – Class V: produz uma distribuição simétrica de luz, com um espalhamento do facho luminoso em regiões mais próximas do veículo (Figura 1). • Country Light (luz para campo) – Class C: adequado para uma faixa de velocidades médias, esta função é caracterizada por um incremento do campo de visão no lado direito da estrada (Figura 2). • Motorway Light (luz para estrada) – Class E: produz características de iluminação adequadas para condução em alta velocidade em estradas, com aumento do campo de visão na faixa de rolamento em que está o veículo (Figura 3). • Adverse Weather Light (luz para condições climáticas adversas) – Class W: tem como principal função evitar o ofuscamento em veículos trafegando no sentido oposto, causado pelo brilho do reflexo do facho luminoso (Figura 4). • High Beam (farol alto): é gerado pela somatória das combinações de todos os elementos de iluminação do AFS e 12 produz um padrão de luz homogêneo e poderoso para a iluminação de distâncias maiores (Figura 5). Figura 1 - Distribuição do facho luminoso para Town Light (SCHMIDT, KALZE e EICHHORN, 2007) Figura 2 - Distribuição do facho luminoso para Country Light (SCHMIDT, KALZE e EICHHORN, 2007) Figura 3 - Distribuição do facho luminoso para Motorway Light (SCHMIDT, KALZE e EICHHORN, 2007) 13 Figura 4 - Distribuição do facho luminoso para Adverse Weather Light (SCHMIDT, KALZE e EICHHORN, 2007) Figura 5 - Distribuição do facho luminoso para High Beam (SCHMIDT, KALZE e EICHHORN, 2007) Além disso, possibilita alterar automaticamente a direção do foco de luz em situações como curvas, cruzamentos e rampas. As funcionalidades do AFS para iluminação de curvas estão divididas em dois modos: iluminação dinâmica e iluminação estática (Figura 6). Figura 6 - Distribuições dos fachos luminosos do AFS 14 No modo de iluminação dinâmica, o sistema óptico principal é movimentado de acordo com o trajeto e características da via. É gerado um acréscimo de iluminação em áreas distantes do veículo com o objetivo de otimizar a orientação do motorista. A Figura 7 mostra a atuação da iluminação dinâmica numa curva. Figura 7 - Modo de Iluminação Dinâmica O movimento do sistema óptico é feito por meio de atuadores eletromecânicos. Há também um elemento central em forma de cilindro rotativo, cujo raio varia ao longo de seu eixo e de sua circunferência. O contorno do cilindro que é projetado na via tem o objetivo de estabelecer a distribuição de luz. Na Figura 8 é possível visualizar o cilindro rotativo no sistema óptico. Figura 8 - Módulo de projeção de farol HID de xenônio equipado com AFS (SCHMIDT, KALZE e EICHHORN, 2007) 15 Na iluminação estática, o aumento da visibilidade ocorre pelo acionamento de lâmpadas adicionais que estão posicionadas em ângulo específico. O acionamento é feito em situações como curvas de pequenos raios, entradas e saídas de vias ou manobras pequenas. Figura 9 - Modo de Iluminação Estática 1.3. Sistema de iluminação ligado a câmeras (Camera-linked lighting systems - CLS) Atualmente, há diversos modelos de veículos que possuem também câmeras ligadas ao sistema de navegação auxiliando em manobras. Não obstante, a grande maioria dos veículos equipados com sistema AFS utiliza também câmeras integradas ao sistema de iluminação. Tal tecnologia é conhecida como CLS (Camera-linked lighting systems). Esse sistema tem o objetivo de verificar a aproximação de veículos à frente e também obstáculos, auxiliando na tomada de decisão quanto à iluminação. Dessa forma, após o processamento das imagens registradas pela câmera, o sistema pode direcionar o facho de luz e acionar uma configuração diferente de iluminação. Portanto, o CLS complementa o AFS dando ainda mais autonomia ao próprio sistema de iluminação. (BIRCH, 2007) apud (LIU, 2008) 16 1.4. Revisão Bibliográfica Muitos pesquisadores e engenheiros têm discutido a viabilidade de melhorias de segurança, tal como, os sistemas inteligentes de iluminação em automóveis. O objetivo desses sistemas é proporcionar melhor visibilidade durante o tráfego noturno, de acordo com as condições da via e estado do veículo. Um módulo eletrônico recebe o sinal de vários sensores e controla o movimento e distribuição de luz. A iluminação automotiva é um dos segmentos mais regulamentados da indústria automotiva e neste setor, a Sociedade de Engenheiros Automotivos – SAE (Society of Automotive Engineers) está entre as associações que contribui com padrões para o segmento. (SUPPLIERBUSINESS LTD, 2007) Os trabalhos a seguir apresentam alguns estudos e implementações realizadas nesse campo e que tomam como base os padrões estabelecidos pela SAE. Em (LIU, LANFANG, et al., 2008), os autores discutiram as principais técnicas do AFS estabelecendo fórmulas que incluem o estado do veículo, a direção e as condições da via. O artigo também estudou as propriedades dinâmicas, a relação entre inclinação e guinada do corpo do veículo e a distribuição de luz com base nos padrões relativos recomendados pela SAE. O estudo é um trabalho básico para o controle automático de iluminação. Considerando os resultados obtidos por (LIU, LANFANG, et al., 2008), foi proposto uma correção por (LIU, LANFANG, et al., 2009) no modelo matemático empregado em curvas recomendado pela SAE. No modelo original, o AFS atua de maneira idêntica em ambos os faróis, ou seja, o ângulo de guinada é o mesmo para os dois módulos. Além disso, a fórmula do modelo só apresenta resultados significativos nos casos de curvas com raios de curvaturas grandes. Por outro lado, fazendo a correção do modelo, os dois módulos AFS atuarão de maneira conjunta, porém, independente. A atuação em uma curva poderá direcionar os módulos para ângulos diferentes. (DONG, SONG, et al., 2011) utilizaram a mesma formulação para curvas recomendado pela SAE e assim propuseram a adaptação do modelo por meio do controle com microcontroladores. Também implementaram circuitos periféricos para 17 realizar a aquisição do sinal de velocidade, sinal do ângulo do volante, acionamento dos motores, entre outros. (GUO, WU e WANG, 2012) e (RONG, GONG e WANG, 2009) desenvolveram soluções similares para o controle do AFS. Diferindo apenas na modelagem dinâmica do sistema, eles utilizaram rede CAN para realizar a interface entre os circuitos periféricos e controle fuzzy para acionamento dos módulos. A rede CAN é bastante indicada para a integração de funcionalidades relacionadas a veículos automotores, pois, dispõe de um protocolo com um conjunto de mensagens bem estabelecidas para essa finalidade. Em (TEXAS INSTRUMENTS, 2013) um guia de referência para o desenvolvimento e implementação de um AFS, utilizando a família de microcontroladores da Texas Instruments, é apresentado. Neste guia é discutido a arquitetura de um AFS e proposto o desenvolvimento de um sistema que possa testar e averiguar as principais funções do AFS. O objetivo desse trabalho de conclusão de curso é o desenvolvimento de um protótipo conceitual do AFS baseando-se nos resultados teóricos de (LIU, LANFANG, et al., 2008) e (XU e GUOYU, 2011), e nos protótipos físicos de (DONG, SONG, et al., 2011) e (TEXAS INSTRUMENTS, 2013). O sistema a ser desenvolvido é composto por módulos funcionais que realizam a leitura dos sinais dos sensores, processamento dos sinais e acionamento de servos motores para movimentação do módulo dos faróis. Todos os módulos estão conectados num barramento de comunicação onde um módulo principal controla a comunicação e gerencia o funcionamento do sistema. 18 2. MODELAGEM Neste capítulo, são apresentadas a geometria e teoria de direção de um veículo, com objetivo de introduzir a modelagem cinemática vertical e horizontal do AFS. 2.1. Teoria de Direção Segundo (GRANDA, J, 2010), num automóvel o arranjo geométrico de ligações nos braços da direção do veículo, responsável por resolver o problema dos ângulos das rodas durante uma curva, é conhecido como condição de Ackermann. A A condição de Ackermann pode ser demonstrada através da Figura 10 e Figura 11, sendo, 𝛿𝑖 é o ângulo de direção da roda interna e 𝛿𝑜 é o ângulo de direção da roda externa, que são definidos com base no centro da curva. A distância entre as rodas frontais é representada por 𝑤 e a distância entre os eixos frontal e traseiro é representado por 𝑙; a distância entre o centro da curva e o ponto médio das rodas traseiras é representada por 𝑅1 e a distância entre o ponto médio das rodas traseiras e o centro de massa 𝐶 é representada por 𝑎2 . Figura 10 - Condição Ackermann (GRANDA, J, 2010) 19 Figura 11 - Direção do veículo e ângulo das rodas interna e externa (GRANDA, J, 2010) A partir dos triângulos ∆𝑂𝐴𝐷 e ∆𝑂𝐵𝐶, os ângulos internos e externos 𝛿𝑖 e 𝛿𝑜 podem ser calculados como segue, tan 𝛿𝑖 = Eliminando 𝑅1 , tem-se tan 𝛿𝑜 = 𝑙 𝑅1 − 𝑙 𝑤 𝑅1 + 2 𝑤 2 1 𝑙 1 𝑙 𝑅1 = 𝑤 + =− 𝑤+ , 2 tan 𝛿𝑖 2 tan 𝛿𝑜 Reorganizando, obtemos a condição de Ackermann, dada por, 𝑤 cot 𝛿𝑜 − cot 𝛿𝑖 = . 𝑙 (1) Para encontrar o raio 𝑅 da curva do veículo, definimos um modelo equivalente semelhante a uma bicicleta, como mostrado na Figura 12. 20 Figura 12 - Modelo equivalente para a direção de um veículo (GRANDA, J, 2010) O raio da curva é perpendicular ao vetor 𝑣 de velocidade do veículo no centro de massa 𝐶. Usando a geometria mostrada no modelo de bicicleta, temos, cot 𝛿 = 𝑅2 = 𝑎22 + 𝑅12 𝑅1 1 = (cot 𝛿𝑖 + cot 𝛿𝑜 ) 𝑙 2 Assim, 𝑅 = �𝑎22 + 𝑙2 cot 2 𝛿, (2) sendo, cot 𝛿 = cot 𝛿𝑜 + cot 𝛿𝑖 . 2 Veremos a seguir que, no processo de cálculo do ângulo de correção dos faróis, deve-se ter previamente o valor do raio da curva. Porém, pelo que já foi exposto, o raio está diretamente relacionado ao centro de massa e a velocidade do veículo. 21 2.2. Modelagem Cinemática Horizontal do AFS A formulação apresentada por (XU e GUOYU, 2011) cita uma formulação empírica obtida e recomendada pela SAE (Society of Automotive Engineers). A Figura 13 mostra o ângulo de correção 𝜙 dado pelo controle horizontal do AFS, que considera como parâmetros de entrada a resposta de direção do volante e a velocidade do veículo. O Valor de 𝜙 é dado por 𝑋 𝜙 = sin−1 � � = sin−1 � 2𝑅 140.𝐻 2𝑅 70.𝐻 � = sin−1 � 𝑅 �, (3) sendo, 𝜙 o ângulo de correção horizontal dos faróis, 𝑋 a distância esperada de iluminação, 𝐻 a altura entre os faróis e o chão, e 𝑅 o raio da curva ou raio de navegação do veículo. Figura 13 - Ângulo de correção do modelo cinemático horizontal do AFS (XU e GUOYU, 2011) De acordo com a expressão dada pela SAE, para o cálculo do valor de 𝜙 é necessário ter o valor o raio da curva, mesmo que esta varie com o trajeto do veículo. Neste momento poderíamos tomar o resultado obtido na seção anterior dado pela equação (2), porém, nesta expressão o valor de 𝑎2 varia com o centro de massa e velocidade. Por sua vez, o centro de massa pode variar de acordo com a 22 carga transportada pelo veículo. Para simplificar essa situação muitas referências propõem uma formulação aproximada para o cálculo do raio da curva. Assim, podemos calcular o valor o raio 𝑅 por, 𝑅≈ 2.3. 𝑙 sin 𝛿𝑖 . (4) Modelagem Cinemática Vertical do AFS Uma função que não é muito explorada pelas referências citadas neste trabalho, mas que está sempre presente nos AFS comerciais, é a cinemática vertical dos faróis. Neste caso, os parâmetros de entrada são o nivelamento do chassi do veículo e a velocidade. Na Figura 14 é apresentado o modelo proposto por (LIU, LANFANG, et al., 2008) para o movimento vertical dos faróis. Figura 14 - Modelo analítico para cinemática vertical do AFS Sendo, 𝑙 a distância entre os eixos frontal e traseiro, 𝐾1 a constante de amortecimento da suspensão dianteira, 𝐾2 a constante de amortecimento da suspensão traseira, 𝑑𝐻1 a variação da altura em relação ao chão da parte dianteira do chassi, 𝑑𝐻2 a variação da altura em relação ao chão da parte traseira do chassi e 𝑒 a excentricidade longitudinal. A excentricidade longitudinal do centro de massa do veículo provoca um desnível no corpo do veículo. Sabe-se que é necessário manter fixo eixo óptico dos faróis e que qualquer inclinação do corpo do veículo refletirá no ângulo de 23 iluminação. Deste modo, o ângulo de inclinação do corpo será o ângulo de correção do AFS. A partir da Figura 14 é possível deduzir a expressão que leva à 𝜃, ângulo de correção vertical dos faróis. Considerando o equilíbrio estático, temos, 𝑚1 . 𝑔(0,5𝑙 − 𝑒) = 𝐾1 . 𝑑𝐻1 . 𝑙 Logo, 𝑚1 . 𝑔(0,5𝑙 + 𝑒) = 𝐾2 . 𝑑𝐻2 . 𝑙 𝑑𝐻2 −𝑑𝐻1 ou, 𝜃 = tan−1 � 𝜃 = tan−1 � 𝑙 �, 𝑚1 . 𝑔[𝐾2 (𝑙 − 2𝑒) − 𝐾1 (𝐿 + 2𝑒)] �. 2. 𝑙. 𝐾1 . 𝐾2 (5) 24 3. PROJETO MECÂNICO Na realização do presente trabalho houve a necessidade do desenvolvimento de uma estrutura mecânica para compor o protótipo do AFS. Esta deveria comportar dois servos motores e uma lâmpada, em cada módulo óptico. A estrutura foi necessária para verificar o funcionamento do protótipo, isto é, observar a movimentação da lâmpada dado o acionamento dos motores. Por se tratar de um protótipo conceitual não foram observados, com rigor, os critérios de desenvolvimento de projeto mecânico. A estrutura de cada módulo óptico do protótipo de AFS consiste de um mecanismo com dois eixos de movimento. É formado por um conjunto de placas acopladas à um suporte para a lâmpada, uma base de sustentação, dois servomotores e uma lâmpada. Todo o desenvolvimento da estrutura foi desenvolvido com auxílio do software Autodesk® Inventor® Professional 3D CAD. Cada componente foi desenhado e montado em ambiente virtual a fim de verificar possíveis interferências e gerar os desenhos para a confecção das peças. Para o suporte da lâmpada foi projetado um paraboloide elíptico que comportasse a lâmpada e se assemelhasse a um farol. Todas as demais partes da estrutura foram projetadas de forma que pudessem ser montadas por processo de colagem. As placas foram confeccionadas em madeira do tipo MDF (Medium Density Fiberboard) e o suporte da lâmpada foi impresso com auxílio de impressora 3D. Os desenhos com as dimensões de cada peça criada podem ser conferidos nos anexos. A prototipagem rápida 3D foi utilizada por permitir, de forma simples, a fabricação do suporte para a lâmpada, cuja geometria é complicada de se obter pelos métodos mais tradicionais. A partir do modelo 3D projetado, o processo de fabricação aditiva cria a peça pela deposição de sucessivas camadas de material. Essas peças permitem testes funcionais, visuais e conceituais à um custo bastante acessível. As Figura 15, Figura 16, Figura 17 e Figura 18 mostram a peça projetada pelo software CAD, o resultado da prototipagem 3D e o protótipo completo, respectivamente. Figura 15 - Suporte da Lâmpada Figura 16 - Suporte da Lâmpada projetado em CAD confeccionado em impressora 3D Figura 17 - Montagem completa do Protótipo em CAD 26 Figura 18 - Montagem completa do Protótipo Figura 19 - Processo de impressão 3D 27 Figura 20 - Software de impressão 3D Figura 21 - Suporte da lâmpada impresso em 3D 28 4. 4.1. PROJETO ELETRÔNICO AFS Comercial Num AFS comercial é comum a utilização de sensores específicos para realizar a leitura das condições do veículo. Os três principais são: “Auto Leveling Sensor” (sensor de nível automotivo), “Auto Angular Sensor” (sensor de ângulo automotivo) e o velocímetro. O sensor de nível automotivo é um sensor que mede as variações que ocorrem no corpo do veículo. Em geral utiliza-se um sensor para cada suspensão a fim de realizar a leitura do estado do chassi do veículo. Este sensor possui alta robustez e não é apenas usado em sistemas de iluminação AFS, mas também, em sistemas de controle de corpo, tais como, sistemas de estabilidade para veículos e sistemas de suspensão ativa. A Figura 22 mostra um modelo desse sensor fabricado pela De Amertek Corporation®. (DE AMERTEK CORPORATION) Figura 22 - Sensor de nível automotivo (DE AMERTEK CORPORATION) O sensor de ângulo automotivo é usado para medir o ângulo de direção do volante. Ele é capaz de detectar 360º graus de posição absoluta com alta precisão e detectar as voltas do volante. Este também não é apenas usado em sistemas de iluminação AFS, mas em qualquer sistema que necessite de sinal de giro, como sistemas de estabilidade para veículos e direção elétrica. A Figura 23 mostra um modelo desse sensor fabricado pela De Amertek Corporation®. (DE AMERTEK CORPORATION) 29 Figura 23 - Sensor de ângulo automotivo (DE AMERTEK CORPORATION) A utilização dos sensores de nível e ângulo citados foi descartada para este projeto devido ao alto custo destes sensores e dificuldade para obtê-los. 4.2. AFS Proposto O desenvolvimento desse projeto buscou comprovar a eficácia da tecnologia do AFS, porém, utilizando uma abordagem mais simples e acessível financeiramente. Buscou-se utilizar ferramentas e soluções que possam servir como parâmetros para outros projetos. O sistema foi dividido em cinco módulos independentes, porém, interconectados. Destes, dois módulos simulam os sensores do ângulo do volante e nível do chassi, respectivamente. Um módulo verifica a velocidade do veículo, recebe os valores lidos pelos sensores e calcula os ângulos de correção; este também é responsável por toda comunicação entre os módulos. Por fim, um módulo recebe os valores de correção do AFS e aciona os servos motores responsáveis pelo movimento do sistema. A Figura 24 apresenta o fluxograma de funcionamento do AFS a ser desenvolvido. Toda a lógica de controle e atuação do sistema será embarcada em módulos microcontrolados. 30 Figura 24 - Fluxograma de funcionamento do AFS proposto 31 A Figura 25 mostra o sistema organizado em módulos e os periféricos de cada módulo. Figura 25 - Esquematização do AFS em módulos 4.3. Microcontrolador O controle de processos ou equipamentos é comumente realizado por intermédio de microcontroladores que contém programas dedicados à aplicação desejada. Muitas vezes o microcontrolador carrega, além das funções de controle, também a função de comunicação com outros circuitos de controle ou o meio exterior. Nos diversos módulos desse sistema optou-se por utilizar os microcontroladores PIC, da Microchip Technology Inc®, por oferecer os requisitos necessários para o desenvolvimento a um custo acessível e pela facilidade de obtenção. O microcontrolador escolhido foi o PIC18F2550A que é construído com base na arquitetura Harvard com instruções do tipo RISC (Computador com Conjunto Reduzido de Instruções). É um dispositivo de 8bits dotado de 32Kbytes de memória de programa e 2048bytes de memória RAM. Esse dispositivo pode ser alimentado com tensões entre 2V e 5.5V, além de operar em frequência de até 48MHz (12MIPS - milhões de instruções por segundo). Ele pode ser alimentado diretamente por um oscilador de 48MHz ou por um cristal associado com o bloco PLL. Esse modelo possui 28 pinos, dos quais 24 podem ser configurados como I/O, e diversos periféricos, tais como memória EEPROM de 256bytes, dois módulos CCP (Captura, Comparador e PWM), um módulo SPI e I2C, 10 conversores A/D de 32 10bits de resolução, dois comparadores analógicos, uma interface de comunicação EUSART, um TIMER de 8bits (TIMER2) e três de 16bits (TIMER0, TIMER1 e TIMER3), um módulo de detecção de alta/baixa voltagem (HLVD), além de um módulo USB 2.0 capaz de operar no modo low-speed (1.5Mbps) ou full-speed (12Mbps). A Figura 12 mostra o diagrama de pinos e a aparência do microcontrolador. (MICROCHIP TECHNOLOGY INC, 2006) Figura 26 - Diagrama de pinos do microcontrolador (MICROCHIP TECHNOLOGY INC, 2006) Dentre os diversos periféricos disponíveis neste microcontrolador, serão utilizados apenas o módulo I2C para comunicação entre os módulos, o conversor A/D para leitura dos sensores, o módulo Timer para base de tempo do sinal de controle dos servos e as saídas I/O. Para a implementação dos algoritmos a serem embarcado nos microcontroladores, optou-se pela utilização do software MPLAB® IDE integrado com o compilador MPLAB® C18, ambos ferramentas oficiais da fabricante Microchip Technology Inc. O MPLAB® IDE é um software de programação que permite uma integração fácil e rápida com o compilador MPLAB® C18 ou outro tipo de compilador. Ele permite gerenciar um projeto, compilar, “debugar” e gravar um programa no microcontrolador, dentre outras funções. Já o compilador MPLAB® C18 é um software capaz de traduzir um código de alto nível, com interface ao programador, para um código correspondente de baixo nível, conhecido como assembly. Isto é feito para que o programa possa ser interpretado por uma máquina, por exemplo, o microcontrolador. 33 4.3.1. Comunicação I2C O I2C (Inter-Intergrated Circuit) é um protocolo de comunicação síncrono Mestre-Escravo (Master-Slave), criado pela PHILIPS, com a finalidade de simplificar a comunicação entre dispositivos eletrônicos. Atualmente, ele é largamente difundido e adotado por diversos fabricantes que o utilizam em seus produtos, dentre eles driver de LCD, memória serial, gerador de tom, conversor A/D e D/A, RTC (Real Time Clock), microcontroladores, etc. (MIYADAIRA, 2012) A comunicação I2C é realizada por duas linhas, sendo uma linha de dados (SDA) e uma de clock (SCL). A linha SCL é controlada pelo dispositivo configurado como Master, o qual é responsável pelo envio do sinal de clock para o dispositivo Slave; a linha SDA é bidirecional, e carrega a informação. O barramento I2C é Multi-Master, o que significa que mais de um dispositivo pode iniciar uma comunicação (enviar o sinal de clock), porém, neste momento, todos os outros dispositivos devem estar configurados como Slave. (NXP SEMICONDUCTORS, 2012) A Figura 27 mostra como os dispositivos podem ser conectados no barramento I2C. Os resistores de pull-up conectados nas linhas SCL e SDA são essenciais para o funcionamento do barramento I2C, pois indicam que o barramento está disponível, uma vez que os dispositivos conectados a ele possuem apenas a função de abaixar a tensão. Estes resistores estão normalmente localizados na faixa de 1K a 10K, e evitam que as linhas fiquem flutuando, e assim previnem erros de comunicação. (MIYADAIRA, 2012) Figura 27 - Barramento I2C Os dados enviados pelo barramento I2C podem ser transferidos a taxas de até 100 kbit/s no modo-padrão (Standard-mode), até 400 kbit/s no modo-rápido 34 (Fast-mode), de até 1 Mbit/s em modo-rápido Plus (Fast-mode Plus). A capacitância do barramento limita o número de dispositivos conectados. (NXP SEMICONDUCTORS, 2012) Na comunicação I2C, o início e o término de uma comunicação são identificados por duas condições: início (START) e parada (STOP). A condição START é verificada quando a linha SDA passa do nível lógico ‘1’ para o nível ‘0’, enquanto a linha de clock (SCL) está em nível ‘1’. Uma condição de STOP é identificada quando a linha SDA passa do nível ‘0’ para o nível ‘1’, enquanto a linha SCL se encontra em nível lógico ‘1’. (MIYADAIRA, 2012) Figura 28 - Condição de START e STOP (NXP SEMICONDUCTORS, 2012) Existem dois tipos de endereçamento possível na comunicação I2C: 7bits e 10 bits. O endereçamento com 10 bits expande o número de endereços possíveis. Os dispositivos configurados para 7bits e 10bits podem ser conectados no mesmo barramento e ambos podem operar em todos os modos de velocidade. Atualmente, o endereçamento com 10 bits não está sendo muito utilizado. Durante configuração de um dispositivo Slave deve-se atentar para a utilização de um endereço válido, pois, nesse protocolo há alguns endereços reservados (Figura 29). (NXP SEMICONDUCTORS, 2012) Figura 29 - Lista de endereços reservados (NXP SEMICONDUCTORS, 2012) 35 Numa comunicação com endereçamento de 7bits, o dispositivo Master envia uma condição START, seguida de 8bits, que compreende o endereço do dispositivo � ), sendo: Slave e o tipo de operação (𝑅/𝑊 • • � = 1 : operação de leitura 𝑅/𝑊 � = 0 : operação de escrita 𝑅/𝑊 Figura 30 - Comunicação com endereçamento de 7bits (NXP SEMICONDUCTORS, 2012) Após o envio do endereço e o tipo de operação, os dispositivos Slaves verificam se o endereço solicitado pelo Master pertence a um deles e retornam um sinal de Acknowledge (força a linha SDA para o nível ‘0’ antes do nono pulso de clock – ACK = 0) caso seja reconhecido; caso contrário, simplesmente não respondem (Not Acknowledge – ACK = 1). • • 𝐴𝐶𝐾 = 0 : dispositivo/comando/dado reconhecido 𝐴𝐶𝐾 = 1 : dispositivo/comando/dado não reconhecido Se nenhum dispositivo Slave responder à chamada, o dispositivo Master deve enviar uma condição de STOP para indicar o fim da comunicação. No caso de algum dispositivo responder a chamada, este irá responder de � ). Se 𝑅/𝑊 � = 1 o Master envia oito pulsos de acordo com a operação solicitada (𝑅/𝑊 clock e a cada pulso efetua a leitura do nível lógico presente na linha SDA, realizando assim a leitura dos 8bits enviados pelo Slave. Após receber o oitavo bit, o dispositivo Master deve responder enviando um nono pulso com ACK = 0. Se � = 0 o Master envia oito pulsos de clock, carregando o dado (8bits) na linha 𝑅/𝑊 SDA , e após o oitavo bit, o dispositivo Slave deve responder com ACK = 0. Durante a operação de escrita/leitura, um ou mais dados podem ser enviados/recebidos tanto para o dispositivo Master como para o Slave, e a comunicação é finalizada com um comando de STOP. (MIYADAIRA, 2012) 36 As Figura 31 e Figura 32 mostram o comportamento do barramento em uma escrita e leitura realizada pelo Master, respectivamente. Figura 31 - Transmitindo um Byte para um dispositivo Slave (NXP SEMICONDUCTORS, 2012) Figura 32 - Recebendo um Byte de um dispositivo Slave (NXP SEMICONDUCTORS, 2012) No AFS proposto, todos os módulos foram configurados para comunicar via I2C. Assim, para a implementação de um algoritmo que permita a comunicação I2C entre os microcontroladores da família PIC18, utilizou-se a biblioteca “i2c.h” presente no compilador MPLAB® C18, que possui as funções de controle e configuração do periférico. Inicialmente, o primeiro passo a ser feito para ativar a comunicação I2C é a configuração do registrador SSPADD do microcontrolador. O registro SSPADD possui duas funções: quando o dispositivo está configurado como Slave, ele contém o endereço do dispositivo (7 bits menos significativos); e quando configurado como Master, ele armazena o valor que define a taxa de comunicação (Baudrate) do I2C, o qual está restrito aos 7bits menos significativos do registro SSPADD. (MIYADAIRA, 2012) 37 Assim, para definir o valor do registro temos, 𝑆𝑆𝑃𝐴𝐷𝐷 < 6: 0 >= 𝐹𝑜𝑠𝑐 4∗𝐵𝑎𝑢𝑑𝑟𝑎𝑡𝑒 − 1. (6) As principais funções utilizadas no controle e configuração da comunicação 2 I C neste projeto foram: CONFIGURAÇÃO DO PERIFÉRICO I2C OpenI2C(modo,velocidade) – Configura o periférico I2C pertencente ao módulo SSP. Onde: modo: uma das constantes listadas na Tabela 1. velocidade: uma das constantes listadas na Tabela 2. Tabela 1 – Define o modo de operação da interface I2C (MIYADAIRA, 2012) Constante Descrição SLAVE_7 Modo Slave com endereço de 7bits SLAVE_10 Modo Slave com endereço de 10bits MASTER Modo Master Tabela 2 – Tratamento de borda da interface I2C (MIYADAIRA, 2012) Constante Descrição SLEW_OFF Tratamento de borda desabilitado. Frequencia de 100KHz e 1MHz. SLEW_ON Tratamento de borda habilitado. Frequencia de 400KHz CONDIÇÃO DE ACKNOWLEDGE AckI2C() – Gera uma condição de Acknowlegde CONDIÇÃO DE NOT ACKNOWLEDGE NotAckI2C() – Gera uma condição de Not Acknowlegde CONDIÇÃO DE START StartI2C() – Gera uma condição de Start no barramento I2C CONDIÇÃO DE STOP StopI2C() – Gera uma condição de Stop no barramento I2C 38 CONDIÇÃO DE RESTART RestartI2C() – Gera uma condição de Restart no barramento I2C DESABILITA O PERIFÉRICO I2C CloseI2C() – Desabilita o periférico I2C pertencente ao módulo SSP RECEPÇÃO DE CARACTERE ReadI2C() ou getcI2C() – Lê um único byte vindo do barramento I2C TRANSMISSÃO DE CARACTERE WriteI2C() ou putcI2C() – Envia um único byte para o barramento I2C STATUS DO BARRAMENTO I2C IdleI2C() – Verifica o status do periférico I2C e aguarda até que o barramento esteja disponível STATUS DO BUFFER DE RECEPÇÃO DataRdyI2C() – Verifica se há um novo byte no buffer de recepção do módulo SSP e retorna ‘1’ se há um dado; caso contrário, retorna ‘0’. 4.3.2. Conversor A/D Um conversor analógico/digital (A/D) converte uma grandeza analógica (temperatura, luminosidade, umidade, etc.) em um valor digital (representação binária) proporcional a ela. Esse valor depende diretamente da resolução e da tensão de referência (Vref) utilizada na conversão, podendo variar de 0 a (2resolução – 1) unidades (Figura 33). (MIYADAIRA, 2012) O conversor A/D do microcontrolador PIC18F2550 possui 10 canais analógicos multiplexados, uma resolução de 10bits, com tensão de referência configurável. Para a utilização desse periférico, também foi utilizada a biblioteca disponível (“adc.h”) no compilador MPLAB® C18. Nesse projeto somente os módulos Master, Slave01 e Slave02 terão esse periférico configurado, sendo estes utilizados para a simulação dos sensores. 39 Figura 33 - Conversor A/D (MIYADAIRA, 2012) 4.3.3. Timers O microcontrolador PIC18F2550 possui quatro Timers, sendo TIMER 0, TIMER 1, TIMER 2 e TIMER 3, que são aplicados fundamentalmente como temporizadores ou contadores. Eles podem ser configurados para serem incrementados por um sinal de clock interno (ciclo de máquina) para o primeiro caso, ou simplesmente por uma fonte externa acoplada a um pino específico para o segundo. Os timers possuem um bloco prescaler, e em alguns casos, um postscaler. O prescaler tem a função de definir o número de vezes que um determinado evento deve ocorrer, antes de o registro ser incrementado. No AFS proposto utilizou-se o TIMER 0, operando como contador no modo de 16bits e utilizando um cristal oscilador de 20Mhz com fonte de clock. A utilização do timer foi necessária para obtenção do sinal de controle dos servos motores. 4.4. Módulos Slave 4.4.1. Slave 01 O módulo Slave 01 simula o sensor de ângulo do volante. Por não ter sido utilizado um sensor específico para a função, como o “auto angular sensor”, utilizamos um potenciômetro e o configuramos num conversor analógico/digital, assim como em (TEXAS INSTRUMENTS, 2013). Em geral um volante automotivo gira até 1440º ou 720º para cada lado (2 voltas). No limite máximo de 720º as rodas do veículo giram aproximadamente 30º, dependendo do modelo do veículo. 40 Para transmissão do ângulo do volante para o módulo Master, via comunicação I2C, normatizamos o valor do conversor A/D para 8bits. Dessa forma, a menor variação das rodas possível de ser identificada pelo sistema foi de 0,235º. As Figura 34 e Figura 35 mostram a imagem 3D e real do módulo Slave 01, respectivamente. O esquema elétrico completo do módulo pode ser conferido nos anexos. Figura 34 - Imagem 3D dos Módulos Slave 01 e Slave02 Figura 35 – Módulos Slave 01 e Slave 02 4.4.2. Slave 02 O módulo Slave 02 simula o desnível do chassi. Num veículo equipado com AFS comercial, geralmente usa-se um sensor de nível (“Auto Leveling Sensor”) acoplado a cada suspensão de roda. O AFS realiza a leitura dos quatro sensores e calcula o desnível do chassi. Neste módulo, o desnível chassi também é simulado por um potenciômetro conectado à um conversor analógico/digital. Este é configurado para enviar a leitura de desnível, normatizada em 8bits, via comunicação I2C. Esse recurso também foi utilizado por (TEXAS INSTRUMENTS, 2013). As Figura 34 e Figura 35 mostram a imagem 3D e real do módulo Slave 01, respectivamente. 4.4.3. Slave 03 O módulo Slave 03 realiza o acionamento dos servos motores que movimentam o AFS. Este módulo possui dois microcontroladores, sendo que, um é responsável pelos motores de movimento horizontal e o outro pelos motores de movimento vertical. Cada microcontrolador recebe do módulo Master um valor hexadecimal correspondente aos valores dos ângulos de correção 𝜙 ou 𝜃. Este valor 41 é convertido para a faixa de atuação do timer configurado, de modo a obter o sinal de controle, equivalente ao ângulo, necessário para acionamento dos servos motores. Os servomotores utilizados são do tipo utilizado em aeromodelismo (Figura 35). Eles possuem a liberdade de apenas 180º graus, mas são precisos quanto a posição. São dispositivos de malha fechada que apresentam movimento proporcional a um sinal de controle. Os servos possuem três fios de interface, dois para alimentação e um para o sinal de controle. O sinal de controle utiliza o protocolo PPM (modulação por posição do pulso) que possui três características básicas: largura mínima, largura máxima e taxa de repetição (frequência). O controle de posição destes servos é realizado por meio de um pulso de controle que é enviado ao motor e a largura do pulso determinará a posição do eixo. Em geral, a taxa de repetição é 50Hz e a largura do pulso do sinal de controle varia de 1 a 2ms. (SAWICZ, 2000) Figura 36 - Servomotor Para gerar o pulso de controle dos motores foi utilizado o TIMER 0 do microcontrolador no modo contador. Assim, de acordo com o valor do ângulo recebido via I2C, a largura do pulso é alterada permitindo o posicionamento do eixo do motor. As Figura 37 e Figura 38 mostram a imagem 3D e real do módulo Slave 01, respectivamente. O esquema elétrico completo do módulo pode ser conferido nos anexos. Figura 37 - Imagem 3D do Módulo Figura 38 – Módulo Slave 03 Slave03 4.4.4. Módulo Master O módulo Master é o responsável por receber os sinais dos sensores do volante e do chassi, realizar a leitura do sensor de velocidade, fazer os cálculos para obtenção dos ângulos de correção e enviar o resultado para o módulo Slave 03. Uma vez que o módulo Master controla a comunicação I2C, é ele que envia o pedido de leitura dos sensores para os módulos Slaves. O primeiro sensor a ser lido é o de velocidade, o qual está ligado ao conversor analógico/digital do próprio módulo Master por um potenciômetro. A função do sensor de velocidade no AFS é impedir a mudança de direção dos faróis quando a velocidade for menor que 20 km/h. Se o valor for superior, o pedido de leitura do ângulo do volante é enviado ao módulo Slave 01, primeiramente. Após a leitura, o Slave 01 envia ao Master um valor hexadecimal de 8bits correspondente ao valor do volante, sendo este valor o ângulo de direção da roda externa à curva (𝛿𝑜). É realizada uma transformação para radianos desse valor e calculado o ângulo de direção da roda interna à curva (𝛿𝑖), por meio da equação (1). Com o valor de 𝛿𝑖 encontramos o raio da curva por meio da equação (4). Por fim, calculamos o valor do ângulo de correção 𝜙 pela equação (3). Em seguida, o Master envia um pedido de leitura do modulo Slave 02 e este responde enviando um valor hexadecimal de 8bits que corresponde ao valor de 43 desnível do chassi. Neste caso, o valor recebido pelo Master já representa ao valor do ângulo 𝜃 expresso pela equação (5). Com os valores dos ângulos de correção 𝜙 e 𝜃 obtidos, uma nova transformação é realizada a fim de normatizar os valores para a faixa hexadecimal de 8bits e permitir o envio via I2C para o módulo Slave 03. A Figura 34 mostra a imagem 3D do circuito. O esquema elétrico completo do módulo pode ser conferido nos anexos. Figura 39 - Imagem 3D do Módulo Figura 40 – Módulo Master Master 4.5. Simulação A principal ferramenta para desenvolvimento e simulação desse projeto foi o software Proteus 8® da fabricante Labcenter Electronics Ltd. O software de desenho e simulação Proteus VSM é uma ferramenta útil para estudantes e profissionais que desejam acelerar e melhorar suas habilidades no desenvolvimento de aplicações analógicas e digitais. Ele permite o desenho de circuitos empregando um entorno gráfico no qual é possível colocar os símbolos representativos dos componentes e realizar a simulação de seu funcionamento sem o risco de ocasionar danos aos circuitos. A simulação pode incluir instrumentos de medição e a inclusão de gráficos que representam os sinais obtidos na simulação. Também tem a capacidade de passar o desenho a um programa integrado chamado ARES o qual permite o desenvolvimento de placas de circuitos impresso. (BERMÚDEZ, 2000) A Figura 41 apresenta o esquema elétrico simulado no software Proteus. 44 Figura 41 - Esquema elétrico da simulação no Proteus 45 Por meio do Proteus®, o algoritmo e funções de cada módulo foram simulados e, posteriormente, realizou-se a integração de todos os módulos para verificação de funcionamento. Já com o programa integrado Ares® foi possível o desenvolvimento dos layouts das placas a serem fabricadas e visualização da imagem 3D do circuito. 4.6. Fabricação das placas No processo de fabricação das placas dos módulos foi utilizada a máquina LPKF Protomat E33, que produz placas de circuito impresso pelo processo de remoção direta do material condutor da placa (Figura 42). A LPKF Protomat E33 utiliza o software CircuitPro® para gerar os arquivos de fabricação da placa e gerenciar o todo o processo de produção. Figura 42 - LPKF Protomat E33 Para que o software CircuitPro® gere os arquivos de fabricação é necessário, primeiro, utilizamos o software Ares® para exportar os arquivos dos layout da placa a ser produzida no formato “gerber”. O formato Gerber é um vetor de imagem 2D bi-nível. Trata-se de um padrão largamente utilizado pela da indústria de software de fabricação de placa de circuito impresso para descrever as imagens placa. A extensão de arquivo padrão é “GBR”, embora outras extensões de arquivo são muito comuns. (UCAMCO, 2004) 46 Figura 43 – Processo de exportação dos arquivos de layout no formato Gerber No processo de fabricação da máquina LPKF três arquivos gerber são essenciais: o arquivo das trilhas, o arquivo dos furos de encaixe dos componentes e o arquivo que contém as dimensões da placa. As Figura 44, Figura 45 e Figura 46 mostram o processo de fabricação e a placa confeccionada pela LPKF Protomat E33. Figura 44 – Processo de desenho das trilhas com a máquina LPKF Protomat E33 47 Figura 45 - Processo de furação e recorte da placa com a máquina LPKF Protomat E33 Figura 46 – Placa confeccionada com a máquina LPKF Protomat E33 48 5. CONCLUSÃO Neste trabalho, foi desenvolvido um protótipo conceitual do AFS que tem como entradas a velocidade do veículo, a leitura do ângulo do volante e o desnível do chassi tal como foi proposto. O processo desenvolvimento do projeto passou pelas etapas de modelagem matemática, simulação com o software Proteus®, testes em bancada por meio de montagem em protoboard, projeto de layouts com software Ares®, fabricação de placas com auxilio da máquina de fabricação de placas de circuito impresso LPKF Protomat E33, projeto da estrutura mecânica com auxílio do software Autodesk® Inventor®, fabricação da estrutura mecânica com madeira MDF, prototipagem de peças em impressora 3D, gravação dos algoritmos em microcontroladores com auxílio do software MPLAB® IDE, montagem e testes. A arquitetura do AFS foi dividida em 4 módulos (dois módulos de sensores, um módulo de controle do AFS e um módulo de atuadores) e a comunicação foi implementada utilizando-se o protocolo I2C. A comunicação I2C se mostrou eficaz na transmissão de dados entre os módulos e cada um dos módulos desempenhou sua função conforme foi proposto. Com o algoritmo de funcionamento embarcado verificamos que a integração e funcionamento dos módulos ocorreram de forma satisfatória. O controle cinemático horizontal e vertical que foi estabelecido proporcionou uma melhor compreensão da cinemática de um veículo e, assim, os resultados obtidos por meio de uma abordagem simples, atestaram a melhoria quanto à qualidade de iluminação de veículos automotores no uso do AFS e explicitou a importância em se popularizar tal sistema. A complexidade do trabalho tendo em vista a escassez de publicações sobre o assunto levou à necessidade de buscar literaturas variadas para superar as dificuldades e desafios encontrados. Contudo, este Trabalho de Conclusão de Curso permitiu unir a teoria à prática, além de, proporcionar o conhecimento, de maneira clara e objetiva, da rotina de projetos no campo da engenharia. Por fim, é importante salientar que no desenvolvimento deste TCC, houve um crescimento e aprofundamento maior de algumas disciplinas do curso de Engenharia Elétrica, o que proporcionou uma qualificação técnica melhor no desenvolvimento profissional. 49 REFERÊNCIAS BIBLIOGRÁFICAS AKISHINO, P. Algumas Técnicas de Engenharia de Tráfego na Redução de Prevenção de Acidentes de Trânsito. [S.l.]: [s.n.]. Apostila. BERMÚDEZ, A. S. Proteus (Isis, Ares). [S.l.]. 2000. BIRCH, S. Illuminating technology. Automotive Engineering International, Warrendale, v. 104, 2007. BMBH, R. B. Automotive Handbook. 6ª. ed. New York: Bentley Publishers, 2004. COMPANHIA DE ENGENHARIA DE TRÁFEGO (CET). Acidentes de Trânsito Fatais Relatório Anual. Município de São Paulo. [S.l.]. 2012. DE AMERTEK CORPORATION. Disponivel em: <http://www.deamertek.com/Index.aspx>. Acesso em: 15 jul. 2014. DECKER, D.; HIMMLER, A.; AMSEL, C. SAE International. Disponivel em: <http://papers.sae.org/2007-01-0601/>. Acesso em: 12 Julho 2012. DONG, G. et al. Study on Adaptive Front-lighting System of Automobile Based on Microcontroller. International Conference on Transportation, Mechanical, and Electrical Engineering. [S.l.]: [s.n.]. 2011. GMBH, R. B. Autoelektrik/Autoelektronik. 4ª. ed. [S.l.]: Beijing Institute of Technology Press, 2004. GRANDA, J. Vehicle Dynamics and Design Course. Swiss Federal Institute of Technology Zurich. [S.l.]. 2010. GUO, Y.; WU, Q.; WANG, H. Design And Implementation Of Intelligent Headlamps Control System Based On CAN Bus. International Conference on Systems and Informatics. [S.l.]: [s.n.]. 2012. JOHANSSON, G. et al. Visible distances in simulated night driving conditions with full and dipped headlights. [S.l.]: United Kingdom: Taylor & Francis, v. 2, 1963. p. 73-79. LIU, H. et al. AFS controlling algorithm. International Conference on Optical Instruments and Technology: Optical Systems and Modern Optoelectronic Instruments. [S.l.]: [s.n.]. 2008. 50 LIU, H. et al. Study about AFS Swerve mode. International Conference on Optical Instruments and Technology: Optical Systems and Modern Optoelectronic Instruments. [S.l.]: [s.n.]. 2009. LIU, J. Aplicação de Leds no Conjunto Ótico Dianteiro de Veículos de Passeio, 2008. LIU, J. Aplicação de Leds no Conjunto Ótico Dianteiro de Veículos de Passeio. Trabalho de Conclusão de Curso (Graduação em Engenharia Mecânica). ed. [S.l.]: Escola Politécnica Universidade de São Paulo, 2008. MICROCHIP TECHNOLOGY INC. PIC18F2550 Datasheet. [S.l.]. 2006. MIYADAIRA, A. N. Microcontroladores PIC18: aprenda e programe em linguagem C. 3ª. ed. São Paulo: Érica, 2012. NXP SEMICONDUCTORS. I2C-bus specification and user manual. [S.l.]. 2012. RONG, H.; GONG, J.; WANG, W. Kinematics Model and Control Strategy of Adaptive Front Lighting System. Second International Conference on Intelligent Computation Technology and Automation. [S.l.]: [s.n.]. 2009. RUMAR, K. Adaptive Illumination System for Motor Vehicles: Towards a More Intelligent Headlighting System. The University of Michigan. [S.l.]. 1997. SAWICZ, D. Hobby Servo Fundamentals. [S.l.]. 2000. SCHMIDT, C.; KALZE, F.; EICHHORN, K. Adaptive Front-Lighting System in LED Technology - Initial Steps and the Future. SAE Technical Paper, Detroid, 2007. SUPPLIERBUSINESS LTD. The Lighting Report, Stamford, 2007. TEXAS INSTRUMENTS. Automotive Adaptive Front-lighting System Reference Design. Renton. 2013. UCAMCO. Gerber File Format Specification. [S.l.]. 2004. XU, C.; GUOYU, L. A Semi-physical Simulation Platform for Adaptive Front Lighting System (AFS). Information Technology Journal, 2011. 51 APÊNDICE A Os resultados dos cálculos a seguir estão implementados nos algoritmos dos módulos correspondentes. SLAVE01 e SLAVE02 - Normatização do conversor A/D para 8bits para envio via I2C para o módulo Master: 𝑦𝐼2𝐶 = 255∗𝑥 1023 = 0,249267 ∗ 𝑥 MASTER - Transformação do valor hexadecimal recebido via I2C do módulo Slave01 para radianos, para uso com as funções matemática da linguagem C. 𝑦𝑟𝑎𝑑 = 𝜋∗(2∗𝑥ℎ𝑒𝑥 −255) 1530 - Cálculo de 𝛿𝑖 pela relação cot 𝛿𝑜 − cot 𝛿𝑖 = 𝛿𝑖 = 𝑎𝑡𝑎𝑛 � - Cálculo do raio da curva: 𝑅= - Cálculo do ângulo de correção 𝜙: 𝑤 𝑙 : 𝑙. tan 𝛿𝑜 � 𝑙 − 𝑤. tan 𝛿𝑜 𝑙 sin 𝛿𝑖 𝜙 = sin−1 � 70 ∗ 𝐻 � 𝑅 52 - Transformação do valor de 𝜙 para hexadecimal de 8bits para envio via I2C ao módulo Slave03, para acionamento dos motores: 𝑥𝑟𝑎𝑑 +0,37315 𝑦ℎ𝑒𝑥 = 255 ∗ � 0,7463 � - Transformação do valor hexadecimal recebido via I2C do módulo Slave02 para radianos, para uso com as funções matemática da linguagem C. 𝑦𝑟𝑎𝑑 = 11𝜋∗(2∗𝑥ℎ𝑒𝑥 −255) 45900 - Transformação do valor de 𝜃 para hexadecimal de 8bits para envio via I2C ao módulo Slave03, para acionamento dos motores: 𝑥𝑟𝑎𝑑 +0,191986 𝑦ℎ𝑒𝑥 = 255 ∗ � 0,383972 � SLAVE03 - A relação entre o duty-cycle de controle do servo motor e o ângulo de resposta é dado por: 𝑥𝑚𝑠 = 𝑦°+90 100 + 0,6 𝑜𝑢 𝑦° = 100(𝑥𝑚𝑠 − 0,6) − 90 53 ANEXO 54 55 56 57 58 59 60 ANEXO H – Algoritmo dos módulos Slave01 e Slave02 /* Paulo R Ferreira /*Trabalho de Conclusão de Curso /****************************************************************************/ /* Sistema de Faróis Adaptativos */ /*------------------------------------------------------------- ------------*/ /* SLAVE 01 */ /****************************************************************************/ /* Bibliotecas */ #include <p18f2550.h> #include <stdio.h> #include <stdlib.h> #include <i2c.h> #include <adc.h> #include <delays.h> /* Configurações */ #pragma config FOSC = HS #pragma config WDT = ON, WDTPS = 16 #pragma config PWRT = OFF #pragma config MCLRE = OFF #pragma config LVP = OFF #pragma config DEBUG = OFF #pragma config PBADEN = OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF #pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF /* Variáveis Globais */ int adc, j, D1; float aux; #define SL01_addr 0x10 /* Inicialização das Funções */ void ConfigPIC(void); void Init_I2C_Slave(void); void InitializeADC(void); int getADC(void); void InterruptVectorHigh(void); //Endereço I2C do dispositivo Slave 01 61 void InterruptHandlerHigh(void); int round(float); /* Rotina de inicialização do módulo I2C Master */ void Init_I2C_Slave(void) { // Configuração do dispositivo slave SSPCON1bits.SSPM0 = 0; //Modo Slave mode com endereçamento de 7bits SSPCON1bits.SSPM1 = 1; SSPCON1bits.SSPM2 = 1; SSPCON1bits.SSPM3 = 0; SSPCON1bits.CKP = 1; //Bit de seleção da polaridade do clock SSPCON1bits.SSPEN = 1; //Habilita e configura os pinos SDA e SCL SSPCON1bits.SSPOV = 0; //Bit indicador de recebimento de overflow SSPCON1bits.WCOL = 0; //Bit de detecção de colisão na escrita SSPCON2 = 0x00; SSPSTATbits.SMP = 1; //Bit de controle do Slew rate SSPSTATbits.CKE = 0; //Bit de seleção SMBus SSPADD = SL01_addr; //Endereço I2C do dispositivo Slave01 (0x10) // Habilita o barramento I2C TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; } /* Rotina de configuração do módulo A/D */ void InitializeADC(void) { TRISAbits.TRISA0 = 1; //Define AN0 como entrada OpenADC( //Habilita e configura o módulo ADC ADC_FOSC_8 //OSC=20Mhz -> Tad = 8/20 = 0,4us & ADC_RIGHT_JUST //Resultado justificado a direita & ADC_2_TAD, //Config. do tempo de aquisição automático ADC_CH0 //Seleção do canal 0 (AN0) & ADC_INT_OFF //Interrupção desabilitada 62 & ADC_VREFPLUS_VDD //Vref+ = Vcc & ADC_VREFMINUS_VSS, //Vref- = Vss ADC_1ANA); //Habilita somente o canal AN0 SetChanADC(ADC_CH0); //Seleção do canal 0 (AN0) } /* Rotina de conversão do A/D */ int getADC(void) { int adc; ConvertADC(); //Inicia conversão while( BusyADC() ); //Aguarda fim da conversão adc = //Armazena o resultado da conversão ReadADC(); //CloseADC(); //Desabilita o módulo conversor A/D return adc; } /* Vetor de Interrupção de Alta Prioridade */ #pragma code InterruptVectorHigh = 0x08 //Desvia o programa para 0x08 void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh //Desvia o programa para a rotina de interrupção _endasm } #pragma code /* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */ #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { if( PIR1bits.SSPIF == 1) //Bit de interrupção I2C { PIR1bits.SSPIF == 0; j = SSPBUF; // Requisição de leitura do disp. Master if (SSPSTATbits.R_W == 1) { //transmissão de dado para o Master adc = getADC(); //Realiza a leitura de AN0 aux = 0.249267*adc; //Normatização para 8bits 63 D1 = round(aux); //Arredondamento do valor if (D1 > 255) { D1 = 255; } SSPBUF = D1; SSPCON1bits.CKP = 1; while( SSPSTATbits.BF == 1 ); //j = SSPBUF; PIR1bits.SSPIF == 0; ClrWdt(); return; } } } /* Rotina para arredondamento de números */ int round(float number) { return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5); } /* Rotina de configuração do PIC */ void ConfigPIC(void) { // Configura a Porta A TRISA = 0b00000000; // Habilita todas as interrupções INTCONbits.GIE = 1; // Habilita todas as interrupções periféricas INTCONbits.PEIE = 1; // Habilita as interrupções SSP PIE1bits.SSPIE = 1; // Trata interrupções SSP recebidas como baixa prioridade IPR1bits.SSPIP = 0; // Trata interrupções USART como baixa prioridade IPR1bits.RCIP = 0; // Bit Flag da interrupção do módulo SSP 64 PIR1bits.SSPIF = 0; } /*********************************************************************************/ // Rotina Principal void main() { ConfigPIC(); Init_I2C_Slave(); InitializeADC(); Delay10KTCYx(100); while(1) { // } } //200ms 65 ANEXO I – Algoritmo do módulo Slave03 /* Paulo R Ferreira /*Trabalho de Conclusão de Curso /*********************************************************************************/ /* Sistema de Faróis Adaptativos */ /*-------------------------------------------------------------------------------*/ /* SLAVE 03(U1) - Motores do Mov. Horizontal */ /*********************************************************************************/ /* Bibliotecas */ #include <p18f2550.h> #include <stdio.h> #include <stdlib.h> #include <i2c.h> #include <timers.h> #include <delays.h> #include <math.h> /* Configurações */ #pragma config FOSC = HS #pragma config WDT = OFF, WDTPS = 1 #pragma config PWRT = OFF #pragma config MCLRE = OFF #pragma config LVP = OFF #pragma config DEBUG = OFF #pragma config PBADEN = OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF #pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF /* Variáveis Globais */ unsigned char j; unsigned int Duty = 61785; int H_angle; float Aux; #define SL031_addr 0x30 /* Inicialização das Funções */ void ConfigPIC(void); void Init_I2C_Slave(void); //Endereço I2C do dispositivo Slave 03(U1) 66 void InterruptVectorHigh(void); void InterruptHandlerHigh(void); /* Rotina de inicialização do módulo I2C Master */ void Init_I2C_Slave(void) { // Configuração do dispositivo slave SSPCON1bits.SSPM0 = 0; //Modo Slave mode com endereçamento de 7bits SSPCON1bits.SSPM1 = 1; SSPCON1bits.SSPM2 = 1; SSPCON1bits.SSPM3 = 0; SSPCON1bits.CKP = 1; //Bit de seleção da polaridade do clock SSPCON1bits.SSPEN = 1; //Habilita e configura os pinos SDA e SCL SSPCON1bits.SSPOV = 0; //Bit indicador de recebimento de overflow SSPCON1bits.WCOL = 0; //Bit de detecção de colisão na escrita SSPCON2 = 0x00; SSPSTATbits.SMP = 1; //Bit de controle do Slew rate SSPSTATbits.CKE = 0; //Bit de seleção SMBus SSPADD = SL031_addr; //Endereço I2C do dispositivo Slave03(U1) (0x30) // Habilita o barramento I2C TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; } /* Vetor de Interrupção de Alta Prioridade */ #pragma code InterruptVectorHigh = 0x08 //Desvia o programa para 0x08 void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code //Desvia o programa para a rotina de interrupção 67 /* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */ #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { //ROTINA DE INTERRUPÇÃO I2C if( PIR1bits.SSPIF == 1) //Bit de interrupção I2C { PIR1bits.SSPIF == 0; j = SSPBUF; // Requisição de escrita do disp. Master if (SSPSTATbits.R_W == 0) { //recebimento de dado do Master if (SSPSTATbits.D_A == 1) { H_angle = SSPBUF; // Armazena o dado recebido j = SSPBUF; // Limpa o registro SSPBUF Aux = 62310 - 4.11765*H_angle; // Calcula o Dutycycle do motor Duty = Aux; PIR1bits.SSPIF = 0; } } } // ROTINA DE INTERRUPÇÃO DO TIMER0 if(INTCONbits.TMR0IF == 1) { //INTCONbits.GIE = 0; PIE1bits.SSPIE = 0; INTCONbits.TMR0IF = 0; if(LATAbits.LATA1) { WriteTimer0(15535); LATAbits.LATA0 = 0; LATAbits.LATA1 = 0; } else { WriteTimer0(Duty); LATAbits.LATA0 = 1; LATAbits.LATA1 = 1; } PIE1bits.SSPIE = 1; 68 } } /* Rotina de configuração do PIC*/ void ConfigPIC(void) { // Configura a Porta A TRISA = 0b00000000; // Habilita todas as interrupções INTCONbits.GIE = 1; // Habilita todas as interrupções periféricas INTCONbits.PEIE = 1; // Habilita interrupção do Timer0 INTCONbits.TMR0IE = 1; // Habilita as interrupções SSP PIE1bits.SSPIE = 1; // Trata interrupções SSP recebidas como baixa prioridade IPR1bits.SSPIP = 0; // Bit Flag da interrupçõo do módulo SSP PIR1bits.SSPIF = 0; // Bit Flag da interrupçõo do Timer0 INTCONbits.TMR0IF = 0; // Configuração dos Timer0 OpenTimer0( TIMER_INT_ON & //Habilita a interrupção do Timer 0 T0_16BIT & //Operação de 16 bits T0_SOURCE_INT & //Seleciona a fonte de clock interna T0_EDGE_RISE & //Valida o sinal na borda de subida T0_PS_1_2 ); //Prescaler igual a 2 (1:2) } /******************************************************************************/ // Rotina Principal void main() { ConfigPIC(); Init_I2C_Slave(); InitializeUSART(); 69 Delay10KTCYx(100); while(1) { // } } //200ms 70 ANEXO J – Algoritmo do módulo Slave03 /* Paulo R Ferreira /* Trabalho de Conclusão de Curso /*********************************************************************************/ /* Sistema de Faróis Adaptativos */ /*-------------------------------------------------------------------------------*/ /* SLAVE 03(U2) - Motores do Mov. Vertical */ /*********************************************************************************/ /* Bibliotecas */ #include <p18f2550.h> #include <stdio.h> #include <stdlib.h> #include <i2c.h> #include <timers.h> #include <delays.h> #include <math.h> /* Configurações */ #pragma config FOSC = HS #pragma config WDT = OFF, WDTPS = 1 #pragma config PWRT = OFF #pragma config MCLRE = OFF #pragma config LVP = OFF #pragma config DEBUG = OFF #pragma config PBADEN = OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF #pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF /* Variáveis Globais */ unsigned char j; unsigned int Duty = 61785; int V_angle; float Aux; #define SL032_addr 0x40 /* Inicialização das Funções */ void ConfigPIC(void); void Init_I2C_Slave(void); //Endereço I2C do dispositivo Slave 03(U2) 71 void InterruptVectorHigh(void); void InterruptHandlerHigh(void); /* Rotina de inicialização do módulo I2C Master */ void Init_I2C_Slave(void) { // Configuração do dispositivo slave SSPCON1bits.SSPM0 = 0; //Modo Slave mode com endereçamento de 7bits SSPCON1bits.SSPM1 = 1; SSPCON1bits.SSPM2 = 1; SSPCON1bits.SSPM3 = 0; SSPCON1bits.CKP = 1; //Bit de seleção da polaridade do clock SSPCON1bits.SSPEN = 1; //Habilita e configura os pinos SDA e SCL SSPCON1bits.SSPOV = 0; //Bit indicador de recebimento de overflow SSPCON1bits.WCOL = 0; //Bit de detecção de colisão na escrita SSPCON2 = 0x00; SSPSTATbits.SMP = 1; //Bit de controle do Slew rate SSPSTATbits.CKE = 0; //Bit de seleção SMBus SSPADD = SL032_addr; //Endereço I2C do dispositivo Slave03(U2) (0x40) // Habilita o barramento I2C TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; } /* Vetor de Interrupção de Alta Prioridade */ #pragma code InterruptVectorHigh = 0x08 //Desvia o programa para 0x08 void InterruptVectorHigh(void) { _asm goto InterruptHandlerHigh _endasm } #pragma code //Desvia o programa para a rotina de interrupção 72 /* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */ #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { //ROTINA DE INTERRUPÇÃO I2C if( PIR1bits.SSPIF == 1) //Bit de interrupção I2C { PIR1bits.SSPIF == 0; j = SSPBUF; // Requisição de escrita do disp. Master if (SSPSTATbits.R_W == 0) { //recebimento de dado do Master if (SSPSTATbits.D_A == 1) { V_angle = SSPBUF; // Armazena o dado recebido j = SSPBUF; // Limpa o registro SSPBUF Aux = 62060 - 2.15686*V_angle; // Calcula o Dutycycle do motor Duty = Aux; PIR1bits.SSPIF = 0; } } } // ROTINA DE INTERRUPÇÃO DO TIMER0 if(INTCONbits.TMR0IF == 1) { //INTCONbits.GIE = 0; PIE1bits.SSPIE = 0; INTCONbits.TMR0IF = 0; if(LATAbits.LATA1) { WriteTimer0(15535); LATAbits.LATA0 = 0; LATAbits.LATA1 = 0; } else { WriteTimer0(Duty); LATAbits.LATA0 = 1; LATAbits.LATA1 = 1; } PIE1bits.SSPIE = 1; } } 73 /* Rotina de configuração do PIC*/ void ConfigPIC(void) { // Configura a Porta A TRISA = 0b00000000; // Habilita todas as interrupções INTCONbits.GIE = 1; // Habilita todas as interrupções periféricas INTCONbits.PEIE = 1; // Habilita interrupção do Timer0 INTCONbits.TMR0IE = 1; // Habilita as interrupções SSP PIE1bits.SSPIE = 1; // Trata interrupções SSP recebidas como baixa prioridade IPR1bits.SSPIP = 0; // Bit Flag da interrupção do módulo SSP PIR1bits.SSPIF = 0; // Bit Flag da interrupção do Timer0 INTCONbits.TMR0IF = 0; // Configuração dos Timer0 OpenTimer0( TIMER_INT_ON & //Habilita a interrupção do Timer 0 T0_16BIT & //Operação de 16 bits T0_SOURCE_INT & //Seleciona a fonte de clock interna T0_EDGE_RISE & //Valida o sinal na borda de subida T0_PS_1_2 ); //Prescaler igual a 2 (1:2) } /******************************************************************************/ // Rotina Principal void main() { ConfigPIC(); Init_I2C_Slave(); InitializeUSART(); Delay10KTCYx(100); while(1) { } } //200ms 74 ANEXO K – Algoritmo do módulo Master /* Paulo R Ferreira /* Trabalho de Conclusão de Curso /*********************************************************************************/ /* Sistema de Faróis Adaptativos */ /*-------------------------------------------------------------------------------*/ /* Master */ /*********************************************************************************/ /* Bibliotecas */ #include <p18f2550.h> #include <stdio.h> #include <stdlib.h> #include <i2c.h> #include <adc.h> #include <timers.h> #include <delays.h> #include <math.h> /* Configurações */ #pragma config FOSC = HS #pragma config WDT = ON, WDTPS = 256 #pragma config PWRT = OFF #pragma config MCLRE = OFF #pragma config LVP = OFF #pragma config DEBUG = OFF #pragma config PBADEN = OFF #pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF #pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF #pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF /* Variáveis Globais */ #define SL01_addr 0x10 //Endereço I2C do dispositivo Slave 01 #define SL02_addr 0x20 //Endereço I2C do dispositivo Slave 02 #define SL031_addr 0x30 //Endereço I2C do dispositivo Slave 03(U1) #define SL032_addr 0x40 //Endereço I2C do dispositivo Slave 03(U2) #define pi 3.141592 #define const 0.004 //0.23° (potenciômetro) #define Phi_max 0.373141 //21.379° #define Theta_max 0.089594 //5.13° 75 /* Inicialização das Funções */ void ConfigPIC(void); void Init_I2C_Master(void); void InitializeADC(void); int getADC(void); void i2c_send_message(unsigned char, unsigned char); unsigned char i2c_read_message(unsigned char); int round(float); /* Rotina de inicialização do módulo I2C Master */ void Init_I2C_Slave(void) { // Configuração do dispositivo slave SSPCON1bits.SSPM0 = 0; //Modo Slave mode com endereçamento de 7bits SSPCON1bits.SSPM1 = 0; SSPCON1bits.SSPM2 = 0; SSPCON1bits.SSPM3 = 1; SSPCON1bits.SSPEN = 1; //Habilita e configura os pinos SDA e SCL SSPCON1bits.SSPOV = 0; //Bit indicador de recebimento de overflow SSPCON1bits.WCOL = 0; //Bit de detecção de colisão na escrita SSPCON2 = 0x00; SSPSTATbits.SMP = 1; //Bit de controle do Slew rate SSPSTATbits.CKE = 0; //Bit de seleção SMBus SSPADD = 49; //clock = FOSC/(4 * (SSPADD + 1)) // 49 para cristal de 20Mhz // Habilita o barramento I2C TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; } /* Rotina de configuração do módulo A/D */ void InitializeADC(void) { TRISAbits.TRISA0 = 1; //Define AN0 como entrada OpenADC( //Habilita e configura o módulo ADC ADC_FOSC_8 //OSC=20Mhz -> Tad = 8/20 = 0,4us & ADC_RIGHT_JUST //Resultado justificado a direita 76 & ADC_2_TAD, //Config. do tempo de aquisição automático ADC_CH0 //Seleção do canal 0 (AN0) & ADC_INT_OFF //Interrupção desabilitada & ADC_VREFPLUS_VDD //Vref+ = Vcc & ADC_VREFMINUS_VSS, //Vref- = Vss ADC_1ANA); //Habilita somente o canal AN0 SetChanADC(ADC_CH0); //Seleção do canal 0 (AN0) } /* Rotina de conversão do A/D */ int getADC(void) { int adc; ConvertADC(); //Inicia conversão while( BusyADC() ); //Aguarda fim da conversão adc = //Armazena o resultado da conversão ReadADC(); //CloseADC(); //Desabilita o módulo conversor A/D return adc; } /* Rotina de envio de dados para o módulo Slave */ void i2c_send_message(unsigned char address, unsigned char data0) { IdleI2C(); // Aguarda até que o barramento esteja livre StartI2C(); // Envia Start IdleI2C(); // Aguarda até que o barramento esteja livre WriteI2C( address ); // Envia o endereço IdleI2C(); // Aguarda até que o barramento esteja livre WriteI2C( data0 ); // Envia o dado IdleI2C(); // Aguarda até que o barramento esteja livre StopI2C(); // Envia Stop IdleI2C(); // Aguarda até que o barramento esteja livre } // Rotina de leitura de dados do módulo Slave unsigned char i2c_read_message(unsigned char address) { unsigned char Flag, D1; IdleI2C(); // Aguarda até que o barramento esteja livre StartI2C(); // Envia Start IdleI2C(); // Aguarda até que o barramento esteja livre Flag = WriteI2C( address|0x01 ); // Envia o endereço 77 IdleI2C(); // Aguarda até que o barramento esteja livre D1 = ReadI2C(); // Recebe o dado IdleI2C(); // Aguarda até que o barramento esteja livre NotAckI2C(); // finaliza a leitura do dado IdleI2C(); // Aguarda até que o barramento esteja livre StopI2C(); // Envia Stop return(D1); } /* Rotina para arredondamento de números */ int round(float number) { return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5); } /* Rotina de configuração do PIC*/ void ConfigPIC(void) { // Configura a Porta A TRISA = 0b00000000; // Configura a Porta B TRISB = 0b00000011; } /******************************************************************************/ // Rotina Principal void main() { // Dados do veículo int L = 2500, W = 1500, H = 480; // [mm] // Variáveis do sistema unsigned char Veloc, Volante, Chassi; float Delta_o, Delta_i, R, Phi, Theta, aux; int D_o, D_i, R_g, Phi_g, H_angle, Theta_g, V_angle, dir; // Inicialização ConfigPIC(); Init_I2C_Master(); InitializeADC(); 78 Delay10KTCYx(150); //300ms while(1) { // VERIFICA A VELOCIDADE DO VEÍCULO Veloc = getADC(); if(Veloc > 102) // Verifica se a velocidade é maior que 20km/h { // VERIFICA O ÂNGULO DAS RODAS Volante = i2c_read_message(SL01_addr); // Valor hex[0,255] if(Volante == 127) { Delta_o = 0; } else if(Volante > 127) { Delta_o = (pi*2*Volante - 255*pi)/1530; // Valor em rad (float) } else if(Volante < 127) { dir = 1; // 1 = esquerda Volante = Volante + (2*(127-Volante)); Delta_o = (pi*2*Volante - 255*pi)/1530; } Delta_i = atan2( (L*tan(Delta_o)),(L-W*tan(Delta_o)) ); // CALCULA O RAIO DA CURVA R = L/(sin(Delta_i)); // Valor em rad (float) // CALCULA A CORREÇÃO DOS FARÓIS Phi = asin( 70*(H/R) ); // Valor em rad (float) if(Phi > Phi_max) { Phi = Phi_max; } if(dir == 1) { Phi = -Phi; dir = 0; } // CALCULA O VALOR HEX A SER ENVIADO PARA O MOTOR aux = (255*Phi + 255*0.3731)/0.7462; H_angle = round(aux); 79 i2c_send_message(SL031_addr, H_angle); Delay10KTCYx(10); //20ms // VERIFICA O ÂNGULO DO CHASSI Chassi = i2c_read_message(SL02_addr); // Valor hex[0,255] if(Chassi == 127) { Theta = 0; } else if(Chassi > 127) { Theta = -(22*pi*Chassi-2805*pi)/45900; // Valor em rad (float) } else if(Chassi < 127) { Chassi = Chassi + (2*(127-Chassi)); Theta = (22*pi*Chassi-2805*pi)/45900; // Valor em rad (float) } if(Theta > Theta_max) { Theta = Theta_max; } if(Theta < -Theta_max) { Theta = -Theta_max; } // CALCULA O VALOR HEX A SER ENVIADO PARA O MOTOR aux = (255*Theta + 255*0.191986)/0.383972; V_angle = round(aux); i2c_send_message(SL032_addr, V_angle); Delay10KTCYx(5); //10ms } else { i2c_send_message(SL031_addr, H_angle = 128); Delay10KTCYx(5); //10ms i2c_send_message(SL032_addr, V_angle = 128); } //ClrWdt(); } }