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

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

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

سروو موتورها با پالس های با طول متغییر کنترل می شوند . این امر به دقت زیادی در زمان بندی نیاز دارد . Raspberry Pi یک پایه دارد که به طور سخت افزاری و بدون تکیه بر سیستم عامل می تواند پالس تولید کند.

قطعات لازم راه اندازی سروو موتور با رزبری پای

برای ساخت این پروژه به قطعات زیر احتیاج دارید :

تعداد قطعه
1 Raspberry Pi (مدل استفاده شده در این پروژه ورژن اولیه هست ولی شما از هر ورژن جدید میتوانید استفاده کنید.
1 سیم توسعه GPIO (سیم کشی از رزبری پای به روی برد برد)از سیم برد بوردی یک سر نری و یک سر مادگی هم میتوانید استفاده کنید.
1 سیم جامپر نری به نری
1 مینی بردبرد
1 سروو موتور
1 جاباتری نیم قلمی یا قلمی 4تایی به همرا باتری

سروو موتورها

موقعیت شفت سروو موتور با طول پالس تعیین می شود . سروو باید تقریبا هر 20میلی ثانیه یک پالس دریافت کند.  اگر این پالس برای 1 میلی ثانیه یک باشد در اینصورت زاویه شفت 0 درجه خواهد بود اگر این مدت 1.5 میلی ثانیه باشد سروو در موقعیت مرکزی قرار می گیرد و اگر 2 میلی ثانیه باشد زاویه سروو 180 درجه خواهد بود.

سروو موتورها

نقاط انتهایی سروو می توانند مختلف باشند و خیلی از سرووها تنها 170 درجه می چرخند . اما سرووهای ‘پیوسته’ نیز وجود دارند که می توانند تمامی 360 درجه را گردش کنند.

سخت افزار

تنها یک پایه روی Raspberry Pi وجود دارد که می تواند از این طریق پالس تولید کند.(این پایه در رزبری ورژن یک 18 GPIO میباشد. برای ورژن های جدید تر به Pinout ها دقت کنید.) این پایه به سیم کنترل سروو متصل می شود . تغذیه سروو از یک باتری خارجی تامین میشود زیرا تغذیه کردن سروو از Raspberry Pi ممکن است باعث کرش کردن شود زیرا سروو هنگام شروع حرکت جریان زیادی می کشد . سرووها نیاز به ولتاژ 4.8~6 ولت DC برای موتور دارند , اما سطح سیگنال (خروجی پالس) می تواند 3.3ولت نیز باشد که به همین دلیل می توان این پایه را مستقیما به خروجی GPIO Raspberry Pi متصل کرد.

مطلب پیشنهادی:  نام کاربری و رمزعبور پیش‌ فرض رزبری پای (سیستم عامل رزبین)

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

سروو موتورها معمولا دارای یک سوکت 3 پایه هستند . سیم قرمز و قهوه ای برای تغذیه (قرمز مثبت) و سیم زرد یا نارنجی برای سیگنال کنترل می باشد . برای متصل کردن سوکت به بردبرد از سیم های جامپر نری به نری استفاده کنید .

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

نرم افزار

ما از ابزار gpio wiringPi برای کنترل سروو استفاده می کنیم . نصب gpio را با دستور زیر انجام دهید :

sudo apt-get install -y wiringpi

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

نکته خیلی مهم : در ورژن های جدید دو کانال PWM پیش بینی شده و برای اطلاعات بیشتر در مورد این پین ها میتوانید Pinout برد خود را ببینید.

پایه شماره 18 را به عنوان خروجی PWM تنظیم کنید .

gpio -g mode 18 pwm

پایه #18 خروجی PWM دارد , اما باید آن را برای فرکانس خروجی مناسب تنظیم کنید . سرووها به خروجی فرکانس 50هرتز نیاز دارند .

برای ماژول PWM RaspberryPi , PWM Frequency in Hz = 19,200,000 Hz / pwmClock / pwmRange

اگر pwmClock 192 باشد و pwmRange 2000 فرکانس PWM 50هرتز را دریافت خواهیم کرد .

اکنون می توانیم با استفاده از gpio این اعداد را تنظیم کنیم :

gpio pwm-ms
gpio pwmc 192
gpio pwmr 2000

با دستور زیر می توانید سروو را در کاملا به چپ (1میلی ثانیه) بچرخانید :

gpio -g pwm 18 100

با دستور زیر سروو در حالت وسط (1.5میلی ثانیه) قرار می گیرد :

gpio -g pwm 18 150

و با دستور زیر کاملا به راست (2میلی ثانیه ):

gpio -g pwm 18 200

سروو ها معمولا به طیف وسیع تری از 1تا2میلی ثانیه پاسخ می دهند بنابراین می توانید از 50(0.5میلی ثانیه) تا 250(2.5میلی ثانیه) را امتحان کنید . اکنون با این بازه تقریبا 200موقعیت مختلف برای سروو خود خواهید داشت .

مطلب پیشنهادی:  آموزش کنترل موتور DC با رزبری پای

توجه داشته باشید که PWM RaspberryPi خروجی پایداری ندارد و ممکن است مقداری jitter داشته باشد. البته در ورژن های جدید شاید این مشکل حل شده باشد میتوانید به عنوان تمرین تجریه پایداری PWM رزبری پای را انجام و نتیجه را در زیر همین نوشته بذارید.

مثال پایتون

شما می توانید از wiringPi در پایتون نیز استفاده کنید !

sudo apt-get install -y python-pip

sudo pip install wiringpi

را اجرا کنید .

کد پایتون برای حرکت دادن سروو به چپ و راست به شرح زیر می باشد :

# Servo Control
import time
import wiringpi

# use 'GPIO naming'
wiringpi.wiringPiSetupGpio()

# set #18 to be a PWM output
wiringpi.pinMode(18, wiringpi.GPIO.PWM_OUTPUT)

# set the PWM mode to milliseconds stype
wiringpi.pwmSetMode(wiringpi.GPIO.PWM_MODE_MS)

# divide down clock
wiringpi.pwmSetClock(192)
wiringpi.pwmSetRange(2000)

delay_period = 0.01

while True:
 for pulse in range(50, 250, 1):
 wiringpi.pwmWrite(18, pulse)
 time.sleep(delay_period)
 for pulse in range(250, 50, -1):
 wiringpi.pwmWrite(18, pulse)
 time.sleep(delay_period)

در واقع ما در حال استفاده از توابع wiringPi هستیم اما در پایتون , بنابراین انجام همینکار با ابزار gpio و استفاده از دستورات مربوطه آن در پایتون نیز کار ساده ای است .

یک متغییر (delay_period) برای نگه داشتن زمان به ثانیه بین هر استپ سروو استفاده شده است .

حلقه while تا ابد ادامه خواهد داشت یا تا زمانی که روند برنامه با فشار دادن CTRL-C متوقف شود . درون حلقه دو حلقه for تقریبا مشابه وجود دارند. اولین آن ها عرض پالس را از 0.5 میلی ثانیه تا 2.5 میلی ثانیه بالارونده می شمارد و دومی عرض پالس را از 2.5میلی ثانیه تا 0.5 میلی ثانیه به طور پایین رونده تغییر می دهد که باعث حرکت سروو به چپ و راست می شود .

مطلب پیشنهادی:  استفاده از بلوتوث روبردی رزبری‌پای برای ارتباطات

برای نصب برنامه , از طریق SSH به RaspberryPi خود متصل شوید و دستور زیر را تایپ کنید :

$ nano servo.py

دستور بالا را در ویرایشگر جایگذاری کنید و سپس با CTRL-X و Y آن را ذخیره کنید .

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

برای اجرای برنامه سروو کافیست دستور زیر را در پنجره SSH خود وارد کنید :

$ sudo python servo.py

سروو باید بلافاصله شروع به حرکت کند.

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

اگر می خواهید سروو سریعتر حرکت کند delay_period را به مقدار کمتری , مثلا 0.001 کاهش دهید . سپس با افزایش آن به مقدار 0.1 سرعت سروو را کم کنید.

منبع : adafruit

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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