آموزش الکترونیکآموزش رزبری پای

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

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

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

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

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

قسمت قبل : آموزش راه اندازی سون سگمنت با رزبری پای (Raspberry Pi #14)

قسمت اول : رزبری پای Raspberry Pi چیست؟ (آموزش کامل رزبری پای #1)

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

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

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

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

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

حتما ببینید :  PWM چیست ؟ آشنایی کامل با مدولاسیون عرض پالس

همانطور که می دانیم 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")

کد کامل :

حتما ببینید :  آموزش کامل مدار مالتی پلکسر (Multiplaxer چیست؟)

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

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")

فیلم عملکرد پروژه

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

قسمت بعد : راه اندازی سنسور مادون قرمز با رزبری پای (آموزش Raspberry pi #16)

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
برچسب ها

محمد رحیمی

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

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

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

دکمه بازگشت به بالا
بستن
بستن