هذا الدليل جزء من: محركات سيرفو
جميع الفيديوهات المتعلقة بمحركات السيرفو مدرجة هنا. روابط الفيديوهات الأخرى موجودة أسفل هذه المقالة.
التحكم في محرك سيرفو بواسطة بوتنشيوميتر وشاشة LCD1602 باستخدام أردوينو
في هذا الدرس سنتعلم كيفية التحكم في محرك سيرفو باستخدام مقاوم متغير (بوتنشيومتر) وعرض قيمة البوتنشيومتر بالإضافة إلى زاوية السيرفو على شاشة LCD1602. هذا المشروع طريقة رائعة لدمج عدة مكونات وفهم كيفية عملها معًا لإنشاء نظام تفاعلي. بنهاية هذا الدرس سيكون لديك إعداد عملي يتيح لك ضبط زاوية السيرفو باستخدام مقبض مع عرض القيم على شاشة الـ LCD في الوقت نفسه.

قبل أن نغوص في التوصيلات والبرمجة، من المفيد أن نفهم المكونات التي سنستخدمها. يعمل المقاوم المتغير (البوتنشيومتر) كمقاوم متغير يمكنه تعديل جهد الخرج اعتمادًا على موضعه، وسنستخدمه لتحديد زاوية السيرفو. ستعرض شاشة LCD1602 قيمة البوتنشيومتر الحالية والزاوية المقابلة للسيرفو. يمكنك الرجوع إلى الفيديو (في الفيديو عند 00:00) للحصول على دليل مرئي للعملية بأكملها.
شرح الأجهزة
المكونات الرئيسية التي سنستخدمها في هذا المشروع هي:
- لوحة أردوينو:سيعمل هذا كوحدة التحكم في النظام بأكمله، حيث يعالج الإشارات الواردة من المقاومة المتغيرة (البوتنشيومتر) ويتحكم في موضع السرفو بناءً على تلك الإشارات.
- مقاوم متغير:سيُستخدم مقاوم متغير بقيمة 10 كيلو أوم لتوفير دخل تماثلي إلى الأردوينو. له ثلاثة أطراف: أحدها موصول بجهد 5V، وآخر بالأرضي، والطرف الأوسط موصول بالدبوس التماثلي (A0) على الأردوينو.
- محرك سيرفو:سيتم التحكم في هذا السيرفو عن طريق إرسال زاوية إليه بناءً على موضع المقاومة المتغيرة. سلك الإشارة يتصل بدبوس رقمي في لوحة الأردوينو (الدبوس 9).
- شاشة LCD1602:ستعرض هذه الشاشة قيمة البوتنشيوميتر (المقاوم المتغير) وزاوية المحرك المؤازر. تتصل بعدة دبابيس رقمية على لوحة أردوينو للتحكم.
يعمل المقاوم المتغير عن طريق تغيير المقاومة وبالتالي الجهد عند طرفه الأوسط، والذي تقرأه لوحة أردوينو كمدخل تناظري. يُتحكم في محرك السيرفو عن طريق إرسال إشارة تعديل عرض النبضة (PWM) محددة تتوافق مع الزاوية المطلوبة. تستخدم شاشة LCD1602 مكتبة تتيح لنا التحكم بسهولة في عرضها وإخراج معلومات تتعلق بالمقاوم المتغير ومحرك السيرفو.
تفاصيل ورقة البيانات
| المُصنِّع | متنوع |
|---|---|
| رقم القطعة | LM016L |
| جهد المنطق/الإدخال/الإخراج | 5 فولت |
| جهد التغذية | 4.5 - 5.5 V |
| تيار الإخراج (لكل قناة) | حتى 2 mA |
| التيار الأقصى (لكل قناة) | 20 ميلي أمبير |
| إرشادات تردد PWM | 50 هرتز |
| عتبات منطق الإدخال | 0.3 × Vنسخة كربونية(منخفض)، 0.7 × Vنسخة(عالي) |
| هبوط الجهد / Rالمصرف-المصدر (عند التشغيل)/ التشبع | 0.2 V كحد أقصى |
| الحدود الحرارية | 85 °م |
| حزمة | حزمة DIP ذات 16 دبوس |
| ملاحظات / متغيرات | شاشة عرض 16×2 محارف |
- وصل الدبوس الأوسط للمقاوم المتغير إلى الدبوس التناظري A0.
- تأكد من تزويد السيرفو بمصدر طاقة 5V وأنه متصل بالدبوس الرقمي 9.
- استخدم المكتبة المناسبة لشاشة LCD وتأكد من تضمينها في Arduino IDE الخاص بك.
- كن حذراً مع الأسلاك لتجنب القصر الكهربائي، خاصة في توصيلات السيرفو.
- تحقق من تهيئة شاشة LCD بشكل صحيح في الكود لتجنب مشاكل العرض.

تعليمات التوصيل الكهربائي
لتوصيل المكونات معًا، ابدأ بتوصيل المقاومة المتغيرة. وصل أحد الأطراف الخارجية للمقاومة المتغيرة إلى دبوس 5V في الأردوينو، والطرف الخارجي الآخر إلى الأرضي. الطرف الأوسط يذهب إلى الدبوس التناظريA0.
بعد ذلك، بالنسبة لمحرك السرفو، قم بتوصيل السلك البني أو الأسود بالأرضي، والسلك الأحمر إلى دبوس 5V، والسلك الأصفر أو البرتقالي إلى الدبوس الرقمي9على الأردوينو. بالنسبة لشاشة LCD1602، قم بتوصيل الـVDDوصل الدبوس إلى 5 فولت،RWإلى الأرض، وV0إلى الدبوس الأوسط للمقاومة المتغيرة لضبط التباين. قم بالتوصيلRSتثبيت12،ENتثبيت11,D4تثبيت5،D5تثبيت4،D6أن يثبّت3، وD7تثبيت2.
كما يُنصح أيضًا بإضافة مقاوم بقيمة 220 أوم على التوالي مع الـLED إذا كنت تستخدم واحدًا، وتوصيله بمصدر 5 فولت. بالإضافة إلى ذلك، يمكن توصيل مكثف بقيمة 470 µF عبر طرفي الطاقة والأرضي للسيرفو لتصفية أي ضوضاء أثناء التشغيل.
أمثلة على الكود وشرح خطوة بخطوة
يبدأ الكود بإدراج المكتبات اللازمة وتهيئة دبابيس شاشة LCD ومحرك السيرفو. المقتطف التالي يوضح إعداد شاشة LCD والسيرفو:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}هذا المقتطف يقوم بتهيئة شاشة LCD لتحتوي على 16 عمودًا و2 صفين، ويربط السيرفو بالدبوس 9، ويعرض رسالة ترحيب على شاشة LCD. الـlcd.clear()تضمن الدالة إزالة أي رسائل سابقة.
بعد ذلك، تستمر الحلقة في قراءة قيمة المقوّم المتغيّر وتحديث موضع السرفو وشاشة LCD:
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}تقرأ هذه الحلقة قيمة المقاوم المتغير (البوتنشيومتر)، وتحولها إلى زاوية مقابلة للسيرفو، وتحدّث شاشة LCD بقيمة المقاوم المتغير وزاوية السيرفو معًا. الـdelay(500)في نهاية الحلقة، يمنع ذلك العرض من التحديث بسرعة كبيرة.
عرض توضيحي / ما الذي تتوقعه
عند تشغيل النظام، ستعرض شاشة LCD Robojax Servo Knob لمدة 2 ثانية، تليها قيمة المقاوم المتغير وزاوية السرفو. عند تدوير المقاوم المتغير، ستتغير زاوية السرفو وفقًا لذلك، وستنعكس قيمة المقاوم المتغير الجديدة على شاشة LCD. إذا لاحظت أي سلوك غير متوقع، مثل تحرك السرفو في الاتجاه الخاطئ، فتحقق من توصيلات الأسلاك للمقاوم المتغير والسرفو (في الفيديو عند 10: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)
- التحكم في محرك سيرفو باستخدام مقاوم متغير (بوتنشيوميتر) مع أردوينو
- تحكم في محركات سيرفو باستخدام جهاز تحكم عن بُعد بالأشعة تحت الحمراء مع أردوينو
- تحكم في محرك سيرفو باستخدام مقاومة متغيرة
- التحكم في موضع السيرفو بإيماءات اليد لاردوينو
- 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 position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// start of servo settings *******
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int angle; // the angle servo is sent to
// END of servo settings *******
void setup() {
// Robojax Servo knob with LCD1602 Test
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Robojax Servo knob with LCD1602 Test
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
void loop() {
// Robojax Servo knob with LCD1602 Test
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
// set the cursor to column 0, line 1
lcd.setCursor(11, 0);
lcd.print(val);
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
// Robojax Servo knob with LCD1602 Test
}
الموارد والمراجع
-
خارجياستخدام شاشة LCD1602 لاردوينوyoutube.com
-
خارجيمكتبة LCD1602 (من GitHub)github.com
ملفات📁
لا توجد ملفات متاحة.