29 agosto 2016

Conecte o NunChuck no Arduino com o adaptador Wiichuck

Procurando um dispositivo simples de controle para o seu projeto de robótica ? Experimente este Adaptador Wiichuck NunChuck Arduino, uma placa muito simples de usar e que transfere para o Arduino os dados do acelerômetro, do joystick e dos demais botões do controle NunChuck.

Adaptador Wiichuck Arduino

Mas o que é esse tal de NunChuck ?

O controle NunChuck do Nintendo Wii


O videogame Nintendo Wii tem como controle principal o Wii Remote, um dispositivo parecido com um controle remoto (e que de certa forma é), que os jogadores usam para controlar os movimentos na tela de acordo com a movimentação do Wii Remote. O controle NunChuck, por sua vez, é um dispositivo auxiliar, que é ligado no Wii Remote e expande as funcionalidades do controle principal:

Controle NunChuck
Durante o jogo você pode, por exemplo, usar o controle principal para mirar em um inimigo, enquanto usa o NunChuck para selecionar uma arma, efetuar o disparo e executar alguma outra ação, já que ele conta com 2 botões, um joystick de 2 eixos e um acelerômetro de 3 eixos.

O cabo de conexão do NunChuck tem seis pinos, sendo 2 de comunicação I2C e 2 de alimentação, conforme mostra a imagem abaixo. Os demais pinos não são utilizados:

Cabo NunChuck
Imagem: arduino-projects4u.com
Como o Arduino e outros microcontroladores e placas já tem a interface I2C embutida, podem se comunicar facilmente com esse controle usando o adaptador Wiichuck.

Adaptador Wiichuck Arduino


O adaptador Wiichuck nada mais é do que uma pequena placa com 4 conectores, que serve para alimentar o controle NunChuck e ao mesmo tempo fazer a comunicação com o Arduino usando a interface I2C através dos pinos analógicos A4 (SDA) e A5 (SCL).

Adaptador Wiichuck Arduino

Para conexão com o Arduino, soldamos uma barra de pinos nesse adaptador, e fazemos a conexão conforme a imagem abaixo:

Detalhe Conexão Wiichuck

Assim, teremos os pinos A2 e A3 responsáveis pela alimentação do controle, e os pinos A4 e A5 fazendo a comunicação I2C:

Conexão Wiichuck Arduino


Se preferir, você pode fazer uma ligação com jumpers, alimentando o controle com uma fonte externa, liberando asssim os pinos A2 e A3.

Programa Wiichuck Arduino


Para facilitar o nosso trabalho, o criador da placa criou uma biblioteca que você pode baixar neste link.

Descompacte o arquivo zip e teremos dentro da pasta dois arquivos, o WiichuckDemo.INO, que é um programa de teste, e outro chamado nunchuck_funcs.h, que é a biblioteca propriamente dita.

Criei o programa abaixo com o WiichuckDemo.ino como base, e nele adicionei as funções de mostrar as informações do joystick, além dos valores do acelerômetro e dos botões já contidos no programa original:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Programa: Wiichuck com Arduino
//Autor: Arduino e Cia
/*Creditos
  2008 Tod E. Kurt, http://thingm.com/
*/

#include <Wire.h>
#include "nunchuck_funcs.h"

int loop_cnt = 0;

byte accx, accy, zbut, cbut, joyx, joyy;

void setup()
{
  Serial.begin(19200);
  //Seta os pinos de alimentacao
  nunchuck_setpowerpins();
  //Inicializa o controle 
  nunchuck_init();

  Serial.println("Teste WiiChuckDemo Arduino");
}

void loop()
{
  //Leitura a cada 100ms
  if ( loop_cnt > 1000 ) 
  { 
    loop_cnt = 0;

    //Le os dados do Nunchuck
    nunchuck_get_data();
    //Datos do Joystick
    joyx = nunchuck_joyx();
    joyy = nunchuck_joyy();

    //Dados do Acelerometro
    accx  = nunchuck_accelx(); // ranges from approx 70 - 182
    accy  = nunchuck_accely(); // ranges from approx 65 - 173

    //Dados dos botoes
    zbut = nunchuck_zbutton();
    cbut = nunchuck_cbutton();

    //Imprime os valores no Serial Monitor
    Serial.print("Ac.X: "); Serial.print((byte)accx, DEC);
    Serial.print("\tAc.Y: "); Serial.print((byte)accy, DEC);
    Serial.print("\tBot.Z: "); Serial.print((byte)zbut, DEC);
    Serial.print("\tBot.C: "); Serial.print((byte)cbut, DEC);
    Serial.print("\tJoy.X: "); Serial.print((byte)joyx, DEC);
    Serial.print("\tJoy.Y: "); Serial.println((byte)joyy, DEC);
  }
  loop_cnt++;
  delay(1);
}

Com o programa carregado no Arduino, abra o Serial Monitor e explore as funcionalidades do controle, girando para frente e para trás, para o lado direito e esquerdo, e acionando os botões:

Wiichuck Serial Monitor

Não esqueça de setar a velocidade do Serial Monitor para 19200, para que os dados apareçam corretamente.

Nenhum comentário:

Postar um comentário