Shield JoyStick:

Neste tutorial utilizaremos o Shield JoyStick com arduino. Este, no que lhe concerne, é muito utilizado para manusear jogos com arquitetura arduino. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o Shield JoyStick?

Este componente como todos os outros sensores trabalha com os conceitos físicos.

– Funcionamento do Shield JoyStick com arduino

Primeiramente, o Shield JoyStick é de fácil conexão e possui muitas saídas, igual ao microcontrolador arduino, já que conta com uma série de pinos para conexões especiais. Além disso, podemos utilizar para controlar braços robóticos ou navegar em menus, ou seja, é ideal para controlar braços robóticos, servos motores, ou ainda para realizar a navegação e seleção em menus.

– Alavanca Analógica

Esta alavanca analógica funciona como um controle de 2 eixos (X e Y), os quais é possível movimentá-la. Quando movimentamos a alavanca analógica do shield para qualquer direção dos eixos X e Y, ela irá identificar a direção a qual a movimentamos e realizará a função que designamos para o shield. Se conectarmos, por exemplo, no braço robótico iremos fazer com que o braço se movimente na mesma direção(X e Y) que a movimentação do controle do shield. Os eixos X e Y são respectivamente os eixos do plano cartesiano que aprendemos inicialmente na matemática.

Imagem do shield joystick sendo usado para controle de braço robótico

– Os componentes do Shield JoyStick com arduino são:

Na parte superior o JoyStick Shield Arduino conta com um 4 chaves push button instaladas no formato de cruz, um sistema de alavanca analógico com diversos movimentos(Conta com uma alavanca analógica de 2 eixos (X e Y)) e duas push buttons pequenas de seleção, existe também uma chave que possibilita escolher a tensão de alimentação do shield, podendo optar entre 5v ou 3,3v, possibilitando assim a utilização em outros microcontroladores. O Joystick no eixo Y a cada movimento produzirá uma tensão proporcional no pino analógico 0, enquanto, um movimento no eixo X produzirá um sinal analógico no pino analógico 1.

Módulo do Shield JoyStick

 

Mãos à obra — Configurando um Shield JoyStick

Componentes Necessários

– Montando o projeto:

Precipuamente conectemos o Shield no arduino conforme a imagem abaixo:

Imagem do Shield JoyStick + Aduino

– Programando o Arduino:

Agora vamos conectar o arduino no computador e abrir a IDE arduino.  Escreva o programa abaixo na IDE e compile o programa para o seu arduino. Em contrapartida antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

//Mapeamento do Hardware do Joystick
#define  X  A0  //analógico horizontal
#define  Y  A1  //analógico vertical
#define  K  8   //Botão K
#define  F  7   //Botão F
#define  E  6   //Botão E
#define  D  5   //Botão D
#define  C  4   //Botão C
#define  B  3   //Botão B
#define  A  2   //Botão A

void setup(){
  int i;
  for(i=0; i<9; i++) pinMode(i, INPUT_PULLUP); //Define as entradas de 0 á 8 como nível logico alto constante
  pinMode(X, INPUT); //Define o pino A0 como entrada
  pinMode(Y, INPUT); //Define o pino A1 como entrada

  Serial.begin(9600); //Inicializa a comunicação serial
}

void loop(){
  int x_read = analogRead(X); // A variavel x_read recebe a leitura do pino analogico A0
  int y_read = analogRead(Y); // A variavel y_read recebe a leitura do pino analogico A1
  Serial.print ("X val:    "); // imprime na tela o texto escrito
  Serial.println ("Y val:    "); // imprime na tela o texto escrito pulando uma linha
  Serial.print  (x_read); // imprime na tela a leitura do pino A0
  Serial.print  ("    "); // imprime na tela  a parte do pino A1
  Serial.println(y_read); // imprime na tela a leitura do pino A1

  if  (!digitalRead(K)) //Vão imprimir na tela quais os botões que estão sendo pressionados 
    Serial.println("K press");
  else if (!digitalRead(F))
    Serial.println("F press");
  else if (!digitalRead(E))
    Serial.println("E press");
  else if (!digitalRead(D))
    Serial.println("D press");
  else if (!digitalRead(B))
    Serial.println("B press");
  else if (!digitalRead(C))
    Serial.println("C press");
  else if (!digitalRead(A))
    Serial.println("A press");
  else
   Serial.println("Nothing press");

   delay(741);
   
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

– Testando o funcionamento:

Em suma, podemos visualizar o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600) basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do Shield JoyStick com arduino

De início temos a instrução #define que colocamos para associar as portas dos pinos do arduino a nomes referente aos componentes conectados nestes pinos. Temos definido na alavanca analógico o pino A0 como sensor do eixo X e o pino A1 como do eixo Y. Nos botões temos um pino para cada como podemos observar no trecho do código abaixo:

#define  X  A0  //analógico horizontal
#define  Y  A1  //analógico vertical
#define  K  8   //Botão K
#define  F  7   //Botão F
#define  E  6   //Botão E
#define  D  5   //Botão D
#define  C  4   //Botão C
#define  B  3   //Botão B
#define  A  2   //Botão A

– Função Setup – Definindo pinos do Shield JoyStick com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. A função for irá inicializar a variável “i” com 0, logo depois colocamos uma condição na qual a função irá se repetir até que a variável “i” seja igual a 9. Logo depois, temos a função pinMode que configura as entradas de 0 á 8 como entradas de pull up, ou seja, fica em constante nível logico alto e quando um dos botões é pressionado ele irá para nível logico baixo, identificando-o. Já X e Y são entradas analógicas. Enfim temos “Serial.begin(9600)” que inicializa a comunicação seria, assim podemos visualizar o que está acontecendo no serial monitor.

void setup(){
  int i;
  for(i=0; i<9; i++) pinMode(i, INPUT_PULLUP); //Define as entradas de 0 á 8 como nível logico alto constante
  pinMode(X, INPUT); //Define o pino A0 como entrada
  pinMode(Y, INPUT); //Define o pino A1 como entrada

  Serial.begin(9600); //Inicializa a comunicação serial
}

– Função Loop – Leitura do nosso Shield JoyStick com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. Iniciamos a função loop com a declaração de duas variáveis “int x_read” e “int y_read”. Atribuímos a elas a leitura analógica dos eixos X e Y respectivamente. Logo depois, temos o Serial.print que imprime no serial monitor o texto “X val: ” e o texto “Y val: “. Além disso, também imprimir o valor da leitura do movimento dos eixos X  e Y já que como sabemos foram atribuídos as variáveis anteriores.

void loop(){
 int x_read = analogRead(X); // A variavel x_read recebe a leitura do pino analogico A0
 int y_read = analogRead(Y); // A variavel y_read recebe a leitura do pino analogico A1
 Serial.print ("X val: "); // imprime na tela o texto escrito
 Serial.println ("Y val: "); // imprime na tela o texto escrito pulando uma linha
 Serial.print (x_read); // imprime na tela a leitura do pino A0
 Serial.print (" "); // imprime na tela a parte do pino A1
 Serial.println(y_read); // imprime na tela a leitura do pino A1

Inicialmente a função if é uma estrutura de decisão. Sendo assim, colocamos condições nos “if’s” e “else if’s” onde vemos que se forem verdadeiras as linhas abaixo onde tem a função Serial.println serão executadas. Na primeira condição “!digitalRead(K)” se o botão K tiver sendo pressionado irá escrever no serial monitor “K press”. Semelhantemente temos o mesmo para todas as outras condições com seus respectivos botões. Caso não apertemos nenhum botão o último else será executado e o texto “Nothing press” será impresso no monitor serial.

  if  (!digitalRead(K)) //Vão imprimir na tela quais os botões que estão sendo pressionados 
    Serial.println("K press");
  else if (!digitalRead(F))
    Serial.println("F press");
  else if (!digitalRead(E))
    Serial.println("E press");
  else if (!digitalRead(D))
    Serial.println("D press");
  else if (!digitalRead(B))
    Serial.println("B press");
  else if (!digitalRead(C))
    Serial.println("C press");
  else if (!digitalRead(A))
    Serial.println("A press");
  else
   Serial.println("Nothing press");

   delay(741);
   
}

 

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Shield JoyStick . Veja também o tutorial “SENSOR DE MOVIMENTO DE CABEÇA – ITG3205 + ADXL345 + HMC5883L” e aprenda mais sobre como os eixos do plano cartesiano fazem parte da criação de sensores e shields. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.