כיצד לשלוט במנוע סרוו באמצעות ג'ויסטיק

נסה את הכלי שלנו לביטול בעיות





בפוסט זה נלמד כיצד לשלוט במנועי סרוו באמצעות ג'ויסטיק וארדואינו. נראה סקירה על ג'ויסטיק, הסיכות שלו, בנייתו ועבודתו. אנו נפיק נתונים מועילים ממקל השמחה שיהווה בסיס לשליטה במנועי הסרוו.

מבוא

המוטו של מאמר זה אינו רק ל לשלוט במנועי סרוו אלא, ללמוד כיצד להשתמש ב- ג'ויסטיק לשליטה מכשירים היקפיים רבים אחרים.



עכשיו בואו נסתכל על הג'ויסטיק.

ג'ויסטיק הוא מכשיר קלט שמורכב ממנוף, שיכול לנוע בכמה כיוונים בצירי X ו- Y. תנועת המנוף משמשת לשליטה על מנוע או כל מכשיר אלקטרוני היקפי.



ג'ויסטיקים משמשים מצעצועי RC ועד מטוסי Boing ומבצעים פונקציות דומות. בנוסף למשחקים ולמקלות שמחה קטנות יותר יש כפתור לחיצה בציר Z שניתן לתכנת לבצע פעולות שימושיות רבות.

איור של ג'ויסטיק:

איור של ג

ג'ויסטיקים הם מכשירים אלקטרוניים באופן כללי ולכן עלינו להפעיל כוח. תנועת המנוף מייצרת הפרש מתח בסיכות פלט. רמות המתח מעובדות על ידי מיקרו-בקרה לשליטה בהתקן הפלט כגון מנוע.

הג'ויסטיק המאויר דומה לזה, אשר ניתן למצוא בבקרי פלייסטיישן ו- Xbox. אתה לא צריך לשבור את הבקרים האלה כדי להציל אחד. מודולים אלה זמינים בחנויות אלקטרוניות מקומיות ובאתרי מסחר אלקטרוני.

עכשיו בואו נראה את הבנייה של הג'ויסטיק הזה.

יש לו שני אוהם של 10 קילו פוטנציומטר ממוקם בצירי X ו- Y עם קפיצים כך, שהוא חוזר למיקומו המקורי כאשר המשתמש משחרר כוח מהידית. יש לו לחיצת כפתור ON על ציר Z.

יש לו 5 פינים, Vcc 5 וולט, GND, משתנה X, משתנה Y ו- SW (מתג ציר Z). כאשר אנו מפעילים מתח והשארנו את הג'ויסטיק במיקום המנוף המקורי שלו. סיכות ה- X וה- Y יפיקו מחצית מהמתח המופעל.

כאשר אנו מזיזים את המנוף המתח משתנה בסיכות פלט X ו- Y. עכשיו בואו ממשק ממשק את הג'ויסטיק לארדואינו.

תרשים סכמטי:

שליטת מנוע סרוו של Arduino באמצעות ג

פרטי חיבור הסיכה ניתנים לצד המעגל. חבר את הגדרת החומרה שהושלמה והעלה את הקוד.

תכנית:

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

הסיבה לכך היא שארדואינו הקים ממיר ADC שממיר את המתח 0V - 5V לערכים 0 עד 1023.

אתה יכול להיות עד מהצג הסדרתי שכאשר המנוף לא נגע, המנוף נשאר במיקום האמצעי של צירי ה- X וה- Y ומציג חצי ערך של 1023.

אתה יכול גם לראות שזה לא המחצית המדויקת של 1023 זה בגלל שייצור הג'ויסטיקים האלה מעולם לא היה מושלם.

עד עכשיו היית מקבל קצת ידע טכני על ג'ויסטיקים.

עכשיו בואו נראה איך לשלוט בשני מנועי סרוו באמצעות ג'ויסטיק אחד.

תרשים מעגל:

שני מנועי הסרוו נשלטים על ידי ג'ויסטיק אחד כשמניעים את הג'ויסטיק לאורך ציר ה- X הסרוו המחובר בסיכה מס '7 נע בכיוון השעון ולא נגד השעון, תלוי במיקום הידית.

אתה יכול גם להחזיק את מפעיל הסרוו במצב, אם אתה מחזיק את מפלס הג'ויסטיק במצב מסוים.

בדומה למנוע סרוו המחובר בסיכה מס '6, אתה יכול להזיז את המנוף לאורך ציר Y.

כשתלחץ על הידית לאורך ציר Z, שני המנועים יבצעו טוויחה של 180 מעלות.

אתה יכול לחבר את הארדואינו אל סוללה 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--------------//

אם יש לך שאלה ספציפית כלשהי בנוגע לפרויקט זה, אל תהסס להביע בסעיף ההערות, ייתכן שתקבל תשובה מהירה.




קודם: מעגל מדי קיבול דיגיטלי באמצעות ארדואינו הבא: שימוש בפוטנציומטר דיגיטלי MCP41xx עם Arduino