Cum se controlează servomotorul folosind joystick-ul

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom învăța cum să controlăm servo motoarele folosind un joystick și Arduino. Vom vedea o privire de ansamblu despre joystick, știfturile sale, construcția și funcționarea acestuia. Vom extrage date utile din joystick-ul care va fi baza pentru controlul servomotorelor.

Introducere

Motto-ul acestui articol nu este doar pentru controlați servomotorele dar, pentru a învăța cum să folosiți un joystick pentru control multe alte dispozitive periferice.



Acum să aruncăm o privire la joystick.

Un joystick este un dispozitiv de intrare care constă dintr-o pârghie, care se poate deplasa în mai multe direcții în axele X și Y. Mișcarea pârghiei este utilizată pentru controlul unui motor sau a oricărui dispozitiv periferic electronic.



Joystick-urile sunt folosite de la jucării RC până la avioane Boing și îndeplinesc funcții similare. În plus, jocurile și stick-urile mai mici au un buton în axa Z care poate fi programat pentru a face multe acțiuni utile.

Ilustrația joystick-ului:

Ilustrația joystick-ului:

Joystick-urile sunt dispozitive electronice, în general, deci trebuie să punem energie. Mișcarea pârghiei produce diferențe de tensiune la pinii de ieșire. Nivelurile de tensiune sunt procesate de un microcontroler pentru a controla dispozitivul de ieșire, cum ar fi un motor.

Joystick-ul ilustrat este similar, care poate fi găsit în controlerele PlayStation și Xbox. Nu este nevoie să spargeți aceste controlere pentru a le salva. Aceste module sunt disponibile în magazinele electronice locale și site-urile de comerț electronic.

Acum să vedem construcția acestui joystick.

Are două 10 Kilo ohm potențiometru poziționat în axele X și Y cu arcuri astfel încât să revină la poziția inițială atunci când utilizatorul eliberează forța din pârghie. Are o apăsare pe butonul ON pe axa Z.

Are 5 pini, 5 volți Vcc, GND, variabilă X, variabilă Y și SW (comutator axă Z). Când aplicăm tensiune și lăsăm joystick-ul pe poziția sa originală de pârghie. Pinii X și Y vor produce jumătate din tensiunea aplicată.

Când mișcăm pârghia, tensiunea variază în pinii de ieșire X și Y. Acum, să interacționăm practic joystick-ul cu Arduino.

Diagramă schematică:

Control servomotor Arduino folosind joystick

Detaliile conexiunii pin sunt date lângă circuit. Conectați configurarea hardware finalizată și încărcați codul.

Program:

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

Deschideți monitorul serial, puteți vedea nivelul de tensiune la pinii axelor X și Y și starea axei Z, adică butonul, așa cum este ilustrat mai jos.

Aceste valori ale axelor X, Y, Z sunt utilizate pentru a interpreta poziția pârghiei. După cum puteți vedea, valorile sunt de la 0 la 1023.

Acest lucru se datorează faptului că Arduino a încorporat un convertor ADC care convertește valorile de tensiune 0V - 5V la 0-1023.

Puteți asista de pe monitorul serial că, atunci când pârghia este lăsată neatinsă, pârghia rămâne în poziția mijlocie a axelor X și Y și prezintă jumătate de valoare de 1023.

Puteți vedea, de asemenea, că nu este exact jumătate din 1023, deoarece fabricarea acestor joystick-uri nu a fost niciodată perfectă.

Până acum, ați fi obținut niște cunoștințe tehnice despre joystick-uri.

Acum să vedem cum să controlăm două servo-motoare folosind un joystick.

Diagrama circuitului:

Cele două servomotoare sunt controlate de un singur joystick atunci când deplasați joystick-ul de-a lungul axei X, servo conectat la pinul 7 se deplasează în sensul acelor de ceasornic și anti-ceas în funcție de poziția pârghiei.

De asemenea, puteți ține servomotorul într-o poziție, dacă țineți nivelul joystick-ului într-o anumită poziție.

Similar pentru servomotorul conectat la pinul # 6, puteți deplasa maneta de-a lungul axei Y.

Când apăsați maneta de-a lungul axei Z, cele două motoare vor efectua o maturare de 180 de grade.

Puteți conecta arduino la Baterie de 9v sau la computer. Dacă conectați Arduino la computer, puteți deschide monitorul serial și puteți vedea unghiul servomotorului și nivelurile de tensiune.

Program pentru controlul servomotorului:

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

Dacă aveți vreo întrebare specifică cu privire la acest proiect, nu ezitați să exprimați în secțiunea de comentarii, este posibil să primiți un răspuns rapid.




Precedent: Circuit digital de măsurare a capacității folosind Arduino Următorul: Utilizarea potențiometrului digital MCP41xx cu Arduino