پروژه های آردینو

اتصال جوی استیک Joystick به آردوینو

اتصال جوی استیک Joystick به آردوینو

اتصال جوی استیک Joystick به آردوینو

اتصال جوی استیک Joystick به آردوینو  ( اهرمک )

اولین چیزی که با گوش دادن به کلمه Joystick در ذهن ما خطور می کند کنترل کننده بازی است.

بله ، دقیقاً یکسان است و می تواند برای اهداف بازی استفاده شود.

به غیر از بازی ، این برنامه کاربردهای زیادی در لوازم الکترونیکی DIY دارد

. این جوی استیک چیزی به جز ترکیبی از دو پتانسیومتر برای صفحه X و Y نیست.

ولتاژ را از طریق پتانسیومتر می خواند و مقدار آنالوگ به آردوینو می دهد و با حرکت شافت جوی استیک (که به سادگی نشانگر پتانسیومتر است) مقدار آنالوگ تغییر می کند.

در این مدار ، ما فقط با کنترل چهار LED بر اساس حرکت Joystick با Arduino ارتباط برقرار می کنیم.

ما 4 LED را به گونه ای قرار داده ایم که جهت حرکت شافت جوی استیک را نشان دهد.

این جوی استیک همچنین دارای یک دکمه فشار است که می تواند برای اهداف مختلف دیگری استفاده شود یا بیکار بماند.

یک چراغ LED نیز به کلید جوی استیک متصل است ، زیرا دکمه جوی استیک فشار می دهد که چراغ LED روشن می شود.

لوازم مورد نیاز

 

ماژول جوی استیک

جوی استیک ها در شکل ها و اندازه های مختلف موجود هستند.

یک ماژول جوی استیک معمولی در شکل زیر نشان داده شده است.

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

و می توانیم جهت حرکت را با تفسیر این تغییرات ولتاژ با استفاده از برخی از میکروکنترلرها بدست آوریم.

پیش از این ما با جوی استیک با AVR و Raspberry Pi ارتباط برقرار کردیم.

همانطور که مشاهده می کنید این ماژول جوی استیک دارای دو محور است.

آنها محور X و Y هستند. هر محور JOYSTICK به یک پتانسیومتر یا گلدان نصب شده است.

نقاط میانی این گلدان ها به صورت Rx و Ry بیرون رانده می شوند.

بنابراین Rx و Ry نقاط متغیری به این گلدان ها هستند.

هنگامی که جوی استیک در حالت آماده به کار است ، Rx و Ry به عنوان یک تقسیم کننده ولتاژ عمل می کنند.

وقتی جوی استیک در امتداد محور افقی حرکت می کند ، ولتاژ در پین Rx تغییر می کند.

به طور مشابه ، هنگامی که در امتداد محور عمودی حرکت می کند ، ولتاژ در پایه Ry تغییر می کند.

بنابراین ما چهار جهت جوی استیک در دو خروجی ADC داریم.

هنگام جابجایی چوب ، ولتاژ هر پایه بسته به جهت زیاد یا پایین می رود.

در اینجا ، ما در حال اتصال این ماژول جوی استیک به Arduino UNO هستیم که دارای مکانیزم داخلی ADC (مبدل آنالوگ به دیجیتال) است ،

کد و توضیحات

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

در کد زیر ، محور X و Y از ماژول Joystick را به ترتیب برای پین آنالوگ A0 و A1 تعریف کرده ایم.

#define joyX A0
#define joyY A1

کنون ، در کد زیر ، ما در حال آماده سازی PIN 2 Arduino برای سوییچ (دکمه فشار) ماژول Joystick هستیم و مقدار دکمه و دکمه 1 در ابتدا 0 خواهد بود.

int button=2;
int buttonState = 0;
int buttonState1 = 0;

در کد زیر ، ما نرخ باود را روی 9600 تنظیم می کنیم و پین 7 را به عنوان پین خروجی و پین دکمه را به عنوان پین ورودی تعریف می کنیم.

در ابتدا ، تا زمانی که سوئیچ فشار داده نشود ، پین دکمه بالا خواهد ماند.

void setup() {
  pinMode(7,OUTPUT);
  pinMode(button,INPUT);
  digitalWrite(button, HIGH);
  Serial.begin(9600);
}

در اینجا ، در این کد ما در حال خواندن مقادیر از پین آنالوگ A0 و A1 و چاپ سریال هستیم.

int xValue = analogRead(joyX);
int yValue = analogRead(joyY);

  Serial.print(xValue);
  Serial.print("\t");
  Serial.println(yValue);

شرایط روشن و خاموش شدن LED طبق حرکت شافت جوی استیک ، در کد زیر تعریف شده است.

در اینجا ما فقط مقادیر آنالوگ ولتاژ را در پین A0 و A1 آردوینو می گیریم.

این مقادیر آنالوگ با حرکت جوی استیک تغییر می کنند و LED با توجه به حرکت جوی استیک درخشان می شود.

این شرایط برای حرکت شافت جوی استیک در جهت محور -Y است

if (xValue>=0 && yValue<=10){
    digitalWrite(10, HIGH);
  }
  else{digitalWrite(10, LOW);}

این شرایط برای حرکت شافت جوی استیک در جهت محور -X است

if (xValue<=10 && yValue>=500){
    digitalWrite(11, HIGH);
  }
  else{digitalWrite(11, LOW);}

این شرایط برای حرکت شافت جوی استیک در جهت محور X است

 if (xValue>=1020 && yValue>=500){
    digitalWrite(9, HIGH);
  }
  else{digitalWrite(9, LOW);}
این شرایط برای حرکت شافت جوی استیک در جهت محور Y است
if (xValue>=500 && yValue>=1020){
    digitalWrite(8, HIGH);
  }
  else{digitalWrite(8, LOW);}

هنگامی که شافت جوی استیک را به صورت مورب حرکت می دهیم ، یک موقعیت زمانی حاصل می شود که مقدار آنالوگ X و Y به ترتیب 1023 و 1023 باشد

، هر دو LED 9 و Pin 8 های می شوند

. زیرا شرایط LED را برآورده می کند.

بنابراین ، برای از بین بردن آن عدم تطابق شرط داده ایم که اگر مقدار (X ، Y) (1023 ، 1023) باشد ، هر دو LED در وضعیت خاموش باقی می مانند

if (xValue>=1020 && yValue>=1020)  {
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
  }

از شرایط زیر برای کار کردن LED متصل به کلید دکمه ای استفاده می شود.

همانطور که کلید Joystick را فشار می دهیم ، LED روشن و قفل می شود تا زمانی که دکمه آزاد شود.

اختیاری آن استفاده از کلید دکمه فشار روی ماژول جوی استیک است.

if (buttonState == LOW)  {
    Serial.println("Switch = High");
    digitalWrite(7, HIGH);
  }
  else{digitalWrite(7, LOW);}

کنترل LED ها با استفاده از جوی استیک با Arduino

پس از بارگذاری کد در Arduino و اتصال اجزای مطابق نمودار مدار ، اکنون می توانیم LED ها را با Joystick کنترل کنیم.

مطابق حرکت شافت جوی استیک می توانیم چهار LED را در هر جهت روشن کنیم.

جوی استیک دارای دو پتانسیومتر در داخل خود است ، یکی برای حرکت محور X و دیگری برای حرکت محور Y. هر پتانسیومتر از آردوینو 5 ولت می گیرد.

بنابراین وقتی جوی استیک را حرکت می دهیم ، مقدار ولتاژ تغییر می کند و مقدار آنالوگ در پین های آنالوگ A0 و A1 نیز تغییر می کند.

بنابراین ، از Arduino ، ما در حال خواندن مقدار آنالوگ برای محور X و Y هستیم و LED ها را به عنوان حرکت محور Joystick روشن می کنیم.

از سوئیچ فشار دکمه ماژول Joystick برای کنترل تک LED در مدار استفاده می شود

کد اتصال جوی استیک Joystick به آردوینو

 

#define joyX A0
#define joyY A1

int button=2;
int buttonState = 0;
int buttonState1 = 0;

void setup() {
pinMode(7,OUTPUT);
pinMode(button,INPUT);
digitalWrite(button, HIGH);
Serial.begin(9600);
}

void loop() {
int xValue = analogRead(joyX);
int yValue = analogRead(joyY);

Serial.print(xValue);
Serial.print(“\t”);
Serial.println(yValue);

buttonState = digitalRead(button);
Serial.println(buttonState);
if (xValue>=0 && yValue<=10)
{
digitalWrite(10, HIGH);
}
else{digitalWrite(10, LOW);}

  if (xValue<=10 && yValue>=500)
{
digitalWrite(11, HIGH);
}
else{digitalWrite(11, LOW);}

  if (xValue>=1020 && yValue>=500)
{
digitalWrite(9, HIGH);
}
else{digitalWrite(9, LOW);}

  if (xValue>=500 && yValue>=1020)
{
digitalWrite(8, HIGH);
}
else{digitalWrite(8, LOW);}

  if (xValue>=1020 && yValue>=1020)
{
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}

  if (buttonState == LOW)
{
Serial.println(“Switch = High”);
digitalWrite(7, HIGH);
}
else{digitalWrite(7, LOW);}
buttonState1 = digitalRead(7);
Serial.println(buttonState1);
delay(50);
}

این پروژه توسط گروه وی تات انجام شده wetat.ir

کپی با دکر منبع بلامانع است

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

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