آموزش الکترونیکآموزش رزبری پای

چطور سروو موتور را با رزبری پای کنترل کنیم ؟ با کد پایتون (آموزش Raspberry Pi #12)

سلام. چطور سروو موتور را با رزبری پای کنترل کنیم ؟ (آموزش Raspberry Pi #12) را آماده کردیم.

آموزش کنترل Servo Motor با Raspberry Pi

در این آموزش ما  سروو موتور را با Raspberry Pi کنترل خواهیم کرد. قبل از رفتن به سروو بیایید در مورد PWM صحبت کنیم زیرا کنترل سروو موتور با استفاده از پالس های PWM انجام می شود.

پیشنهاد میکنم قبل از خواندن ادامه مطلب قسمت های قبل آموزش رزبری پای را بخوانید زیرا این آموزش ها پیوسته هستند.

قسمت قبل : راه اندازی صفحه کلید لمسی (تاچ پد) با Raspberry Pi (آموزش رزبری پای #11)

قسمت اول : رزبری پای Raspberry Pi چیست؟ (آموزش کامل رزبری پای #1)

PWM چیست ؟

ما قبلاً بارها در مورد PWM صحبت کرده ایم و بحث PWM را برای آردوینو و AVR به طور کامل آموزش داده ایم.

چرخه وظیفه چیست ؟ Duty Cycle

به تصویر بالا نگاه کنید. اگر سوئیچ به طور مداوم طی یک مدت زمان بسته باشد، ال ای دی در این مدت به صورت مداوم روشن خواهد ماند. اگر سوئیچ به مدت نیم ثانیه بسته باشد و برای نیم ثانیه دیگر باز باشد، ال ای دی فقط در نیمه اول یک ثانیه روشن خواهد شد. به نسبت روشن بودن ال ای دی در کل زمان ، چرخه وظیقه یا Duty Cycle گفته میشود. چرخه وظیفه را میتوانید به صورت زیر محاسبه کنید.

چرخه وظیفه = زمان روشن /  (زمان روشن + زمان خاموش)

چرخه وظیفه = (0.5 / (0.5 + 0.5)) = 50٪

بنابراین متوسط ​​ولتاژ خروجی 50٪ ولتاژ باتری خواهد بود.

این حالت برای یک ثانیه اتفاق می افتد و می توانیم شاهد باشیم که LED برای نیمی از ثانیه خاموش و LED در نیمه دوم روشن است. اگر فرکانس این عمل از یک بار در ثانیه به 50 بار در ثانیه تبدیل شود، چشم انسان نمی تواند این فرکانس را ثبت کند. برای یک چشم معمولی، چراغ LED طوری بنظر میرسد که انگار فقط با نصفه ولتاژ روشن است. یعنی فکر میکنیم دارای نیمی از روشنایی اصلی است. بنابراین با کاهش بیشتر زمان روشن بودن ال ای دی، درخشندگی بسیار کمتر به نظر میرسد.

چرخه وظیفه از 0 به 100 می رود. 0 به معنی کاملاً خاموش و 100 کاملاً روشن است. این نسبت وظیفه برای سروو موتور بسیار مهم است. موقعیت سروو موتور با این نسبت وظیفه تعیین می شود. (برای آموختن کامل استفاده از PWM در رزبری پای ببینید : چگونه از PWM در Raspberry Pi استفاده کنیم؟ (آموزش رزبری پای #6))

سروو موتور و PWM

سروو موتور ترکیبی از موتور DCT سیستم کنترل موقعیت و چرخ دنده ها است. سروو ها در دنیای مدرن کاربردهای زیادی دارند و به همین دلیل در شکل ها و اندازه های مختلفی در دسترس هستند. ما در این آموزش از سروو موتور SG90  استفاده خواهیم کرد که یکی از محبوب ترین و ارزان ترین سروو ها است. SG90 یک سروو 180 درجه است. بنابراین با این سروو می توانیم محورها را از 0 تا 180 درجه قرار دهیم.

حتما ببینید :  آموزش کامل کنترل سرعت موتور DC با Arduino ، پتانسیومتر و PWM (آموزش آردوینو #5)

کنترل سروو موتور با رزبری پای

اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید.

یک سروو موتور به طور کلی دارای سه سیم است، یکی برای ولتاژ مثبت ، دیگری برای GND و دیگری برای تنظیم موقعیت است. سیم قرمز به برق متصل شده است، سیم قهوه ای به gnd وصل می شود و سیم زرد (یا سفید) به سیگنال ورودی وصل میشود.

در سروو ، ما یک سیستم کنترل داریم که سیگنال PWM را از پین سیگنال می گیرد. این سیگنال را رمزگشایی می کند و چرخه وظیفه را از آن دریافت می کند. پس از آن، این نسبت را با مقادیر موقعیتهای از پیش تعریف شده مقایسه می کند. اگر اختلاف در مقادیر وجود داشته باشد، موقعیت سروو را بر این اساس تنظیم می کند. بنابراین موقعیت محور سروو موتور بر اساس چرخه وظیفه PWM در پین سیگنال است.

فرکانس سیگنال PWM براساس نوع سروو موتور متفاوت است. برای SG90 فرکانس سیگنال PWM حدود 50 هرتز است. برای فهمیدن فرکانس عملکرد سروو خود، دیتاشیت مدل مربوطه را بررسی کنید. پس از انتخاب فرکانس ، نکته مهم دیگر در اینجا DUTY RATIO سیگنال PWM است.

جدول زیر موقعیت Servo را برای چرخه وظیفه خاص نشان می دهد. با انتخاب مقدار مناسب، می توانید سروو را در هر زاویه ای قرار دهید. مثلا برای 45º ، نسبت وظیفه باید 5 یا 5٪ باشد.

موقعیتچرخه وظیفه
0 درجه2.5
90 درجه7.5
180 درجه12.5

آموزش را با اجرای یک پروژه ادامه میدهیم.

شماتیک مدار پروژه

در اینجا ما از رزبری پای 2 Model B با سیستم عامل Raspbian Jessie استفاده می کنیم. در قسمت های قبل، در مورد کلیه نیازهای اولیه سخت افزار و نرم افزار بحث کرده ایم. تصویر زیر شماتیک مدار پروژه را نشان میدهد. همانطور که در تصویر زیر میبنید، برای این پروژه به قطعات خاصی احتیاج نداریم. تنها یک خازن 1000uF و یک سروو موتور SG90.

آموزش کنترل Servo Motor با Raspberry Pi

برنامه نویسی سروو موتور با رزبری پای

وقتی همه چیز را مانند شماتیک مدار متصل کردید، می توانیم Raspberry Pi را روشن کنیم تا برنامه را در پایتون (PYHTON) بنویسیم. کد کامل در انتهای صفحه قرار داده شده است. در اینجا در مورد قسمت های مهم کد صحبت میکنیم.

ما میخواهیم پرونده GPIO را از کتابخانه وارد کنیم. کد زیر باعث میشود بتوانیم پین های GPIO برد رزبری پای را برنامه ریزی کنیم. همچنین مانند قسمت قبلی آموزش، نام GPIO را به IO تغییر میدهیم. و هر بار بخواهیم به پین های GPIO مراجعه کنیم از کلمه IO استفاده میکنیم.

import RPi.GPIO as IO

بعضی اوقات، پین ​​های GPIO که سعی در استفاده از آنها داریم، ممکن است عملکردهای دیگری را انجام دهند. در این حالت، هنگام اجرای برنامه، هشدارهایی دریافت خواهیم کرد. دستور زیر به PI می گوید هشدارها را نادیده گرفته و به برنامه ادامه دهد.

IO.setwarnings(False)

ما می توانیم پین های GPIO رزبری پای یا شماره پین آن یا شماره GPIO آن ها وارد کنیم. به طور مثال پین 35 روی برد Raspberry pi، همان پین GPIO 19 است. بنابراین ما میتوانیم آن را با 19 یا 35 معرفی کنیم.

IO.setmode (IO.BCM)

ما PIN39 یا GPIO19 را به عنوان پین خروجی تنظیم می کنیم. ما از این پین خروجی PWM دریافت خواهیم کرد.

IO.setup(19,IO.OUT)

بعد از تنظیم پین خروجی ، باید پین را به عنوان پین خروجی PWM تنظیم کنیم ،

p = IO.PWM(output channel , فرکانس سیگنال PWM)

دستور فوق برای تنظیم کانال و همچنین تنظیم فرکانس کانال است. “p” در اینجا متغیر است که می تواند هر چیزی باشد. ما از GPIO19 به عنوان کانال خروجی PWM استفاده می کنیم. “فرکانس سیگنال PWM”را  50 انتخاب خواهیم کرد، زیرا فرکانس کار SG90 حدود 50 هرتز است.

حتما ببینید :  میکروکنترلر PIC (آموزش PIC جلسه دوم)

از دستور زیر برای شروع تولید سیگنال PWM استفاده شده است. “DUTYCYCLE” برای تنظیم نسبت “روشن به خاموش” است (که قبلاً توضیح داده شده)

p.start(DUTYCYCLE)

از دستور زیر برای ایجاد حلقه ای بی نهایت استفاده می شود، با این دستور عبارات داخل این حلقه بطور مداوم اجرا می شود.

While 1:

کد کامل :

import RPi.GPIO as IO          # فراخوانی کتابخانه پین های GPIO
import time                    # فراخوانی کتابخانه تاخیر
IO.setwarnings(False)          # عدم نمایش هشدار ها
IO.setmode (IO.BCM)           
IO.setup(19,IO.OUT)            # تنظیم پین 19 به عنوان خروجی
p = IO.PWM(19,50)              # تنظیم پین 19 به عنوان PWM و فرکانس 50 هرتز
p.start(7.5)                   # ایجاد سیگنال با چرخه وظیفه 7.5
while 1:                       # ایجاد حلقه ی بی نهایت                                    
        p.ChangeDutyCycle(7.5) # تغییر چرخه وظیفه برای رفتن سروو به زاویه 90 درجه
        time.sleep(1)          # صبر به مدت 1 ثانیه
        p.ChangeDutyCycle(12.5)# تغییر چرخه وظیفه برای رفتن سروو به زاویه 180 درجه
        time.sleep(1)          # صبر به مدت 1 ثانیه
        p.ChangeDutyCycle(2.5) # تغییر چرخه وظیفه برای رفتن سروو به زاویه 0 درجه
        time.sleep(1)

فیلم عملکرد و توضیحات کار با پروژه

برنامه بالا را در پایتون اجرا کنید. در اینجا ما سیگنال PWM را از پین 19 GPIO به سروو موتور میدهیم. چرخه وظیفه سیگنال PWM هر سه ثانیه به جای اول بر میگردد. بنابراین هر 1 ثانیه سروو موقعیت خود را تغییر میدهد. فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

قسمت بعد : نحوه اتصال ال سی دی کاراکتری به رزبری پای (آموزش Raspberry Pi #13)

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
برچسب ها

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن
بستن