sábado, 19 de setembro de 2015

Controle de PS2 e Arduino

Aí vai algumas dicas pra quem quiser controlar algo com Arduino utilizando o controle do PS2 para dar o comando.
Nesse exemplo foi utilizado o controle do PS2 ligado ao Arduino para controlar um carrinho.

Material utilizado

01 Protoboard;
02 motores de 6v com redutor;
Shield L293D, ou ponte H (L293D);


01 controle de PS2;



01 Arduino (Aqui foi utilizado o Uno);



01 Bateria de 9v para alimentar o Arduino;
04 pilhas AA para alimentar os motores;
04 rodinhas para o carrinho.

A maior parte do material foi adquirido no site http://www.filipeflop.com.

Montagem

O chassi foi feito de acrílico:




Depois de tudo montado:





Motor Shield L293D

Especificações

O Motor Shield L293D pode controlar até 4 motores DC e pode fornecer uma corrente máxima de 600mA por canal. O chip L293D também é conhecido como um tipo de Ponte H que é tipicamente um circuito elétrico que permite uma tensão ser aplicada em uma carga em qualquer direção, possibilitando alternar o sentido de giro do motor por exemplo.

Com este Shield é possível controlar até 4 motores DC, 2 servos ou 2 motores de passo.

A corrente máxima para os motores DC é de 600mA por canal, e a alimentação externa pode ser de 4,5 a 25 Vcc, como pode ser visto neste datasheet do Motor Shield.

Este Motor Shield L293D é compatível com Arduino Uno e Arduino Mega.


Pinos do Arduino utilizados pelo Motor Shield 

Pino digital 11: ativação do Motor DC 1 / Controle de velocidade do Motor de passo 1.
Pino digital 3: ativação do Motor DC 2 / Controle de velocidade do Motor de passo 1.
Pino digital 5: ativação do Motor DC 3 / Controle de velocidade do Motor de passo 2.  
Pino digital 6: ativação do Motor DC 4 / Controle de velocidade do Motor de passo 2.

Ainda são utilizados para os motores DC e motores de passo mais os pinos 4, 7, 8, 12.

Para os servo motores são utilizados os pinos 9 (servo 1) e 10 (servo 2). 

Essas descrições de pinos também estão descritas no datasheet do Motor Shield.

Pinos do Arduino não utilizados pelo Motor Shield


Não são utilizados os 6 pinos de entrada analógica (A0 ao A5), e também os pinos digitais de 0 ao 2 e o 13.

O Arduino utilizado como referência é o Uno.

Montagem elétrica

Como pode ser visto nas imagens acima o Motor Shield foi deixado desconectado da placa Arduino, para que se pudesse utilizar alguns pinos que não seriam utilizados pelo Shield no momento neste projeto, possibilitando a ligação do controle e também dos LED's do farol e lanterna de freio (pinos 2 e 5 respectivamente).


Especificações dos motores:


- Eixo duplo
- Tensão de Operação: 3-6V
- Redução: 1:48
- Corrente sem carga: ≤200mA (6V) e ≤150mA (3V)
- Velocidade sem carga: 200RPM (6V) e 90RPM (3V)



A Pinagem do conector do PS2

O conector do Joystick do PS2 possui nove pinos conforme a 
figura abaixo. Nela observamos o padrão de cores utilizado 
pelos controles com fio originais da Sony.



                                      Referência: http://microcontrolado.com/controle-playstation-no-pic-2/

1 – Data:

-Sinal enviado do controle para o Playstation
-Este-Este sinal é uma transmissão serial de 8 bits sincronizado 
com o sinal do pino de clock por banda de descida. Este sinal 
contém a resposta ao sinal Command.
-Este pino é uma saída em coletor aberto e necessita de um 
resistor de pull-up (1 à 110k). Esta resistência é necessária 
porque o controle só pode conectar este pino à terra, então 
ela se faz necessária para garantir o nível lógico 1.

 2 – Command:

-Sinal enviado do Playstation para o controle.
-É uma transmissão serial de 8 bits, também sincronizado com o 
pino de clock. Ele será utilizado para estabelecer a 
comunicação entre o controle e o nosso pseudo console, 
solicitando as informações.

3 – Vibration motor power:

-Sinal enviado do Playstation para o controle.
-Não utilizado nesse projeto.

4 -GND:

-Terminal de referência para os demais sinais além da alimentação do 
circuito.

5 – Power 3,3V ou 5 V:

-Sinal enviado do Playstation para o controle.
-Dependendo do controle pode ser de 5Vcc ou 3,3Vcc.

6 – Att:

-Sinal enviado do console para chamar a atenção do controle.
-Este sinal permanece em nível lógico baixo durante a transmissão.

7 – Clock (250kHz à 500kHz):

-Sinal enviado do Playstation para o controle.
-Utilizado para manter sincronia entre o Playstation e o 
controle.

8 – Não utilizado.

9 – ACK (Acknoledge):

-Sinal enviado do controle para o Playstation.
-Não utilizado nesse projeto.

Os terminais utilizados nesse projeto foram o GND(Preto), Power(Vermelho), Clock(Azul), Data(Marrom), Command(Laranja) e Att(Amarelo).

Programação do Arduino

Agora só falta configurar o Arduino para fazer o que se espera.
Foi utilizado a biblioteca para o Arduino do shield L293D e a do controle do PS2.

Alguns comandos básicos utilizando a biblioteca do shield:

setSpeed é utilizada para definir a velocidade do motor (de 0 à 255):
Ex:" motor.setSpeed(120); "

run é utilizado para partir o motor:
Ex:" motor.run(FORWARD); "

FORWARD e BACKWARD são utilizados para definir o sentido de rotação do motor:
Ex:" motor2.run(BACKWARD); "
      " motor2.run(FORWARD); "

RELEASE é utilizado para parar o motor:
Ex:" motor2.run(RELEASE); "

Segue aqui o download do Sketch pronto:
Sketch Carrinho


Referências : 

http://microcontrolado.com/controle-playstation-no-pic-2/

https://cdn-learn.adafruit.com/downloads/pdf/adafruit-motor-shield.pdf

http://www.filipeflop.com/pd-6b643-motor-shield-l293d-driver-ponte-h-para-arduino.html?ct=&p=1&s=1




8 comentários:

  1. Boa noite amigo, queria usar seu projeto como ideia para um novo projeto e gostaria de saber se você pode enviar o esquema de ligação dos fio.
    e se é possível utilizar a shield diretamente no arduino

    ResponderExcluir
    Respostas
    1. Me desculpa, só visualizei sua pergunta agora, estava sem tempo. Sim é possível utilizar o shield diretamente no Arduino. Quanto ao esquema de ligação, vou providenciar e te envio.

      Excluir
    2. Bom dia amigo, se ainda te interessar, segue postado o esquema de montagem.

      Excluir
  2. Amigo posso utilizar esta mesma programação no Shields l298n? Obs: sou muito novo na área, obrigado.

    ResponderExcluir
    Respostas
    1. Bom dia, você conseguirá sim, apenas veja o funcionamento do shield aqui http://blog.filipeflop.com/motores-e-servos/motor-dc-arduino-ponte-h-l298n.html, e se você for utilizar o controle com PWM veja esse outro exemplo aqui http://blog.vidadesilicio.com.br/arduino/ponte-h-l298n-controle-velocidade-motor/ .
      Qualquer dúvida é só perguntar.

      Excluir
  3. Boa noite amigo, sabe dizer se eu usar 2 carrinhos usando controle sem fio vai ter interferência entre ambos? ou os códigos dos controles e receptores são diferentes um dos outros ?

    ResponderExcluir
    Respostas
    1. Creio que sim, a biblioteca utilizada é a mesma utilizada aqui com o controle com fio, a PS2X_lib. Mas sugiro que veja esse vídeo: https://www.youtube.com/watch?v=zH6qUWZiasM.
      Abraço.

      Excluir
  4. essa configuração é igual para controle com fio e sem fio?

    ResponderExcluir