كيفية التحكم في محرك سيرفو باستخدام عصا التحكم

جرب أداة القضاء على المشاكل





في هذا المنشور سوف نتعلم كيفية التحكم في المحركات المؤازرة باستخدام عصا التحكم و Arduino. سنرى نظرة عامة حول عصا التحكم ودبابيسها وبنائها وعملها. سنقوم باستخراج البيانات المفيدة من عصا التحكم التي ستكون قاعدة للتحكم في محركات المؤازرة.

مقدمة

شعار هذه المقالة ليس فقط السيطرة على المحركات المؤازرة ولكن لمعرفة كيفية استخدام ملف عصا التحكم للتحكم العديد من الأجهزة الطرفية الأخرى.



الآن دعونا نلقي نظرة على عصا التحكم.

عصا التحكم عبارة عن جهاز إدخال يتكون من رافعة يمكنها التحرك في عدة اتجاهات في محورين X و Y. تستخدم حركة الرافعة للتحكم في المحرك أو أي أجهزة إلكترونية طرفية.



تُستخدم عصي التحكم من ألعاب RC إلى طائرات Boing وتؤدي وظائف مماثلة. بالإضافة إلى ذلك ، تحتوي الألعاب وعصي الفرح الأصغر على زر ضغط في المحور Z يمكن برمجته للقيام بالعديد من الإجراءات المفيدة.

رسم توضيحي لعصا التحكم:

رسم توضيحي لعصا التحكم:

تعتبر أجهزة جويستيك أجهزة إلكترونية بشكل عام ، لذا فنحن بحاجة إلى استخدام الطاقة. تنتج حركة الرافعة فرق الجهد عند دبابيس الخرج. تتم معالجة مستويات الجهد بواسطة متحكم دقيق للتحكم في جهاز الإخراج مثل المحرك.

عصا التحكم المصوّرة مماثلة ، والتي يمكن العثور عليها في وحدات تحكم PlayStation و Xbox. لا داعي لكسر وحدات التحكم هذه لإنقاذ واحد. هذه الوحدات متاحة بسهولة في المتاجر الإلكترونية المحلية ومواقع التجارة الإلكترونية.

الآن دعونا نرى بناء ذراع التحكم هذا.

لها اثنان 10 كيلو اوم مقياس فرق الجهد موضوعة في محاور X و Y مع زنبركات بحيث تعود إلى موضعها الأصلي عندما يطلق المستخدم القوة من الرافعة. لديها زر الضغط على المحور Z.

لديها 5 دبابيس ، 5 فولت Vcc ، 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.

وذلك لأن Arduino بنى في محول ADC الذي يحول قيم الجهد من 0 إلى 5 فولت إلى 0 إلى 1023.

يمكنك أن تشهد من الشاشة التسلسلية أنه عندما تُترك الرافعة دون أن تمس ، فإن الرافعة تظل في الوضع المتوسط ​​لكل من المحورين X و Y وتظهر نصف قيمة 1023.

يمكنك أيضًا أن ترى أنه ليس نصف الرقم 1023 بالضبط لأن تصنيع أذرع التحكم هذه لم يكن أبدًا مثاليًا.

الآن ، سيكون لديك بعض المعرفة التقنية حول أجهزة التحكم.

الآن دعونا نرى كيفية التحكم في محركين مؤازرين باستخدام عصا تحكم واحدة.

مخطط الرسم البياني:

يتم التحكم في محركي المؤازرة بواسطة عصا تحكم واحدة عند تحريك عصا التحكم على طول المحور X ، يتحرك المؤازر المتصل في الدبوس رقم 7 في اتجاه عقارب الساعة وعكس عقارب الساعة اعتمادًا على موضع الرافعة.

يمكنك أيضًا تثبيت مشغل المؤازرة في موضع معين ، إذا كنت تمسك بمستوى عصا التحكم في موضع معين.

على غرار محرك سيرفو المتصل عند رقم 6 ، يمكنك تحريك الرافعة على طول المحور Y.

عندما تضغط على الرافعة على طول المحور Z ، سيقوم المحركان بإجراء مسح 180 درجة.

يمكنك إما توصيل اردوينو بـ بطارية 9 فولت أو إلى الكمبيوتر. إذا قمت بتوصيل 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 مع Arduino