sexta-feira, 13 de julho de 2012

Criação de um Joystick Arcade USB com Arduino UNO

A postagem a seguir mostra como criar um simples Joystick com um manche de 4 chaves e 2 botões arcade com uma placa Arduino Uno. Este projeto é uma modificação feita do projeto do site <http://hunt.net.nz/users/darran/weblog/a3599/>



  • Circuito do Joystick
O Joystick é uma composição de chaves que acionam entradas analógicas do Arduino. É composto por um manche de 4 chaves e 2 botões com uma chave e um LED interno em cada um.



 

 
Estes componentes são facilmente encontrados em lojas de jogos arcade. 

As informações dos terminais da chave do botão são mostradas na figura a baixo.


Os terminais do LED estão representados com suas respectivas polarizações, porem, depende de como o LED está encaixado no soquete interno da chave. Para alterar, caso esteja invertido desencaixe a chave girando-a no sentido anti-horário. Puxe o LED e verifique o sinal de polarização se é correspondente ao dos terminais Catodo e Ânodo indicados na figura acima.

A chave possui 3 terminais: Comum, Normalmente Aberto e Normalmente Fechado. O terminal Normalmente Aberto fecha o contato com o terminal Comum quando a chave é pressionada. O terminal Normalmente Fechado abre o contato com o terminal Comum quando a chave é pressionada. Este último não será usado.

As chaves do Manche segue o mesmo padrão da chave do botão sem os terminais do LED. Na figura são mostrados os terminais Comum e Normalmente Aberto que serão utilizados nas 4 chaves do Manche.



Ao acionar uma chave, a entrada analógica do Arduino é conectada ao terra. O diagrama a baixo mostra o esquema elétrico do circuito.


Os botões possuem led's que se acendem quando são pressionados. São utilizadas as saídas do arduino para alimentar os leds. O terra, tanto das chaves quanto dos leds é comum. As imagens a seguir mostram a ligação dos fios em cada uma das chaves e nas portas do Arduino.



O fio preto mostrado na figura a baixo é ligado no GND do Arduino e é soldado no terminal Catodo (-) do LED de um dos botões. A conexão dos fios ao Arduinio deve ser feita pelo modu do Arduino, ou seja, é recomendado que seja soldado um pinheader para facilitar a conexão e isolar a parte de solda com uma fita isolante ou um termo retrátil.



  
No mesmo terminal é soldado um fio no terminal Comum da chave do Botão. Do terminal Comum é soldado outro fio (de cor alaranjada como mostra a figura acima) que é soldado no Catodo do outro botão e respectivamente soldado outro fio no terminal Comum do outro botão. O mesmo fio laranja é soldado no terminal Comum das chaves do manche. Assim, todos os Catodos dos LEDs dos botões, bem como os terminais comuns das chaves dos botões e do manche devem ser eletricamente o mesmo ponto onde deve ser conectado ao GND do Arduino. 

Os outros fios serão soldados no terminal Normalmente Aberto de cada chave do manche e dos botões e conectados nas entradas analógicas do Arduino. Ao receber o firmware o Arduino estará configurado para receber os seguintes comandos.

                    Entrada do Arduino        Comando          Cor do Fio na Figura
                                  A0                          Baixo                        Branco
                                  A1                          Cima                       Cinza
                                  A2                          Direita                        Lilás
                                  A3                        Esquerda                      Azul
                                  A4                         Botão 2                      Verde  
                                  A5                         Botão 1                    Amarelo
 




O acendimento dos LEDs é comandado pelas saídas 11 e 12 do Arduino nos botões 2 e 1 respectivamente e representado pelas cores vermelha e marrom. O Gnd comum para as chaves, bem como para os LED's deve ser ligado ao Gnd do Arduino (representado pelo fio Preto na figura)


Feita as ligações das 4 chaves do manche e as duas chaves dos botões nas respectivas entradas do Arduino e os LEDs nas respectivas saídas do Arduino, está completa a parte da instalação elétrica do Joystick.

A tabela completa de Ligações com o Arduino está representada logo abaixo:

                    Entrada do Arduino        Comando          Cor do Fio na Figura
                                  A0                          Baixo                      Branco
                                  A1                          Cima                         Cinza
                                  A2                          Direita                        Lilás
                                  A3                        Esquerda                      Azul
                                  A4                         Botão 2                      Verde  
                                  A5                         Botão 1                    Amarelo
                                Gnd                            Gnd                         Preto (laranja nas chaves)
                      Saída do Arduino           Comando          Cor do fio na Figura
                                  11                      LED Botão 2               Vermelho
                                  12                      LED Botão 1                Marrom


  • Gravando Firmware no Arduino
O Arduino UNO, além do microcontrolador principal ATMega328, possui um microcontrolador ATMega16U2 (ATMega8U2 na versão anterior a Rev.3) para fazer a comunicação com a porta USB no PC. O firmware dos 2 microcontroladores devem ser alterados. O ATMega328 deve ser utilizado um firmware para controle pelas chaves e do manche e para acender os LED's. O microcontrolador ATMega8U2 ter o firmware alterado para reconhecimento do PC como interface de jogo Joystick. A seguir estão disponíveis os links dos firmwares para download.

Firmware ATMega16U2 Download

Firmware ATMega328 Download

Para fazer essas alterações é necessário o uso de um programador ISP. Não será mostrado aqui como criar um programador ISP. No site Lady Ada há um tutorial de como fabricar um programador USB Tiny ISP bem como fazer o download do driver para reconhecimento da porta USB. <http://www.ladyada.net/make/usbtinyisp/>.


No Arduino UNO há 2 microcontroladores, um é o ATMega328 que é o principal e o outro é o ATMega8U2 (ATMega16U2 no caso do Arduino UNO Rev.3). Para cada microcontrolador existe uma porta ISP semelhantes as da figura abaixo.


Para programar os microcontroladores utilizando o USB Tiny ISP é necessário instalar o AVR Dude. O WinAVR é um software que tem o AVR Dude, caso esteja usando o Windows. O WinAVR pode ser baixado no site <http://winavr.sourceforge.net/>. Faça a instalação do WinAVR.

O AVR Dude é um programa que funciona por linha de comando. Como serão feitas varias alterações nas configuradões, recomenda-se usar um GUI do AVR Dude para facilitar. O GUI recomendado é o AVRDUDE-GUI Yuki-lab.jp no site <http://yuki-lab.jp/hw/avrdude-GUI/>. A figura a baixo mostra o programa.

 

Na barra superior selecione o local da pasta onde está instalado o avrdude.exe. O arquivo se encontra dentro da pasta "bin" do WinAVR.

 

Selecione o programador USB Tiny ISP LadyAda

 

Selecione a Porta USB.

 

 No caso do ATMega16U2 escolha o dispositivo AT90USB162 (se não for Arduino UNO Rev.3 selecione o AT90USB82)

 

Escreva o comando "-F" no campo de linha de comando opcional

 

Conecte o cabo do programador no conector ISP correspondente ao ATMega16U2 conforme a figura:


Atenção!! Verifique a pinagem correta antes de fazer a ligação. Qualquer dúvida confira no site: <http://www.ladyada.net/make/usbtinyisp/>

 Para testar se a comunicação pode ser feita com o microcontrolador faça uma verificação das Fuses.

 

Se os campos forem preenchidos e não aparecer mensagem de erro é porque a comunicação foi bem sucedida. O próximo passo é gravar o Firmware no microcontrolador. Selecione o arquivo ATmega16U2-Firmware.hex caso ainda não tenha baixado baixe no link a seguir <Firmware ATMega16U2 Download> ( o mesmo firmware serve no ATMega8U2) e clique em "Erase - Write - Verify".

 

Em seguida conecte o programador no outro conector ISP correspondente ao ATMega328


Mude o dispositivo para ATMega328P e verifique as fuses

 

Se não aparecer nenhuma mensagem de erro, abra o arquivo ATmega328-Firmware.hex caso não tenha baixado <Firmware ATMega328 Download>. Em seguida clique em "Erase - Write - Verify".

 

Feito isso troque o cabo USB do programador e conecte no Arduino. Clique no menu Iniciar do Windows e depois em Dispositivos e Impressoras. Deverá aparecer um novo dispositivo "Arduino Joystick".

Feito isso é só fazer as ligações mostradas no tópico anterior e montar em uma caixa apropriada.

9 comentários:

  1. Olá Arthur belo poster...Então quer dizer que para eu fazer meu joystick com o ATMEGA328 eu precisarei de um Arduino com um ATMEGA para gravar o programa que está no Arduino para o meu ATMEGA328 virgem?

    ResponderExcluir
    Respostas
    1. Olá Deco! Obrigado! Você precisará basicamente de um programador ISP, não necessariamente um arduino. O arduino também pode exercer a função do programador. Para o seu ATMEGA virgem, voce só precisa conectar nas portas corretas. Pode usar uma protoboard e os componentes básicos para fazer a gravação. Tem muitos tutoriais por aí que ensinam como fazer sem precisar de um arduino. Espero ter respondido. Abraços!

      Excluir
    2. Olá Deco! Obrigado! Você precisará basicamente de um programador ISP, não necessariamente um arduino. O arduino também pode exercer a função do programador. Para o seu ATMEGA virgem, voce só precisa conectar nas portas corretas. Pode usar uma protoboard e os componentes básicos para fazer a gravação. Tem muitos tutoriais por aí que ensinam como fazer sem precisar de um arduino. Espero ter respondido. Abraços!

      Excluir
    3. Este comentário foi removido pelo autor.

      Excluir
    4. Arthur quer dizer que quando eu fizer meu joystick e por no prototipo com o meu atmega328 para ele reconhecer pela porta USB eu vou precisar de um programador ISP também?... Eu fiz o joystick coloquei no meu prototipo agora são sei fazer como ele reconhecer pelo USB.... fico muito feliz por você ter me dado atenção Arthur forte abraço! se tiver algum site com tutorial eu fico feliz ....

      Excluir
    5. Tipo eu teria que usar um USB HOST?

      Excluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Curti! Fiz um recentemente usando modulo joystick para controlar por HT12E/D RF 433MHz um pequeno carro. Optei por RF devido ao alcance. Mas vou pesquisar para montar um arcade como o seu. Muito bom!

    ResponderExcluir
  4. Olá Arthur. Muito obrigada pelo post. Gostaria de saber se é possível montar somente o joystick, sem os botões. O projeto muda muito ou só deixo de configurar os botões? Abraço o/

    ResponderExcluir