Logo Pisciotta

PISCIOTTA

Soluções Inteligentes

PROFESSOR

Listar
Artigos, curiosidades e muitas dicas.

Aproveite, curta, compartilhe.

Joystick Anal??gico



ARDUINO

943 Views - 11 Curtidas




Joysticks anal??gicos s??o interfaces de entrada de dados muito boas quando se tratam de valores proporcionais a um movimento ou intensidade. Podem ser utilizados, por exemplo, para controlar servomotores em aplica????es diversas, como dire????o de ve??culos ou bra??os rob??ticos.

O Conceito

Um Joystick anal??gico ?? um mecanismo composto por dois potenci??metros e um bot??o. Os dois potenci??metros s??o dispostos em 90 graus um do outro, representando os eixos X e Y. Esses potenci??metros possuem uma mola que os mant??m na posi????o central, assim quando empurramos o joystick em uma das posi????es, o valor da resist??ncia ?? alterado, proporcionalmente ao deslocamento efetuado, e ao soltar a manopla, a mola leva o potenci??metro ?? posi????o central.

Joystic ElecFreaks

O modelo que trato nesse post ?? da empresa ElecFreaks vers??o 1.4 (embora o verso da placa esteja escrito vers??o 1.2 na serigrafia - vou considerar a vers??o maior presente no lado TOP da placa). Essa vers??o possui tr??s conectores com tr??s terminais cada, sendo sempre dois terminais de alimenta????o e um de sinal. O terminal V ?? a alimenta????o positiva de 5V, G ?? o negativo GND, X e Y s??o os sinais dos potenci??metros e K ?? o sinal do bot??o de press??o. Existe fura????o para soldar um ??nico conector no canto superior direito, mas resolvi utilizar os pinos dos conectores j?? presentes.

Joystic ElecFreaks

Se voc?? movimentar o joystick na posi????o horizontal, somente o valor da resist??ncia X ser?? alterado, aumentando se voc?? empurrar o curso para um lado e diminuindo se voc?? empurrar para o lado contr??rio. O mesmo ocorre para o eixo Y quando voc?? movimenta o cursor para cima e para baixo. Essa altera????o de resist??ncia gera uma tens??o proporcional ao movimento efetuado, que pode ser lido por uma entrada anal??gica do microcontrolador (o Arduino por exemplo) e ent??o executar uma a????o de acordo com o programa elaborado.

Podemos utilizar os Joysticks anal??gicos para fazer um navegador de menu em um LCD, por exemplo, o que tornaria o uso do seu dispositivo muito f??cil e intuitivo. Vejamos adiante alguns exemplos.

Exemplos

Exemplo 1

Este exemplo de c??digo mostra como os dados podem ser lidos utilizando o joystick.


//Programa para Ler os dados do Joystick e exibir na Serial
// X -> A0
// Y -> A1
//Bot??o -> D2
void setup() {
Serial.begin(9600); //Inicializa a serial
//Entradas anal??gicas n??o precisam ser iniciadas, mas as digitais sim
pinMode(2, INPUT);
//Escreve cabe??alho na Serial
Serial.println("Verificando o comportamento de um Joystick");
Serial.println();
Serial.print("X");
Serial.print("\t"); //Tabula????o
Serial.print("Y");
Serial.print("\t");
Serial.println("Click");
}

void loop() {
// Imprime os elementos individuais
Serial.print(analogRead(0));
Serial.print("\t");
Serial.print(analogRead(1));
Serial.print("\t");
Serial.println(digitalRead(2));
// Aplica espera de 500 milisegundos
delay( 500);
}

Esquema de liga????o do Joystick anal??gico

Observa-se que ao descarregar o programa no Arduino e abrir o Serial Monitor, ?? impressa a informa????o num??rica dos valores de X, de Y e o status do bot??o (0 ou 1) a cada meio segundo. Com isso voc?? pode compreender que deixar o joystick na sua posi????o normal n??o representa um valor igual a zero, mas sim um valor mediano (pr??ximo ?? metade do valor m??ximo).

Mas.... o que ?? esse valor apresentado? Esse valor n??o ?? a resist??ncia do potenci??metro, nem a tens??o dispon??vel na entrada anal??gica, nem tampouco a corrente el??trica. O valor apresentado ?? a leitura do conversor Anal??gico/Digital do microcontrolador com resolu????o de 10 bits. Quando se fala em 10 bits, significa que os valores de tens??o anal??gica na entrada do Arduino s??o traduzidas em um n??mero inteiro que vai de 0 a 1023 (pois 2 elevado a 10 ?? igual a 1024 combina????es, ou seja, de 0 a 1023). Portanto, quando se aplica uma tens??o de 0V (zero volts) na entrada anal??gica do microcontrolador, ser?? realizada a leitura do valor 0, e 1023 ser?? o valor correspondente ao m??ximo suportado pela entrada, que ?? 5V (cinco volts). Cada unidade desse valor representa 5V/1023 = 0,0049V.

Observa-se tamb??m que mesmo sem encostar no joystick os valores ficam se alterando constantemente ao redor de um valor m??dio. Isso acontece em qualquer leitura anal??gica devido principalmente ??s interfer??ncias eletromagn??ticas percebidas na entrada anal??gica do microprocessador.


Exemplo 2

Este exemplo de c??digo mostra como ?? poss??vel controlar servomotores utilizando o joystick.


//Programa para Ler os dados do Joystick e controlar dois ServoMotores
// X -> A0
// Y -> A1
// Bot??o -> D2
// Servo 1 -> 10
// Servo 2 -> 11
// LED -> 13
void setup() {
Serial.begin(9600); //Inicializa a serial
//Entradas anal??gicas n??o precisam ser iniciadas, mas as digitais sim
pinMode(2, INPUT);
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}

void loop() {
digitalWrite(13, digitalRead(2)); //Aciona o LED 13 de acordo com o bot??o do Joystick
analogWrite(11, map(analogRead(0), 0, 1023, 10, 245));
//comando analogWrite escreve um valor PWM no pino. O valor deve ser entre 0 e 255.
//Como o valor lido pela entrada vai at?? 1023, usa-se o comando map para fazer uma regra de tr??s
// com o valor lido e o valor desejado, tanto para o X quanto para o Y
//No caso coloquei os valores da sa??da entre 10 e 245 porque os servomotores da China nunca permitem o deslocamento de 180 graus (como deveriam)
//ent??o limito o movimento para n??o for??ar os motores nos extremos.
analogWrite(10, map(analogRead(1), 0, 1023, 10, 245));
// Aplica espera de 50 milisegundos
delay(50);
}

Esquema de liga????o do Joystick anal??gico com servomotores

Utilizamos as sa??das PWM dos pinos 10 e 11 para controlar dois servomotores de 9g utilizados em aeromodelismo. Vale ressaltar que os servomotores se movimentam em teoria 180??, mas na pr??tica quase nenhum servomotor permite o controle suave em todo esse percurso: geralmente os extremos causam uma o trabalho for??ado dos servomotores por tentarem chegar a uma posi????o que o sistema mec??nico n??o consegue chegar. Isso ocorre por mal ajuste do sistema eletr??nico em rela????o ao sistema eletr??nico dentro do servomotor. Para evitar esse esfor??o prejudicial aos servomotores, evita-se colocar os valores 0 e 255 na sa??da PWM. No meu exemplo eu limitei o valor m??nimo em 10 e o valor m??ximo em 245.

Com essa experi??ncia se pode compreender como utilizar o Arduino para trabalhar com valores anal??gicos na entrada e com sinais PWM na sa??da (simulando um sinal anal??gico), o que ?? ??til em um grande n??mero de aplica????es pr??ticas.

At?? a pr??xima.