Quem faz robôs de alguma forma precisa controlá-los. Na verdade um robô para ser "Robô" tem que se auto-controlar, porém mesmo embarcando alguma inteligência no seu dispositivo, você ás vezes precisa mandar comandos para ele.
Depois de várias tentativas de construir um controle para usar nos meus robôs, encontrei alguns artigos na net sobre o controle de PlayStation(r). Como fui (sou) bem viciado nesta linha de console, resolvi investir na idéia.
O legal desse controle é que ele tem dois joysticks analógicos(*) que você pode usar para controlar coisas como servo-motores ou a direção do seu robô e é proporcional, ou seja, se você coloca um pouquinho para o lado a saída é um número pequeno, colocando mais a saída é maior, etc. Vamos ás características do controle:
1 - Objetivo
O projeto trata-se de construir um aparelho para capturar as informações do controle e enviar esses dados em padrão serial de forma que seus robôs possam entender. Essa conversão é o objetivo do projeto, visto que hoje em dia qualquer robô possui um controlador que entende saída serial. Para cumprir o objetivo, precisamos fazer com que o controle acredite que está conectado a um video game.
Antes de mais nada, vamos explicar como o controle se comunica com o video game:
1º - video game pergunta (via sinais elétricos) se o controle está conectado;
2º - o controle responde que sim (caso ele esteja conectado);
3º - o video-game solicita os dados;
4º - controle então captura o estado de todos os botões e joysticks, monta um pacote de dados e;
5º - envia os dados para o video game.
O que vamos fazer então é fazer o controle pensar que quem está perguntando é o video game. Vamos utilizar um micro-controlador para isso. Nosso projeto terá as seguintes características:
Agora iniciaremos o passo-a-passo de como construir nosso conversor. No final do artigo disponibilizarei todo material (código fonte, esquema, desenho da placa, etc) para que todos possam fazer o seu conversor e/ou adaptá-lo à sua necessidade.
2 - Identificando os fios do controle
O controle possui um conector padrão fabricado pela sony, então a primeira coisa é cortar o conector. Se você ficar com dó, pode arrumar o conector de um vídeo game bixado. Eu não tenho dó, nem um video game bixado, então cortei o conector. :-)
Precisamos encontrar 6 fios entre os 8 que temos no cabo. DETALHE - o meu controle é "alternativo" portanto pode ser que as cores do seu cabo não seja iguais aos meus. Os fios que precisamos encontrar são:
Olhando o conector de frente (veja foto), podemos perceber a sequencia de pinos e seus respectivos sinais. Identifique as cores dos fiod que saem de trás de cada pino da foto e anote suas cores. No meu caso, as cores de cada sinal são: preto (gnd), vermelho (vcc), laranja (command), amarelo (att), azul (clock) e marrom (data)
ATENÇÃO - a ordem dos sinais no nosso conector será alterada. Não usaremos a ordem dos pinos do controle e sim a ordem abaixo:
gnd, vcc, command, att, clock e data
Fios separados e soldados a um conector fêmea. A ordem seguida foi a indicada acima
Bom, agora soldamos isso em um conector. Vamos à placa de circuito impresso.
3 - Placa de circuito impresso.
Todo circuito precisa de uma base física para que os componentes fiquem apoiados. Antigamente eu conseguia fazer circuitos sem essa base física. Pasmem, chama-se montagem em aranha e funciona. Solda-se os componentes uns aos outros. Fica muito ruim... Hoje eu faço placas com uma qualidade MUITO legal. Vide novamente o artigo da laminadora neste mesmo blog. Vamos usar ela para fazer nossa placa. Mas primeiro o projeto no CAD. Abaixo o esquema elétrico e o desenho da placa.

esquema e placa - clique nas imagens para baixar em maior resolução
Placa em formato PDF para impressão
Nos esquemas e placa acima, ficou faltando o código do componente IC2 - bom esté é o famoso regulador 7805...
Agora vamos fazer a placa. Vide artigo sobre a Laminadora (putz, de novo) e use o PDF acima. 30 minutos depois...
Placa corroida e furada
Placa montadinha
4 - Software
Aqui é que o "bixo pega"! O circuito deste aparelhinho é ridículo, poucos componentes. Agora o software... Bom... tive ajuda dos amigos internautas (vide links de referência no final do artigo) e o meu trabalho foi, além de entender a sequencia correta de acionamento dos sinais, portar o código para o PIC. Na verdade eu portei o código para CCS (PIC), Bascom (AVR) e Gcc (AVR), sendo último meu preferido, Czão puro, coisa de macho!
Não vou explicar o código neste artigo até porque eu tratei de comentar muito bem os fontes. Como trabalho com software o dia inteiro, se não comento muito bem meus códigos amanhã já esqueci o que eles fazem. Sabe como é, muito programa entope a RAM cerebral. (hehehehehehe) Caso alguem precise de ajuda, por favor escreva um comentário abaixo que eu respondo assim que puder.
Vou comentar como estão organizados os arquivos (clique no nome para baixá-los)
Eu tentei facilitar a vida do "cabra" que vai utilizar este projeto (eu inclusive) e inclui um mecanismo de configuração do envio dos dados utilizando os próprios botões do controle e apenas um LED. Vocês não imaginam o que é possível fazer com apenas um LED. Como é meio chato explicar todas as opções, assista o video abaixo e veja o que podemos configurar. De quebra vocês ficam conhecendo a voz desse chato que lhes escreve.
Então, para utilizar o aparelho, conecte o controle no conjunto de pinos à esquerda, conecte a alimentação (não se preocupe, tem proteção contra inversão de polaridade) depois conecte a saída serial no seu robô.
5 - Formato dos dados e considerações Finais.
Bom, depois de tudo isso, vamos ao resultado do projeto. O objetivo era um aparelho para controlar o controle (hehehe) e devolver um pacote de dados na porta serial. Vamos ás especificações de saída:
Após decifrar os dados do controle, a maioria dos bytes de informação são enviados praticamente como são colhidos do controle. Adicionei um cabeçalho e um rodapé para que seja mais fácil controlar a recepção dos dados que o aparelho gera. Como dados úteis temos apenas 6 dos 8 bytes. Abaixo segue um mapa do pacote e do que cada Byte/Bit significa em relação aos botões do controle.
Note que os bytes de dados 2 ao 5 correspondem aos eixos do joystick "analógico". Na posição central os valores dos eixos x e y valem 127 e a medida que o joystick vai para a esquerda ou para baixo o valor tende a zero e a medida que eles vão para direita ou para cima eles tendem a 255. O legal é que são proporcionais, ou seja, variam de acordo com o "dedo" mais prá lá ou mais pra cá.
O controle de erros desta versão já foi implementado, porém não vou incluir neste artigo pois não o testei ainda apesar de já ter implementado o mesmo controle de erro em um monte de projetos meus. Costumo utilizar CRC de 16 bits, e para este projeto, vamos fazer com um mais simples de apenas 8 bits. Não coloquei por pura falta de tempo para testar, além do que vou em breve publicar um controle remoto via IR que sim, terá o controle de erro implementado. Portanto aqueles que precisam disso e não sabem fazer, aguardem um pouquinho que em breve publico aqui.
O primeiro byte do pacore (cabeçalho) vale sempre 254 e o ultimo byte do pacote
6 - Referências.
Segue abaixo os links dos artigos pesquisados e que foram super importantes para que eu pudesse fazer esse artigo. Espero de coração que quem for usar o meu artigo, sempre cite meu site, da mesma forma que estou citando os sites daqueles que foram a inspiração para minha versão.
Abaixo um link para download do material original acima. Eu sou do tempo que não tinha internet e costumo colecionar nos meus 2 Tera de HD (tamanho atual) tudo que acho relevante e tenho medo de perder... Hehehe desta vez funcionou!!! O formato das páginas é MHT é pode ser aberto com Internet Explorer.
Até mais Pe-pe-pessoal!!!!!
Maio-2009 (F) Daniel Omar Basconcello Filho