الدرس 18/31: استخدام محرك سيرفو مع أردوينو مجموعة صن فاوندير
محركات السيرفو هي العمود الفقري للعديد من مشاريع الروبوتات والتحكم عن بُعد، حيث توفر تحكمًا زاويًا دقيقًا لكل شيء بدءًا من آليات التوجيه إلى الأذرع الروبوتية. سيرشدك هذا الدليل، المستند إلى الدرس 18 من دورة مجموعة Arduino من SunFounder، عبر أساسيات استخدام محرك سيرفو مع Arduino. ستتعلم كيفية توصيل الأجهزة والتحكم في موضع المحرك باستخدام طريقتين مختلفتين: حركة كنس بسيطة وموضع يتم التحكم فيه بمقبض. المعرفة التي تكتسبها هنا عملية للغاية ويمكن تطبيقها على مجموعة واسعة من المشاريع، بما في ذلك:
- بناء ذراع روبوتية يمكنها الإمساك بالأشياء وتحريكها بدقة.
- إنشاء سيارة أو قارب يتم التحكم فيه عن بُعد مع سيرفو للتوجيه.
- تطوير متتبع شمسي يتبع الشمس لزيادة جمع الطاقة إلى أقصى حد.
- بناء حامل كاميرا بان-تيلت للمراقبة أو التصوير الفوتوغرافي.
- أتمتة أسطح التحكم في نموذج طائرة، مثل الدفة أو الجنيحات.


نظرة عامة على الأجهزة
قبل الغوص في الكود، من الضروري فهم محرك السيرفو نفسه. كما هو موضح في الفيديو، لا يدور محرك السيرفو باستمرار مثل محرك التيار المستمر القياسي. بدلاً من ذلك، يدور إلى موضع زاوي محدد، عادةً بين 0 و180 درجة. وهذا يجعله مثاليًا للتطبيقات التي تتطلب حركة دقيقة. يسلط الفيديو الضوء على عدة أمثلة، من توجيه سيارة RC إلى التحكم في المفاصل المعقدة لذراع روبوتية (في الفيديو عند 00:06).
تأتي محركات السيرفو بأحجام مختلفة، حيث يحدد الحجم المادي وتصنيف عزم الدوران سعرها وتطبيقها. محرك سيرفو صغير مثالي للنماذج خفيفة الوزن، بينما هناك حاجة إلى محرك أكبر وأكثر قوة للمهام الأثقل مثل توجيه "سيارة قوية جدًا أو سميكة" (في الفيديو عند 01:59).
تحتوي معظم محركات السيرفو للهواة على ثلاثة أسلاك موجودة في موصل قياسي. يشرح الفيديو خيار تصميم ذكي: السلك الأوسط هو دائمًا سلك الطاقة (VCC)، عادةً 5 فولت. هذه ميزة أمان تحمي الجهاز من قطبية غير صحيحة إذا تم توصيل الموصل بالعكس (في الفيديو عند 03:27). السلكان الآخران مخصصان للأرضي (GND) وإشارة التحكم.
دليل التوصيل
توصيل السيرفو بلوحة Arduino الخاصة بك أمر بسيط. يقدم الفيديو عرضًا واضحًا للتوصيلات (في الفيديو عند 04:48). يتم توصيل الدبابيس الثلاثة في موصل السيرفو بلوحة Arduino على النحو التالي:
- سلك الإشارة (غالبًا برتقالي أو أصفر): قم بتوصيله بدبوس PWM رقمي على لوحة Arduino. يستخدم المثال الدبوس 9.
- سلك الطاقة (غالبًا أحمر): قم بتوصيله بدبوس 5V على لوحة Arduino.
- سلك الأرضي (غالبًا بني أو أسود): قم بتوصيله بأحد دبابيس GND على لوحة Arduino.
في الفيديو، يستخدم المقدم أسلاك توصيل DuPont من ذكر إلى ذكر لتوصيل الموصل الأنثوي على السيرفو بدبابيس لوحة Arduino (في الفيديو عند 05:23).
البرنامج 1: التحكم في محرك السيرفو (الكنس)
هذا البرنامج الأول هو مثال "الكنس" الكلاسيكي. وهو مصمم لإظهار النطاق الكامل لحركة السيرفو عن طريق تحريكه ذهابًا وإيابًا بين 0 و180 درجة. هذه طريقة رائعة للتحقق من أن توصيلاتك صحيحة ورؤية السيرفو يعمل. يوضح الفيديو تحميل هذا الكود ومشاهدة السيرفو يكتسح ذهابًا وإيابًا (في الفيديو عند 09:21).
للتحكم في السيرفو، يتضمن الكود أولاً مكتبة Servo.h المدمجة، والتي تبسط عملية توليد إشارات التحكم اللازمة. ثم تقوم بإنشاء كائن سيرفو وإعطائه اسمًا، مثل myservo. في دالة setup()، تقوم بإرفاق هذا الكائن بدبوس محدد باستخدام myservo.attach(9)، لإخبار Arduino أن سلك إشارة السيرفو متصل بالدبوس 9.
يحدث السحر في دالة loop()، والتي تستخدم حلقتين for لتحريك السيرفو. تزيد الحلقة الأولى متغير الموضع pos من 0 إلى 180، مما يحرك السيرفو درجة واحدة في كل مرة. تفعل الحلقة الثانية العكس، حيث تنقص pos من 180 إلى 0. الجزء الحاسم هو delay(15) في نهاية كل تكرار للحلقة. هذا التوقف المؤقت يمنح السيرفو وقتًا كافيًا للتحرك فعليًا إلى الموضع الجديد قبل إرسال الأمر التالي. بدون هذا التأخير، لن يتمكن السيرفو من مواكبة ذلك وسيتوقف أو يهتز (في الفيديو عند 12:31).
هذا المثال مثالي للتعلم، ولكن في تطبيق حقيقي، من المحتمل أن ترغب في ضبط السيرفو على زاوية محددة. كما هو موضح في الفيديو، يمكنك تعديل الكود عن طريق استبدال حلقات for بأمر واحد مثل myservo.write(90) لتحريك السيرفو إلى 90 درجة وإبقائه هناك (في الفيديو عند 10:09).
البرنامج 2: التحكم في محرك السيرفو (المقبض)
يأخذ هذا البرنامج الثاني التحكم في السيرفو خطوة أخرى إلى الأمام من خلال إدخال مقياس جهد (مقبض) لتوفير تحكم يدوي في الوقت الفعلي في موضع السيرفو. هذه طريقة رائعة لفهم كيفية ترجمة الإدخال التناظري إلى حركة فيزيائية دقيقة.
يبني هذا البرنامج على البرنامج السابق بإضافة مقياس جهد (بوتنشيوميتر). مقياس الجهد هو مقاوم متغير يعمل كمقسم جهد تناظري. عندما تدير المقبض، فإنه يغير الجهد عند طرف الخرج الخاص به. يقرأ الأردوينو هذا الجهد باستخدام محول تناظري إلى رقمي (ADC) على أحد أطرافه التناظرية، محولاً إياه إلى قيمة بين 0 و1023.
المفتاح لهذا البرنامج هو دالة map(). تقوم هذه الدالة بقياس رقم من نطاق إلى آخر. في هذه الحالة، تُستخدم لترجمة القيمة الخام لمقياس الجهد (0 إلى 1023) إلى قيمة مناسبة للمحرك المؤازر (0 إلى 180 درجة). يقرأ الكود قيمة مقياس الجهد باستخدام analogRead(potpin)، ويقيسها باستخدام map(val, 0, 1023, 0, 180)، ثم يرسل تلك القيمة المقاسة إلى المحرك المؤازر باستخدام myservo.write(val). هذا ينشئ رابطاً مباشراً حيث أن تدوير المقبض إلى منتصفه سيضع المحرك المؤازر عند 90 درجة، وهكذا دواليك.
هذه الطريقة في التحكم بديهية للغاية وهي الأساس للعديد من واجهات الإنسان والآلة، من أجهزة التحكم عن بعد البسيطة إلى وحدات التحكم الروبوتية المعقدة.
عرض توضيحي مباشر للمشروع
يوفر الفيديو عرضاً توضيحياً مباشراً لكلا البرنامجين أثناء العمل. بالنسبة لبرنامج المسح، يمكنك رؤية ذراع المحرك المؤازر يتحرك بسلاسة من 0 إلى 180 درجة ثم يعود مرة أخرى. يعرض المقدم أيضاً كيف أن ضبط حجم الخطوة في حلقة for (على سبيل المثال، من درجة واحدة إلى 20 درجة) ووقت التأخير يغير سلوك المحرك المؤازر، مما يجعل الحركة أسرع ولكن أقل سلاسة (في الفيديو عند 11:19).
بالنسبة لبرنامج المقبض، يوضح العرض كيف أن تدوير مقياس الجهد يتحكم مباشرة في موضع المحرك المؤازر في الوقت الفعلي. هذه التغذية الراجعة البصرية ممتازة لفهم العلاقة بين الإدخال التناظري والإخراج الفيزيائي.
الفصول
- [00:00] مقدمة إلى المحركات المؤازرة
- [01:07] تطبيقات المحركات المؤازرة
- [02:57] تشريح المحرك المؤازر
- [04:48] توصيل المحرك المؤازر بالأردوينو
- [06:06] استكشاف مثال كود المسح
- [09:21] عرض برنامج المسح
- [10:04] ضبط زاوية مخصصة للمحرك المؤازر
- [11:19] تعديل سرعة المسح وحجم الخطوة
- [13:15] مثال على محرك مؤازر آخر
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create Servo object to control a servo
// twelve Servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the Servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
}
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Common Course Links
Common Course Files
الأشياء التي قد تحتاجها
-
أمازونSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
أمازون
-
أمازون
-
أمازون
-
أمازون
الموارد والمراجع
-
توثيقوثائق لمجموعة SunFounder 3 في 1 لإنترنت الأشياء/السيارات الذكية/التعلمdocs.sunfounder.com
-
خارجياشترِ مجموعة التعلم الذكية 3 في 1 من سن فاونديرsunfounder.com
ملفات📁
مكتبات أردوينو (ملف مضغوط)
-
شفرة المصدر لمجموعة تعلم السيارة الذكية 3 في 1 من صن فاوندر
3in1-kit-main-v2.zip12.80 MB