Um projeto de grande utilidade aos adeptos de modelismo e robótica, é o que descrevemos neste artigo. Trata-se de um conversor analógico/digital para ser utilizado em sistemas de radiocontrole ou mesmo sistemas controlados diretamente por fios, principalmente aos que dizem respeito ao controle de direção de dispositivos de modelismo (carros, barcos, aviões, etc.) e robôs móveis.
Nota: Artigo publicado na revista Eletrônica Total 157 de 2013.
Robôs móveis autônomos como já é de nosso conhecimento, são unidades que apresentam a capacidade de executar diversas tarefas sem o auxílio de controles manuais ou programação prévia. Contudo, para tornar a unidade robótica mais versátil, pode-se implementar um sistema rádio controlado, alternando assim os modos de operação da mesma. Para um robô móvel controlado remotamente, o controle de direção é indubitavelmente uma das partes mais críticas, sendo este geralmente implementado pelo projetista utilizando quatro chaves (tácteis normalmente abertas, por exemplo), que representam os respectivos comandos: frente, direita, esquerda, ré. Entretanto, estas chaves apresentam como principais desvantagens o desgaste natural de seus contatos mecânicos e o fato de tornarem menos ágil ao operador a alternância de direções do robô.
O conversor A/D desenvolvido pela WR Kits contorna estes problemas causados pelas chaves de contatos simples, substituindo-as por um joystick. Na figura 1, pode-se observar um exemplo de joystick que poderá ser utilizado neste projeto. Este modelo de exemplo traz ainda como recurso uma chave táctil extra, que é acionada quando se pressiona a pequena alavanca. Naturalmente, há modelos de diversos tamanhos e formatos. Quaisquer tipos de joystick podem ser aplicados a este projeto.
Características de um controle com um joystick
Largamente utilizado nos controles dos primeiros videogames e reintroduzido nos modelos mais atuais, o joystick consiste em um dispositivo que apresenta basicamente dois potenciômetros, fixos perpendicularmente um em relação ao outro, onde uma alavanca mantida na posição central tipicamente com auxílio de molas, é movimentada para cima e para baixo movendo o eixo do primeiro potenciômetro; ou para esquerda e para direita movendo o eixo do segundo potenciômetro.
Os potenciômetros utilizados em joysticks são muito semelhantes aos comumente aplicados na indústria eletrônica, com a diferença de que variam linearmente da resistência mínima (aproximadamente 0 Ω) para a máxima (100 kΩ tipicamente) em um curto ângulo de movimento. São construídos assim para que a alavanca utilizada no joystick não precise ser movimentada em um ângulo superior a 130° para percorrer toda faixa de resistência de seus potenciômetros. Se fossem empregados potenciômetros convencionais, cujo ângulo necessário para percorrer toda faixa de resistência é de aproximadamente 270°, não seria possível realizar isto com um movimento suave de alavanca.
Um joystick facilita muito mais o controle de navegação de um robô móvel dando mais agilidade à troca de direção do mesmo, apresentando ainda a vantagem de possuir um desgaste bem inferior se comparado com as chaves de contato simples. A desvantagem de um joystick é que, para aplicá-lo ao codificador de um sistema de radiocontrole ou utilizá-lo no controle direto com fios da unidade comandada, o mesmo necessita de um conversor A/D justamente para converter suas grandezas analógicas (oriundas da linearidade dos potenciômetros) nos bits discretos que serão aplicados já na entrada do codificador (ou do driver quando um controle de fios for implementado).
Na figura 2 apresentamos o diagrama de blocos básico para um transmissor de radiocontrole com estas características.
Na figura 3, outro diagrama de blocos básico: para um controle idealizado com fios ligados diretamente ao driver da unidade comandada.
O Circuito
Empregando-se um microcontrolador de baixo custo facilmente encontrado no mercado nacional e mais uns poucos componentes periféricos, desenvolveu-se o circuito conversor A/D para joystick. O microcontrolador utilizado é o conhecido PIC 12F675, de 8 bits, que apresenta um conversor A/D com 4 canais (ANO a AN3) e um oscilador interno de 4 MHz com boa precisão. Existe a possibilidade de se utilizar um oscilador externo de até 20 MHz com este dispositivo.
Na figura 4 pode-se observar os pinos do PIC 12F675, fornecidos no datasheet do fabricante.
Como se pode ver, este componente apresenta alimentação VDD no pino 1, e o VSS (terra do circuito) no pino 8. Os pinos GPO, GP1, GP2, GP4 e GP5 podem ser programados tanto como entrada quanto como saída digital (observar as setas apontando para ambas as direções). O pino GP3 pode ser programado apenas como entrada digital e é também o pino de RESET do circuito integrado.
Optou-se pelo uso de um microcontrolador para implementar este circuito a fim de simplificar o mesmo ao máximo e, principalmente, pela versatilidade que sua programação integra ao sistema, visto que, com um simples ajuste no código-fonte, já se pode alterar o ângulo de atuação do joystick sem que o hardware tenha de ser modificado, característica muito útil visto que há modelos diversificados de joysticks. Mas adiante, no artigo, explanaremos sobre o assunto.
O diagrama esquemático completo do Conversor A/D pode ser visualizado na figura 5. Como se pode observar nesse diagrama, foi necessária a utilização de dois microcontroladores PIC 12F675 devido ao mesmo não apresentar saídas digitais suficientes para implementar os 4 bits do controle de direção (o pino GP3 pode apenas ser programado como entrada digital, observe a seta em uma única direção na figura 4).
De acordo com o circuito da figura 5, os potenciômetros do joystick estão representados individualmente no diagrama, sendo que o primeiro tem seu terminal central conectado ao pino ANO do primeiro microcontrolador; e o segundo tem o pino central conectado à mesma entrada no CI U2. Estes potenciômetros atuam como divisores de tensão, variando a tensão de alimentação da foram programadas via software como saídas digitais. Os resistores R1 a R4 (todos com valor de 10 1(0) têm a função de manter estas saídas em nível lógico baixo, isto é, são resistores de pull-down.
Porém, quando a tensão lida pela entrada analógica ANO aproxima-se dos 5 V, a saída GP4 vai a nível high e, quando a mesma tensão aproxima-se de 0 V, é a saída GP5 que vai a nível high. Esta mesma análise vale para ambos os microcontroladores utilizados. Como será visto mais a frente, a lógica principal de funcionamento deste circuito foi implementada via software. Os diodos de uso geral D1 a D4 apresentam a importante função de fazer com que o sinal de cada saída seja totalmente independente, não interferindo umas nas outras pois, dependendo do circuito codificador utilizado no radiocontrole, poderiam ocorrer problemas como o funcionamento errático das funções de comando.
Os capacitores C1 e C2 atuam no desacoplamento dos microcontroladores, em outras palavras, servem como uma fonte de energia de ação rápida junto ao circuito integrado, permitindo que ele opere até que a fonte de alimentação principal possa fornecer a corrente que ele necessita, também apresentam a função de desviar ruído de alta frequência de volta para a fonte de alimentação.
Montagem
Na figura 6 apresentamos uma sugestão de layout para o circuito proposto, onde pode-se observar claramente a simplicidade da montagem.
As trilhas de circuito impresso, que deverão ser desenhadas pelo projetista ou transferidas diretamente para a placa de fenolite (ou fibra de vidro) pelas técnicas de construção de placas (artesanal, silkscreen etc.) são apresentadas na figura 7. Todos os furos pertinentes aos componentes utilizados podem ser de 1 mm. Para os furos de fixação da placa, utilize broca de 3,5 mm.
Na figura 8 pode-se observar a máscara dos componentes presentes no circuito, com suas respectivas referências para melhor orientação.
Deve-se tomar cuidado com o posicionamento dos microcontroladores na placa de circuito impresso (oriente-se pelos chanfros), e também para posição dos diodos. Os resistores R1 a R4 são de 1/8 W e 5% de tolerância. Os capacitores C1 e C2 são de 100 nF e podem ser cerâmicos ou de poliéster. Os diodos D1 a D4, são diodos comuns de sinal, sendo que qualquer equivalente pode ser utilizado (1N914, por exemplo). É aconselhável o uso de soquetes DIL (dual in line) de 8 pinos para os circuitos integrados, facilitando sua reprogramação se necessária e evitando aquecê-los demais no momento da soldagem. Para as interconexões do circuito sempre sugerimos o uso de barra de pinos 11,2 mm 180° (padrão Mother board), que torna a montagem mais profissional.
Os potenciômetros do joystick devem ser conectados nos pontos indicados da placa, observando que as entradas analógicas (AN) localizam-se na parte superior, isto é, nestes pontos na qual o terminal central dos potenciômetros deve ser ligado. Os terminais laterais podem ser conectados sem a preocupação de posição (explicaremos isto no tópico "Prova e Uso"). Joysticks novos já podem ser facilmente adquiridos no mercado local a preços bastante acessíveis. Mas, fica a dica que os mesmos podem ser reaproveitados de controles de videogame fora de uso. Outro local que o projetista pode procurar é nas empresas que trabalham na manutenção de videogames, que frequentemente apresentam controles velhos em sua sucata.
Para melhor visualização do projeto, apresentamos na figura 9 a imagem em perspectiva 3D do layout idealizado para este circuito.
O Programa
Partiremos da suposição de que o leitor já tem o conhecimento necessário para programação e gravação de microcontroladores, especialmente os da família PIC, portanto não entraremos nos pormenores sobre esta operação. Porém, o código-fonte escrito para este projeto será fornecido para que o usuário possa fazer os ajustes caso haja necessidade.
O PIC 12F675 apresenta registrador TRISIO, que tem a função de configurar um pino como entrada ou saída. Atribuindo-se "1" ao registrador, este estará configurado como entrada (INPUT) e; atribuindo-se "0”, o mesmo será saída (OUTPUT). Para configurar a inicialização dos pinos deste PIC (high ou low), utiliza-se o registrador GPIO, diferentemente de PICs maiores (16F628A, 18F4550, etc.) que utilizam o registrador PORT para a mesma função.
No box 1 apresentamos o código--fonte escrito para este projeto, ricamente comentado para facilitar sua compreensão. A linguagem de programação utilizada foi a C e o compilador empregado para criação do código foi o MikroC Pro For PIC, que consiste em um software livre para códigos até 2 kB.
Inicia-se o programa com a declaração de uma variável do tipo inteiro chamada de "leitura" para armazenar o valor da grandeza analógica "lida" pelo pino ANO do PIC. Já na função "main" configura-se os pinos GP4 e GP5 como digitais, utilizando-se para isso o comando "ANSEL = 0x13;”. Deve--se desabilitar os comparadores A/D do PIC com o comando "CMCON = 7;”. Para configurar o bit menos significativo ANO como pino analógico, foi utilizado o comando "adcon0 = Ob00000001;", (caso prefira o pino AN1 deve utilizar "adcon0 = 0b00000010;', e assim por diante). Depois, no registrador TRISIO configurou-se paulatinamente os bits utilizados em nosso hardware, GPO como entrada; GP4 e GP5 como saída.
Optou-se por iniciar todo GPIO em low com o comando "GPIO = 0”:
Após as configurações iniciais de nosso dispositivo, entramos no loop infinito com o comando "while(1);”. Inicialmente a função ADC Read(), recebe zero como parâmetro. Esta função está contida na biblioteca do compilador e é ela que registra os valores analógicos através de AN0.
A priori, atribui-se o valor obtido na função ADC_Read(0) à nossa variável "leitura”. Em seguida criam-se dois laços de condição "if”. O primeiro diz que se o valor decimal de leitura for maior que 900, o pino GP4 estará em high. O segundo, por sua vez, diz que se o valor decimal da variável leitura for menor que 123, o pino GP5 é que estará em high. Os laços "else" complementam a condição "if”, informando que se esta condição for falsa, então o respectivo pino estará em low.
Alhures, neste artigo, salientamos que o usuário poderá ajustar facilmente a sensibilidade de seu joystick realizando uma simples alteração no software. Estes valores decimais de 900 e de 123 não foram obtidos por acaso. O que ocorre é que no data-sheet do fabricante do PIC 12F675, no tópico "Módulo Conversor Analógico para Digital" (Analog-to-Digital Converter module) está especificado que o microcontrolador apresenta 10 bits de resolução. Isto significa que em decimal temos: 210 = 1024.
Em suma, a resolução de nosso módulo conversor A/D em decimal pode ser representada nos valores de 0 a 1023 (porque o zero também entra na contagem). Portanto, utilizou-se estes dois extremos como referência para o ajuste de nosso joystick, concluindo-se que o menor valor seria igual a 123 e o maior seria, portanto, 900 (1023 — 123 = 900).
Vale destacar que os extremos devem ser simétricos entre si, preferencialmente. Por exemplo, se o menor valor para o seu joystick for de 300, então o maior deverá ser 723 (1023 — 300 = 723), e assim sucessivamente. Os limites superior e inferior desta resolução de 1024 devem ser obtidos de forma empírica, como pode ser observado.
Compilando-se o código para gerar o arquivo “hex" referente ao mesmo, basta gravá-lo nos dois PICs 12F675 utilizados (U1 e U2) com o gravador de sua preferência.
Prova e Uso
Com a montagem finalizada e minuciosamente verificada para corrigir possíveis erros, pode-se alimentar o circuito utilizando para isto uma fonte de 5 V, que poderá ser construída a partir de um regulador de tensão LM7805, por exemplo. Para testar o funcionamento do circuito, o leitor poderá conectar 4 LEDs comuns de 5 mm com resistor de 220 Ω à saída do conversor A/D, como sugere a figura 10.
Atue no joystick para cima e verifique qual LED irá acender. Após isso, mova a alavanca para baixo verificando que o primeiro LED se apaga e acenderá um segundo LED. Efetue o mesmo procedimento para as posições direita e esquerda da alavanca do joystick para observar quais LEDs irão acender. Cada posição terá apenas um respectivo LED aceso e, naturalmente, quando a alavanca estiver na posição central, todos deverão estar apagados. O conversor estará funcionando perfeitamente desta forma.
Conhecidas as respectivas saídas de cada posição, é só conectá-las ao codificador do rádiocontrole (ou driver de motores), respeitando o correto sentido de navegação (frente, ré, direita, esquerda). Alterando a ligação dos potenciômetros ao circuito, você altera a saída que a posição do joystick leva a nível alto. Isto pode ser feito caso o usuário prefira que a saída "1" seja o comando para frente, a "2" a ré, e assim por diante.
Caso ache que o joystick esteja atuando muito rápido nas saídas (com um simples movimento já leva a saída a high), altere os valores decimais no código-fonte, diminuindo o limite inferior e aumentando o limite superior. Se a atuação do mesmo estiver lenta demais, basta aumentar o limite inferior e diminuir o limite superior.
Tratando-se de um circuito bem pequeno, o mesmo pode facilmente ser instalado dentro da caixa do controle utilizado.
Conclusão
O circuito aqui proposto viabilizou o estudo de noções básicas de eletrônica digital, programação de microcontroladores, hardware e software, bem como os princípios de uma conversão A/D. Aproveitou-se estes elementos para o desenvolvimento de um pequeno circuito de conversão A/D, para ser implementado em sistemas rádio controlados ou com fio.
Como já mencionado, a aplicação de um joystick a um sistema de navegação (controle de direção), seja de um robô móvel ou outros dispositivos, traz uma série de vantagens em se tratando de sensibilidade de controle e durabilidade dos componentes empregados. Nada impede do usuário utilizar mais conversores como este para outras funções da unidade comandada, que não a de navegação.