UNIVERSIDADE FEDERAL DO PARANÁ SETOR DE TECNOLOGIA DEPARTAMENTO DE ELETRICIDADE ANUNCIADOR POR VOZ DE BAIXO CUSTO PARA CABINA DE ELEVADORES Curitiba, Paraná Novembro de 2005 OTÁVIO JOSÉ SILVEIRA ANUNCIADOR POR VOZ DE BAIXO CUSTO PARA CABINA DE ELEVADORES Projeto Final apresentado como requisito para conclusão do Curso de Graduação em Engenharia Elétrica, do Setor de Tecnologia da Universidade Federal do Paraná. Orientador Professor Dr. Ewaldo Luiz de Mattos Mehl. Curitiba/PR, Novembro de 2005 Resumo O estudo aqui apresentado tem por objetivo apresentar uma solução de baixo custo para sistemas de anunciação por voz de paradas de elevadores, tentando abranger o maior número possível de modelos e tecnologias. É conhecido que em nosso país muitas pessoas e instituições são obrigadas a se privar de coisas relativamente simples por falta de poder aquisitivo. Assim, foi pesquisado o que o mercado oferece de soluções, procurando usar como referência produtos que pudessem representar tão bem quanto possível uma situação que possa ser considerada típica, tanto do lado de tecnologia e forma de funcionamento, quanto de custos de aquisição e instalação. A partir deste ponto, procurou-se minimizar a necessidade de dispositivos extras que façam parte apenas do sistema de anunciação, tais como conjuntos de sensores de posição, e que de alguma forma tenham funções similares com outras do próprio quadro de comando, resultando em uma solução que demande pouco investimento e possa explorar recursos já existentes e que muitas vezes já são considerados obsoletos e se tornam lixo eletrônico. Palavras-chave: Anunciador por voz, baixo custo, deficiente visual, acessibilidade. ii Sumário 1 INTRODUÇÃO ................................................................................................................. 1 2 UMA BREVE DESCRIÇÃO DO CIRCUITO DE CONTROLE DE UM ELEVADOR ................... 2 2.1 2.2 2.3 2.4 FECHAMENTO DA PORTA ......................................................................................... 2 PARTIDA .................................................................................................................. 3 PARADA ................................................................................................................... 4 ABERTURA DA PORTA .............................................................................................. 4 3 O ANUNCIADOR POR VOZ .............................................................................................. 6 4 O MERCADO ATUAL ....................................................................................................... 9 4.1 4.2 SITUAÇÃO EXISTENTE .............................................................................................. 9 SITUAÇÃO PROPOSTA ............................................................................................. 10 5 DESCRIÇÃO DO PROJETO ............................................................................................ 12 6 O SOFTWARE GERENCIADOR ...................................................................................... 14 6.1 6.2 6.3 ESCOLHENDO O AMBIENTE DE TRABALHO ............................................................. 14 A LINGUAGEM VISUAL BASIC ................................................................................ 15 CRIAÇÃO DO SOFTWARE ........................................................................................ 17 6.3.1 Botoeira virtual ............................................................................................ 18 6.3.2 Indo ao próximo andar................................................................................. 19 6.3.3 Porta fechada, elevador descendo ............................................................... 20 6.3.4 Porta aberta, andar térreo ........................................................................... 20 6.4 OBTENDO OS DADOS NECESSÁRIOS DO ELEVADOR ................................................. 23 MÓDULO ELETRÔNICO ................................................................................................ 25 7 7.1 7.2 VALORES DE PICO E MÉDIO: TENSÃO ALTERNADA ................................................. 25 DETECÇÃO DE ABERTURA DE PORTA ...................................................................... 28 7.2.1 O redutor de tensão ...................................................................................... 28 7.2.2 Ponte de Diodos .......................................................................................... 29 7.2.3 Um circuito RC paralelo ............................................................................. 30 7.2.4 Um buffer final ............................................................................................ 33 7.3 DETECÇÃO DA DIREÇÃO DE MOVIMENTO ................................................................ 34 7.4 IDENTIFICAÇÃO DO ANDAR ATUAL ........................................................................ 34 7.4.1 Divisor de tensão ......................................................................................... 34 7.4.2 Detector de pulsos negativos ....................................................................... 35 7.4.3 Formando o pulso de acionamento do contador ........................................ 36 7.4.4 O contador e a conversão para serial ......................................................... 37 7.5 ENVIANDO DADOS PARA O COMPUTADOR .............................................................. 40 7.6 FONTE DE ALIMENTAÇÃO ...................................................................................... 41 8 CUSTOS DO ANUNCIADOR POR VOZ PROPOSTO ........................................................... 44 iii CONCLUSÃO ........................................................................................................................ 45 REFERÊNCIAS ..................................................................................................................... 46 ANEXO A - CÓDIGO-FONTE DO SOFTWARE ....................................................................... 47 ANEXO B - TESTES PRÁTICOS E IDÉIAS DE MELHORIAS .................................................... 52 ANEXO C - DESENHO ESQUEMÁTICO DO MÓDULO ............................................................ 54 GLOSSÁRIO ......................................................................................................................... 55 iv Lista de Figuras Figura 1 - Acionamento do anunciador no fechamento da porta .......................................... 7 Figura 2 - Acionamento do anunciador no fechamento da porta .......................................... 8 Figura 3 - Janela do Visual Basic ....................................................................................... 16 Figura 4 - Janela do programa ........................................................................................... 18 Figura 5 - Fluxograma com a lógica do software ............................................................... 22 Figura 6 - A forma de onda de uma tensão alternada ......................................................... 26 Figura 7 - Polarização direta e polarização reversa ............................................................ 29 Figura 8 - Ponte de diodos e sua atuação com tensões positivas e negativas ..................... 30 Figura 9 - Forma de onda obtida da ponte de diodos ......................................................... 30 Figura 10 - Forma do sinal após a inserção de um capacitor e um resistor na saída... ...... 32 Figura 11 - Circuito completo para detecção de abertura e fechamento de porta .............. 33 Figura 12 - Circuito final do módulo. ................................................................................. 41 Figura 13 - Circuito da fonte de alimentação ..................................................................... 43 v Lista de Tabelas Tabela 1 - Duração dos arquivos WAV usados pelo software ........................................... 23 Tabela 2 - Situações possíveis para acionamento do contador........................................... 36 vi 1 Introdução Hoje em dia é cada vez maior a preocupação da sociedade em permitir que pessoas portadoras de deficiências de qualquer natureza tenham melhores oportunidades de levar uma vida normal, sem que sua deficiência resulte necessariamente em alguma limitação. Rampas e elevadores em lugares onde antes só haviam escadas, escrita braile e o recurso closed caption presente em televisores mais modernos são alguns exemplos desta preocupação. Mesmo assim, ainda há muita coisa que pode ser feita ou aperfeiçoada. Ainda é pequeno o número de estabelecimentos comerciais ou residenciais de qualquer natureza que permitem que deficientes visuais façam uso de elevadores sem a necessidade de um ascensorista para lhes auxiliarem, garantindo de alguma forma que este chegue sem dificuldade ao andar desejado. É fato que existem dispositivos eletrônicos integrados ao circuito de comando e outros facilmente instaláveis em vários modelos de elevadores, que sintetizam voz e são capazes de anunciar o andar sempre que houver uma parada do elevador. Mesmo assim, em muitos prédios antigos ainda é inviável financeiramente tal implantação, devido a limitações de oferta de opções do próprio mercado que sejam compatíveis com orçamentos limitados. Desta forma, é apresentado neste trabalho uma solução capaz de se adaptar a elevadores de qualquer natureza, sejam eles com comando de tecnologia eletromecânica ou digital e com baixo custo de aquisição e implementação. 1 2 Uma breve descrição do circuito de controle de um elevador No dia 27 de outubro de 2005, foi feita uma visita ao local onde se situa as instalações da empresa JOSS Elevadores. Nesta visita, conversou-se com técnicos com a finalidade de se obter informações com o máximo de detalhes possível sobre como funcionam elevadores eletromecânicos e digitais. Durante a permanência no local, foi fornecido o material citado na referência [1] e com este, juntamente com conteúdo informado verbalmente, foi possível conhecer de uma maneira geral como opera um elevador. Um elevador consiste em um importante meio de transporte para pessoas e cargas em nosso mundo, possibilitando um deslocamento vertical com mais rapidez e conforto, em edificações de qualquer natureza. Por conseqüência, permite uma maior acessibilidade a pessoas idosas e/ou deficientes, além de contribuir para a melhoria da qualidade de vida e das condições de trabalho das pessoas, especialmente aquelas que trabalham com transporte de objetos pesados. Independente da tecnologia e do projeto de cada elevador, pode-se citar quatro funções básicas que são executadas após cada registro de chamada: fechamento da porta, partida, parada e abertura da porta. 2.1 Fechamento da porta Uma vez realizada uma chamada, seja através da botoeira da cabina ou de qualquer um dos pavimentos, um sinal elétrico é enviado ao quadro de comando, localizado na casa de máquinas. No quadro de comando está o circuito responsável pela operação e gerenciamento de todas as quatro funções citadas, e parte deste circuito tem uma função de eletricamente, usando uma matriz de relês ou células de memórias em CI´s, reproduzir/emular a exata situação da cabina a cada momento, assim como as chamadas ainda pendentes. Sem esta matriz, o comando não é capaz de saber onde se encontra a cabina e em muitos casos de falta de energia, principalmente em elevadores eletromecânicos, esta matriz é 2 “resetada” tornando-se necessário que o elevador vá até o extremo inferior do poço para haver o ajuste correto de sua posição no circuito de comando. Havendo a chamada, imediatamente o quadro de comando enviará um sinal para o motor e operador da porta da cabina, que a fechará. Prevendo a segurança dos usuários, as portas de pavimento possuem um trinco eletromecânico que garante que: a) a porta da cabina não fechará, nem o elevador irá se movimentar com a porta do pavimento aberta. Caso isso ocorra, o elevador pára automaticamente. b) a porta do pavimento não abrirá caso a cabina não esteja devidamente nivelada no respectivo andar. 2.2 Partida A porta está fechada. O passo seguinte é colocar o elevador em movimento. Similarmente à porta dos pavimentos, a porta da cabina também possui um dispositivo capaz de informar ao quadro de comando que esta se encontra fechada. Quando isto acontece, a parte do circuito localizado no quadro de comando que é responsável pelo motor é acionada, fazendo com que a corrente possa alimentar o motor de tração, ao mesmo tempo em que o freio mecânico que o mantém parado é liberado. Através de um conjunto de polias e cabos de aço, a cabina e o contrapeso entram em movimento. Durante a viagem, o quadro de comando precisa obter informações sobre a posição da cabina no poço do elevador. Para isso, podem ser usados diversos meios, como sensores colocados a cada andar no caso de elevadores mais modernos ou que sofreram modificações. Nos eletromecânicos, é mais comum o uso de escovas distribuídas ao longo do poço de modo que estas são acionadas por um contato fixado na própria cabina, ou por uma fita que acompanha o movimento dos cabos de aço e dotada de pequenos contatos metálicos, com a forma de dentes, movendo pinças e gerando pulsos que são enviados ao quadro de comando. Quando há o contato nas escovas de cada andar ou um contato passa pelas pinças, uma nova célula ou relê na matriz de memória é ativado(a), atualizando a posição do elevador na matriz. 3 Tal alteração é refletida nos indicadores de posição localizados tanto na cabina quanto nos pavimentos, que também receberão pulsos elétricos indicando cada mudança de andar para cima ou para baixo. 2.3 Parada Quando o elevador chegar ao andar de destino, ocorrerá a parada, cujas etapas ocorrerão de forma inversa à da partida. Assim como acontece em cada mudança de um andar para outro, sensores, escovas ou dentes na fita são usados para marcação da exata posição de parada da cabina, havendo também marcos um pouco antes, tanto para cima quanto para baixo, para se saber quando iniciar a frenagem (note que nenhum elevador pára bruscamente em situações normais). Sensores que indicam mudança de pavimento se localizam em posições intermediárias. Ao se atingir o primeiro destes sensores, o de início de parada, o quadro de comando começará a atuar sobre o motor. Elevadores eletromecânicos possuem uma lógica capaz de operar o motor em duas velocidades. Na maior parte do tempo, ele opera em sua velocidade mais alta e só fará uso da mais baixa quando passar no primeiro marco, que indica o momento de início da parada. No caso de elevadores digitais, pode-se conseguir uma parada constante e progressiva, ao contrário dos eletromecânicos, trazendo um conforto maior a seus usuários. O segundo sensor é o responsável pela posição exata onde a cabina deve parar. O mau posicionamento deste poderá fazer com que um degrau entre o piso da cabina e do pavimento se forme, gerando risco de acidentes. A parada definitiva significa a cessão da corrente ao motor de tração e o acionamento de seu freio. 2.4 Abertura da porta Com a cabina parada na posição correta, resta apenas a última etapa para completar o atendimento da chamada: abrir a porta. Já atingimos a condição essencial para isso, que é a 4 cabina parada. Assim, o quadro de comando envia um novo sinal ao motor e operador da porta da cabina, permitindo ao usuário seu acesso ao pavimento desejado. Deste momento em diante, novamente todo o circuito ficará em modo de espera até que a próxima chamada seja efetuada e se reinicie o ciclo aqui descrito. 5 3 O anunciador por voz Tendo uma noção de como um elevador funciona, torna-se mais fácil imaginar a implantação do anunciador por voz desejado. Baseado em estudo de campo, consistindo na visita a várias lojas e prédios da cidade, foram destacados alguns pontos em comum com todos eles, servindo posteriormente para a elaboração da lógica do módulo eletrônico. O correto funcionamento de um anunciador que informe as paradas e as partidas depende de três variáveis, capturáveis no próprio quadro de comando ou através de conjunto de sensores: a) Abertura e fechamento de porta: é a principal variável. Ela irá fazer com que o software do anunciador saiba quando agir, enviando os sons para o alto-falante localizado na cabina assim que a porta abra ou feche. b) Direção de deslocamento: alguns anunciadores também informam o fechamento da porta e a direção de deslocamento, função esta que também está prevista para ser executada no protótipo aqui apresentado. c) Pavimento atual: número do pavimento de parada, a ser anunciado no momento da abertura da porta da cabina. Eis um exemplo prático do que acontece, imaginando que uma pessoa no térreo deseje ir até o 4º andar. Supõe-se também que a cabina não está no térreo, sendo necessário chamar o elevador. Primeiramente, o painel de comando na casa de máquinas agirá deslocando a cabina até o térreo atendendo à chamada. Ao chegar, a porta irá se abrir e o controle do anunciador será capaz de detectar que a abertura ocorreu. Neste momento, um software fará a leitura tanto deste sinal quanto do andar onde está ocorrendo a parada. Sabendo que a porta se abriu no andar térreo, ele vai selecionar o(s) som(ns) correto(s) para ser dito “PORTA ABERTA. ANDAR TÉRREO”, audível no alto-falante localizado no interior da cabina. Na figura 1 é ilustrado o momento da abertura da porta, ativando o anunciador e havendo a veiculação da mensagem. 6 Quarto andar Figura 1 - Acionamento do anunciador na abertura da porta Sabendo que o elevador se encontra no térreo e com a porta aberta, o usuário entrará e poderá apertar o botão relativo ao 4º andar (deve-se de alguma forma assegurar que deficientes visuais possam localizar os botões corretos, dotando-os de números em código braile, por exemplo). Novamente o quadro de comando será acionado, comandando o fechamento da porta, que sendo detectado fará o software acionar a próxima seqüência de sons. Primeiramente, será anunciado “PORTA FECHADA”. Após este anúncio, será checada a direção de deslocamento da cabina (para cima ou para baixo). Tomou-se esta decisão tendo em vista que os componentes eletromecânicos como relês, chaves e mesmo motores de porta da cabina tenham um tempo de acionamento milhares de vezes maior do que os componentes MOS usados no PC, ou mesmo no módulo detector de sinais. Fazendo-se um “passo a passo” de sinais, dá-se um tempo maior no intuito de evitar leituras errôneas. No caso específico deste exemplo, o anúncio poderá ser finalizado com a mensagem “ELEVADOR SUBINDO”. Caso a indicação de subida ou descida seja a única ou a primeira informação anunciada, pode-se programar o anunciador para aguardar alguns poucos décimos de segundo antes de veicular a mensagem. A figura 2 ilustra o acionamento do anunciador no momento em que a porta se fecha, sendo informado o sentido no qual o elevador irá se deslocar. 7 Elevador Subindo Figura 2 - Acionamento do anunciador no fechamento da porta Agora o elevador está subindo até parar no 4º andar. Ao chegar, acontecerá o mesmo procedimento descrito para quando o elevador parou no térreo, dessa vez anunciando “PORTA ABERTA. QUARTO ANDAR”. Pequenas variações deste exemplo são possíveis se considerarmos outros modelos. Alguns elevadores apenas anunciam o andar durante a parada, enquanto outros possam desempenhar as mesmas funções ou até mais do que o aqui exposto, permitindo que enquanto ocioso, o sinal de uma rádio qualquer possa ser enviado à cabina. Pode-se em lojas grandes, instaladas em vários pavimentos interligados por elevador, anunciar qual a seção instalada naquele determinado pavimento. 8 4 O mercado atual 4.1 Situação existente Consideremos inicialmente um elevador eletromecânico com quadro de comando a relê. Há já no mercado várias soluções disponíveis. Em algumas delas, é necessário conectar ao painel de relês um módulo eletrônico capaz de, de alguma forma, identificar algum sinal elétrico referente ao posicionamento da cabina. Outras propõem um sistema independente do circuito de comando do elevador, sendo nesses casos obrigatório a instalação de um conjunto de sensores ao longo de todo o poço. Tal topologia implica em um custo adicional com um conjunto de sensores e fiação, cuja quantidade aumenta proporcionalmente ao número de pavimentos. Além disto, esta instalação requer mais mão de obra e constitui uma fonte extra de risco aos técnicos que farão o serviço. Há, conseqüentemente, um aumento de custo que depende do número de andares da edificação. Na casa de máquinas torna-se necessário haver um espaço adicional para a alocação da placa ou do controlador responsável pelo gerenciamento das mensagens na cabina. Geralmente este espaço está localizado no próprio quadro de comando. Caso, por algum motivo, este já não esteja disponível ou presente, será necessário que de alguma forma seja criada um espaço físico para alocação do controlador, e que para a correta alocação do equipamento, demanda custos extras ao cliente. Se o elevador tiver controle digital, existem vários modelos de placas, algumas delas já contendo o recurso de anunciação por voz no próprio quadro de comando, porém o interesse neste ponto está focado naquelas que não o possuam. Devido a essa enorme gama de casos (considerando também diferenças existentes entre cada modelo já produzido pelas tantas fabricantes atuantes ou que já atuaram na área de fabricação de elevadores), torna-se difícil fixar até mesmo uma faixa de custo total de implementação. 9 Um exemplo de equipamento existente para elevadores eletromecânicos é o Cortex Voice 40 RDEA da JBN Electronics. Este modelo é bastante completo e seu custo total já instalado, ou de modelos similares, pode facilmente passar de R$ 2.000,00. Suas principais características são, segundo referência [4]: a) sensores de posição e transmissão de dados de posição da cabina ao controlador feitas opticamente. b) permite que um canal de rádio FM seja transmitido à cabina enquanto nenhuma mensagem é veiculada. c) saída própria para indicador de posição fornecido separadamente JBN Electronics. 4.2 Situação proposta Embora para prédios aparentemente não represente um preço final tão elevado, os custos estimados para um equipamento já existente no mercado, e onde possa haver um maior número de pessoas para dividir a despesa. Prédios onde venham a se instalar empresas ou associações de pessoas preocupadas em prestar auxílio às pessoas que mais necessitam é onde mais se faz mais necessário qualquer tecnologia que aumente a acessibilidade de deficientes. Em casos como este tal custo por si só se faz um fator que inviabiliza a implantação. Não é raro vermos pessoas pedindo ajuda em campanhas de todas as formas, o que mostra que recursos financeiros já são escassos até mesmo para o objetivo principal destas empresas/pessoas. No caso de edificações com vários elevadores, há a necessidade de se implantar um dispositivo anunciador em cada um deles. Com isso o custo se torna cada vez mais alto a cada nova cabina equipada. 10 Pensando justamente na redução de custos, tentou-se aproveitar ao máximo o que já existe no próprio circuito do elevador, incluindo: a) leitura do sinal enviado aos indicadores de posição, eliminando a necessidade de sensores extras. b) uso do sensor de porta aberta e de contatos e chaves para detecção de abertura de portas e direção de deslocamento. c) gerenciamento de mensagens através de um microcomputador de baixo custo. Pela simplicidade do software, qualquer computador, por mais obsoleto que seja, tem condições de executá-lo. Com isso eliminamos o componente de maior custo em um anunciador convencional. É conveniente lembrar que uma vez que se usa um computador comum, torna-se uma alternativa o uso de algum que já esteja instalado no prédio, seja ele para uso relacionado com serviços da própria administração ou não, para executar a funções do software, reduzindo ainda mais qualquer custo de implantação. 11 5 Descrição do projeto Visando apresentar uma solução mais barata para elevadores eletromecânicos, foi desenvolvido um novo sistema operado via microcomputador, com a capacidade de se adaptar a uma vasta gama de modelos de elevadores e com instalação relativamente simples. Alguns estudos de viabilidade mostram num primeiro momento ser pouco viável investir em um equipamento também capaz de desempenhar sua função em elevadores com tecnologia digital. Empresas de grande porte do ramo de projeto e construção destes não têm interesse em divulgar detalhes construtivos e da arquitetura de seus projetos, o que dificulta o acesso a estas informações, além do próprio circuito por si só, claramente de maior complexidade. Provavelmente haja uma diversidade de circuitos de quadros de comando bastante grande dentro da tecnologia digital. Se assim for, torna-se inviável para qualquer pessoa interessada em desenvolver novas funções para comandos digitais, caso ela não faça parte do quadro de funcionários de alguma empresa responsável por fabricar ou construir elevadores. É muito arbitrária qualquer tentativa de desenvolvimento de anunciadores para operação subordinada a circuitos digitais nestas condições. Caso haja condições favoráveis ao projeto no futuro, o módulo poderá ter sua versão para comando digital desenvolvida. Mesmo assim, os conceitos básicos não mudam, com a vantagem de que já trabalharíamos com pulsos, e é de se esperar que em alguns casos seja possível usá-los diretamente para acionar os contadores responsáveis por indicar o andar atual. Dessa forma, serão considerados no projeto apenas elevadores eletromecânicos. 12 Basicamente ele será dividido em duas partes: a) Um microcomputador para leitura de sinais do módulo eletrônico e decodificação, identificando quais sons deverão ser reproduzidos. Para isto, um software simples deverá ser instalado, já acompanhado de todos os arquivos em formato WAV necessários. b) Um módulo eletrônico para leitura de sinais. Este será anexado a locais específicos do circuito de comando do elevador de modo a estar recebendo os sinais com as informações necessárias. 13 6 O software gerenciador 6.1 Escolhendo o ambiente de trabalho O ambiente Linux, segundo análise feita em fase de planejamento, apresenta diversas vantagens práticas que justificam o desenvolvimento neste ambiente. Primeiramente, o Linux apresenta-se como um sistema de considerável estabilidade, proporcionando a qualquer software uma vulnerabilidade nula a falhas do próprio sistema operacional, tanto de falhas do próprio processamento quanto de vírus, que pouca ou nenhuma ação consegue ter neste ambiente. Ele também exige bem menos recursos de processamento de informações que seu concorrente, o Windows. Isso fica ainda mais evidente quando nossa intenção é ter um programa que não tenha necessidade de uma interface gráfica com o usuário, a qual não é fundamental para o funcionamento do Linux com todas as suas vantagens aqui descritas, tornando-o ainda mais acessível a qualquer computador. Há a opção de se poder executar um programa qualquer automaticamente assim que o Linux for iniciado, assim como é possível se fazer em outros sistemas operacionais conhecidos, como o próprio Windows. Isso garante que mesmo pessoas que não tenham conhecimento algum do sistema operacional sejam capazes de ativá-lo. Como um último ponto positivo, dá-se assim uma contribuição para o combate à pirataria, já que o Linux é de distribuição livre e pode ser adquirido legalmente até mesmo pela Internet sem custos ao usuário. Entretanto, a pouca familiaridade do autor com o sistema operacional, assim como a pouca bibliografia sobre desenvolvimento de software em linguagem C em ambiente Linux, em particular informações sobre os recursos do SDL (Simple DirectMedia Layer) necessários para se reproduzir sons em C e o tempo limitado para desenvolvimento, forçaram mudanças nos planos, fazendo com que o software fosse desenvolvido em Visual Basic, em ambiente Windows. 14 6.2 A linguagem Visual Basic O Visual Basic é uma linguagem bastante poderosa e dinâmica desenvolvida pela Microsoft. Sua origem está no antigo Basic, porém muita coisa mudou: a antiga linguagem não visual e baseada em programas formados por seqüências de linhas de comandos, escritas em modo texto, deu lugar ao dinamismo e à praticidade. A linguagem é baseada na programação orientada a objetos e eventos, ou seja, o programador pode trabalhar diretamente numa interface gráfica e de forma não linear. Os objetos são todos os elementos visuais, como botões de comando e barras de rolagem, e não visuais, como temporizadores, que possuem uma função bem definida para a aplicação desenvolvida. Eventos são uma espécie de comando capaz de acionar blocos de código, disparados a partir de qualquer interação usuário/programa ou de situações específicas relacionadas com falhas, temporizadores e portas de comunicação. Cada objeto criado possui uma série de eventos pré-definidos. Se estes eventos possuírem algum código associado a eles, através de uma Event Procedure, cada vez que estes ocorrerem, o código será executado. As Event Procedures são funções criadas com nomes especiais, na forma “NomeDoObjeto_NomeDoEvento”, e devido ao seu nome, o Visual Basic é capaz de estabelecer a relação entre os objetos e eventos, segundo descreve a referência [9]. Em uma linguagem de programação orientada a objetos e eventos, não há uma ordem pré-estabelecida para que as linhas de código sejam executadas. De fato, as instruções são executadas apenas quando é necessário. Por exemplo: quando se usa um programa para enviar e-mails, este fica ocioso na memória enquanto o usuário redige a mensagem. Apenas quando se deseja enviar a mensagem o programa irá voltar a ficar ativo, executando todas os passos necessários para se realizar o envio da mensagem, voltando a ficar sem ação em seguida. A janela do Visual Basic se divide em quatro partes principais: a) As barras de ferramentas e menus, localizadas na parte superior da tela, possibilitam o acesso aos principais recursos oferecidos, permitindo que rapidamente se adicionem 15 novos formulários, conhecidos popularmente como as janelas do programa, faça testes na aplicação em desenvolvimento ou até mesmo faça uso de assistentes que criam algumas aplicações quase instantaneamente. b) A barra de componentes, localizada à esquerda da tela, que permite que objetos sejam incluídos a um formulário em um clique. Além dos componentes padrão, outros podem ser adicionados facilmente, de forma que o programador possa ser capaz de criar uma variedade ainda maior de aplicações, ou apenas dar a seu programa um visual diferente. c) Barra de projeto, localizada na parte superior direita, permite a navegação entre os diversos formulários, módulos (onde se pode desenvolver funções e declarar variáveis que podem ser chamadas de qualquer parte do programa) e rotinas que compõem a aplicação. d) Barra de propriedades, localizada na parte inferior direita, mostra várias características do objeto atualmente selecionado, permitindo que sua aparência, posição, tamanho e outras características específicas para cada tipo de objeto sejam alteradas. e) Área de trabalho, ocupando a maior parte da tela, onde são exibidos formulários e rotinas criadas, e também permitindo que elas sejam editadas. A figura 3 mostra a janela do Visual Basic 5.0 em espanhol, versão usada para o desenvolvimento do software aqui descrito. Figura 3 - Janela do Visual Basic 16 6.3 Criação do software A lógica básica desenvolvida foi a de ler os dados vindos da porta serial e agir sempre que um novo valor lido seja diferente do anterior. A forma como o programa deverá agir nesses casos é discutida mais à frente. O software é sensível a qualquer mudança nos dados presentes na porta serial, usando esta para leitura de dados, a qual também permite ser programada mais facilmente. Há um evento específico, chamado OnComm, do objeto MSComm que é gerado sempre que uma quantidade de bytes definíveis através da propriedade InputLen é transmitida. Ocorrendo o evento, é acionada a rotina responsável pela decisão do que deve ser feito em função da natureza da mudança do valor. Assim que o programa é carregado, ele vai procurar estabelecer uma conexão com uma porta serial. Neste momento ela será aberta para o recebimento de dados. Deve-se ter cuidado com que porta escolher. Portas seriais na informática são as chamadas portas COM, havendo por padrão sempre duas portas habilitadas, porém é importante atentar que a primeira delas, COM1, por padrão é usada para receber comandos do mouse e dessa forma pode-se impor limitações indesejadas ao usuário do sistema. A outra porta disponível é COM3. Geralmente esta porta é usada para ativar modem´s usados para acesso à Internet via conexão discada. No entanto, este não é considerado um fator relevante neste momento, uma vez que se supõe ser muito improvável que um mesmo computador seja usado para acesso discado à Internet e anunciadores de voz. Não havendo outras aplicações “populares” que façam uso de COM3, a escolha é o uso desta para o recebimento das informações. Uma vez iniciada a transferência de dados, o princípio básico de funcionamento do software é o uso de um temporizador para controlar os tempos de espera entre a reprodução de cada arquivo usado a se fechar ou abrir a porta da cabina. Assim que detectada a mudança na condição da porta, o primeiro som é executado e o respectivo temporizador entra em ação. 17 Todo a lógica do código-fonte do programa é descrito nas próximas seções, sendo usada a referência [3] para se obter conhecimento dos principais comandos e suas respectivas sintaxes e a referência [2] para um entendimento satisfatório de como manipular dados através da porta serial. Por fim, o desenvolvimento do programa gerou o código reproduzido no Anexo A e a janela de programa mostrada na figura 4. Figura 4 - Janela do programa. Como forma de se conseguir a melhor lógica de manipular os arquivos WAV, foi usado um pacote de funções já desenvolvidas pela Microsoft para possibilitar que estes fossem facilmente carregados, sem uma aparente necessidade inicial de se usar um objeto tocador de som para cada um dos arquivos usados para anunciação. Graças a estas foi possível usar o código empregado. Sua versão original encontra-se disponível na referência [6]. 6.3.1 Botoeira virtual Para efeitos de testes e demonstração rápida de como o anunciador funciona, criou-se também uma botoeira virtual abaixo do display do andar, capaz de reproduzir o virtualmente um quadro de comando, a menos de funções de gerenciamento de paradas. Esta botoeira é 18 capaz de fazer o software funcionar gerando os valores corretos a serem lidos pelo programa e em seguida chamando a função que decide qual ação deve ser tomada. A botoeira é formada por uma matriz de objetos “botão de comando”, funcionando similarmente às matrizes de variáveis, bastante conhecidas de qualquer linguagem de programação existente. Com isso, atribui-se índices a cada um dos botões. Assim que um deles é clicado, seu índice na matriz representa o andar para onde ele deve ir. Primeiramente ele simula o fechamento da porta, já ativando um temporizador auxiliar, colocado para simular o deslocamento da cabina ao longo dos andares, evitando que esta chegue ao andar de destino quase que imediatamente. Este temporizador possui uma rotina bastante simples, fazendo uso também de uma variável auxiliar. Essa variável tem a mesma função indicar a direção de movimento do elevador, recebendo o mesmo valor do bit de direção de deslocamento da cabina, fazendo com que uma vez ativado o timer (similar ao acionamento do motor de tração na casa de máquinas) a cada evento OnTimer gerado haja uma mudança de andar. Chegando ao andar de destino, simula-se a abertura da porta e este temporizador é desativado até a próxima chamada. 6.3.2 Indo ao próximo andar A leitura do andar onde o elevador está passando ocorre junto com seu movimento. Como descrito mais à frente, o módulo eletrônico atualiza seus dados assim que identifica o pulso enviado ao indicador de posição e já disponibiliza seu valor à porta serial. Neste momento, o software já identifica que um novo valor está disponível. Como só houve uma mudança de andar, somente estes bit´s serão lidos e o valor é dividido em duas variáveis, sendo D recebendo a dezena do andar e U a unidade. Estas duas variáveis serão utilizadas assim que o elevador realizar a parada e abrir a porta. 19 6.3.3 Porta fechada, elevador descendo O fechamento de porta é o mais simples de todos: quando a porta se fecha, é instantaneamente acionado o som PFE.WAV que contém a mensagem “Porta Fechada”. No mesmo momento, o temporizador “tm_fporta” é ativado, gerando um evento chamado OnTimer assim que a primeira mensagem acabar de ser transmitida. Este evento é gerado pelo temporizador periodicamente, sendo que o tempo entre cada evento é definida pela sua propriedade Interval. Seu valor indica o intervalo em milissegundos. Este valor foi configurado para 1600, baseado no tempo de gravação de PFE.WAV, de 1,5 segundos, mais um pequeno tempo extra que se tornou necessário na prática para que o programa estivesse pronto para prosseguir com a mensagem. O motivo de se tornar necessário mais 0,1s não se sabe exatamente, sendo atribuído a outras aplicações ou rotinas que o Windows estivesse executando no momento ou até mesmo tempo de acesso ao disco rígido. De qualquer forma, o desempenho geral do software continuou satisfatório. Uma vez que o temporizador gere o evento OnTimer, é verificado o bit recebido que contém a informação relativa ao deslocamento da cabina, havendo nessa hora a seleção entre UP.WAV e DOWN.WAV, contendo respectivamente as mensagens “Elevador Subindo” e “Elevador Descendo”. Após este momento, não é mais necessário que outros arquivos sejam reproduzidos, e assim o temporizador “tm_fporta” é novamente desabilitado para evitar que a direção do elevador seja anunciada repetidamente. 6.3.4 Porta aberta, andar térreo A abertura da porta exige uma rotina ligeiramente mais complexa, visto que temos diversos sons a serem executados em seqüência, precisando para isso criar uma lista de reprodução. Quando a porta se abre, três ou quatro arquivos devem ser reproduzidos: o primeiro é o PAB.WAV contendo a mensagem “Porta aberta”, seguido da dezena e da unidade do andar, cujos arquivos que serão reproduzidos são dependentes do número do andar e terminando é reproduzido ANDAR.WAV, com a palavra “andar”. Quando o elevador pára no térreo, a ordem se inverte um pouco, sendo que neste caso torna-se necessário um 20 tratamento diferenciado: o arquivo ANDAR.WAV deve executado antes de TERREO.WAV, portador da palavra “térreo”. Acionado da mesma forma que no caso anterior, a primeira atitude do programa é reproduzir PAB.WAV, enquanto aciona o outro temporizador, chamado de “tm_aporta”. Nesse ponto, ele já está preparado para esperar até que PAB.WAV seja finalizado, sendo atribuído à propriedade Interval um valor adequado. O funcionamento daí em diante estará subordinado a uma variável de controle que indicará qual arquivo, entre a dezena, unidade e a própria palavra “andar” é o próximo da lista. Essa variável, arbitrariamente chamada de OP começa em 0. Este valor indica que o segundo arquivo da seqüência deve ser executado, o primeiro já foi a anunciação da abertura da porta. Com OP igual a zero, há duas opções: se for o térreo, ANDAR.WAV será reproduzido, se for um andar do primeiro ao nono, nada irá acontecer, e se for do décimo para cima, Dx.WAV, onde x representa a dezena do andar atual, contendo mensagens como “Décimo” e “Vigésimo”. Em qualquer um destes casos, novamente a propriedade Interval do temporizador receberá um novo valor compatível com a duração do arquivo tocado no momento. Caso seja um andar entre o primeiro e nono, um valor bem baixo é atribuído a Interval para que logo se reproduza o próximo arquivo. A partir de agora, OP é 1. OP sendo 1 indica que o terceiro arquivo será tocado, novamente de acordo com a necessidade. Estando no térreo, o próximo arquivo é TERREO.WAV, e para os outros casos, Uy.WAV, sendo y a unidade do andar atual, com exceção dos casos onde o elevador esteja em algum pavimento cujo número seja múltiplo de 10, como o 10º ou 20º. Novamente o temporizador é reconfigurado para o próximo caso da mesma forma citada no parágrafo anterior. O próximo passo é atualizar OP, mas agora haverá uma diferenciação: sendo térreo, OP vai direto para 3, enquanto que nos outros casos se torna 2. A seleção dos casos nos quais deve ser feito algo quando OP é 2 já foi feita ainda no passo anterior. Em todos eles, ANDAR.WAV será tocado. Sendo este o último arquivo necessário, não há necessidade de se preocupar com um novo ajuste do temporizador, e apenas OP é atualizado para 3. 21 Esta última situação só existe devido ao fato de haver um número variável de arquivos de som tocados, e está presente como uma forma de finalizar a mensagem e desativar player até que este novamente tenha que entrar em ação. OP igual a 3 apenas torna novamente o temporizador “tm_aporta” inativo. Para facilitar o entendimento da lógica do software, a figura 5 traz um fluxograma que a representa. Como já descrito, há um ciclo que se inicia cada vez que um byte chega pela porta serial. Enquanto um byte não é recebido, o software estará em estado de espera. Assim, este ficará a maior parte do tempo na ação “Aguarda Recebimento de novo byte”, sendo este também o ponto de início da lógica. Figura 5 - Fluxograma com a lógica do software 22 Para os arquivos citados, segue-se a tabela 1, que apresenta uma relação da duração de cada um deles: Tabela 1 - Duração dos arquivos WAV usados pelo software Nome do arquivo Duração [s] u1.wav 1,10s u2.wav 1,25s u3.wav 1,19s u4.wav 1,00s u5.wav 0,91s u6.wav 1,15s u7.wav 1,37s u8.wav 1,27s u9.wav 1,09s d1.wav 1,10s d2.wav 1,47s d3.wav 1,46s d4.wav 1,67s d5.wav 1,69s d6.wav 1,87s d7.wav 1,81s d8.wav 1,80s d9.wav 1,73s up.wav 1,89s down.wav 1,98s pab.wav 1,48s pfe.wav 1,61s terreo.wav 2,02s andar.wav 0,97s Valor de Interval 1220 1370 1310 1120 1030 1270 1490 1390 1210 1220 1590 1580 1790 1810 1990 1930 1920 1850 2010 2100 1600 1730 2140 1090 conteúdo “primeiro” “segundo” “terceiro” “quarto” “quinto” “sexto” “sétimo” “oitavo” “nono” “décimo” “vigésimo” “trigésimo” “quadragésimo” “qüinquagésimo” “sexagésimo” “setuagésimo” “octogésimo” “nonagésimo” “Elevador subindo” “Elevador descendo” “Porta aberta” “Porta fechada” “Andar Térreo” “andar” 6.4 Obtendo os dados necessários do elevador Na comunicação entre o software e o circuito do elevador, feita através da porta serial, observa-se diferenças bastante grandes nos níveis de tensão e formato de sinais, tornando necessária que tal recepção de informações seja feita com o intermédio de um circuito eletrônico, que converterá sinais em corrente alternada com valores de tensão elevados para sinais digitais inteligíveis ao computador. 23 Sua ligação com o módulo eletrônico usando a porta serial é feita através de uma palavra de oito bits, assim constituídas: P D A5 A4 A3 A2 A1 A0 - P constitui o bit mais significativo e indica a situação da porta. 0 significa porta aberta e 1 porta fechada. - D informa a direção de deslocamento da cabina do elevador. 1 se estiver subindo, 0 se estiver descendo. Caso esteja parado (porta aberta) o valor deste bit é ignorado. - A5 a A0: 6 bits que indicam efetivamente o andar onde a cabina do elevador está, independente de estar em movimento ou não. No caso do protótipo desenvolvido, é conveniente alertar que não foi considerado um prédio contendo pavimentos exclusivos para garagem, salão de festas, sub-solo, etc., os quais poderão ser posteriormente incluídos conforme seja necessário. É conveniente salientar que no momento o limite é de 64 pavimentos, sendo este um valor compatível com qualquer prédio hoje existente até mesmo nas grandes metrópoles brasileiras. A leitura e atualização das informações acontece sempre que o valor presente na porta serial é alterado. Sempre que há uma leitura, as informações são processadas, havendo três possibilidades de ação: a) A porta estava aberta e se fechou: o elevador está começando a se deslocar. Deverão ser anunciados o fechamento da porta e a direção de deslocamento. b) A porta estava fechada e continua fechada: mudou-se os dados, havendo apenas um deslocamento para outro andar. Apenas o valor exibido na janela do programa é atualizado. c) A porta estava fechada e se abriu: houve uma parada e deverá ser anunciados a abertura da porta e o andar. O programa não é ainda capaz de detectar situações que não sejam estas. Qualquer outro evento como, por exemplo, uma mudança de andar com a porta aberta é ignorado. A razão para isso é que todo gerenciamento eletrônico envolvido no correto funcionamento de todos os componentes do elevador é função do próprio quadro de comando. 24 7 Módulo eletrônico Cabe ao módulo eletrônico a leitura de todos os três sinais necessários: a) Porta Aberta/fechada. Detecção da condição do contato da porta da cabina. Como pesquisado, com o contato aberto, pode-se medir uma tensão alternada de 60Hz com amplitude aproximada de 55Vrms entre seus terminais. (informação verbal) b) Subida ou descida da cabina. Há um relê no quadro de comando que pode fornecer esta informação. Sua localização exata pode variar de um modelo para outro, assim como a direção representada em cada um de seus estados. Estando aberto, também é mensurável uma tensão alternada de 55Vrms entre seus terminais. c) Andar/posição. Este sinal é o mesmo enviado ao indicador de posição. Sua lógica consiste em um pulso de tensão positiva para deslocar o indicador um andar acima e um de tensão negativa para um andar abaixo, ambos da ordem de 55V também. A função deste módulo é fazer a adequação do sinal para viabilizar sua leitura com segurança ao computador. Os constantes picos de aproximadamente 78V fatalmente queimariam um computador em poucos segundos. Em prol de uma segurança ainda maior, o circuito foi projetado para a queima de componentes do próprio módulo antes que qualquer pico possa de alguma forma atingir o computador usado. Esses componentes funcionam como buffers e consistem em portas lógicas com tecnologia CMOS e serão detalhadas posteriormente. 7.1 Valores de pico e médio: tensão alternada Essas diferenças entre os valores nominais e seus valores de pico se justificam porque tensões alternadas possuem amplitudes variáveis ao longo do tempo, tendo um comportamento que segue o da variação da função seno, originado pelo movimento giratório dos ímãs ou enrolamentos de um gerador. Por este comportamento no tempo, a forma de onda é chamada senóide. 25 Um ciclo completo de uma senóide se inicia no momento em que a tensão é nula e crescente e dura até que novamente a tensão seja nula e crescente, conforme demonstrado na figura 5, onde se dá um exemplo de uma senóide de 60Hz e 78V de tensão de pico. Semiciclo é o nome usado comumente para se falar do período enquanto a tensão for sempre negativa ou sempre positiva. Figura 6 - A forma de onda de uma tensão alternada. No caso em questão, 55V é usado como valor nominal por representar um valor médio de todos os que a tensão assuma ao longo de um ciclo. Para efeito de podermos comparar grandezas elétricas variáveis no tempo, incluindo as tensões alternadas de interesse ao projeto, usa-se um valor médio quadrático. A média quadrática que empregamos para achar este valor garante que tanto os semiciclos positivos quanto os negativos irão ser considerados da mesma forma, sem que haja uma anulação entre os dois, o que ocorreria caso usássemos uma média aritmética, resultando em um valor nulo. Outra razão para se usar um valor médio quadrático é que desta forma obtém-se uma espécie de potência média. Isso significa que médias iguais significam potências médias fornecidas iguais. Assim, um equipamento qualquer alimentado por uma tensão contínua, imutável no tempo, de 127V, receberá a mesma potência/energia que receberia se conectado a uma tomada comum. 26 É desnecessário, no contexto e ênfase deste estudo, apresentar uma justificativa matemática para a equação (1), a qual relaciona valores médios e máximos. Valores médios são conhecidos e os máximos serão necessários para dimensionamento do circuito posteriormente: Ap = 2 . Arms (1) Onde: Ap é a amplitude máxima Arms é a amplitude média (do inglês, root mean square) 2 = 1,414 E o que fazer com essa tensão alternada? Essas magnitudes encontradas no quadro de comando devem ser convertidas primeiramente a sinais digitais de 0V ou 5V para seu processamento lógico. Mesmo antes de seu processamento é razoável que haja uma redução destes níveis, uma vez que vários componentes semicondutores precisam ter contato direto com a forma de onda vinda do quadro de comando e muitos deles não suportam mais do que 30V, e mesmo usar desde esse ponto do circuito níveis compatíveis com a entrada da porta serial, onde a diferença entre eles é de 24V, pode causar queimas constantes de circuitos MOS. Por isso, será necessário usar divisores de tensão desde a captura que abaixem a tensão a níveis mais baixos do que isso. Dessa forma, no final ainda será necessário fazer mais uma adaptação nos níveis de sinais, visto que será necessário enviar à porta serial bits 0 representados por +12V e bits 1 por -12V, conforme referência [8]. Convencionou-se ser mais oportuno usar diretamente as condições de chave dos relês para se obter diretamente um sinal já com uma natureza digital, de amplitudes 0V e 55V. Pode parecer um pouco estranho aos mais leigos, porém mesmo manipulando uma tensão alternada, esta só assume dois valores médios, condição suficiente para ser tratado como um sinal digital. Através de uma lógica para decodificar os pulsos, será armazenado num contador digital, implantado através de um microcontrolador 8051, o andar onde se encontra a cabina. 27 O circuito para processamento dos outros dois sinais (porta e direção) é bastante simples, consistindo ambos em uma operação de retificação e eventual inversão do bit gerado. 7.2 Detecção de abertura de porta Esta parte do circuito pode ser dividida em quatro partes menores: um redutor de tensão, uma ponte de diodos, um circuito RC e um buffer. A leitura será feita em cima dos dois contatos que formam o sensor, sendo que com a porta fechada não haverá diferença de potencial (tensão) entre os contatos, fornecendo ao módulo um bit 0 (zero). Antes de qualquer processamento de sinais, é importante saber que todo o circuito de quadro de comando do elevador funciona com fase flutuante, ou seja, não há um neutro para ser usado como referência de tensão. Nessa condição, é bom fazer a ligação entre o módulo e qualquer relê usando capacitores de acoplamento. No caso de haver qualquer diferença de tensão entre o neutro da rede de energia que alimenta o elevador e o ground fornecido pelo microcomputador, esta diferença ficará retida nos capacitores de acoplamento sem oferecer riscos ao circuito do computador principalmente. 7.2.1 O redutor de tensão O redutor é formado por dois resistores ligados em série entre si, ou seja, são percorridos pela mesma corrente, fazendo com que a queda de tensão em cada um deles seja proporcional a seus valores. Por haver esta distribuição entre os resistores, essa associação também pode ser chamado de divisor de tensão. Como será justificado um pouco mais à frente, é preciso usar valores de pico em todos os cálculos realizados. Aplicando (1) aos 55Vrms presentes nos relês dos quadros de controle, tem-se na Eq. 2: V p = 2 .Vrms = 2 .55 = 77,8V 28 (2) Disto, será usado apenas 5,7V, sendo 5V do próprio sinal digital e mais 0,7V devido aos diodos do retificador. Assim, precisaremos de um resistor R1 com uma queda de tensão de 5,7V e um outro R2 com os demais 72,1V. Como já dito anteriormente, as quedas de tensão são proporcionais às resistências. Assim, temos na Eq. 3: R1 R 2 R2 = => R1 = => R 2 = 12,65R1 5,7 72,1 12,65 (3) 7.2.2 Ponte de Diodos A parte seguinte do circuito é uma ponte de diodos, formada por quatro diodos, dispostos de forma a poderem “inverter” a polaridade dos semiciclos negativos, tornando-os também positivos. Diodos funcionam como chaves unidirecionais, ou seja, permitem que a corrente circule por eles em apenas uma direção. É conhecido que diodos geram uma queda de tensão de aproximadamente 0,7V entre seus terminais quando diretamente polarizado para haver a condução. Devido a esta característica, esta pequena tensão adicional foi adicionada aos 5V necessários para alimentação da parte digital do módulo, resultando nos 5,7V usados no dimensionamento dos resistores do redutor de tensão e na dedução da equação (3). A Figura 4 ilustra as tensões entre os terminais do diodo nos casos de polarização direta e reversa, na qual o corte do diodo faz com que ele concentre em seus terminais toda a tensão vinda da fonte ou o estágio anterior do circuito. Figura 7 - Polarização (A) direta e (B) polarização reversa. 29 Com essa lógica, é possível obter a inversão do semiciclo negativo. Na figura 7 é mostrado um circuito com os quatro diodos da ponte e o trajeto da corrente durante os semiciclos positivos e negativos. Note como na saída obtém-se sempre tensão positiva, uma vez que a corrente na carga circula em apenas um sentido. Figura 8 - Ponte de diodos e sua atuação com tensões (A) positivas e (B) negativas. Devido a esse comportamento da ponte, pode-se já conseguir a forma de onda mostrada na figura 8, considerando a saída em aberto (sem carga e alta impedância de saída): Figura 9 - Forma de onda obtida da ponte de diodos 7.2.3 Um circuito RC paralelo Embora já retificado, ainda temos apenas um sinal que pode ser considerado pulsante, que se enviado através de uma porta serial ou aplicado diretamente a qualquer outro 30 dispositivo digital, certamente gerará uma leitura errônea pelo software, que o identificará como um trem de pulsos. Desta forma, um pequeno circuito RC paralelo é inserido na saída da ponte. Este circuito RC paralelo consiste em um capacitor e um resistor ligados em paralelo, ou seja, submetidos à mesma tensão. A função principal é do capacitor que deverá ser capaz de alimentar o buffer enquanto a tensão na saída da ponte estiver em seus valores mais baixos, ou seja, próximos de 0V (zero volt). Para isso, a corrente fornecida pela ponte em tensões próximas das de pico (que neste caso já é aproximadamente 5V) deverá ser suficiente para carregar o capacitor de uma maneira que ele possa manter o nível de tensão próximo do pico o tempo todo. É como se fosse uma bateria: quando há fornecimento de energia (próximo do pico) ela pode ser carregada para quando for necessário. O resistor tem apenas a função de permitir que o capacitor se descarregue quando não houver mais tensão nos terminais de entrada do circuito. Pode-se notar que não havendo mais sinal na entrada do circuito, como no caso do fechamento do relê correspondente no quadro de comando, o capacitor estará carregado e não poderá se descarregar por diodos reversamente polarizados. Por isso, o resistor é a única forma do capacitor se descarregar. Essa descarga precisa ser rápida o suficiente para uma rápida atualização do sinal digital, porém essa não pode ser excessivamente rápida também, o que comprometeria a qualidade do sinal digital que desejamos uma vez que o capacitor pode passar a atuar de maneira insuficiente e ainda manter o sinal retificado bastante pulsante. Uma forma de se avaliar o bom desempenho do circuito RC é achar uma relação entre os dois componentes através da chamada freqüência de corte. Seu efeito é mais visível em filtros, porém poderá ser aplicada ao menos para uma primeira aproximação para um valor de resistência e capacitância. Após esta primeira aproximação, os valores de R e C foram otimizados por meio de simulação. A relação a ser usada é mostrada na equação (4). 31 1 = 2πf RC (4) Onde: R o valor do resistor em Ω (ohm) C o valor do capacitor em F (Farad) f a freqüência estudada em Hz (Hertz) π = 3,1416 Apesar do sinal que vem da ponte de diodos ser de 120 Hz, o cálculo pode considerar a freqüência inicial, de 60 Hz, resultando após efetuar os cálculos a relação indicada na equação (5): RC = 1 377 (5) Mesmo não atingindo nessa primeira aproximação valores satisfatórios, já é visível o quanto a característica pulsante reduziu. Apesar de ser notável uma tensão de ripple, ou seja, oscilações ainda presentes mesmo com a tensão retificada, não haverá prejuízos de qualidade do sinal, uma vez que dispositivos digitais são pouco sensíveis a pequenas variações de tensão. Na figura 9, é feito um comparativo entre valores estimados e obtidos por simulação. Figura 10 - Forma do sinal com o capacitor e o resistor na saída da ponte de diodos. Acima: onda obtida com (5). Abaixo: sinal melhorado via simulação. 32 7.2.4 Um buffer final Completando o circuito, há um buffer, cuja função principal é bastante simples: corrigir bit´s gerados que não estejam de acordo com a lógica computacional usada. No caso da porta, o contato estará fechado no momento em que a porta também esteja, fazendo com que a ligação deste sinal com o módulo curto-circuite a entrada. Desta forma, teríamos um uma tensão nula na saída, o que representa um bit 0. No entanto, como já descrito anteriormente, convencionou-se que a porta fechada é representada pelo bit 1. É necessário, então, que este bit seja invertido através de uma porta NOT, também conhecida como inversor. Inversores permitem entradas e saídas nos 0V ou 5V que são usados no circuito em questão, sendo que sua saída é sempre a tensão que não está na entrada, motivo pelo qual é conhecido por este nome. Por exemplo, se a entrada é 0V, a saída é 5V. Por ser um componente digital, este também será capaz de corrigir pequenas falhas de nivelamento de sinal que possam ainda estar presentes, sejam elas de imprecisões de componentes utilizados, da própria rede de distribuição de energia ou até mesmo variações do valor exato de tensões encontradas no quadro de comando. Ao passar por este dispositivo digital, certamente será obtido na saída um valor fixo e constante, sem ripple e transitórios se tornam quase instantâneos, colaborando para que o circuito adquira uma imunidade ainda maior a oscilações de tensões advindas da rede de distribuição de energia, que poderiam se refletir de alguma forma tanto no módulo quanto quadro de comando do elevador. A figura 10 mostra o circuito detector do status da porta, sendo a fonte V1 a entrada do sinal vindo da porta da cabina, e o bit gerado disponível na saída do inversor. Figura 11 - Circuito completo para detecção de abertura e fechamento de porta. 33 7.3 Detecção da direção de movimento Consistindo um sinal elétrico da mesma forma do sensor da porta da cabina, é um circuito que possui as mesmas características do anterior, possuindo apenas a diferença de que o buffer é composto por duas portas NOT, sendo que a primeira estará sempre ativa, exercendo a mesma função do outro buffer. A segunda é habilitada se for necessário, por meio de um jumper. Não é possível generalizar um padrão de relê aberto ou fechado para se saber se o elevador vá subir, sendo possível encontrar os dois casos. Prevendo estas duas possibilidades, são usadas duas portas NOT, sendo possível a adaptação a qualquer um dos casos. 7.4 Identificação do andar atual Não mais complexo que os anteriores, a última seção do circuito faz apenas uma função de identificador de pulsos. Como nos dois itens anteriores, é identificável um divisor de tensão, um inversor de pulsos negativos, uma junção dos dois sinais e o contador. 7.4.1 Divisor de tensão O divisor de tensão aqui usado é similar com os anteriores, porém aqui se deve tomar um cuidado extra com outras resistências ligadas diretamente no nó de onde se coleta o pulso já atenuado pelo divisor. Estas interferem diretamente no valor da tensão, uma vez que irão se comportar como resistências em paralelo com o R1 do divisor. Com o intuito de minimizar este efeito durante o projeto, o divisor é feito com valores de resistores bem abaixo dos demais, sendo arbitrados inicialmente valores de 10 a 15 vezes mais baixos do que os usados no restante do circuito. Desta forma, considera-se ainda válida a equação (3) para este caso, uma vez que os níveis de tensão dos pulsos lidos são similares aos lidos nos relês relacionados à porta e à direção de deslocamento. 34 7.4.2 Detector de pulsos negativos A inversão de pulsos negativos é realizada por um amplificador operacional, também conhecido como AMPOP, em sua configuração inversora. Nesta configuração, o amplificador recebe uma malha de realimentação, ou seja, parte de um circuito, que liga a saída novamente à entrada e outra malha na entrada, conectando a entrada inversora do amplificador com o sinal recebido. Ambas as malhas são bastante simples, constituídas por um resistor cada uma. Sabe-se que toda a corrente que vem da fonte de sinal passa pela malha de realimentação. Além disso, os dois terminais de entrada formam um curto-circuito virtual, ou seja, as duas entradas sempre terão um mesmo valor de tensão. Mesmo assim, a corrente não é capaz de entrar no amplificador, e por isso circula em sua integridade pela malha de realimentação. Pode-se chegar a uma relação que nos fornece o ganho, ou seja, o quanto o sinal fica maior em amplitude na saída se comparado com a entrada. O sinal negativo na relação indica a inversão do sinal, o que significa que quando o sinal de entrada tem um aumento de tensão, é refletido com uma redução na saída. Essa relação é dada pela equação (6): A=− R4 R3 (6) Sendo: A o ganho do amplificador R4 o resistor da realimentação R3 o resistor conectado à entrada do amplificador. O objetivo neste momento é inverter pulsos negativos e manter o mesmo nível do sinal da entrada. O ganho, então, precisa ser unitário, indicando a manutenção do nível de entrada e negativo. Assim, o A na equação (7) deve ser -1. −1 = − R4 => R3 = R 4 R3 (7) É sempre bom lembrar que no caso de pulsos positivos, eles não serão invertidos, e sim ignorados. Isso ocorre pelo fato do amplificador ter seu terminal destinado à inserção da 35 alimentação negativa ligado ao terra. Ligado ao terra, não há como obter na saída um valor abaixo deste, evitando que os pulsos positivos sofram alguma alteração. 7.4.3 Formando o pulso de acionamento do contador A esta altura, as duas situações possíveis para os pulsos são detectadas em pontos distintos do circuito, um apenas na entrada (positivo), e o outro apenas na saída do amplificador (negativo). É necessário agora juntar os dois em um único sinal reconhecível pelo contador, visto que a necessidade é se saber apenas se há pulso, não mais como ele é. Como já descrito no item anterior, os dois pontos citados fornecem pulsos positivos de 5V de amplitude. A presença de qualquer um deles terá que acionar um contador e atualizar a informação do andar onde a cabina se localiza, segundo a lógica abaixo, onde 1 significa a presença do pulso, e 0 sua ausência. A tabela 2 resume as situações possíveis. Tabela 2 - Situações possíveis para acionamento do contador Pulso positivo 0 0 1 1 Pulso negativo 0 1 0 1 Aciona contador? não (0) sim (1) sim (1) indiferente (x) No último caso, torna-se indiferente por ser impossível que tal situação aconteça, uma vez que não há como se enviar ao mesmo tempo os dois tipos de pulso, o que resultaria em duas tensões diferentes em um mesmo ponto do circuito e ao mesmo tempo. Com uma análise das três primeiras situações, conclui-se que a combinação presente está de acordo com uma função OR (onde pelo menos um dos pulsos esteja presente para haver o acionamento) ou uma função XOR (pela qual só haveria o acionamento caso um dos pulsos estivesse presente). Foi escolhido o uso de uma porta XOR. O desempenho de qualquer porta feita com transistores MOS será suficiente para esta aplicação. A vantagem desta escolha em relação a uma porta OR é que no caso de haver alguma falha do circuito que resulte numa situação onde 36 este se comporte como recebendo os dois tipos de pulsos ao mesmo tempo, não haverá qualquer atualização de andar na saída do contador. Em qualquer uma das alternativas, no entanto, um pulso de 5V será gerado na saída da porta lógica escolhida e enviado ao contador. E como evitar que o pulso negativo chegue até a porta lógica? Para isso, próximo à entrada destinada a receber os pulsos positivos, foi adicionado um diodo de forma a conectar esta entrada da porta com 0V. No caso de ser enviado um pulso positivo, o diodo estará com polarização reversa e não fará qualquer efeito no circuito. No entanto, há um último problema a se levar em consideração: com o diodo conduzindo, surgirá a pequena queda de tensão da ordem de 0,7V. O ponto negativo dessa situação é que desta forma a entrada do pulso negativo vai estar diretamente conectada ao terra através do diodo, anulando o pulso de nosso interesse, tornando-o indetectável. Para isso, colocou-se mais um resistor entre a entrada do sinal e o diodo. A melhor alternativa é usar um valor alto de resistor para minimizar seus efeitos no resto do circuito no sentido de reduzir mais do que o esperado o nível de tensão do pulso lido. Para a porta lógica, não haverá problemas. Suas entradas possuem uma altíssima resistência na entrada, similarmente ao AMPOP. Isso significa que estas são alimentadas com correntes milhares, ou até milhões de vezes mais baixas do que as presentes em qualquer outro ponto do circuito deste módulo detector de sinais, insuficientes para impedir uma correta passagem dos pulsos positivos. 7.4.4 O contador e a conversão para serial O contador forma a parte final do circuito. Ele sozinho tem a função de gerar os bits contendo a informação de onde o elevador se encontra, a ser enviada ao PC via porta serial. Como já citado antes, ele deve atualizar seu valor (o conjunto de bits que informam o andar atual) cada vez que recebe um pulso vindo da porta XOR descrita no item anterior. É necessário também ao contador poder ler o bit de direção de deslocamento do elevador, fundamental para se saber se o elevador está se deslocando um andar para cima ou 37 para baixo. Aproveitando as informações já existentes, esta é obtida do próprio bit que informará o computador a direção de deslocamento. A implementação de apenas um contador usado um microcontrolador não se justificaria, uma vez que existem circuitos integrados capazes de facilmente executar esta função de forma eficiente. No entanto, contadores convencionais não conseguem gerar informações em modo serial, como é necessário neste caso, e mesmo realizando pesquisas pela internet não se encontrou informações sobre algum circuito capaz de realizar satisfatoriamente conversões paralelo-serial. A única opção disponível é saída paralela, onde os bits são disponibilizados um a cada pino, podendo ser lidos todos simultaneamente, a qual não é compatível para as necessidades de projeto, uma vez que pela porta serial só trafegam dados de forma que os bits são transmitidos individualmente e em seqüência. Escolheu-se o microcontrolador 8051 para se desenvolver este pequeno software do contador. Sua escolha se apóia na facilidade que este apresenta para se manipular transferência de dados através de porta serial. Além disso, o 8051 possui um conjunto de instruções que torna a programação em linguagem Assembler mais simples, em comparação a outros microcontroladores, como os da família do PIC, e por isso será utilizado para se gerar o código do contador de andares. (referência [9] é fonte de toda informação e estudo sobre o 8051) Uma última razão para este ser usado é a grande variedade de interrupções programáveis, sendo que das cinco disponíveis, serão usadas três, que serão detalhadas mais a frente, sendo uma externa para acionar a contagem dos andares, uma de temporizador e outra relacionada com a própria porta serial. O 8051 também possui quatro portas paralelas, das quais serão usadas duas delas para recebimento e envio de dados. As portas 0 e 2 não possuem uma função associada a elas nesta aplicação, mesmo assim, terão seus pinos disponíveis para acesso e conexão de outros dispositivos, já se prevendo que recursos adicionais podem ser adicionados ao módulo posteriormente. 38 A porta 1 será usada para recepção dos dados vindos de porta e direção, usando por uma questão de facilidade os pinos 6 e 7. O uso destes dois pinos permite que o valor lido possa ser usado diretamente na formação do byte a ser enviado ao computador, que sendo recebidos já como os mais significativos, não precisarão ser deslocados posteriormente para sua posição correta. Os demais pinos são ligados ao terra, forçando uma cadeia de seis bits 0. Dessa forma, o número do andar poderá ser apenas somado ao número contido nesse byte recebido. A segunda porta importante é a Porta 3, na qual só estarão ativos efetivamente os três primeiros pinos: o primeiro deles, recebe dados vindos de uma porta serial. O segundo deles é responsável pela transmissão: estes dois pinos juntos formam a porta serial do 8051, permitindo que haja transmissão e recebimento de dados ao mesmo tempo, e que será usada para a comunicação com o computador. O terceiro pino importante recebe o sinal que ativará uma interrupção externa. Esta interrupção acontece sempre na borda positiva (quando se muda de um bit 0 para um bit 1) do bit enviado a esse pino, fazendo com que o microcontrolador seja ativado, executando uma rotina específica, assim que a borda é detectada. A ativação dessa interrupção será feita pelo pulso enviado ao indicador de posição. Quando isso acontecer, os dados disponíveis na Porta 1 serão lidos. A partir deste ponto, dois endereços da memória são importantes: o primeiro deles armazena o número do andar atual. Ocorrendo a leitura, verifica-se o bit 6. Este bit informa a direção do deslocamento da cabina, e de acordo com seu valor, o andar será incrementado ou decrementado. Além desta interrupção, é ainda necessário que seja habilitado um dos temporizadores do 8051. A interrupção externa apenas é responsável por atualizar a posição da cabina, no entanto, pode haver variações no status da porta ou o elevador entrar em movimento para qualquer uma das direções, o que não pode ser detectado apenas quando ocorre uma mudança de um andar para outro. Para garantir que estas informações sejam atualizadas e enviadas ao computador assim que se alterem, é preciso que uma verificação periódica seja efetuada na porta 1. A cada verificação, o byte a ser transmitido é atualizado. 39 O outro endereço importante é, na verdade um buffer, responsável pela saída de dados pela porta serial. Cada vez que houver uma atualização do byte, seja pelo temporizador ou pela interrupção externa, este será novamente enviado ao buffer. Pela própria arquitetura do 8051, é necessário usar seu segundo temporizador, assim como configurá-lo de maneira compatível com a velocidade de transferência desejada, para que este possa ter um controle sobre a taxa de transmissão e saber o exato momento de enviar um novo bit. 7.5 Enviando os dados ao computador Neste ponto, a transmissão já se iniciou, uma vez que a porta serial no 8051 está pronta e já enviando dados. A última fase é adequar novamente os níveis de tensão, para que estes possam ser recebidos. Embora a transmissão e recepção já se efetuem em modos compatíveis, o computador só consegue “entender” tensões um pouco mais elevadas em relação àquelas usadas na parte digital do circuito do módulo. Segundo a referência [8], a porta serial é capaz de identificar bits 1 pela tensão de -12V e bits 0 por +12V. De acordo com o texto da referência [5], a solução mais simples para este caso é usar um conversor MAX232 (ou qualquer outro cujo nome termine em 232), já projetado para realizar esta função de converter os bits na forma de 0V e 5V para os compatíveis com a porta receptora, bastando apenas que este receba a seqüência de bits gerados. Uma grande vantagem deste circuito integrado é não ser preciso usar uma fonte extra de alimentação apenas para fornecer as tensões de saída. Pela própria lógica interna dele, pouco conhecida em detalhes, torna-se suficiente apenas a alimentação já disponível de 5V. Usou-se um canal de recepção e um de transmissão do MAX232, de forma a permitir uma comunicação de duplo sentido, reservando o sentido computador-módulo (chamado aqui de canal de recepção) para funções futuras. Estes canais definem em qual sentido de fluxo de bits o circuito irá atuar. Canais de recepção permitem que a conversão seja feita com o fluxo ocorrendo do lado de +/-12V para 0-5V, ocorrendo o processo inverso nos canais de transmissão. 40 Selecionado um canal de transmissão qualquer, basta que os terminais de um cabo serial sejam conectados às suas saídas do lado +/-12V, sendo os dois mais importantes a conexão com os pinos 2, por onde irão chegar os bits até o computador, e o pino 3, pelo qual o computador será capaz de os enviar. Um esquemático completo do circuito aqui descrito é mostrado na figura 11. Por simplicidade, o microcontrolador 8051 e o conversor MAX232 são exibidos como blocos. Figura 12 - Circuito final do módulo. Na parte superior o leitor de andares. Abaixo, à esquerda o leitor da direção de deslocamento e à direita o leitor da condição da porta da cabina. 7.6 Fonte de alimentação Nenhum circuito é capaz de operar sem energia, portanto é necessário que haja uma fonte de alimentação. O objetivo é transformar os 127V alternados da tomada em 5V contínuos. 41 Primeiramente, será usado um transformador abaixador de tensão 127V-12V com tap central. Este tap é um pequeno fio, formando um terceiro terminal de saída, internamente conectado na parte central do enrolamento do transformador, ou seja, é como se agora houvesse dois “meio-enrolamentos” com um número igual de espiras. Se este tap for usado como terminal de terra, os dois meio-enrolamentos agem como se houvessem duas fontes distintas, fornecendo os mesmos 12V em corrente alternada, porém com polaridades opostas entre si. Na prática, sempre haverá um semiciclo positivo e um negativo disponíveis. Desta forma, o retificador pode ser feito com apenas dois diodos e aproveitando apenas os semiciclos positivos. Os negativos podem ser descartados. Ao contrário dos retificadores já usados para detecção de estados de relês, aqui o ripple deve ser minimizado, e para isso, uma alta capacitância deve ser colocada logo na saída dos diodos, de forma a já receber o sinal retificado ainda pulsante, com a mesma forma apresentada na Figura 6, diferindo apenas em amplitude. Esta capacitância deve ser tão alta quanto possível para se atingir o resultado mais próximo possível do ideal. Em paralelo ao capacitor, é conveniente se colocar um LED para indicação de que o circuito está ligado. LED´s são diodos que emitem luz, e devem estar diretamente polarizados para acenderem. Suas tensões de polarização são mais altas do que de diodos convencionais, atingindo valores próximos de 1,5V e, sendo mais sensíveis, têm sua vida útil bastante reduzida se percorridos por correntes superiores a 20mA, sendo que em série com ele é necessário colocar um resistor para limitar sua corrente a este valor. Por (1), tem-se que a tensão de pico dos 12Vrms é 17V. Destes, 1,5V estarão nos terminais do LED, enquanto que nos terminais do resistor ficam os outros 15,5V. Segundo a lei de Ohm, a queda de tensão em um resistor é igual a sua resistência em ohms multiplicada pela corrente em amperes que circula por ele. Sendo que a corrente deve ser de 20mA, devese usar um resistor de 775 Ω. Devido ao limitado número de valores de resistência encontrados no mercado, pode-se usar aquele que mais se aproxima, ou seja, 820 Ω. Finalmente, 17V devem ser baixados a 5V, porém sem o uso de divisores de tensão. A demanda de potência do circuito é variável, fazendo com que o uso de um divisor não forneça um valor fixo, podendo ocorrer variações em alta freqüência capazes de causar interferências e prejudicar bastante a qualidade da alimentação. A melhor alternativa é usar o circuito 42 integrado 7805, que age como um limitador, garantindo uma tensão máxima de 5V em sua saída, garantindo que este será constante, independente de quantos Volts sejam aplicados na entrada, desde que sejam mais de 5V. Na sua entrada, é conectada a saída do retificador, havendo também um pino de terra usado para referência. Segundo recomendação do próprio fabricante do 7805, entre a entrada e o terra, podese conectar um capacitor de 100 μF o mais próximo possível da saída para supressão de ruídos de alta freqüência. Devido à sua construção, pode haver o risco de queima do circuito se, por algum motivo qualquer, a tensão na saída for superior à de entrada. Se isso ocorrer, pode haver a queima deste, e por segurança, é adicionado mais um diodo conectando a saída à entrada. No caso disso acontecer, o diodo servirá como uma fonte de fuga da corrente, evitando que ela circule pelo interior do CI. Por ser um dispositivo de potência com componentes internos de dimensões reduzidas, a dissipação de calor faz com que ele se aqueça bastante, sendo também necessário que seja usado um dissipador de calor para evitar superaquecimento, capaz de danificar o componente. Tomando todos estes cuidados, tem-se no final do circuito mostrado abaixo a saída em 5V responsável pela alimentação do módulo. O circuito final da fonte é mostrado na figura 12. Figura 13 - Circuito da fonte de alimentação 43 8 Custos do anunciador por voz proposto No formato aqui proposto, o custo de aquisição do equipamento não chega a 10% do custo total do modelo apresentado acima. Para ele, os seguintes custos são estimados: a) Computador: modelos antigos que suportam o software podem ser encontrados por valores a partir de R$ 300,00. b) Módulo eletrônico: placa de fácil fabricação e já dotado de capa plástica protetora e fonte de alimentação de +12V e -12V. Seu custo total de produção é de R$ 45,00 já incluído fonte de alimentação e cabo para conexão com o computador via porta serial. c) Os cabos necessários para ligações quadro de comando/módulo variam de acordo com cada caso, dependendo da distância entre a casa de máquinas e o computador e da altura do poço. Um prédio com 10 andares e com o computador localizado a 20 metros do quadro de comando terá aproximadamente 35 metros de cabo paralelo específico para áudio ao longo do poço, mais os 20 metros entre o extremo superior do poço até o computador, totalizando 55 metros de cabo ligando a saída de som no PC até o altofalante instalado na cabina. Entre o quadro de comando e o módulo, que se supõe estar próximo ao PC, são necessários mais 20 metros de cabo para cada um dos três sinais a serem lidos, totalizando 60 metros, sendo também aplicável o uso de cabo paralelo específico para aplicações envolvendo tensões na faixa dos 127V. Pode-se considerar que estes dois tipos de cabo tenham preços por metro próximos de R$ 1,00. Para os 115 metros previstos do total de cabeamento, tem-se um custo de R$ 115,00. d) Mão de obra: um técnico pode realizar o serviço de instalação em uma hora ou menos, cabendo à empresa responsável pela instalação definir quanto irá cobrar do cliente. Com base nestes valores, estima-se um custo total para se ter o anunciador instalado de R$ 500,00 a R$ 700,00, e conforme já descrito, tais valores podem cair significativamente caso já haja um computador disponível para executar o software. 44 Conclusão Ao contrário do previsto inicialmente, não foi possível abranger todas as tecnologias de elevadores existentes, limitando-se apenas à tecnologia de quadros de comando eletromecânicos baseados em relês, uma vez que elevadores digitais podem apresentar muitas diferenças em relação à codificação dos pulsos que circulam por seus quadros de comando. Apenas com um pequeno módulo eletrônico desenvolvido para tradução de sinais e um software executado até em computadores de baixo custo, criou-se um anunciador de fácil produção e instalação, capaz de usar recursos e fontes de dados já existentes ou de fácil aquisição, como o próprio quadro de comando e um computador, dispensando a necessidade de qualquer sensor adicional. O mais importante é que não foi necessário que um projeto muito complexo fosse elaborado para que os resultados esperados aparecessem. A redução na quantidade de equipamentos necessários fez com que o custo máximo de aquisição e instalação de um anunciador de voz para cabinas de elevador seja comparável àqueles dos modelos mais simples e baratos existentes hoje no mercado ou até menor. Para o futuro, é viável que o protótipo sofra mais melhorias em sua arquitetura, possibilitando que seu preço final caia ainda mais, e dessa forma fazendo com que mais e mais pessoas possam ter acesso a coisas simples, mas que possam contribuir para a melhoria de suas vidas. 45 Referências [1] Apostila de orientação Geral - Elevadores - 1ª etapa. JOSS Elevadores. 4 pg. Curitiba, PR. 29/08/2005. [2] CROWLEY, James. COM Ports and the MSComm control - Receiving Data. [Portas COM e o controle MSComm - Recebendo Dados] [on line]. Disponível na Internet: http://www.developerfusion.co.uk/show/21/6/. Visitado em 14/10/2005. [3] GUREWICH, Ori e Natan. Como Criar Aplicações de Mundo-Real com Visual Basic 3 For Windows. Sams Publishing, 1994. Traduzido por RIBAS, Rodolfo, Axcel Books do Brasil. 722 pg. [4] JBN Electronics. Manual de Instalação e Operação - Cortex Voice 40 RDEA. [on line]. Pág. 2. Disponível na Internet: http://www.jbn.com.br/manual40rdea.pdf. Visitado em 12/11/2005. [5] MESSIAS, Antônio Rogério. Comunicação com a porta serial. [on line]. Rogercom, 2004. Disponível na Internet: http://www.rogercom.com/PortaSerial/PortaSerial.htm. Visitado em 07/11/2005. [6] MICROSOFT, Sample: playwave.exe Demonstrates How To Play a Sound File, Help and Support [on line]. Disponível na Internet: http://support.microsoft.com/default.aspx? scid=kb;EN-US;q182983&GSSNB=1. Visitado em 17/10/2005 [7] PASTRO, Ademar Luiz. Microcontroladores - Microcontrolador 8051. 45 pg. [Curitiba], 2004. [8] Serial Port. [on line]. Disponível na Internet: http://www.ctv.es/pckits/tpserie.html. Visitado em 14/10/2005. [9] Visual Basic, Toda a Potencialidade do Windows em programação. Colégio Spei. Ed. Única. P. 3, 25-28, 43-44, 47-48. Curitiba, 1997. 46 Anexo A - Código-fonte do software As seis funções aqui listadas juntas são responsáveis por todo o funcionamento do anunciador, ao que se refere a reprodução dos sons, e são exibidas uma a uma, para melhor visualização individual. Interrompe: função de teste do tipo de mudança no valor da porta serial aconteceu, sendo eles abertura ou fechamento de portas e mudança de um andar para outro. As primeiras linhas indicam variáveis usadas em várias funções do software. Dim Dim Dim Dim Dim Dim Dim u, d op porta direcao pser, pser_old tamanho(1, 9) andar 'posição da cabine (andar) 'controle de arquivo a ser tocado '1 para porta da cabine aberta e 0 para porta fechada '1 para elevador subindo e 0 para descendo ou parado 'valores lidos da porta serial, último valor e o anterior 'matriz com as durações de cada WAV de nº de andar 'andar de parada (reservado para emulação de comandos) Private Sub Interrompe() If pser < 128 Then 'a porta está fechada Porta_status.Caption = "PORTA FECHADA" Porta_status.ForeColor = RGB(255, 0, 0) If pser_old > 127 Then 'verifica se estava aberta antes tm_fporta.Enabled = True LoadFile "C:\ProjetoFinal\pfe.wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If Else 'ja estava fechada, provavelmente mudou de andar d = pser Mod 64 n_andar.Caption = Right(Str(d), Len(Str(d) - 1)) If d < 10 Then n_andar.Caption = "0" + n_andar.Caption If d = 0 Then n_andar = "00" u = d Mod 10 d = d \ 10 End If ElseIf pser_old < 127 Then 'a porta abriu agora op = 0 tm_aporta.Interval = 1600 tm_aporta.Enabled = True LoadFile "C:\ProjetoFinal\pab.wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If Porta_status.Caption = "PORTA ABERTA" Porta_status.ForeColor = RGB(0, 255, 0) End If pser_old = pser End Sub 47 tm_aporta_Timer e tm_fporta_Timer: relacionam os temporizadores associados às funções respectivamente de abertura e fechamento de porta de cabina, tocando os arquivos durante a anunciação. Private Sub tm_aporta_Timer() If op = 0 Then If u = 0 And d = 0 Then LoadFile "C:\ProjetoFinal\terreo.wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If op = 3 Else tm_aporta.Interval = tamanho(0, d) If d > 0 Then LoadFile "C:\ProjetoFinal\d" + Right(Str(d), 1) + ".wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If End If op = 1 End If ElseIf op = 1 Then tm_aporta.Interval = tamanho(1, u) If u > 0 Then LoadFile "C:\ProjetoFinal\u" + Right(Str(u), 1) + ".wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If End If op = 2 ElseIf op = 2 Then LoadFile "C:\ProjetoFinal\andar.wav" Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If op = 3 ElseIf op = 3 Then tm_aporta.Enabled = False End If End Sub Private Sub tm_fporta_Timer() If pser Mod 128 < 64 Then LoadFile "C:\ProjetoFinal\down.wav" Else LoadFile "C:\ProjetoFinal\up.wav" End If Module1.drawFrom = 0 Module1.drawTo = Module1.numSamples If (Module1.fPlaying = False) Then Play -1 End If tm_fporta.Enabled = False End Sub 48 SetaTempos: define os valores que os temporizadores devem esperar até que cada arquivo de numeração de andar seja tocado integralmente. Os tempos de arquivos que indicam abertura ou fechamento de portas, “térreo” e “andar” são definidas na hora em que são tocados. A principal função de se definir apenas os arquivos de andares é permitir que se tenha uma rápida referência a eles, uma vez que apenas no caso de numeração de andar é de fato necessário uma escolha de arquivos que inevitavelmente possuem durações diferentes. Private Sub SetaTempos() tamanho(0, 0) = 100 tamanho(0, 1) = 1220 tamanho(0, 2) = 1590 tamanho(0, 3) = 1580 tamanho(0, 4) = 1790 tamanho(0, 5) = 1810 tamanho(0, 6) = 1990 tamanho(0, 7) = 1930 tamanho(0, 8) = 1920 tamanho(0, 9) = 1850 tamanho(1, 0) = 100 tamanho(1, 1) = 1220 tamanho(1, 2) = 1370 tamanho(1, 3) = 1310 tamanho(1, 4) = 1120 tamanho(1, 5) = 1030 tamanho(1, 6) = 1270 tamanho(1, 7) = 1490 tamanho(1, 8) = 1390 tamanho(1, 9) = 1210 End Sub Form_Load: definição de alguns valores iniciais quando o programa é carregado. Private Sub Form_Load() u = 0 d = 0 op = 3 porta = 1 direcao = 1 pser_old = 0 SetaTempos ' Configuração da porta COM3 e abertura para recebimento de dados MSComm1.RThreshold = 1 MSComm1.InputLen = 1 MSComm1.Settings = "2400,N,8,1" MSComm1.DTREnable = False MSComm1.CommPort = 3 MSComm1.PortOpen = True andar = 0 pser = 0 End Sub 49 MSComm_OnComm: evento gerado cada vez que um byte é transferido pela porta serial. Sendo este um byte recebido, este vai ser lido e processado pela função “Interrompe”. Private Sub MSComm1_OnComm() If MSComm1.CommEvent = comEvReceive Then pser = MSComm1.Input Interrompe End If End Sub Além destas, mais duas funções extras foram colocadas fazendo a lógica empregada na botoeira virtual: tm_aux_Timer: temporizador auxiliar e principal responsável pela seqüência de valores gerados via emulação. Private Sub tm_aux_Timer() Dim aux aux = 2 * ((pser Mod 128) \ 64) - 1 u = u + aux pser = pser + aux If u = -1 Then u = 9 d = d - 1 ElseIf u = 10 Then u = 0 d = d + 1 End If Interrompe If andar = (10 * d + u) Then pser = pser + 128 tm_aux.Enabled = False Interrompe End If End Sub 50 Command1_Click: identificação do número do andar chamado através do índice do botão na matriz e ignorando chamados para o mesmo andar. Private Sub Command1_Click(Index As Integer) ' simulação do circuito de comando If (Index = 10 * d + u) Then Exit Sub andar = Index If Index > 10 * d + u Then pser = 64 + 10 * d + u Else pser = 10 * d + u End If Interrompe tm_aux.Enabled = True End Sub 51 ANEXO B - Testes práticos e idéias de melhorias Devido a alguns fatores como falta de local apropriado ou elevadores em miniatura, a solução aqui apresentada não pôde ser testada em condições reais de uso até a data de conclusão deste trabalho, limitando estes a simples testes de aplicação da lógica do circuito. Havendo tais condições, o anunciador poderá ser testado em uma situação prática para se certificar de que funciona conforme o esperado. Algumas alternativas poderão ser estudadas para uma ainda maior redução de custos e/ou praticidade e atingir uma boa aceitação no mercado em um momento futuro. Algumas idéias são: Produção do módulo eletrônico na forma de uma placa para PC: Desta forma, tem-se um equipamento mais compacto e de mais fácil instalação, estando este situado dentro do próprio computador. Conseqüentemente, ganha-se também na não necessidade do uso da porta serial, liberando-a para outras aplicações que o usuário deseje. Para isto, um ponto negativo importante a ser considerado é o risco de se gerar uma excessiva poluição eletromagnética devido às altas tensões vindas do quadro de comando possam causar em placas próximas, comprometendo o correto funcionamento do computador. Suporte multicabinas: O protótipo inicial apresentado suporta apenas um elevador, ainda gerando um custo que cresce proporcionalmente com o número de cabinas a serem atendidas por anunciadores. Concentrando todo o gerenciamento dos sinais recebidos de vários quadros de controle em um único módulo, é possível atingir um valor total pouco dependente da quantidade de cabinas. Correção de falhas na indicação do posicionamento: Não se pode ter certeza se um sistema é confiável sem testá-lo em todas as condições reais. Faltas de energia, principalmente quando um elevador está situado em um pavimento que não seja o térreo, podem causar falhas na indicação do andar correto que forcem o responsável pela instalação (síndico ou zelador, por exemplo) a ir até o módulo e efetuar alguma correção, como resetar seu valor com o elevador no térreo. Havendo uma forma do 52 próprio software executar a correção no contador que registra o andar atual, tão logo o elevador volte à atividade todas as indicações estariam automaticamente corrigidas. Inclusão de um sintetizador de voz no próprio módulo: Esta é até o momento uma das principais desvantagens deste anunciador: é necessário que uma placa de som esteja instalada no computador para enviar o som ao alto-falante na cabina. Além de tudo, longos cabos são conectados à saída de som da placa, não garantindo que o som seja reproduzido com qualidade suficiente para manter uma boa inteligibilidade. Se o computador for usado para outras funções que de alguma forma exijam som, não poderá ter o software instalado. Como uma conseqüência indireta, deixa de existir a possibilidade de implantar um suporte para várias cabinas no mesmo módulo, por não haver mais que uma saída de áudio. 53 Anexo C - Desenho esquemático do módulo 54 Glossário Botoeiras: conjunto de botões localizados tanto nos pavimentos quando na cabina que permite ao usuário efetuar chamadas. Cabina: compartimento onde são transportadas pessoas e carga. Casa de máquinas: espaço físico localizado na parte superior do prédio onde é instalado o sistema de comando e tração do elevador. Circuito aberto: condição elétrica na qual a corrente não tem caminho para passar, ficando impedida de circular. Forma de onda: maneira como se comporta a variação de uma grandeza elétrica, geralmente tensão ou corrente, ao longo do tempo. Indicador de posição: dispositivo de informação visual que informa a localização (andar) da cabina naquele momento. Os indicadores digitais também informam a direção de deslocamento. Máquina de tração: conjunto formado pelas polias e motor de tração. Motor de tração: é o motor do elevador propriamente dito, responsável pela movimentação da cabina. Poço: espaço físico por onde se desloca a cabina, apoiada em guias. Porta da cabina: sistema de portas de acionamento automático ou mecânico localizada na cabina, permitindo uma maior segurança na entrada e saída da cabina. Porta do pavimento: porta localizada no pavimento que provê segurança ao usuário, não permitindo que a porta se abra caso o elevador não esteja nivelado no andar. Quadro de comando: parte do circuito responsável pelo funcionamento em si do elevador. Contém a parte lógica e gerencia todas as funções necessárias, como acionamento do motor de tração, gerenciamento do atendimento de chamadas e abertura da porta da cabina na hora certa. 55