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

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

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

سروو موتورها با پالس‌های با طول متغییر کنترل می‌شوند. این امر به دقت زیادی در زمان بندی نیاز دارد. 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موقعیت مختلف برای سروو خود خواهید داشت.

توجه داشته باشید که 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

میکرودیزاینرالکترونیک

 

مطلب قبلیآموزش کنترل موتور DC با رزبری پای
مطلب بعدیتغییر شدت نور LED با آردوینو

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید