Come controllare il servomotore usando il joystick

Prova Il Nostro Strumento Per Eliminare I Problemi





In questo post impareremo come controllare i servomotori usando un joystick e Arduino. Vedremo una panoramica sul joystick, i suoi pin, la sua costruzione e il suo funzionamento. Estrarremo dati utili dal joystick che sarà la base per il controllo dei servomotori.

introduzione

Il motto di questo articolo non è solo per controllare i servomotori ma, per imparare a usare un file joystick per il controllo molti altri dispositivi periferici.



Ora diamo un'occhiata al joystick.

Un joystick è un dispositivo di input costituito da una leva, che può muoversi in più direzioni sugli assi X e Y. Il movimento della leva viene utilizzato per il controllo di un motore o di eventuali dispositivi elettronici periferici.



I joystick vengono utilizzati dai giocattoli RC agli aeroplani Boing e svolgono funzioni simili. Inoltre, i giochi e i joystick più piccoli hanno un pulsante sull'asse Z che può essere programmato per eseguire molte azioni utili.

Illustrazione del joystick:

Illustrazione del joystick:

I joystick sono dispositivi elettronici in generale, quindi dobbiamo applicare l'alimentazione. Il movimento della leva produce una differenza di tensione sui pin di uscita. I livelli di tensione vengono elaborati da un microcontrollore per controllare il dispositivo di uscita come un motore.

Il joystick illustrato è simile, che può essere trovato nei controller PlayStation e Xbox. Non è necessario rompere questi controller per recuperarne uno. Questi moduli sono prontamente disponibili nei negozi di elettronica locali e nei siti di e-commerce.

Ora vediamo la costruzione di questo joystick.

Ha due 10 Kilo ohm potenziometro posizionato sugli assi X e Y con molle in modo che ritorni nella posizione originale quando l'utente rilascia la forza dalla leva. Ha un pulsante per premere ON sull'asse Z.

Ha 5 pin, 5 volt Vcc, GND, variabile X, variabile Y e SW (interruttore asse Z). Quando applichiamo la tensione e abbiamo lasciato il joystick nella posizione originale della leva. I pin X e Y produrranno metà della tensione applicata.

Quando spostiamo la leva la tensione varia nei pin di uscita X e Y. Ora interfacciamo praticamente il joystick ad Arduino.

Diagramma schematico:

Controllo servomotore Arduino tramite joystick

I dettagli di connessione dei pin sono forniti accanto al circuito. Collega la configurazione hardware completata e carica il codice.

Programma:

//---------------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--------------//

Aprendo il monitor seriale è possibile visualizzare il livello di tensione sui pin degli assi X e Y e lo stato dell'asse Z, ovvero il pulsante come illustrato di seguito.

Questi valori degli assi X, Y, Z vengono utilizzati per interpretare la posizione della leva. Come puoi vedere i valori vanno da 0 a 1023.

Questo perché Arduino ha un convertitore ADC integrato che converte i valori di tensione da 0V - 5V a 0-1023.

Puoi osservare dal monitor seriale che quando la leva non viene toccata, la leva rimane nella posizione centrale di entrambi gli assi X e Y e mostra metà valore di 1023.

Puoi anche vedere che non è esattamente la metà del 1023 perché la produzione di questi joystick non è mai stata perfetta.

A questo punto, avresti acquisito alcune conoscenze tecniche sui joystick.

Ora vediamo come controllare due servomotori utilizzando un joystick.

Schema elettrico:

I due servomotori sono controllati da un joystick quando si sposta il joystick lungo l'asse X il servo collegato al pin # 7 si muove in senso orario e antiorario a seconda della posizione della leva.

È anche possibile mantenere il servo attuatore in una posizione, se si mantiene il livello del joystick in una posizione particolare.

Simile per il servomotore collegato al pin # 6, è possibile spostare la leva lungo l'asse Y.

Quando si preme la leva lungo l'asse Z, i due motori eseguiranno una scansione di 180 gradi.

Puoi connettere arduino a Batteria 9v o al computer. Se colleghi l'Arduino al computer, puoi aprire il monitor seriale e vedere l'angolo dei servo attuatori e i livelli di tensione.

Programma per il controllo del servomotore:

//---------------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 hai qualche domanda specifica riguardo a questo progetto, sentiti libero di esprimere nella sezione commenti, potresti ricevere una rapida risposta.




Precedente: Circuito misuratore di capacità digitale con Arduino Avanti: Utilizzo del potenziometro digitale MCP41xx con Arduino