در این قسمت آموزش کنترل موتور DC با رزبری پای با استفاده از پایتون و آی سی L293D توضیح داده می شود.
در قسمت قبل ما از Raspberry Pi برای تولید پالس هایی برای کنترل موقعیت یک سروو موتور استفاده کردیم. در این قسمت از پالس ها برای کنترل سرعت یک موتور DC معمولی و از آی سی L293D برای معکوس کردن جهت جریان گذرنده از موتور و در نتیجه جهت چرخش آن استفاده می کنیم .
جلسات قبلی آموزش
- آموزش رزبری پای
- آموزش رزبری پای – Raspberry pi – مقدمه
- راه اندازی رزبری پای (Raspberry Pi )
- آموزش راه اندازی شبکه رزبری پای
- آموزش پیکره بندی اولیه رزبری پای
- آموزش راه اندازی GPIO رزبری پای
- آموزش استفاده از کابل کنسول در Raspberry Pi
- آموزش استفاده از SSH در رزبری پای
- آموزش کنترل از راه دور رزبری پای با VNC
- آموزش راه اندازی سروو موتور با رزبری پای
قطعات مورد نیاز کنترل موتور DC با رزبری پای
برای ساخت این پروژه به قطعات زیر نیاز دارید :
تعداد | قطعه |
1 | RaspberryPi |
1
|
برد توسعه GPIO |
1 | بسته سیم جامپر نری به نری |
1 | مینی برد برد |
1 | موتور DC 6 ولت |
1 | آی سی کنترلر موتور L293D |
1 | توزیع سیستم عامل Occidentalis 0.2 یا جدیدتر |
1 | جاباتری قلمی یا نیم قلمی 4تایی به همراه باتری |
مدولاسیون پهنای پالس یا PWM
مدولاسیون پهنای پالس یا PWM روشی است برای کنترل توان . ما از این روش در اینجا برای کنترل مقدار توانی که به موتور می رود و در نتیجه کنترل سرعت چرخش آن استفاده می کنیم. دیاگرام زیر سیگنال PWM تولید شده در پایه PWM RaspberryPi را نشان می دهد:
هر 1/500 ثانیه خروجی PWM یک پالس تولید می کند . طول این پالس مقدار انرژی که موتور دریافت می کند را تعیین می کند . اگر پالس کلا قطع شود موتور توقف می کند , با یک پالس کوتاه به آرامی می چرخد , اگر پالس برای نیمی از زمان فعال باشد آنگاه موتور نصف انرژی که در صورتی که پالس تا زمان پالس بعدی یک میماند را دریافت می کند .
ماژول کرنل PWM
شما از ماژول کرنل سروو و PWM در قسمت قبلی آموزش برای کنترل سروو استفاده کردید . این بار از همان ماژول برای کنترل سرعت یک موتور استفاده خواهید کرد .
رابط کاربری ماژول ها از یک نوع رابط فایل مانند استفاده می کند که در آن شما عملکرد پایه خروجی و در نتیجه سروو را با خواندن و نوشتن روی فایل های خاصی کنترل می کنید. این امر ارتباط با پایتون یا زبان های برنامه نویسی دیگر را بسیار آسان می کند.
فایل های استفاده شده برای راه اندازی سروو در زیر لیست شده اند. تمامی این فایل ها در دایرکتوری /sys/class/rpi-pwm/pwm0/ یافت می شوند.
فایل | توضیح |
active | این فایل باید برای فعال 1 و برای غیرفعال 0 باشد . می توانید آن را بخوانید تا ببینید که آیا پایه خروجی فعال است یا نه . همچنین می توانید در آن بنویسید تا آن را فعال یا غیرفعال کنید . |
delayed | اگر این فایل 1 شود آنگاه هر تغییری که در فایل های دیگر ایجاد کنید تاثیری نخواهند داشت تا زمانی که از فایل بالایی خروجی را فعال کنید . |
mode | در این فایل بنویسید تا حالت پایه خروجی را روی pwm , servo یا audio تنظیم کنید . ما آن را روی pwm تنظیم میکنیم . توجه داشته باشید که برای خروجی صوتی RaspberryPi نیز استفاده می شود . بنابراین نمی توانید از صوت و کنترل موتور همزمان استفاده کنید . |
frequency | این فایل تعداد پالس های تولید شده در یک ثانیه را تعیین می کند . |
duty | مقدار این فایل باید بین 0 تا 100 باشد و نمایانگر درصدی از پالس است که در آن موتور روشن است . هر چه این عدد بزرگتر باشد موتور سریعتر خواهد چرخید . |
آیسی L293D
این آیسی یک چیپ بسیار پرکاربرد است که می تواند دو موتور را مستقل از هم کنترل کند . ما در این آموزش تنها از نصف آن استفاده می کنیم . بیشتر پایه های سمت راست آیسی مربوط به کنترل موتور دوم هستند اما با Raspberry Pi ما تنها یک خروجی PWM داریم.
L293D دو پایه Vmotor+ 8 و 16 +V دارد. پایه +Vmotor 8 مربوط به تغذیه موتور و V+ 16 برای مدارات منطقی آیسی می باشد. ما پایه 16 را به پایه 5ولت Raspberry Pi و پایه 8 را به یک پک باتری متصل کرده ایم.
سخت افزار
دو دلیل برای استفاده از چیپ L293D در این پروژه وجود دارد. اولین آن ها این است که خروجی Raspberry Pi اصلا توان مورد نیاز برای راه اندازی یک موتور به طور مستقیم را ندارد و اتصال مستقیم این دو ممکن است به Raspberry Pi آسیب برساند.
دوم , در این آموزش , ما میخواهیم هم سرعت و هم جهت چرخش موتور را کنترل کنیم . این کار تنها با معکوس کردن جهت جریان در موتور امکان پذیر است که L293D دقیقا برای این منظور طراحی شده است و این کار را با دو پایه کنترلی انجام می دهد.
نرم افزار
از آنجایی که ما نیاز به کنترل پایه های L293D داریم (متصل به پایه های 4 و 17 GPIO) باید از کتابخانه GPIO نیز استفاده کنی . برای جزئیات بیشتر به اینجا آموزش مراجعه کنید.
راه های زیادی برای انتقال کد زیر به Raspberry Pi تان وجود دارد. آسان ترین آن ها اتصال به Raspberry Pi از طریق SSH (اینجا آموزش را ببینید ) و باز کردن یک ویرایشگر با دستور زیر است:
nano motor.py
سپس کد زیر را در آن جایگذاری کنید و با CTRL-X فایل را ذخیره کتید .
کد کنترل موتور
import RPi.GPIO as io io.setmode(io.BCM) in1_pin = 4 in2_pin = 17 io.setup(in1_pin, io.OUT) io.setup(in2_pin, io.OUT) def set(property, value): try: f = open("/sys/class/rpi-pwm/pwm0/" + property, 'w') f.write(value) f.close() except: print("Error writing to: " + property + " value: " + value) set("delayed", "0") set("mode", "pwm") set("frequency", "500") set("active", "1") def clockwise(): io.output(in1_pin, True) io.output(in2_pin, False) def counter_clockwise(): io.output(in1_pin, False) io.output(in2_pin, True) clockwise() while True: cmd = raw_input("Command, f/r 0..9, E.g. f5 :") direction = cmd[0] if direction == "f": clockwise() else: counter_clockwise() speed = int(cmd[1]) * 11 set("duty", str(speed))
این برنامه پایتون ابتدا دو پایه GPIO را در حالت خروجی تنظیم می کند. سپس از همان تابع که در قسمت قبلی آموزش نیز از آن استفاده کردیم (“set”) برای نوشتن روی ماژول کرنل PWM استفاده می کند . سپس از آن برای تنظیم پارامتر های PWM استفاده می کند.
دو تابع دیگر نیز تعریف شده اند , “clockwise” و “counter_clockwise” که جهت چرخش موتور را با تغییر دوپایه ورودی تعیین می کنند .
اگر هر دو پایه کنترلی HIGH یا LOW باشند آنگاه موتور متوقف می شود. اما اگر IN1 HIGH و IN2 LOW باشد در یک جهت و معکوس کردن مقادیر IN1 و IN2 در جهت دیگر می چرخد.
حلقه اصلی برنامه منتظر شما میماند تا دستورها را به فرم یک حرف (“f” یا “r” ) و یک رقم بین 0 تا 9 وارد کنید. حرف جهت چرخش و عدد سرعت موتور را با ضرب در 11 برای بدست آوردن یک عدد بین 0 تا 99 که موردانتظار کتابخانه PWM است , تعیین می کند.
تست و راه اندازی موتور DC با رزبری پای
برای اجرای برنامه باید آن را به عنوان کاربر superuser اجرا کنید تا به پایه های GPIO دسترسی داشته باشید , بنابراین از کد زیر استفاده کنید :
sudo python motor.py
سپس از شما یک دستور خواسته می شود . چند دستور 2حرفی مانند زیر را وارد کنید :
$sudo python motor.py Command, f/r 0..9, E.g. f5 :f9 Command, f/r 0..9, E.g. f5 :r4 Command, f/r 0..9, E.g. f5 :
منبع : adafruit ، لینک کتابخانه های استفاده شده ، خب در اینجا آموزش کنترل موتور DC با رزبری پای هم به پایان رسید امیدواریم برایتان مفید واقع شده باشد. اگر به اطلاعات بیشتر نیاز داشتین میتوانید به مطالب آموزشی قبلی رزبری پای یا وبسایت منبع مراجعه کنید.آرزوی موفقیت
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.