Esse é um projeto bem legal e bem simples, que pode ser encontrado facilmente na internet, porém nem sempre está descrito de forma simples para que qualquer um possa implementá-lo.
Hardware
Primeiramente, vamos precisar de uma placa Arduino. No meu projeto utilizei a Arduino UNO mesmo, porém após compilar o Sketch, com todas as bibliotecas, o tamanho ficou próximo dos 30KB, que é o tamanho máximo que o programa pode ter(2KB é utilizado pelo BootLoader).
A comunicação do controle é feita via Bluetooth, então precisaremos ter um Bluetooth para comunicar nosso Arduino com o controle. Mas, não pode ser qualquer Bluetooth e também não pode ser os shields que fazem comunicação serial com o Arduino. Precisaremos da Placa USB Host Shield, que possui uma entrada USB e então precisaremos de um Dongle Bluetooth (desses que conectamos via USB no PC) que seja do padrão Bluetooth 2.0 compatível com EDR. Normalmente na embalagem do Bluetooth aparecem essas informações, caso não apareça, deve ser procurado pela velocidade de 3Mbps.
Temos vários modelos de placa USB Host Shield, testei 3 delas, e todas as três são compatíveis com a biblioteca.
Eu utilizei um carrinho de controle remoto antigo. Retirei a parte eletrônica dele, coloquei um servo motor para controlar os pneus dianteiros(pois o que havia no carrinho era um motor DC e não tinha controle analógico) e aproveitei o motor DC que já havia no carrinho.
Enfim, é isso que precisaremos de "Hardware", para montar nosso projeto:
- Placa Arduino UNO
- Placa USB Host Shield
- Dongle USB 2.0 + EDR (3Mbps)
- Carcaça de carrinho antigo
- Servo motor
- Motor DC
- Controlador de Motor DC (Ponte H)
A placa USB Host Shield vai conectada ao Arduino UNO, normalmente(é importante que essa placa tenha conectores empilháveis),
e na placa USB Host Shield conectaremos nossa placa controladora de motor. No meu casso confeccionei uma placa específica para esse projeto, onde tenho a saída para o servo motor, motor DC, farol(LED) e buzina(buzzer).
Existem placas prontas que fazem a ponte H que controla o motor DC, uma boa alternativa, caso você não tenha conhecimento de confecção de placas. Basta dar uma procurada no mercadolivre ou no google que aparecerão várias opções. Procure como "Ponte H Arduino", ou como "Driver Motor Arduino". É importante que tenham conectores do tipo empilháveis para que os pinos do Arduino estejam disponíveis para fazer a ligação do Servo motor.
A placa USB Host Shield utiliza os pinos de 7 a 13, se não me engano (já faz uns 2 meses que montei esse projeto), então não utilize esses pinos para fazer ligações.
Posteriormente quero postar minhas técnicas de confecção de placa, para fazer em casa.
Ou, quem preferir pode mandar fazer a placa, mas o preço é bem salgado.
A caixa de pilhas do carrinho foi aproveitada e a alimentação foi feita da seguinte forma:
- GND, ligado ao GND do arduino;
- 7,5V (ou 5 pilhas) ligado no Vin do Arduino;
- 12V ligado na ponte H que controla o motor.
Quando você liga alguma tensão no Vin do Arduino, os reguladores de tensão para 5V e 3,3V funcionam normalmente, como se estivessem sendo alimentados pelo pino P4.
O servo motor que eu utilizei precisa de 5V e foi ligado na porta correspondente do Arduino.
Software
Primeiramente vamos baixar e instalar a biblioteca que controlam a placa USB Host Shield (https://github.com/felis/USB_Host_Shield_2.0/archive/master.zip).
Estou usando a versão 1.0.5 da IDE do Arduino.
Vamos descompactá-la na pasta libraries do seu Sketchbook (normalmente fica na pasta C:\Usuários\Seu usuário\Documentos\Arduino. Pode ser alterado clicando em Arquivo/Preferências/Localização do Sketchbook) e renomeá-la da seguinte maneira USB_Host_Shield_20. Após isso, caso você esteja com a IDE Arduino aberta, feche e abra novamente. Já será possível ver que apareceu uma nova opção com o nome da biblioteca em Arquivo/Exemplos.
Vamos abrir o exemplo USB_Host_Shield_20/Bluetooth/PS3BT. Agora ficou fácil!!
Dando uma rápida olhada no código, você irá reconhecer os comandos dos botões (Triangle, Circle, R2, R1, etc). SIM, você só precisa inserir seu código nos blocos if adequados para controlar seu projeto de acordo com sua necessidade.
Para fazer o servo virar as rodas dianteiras usando o botão analógico esquerdo, adicionei o seguinte código:
A informação passada pelo controle analógico funciona assim: tudo a esquerda é 0, tudo a direita é 255. Com o comando map escrevi diretamente no servo motor, utilizando os comandos da biblioteca <Servo.h>. Como o espaço para giro do motor é pequeno, limitei o movimento em 30 graus para cada lado (90 é o centro, 180 é roda para a esquerda e 0 é roda para a direita, por isso usei os valores invertidos no map)
Para controle do motor usando o botão analógico direito, usei o seguinte código:
O motor precisa que seja mandado uma determinada tensão (PWM) em um pino para ir para a frente e em outro pino para ir para trás, tive que colocar os if para dividir esse ponto central.
Não esquecer de declarar e inicializar as variáveis no início do código:
Para fazer a biblioteca funcionar, alimente o Arduino(necessita alimentação externa), plugue o dongle bluetooth na USB da placa USB Host Shield, deixe por alguns segundos para que a biblioteca leia o endereço MAC do bluetooth. Remova o bluetooth e insira o cabo do controle do PS3, conectado ao controle, para que a biblioteca grave o endereço MAC do bluetooth no controle. Quando o controle reconhecer o MAC, todos os LEDs do controle ficarão piscando. Após isso é só reconectar o bluetooth, pressionar o botão PS no controle e aguardar até que ele conecte e fique somente o LED 1 acesso. Caso não consiga conectar de primeira, tente resetar o Arduino, porém não será mais necessário retirar o bluetooth e gravar MAC no controle, uma vez feito isso, fica gravado permanente.
Agora é só brincar.
Código fonte disponível em Projetos-Arduino/PS3BT_carro.ino