segunda-feira, 26 de novembro de 2012

Mouse Bluetooth usando Arduino UNO e módulo Roving RN-42 HID

O objetivo desta postagem é indicar um passo-a-passo para criar um mouse Bluetooth  de uma maneira direta, sem a pretensão de especificar todas as teorias envolvidas, pelo contrário a ideia é mostrar apenas uma das maneiras que funciona.

Este exemplo demonstra o uso do Mouse Bluetooth com um recurso importante que é o Mouse Wheel (a rodinha do mouse) implementada, além é claro da funções básicas Up, Down, Left, Right, Button 1 e Button2.


Equipamentos Básicos


Arduino UNO
















http://arduino.cc/en/Main/ArduinoBoardUno


FTDI Cable 5V VCC-3.3V I/O











https://www.sparkfun.com/products/9717



Roving Networks Bluetooth SMD Module - RN-42-HID



https://www.sparkfun.com/products/10823


8 Micro switches







9 Resistores de 10KΩ 5%
1 Resistor de 20KΩ 5%
1 Regulador 78L33


Configuração do Módulo Bluetooth















Módulo com a identificação do pinos, importante ligue o CTS com RTS. Mais detalhes em:
http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-42-ds.pdf












 Outro lado do módulo já com a proteção (utilizado Tubo Termo Retrátil transparente)


Conexão do Cabo FTDI com o módulo, lembre-se que o cabo FTDI fornece sinal TX em 3,3v, mas a saída que ele fornece é de 5v, logo é necessário ligar o regulador 78L33 para alimentar o módulo

















Conecte o cabo FTDI no computador e utilize seu aplicativo de terminal serial de preferência. O Windows 7 em algumas versões não vem com o HyperTerminal, mas existem algumas dicas de como instalar no link.

No Windows verifique em que porta COM foi instalado, você pode usar o Device Manager para isto. No meu caso foi a COM5.
























Abra o HyperTerminal:




















Escolha a porta COM correspondente:




















Configure da seguinte forma (default do módulo):





Importante: Flow Control é None devido ao pinos CTS(16) e RTS(15) do módulo estarem ligados

Após configurar as propriedades da COM, configure o terminal:
1 - Disconnect
2 - Properties
3 - Settings
4 -  ASCII Setup...
5 - Selecione as duas opções indicadas:
       - Send line ends with line feeds
       - Echo typed characters locally


Para conseguir a conexão, (pelo menos comigo) foi necessário um "ritual" que não consigo encontrar uma explicação, mas funciona. Se souber alguma outra forma melhor deixe nos comentários, agradeço muito.

Tentei diversas maneiras para estabelecer a comunicação, mas vou apresentar uma que consigo repetir sempre. Outros módulos Bluetooth como o WT12 não precisam deste "ritual", veja este post.

O "ritual" envolve mudar alguma característica da configuração da porta (no caso eu mudei o flow control, mas poderia ser outra característica) clicar em Apply, voltar a característica clicar em OK.




No passo 7 a Status Bar muda de "Auto detect" para "115200 8-N-1" , neste ponto o terminal está liberado para receber comandos.




Digitando 
$$$               terá a resposta CMD, entra no modo de comandos
ST,255            terá a resposa AOK, desativa timer para poder enviar comandos por mais de 60s
                apresenta as informações básicas do módulo
E                 apresenta as informações adicionais do módulo
SF,1              restaura configurações de fábrica
R,1               reboot
$$$               modo de comandos
ST,255            desativa timer
S-,RN42HID-Mouse  muda o nome para RN42HID-MOUSE-xxxx onde os 4 últimos dígitos do MAC address do módulo são adicionados automaticamente
SH,0220           configura como mouse
S~,6              ativa profile HID
SM,4              Auto-Connect DTR Mode, permite reconectar por comando $$$  C
R,1               reboot



Comandos seriais detalhados para este módulo:



Somente para verificar, depois de configurado, ficou assim:


D
***Settings***
BTA=000666450B29
BTName=RN42HID-Mouse-0B29
Baudrt(SW4)=115K
Parity=None
Mode  =DTR
Authen=0
Encryp=0
PinCod=1234
Bonded=0
Rem=NONE SET

Veja acima que PIN será 1234 para a conexão via Bluetooth



E
***ADVANCED Settings***
SrvName= SPP
SrvClass=0000
DevClass=1F00
InqWindw=0060
PagWindw=0060
CfgTimer=255
StatuStr=NULL
HidFlags=220
DTRtimer=8
KeySwapr=0




Circuito na Proto-boad

Neste ponto o módulo está devidamente configurado, para construir o mouse, monte uma proto-board como esta abaixo:




























Mostrando em detalhe as ligações na proto-board:



A Arduino trabalha o TX/RX com 5v e o módulo Bluetooth com 3,3v, sendo assim o TX da Arduino precisa ter sua tensão reduzida, para isso usei um divisor de tensão (figura abaixo). O RX da Arduino não precisa, pois quem gera o sinal é o TX do módulo Bluetooth com 3,3v e o RX consegue ler este sinal.


















Detalhe na Arduino:



Codificação


Instale a IDE da Arduino, (quando eu fiz este post usei a versão 1.0.1):
http://arduino.cc/en/Main/Software

Utilize o código abaixo:
https://github.com/Marchanjo/SimpleMouseBT_RN42/tree/master/SimpleMouseBT_RN42

Obs.: Se você não tem experiência com a Arduino recomendo que brinque um pouco com os exemplos, uma fonte muito boa de tutoriais é encontrada em:
http://www.ladyada.net/learn/arduino/

IMPORTANTE: Antes de transferir (Upload)  o código para a Arduino desconecte o Cabo TX/RX (nas figuras acima, fios verde e amarelo), pois a transferência do código irá utilizar o TX/RX da Arduino. Caso você não desconecte a IDE irá apresentar erros.

Faça o Upload do código para a Arduino, assim que estiver transferido, retire alimentação da Arduino (retire o cabo USB), conecte os fios do TX/RX, e alimente novamente a Arduino.


Conexão com o Bluetooth



Vou mostra com exemplo a conexão com Windows 7, mas o principio é similar em outros sistemas operacionais.

Selecione Add a Device no ícone do Bluetooth:














Note que o nome que definimos na configuração do módulo irá aparecer aqui, Selecione ele e clique em Next.


















Selecione a opção que utiliza Pairing Code:



















Digite 1234 (lembre-se que o PIN era 1234, na configuração padrão do módulo Bluetooth) e clique em Next.


















Pronto o Windows irá instalar os drivers necessários e o logo em seguida o Mouse Bluetooth já está funcionando.



Teste

Dica1: Toda vez que você alimenta ou faz o reset a Arduino o Led da Arduino (pino 13, o mesmo do exemplo Blink) fica acesso e depois que conecta o Bluetooth ele apaga, caso não apague retire e retorne a alimentação.

Dica2: Para saber se os botões na proto-board estão funcionando adequadamente, fiz com que os botões nas entrada pares (D4,D6,D8 e D10) acendam o led e os botões nas entrada impares (D5,D7,D9 e D11) apaguem o led.


Clique nos botões e veja o comportamento do mouse






















Um pequeno vídeo para mostrar o funcionamento, já pareado:



8 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Segui este tutorial para configurar um Bluetooth SMD Module - RN-42 (v6.15)(link da sparkfun: https://www.sparkfun.com/products/12574, e do datasheet: http://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf
    ), através do Gtkter do ubuntu (já que no ubuntu não tem hyperterminal) e também funcionou. Apenas as configurações no Gtkterm são feitas de forma diferente.

    Primeiramente, para instalar o Gtkterm no ubuntu, eu segui este tutorial: https://www.vivaolinux.com.br/dica/Gtkterm-um-saida-para-o-Hyperterminal

    As configurações são feitas em Configuration->Port
    Ai basta escolher a porta onde está conectado o cabo FTDI, configurar o Baud Rate para 115200. Feito isso, novamente na aba Configuration, selecionar as opções "Local Echo" e "CR LF auto".
    Daí pra frente, basta digitar os mesmos comandos de configuração desse tutorial.

    ResponderExcluir
  3. Olá! Como é o nome do material transparente que você usou para cobrir o trabalho nos pino (segunda imagem)? Termo-retrátil transparente?!

    ResponderExcluir
  4. Esse dispositivo já é, sem modificações, reconhecido pelo Android? Acredito que ele apareça como um teclado, com keystrokes úteis ao Acesso por Interruptor, não é?

    ResponderExcluir
  5. o arquivo não existe, você pode compartilhar o código?

    ResponderExcluir
    Respostas
    1. https://github.com/Marchanjo/joystick-mouse/blob/master/09-CodigoParaArduinoComoMouseBluetooth/SimpleMouseBT_RN42.ino

      Excluir