كيفية التحكم في محرك سيرفو باستخدام Raspberry Pi
تعليقاتⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
هذا البرنامج التعليمي هو الجزء الثالث من الملف المخصص لاكتشاف الإلكترونيات باستخدام Raspberry Pi. إذا لم تكن قد قرأته ، أنصحك باستشارة البرنامج التعليمي الأول للتحكم في مؤشر LED باستخدام Raspberry Pi بالإضافة إلى البرنامج التعليمي الثاني لاستخدام قارئ RFID مع Raspberry Pi.
عند بدء التشغيل الآلي للمنزل ، فإن الحاجة الكلاسيكية هي التحكم في الحركة الجسدية في الواقع من خلال البرنامج.
في هذا البرنامج التعليمي سوف نرى كيفية استخدام Raspberry Pi للتحكم في محرك سيرفو.
ملحقات للتحكم في محرك مؤازر
لكي نتمكن من متابعة هذا البرنامج التعليمي والتحكم في محرك مؤازر ، سنحتاج إلى المواد التالية:
ما هو الفرق بين المحرك والمحرك المؤازر والمحرك السائر؟
قبل البدء في توصيل محرك مؤازر لدينا بـ Raspberry Pi ، دعنا نلقي نظرة على الأنواع المختلفة من المحركات المستخدمة تقليديًا في الإلكترونيات.
بدون الخوض في التفاصيل ، يمكننا تقسيم المحركات المستخدمة في الإلكترونيات تقريبًا إلى ثلاث فئات:
- المحرك: يعمل طالما أنه يعمل بالطاقة. إنه مناسب عندما تريد أداء حركة مستمرة لا تتطلب دقة كبيرة.
- المحرك السائر: يدور بنوع من القفزات الصغيرة المتتالية. وهذا يعني أنك ستكون قادرًا على أن تطلب منه القيام ، على سبيل المثال ، 50 قفزة ، أو 112 قفزة ، والتي تتوافق مع حركة معينة (على سبيل المثال ربع دورة). إنها مناسبة عندما تريد إجراء حركة مستمرة بدقة عالية (فهي تستخدم على سبيل المثال في الطابعات ثلاثية الأبعاد).
- المحرك المؤازر: يدور بزاوية معينة ، محددة وفقًا لإشارة نوع PWM (تعديل عرض النبض). غالبًا ما تكون المحركات الصغيرة محدودة ولا يمكنها القيام بأكثر من ثورة واحدة. لذلك فهي تستخدم بدلاً من ذلك لحركة قصيرة ذات دقة عالية.
لا يزال هناك الكثير من الأشياء الأخرى لنقولها حول هذه المحركات المختلفة ، لكننا سندخل بعد ذلك في أسئلة ميكانيكية تتجاوز نطاق برنامجنا التعليمي.
في حالتنا سنستخدم محرك سيرفو لأنه أسهل محرك دقيق للتحكم فيه من Raspberry Pi.
قم بتوصيل محرك سيرفو بـ Raspberry Pi
أول شيء يجب القيام به لتتمكن من استخدام محرك سيرفو الخاص بنا هو توصيله بـ Raspberry Pi.
المشغلات لها 3 موصلات كهربائية. يمكن أن تتغير الألوان اعتمادًا على الشركة المصنعة ، ولكن بشكل عام ستجد شيئًا مثل:
- سلك أحمر يعمل كمصدر للطاقة.
- سلك أسود أو بني ، يعمل بمثابة GDN.
- سلك آخر يستخدم لنقل إشارة PWM للتحكم في موضع المحرك.
لذلك سنقوم بتوصيل هذه الكابلات المختلفة بـ Raspberry Pi ، والسلك الأحمر بمنفذ GPIO بجهد 5 فولت والأسود بمنفذ GND.
بالنسبة لمنفذ PWM من ناحية أخرى ، سيتعين علينا بالضرورة توصيله بدبوس GPIO الثاني عشر في Raspberry Pi. في الواقع ، إنه دبوس GPIO الوحيد الذي يدعم إشارة PWM افتراضيًا.
لذلك يجب أن يكون لديك مونتاج مثل هذا.
لاحظ ، نحن هنا نقوم بتشغيل محرك سيرفو الخاص بنا مباشرة من Raspberry Pi. يعمل هذا لأننا نستخدم محركًا مؤازرًا صغيرًا جدًا ، ولكن في نموذج أكبر سنحتاج إلى مصدر طاقة مخصص.
تحكم في المحرك المؤازر في سطور الأوامر
الآن بعد أن قمنا بتوصيل محرك مؤازر الخاص بنا ، سنكون قادرين على قيادته مباشرة من سطر أوامر Raspberry Pi.
للقيام بذلك ، سنبدأ بتنشيط وضع PWM على المنفذ 12 ، أي GPIO 18 وفقًا لترقيم المعالج.
gpio -o mode 18 pwm
وسنقوم بتنشيط وضع Mark / Space الخاص بـ PWM ، والذي يسمح بالحصول على إشارة أكثر ملاءمة لاستخدامنا.
gpio pwm-ms
أخيرًا ، سنقوم بتهيئة مدة الدورة والترددات المراد استخدامها وما إلى ذلك.
تم ضبط المحرك المؤازر ليعمل بتردد 50 هرتز ، أي 20 مللي ثانية. تعمل إشارة Raspberry Pi بتردد آخر ، 19.2 ميجاهرتز. باستخدام هذين الشكلين ، يمكننا حساب فترة ونطاق (بفضل ramboise314.fr للصيغة):
50 = 19.2 * 10^6 / 192 / 2000
لذلك سنقوم بتعيين Raspberry Pi لاستخدام هذه القيم:
gpio pwmc 192 gpio pwmr 2000
أخيرًا ، سنكون قادرين على تحريك محركنا! لاحظ أننا لا نمرر زاوية إلى المحرك المؤازر ، ولكن الرقم الذي سيتم تحويله إلى زاوية. ينتقل محرك السيرفو الخاص بنا من 0 درجة إلى 180 درجة. بعد بعض الاختبارات ، يبدو أن 0 درجة تقابل 230 و 90 درجة إلى 150 و 180 درجة إلى 70.
لإرسال محركنا عند 90 درجة ، سنستخدم الأمر:
gpio -g pwm 18 150
وسنستبدل 150 بـ 230 لننتقل إلى 0 ° ، 70 لننتقل إلى 180 درجة أو أي قيمة بينهما حسبما نحتاج.
لاحظ أن هذه المحركات الصغيرة تدعم زاوية 180 درجة بطريقة دقيقة ، لكن لديها هامشًا صغيرًا يمكن أن يتسبب في جعلها 190 درجة أو 200 درجة وحتى القيام بدوران كامل إذا وضعت قيمة منخفضة بدرجة كافية. إنه خاص بكل طراز محرك.
قم بقيادة المحرك المؤازر باستخدام Python
كما هو الحال مع البرامج التعليمية السابقة في هذه السلسلة ، فإن الهدف هو بدلاً من ذلك التحكم في محركنا باستخدام Python بدلاً من التحكم مباشرة من سطور الأوامر. أعتبر أن لديك الآن أساسيات Python ، إذا لم تقم بقراءة البرامج التعليمية السابقة ، فستتوفر الروابط في بداية هذه المقالة.
للتحكم في محركنا من نص بايثون ، سنستخدم lib مرة أخرى Rpi.GPIO
.
في Python و Pi ، تُحسب زاوية المحرك كنسبة مئوية من الدورة. هذه النسبة تسمى "دورة العمل".
إشارة 0.5 مللي ثانية تقابل 0 درجة وإشارة 2.5 مللي ثانية إلى 180 درجة. مع العلم أن دورتنا هي 50 هرتز ، أي 20 مللي ثانية ، فهذا يسمح لنا بحساب دورة التشغيل لـ 0 درجة و 180 درجة على النحو التالي:
x = 0.5 / 20 y = 2.5 / 20
وجدنا بعد ذلك أن دورة العمل المقابلة لـ 0 ° هي 0.025 ، أو 2.5٪ وأن تلك المقابلة لـ 180 ° هي 0.125 ، أو 12.5٪.
مشكلة صغيرة ومع ذلك ، إذا كانت هذه القيمة جيدة من الناحية النظرية ، فإنها في الواقع تميل إلى إطلاق ثورة كاملة للمحرك لمدة 0 درجة … لذلك أوصي باستخدام 4٪ لـ 0 درجة. قيمة 12.5٪ لـ 180 جيدة.
للتحكم في المحرك ، نحتاج فقط إلى تعيين الدبوس 12 كإشارة PWM ، واستخدام الوظائف start
و ChangeDutyCycle
.
لذلك يمكنك إنشاء ملف servo.py
ووضع الكود التالي هناك:
#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO
import time
#Set function to calculate percent from angle
def angle_to_percent (angle) :
if angle > 180 or angle < 0 :
return False
start = 4
end = 12.5
ratio = (end - start)/180 #Calcul ratio from angle to percent
angle_as_percent = angle * ratio
return start + angle_as_percent
GPIO.setmode(GPIO.BOARD) #Use Board numerotation mode
GPIO.setwarnings(False) #Disable warnings
#Use pin 12 for PWM signal
pwm_gpio = 12
frequence = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequence)
#Init at 0°
pwm.start(angle_to_percent(0))
time.sleep(1)
#Go at 90°
pwm.ChangeDutyCycle(angle_to_percent(90))
time.sleep(1)
#Finish at 180°
pwm.ChangeDutyCycle(angle_to_percent(180))
time.sleep(1)
#Close GPIO & cleanup
pwm.stop()
GPIO.cleanup()
كل ما عليك فعله هو تشغيل البرنامج النصي عن طريق القيام بما يلي:
python3 ./servo.py
يجب أن ترى محرك سيارتك يبدأ عند 0 درجة ، ثم يتحول إلى 90 درجة ويتوقف أخيرًا عند 180 درجة.
كل ما عليك فعله هو تكييف هذا البرنامج النصي مع احتياجاتك الخاصة!