جلسه سوم آموزش Raspberry pi – کار با GPIO ها { بخش دوم }

مقدمه

در جلسه دوم از آموزش GPIO قصد داریم بحث مربوط به GPIO ها را ادامه دهیم. در جلسه قبل ما تا بحث خروجی کردن یک پایه پیش رفتیم. در این جلسه قصد داریم در مورد PWM ها و خوانده مقدار روی یک پایه و مقاومت Pull up کمی صحبت کنیم و یاد بگیریم که چگونه یک برنامه را در سیستم عامل رزبین میتوانیم اجرا کنیم. پیشنهاد میکنم برای فهم بهتر این جلسه ، حتما جلسات قبل این آموزش را از لینک های زیر مطالعه کنید :

راه اندازی PWM بر روی رزبری پای

[post_shop]

 

در برد رزبری پای نسخه 1 فقط یک پایه PWM وجود داشت در حالی که تعداد پایه ها در رزبری پای 3 به 4 عدد افزایش یافت. این پایه ها 12 و 33 و 35 و 36 هستند. در اینجا ما از پایه 12 برای PWM استفاده میکنیم . قبل از این که دستورات مربوط به PWM را با هم یاد بگیریم ، در صورتی که با PWM آشنایی ندارید پیشنهاد میکنم حتما جلسه مربوط به آموزش PWM را از لینک زیر مطالعه کنید:

برای پیکربندی اولیه PWM از دستور زیر استفاده میکنیم : 

در دستور بالا pin نام پین مربوطه را مشخص می کند و frequency هم فرکانس خروجی آن پایه را تعیین می کند. البته پیشنهاد می شود ، فورا Duty Cycle مربوط به PWM را به آن اختصاص دهید. این کار را میتوان به صورت زیر انجام داد: 

در دستور بالا پارامتر duty cycle عددی بین 0 تا 100 است که مقدار Duty Cycle موج PWM را تعیین می کند. مثالی از پیکر بندی اولیه یک PWM در زیر آورده شده است : 

در دستورات بالا ما فرکانس PWM را برای پایه 12 برابر با 1 کیلوهرتز (1000 هرتز) تعریف کرده ایم و مقدار Duty Cycle آن نیز برابر با 50 درصد است. البته مقدار Duty Cycle را میتوان تغییر داد. این کار را میتوان با دستور زیر انجام داد : 

مشابه دستور قبل  ، در اینجا نیز پارامتر Duty Cycle برابر با Duty Cycle موج است. مثلا اگر بخواهیم Duty Cycle مربوط به این پایه را به 75 درصد تغییر دهیم ، در این صورت خواهیم داشت : 

همچنین اگر بخواهیم پایه PWM را غیر فعال کنیم و دیگر موجی در خروجی تولید نکند میتوانیم از دستور زیر استفاده کنیم: 

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

استفاده از دستور input برای خواندن سطح یک پایه:

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

خروجی این تابع True یا False هست که اگر True بود به این معنی است که آن پایه در سطح High است و اگر Flase بود به این معنی است که این پایه در سطح LOW است.  برای تست سطح پایه میتوانیم از این دستور به همراه if else استفاده کنیم. مثالی در این رابطه در زیر آورده شده است:

در مثال بالا وضعیت پایه خوانده می شود و اگر آن پایه در سطح HIGH بود Pin 11 is HIGH و اگر در سطح LOW بود عبارت Pin 11 is HIGH نشان داده می شود.

Pull up و Pull down کردن پایه ها

ما در جلسه قبل در مورد تابع GPIO.setup صحبت کرده بودیم که به کمک اون میتونستیم یک پایه رو ورودی و یا خروجی کنیم. در این تابع یک پارامتر سومی هم وجود دارد که البته اختیاری است و ما میتوانیم آن را نگذاریم. با کمک این پایه میتوانیم مقاومت های Pull-up و Pull-down را برای یک پایه تعیین کنیم. برای قرار دادن مقاومت Pull-up بر روی یک پین باید از پارامتر pull_up_down=GPIO.PUD_UP به عنوان پارامتر سوم استفاده کنیم. البته اگر بخواهیم از مقاومت Pull-down استفاده کنیم در این صورت باید عبارت pull_up_down=GPIO.PUD_DOWN را به عبنوان پارامتر سوم آن دستور قرار دهیم.  به عنوان مثال اگر بخواهیم بر روی پایه 11 یک مقاومت Pull-up قرار دهیم ، میتوانیم از دستور زیر استفاده کنیم: 

البته توجه داشته باشید که اگر این پارامتر را تعیین نکنیم ، هر دو مقاومت Pull-up و Pull down غیر فعال می شود. 

قرار دادن تاخیر در برنامه: 

برای قرار دادن تاخیر در یک برنامه میتوان از ماژول time استفاده کرد.  برای اضافه کردن ماژول time کافی است از دستور زیر استفاده کنیم: 

دستور مربوط به تاخیر نیز دستور time.sleep می باشد . این دستور یک پارامتر دارد که آن پارامتر نیز میزان تاخیر ایجاد شده بر حسب ثانیه است. مثال زیر را ببینید:

به کمک  دستور بالامیتوانیم  به مدت 250 میلی ثانیه تاخیر ایجاد کنیم. البته ماژول time فقط شامل این دستور نیست و دستورات کامل و جامعی دارد. ولی برای شروع فعلا دستور sleep برای ما کفایت می کند. 

آزاد کردن پایه ها: 

یکی از نکاتی که باید به آن توجه کنیم این است که در انتهای برنامه حتما پایه ها و منابعی که در کد از آن ها استفاده میکنیم را آزاد کنیم. برای این کار کافی است از دستور GPIO.cleanup در انتهای کد خود استفاده کنیم تا پایه ها و منابع استفاده شده توسط کد به صورت کامل آزاد شوند. 

خوب . تا حالا ما همه دستورات لازم برای کار با پایه های GPIO را یاد گرفتیم. حال وقت آن است که همه این موارد را جمع بندی کنیم و کدنهایی خود را بنویسیم و اجرا کنیم. در ادامه به صورت مرحله به مرحله از ایجاد یک فایل تا اجرای برنامه را آورده ایم:

ایجاد یک دایرکتوری

برای شروع ما نیاز داریم که یک فایل پایتون را بسازیم. این کار را به سادگی میتوان به کمک Raspbian انجام داد. البته راه دیگر این است که از Terminal استفاده کنیم. ابتدا ترمینال Rapsbian را باز کنید و کد های زیر را در آن بنویسید:

در دستورات بالا ابتدا یک دایرکتوری به نام python ایجاد می کنیم و وارد آن دایرکتوری می شویم. ( عبارت mkdir مخفف make directory است و از آن برای ایجاد یک دایرکتوری استفاده می شود. ) 

ساخت یک فایل
کدهای بعدی که باید بنویسیم به صورت زیر است: 

به کمک دستورات بالا یک فایل با نام blinker می سازیم و پسوند آن را py قرار میدهیم که این py مخفف پایتون است. چون میخواهیم در این فایل کدهای پایتون را بنویسیم.  سپس این فایل را با ادیتور leafpad باز میکنیم.  

کد کلی و اجرای برنامه

در کد زیر ما همه مواردی را که تاکنون یاد گرفته ایم را به صورت یکجا آورده ایم. کد زیر را ببینید: 

بعد از این که کد بالا را در محیط Text editor خودتون تایپ کردید ، اون رو ذخیره کنید. در مرحله بعد میخواهیم این کد را اجرا کنیم. 

ماژول RPi.GPIO برای اجرا نیاز به حالت admin دارد. به همین دلیل در ابتدای دستور اجرا از کلمه sudo استفاده میکنیم. حال برای اجرای برنامه بالا کافی است عبارت زیر را تایپ کنیم : 

وقتی که کد را اجرا کردید ، دکمه را فشار دهید تا LED متصل شده به پایه دیجیتال روشن شود. همچنین LED متصل شده به پایه PWM با هر بار فشار کلید ، روشنایی آن معکوس می شود. 

[/post_shop]

پس کل کدی که ما باید در محیط ترمینال اجرا بنویسیم به صورت زیر است :

آموزش Raspberry pi

برای خارج شدن از برنامه کافی است CTRL+C را فشار دهید. 

خوب دوستان. برای این جلسه هم کافی است. ما در جلسه بعد قصد داریم رزبری خود را به لپتاپ خود وصل کنیم و از دست کیبورد و ماوس و مانیتور راحت شویم. مثل همیشه می توانید ما را در تلگرام و یا اینستاگرام دنبال کنید :

اشتراک گذاری:
مطالب زیر را حتما بخوانید

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