Πώς να ελέγξετε το σερβοκινητήρα χρησιμοποιώντας το Joystick

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση θα μάθουμε πώς να ελέγχουμε τους σερβοκινητήρες χρησιμοποιώντας ένα χειριστήριο και το Arduino. Θα δούμε μια επισκόπηση για το χειριστήριο, τις καρφίτσες, την κατασκευή και τη λειτουργία του. Θα εξάγουμε χρήσιμα δεδομένα από το joystick που θα είναι η βάση για τον έλεγχο των σερβοκινητήρων.

Εισαγωγή

Το σύνθημα αυτού του άρθρου δεν είναι μόνο ελέγξτε τους σερβοκινητήρες αλλά, για να μάθετε πώς να χρησιμοποιείτε χειριστήριο για έλεγχο πολλές άλλες περιφερειακές συσκευές.



Ας ρίξουμε μια ματιά στο χειριστήριο.

Το χειριστήριο είναι μια συσκευή εισόδου που αποτελείται από έναν μοχλό, ο οποίος μπορεί να κινείται προς διάφορες κατευθύνσεις στους άξονες X και Y. Η κίνηση του μοχλού χρησιμοποιείται για τον έλεγχο κινητήρα ή οποιωνδήποτε περιφερειακών ηλεκτρονικών συσκευών.



Τα χειριστήρια χρησιμοποιούνται από παιχνίδια RC έως αεροπλάνα Boing και εκτελούν παρόμοιες λειτουργίες. Επιπλέον, το gaming και τα μικρότερα μοχλό χαράς έχουν ένα κουμπί στον άξονα Ζ που μπορεί να προγραμματιστεί για να κάνει πολλές χρήσιμες ενέργειες.

Εικόνα του Joystick:

Εικόνα του Joystick:

Τα χειριστήρια είναι ηλεκτρονικές συσκευές γενικά, επομένως, πρέπει να εφαρμόσουμε ισχύ. Η κίνηση του μοχλού παράγει διαφορά τάσης στους πείρους εξόδου. Τα επίπεδα τάσης υποβάλλονται σε επεξεργασία από έναν μικροελεγκτή για τον έλεγχο της συσκευής εξόδου όπως ένας κινητήρας.

Το εικονογραφημένο χειριστήριο είναι παρόμοιο, το οποίο μπορείτε να βρείτε στα χειριστήρια PlayStation και Xbox. Δεν χρειάζεται να σπάσετε αυτούς τους ελεγκτές για να σώσετε έναν. Αυτές οι ενότητες είναι άμεσα διαθέσιμες σε τοπικά ηλεκτρονικά καταστήματα και ιστότοπους ηλεκτρονικού εμπορίου.

Ας δούμε την κατασκευή αυτού του χειριστηρίου.

Έχει δύο 10 κιλά ωμ ποτενσιόμετρο τοποθετημένο σε άξονες Χ και Υ με ελατήρια έτσι, επιστρέφει στην αρχική του θέση όταν ο χρήστης απελευθερώνει δύναμη από το μοχλό. Έχει ένα κουμπί ώθησης στο ΟΝ στον άξονα Ζ.

Έχει 5 ακίδες, 5 volt Vcc, GND, μεταβλητή X, μεταβλητή Y και SW (διακόπτης άξονα Z). Όταν εφαρμόζουμε τάση και αφήνουμε το χειριστήριο στην αρχική του θέση μοχλού. Οι ακίδες X και Y θα παράγουν το ήμισυ της εφαρμοζόμενης τάσης.

Όταν κινούμε το μοχλό, η τάση κυμαίνεται σε ακίδες εξόδου Χ και Υ. Τώρα ας συνδέσουμε ουσιαστικά το χειριστήριο με το Arduino.

Σχηματικό διάγραμμα:

Arduino Servo Motor Control χρησιμοποιώντας Joystick

Οι λεπτομέρειες σύνδεσης ακίδων δίνονται δίπλα στο κύκλωμα. Συνδέστε την ολοκληρωμένη εγκατάσταση υλικού και ανεβάστε τον κωδικό.

Πρόγραμμα:

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

Ανοίξτε τη σειριακή οθόνη, μπορείτε να δείτε το επίπεδο τάσης στους ακροδέκτες X και Y και την κατάσταση του άξονα Z, δηλαδή το κουμπί ώθησης όπως φαίνεται παρακάτω.

Αυτές οι τιμές αξόνων X, Y, Z χρησιμοποιούνται για την ερμηνεία της θέσης του μοχλού. Όπως μπορείτε να δείτε, οι τιμές είναι από 0 έως 1023.

Αυτό συμβαίνει επειδή το Arduino έχει ενσωματωμένο μετατροπέα ADC που μετατρέπει τις τάσεις 0V - 5V σε 0 έως 1023 τιμές.

Μπορείτε να δείτε από τη σειριακή οθόνη ότι όταν ο μοχλός αφήνεται άθικτος, ο μοχλός παραμένει στη μέση θέση και των δύο αξόνων Χ και Υ και δείχνει τη μισή τιμή των 1023.

Μπορείτε επίσης να δείτε ότι δεν είναι ακριβώς το ήμισυ του 1023, επειδή η κατασκευή αυτών των χειριστηρίων δεν ήταν ποτέ τέλεια.

Μέχρι τώρα, θα έχετε αποκτήσει τεχνικές γνώσεις σχετικά με τα χειριστήρια.

Τώρα ας δούμε πώς να ελέγχουμε δύο σερβοκινητήρες χρησιμοποιώντας ένα χειριστήριο.

Διάγραμμα κυκλώματος:

Οι δύο σερβοκινητήρες ελέγχονται από ένα χειριστήριο όταν μετακινείτε το χειριστήριο κατά μήκος του άξονα X, το σερβο που είναι συνδεδεμένο στον πείρο # 7 κινείται δεξιόστροφα και αντίστροφα ανάλογα με τη θέση του μοχλού.

Μπορείτε επίσης να κρατήσετε τον σερβο ενεργοποιητή σε μια θέση, εάν κρατάτε το επίπεδο του μοχλού σε μια συγκεκριμένη θέση.

Παρόμοια για το σερβοκινητήρα που είναι συνδεδεμένο στον πείρο # 6, μπορείτε να μετακινήσετε το μοχλό κατά μήκος του άξονα Υ.

Όταν πατάτε το μοχλό κατά μήκος του άξονα Z, οι δύο κινητήρες θα εκτελέσουν σάρωση 180 μοιρών.

Μπορείτε είτε να συνδέσετε το arduino στο Μπαταρία 9v ή στον υπολογιστή. Εάν συνδέσετε το Arduino στον υπολογιστή, μπορείτε να ανοίξετε τη σειριακή οθόνη και να δείτε τη γωνία των σερβο ενεργοποιητών και των επιπέδων τάσης.

Πρόγραμμα για έλεγχο σερβο κινητήρα:

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

Εάν έχετε κάποια συγκεκριμένη ερώτηση σχετικά με αυτό το έργο, μη διστάσετε να εκφράσετε στην ενότητα σχολίων, ενδέχεται να λάβετε μια γρήγορη απάντηση.




Προηγούμενο: Κύκλωμα μετρητή ψηφιακής χωρητικότητας με χρήση του Arduino Επόμενο: Χρήση ψηφιακού ποτενσιόμετρου MCP41xx With Arduino