Comment contrôler le servomoteur à l'aide du joystick

Essayez Notre Instrument Pour Éliminer Les Problèmes





Dans cet article, nous allons apprendre à contrôler les servomoteurs à l'aide d'un joystick et d'Arduino. Nous verrons un aperçu du joystick, de ses broches, de sa construction et de son fonctionnement. Nous extrairons des données utiles du joystick qui servira de base pour contrôler les servomoteurs.

introduction

La devise de cet article n'est pas seulement de contrôler les servomoteurs mais, pour apprendre à utiliser un joystick pour contrôler de nombreux autres périphériques.



Jetons maintenant un œil au joystick.

Un joystick est un périphérique d'entrée qui se compose d'un levier, qui peut se déplacer dans plusieurs directions dans les axes X et Y. Le mouvement du levier est utilisé pour commander un moteur ou tout appareil électronique périphérique.



Les joysticks sont utilisés des jouets RC aux avions Boing et remplissent des fonctions similaires. De plus, le jeu et les joysticks plus petits ont un bouton poussoir dans l'axe Z qui peut être programmé pour effectuer de nombreuses actions utiles.

Illustration du joystick:

Illustration du joystick:

Les joysticks sont des appareils électroniques en général, nous devons donc mettre sous tension. Le mouvement du levier produit une différence de tension au niveau des broches de sortie. Les niveaux de tension sont traités par un microcontrôleur pour contrôler le dispositif de sortie tel qu'un moteur.

Le joystick illustré est similaire à celui qui se trouve dans les contrôleurs PlayStation et Xbox. Vous n'avez pas besoin de casser ces contrôleurs pour en récupérer un. Ces modules sont facilement disponibles dans les magasins électroniques locaux et les sites de commerce électronique.

Voyons maintenant la construction de ce joystick.

Il a deux 10 kilo ohms potentiomètre positionné dans les axes X et Y avec des ressorts de sorte qu'il revienne à sa position d'origine lorsque l'utilisateur relâche la force du levier. Il a une pression sur le bouton ON sur l'axe Z.

Il a 5 broches, 5 volts Vcc, GND, variable X, variable Y et SW (commutateur d'axe Z). Lorsque nous appliquons une tension et que nous avons laissé le joystick sur sa position de levier d'origine. Les broches X et Y produiront la moitié de la tension appliquée.

Lorsque nous déplaçons le levier, la tension varie dans les broches de sortie X et Y. Maintenant, connectons pratiquement le joystick à Arduino.

Diagramme schématique:

Contrôle du moteur servo Arduino à l

Les détails de connexion des broches sont indiqués à côté du circuit. Connectez la configuration matérielle terminée et téléchargez le code.

Programme:

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

Ouvrez le moniteur série, vous pouvez voir le niveau de tension sur les broches des axes X et Y et l'état de l'axe Z, c'est-à-dire le bouton-poussoir comme illustré ci-dessous.

Ces valeurs des axes X, Y, Z sont utilisées pour interpréter la position du levier. Comme vous pouvez le voir, les valeurs vont de 0 à 1023.

C'est parce qu'Arduino a intégré un convertisseur ADC qui convertit la tension 0V - 5V en 0 à 1023 valeurs.

Vous pouvez voir sur le moniteur série que lorsque le levier n'est pas touché, le levier reste à la position médiane des axes X et Y et affiche la moitié de la valeur de 1023.

Vous pouvez également voir que ce n’est pas exactement la moitié des 1023, car la fabrication de ces joysticks n’a jamais été parfaite.

À présent, vous auriez acquis des connaissances techniques sur les manettes de jeu.

Voyons maintenant comment contrôler deux servomoteurs à l’aide d’un seul joystick.

Schéma:

Les deux servomoteurs sont contrôlés par un joystick lorsque vous déplacez le joystick le long de l'axe X, le servo connecté à la broche n ° 7 se déplace dans le sens horaire et anti-horaire en fonction de la position du levier.

Vous pouvez également maintenir l'actionneur d'asservissement dans une position, si vous maintenez le niveau du joystick à une position particulière.

Similaire pour le servomoteur connecté à la broche n ° 6, vous pouvez déplacer le levier le long de l'axe Y.

Lorsque vous appuyez sur le levier le long de l'axe Z, les deux moteurs effectuent un balayage de 180 degrés.

Vous pouvez soit connecter l'arduino à Batterie 9v ou à l'ordinateur. Si vous connectez l'Arduino à l'ordinateur, vous pouvez ouvrir le moniteur série et voir l'angle des servomoteurs et les niveaux de tension.

Programme de contrôle des servomoteurs:

//---------------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 vous avez des questions spécifiques concernant ce projet, n'hésitez pas à les exprimer dans la section commentaires, vous recevrez peut-être une réponse rapide.




Une paire de: Circuit de mesure de capacité numérique utilisant Arduino Un article: Utilisation du potentiomètre numérique MCP41xx avec Arduino