هذا الدليل جزء من: محركات سيرفو
جميع الفيديوهات المتعلقة بمحركات السيرفو مدرجة هنا. روابط الفيديوهات الأخرى موجودة أسفل هذه المقالة.
التحكم في محرك سيرفو بأزرار ضغط باستخدام أردوينو
في هذا الدرس سنتعلم كيفية التحكم في محرك سيرفو باستخدام زرين للضغط: أحدهما لتحريك المحرك إلى اليسار والآخر لتحريكه إلى اليمين. عند الضغط على الزر الأيمن سيتحرك المحرك بمقدار 10 درجات نحو اليمين، وعند الضغط على الزر الأيسر سيتحرك بنفس المقدار نحو اليسار. إذا أبقيت الزر مضغوطًا سيستمر المحرك في الحركة في ذلك الاتجاه حتى تترك الزر.

هذا المشروع طريقة رائعة لفهم كيفية ربط الأزرار بمحرك سيرفو باستخدام أردوينو. سنغطي مكونات الأجهزة اللازمة، وإرشادات التوصيل، والكود اللازم لجعل كل شيء يعمل. لفهم أوضح، يمكنك الرجوع إلى الفيديو المصاحب لهذا الدرس (في الفيديو عند 01:00).
شرح الأجهزة
لهذا المشروع ستحتاج إلى لوحة أردوينو، محرك السيرفو، وزرّان للضغط. محرك السيرفو مسؤول عن الحركة، بينما تعمل أزرار الضغط كمدخلات للتحكم في اتجاه تلك الحركة. تعالج لوحة أردوينو هذه المدخلات وتُرسل الإشارات المناسبة إلى محرك السيرفو.
يعمل محرك السيرفو بناءً على إشارات تعديل عرض النبضة (PWM). عن طريق إرسال نبضات بعروض مختلفة، يمكنك التحكم في زاوية محرك السيرفو. ستتم توصيل أزرار الضغط بدبابيس الإدخال الرقمية على لوحة Arduino، وسنستخدم مقاومات سحب داخلية (pull-up) لتبسيط التوصيل.
تفاصيل ورقة البيانات
| المصنّع | متنوع |
|---|---|
| رقم القطعة | SG90 |
| جهد المنطق/الإدخال والإخراج | 5 فولت |
| جهد التغذية | 4.8-6 فولت |
| تيار الإخراج (لكل قناة) | 1.5 A كحد أقصى |
| التيار الأقصى (لكل قناة) | 2.5 A كحد أقصى |
| إرشادات تردد تعديل عرض النبضة | 50 هرتز |
| عتبات منطق الإدخال | 0.3 فولتنسخةإلى 0.7 فولتنسخة |
| هبوط الجهد / Rمقاومة التصريف-المصدر في حالة التشغيل/ التشبع | 0.4 فولت |
| الحدود الحرارية | 85 درجة مئوية |
| حزمة | بلاستيك |
| ملاحظات / تنويعات | دوران قياسي بزاوية 180° |
- تأكد من أن محرك السيرفو مصنّف لجهد مصدر الطاقة لديك.
- استخدم مشتت حرارة مناسبًا عند التشغيل بتيارات عالية
- قم بتوصيل الأزرار إلى الأرض باستخدام تكوين سحب للأعلى.
- قم بتطبيق تقنية إلغاء الارتداد (debounce) على أزرارك إذا واجهت سلوكًا غير مستقر.
- راقب المخرجات التسلسلية لأغراض التصحيح.
إرشادات التوصيل الكهربائي

لتوصيل المكونات، ابدأ بتوصيل محرك السرفو. قم بتوصيل السلك الأحمر للمحرك بدبوس 5V في لوحة الأردوينو، والسلك الأسود بدبوس GND، وسلك إشارة أصفر أو أبيض بدبوس 9 في لوحة الأردوينو. سيتحكم هذا الدبوس في موضع السرفو.
بعد ذلك، قم بتوصيل أسلاك أزرار الضغط. وصل أحد طرفي الزر الأيمن إلى الدبوس 2 والطرف الآخر إلى الأرضي. بالنسبة للزر الأيسر، وصل أحد طرفيه إلى الدبوس 12 والطرف الآخر أيضًا إلى الأرضي. هذا الإعداد يسمح لمقاومات السحب للأعلى الداخلية بالحفاظ على الدبابيس في مستوى عالٍ عندما لا تُضغط الأزرار.
أمثلة على الكود ودليل خطوة بخطوة
لنبدأ بالكود الخاص بالتحكم في السيرفو باستخدام زر ضغط واحد. يقوم الكود بتهيئة كائن السيرفو وتعيين زاوية مبدئية. فيما يلي مقتطف قصير:
int angle = 90; // initial angle for servo
int angleStep = 10; // step size for movement
في هذا المقتطف،angleيمثل الموضع الحالي للسيرفو، بينماangleStepيحدد مقدار تحرك السيرفو مع كل ضغطة زر. هذا الكود أساسي لتتبع موضع السيرفو.
بعد ذلك، لدينا دالة الإعداد حيث نربط السيرفو ونهيئ دبابيس الإدخال:
void setup() {
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9
pinMode(2, INPUT_PULLUP); // configure button pin
}
في دالة الإعداد نقوم بتهيئة المراقب التسلسلي ونربط السرفو بالدبوس 9. يتم ضبط الزر على الدبوس 2 كدخل مع مقاومة سحب لأعلى، مما يبسط الأسلاك ويتجنب الحاجة إلى مقاومات خارجية.
أخيرًا، نلقي نظرة على دالة الحلقة التي تتعامل مع ضغط الزر:
while(digitalRead(2) == LOW) {
angle = angle + angleStep; // increment angle
myservo.write(angle); // move servo
}
تتحقق هذه الحلقة باستمرار مما إذا كان الزر مضغوطًا. عندما يُضغط، تزداد الزاوية بالخطوة المحددة ويتحرك السيرفو وفقًا لذلك. من الضروري التأكد من بقاء الزاوية ضمن النطاق (0 إلى 180 درجة) لتجنب تلف السيرفو.
عرض توضيحي / ما الذي تتوقعه
عند الضغط على الزر الأيمن، يجب أن يتحرك محرك السيرفو باتجاه اليمين بزيادات قدرها 10 درجات حتى يصل إلى الحد الأقصى وهو 180 درجة. وبالمثل، سيؤدي الضغط على الزر الأيسر إلى تحريكه باتجاه اليسار. إذا أبقيت الزر مضغوطًا، سيستمر محرك السيرفو في الحركة في ذلك الاتجاه حتى تقوم بتحرير الزر (في الفيديو عند 01:00).
تشمل الأخطاء الشائعة مشكلات في الأسلاك، مثل الوصلات غير الصحيحة أو المدخلات العائمة. تأكد دائمًا من أن وصلاتك محكمة وأنك تستخدم الدبابيس الصحيحة كما هو محدد في الكود.
هذا الدليل هو جزء من: محركات سيرفو
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- التحكم في محرك سيرفو باستخدام مقاوم متغير (بوتنشيوميتر) مع أردوينو
- التحكم في محرك سيرفو بواسطة بوتنشيوميتر وشاشة LCD1602 باستخدام أردوينو
- تحكم في محركات سيرفو باستخدام جهاز تحكم عن بُعد بالأشعة تحت الحمراء مع أردوينو
- تحكم في محرك سيرفو باستخدام مقاومة متغيرة
- التحكم في موضع السيرفو بإيماءات اليد لاردوينو
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- كود أردوينو وفيديو لمتحكم السيرفو PCA9685 ذو 16 قناة و12 بت V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo with a push button with Arduino
When a push button is pressed, the servo starts moving to the right or left until
it reaches 180 and then returns to 0 degrees.
May 22, 2018 at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =10;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(2,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
while(digitalRead(2) == LOW){
// change the angle for the next time through the loop:
angle = angle + angleStep;
// reverse the direction of the movement at the ends of the angle:
if (angle <= 0 || angle >= 180) {
angleStep = -angleStep;
}
myservo.write(angle); // move the servo to the desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degrees");
delay(100); // waits for the servo to get there
}// while
}
/*
Controlling a servo with two push buttons with Arduino
When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
At any instance, if the button is released, the servo stops.
May 22, 2018, at 01:00
Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
Watch a video for this code at https://youtu.be/7woqNH_qby4
This code is taken from http://robojax.com/learn/arduino
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 12 // pin 12 is connected to left button
#define RIGHT 2 // pin 2 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo Button ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
الأشياء التي قد تحتاجها
-
أمازونمحرك سيرفو على أمازونamzn.to
-
علي إكسبريساشترِ محرك سيرفو SG90 بزاوية 180 أو 360 من علي إكسبريسs.click.aliexpress.com
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.