Como controlar servo motor usando joystick

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post aprenderemos como controlar servo motores usando um joystick e Arduino. Veremos uma visão geral sobre o joystick, seus pinos, sua construção e funcionamento. Estaremos extraindo dados úteis do joystick que será a base para o controle dos servo motores.

Introdução

O lema deste artigo não é apenas controlar os servo motores mas, para aprender como usar um joystick para controlar muitos outros dispositivos periféricos.



Agora vamos dar uma olhada no joystick.

Um joystick é um dispositivo de entrada que consiste em uma alavanca, que pode se mover em várias direções nos eixos X e Y. O movimento da alavanca é usado para controlar um motor ou quaisquer dispositivos eletrônicos periféricos.



Joysticks são usados ​​de brinquedos RC a aviões Boing e executam funções semelhantes. Além disso, joysticks de jogos e menores possuem um botão no eixo Z que pode ser programado para realizar muitas ações úteis.

Ilustração do joystick:

Ilustração do joystick:

Joysticks são dispositivos eletrônicos em geral, portanto, precisamos aplicar energia. O movimento da alavanca produz diferença de tensão nos pinos de saída. Os níveis de tensão são processados ​​por um microcontrolador para controlar o dispositivo de saída, como um motor.

O joystick ilustrado é semelhante a outro, que pode ser encontrado nos controladores de PlayStation e Xbox. Você não precisa quebrar esses controladores para salvar um. Esses módulos estão disponíveis em lojas de eletrônicos locais e sites de comércio eletrônico.

Agora vamos ver a construção deste joystick.

Tem dois 10 quilo ohms potenciômetro posicionado nos eixos X e Y com molas para que volte à sua posição original quando o usuário liberar a força da alavanca. Ele tem um botão ON no eixo Z.

Tem 5 pinos, 5 volts Vcc, GND, variável X, variável Y e SW (chave do eixo Z). Quando aplicamos tensão e deixamos o joystick em sua posição original da alavanca. Os pinos X e Y produzirão metade da tensão aplicada.

Quando movemos a alavanca, a tensão varia nos pinos de saída X e Y. Agora vamos praticamente conectar o joystick ao Arduino.

Diagrama esquemático:

Controle do servo motor Arduino usando joystick

Os detalhes da conexão do pino são fornecidos ao lado do circuito. Conecte a configuração de hardware concluída e carregue o código.

Programa:

//---------------Program Developed by R.Girish--------------//
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
void setup()
{
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
Serial.print('X axis = ')
Serial.println(x)
Serial.print('Y axis = ')
Serial.println(y)
Serial.print('Z axis = ')
if(z == HIGH)
{
Serial.println('Button not Pressed')
}
else
{
Serial.println('Button Pressed')
}
Serial.println('----------------------------')
delay(500)
}
//---------------Program Developed by R.Girish--------------//

Abra o monitor serial, você pode ver o nível de tensão nos pinos dos eixos X e Y e o status do eixo Z, ou seja, pressione o botão conforme ilustrado abaixo.

Esses valores dos eixos X, Y, Z são usados ​​para interpretar a posição da alavanca. Como você pode ver, os valores vão de 0 a 1023.

Isso porque o Arduino construiu um conversor ADC que converte os valores de tensão 0V - 5V para 0 a 1023.

Você pode testemunhar pelo monitor serial que, quando a alavanca é deixada intacta, ela permanece na posição intermediária dos eixos X e Y e mostra a metade do valor de 1023.

Você também pode ver que não é exatamente a metade de 1023 que é porque a fabricação desses joysticks nunca foi perfeita.

Agora, você já deve ter algum conhecimento técnico sobre joysticks.

Agora vamos ver como controlar dois servo motores usando um joystick.

Diagrama de circuito:

Os dois servo motores são controlados por um joystick quando você move o joystick ao longo do eixo X, o servo conectado no pino 7 se move no sentido horário e anti-horário dependendo da posição da alavanca.

Você também pode segurar o servo atuador em uma posição, se você segurar o joystick nivelado em uma posição particular.

Semelhante ao servo motor conectado no pino # 6, você pode mover a alavanca ao longo do eixo Y.

Quando você pressiona a alavanca ao longo do eixo Z, os dois motores executam uma varredura de 180 graus.

Você pode conectar o arduino ao Bateria 9v ou para o computador. Se você conectar o Arduino ao computador, poderá abrir o monitor serial e ver o ângulo dos servo atuadores e os níveis de tensão.

Programa para controle do servo motor:

//---------------Program Developed by R.Girish--------------//
#include
Servo servo_X
Servo servo_Y
int X_angleValue = 0
int Y_angleValue = 0
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
int pos = 0
int check1 = 0
int check2 = 0
int threshold = 10
void setup()
{
Serial.begin(9600)
servo_X.attach(7)
servo_Y.attach(6)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(z == LOW)
{
Serial.print('Z axis status = ')
Serial.println('Button Pressed')
Serial.println('Sweeping servo actuators')
for (pos = 0 pos <= 180 pos += 1)
{
servo_X.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_X.write(pos)
delay(15)
}
for (pos = 0 pos <= 180 pos += 1)
{
servo_Y.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_Y.write(pos)
delay(15)
}
Serial.println('Done!!!')
}
if(x > check1 + threshold || x {
X_angleValue = map(x, 0, 1023, 0, 180)
servo_X.write(X_angleValue)
check1 = x
Serial.print('X axis voltage level = ')
Serial.println(x)
Serial.print('X axis servo motor angle = ')
Serial.print(X_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
if(y > check2 + threshold || y {
Y_angleValue = map(y, 0, 1023, 0, 180)
servo_Y.write(Y_angleValue)
check2 = y
Serial.print('Y axis voltage level = ')
Serial.println(y)
Serial.print('Y axis servo motor angle = ')
Serial.print(Y_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
}
//---------------Program Developed by R.Girish--------------//

Se você tiver alguma dúvida específica sobre este projeto, sinta-se à vontade para expressar na seção de comentários, você receberá uma resposta rápida.




Anterior: Circuito de medidor de capacitância digital usando Arduino Próximo: Usando o Potenciômetro Digital MCP41xx com Arduino