Com controlar el motor servo amb el joystick

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post aprendrem a controlar els servomotors mitjançant un joystick i Arduino. Veurem informació general sobre el joystick, els seus passadors, la seva construcció i funcionament. Extreurem dades útils del joystick, que serà la base per controlar els servomotors.

Introducció

El lema d’aquest article no és només fer-ho controleu els servomotors però, per aprendre a utilitzar un joystick per controlar molts altres dispositius perifèrics.



Ara fem una ullada al joystick.

Un joystick és un dispositiu d’entrada que consisteix en una palanca que es pot moure en diverses direccions en els eixos X i Y. El moviment de la palanca s’utilitza per controlar un motor o qualsevol dispositiu electrònic perifèric.



Els joysticks s’utilitzen des de joguines RC fins a avions Boing i fan funcions similars. A més, els jocs i els joysticks més petits tenen un polsador a l'eix Z que es pot programar per fer moltes accions útils.

sistema a xip

Il·lustració del joystick:

Il·lustració del joystick:

Els joysticks són dispositius electrònics en general, per tant, cal aplicar energia. El moviment de la palanca produeix diferències de tensió als pins de sortida. Els nivells de tensió són processats per un microcontrolador per controlar el dispositiu de sortida, com ara un motor.

El joystick il·lustrat és similar, que es pot trobar als controladors de PlayStation i Xbox. No cal trencar aquests controladors per salvar-ne un. Aquests mòduls estan disponibles a les botigues electròniques locals i als llocs de comerç electrònic.

Ara vegem la construcció d’aquest joystick.

Té dos ohms de 10 quilos potenciòmetre posicionat en eixos X i Y amb molles de manera que, torni a la seva posició original quan l'usuari allibera la força de la palanca. Té un botó d’accionament a l’eix Z.

Té 5 pins, 5 volts Vcc, GND, variable X, variable Y i SW (commutador d'eix Z). Quan apliquem tensió i deixem el joystick a la seva posició de palanca original. Els pins X i Y produiran la meitat de la tensió aplicada.

Quan movem la palanca, la tensió varia en els pins de sortida X i Y. Ara, pràcticament, relacionem el joystick amb Arduino.

Diagrama esquemàtic:

Control del servomotor Arduino mitjançant el joystick

Els detalls de la connexió del pin es donen al costat del circuit. Connecteu la configuració de maquinari completa i pengeu el codi.

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

Obriu el monitor de sèrie, podeu veure el nivell de voltatge als pins dels eixos X i Y i l’estat de l’eix Z, és a dir, el botó polsador tal com es mostra a continuació.

Aquests valors dels eixos X, Y, Z s’utilitzen per interpretar la posició de la palanca. Com podeu veure, els valors són de 0 a 1023.

Això es deu al fet que Arduino ha incorporat un convertidor ADC que converteix els voltatges de 0V - 5V a 0 a 1023.

Podeu comprovar des del monitor sèrie que quan la palanca es deixa intacta, la palanca es manté a la posició mitjana dels eixos X i Y i mostra la meitat del valor de 1023.

També podeu veure que no és la meitat exacta del 1023 perquè la fabricació d’aquests joysticks mai no ha estat perfecta.

A hores d'ara, ja tindríeu alguns coneixements tècnics sobre els joysticks.

Ara veurem com controlar dos servomotors mitjançant un joystick.

Esquema de connexions:

Els dos servomotors estan controlats per un joystick quan es mou el joystick al llarg de l’eix X, el servo connectat al pin # 7 es mou en sentit horari i anti-rellotge segons la posició de la palanca.

També podeu mantenir el servoactuador en una posició, si manteniu el nivell del joystick en una posició determinada.

De manera similar per al servomotor connectat al pin número 6, podeu moure la palanca al llarg de l’eix Y.

Quan premeu la palanca al llarg de l’eix Z, els dos motors realitzaran un escombrat de 180 graus.

Podeu connectar l'arduino a Bateria de 9v o a l'ordinador. Si connecteu l'Arduino a l'ordinador, podeu obrir el monitor sèrie i veure l'angle dels servomotors i els nivells de tensió.

Programa per al control de servomotors:

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

Si teniu alguna pregunta específica sobre aquest projecte, no dubteu a expressar-ho a la secció de comentaris, és possible que rebreu una resposta ràpida.




Anterior: Circuit de mesurador de capacitat digital mitjançant Arduino Següent: Ús del potenciòmetre digital MCP41xx amb Arduino