جستجو برای:
  • شیراز کدرز
    • Empire
    • سیاست حریم خصوصی
  • آموزش ها
    • آموزش آردوینو مقدماتی
      • آموزش آردوینو جلسه اول
      • آموزش آردوینو جلسه دوم
      • آموزش آردوینو جلسه سوم
      • آموزش آردوینو جلسه چهارم
      • آموزش آردوینو جلسه پنجم
      • آموزش آردوینو جلسه ششم
      • آموزش آردوینو جلسه هفتم
      • آموزش آردوینو جلسه هشتم
      • آموزش آردوینو جلسه نهم
      • آموزش آردوینو جلسه دهم
    • آموزش آردوینو مبتدی
      • آموزش آردوینو جلسه یازدهم
      • آموزش آردوینو جلسه دوازدهم
      • آموزش آردوینو جلسه سیزدهم
    • آموزش الکترونیک | بایگانی
      • آموزش الکترونیک مقدماتی درس 1
      • آموزش الکترونیک مقدماتی درس 2
      • آموزش الکترونیک مقدماتی درس 3
      • آموزش الکترونیک مقدماتی درس 4
  • حساب کاربری
    • حساب کاربری من
    • پنل کاربری پیشرفته
    • کیف پول
    • سفارش‌ها
    • خروج
  • فروشگاه
    • محصولات
شیراز کدرز
  • شیراز کدرز
    • Empire
    • سیاست حریم خصوصی
  • آموزش ها
    • آموزش آردوینو مقدماتی
      • آموزش آردوینو جلسه اول
      • آموزش آردوینو جلسه دوم
      • آموزش آردوینو جلسه سوم
      • آموزش آردوینو جلسه چهارم
      • آموزش آردوینو جلسه پنجم
      • آموزش آردوینو جلسه ششم
      • آموزش آردوینو جلسه هفتم
      • آموزش آردوینو جلسه هشتم
      • آموزش آردوینو جلسه نهم
      • آموزش آردوینو جلسه دهم
    • آموزش آردوینو مبتدی
      • آموزش آردوینو جلسه یازدهم
      • آموزش آردوینو جلسه دوازدهم
      • آموزش آردوینو جلسه سیزدهم
    • آموزش الکترونیک | بایگانی
      • آموزش الکترونیک مقدماتی درس 1
      • آموزش الکترونیک مقدماتی درس 2
      • آموزش الکترونیک مقدماتی درس 3
      • آموزش الکترونیک مقدماتی درس 4
  • حساب کاربری
    • حساب کاربری من
    • پنل کاربری پیشرفته
    • کیف پول
    • سفارش‌ها
    • خروج
  • فروشگاه
    • محصولات
0

ورود و ثبت نام

وبلاگ

آموزش آردوینو جلسه دهم

23 تیر 1399
ارسال شده توسط admin_hb
آموزش آردوینو | مقدماتی ، همه دسته ها
363 بازدید

در جلسه هشتم در مورد راه اندازی سروو موتور با خواندن مقادیر آنالوگ بحث کردیم؛ در این جلسه به وسیله پین های آنالوگ مقادیر ماژول جوی استیک را میخوانیم.

اگر به دسته های بازی دقت کرده باشید متوجه یک یا دو عدد جوی استیک بر روی دسته ها شده اید که اکثر افراد آن را با عنوان شوک یا آنالوگ میشناسند!

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

در دو تصویر زیر یک نمونه جوی استیک بر روی دسته بازی (گیم پد) و ماژول جوی استیک را مشاهده میکنید. ما از این ماژول برای اتصال به آردوینو استفاده میکنیم:

جوی استیک
ماژول جوی استیک دو محوره
جوی استیک
جوی استیک گیم پد

درک ساختار جوی استیک

اگر بخواهیم ساختار جوی استیک ها را بررسی کنیم میتوان گفت جوی استیک از دو هعدد پوتانسیومتر تشکیل شده است که با تغییر موقعیت جوی استیک مقدار مقاومت آنها تغییر میکند؛ در نتیجه میتوان مقدار آنها را به وسیله پین آنالوگ آردوینو خواند!

در تصویر زیر نمایی از ساختار جوی استیک را مشاهده میکنید:

جوی استیک
نمای فرضی جوی استیک

همانطور که میبینید یک جوی استیک دارای دو عدد پوتانسیومتر است که دو سیم برای تغذیه – و + و دو سیم برای خروجی x و y است. همچنین در بیشتر از ماژول های جوی استیک یک عدد کلید موجود است که با فشار دادن جوی استیک میتوان بر روی آن کلیک کرد.

راه اندازی

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

جوی استیک
نمودار مقادری جوی استیک

در تصویر بالا مقادیر جوی استیک را مشاهده میکنید. اگر تغذیه ماژول را به درستی متصل کنید، با تغییر جهت اهرم مقدار مقاومت خروجی در پین های VRX و VRY ماژول تغییر میکند.

اگر مقدار Y برابر با 1023 باشد یعنی جوی استیک در موقعیت بالا و اگر مقدار Y برابر با 0 باشد یعنی در موقعیت پایین است.

اگر مقدار X برابر با 1023 باشد یعنی جوی استیک در موقعیت چپ و اگر مقدار X برابر با 0 باشد یعنی در موقعیت راست است.

مقدار خروجی X و Y ماژول در حالت عادی به طوری که به هیچ جهتی مایل نباشد برابر با 512 است (صرف نظر از خطا و نویز)

خواندن مقادیر

برای خواندن مقدار جوی استیک از تکه کد زیر استفاده کنید. به جای XPIN و YPIN به ترتیب پین VRX و پین VRY ماژول را بنویسید و توجه کنید که تنها از پین آنالوگ برای این این کار استفاده کنید (مثلا A0 و A1)

Serial.print("X: " + (String)analogRead(XPIN) + " | ");
Serial.println("Y: " + (String)analogRead(YPIN));  

نکته: با استفاده از (String) قبل از متغیر ها میتوانید آنها را به رشته تبدیل کنید. مثال:

int number = 2020;
String year = (String)number; // Convert 'int' to 'String'  

سورس کد

مشاهده آنلاین کد

const int XPIN = A0;
const int YPIN = A1;
const int SWPIN = 2;

void setup(){

     Serial.begin(9600);

     pinMode(SWPIN, INPUT_PULLUP);

}

void loop(){

     int valy = analogRead(YPIN);
     int valx = analogRead(XPIN);
     
     if(valx == 1023){
          Serial.println("Left");
     }
     
     if(valx == 0){
          Serial.println("Right");
     }
     
     if(valy == 1023){
          Serial.println("Up");
     }
     
     if(valy == 0){
          Serial.println("Down");
     }
     
     if(digitalRead(SWPIN) == LOW)
          Serial.println("Button pressed");
     }

}  

توضیحات

در سه خط اول چندین ثابت تعریف کرده ایم و شماره پین های مورد نظر را نوشته ایم. همچنین میتوانید از کد زیر برای این کار استفاده کنید:

#define XPIN  A0
#define YPIN  A1
#define SWPIN 2

// به جای

const int XPIN = A0;
const int YPIN = A1;
const int SWPIN = 2; 

در خط 9 پین SWPIN را به عنوان پول آپ در نظر گرفته ایم. پول آپ یکی از اصطلاحاتی است که مربوط به سخت افزار میشود. با این کار مقاومت پول آپ آردوینو را فعال میکنیم که باعث میشود مقدار پیشفرض پین مورد نظر HIGH قرار بگیرد.

فعلا در همین حد بدانید که با این کار پین SWPIN در حالت HIGH قرار میگیرد و با تغییر حالت به LOW مقدار آن را میخوانم.

pinMode(SWPIN, INPUT_PULLUP); 

در خط 15 و 16 دو متغیر تعریف کرده ایم و مقدار آنالوگ پین های XPIN و YPIN را در آنها ذخیره کرده ایم. توجه داشته باشید این دو متغیر در تابع loop تعریف شده اند و در تابع دیگری در دسترس نیستند. همچنین مقدار آن ها پس از هربار شروع  این تابع تغییر میکند.

int valy = analogRead(YPIN);
int valx = analogRead(XPIN); 

در خطوط 18 تا 29 با قرار دادن چند شرط مقادیر را تفکیک کرده ایم؛ به اینصورت که اگر مقدار x برابر با 1023 بود جهت چپ و اگر مقدار x برابر با 0 بود جهت راست را در سریال چاپ کند. این روند برای y هم همینطور است.

if(valx == 1023){
     Serial.println("Left");
}

if(valx == 0){
     Serial.println("Right");
}

if(valy == 1023){
     Serial.println("Up");
}

if(valy == 0){
     Serial.println("Down");
} 

و در آخر مقدار کلید را بررسی میکنیم و درصورت LOWf بودن آن متنی را در سریال چاپ کند:

if(digitalRead(SWPIN) == LOW)
     Serial.println("Button pressed");
} 

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

درصورت داشتن هرگونه سوال، نظر، انتقاد و پیشنهاد در بخش نظرات با ما در ارتباط باشید.

جلسه یازدهم
قبلی
اشتراک گذاری:
دانلود فایل کامل این جلسه
دانلود فایل
فایل کامل (جلسه دهم)

پسورد فایل : ندارد گزارش خرابی لینک

برچسب ها: آموزش آردوینوآنالوگ آردوینوجوی استیکجوی استیک دو محوره
درباره admin_hb

حسین بذرافکن هستم، برنامه نویس، فریلنسر و عاشق الکترونیک...

نوشته های بیشتر از admin_hb
در تلگرام
کانال ما را دنبال کنید!
در اینستاگرام
ما را دنبال کنید!
مطالب زیر را حتما بخوانید
  • آموزش آردوینو جلسه سیزدهم

    236 بازدید

  • آموزش آردوینو جلسه دوازدهم

    249 بازدید

  • آموزش الکترونیک مقدماتی درس 3

    355 بازدید

  • آموزش الکترونیک مقدماتی درس 2

    315 بازدید

  • آموزش الکترونیک مقدماتی درس 1

    260 بازدید

  • آموزش آردوینو جلسه یازدهم

    469 بازدید

قدیمی تر آموزش آردوینو جلسه نهم
جدیدتر آموزش ساخت بیت مپ تصاویر برای نمایش روی LCD

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:

امروز، یکشنبه ۱۷ اسفند ۹۹ ساعت ۱۲:۱۷

نوشته های تازه

آموزش آردوینو جلسه سیزدهم

در جلسه قبل راه اندازی نمایشگر نوکیا را یاد گرفتیم و به وسیله آن ساعت

بیشتر »
14 آذر 1399

آموزش آردوینو جلسه دوازدهم

در جلسه قبل با توابع کشیدن اشکال در نمایشگر Nokia 5110 آشنا شدیم. در این

بیشتر »
11 آذر 1399

آموزش الکترونیک مقدماتی درس 3

آموزش الکترونیک مقدماتی درس 3 در جلسات گذشته با مباحث بسیاری آشنا شدیم؛ در این

بیشتر »
3 مهر 1399

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت