راه اندازی ماژول جوی استیک{جلسه سی و سوم}
مقدمه
در این جلسه قصد داریم یک ماژول جوی استیک دو محوره را به وسیله آردوینو راه اندازی کنیم. نام این ماژول را احتمالا همه شما هنگامی که بازی های کامپیوتری انجام می دادید با آن آشنا شده اید. در شکل زیر تصویر آن را مشاهده می کنید. از این ماژول در رباتیک زیاد استفاده می شود.
در دسته بالا مشاهده می کنید که دو جوی استیک در قسمت زیرین آن قرار دارد. در این جلسه ما قصد داریم یکی از جوی استیک ها را به صورت تکی راه اندازی کنیم و آن را بخش های بعدی برای ساخت ربات ها مورد استفاده قرار دهیم.دسته بازی که در بالا مشاهده می کنید را می توانید به راحتی به یک گیرنده متصل کنید و ربات را کنترل کنید. برای درک کامل آن و برنامه نویسی این دسته راه اندازی ماژول جوی استیک زیر بسیار کاربردی است.
سخت افزار ماژول
در شکل زیر یک جوی استیک دو محوره آنالوگ را مشاهده می کنید. در دو محور X و محور Y قابلیت فنری دارد و با رها کردن دسته این جوی استیک به حالت عمودی بر میگردد.
برای انتقال حرکت دست در دو محور ایکس و وای دو پتانسيومتر 10 كيلو اهم به کار برده شده است. اين دو پتانسيومتر به عنوان تقسيم کننده ولتاژ قابل تنظيم به کار رفته اند كه ورودي آنالوگ دوبعدي را برای ما فراهم می کنند.
یک کلید فشاری نیز بر روی این جوی استیک قرار دارد که با اعمال فشار به جوی استیک فعال می شود و مستقل از دو پتانسیومتر است.
شیوه کار ماژول
در حقیقت جوی استیک برای چرخیدن در جهت دو محور درون دو ریل فلزی دایره ای قرار دارد که می تواند در هر دو جهت بچرخد.
نحوه کار بدین صورت است که با چرخاندن جوی استیک در دو جهت هر محور(ایکس و وای) مقدار پتانسیومتر تغییر میکند و بر روی یک مقدار مقاومت قرار میگیرد. اين تغييرات مقاومتی به وسیله پين آنالوگ آردوينو و مبدل آنالوگ به ديجيتال ADC آن قابل خواندن است.
از آنجایی که آردوينو يك مبدل ADC با رزولوشن ده بيت دارد، مقدار هر كانال آنالوگ (هر محور) ميتواند بين 0 تا 1023 تغيير کند. پس با حرکت دسته جوی استيک در جهت محور x از ابتدا تا انتهاي آن مقدار متغير x بين 0 تا 1023 تغيير می کند. به همین ترتیب در صورت حرکت دسته جوی استیک در جهت محور Y از ابتدا تا انتهای آن، مقدار پارامتر y بين 0 تا 1023 تغيير می کند. لحظه ای که دسته جوی استيک در مرکز قرار دارد، مقدار x و y تقريبا 512 است. در شکل زیر می توانید حرکت جوی استیک و پاسخ به موقعیت های مختلف را ببینید.
نکته: به دلیل اینکه جوی استیک فاقد مبدل آنالوگ به دیجیتال واقعی است تبدیل مقادیر آنالوگ به دیجیتال با دقت بالا صورت نمی پذیرد.
پین های ماژول
- GND به زمين آردوينو وصل ميشود.
- VCC تغذیه ماژول است که می توان به 5 ولت آردوینو وصل کرد.
- VRx خروجي جوي استيك در جهت محور x است یعنی میزان حرکت در جهت چپ و راست مشخص می شود.
- VRy خروجي جوي استيك در جهت محور عمودي y است یعنی میزان حرکت در جهت بالا و پایین را مشخص می کند.
- SW خروجي سوئيچ فشاري روی جو استيك می باشد. اين سوئيچ به زمين GND متصل است و در حالت دیفالت باز است (بصورت NO) یعنی اینکه در حالت عادي بصورت high ميباشد. در حالتی كه سوئيچ روي دسته فشار می دهیم، سوئيچ بسته و به زمين متصل ميشود و مقدار آن Low خواهد شد.
راه اندازی ماژول
پين VRx را به پين A0 آردوينو و VRy ماژول را به پين A1 آردوينو متصل ميكنيم.
برای شناخت فشرده شدن جوی استیک، پين SW جوي استيك را به پين ديجيتال D8 آردوينو متصل ميكنيم. براي تغذيه ماژول، پين VCC و GND آن را به ترمينال 5 ولت و زمين آردوينو متصل مي نماييم.
کد راه اندازی ماژول
برای کدنویسی داده های دو ورودي آنالوگ و يك خروجي ديجيتال را می خوانیم. پس از آن نتیجه را بر روی سریال مانیتور به نمایش می گذاریم.
// Arduino pin numbers const int SW_pin = 2; // digital pin connected to switch output const int X_pin = 0; // analog pin connected to X output const int Y_pin = 1; // analog pin connected to Y output void setup() { pinMode(SW_pin, INPUT); digitalWrite(SW_pin, HIGH); Serial.begin(9600); } void loop() { Serial.print("Switch: "); Serial.print(digitalRead(SW_pin)); Serial.print(" | "); Serial.print("X-axis: "); Serial.print(analogRead(X_pin)); Serial.print(" | "); Serial.print("Y-axis: "); Serial.print(analogRead(Y_pin)); Serial.println(" | "); delay(200); }
تحلیل کد
ابتدا پین ها را تعریف میکنیم. SW را به پين شماره 2 آردوينو و VRx و VRy را به پينهاي A0 و A1 وصل میکنیم.
// Arduino pin numbers const int SW_pin = 2; // digital pin connected to switch output const int X_pin = 0; // analog pin connected to X output const int Y_pin = 1; // analog pin connected to Y output
در ()setup پين SW به عنوان ورودي تعریف می کنیم و مقدار آن بصورت High است، زیرا تا موقعی كه مقدار SW بصورت High است به این معنا است كه سوئيچ فشاري هنوز فشرده نشده است. و در ادامه ارتباط سریال را آغاز میکنیم.
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
در ()loop، مقدار SW را با کمک تابع ()digitalRead و مقادير VRx و VRy را با کمک تابع ()analogRead می خوانیم و نتیجه را بر روی سریال مانیتور به نمایش می گذاریم.
Serial.print("Switch: "); Serial.print(digitalRead(SW_pin)); Serial.print(" | "); Serial.print("X-axis: "); Serial.print(analogRead(X_pin)); Serial.print(" | "); Serial.print("Y-axis: "); Serial.print(analogRead(Y_pin)); Serial.println(" | "); delay(200);
این جلسه نیز به پایان رسید. در صورتی که نیاز به اطلاعات اضافی داشتید می توانید در قسمت کامنت ها بیان نمایید تا مطالب وب سایت آپدیت شوند.
دوستان عزیز بیشتر دوره های مربوط به این وب سایت رایگان می باشد. در صورت تمایل می توانید به اندازه وسع مالی خود(هر چند ناچیز) جهت پرداخت هزینه های نگهداری وب سایت از ما حمایت کنید:
مثل همیشه میتوانید ما را در تلگرام و یا اینستاگرام دنبال کنید:
دیدگاهتان را بنویسید