آموزش رزبری پایپروژه رزبری پای

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

سلام. برنامه نویسی جوی استیک با رزبری پای و پایتون (آموزش Raspberry Pi #15) را آماده کردیم.

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

در این قسمت آموزش رزبری پای قصد داریم یک جوی استیک را به برد رزبری پای متصل کنیم و چند ال ای دی را با آن کنترل کنیم. Joy Stick ها اغلب برای انجام بازی های مختلف استفاده میشود. اگر چه جوی استیک ها به راحتی با درگاه USB متصل میشوند اما ما میخواهیم یک ماژول جوی استیک را با استفاده از پین های GPIO رزبری پای کنترل کنیم. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

پیشنهاد میشود قبل از خواندن این قسمت از آموزش، قسمت های قبل را بخوانید.

برای یادگیری آردوینو (برنامه نویسی، ساخت ربات، ارتباط با اندروید) روی دوره آموزش آردوینو کلیک کنید.
برای یادگیری کامل الکترونیک روی دوره آموزش الکترونیک کلیک کنید.

قسمت قبل : آموزش راه اندازی سون سگمنت با رزبری پای

قسمت اول : رزبری پای Raspberry Pi چیست؟ 

رزبری پای و ماژول جوی استیک

جوی استیک در شکل ها و اندازه های مختلف موجود است. یک ماژول معمولی Joystick در شکل زیر نشان داده شده است. این ماژول Joystick به طور معمول خروجی های آنالوگ را ارائه می دهد و ولتاژهای خروجی ارائه شده توسط این ماژول مطابق با جهت حرکت تغییر می کند. می توانیم با تفسیر این تغییرات ولتاژ با استفاده از میکروکنترلر ، جهت حرکت را بدست آوریم.

جوی استیک چیست ؟
جوی استیک چیست ؟

همانطور که می بینید این ماژول جوی استیک دارای دو محور است. محور X و محور Y. هر محور JOY STICK به پتانسیومتر یا گلدان سوار می شود. نقاط میانی این گلدان ها به صورت Rx و Ry رانده می شوند. بنابراین Rx و Ry نقاط متغیر این گلدان ها هستند. وقتی Joystick متصل و در حالت آماده به کار باشد، Rx و Ry به عنوان تقسیم ولتاژ عمل می کنند.

هنگامی که جوی استیک در امتداد محور افقی کشبده می شود، ولتاژ در پین Rx تغییر می کند. به طور مشابه ، هنگامی که در امتداد محور عمودی حرکت می کند، ولتاژ در پین Ry تغییر می کند. بنابراین ما دو خروجی داریم که بسته به نوع حرکت جوی استیک کم و زیاد میشوند.

همانطور که می دانیم Raspberry Pi مکانیسم ADC داخلی (مبدل آنالوگ به دیجیتال) ندارد. بنابراین این ماژول نمی تواند مستقیماً به رزبری پای وصل شود. ما برای مقایسه خروجی ولتاژ از مقایسهگرهای مبتنی بر Op-amp استفاده خواهیم کرد. این آپ امپ ها بسته به سیگنال های ورودی، سیگنال هایی را به Raspberry pi می دهند تا چراغ های LED را کنترل کنند. در اینجا ما از چهار LED استفاده کرده ایم تا حرکت Joystick را در چهار جهت نشان دهیم.

هر یک از 17 پین GPIO نمی تواند ولتاژ بالاتر از 3.3 ولت داشته باشد، بنابراین خروجی های Op-amp نمی توانند از 3.3 ولت بالاتر باشند. از این رو ما آی سی آپ امپ LM324 را انتخاب کرده ایم ، این آی سی دارای تقویت کننده عملیاتی چهارگانه است که می تواند در 3 ولت کار کند.

مدار پروژه جوی استیک با رزبری پای

چهار مقایسه کننده OP-AMP در داخل LM324 IC برای شناسایی چهار جهت Joystick استفاده میشوند. در زیر شماتیک LM324 IC را مشاهده میکنید.

شماتیک LM324 IC

اتصالات انجام شده برای ماژول Interfacing Joystick با Raspberry Pi در تصویر زیر نشان داده شده است. U1: A، U1: B، U1: C، U1: D چهار مقایسه کننده داخلی LM324 را نشان می دهند.

آموزش راه اندازی Joy Stick با Raspberry Pi

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید

قطعات مورد نیاز

در اینجا ما از Raspberry Pi 2 Model B با سیستم عامل Raspbian Jessie استفاده می کنیم.

  1. ماژول جوی استیک
  2. IC آپ امپ LM324
  3. مقاومت 1 کیلو اهم – 12 عدد
  4. ال ای دی – 4 عدد
  5. مقاومت 2.2 کیلو اهم – 4 عدد
  6. خازن 1000μF
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد پایتون پروژه کنترل ال ای دی با جوی استیک

برای تشخیص حرکت Joystick در امتداد محور Y ، ما از OP-AMP1 یا U1: A و OP-AMP2 یا U1: B استفاده میکنیم و برای تشخیص حرکت Joystick در امتداد محور X از OP-AMP3 یا U1:C و OP-AMP4 یا U1:D استفاده میکنیم.

OP-AMP1 حرکت نزولی جوی استیک را در محور Y تشخیص میدهد :

ترمینال منفی مقایسه کننده U1: A با 2.3 ولت (با استفاده از مدار تقسیم ولتاژ توسط 1K و 2.2K) ارائه می شود و ترمینال مثبت به Ry وصل می شود. با حرکت دادن جوی استیک به سمت پایین محور Y ، ولتاژ Ry افزایش می یابد. هنگامی که این ولتاژ از 2.3 ولت بالاتر رود ، OP-AMP در پین خروجی خود 3.3 ولت را ارائه می دهد. این خروجی توسط رزبری پای حس میشود و LED مربوطه روشن میشود.

    if (IO.input(17) == 1):
        IO.output(12,1)
        time.sleep(0.01)
        IO.output(12,0)
        print ("DOWN")

OP-AMP2 حرکت صعودی جوی استیک را در محور Y تشخیص میدهد:

ترمینال منفی مقایسه کننده U1: B با 1.0V (با استفاده از مدار تقسیم ولتاژ توسط 2.2K و 1K) تهیه شده و ترمینال مثبت به Ry متصل می شود. هنگام حرکت جوی استیک در امتداد محور Y ، ولتاژ Ry کاهش می یابد. هنگامی که این ولتاژ از 1.0 ولت پایین بیاید ، خروجی OP-AMP کم می شود. این خروجی توسط رزبری پای حس میشود و LED مربوطه روشن میشود.

    if (IO.input(22) == 0):
        IO.output(16,1)
        time.sleep(0.01)
        IO.output(16,0)
        print ("UP")

OP-AMP3 حرکت چپ جوی استیک را در امتداد محور X تشخیص می دهد:

ترمینال منفی مقایسه کننده U1: C با 2.3 ولت (با استفاده از مدار تقسیم ولتاژ توسط 1K و 2.2K) ارائه می شود و ترمینال مثبت به Rx وصل می شود. با حرکت جوی استیک سمت چپ در امتداد محور x ، ولتاژ Rx افزایش می یابد. هنگامی که این ولتاژ از 2.3 ولت بالاتر رود ، OP-AMP در پین خروجی خود 3.3 ولت را ارائه می دهد. این خروجی توسط رزبری پای حس میشود و LED مربوطه روشن میشود.

    if (IO.input(4) == 1):
        IO.output(20,1)
        time.sleep(0.01)
        IO.output(20,0)
        print ("LEFT")

OP-AMP4 حرکت راست جوی استیک را در محور X تشخیص میدهد:

ترمینال منفی مقایسه کننده U1: 4 با 1.0 ولت (با استفاده از مدار تقسیم ولتاژ توسط 2.2K و 1K) تهیه شده و ترمینال مثبت به Rx متصل می شود. در حرکت جوی استیک درست در امتداد محور x آن ، ولتاژ Rx کاهش می یابد. هنگامی که این ولتاژ از 1.0 ولت پایین بیاید ، خروجی OP-AMP کم می شود. این خروجی توسط رزبری پای حس میشود و LED مربوطه روشن میشود.

    if (IO.input(27) == 0):
        IO.output(21,1)
        time.sleep(0.01)
        IO.output(21,0)
        print ("RIGHT")

کد کامل :

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

import RPi.GPIO as IO   
import time           
IO.setwarnings(False)  
IO.setmode (IO.BCM)    
IO.setup(21,IO.OUT)   
IO.setup(20,IO.OUT)
IO.setup(16,IO.OUT)
IO.setup(12,IO.OUT)
IO.setup(27,IO.IN) 
IO.setup(4,IO.IN)
IO.setup(22,IO.IN)
IO.setup(17,IO.IN)
while 1:
    if (IO.input(27) == 0): 
        IO.output(21,1)
        time.sleep(0.01)
        IO.output(21,0)
        print ("RIGHT")
    if (IO.input(4) == 1): 
        IO.output(20,1)
        time.sleep(0.01)
        IO.output(20,0)
        print ("LEFT")
    if (IO.input(22) == 0): 
        IO.output(16,1)
        time.sleep(0.01)
        IO.output(16,0)
        print ("UP")
    if (IO.input(17) == 1):
        IO.output(12,1)
        time.sleep(0.01)
        IO.output(12,0)
        print ("DOWN")

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

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

برای مشاهده توضیحات روی دوره مورد نظر کلیک کنید.

برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام آیرنکس عضو شوید.

تصویر از محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید) سعی میکنم تمام نظرات را پاسخ دهم.

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

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