امبدد
کنترل موتور DC با رزبری پای (Raspberry Pi)
رزبری پای (Raspberry Pi) یک سیستم مبتنی بر پردازنده معماری ARM برای مهندسان الکترونیک و دوستداران الکترونیک است. PI یکی از معتبرترین سیستم های توسعه پروژه است که در حال حاضر وجود دارد. با سرعت پردازنده بالاترو ۱ گیگابایت رم، PI می تواند برای بسیاری از پروژههای پرطرفدار مثل پردازش تصویر و اینترنت اشیاء استفاده شود.
برای انجام هر یک از پروژه های با مشخصات بالا، نیاز به درک عملکرد اساسی PI است.ما در این آموزشها تمامی ویژگیهای اساسی رزبری پای (Raspberry Pi ) را پوشش خواهیم داد. در هر آموزش ما یکی از توابع PI را موردبحث قرار خواهیم داد. در پایان مجموعه آموزشی، شما قادر خواهید بود تا پروژه های خودرا با کیفیت بالا انجام دهید. برای شروع کار پیکربندی رزبری پای(Raspberry Pi) و خود رزبری پای (Raspberry) بررسی کنید تا آشنایی داشته باشید.
ما داریم در مورد آموزش های قبلی که در مورد LEDچشمک زن، کلید های واسط و مولد PWM بوده بحث کرده ایم. در این آموزش ما سرعت موتور DC با استفاده از رزبری پای (Raspberry Pi) و روش PWM کنترل خواهیم کرد. PWM (مدولاسیون عرض پالس) یک روش مورد استفاده برای گرفتن ولتاژ متغیر از منبع تغذیه ثابت است. ما در مورد PWM در آموزش های قبلی بحث شده است.
۴۰ پایه خروجی GPIO در رزبری پای۲ (Raspberry Pi 2) وجود دارد. اما از ۴۰ پایه، تنها ۲۶ پایه GPIO2 ) GPIO بهGPIO27) را می توان برنامه ریزی کرد. بعضی از این پایه ها برخی از توابع خاص را انجام می دهند. با GPIO ویژه کنار گذاشته شده است، ما ۱۷ GPIO باقی مانده است داریم. برای دانستن بیشتر در مورد پایهGPIO، مراجعه کنید به پروژه: چراغ LED با رزبری پای
هر یک از این ۱۷ پایه GPIO می تواند حداکثر ۱۵mA راعبور دهد. و مجموع جریان از تمام پایه ها GPIO نمی تواند بیش از ۵۰mA باشد. بنابراین ما می توانیم به طور متوسط از هر یک از این پایه ها GPIO حداکثر ۳mA داشته باشیم. بنابراین،نباید این موارد دستکاری کرد، مگر اینکه شما بدانید که چه کاری انجام می دهید.
پایه های خروجی تغذیه + ۵V (پایه های ۲ و ۴) و ۳٫۳V (پایه های ۱ و ۱۷) در بورد برای اتصال سایر ماژول ها و سنسورها وجود دارد. این رله تغذیه به موازات قدرت پردازنده متصل است. بنابراين رسيدن جريان زياد از اين رله تغذیه بر پردازنده اثر مي گذارد. یک فیوز در بورد PI است که به یک باره شما درخواست بار بالا داشته باشید. شما می توانید ۱۰۰mA را از رله + ۳٫۳V به طور ایمن استفاده کنید.ما در اینجا درباره این صحبت میکنیم؛ ما در حال اتصال موتور DC به ۳٫۳ ولت هستیم. با توجه به محدودیت قدرت، ما فقط می توانیم موتور کم قدرت در اینجا وصل کنیم، اگر بخواهید موتور قدرت بالا را بکار ببرید، در نظر بگیرید که آن را از یک منبع تغذیه جداگانه وصل کنید.
اجزای مورد نیاز:
در اینجا ما از Raspberry Pi 2 مدل B باRaspbian Jessie OS استفاده می کنیم. پیش نیازهای سخت افزار و نرم افزار اصلی مورد بحث قرار گرفته است، شما میتوانید در مقدمه رزبری پای (Raspberry Pi)، به غیر از آنچه ما نیازداریم، نگاه کنید:
اتصال پین ها
مقاومت ۲۲۰Ω یا ۱KΩ 3(عدد)
موتور کوچک DC
دکمه ها (۲عدد)
ترانزیستور ۲N2222
دیود ۱N4007
خازن ۱۰۰۰uF
فیبر آزمایشی (Bread Board)
توضیح مدار:
همانطور که قبلا گفته شد، ما نمیتوانیم بیش از ۱۵ میلی آمپر از هر پایه GPIO بکشیم وموتور DC دارای بیش از ۱۵ میلی آمپر باشد، بنابراین PWM تولید شده توسط رزبری پای (Raspberry Pi) نمیتواند مستقیما به موتور DC منتقل شود. بنابراین اگرموتور را مستقیما برای کنترل سرعت به رزبری پای وصل کنیم، بورد ممکن است به طور دائمی آسیب ببیند. بنابراین ما قصد داریم از ترانزیستور (NPN (2N2222 به عنوان یک دستگاه سوئیچینگ استفاده کنیم. این ترانزیستور در اینجا نقش درایور موتور DC با توان بالا با در نظر گرفتن سیگنال PWM از PI داراست. در اینجا باید توجه داشته باشید که اتصال اشتباه ترانزیستور ممكن است بورد به شدت بار بكشد.
بنابراین در حالی که موتور سوییچ می کند ، ما شاهد اسپک القایی هستیم که از ویژگی های یک موتور القایی است. اسپک ترانزیستور را به شدت حرارت می دهد، بنابراین ما از دیود (۱N4007) برای حفاظت از ترانزیستور در برابراسپکتیو القایی استفاده خواهیم کرد.
به منظور کاهش نوسانات ولتاژ، ما یک خازن ۱۰۰۰uF در منبع تغذیه همان گونه در شکل مدارنشان داده شده است متصل می کنیم.
توضیح کار:
هنگامی که همه چیز را همان گونه که در شماتیک مدار است متصل کردیم، می توانیم PI را روشن کنیم تا برنامه را در PYHTON بنویسیم.
ما درباره چند دستور که ما در برنامه Python استفاده می کنیم صحبت خواهیم کرد.
ما قصد داریم فایل GPIO را از کتابخانه وارد کنیم، در زیر توابع ما را قادر می سازد تا پایه GPIO از PI را برنامه ریزی کنیم. ما همچنین “GPIO” را به “IO” تغییر نام دادیم، بنابراین در برنامه هر زمان که بخواهیم به پایه GPIO مراجعه کنیم، کلمه “IO” را استفاده خواهیم کرد.
import RPi.GPIO as IO
گاهی اوقات، زمانی که ما در حال تلاش برای استفاده از پایه GPIO هستیم، ممکن است برخی از توابع دیگر را اجرا کنیم. در این صورت، هنگام اجرای برنامه، هشداری دریافت خواهید کرد. دستور زیر به PI می گوید هشدارها را نادیده بگیرد و با برنامه ادامه دهد.
(IO.setwarnings(False
ما می توانیم پایه های GPIO از PI را با شماره پایه در بورد و یا شماره تابع آنها بیان کنیم. مانند ‘پایه ۳۵’ در بورد ‘GPIO19′ است. بنابراین ما در اینجا می گوییم می خواهیم پایه ’۳۵’ یا ’۱۹’ نشان دهیم.
(IO.setmode (IO.BCM
ما GPIO19 (یا پایه ۳۵) را به عنوان پایه خروجی تنظیم می کنیم. ما خروجی PWM را از این پایه دریافت خواهیم کرد.
(IO.setup(19,IO.IN
پس از تنظیم پایه به عنوان خروجی، ما نیازمند این هستیم که پایه را به عنوان پایه خروجی PWM تنظیم کنیم،
(p = IO.PWM(output channel , frequency of PWM signal
دستور بالا برای تنظیم کانال و همچنین تنظیم فرکانس سیگنال PWM است. ‘p’ در اینجا یک متغیر است که می تواند هر چیزی باشد. ما از GPIO19 به عنوان کانال خروجی PWM استفاده می کنیم. “فرکانس سیگنال PWM” 100 انتخاب شده است، چرا که ما نمی خواهیم چشمک زدن LED را ببینیم.
دستور زیر برای شروع تولید سیگنال PWM استفاده می شود: DUTYCYCLE برای تنظیم نسبت روشن شدن است، ۰ یعنی LED در ۰٪ از زمان روشن خواهد شد، ۳۰ یعنی LED در ۳۰٪ از زمان روشن خواهد شد و ۱۰۰ به طور کامل روشن خواهد شد.
(p.start(DUTYCYCLE
در صورتی که حالت در پرانتز درست باشد، جمله داخل حلقه یک بار اجرا خواهد شد. بنابراین اگر پایهGPIO از ۲۶ LOW باشد، جملات داخل حلقه IF یک بار اجرا می شود. اگر پایه GPIN از ۲۶ LOW نشود، جملات داخل حلقه IF اجرا نخواهد شد.
:(if(IO.input(26) == False
حالت ۱: حلقه بی نهایت استفاده می شود. با این دستور جملات در داخل این حلقه به طور مداوم اجرا خواهد شد.
ما تمام دستورات مورد نیاز برای دستیابی به کنترل سرعت داریم.
پس از نوشتن برنامه و اجرای آن، همه اینهایی که در قسمت چپ است، کنترل کردن را عملیاتی می کنند. ما دو دکمه متصل به PI داریم؛ یکی برای افزایش سیکل سیگنال PWM و دیگری برای کاهش میزان سیکل سیگنال PWM است. با فشار دادن یک دکمه، سرعت موتور DC افزایش می یابد و با فشار دادن دکمه دیگر سرعت موتور DC کاهش می یابد. اینگونه ما به کنترل سرعت موتور DC توسط رزبری پای (Raspberry Pi) دست یافته ایم.
همچنین بررسی کنید:
کنترل سرعت موتور DC
کنترل موتور DC با استفاده از آردوینو
کد پروژه:
import RPi.GPIO as IO # calling header file which helps us use GPIO’s of PI
import time # calling time to provide delays in program
IO.setwarnings(False) #do not show any warnings
x=0 #integer for storing the duty cycle value
IO.setmode (IO.BCM) #we are programming the GPIO by BCM pin numbers. (PIN35 as‘GPIO19’)
IO.setup(13,IO.OUT)
# initialize GPIO13 as an output.
IO.setup(19,IO.IN) # initialize
GPIO19 as an input.
IO.setup(26,IO.IN) # initialize
GPIO26 as an input.
p = IO.PWM(13,100)
#GPIO13 as PWM output, with 100Hz frequency
p.start(0)
#generate PWM signal with 0% duty cycle
while 1: #execute loop forever
p.ChangeDutyCycle(x) #change duty cycle for changing the brightness of LED.
if(IO.input(26) == False): #if button1 is pressed
:(if(x<50
x=x+1 #increment x by one if x<50
time.sleep(0.2) #sleep for 200ms if(IO.input(19) == False): #ifbutton2 is pressed
:(if(x>0
x=x-1 #decrement x by one if x>0
time.sleep(0.2) #sleep for 200ms