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

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

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

وقتی کلمه جوی‌استیک را می‌شنویم، اولین چیزی که یادمان می‌آید، دسته بازی می‌باشد. البته کاملاً هم درست است زیرا از ماژول‌های جوی‌استیک برای بازی کردن استفاده می‌شود. جدای از این کاربرد، این ماژول‌ها کارایی‌های دیگری نیز دارند از این رو در پروژه راه اندازی ماژول جوی استیک دو محوره با آردوینو، می‌خواهیم شما را با نحوه فعالسازی این ماژول آشنا کنیم؛ پس با بلاگ بهنام رباتیک همراه باشید.

فهرست مطالب

ماژول جوی‌استیک استفاده شده در این پروژه دو پتانسیومتر دارد که در محورهای X و Y حرکت می‌کنند. این ماژول ولتاژ ورودی از پتانسیومترها را تشخیص و داده‌های آنالوگ را به آردوینو می‌دهد. سپس این داده‌ها در زمان تغییر شفت جوی‌استیک، با تغییراتی همراه می‌شوند.

در این پروژه، ماژول جوی‌استیک را با کنترل کردن چهار LED به آردوینو وصل کرده‌ایم. ما در اینجا 4 عدد LED را به‌گونه‌ای قرار داده‌ایم که مسیر تغییر حرکت شفت جوی‌استیک را نشان می‌دهند. این ماژول همچنین، یک دکمه فشاری یا پوش باتن دارد که می‌تواند کارهای مختلفی انجام دهد یا صرفاً بدون مصرف باشد. به علاوه، یک LED تکی هم به دکمه جوی‌استیک متصل شده تا وقتی آن را فشار می‌دهیم، LED روشن شود.

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

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

می‌بایست سیم‌کشی مدار این پروژه آردوینو را مطابق تصویر زیر انجام دهید.

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

آشنایی با ماژول‌های جوی‌استیک

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

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

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

وقتی جوی‌استیک به سمت محور افقی حرکت می‌کند، ولتاژ پین Rx و وقتی این ماژول در سمت محور عمودی حرکت می‌کند، ولتاژ پین Ry عوض می‌شود. با این اوصاف، در اینجا ما چهار مسیر جوی‌استیک با دو خروجی ADC داریم. زمانی که جوی‌استیک تکان می‌خورد، ولتاژ هر پین با توجه به مسیر به حالت High یا Low درمی‌آید.

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

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

کد زیر را در نرم‌افزار Arduino IDE آپلود کنید تا بتوانید LEDهای متصل به ماژول جوی‌استیک را کنترل نمایید.

				
					#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);

}


				
			

در صورتی که کدهای داده شده به‌درستی آپلود شده باشند، به آسانی می‌توانید هر کدام از چراغ‌های LED را در مسیر مربوطه روشن کنید. همان‌طور که گفتیم، این ماژول جوی‌استیک دو پتانسیومتر دارد؛ یکی برای محور X و دیگری برای محور Y. هر کدام از پتانسیومترها از آردوینو 5 ولت ولتاژ دریافت می‌کنند بنابراین وقتی جوی‌استیک را تکان می‌دهیم، مقدار ولتاژ و مقدار آنالوگ در پین‌های A0 و A1 عوض می‌شود.

با این کارها، می‌توان در آردوینو شاهد تغییرات در مقادیر آنالوگ X و Y و خاموش و روشن چراغ‌های LED بود. دکمه فشاری ماژول جوی‌استیک هم برای کنترل کردن چراغ LED تکی که به آن اشاره کردیم، به کار می‌رود.

توضیحات کد پروژه راه اندازی ماژول جوی استیک دو محوره با آردوینو

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

				
					#define joyX A0
#define joyY A1
				
			

در ادامه هم پین شماره 2 آردوینو را برای دکمه فشاری ماژول جوی‌استیک به کار برده‌ایم و مقادیر buttonstate و buttonstate1 در ابتدا روی 0 تنظیم شده است.

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

در قسمت Setup، بادریت روی 9600 تنظیم شده و پین شماره 7 به عنوان پین خروجی و پین دکمه به عنوان پین ورودی معین گردیده‌اند. لازم به ذکر است که تا زمان فشار داده شدن دکمه، حالت آن روی وضعیت High قرار خواهد گرفت.

				
					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 نیز روشن می‌شود.

مقادیر X و Y ماژول جوی استیک
مقادیر X و Y ماژول جوی استیک

شرط جابه‌جایی شفت جوی‌استیک در محور -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);}
				
			

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

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

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

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

وقتی شفت جوی‌استیک به صورت مورب جابه‌جا می‌شود، یک موقعیت تشخیص داده شده و مقادیر آنالوگ محورهای X و Y به ترتیب 1023 و 1023 خواهد بود و LEDهای پین‌های 9 و 8 روشن خواهند شد زیرا شرایط مربوطه اجرا می‌شوند. بر این اساس، برای جلوگیری از رخ دادن این اتفاق، شرط زیر را ایجاد کرده‌ایم تا اگر مقدار آنالوگ محورهای X و Y روی 1023 ثابت ماند، LED روشن نشود و خاموش بماند.

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

کد زیر نیز برای کنترل وضعیت LED در پروژه راه اندازی ماژول جوی استیک دو محوره با آردوینو وصل شده به پوش باتن به کار می‌رود. همزمانی که این دکمه را می‌فشاریم، LED روشن می‌ماند و وقتی آن را رها می‌کنیم، خاموش می‌شود. لازم به ذکر است که استفاده از این دکمه فشاری در ماژول جوی‌استیک کاملاً اختیاری است.

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

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

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