آردوینو آموزش آردوینو پروژه های آردوینو

ساخت بازی سنجش زمان عکس العمل با آردوینو LCD کاراکتری و RGB LED

arduino-reaction-game-with-lcd-and-rgb-led-digispark-
نوشته شده توسط سپهر شیخ الاسلامی

بازی‌های کامپیوتری از سال ۱۹۸۳ تا کنون شهرت زیادی پیدا کرده اند و محبوبیت زیادی دارند. چه آن هایی که رایگان بوده و چه آن هایی که هزینه های سنگینی بر روی دوش خریداران گذاشته‌اند. در آموزش امروز می‌خواهم ساخت یک بازی بسیار جالب و اعتیاد آور را با برد آردوینو، LCD کاراکتری و یک میکروسوئیچ ساده را به شما کاربران به شما آموزش بدهم. بازی سنجش زمان با آردوینو از جمله بازی‌های جذاب است. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نحوه انجام بازی آردوینو


کل بازی سنجش زمان از آنجا آغاز می شود که بر روی LCD متنی با عنوان«برای شروع بازی کلید را نگه دارید» نمایش داده می شود. با نگه داشتن کلید وارد مرحله جالب بازی می‌شوید. همچنان که کلید را نگه داشته‌اید، LED RGB شروع به تغییر رنگ می‌کند، بازر هم صدای خاصی برای منحرف کردن شما، پخش می‌کند. همچنان که LED در حال تغییر رنگ است ناگهان رنگ آن قرمز شده و ثابت می‌ماند. شما باید به محض دیدن رنگ قرمز دستتان را از روی کلید بردارید. اگر زودتر از زمان اجرا این کار را انجام دهید، متنی با این عنوان بر روی LCD نمایش داده می‌شود. در غیر این صورت مقدار زمان تاخیر یا عکس العمل شما بر روی LCD نمایش داده می‌شود و در پایان رکورد شما بر روی LCD نمایش داده می‌شود. هم اکنون با فشار مجدد کلید بازی از نوع شروع می‌شود. جالب است، نه؟! باید به صورت عملی امتحان کنید.

ساخت بازی سنجش زمان عکس العمل با آردوینو و LCD کاراکتری - دیجی اسپارک

 


وسایل و قطعات مورد نیاز


وسایل لازم برای ساخت بازی با آردوینو Arduino Game Challenge - دیجی اسپارک

 


اتصالات مدار بازی سنجش زمان


اتصالات LCD کاراکتری

اتصالات LCD در بازی سنجش زمان آردوینو - دیجی اسپارک

اتصالات ماژول RGB

اتصالات LED RGB در بازی سنجش زمان آردوینو - دیجی اسپارک

اتصالات بازر

اتصالات بازر در بازی سنجش زمان آردوینو - دیجی اسپارک

اتصالات پوش باتن

اتصالات پوش باتن در بازی سنجش زمان آردوینو - دیجی اسپارک

 

اتصالات ولوم در بازی سنجش زمان آردوینو - دیجی اسپارک

 نکته: برای راه اندازی پتانسیومتر یکی از پایه های کناری را به +۵V و دیگر پایه کناری را به GND متصل کنید.پایه وسط هم همانطور که گفته شد به پین سوم LCD، یعنی VO متصل می شود.

وسایل لازم برای ساخت بازی با آردوینو Arduino Game Challenge - دیجی اسپارک


کدهای پروژه بازی با آردوینو


کدهای زیر را روی نرم افزار آردوینو کپی کرده و سپس آپلود کنید. چنانچه روش آپلود کدها روی آردوین را نمی‌دانید، به آموزش کار با آردوینو و نصب نرم افزار Arduino IDE مراجعه کنید.

 

#include <LiquidCrystal.h>
//Including LCD Library

#define RS 12
#define EN 11
#define D4 5
#define D5 4
#define D6 3
#define D7 2
LiquidCrystal lcd(RS , EN , D4 , D5 , D6 , D7);
//Defining LCD Pins 

#define LEDR 8 // Pin connected to red LED
#define LEDB 7 // Pin connected to blue LED
#define LEDG 6 // Pin connected to green LED
//Defining RGB LED Pins

#define Button 9 // Pin connected to pushbutton

int record = 32767;   //Record time

int COLOR;     // Variable color
int Beep;     //For Buzzer
int PSE;     // Variable pause
int TME;    // Time
int RTME;  //Reaction Time
int award;//Award text on LCD

void setup() 
{
lcd.begin(16, 2);
//Initialize lcd.Define that LCD has 16 Characters and 2 Lines

pinMode(LEDR, OUTPUT); 
pinMode(LEDB, OUTPUT);
pinMode(LEDG, OUTPUT);
// Set LED Pins as output

pinMode(Button, INPUT_PULLUP); // Set pushbutton as input

digitalWrite(LEDR, LOW); 
digitalWrite(LEDB, LOW);
digitalWrite(LEDG, LOW);
// Switch on all LED colors
}
void loop() 
{
lcd.clear(); // Clear screen
lcd.print("Hold Button to");  // Display message on LCD screen
lcd.setCursor(0, 1);         // Move to second line
lcd.print("start.");        // Display message on LCD screen

  while (digitalRead(Button) == HIGH) //Test does not start until button is pushed(and held)
  {
  tone(13, 1200, 30);
  delay(1400);
  noTone(13);
  }
  
lcd.clear();

digitalWrite(LEDR, LOW); // Switch off start light
digitalWrite(LEDB, LOW);
digitalWrite(LEDG,LOW);

randomSeed(analogRead(0)); // Random noise from pin 0

COLOR = random(1, 4); // Generate random color

PSE = random(500, 1200); // Set random pause duration between lights
// Repeat this loop while color is green or blue AND pushbutton is held

  while (COLOR != 1 && digitalRead(Button) == LOW) 
  {
  digitalWrite(LEDG, LOW);
  digitalWrite(LEDB, LOW);
  delay(PSE);
  randomSeed(analogRead(0));
  Beep = random(1, 4); // Select random beep from buzzer
  // (buzzer beeps 1 in 3 times)
  PSE = random(750, 1200); // Select random pause duration between
  // lights (to increase surprise effect)
    if (Beep == 1) 
    {
    tone(13, 1600, 350);
    delay(750);
    noTone(13);
    }
    if (COLOR == 2) 
    {
    digitalWrite(LEDG, HIGH);
    }
    if (COLOR == 3) 
    {
    digitalWrite(LEDB, HIGH);
    }

  delay(PSE);
  randomSeed(analogRead(0));
  COLOR = random(1, 4); // Select random color
  }
  
// Execute this loop if color is red
  if (COLOR == 1 && digitalRead(Button) == LOW) 
  {
  digitalWrite(LEDG, LOW);
  digitalWrite(LEDB, LOW);
  delay(PSE);
  TME = millis(); // Record time since program has started
  digitalWrite(LEDR, HIGH);
    while (digitalRead(Button) == LOW) { // Runs until button is
    // released, recording the
    // reaction time
    delay(1);
    }
  lcd.display();
  RTME = millis() - TME; // Reaction time in ms
  lcd.print("Reaction Time:"); // Display on LCD screen
  lcd.setCursor(0, 1);
  lcd.print(RTME);
  lcd.print("ms");
  if(RTME < record)
    {
    record = RTME ;
    award = 1;
    } else
      {
      record = record;
      award = 0 ;
      }
  delay(1700);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Record: ");
  lcd.print(record);
  lcd.print("ms");
  lcd.setCursor(0,1);
    if(award == 1)
    {
    lcd.print("Record Broke!!!");  
    } else
      {
      lcd.print("Push Button ..."); 
      }
  }
// Execute if color is NOT red but the pushbutton is released
  if (COLOR != 1 && digitalRead(Button) == HIGH)
  {
  lcd.print("Released too");
  lcd.setCursor(0, 1); // Move to second line
  lcd.print("soon!!!");
  tone(13, 3000, 1500);
  delay(500);
  noTone(13);
  }
// Test does not restart until the button is pushed once
  while (digitalRead(Button) == HIGH)
  {
  delay(10);
  }
digitalWrite(LEDR, LOW); // Reset all lights to begin again
digitalWrite(LEDB, LOW);
digitalWrite(LEDG, LOW);
lcd.clear();
lcd.print("Hold Button to");
lcd.setCursor(0, 1);
lcd.print("start.");
int Time = 0;
delay(1000);
}

نرم افزار Arduino IDE را باز کنید.تمام کد های داخل آن را پاک کرده و کد های بالا را جایگزین کنید.برد خود را از منوی Tools –> Board انتخاب کنید و کد را آپلود کنید.اگر چگونگی کار با نرم افزار Arduino IDE را نمی دانید، کافیست به آموزش کار با برد آردوینو و نصب نرم افزار Arduino IDE  مراجعه کنید.

ساخت بازی سنجش زمان عکس العمل با آردوینو و LCD کاراکتری و RGB LED - دیجی اسپارک

 


کتابخانه‌های مورد نیاز


  به دلیل استفاده از LCD کاراکتری، نیاز داریم تا کتابخانه آن را به برنامه اضافه کنیم.کتابخانه LCD کاراکتری به طور پیش فرض در نرم افزار Arduino IDE موجود می باشد و نیازی به نصب آن نیست.برای این کد کتابخانه دیگری نیاز نخواهیم داشت.

#include <LiquidCrystal.h>

شما می توانید با نوشتن خط بالا کتابخانه را به برنامه اضافه کنید یا از منو:

Sketch –> Include Library  –> LiquidCrystal

کتابخانه را ضمیمه برنامه کنید.

 


توضیحات کد بازی سنجش زمان


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

#define RS 12
#define EN 11
#define D4 5
#define D5 4
#define D6 3
#define D7 2
LiquidCrystal lcd(RS , EN , D4 , D5 , D6 , D7);

حال نوبت به تعیین پین های RGB LED می رسد.

#define LEDR 8 // Pin connected to red LED
#define LEDB 7 // Pin connected to blue LED
#define LEDG 6 // Pin connected to green LED
//Defining RGB LED Pins

سپس پین متصل به پوش باتن را تعیین می کنیم.

#define Button 9 // Pin connected to pushbutton

متغییر هایی که برای اجرای برنامه نیاز داریم را نیز، اضافه می کنیم.(مقدار رکورد را در ابتدا در بیشترین حالت قرار می دهیم تا بتوانیم بعدا آن را با مقدار واقعی تاخیر مقایسه کنیم).

int record = 32767;   //Record time
int COLOR;     // Variable color
int Beep;     //For Buzzer
int PSE;     // Variable pause
int TME;    // Time
int RTME;  //Reaction Time
int award;//Award text on LCD

در تابع setup() ابعاد LCD را ۱۶×۲ تعیین کرده و به آن دستور شروع کار می دهیم؛ همچنین پین هایRGB LED  به عنوان خروجی تعریف می کنیم.پین متصل به پوش باتن هم به صورت ورودی تعریف می کنیم و تمام رنگ های RGB LED را نیز خاموش می کنیم.

void setup() 
{
lcd.begin(16, 2);
//Initialize lcd.Define that LCD has 16 Characters and 2 Lines
pinMode(LEDR, OUTPUT); 
pinMode(LEDB, OUTPUT);
pinMode(LEDG, OUTPUT);
// Set LED Pins as output
pinMode(Button, INPUT_PULLUP); // Set pushbutton as input
digitalWrite(LEDR, LOW); 
digitalWrite(LEDB, LOW);
digitalWrite(LEDG, LOW);
// Switch on all LED colors
{

حال دیگر وقت آن رسیده که بنشینیم و از ساخته خود لذت ببریم.قطعات را طبق مدار ارائه شده در بالا به یکدیگر متصل کنید.کد بالا را نیز بر روی آردوینو خود آپلود کنید.حال آردوینو را نیز به مقدار خود اضافه کنید. تغذیه برد را وصل کنید و از بازی لذت ببرید.

وسایل لازم برای ساخت بازی با آردوینو Arduino Game Challenge - دیجی اسپارک

 


نکته ای جالب!!


از نتیجه بازی سنجش زمان، یعنی مقدار تاخیر شما در برداشتن دست از روی کلید می توان نتیجه جالبی گرفت. تا جایی که می توانید سریع عمل کنید و عدد رکورد خود را پایین بیاورید،در این صورت به گونه ای زمان نوشته شده زمان ارسال پیام عصبی از چشم به مغز، مغز به ماهیچه و عمل ماهیچه است.

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

سپهر شیخ الاسلامی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۳ دیدگاه

  • سلام توی وسایل مورد نیاز بورد و‌کابل نبود
    من سفارش ندادم الان اومده لطفا اگه احتیاج حتما تصحیحش کنید کسی دیگه مشکل من رو نداشته باشه؛

    و یه سوال اینکه ال سی رو باید پایه هاش لحیم کنم؟
    چجوری باید ال سی دی رو پایه هاشو وصل کنم؟
    ممنون میشم کمکم کنید

    • سلام.
      برای متصل کردن پایه های LCD می توانید ازهدر پین های ۱۶ تایی نری-نری استفاده کنید. کافیست از لینک زیر پین هدر ۴۰ تایی را خریداری کنید بعد با استفاده از سیم چین ۱۶ تا از آن ها رو جدا کنید و بر روی LCD لحیم کنید.
      https://bit.ly/2D9xsSs
      برای متصل کردن پایه های LCD نیز می توانید از سیم های جامپر نری-مادگی استفاده کنید. برای خرید سیم های جامپر نری-مادگی روی لینک زیر کلیک کنید.
      https://bit.ly/3lqjOeM

  • سلام
    پایه های پوش باتن فرقی نمیکنن؟تشخیصش چجوری هس؟
    و اینکه برای پین های اردوینو از پین دیجیتال فقط استفاده کنم؟
    تغذیه مدار باید چجوری انجام بشه؟

    • با فشردن کلید دوپایه نزدیکتر به هم متصل میشنود. دوپایه ای که فاصله بیشتری دارن به یکدیگر متصل هستند.
      اتصلات مدار به آردوینو در بخش اتصلات مدار بازی سنجش زمان در دسترس می باشد.
      برای تغذیه مدار هم می توانید از کابل USB استفاده کنید. لینک کابل USB =
      https://bit.ly/3lrI0gP
      همچنین می توانید از جک دایره ای و باتری کتابی استفاده کنید.
      باتری کتابی= https://bit.ly/3jj78EB
      کابل تبدیل باتری کتابی به جک دایره ای = https://bit.ly/2D7JFac

  • سلام
    من چند بار باز کردم و بستم
    برد اردوینو صدا بوق میده وقتیم پوش باتن فشار میدم صدا قطع میشه

    ولی نه ال ای دی روشن نمیشه
    دقیقا طبق همین نقشه بستم
    و مقاومت ١٠ کیلو رو کجا باید استفادع کنیم اصلا ننوشتین
    توروخدا جواب بدین چند تا پیام نوشتم هیچکدوم رو جواب ندادین ; برای پروژه دانشگاه میخوام وقت ندارم

    • ۱- حتما کد آپلود شده بر روی آردوینو رو بررسی کنید که درست باشه و تغییری نکرده باشه.
      ۲- اتصالتون رو چندین بار بررسی کنید.
      ۳- در نظر داشته باشید که LED RGB شما حتما باید از نوع کاتد مشترک باشد.
      ۴- اطمینان حاصل کنید که بازی رو درست اجرا می کنید.
      در بخش اتصالات پوش باتن نحوه اتصال مقاومت ۱۰ کیلواهم توضیح داده شده که باید بین یکی از پین های پوش باتن و ۵ولت آردوینو قرار بگیره.

    • نحوه انجام بازی به این صورت است:
      کل بازی سنجش زمان از آنجا آغاز می شود که بر روی LCD متنی با عنوان«برای شروع بازی کلید را نگه دارید» نمایش داده می شود. با نگه داشتن کلید وارد مرحله جالب بازی می‌شوید. همچنان که کلید را نگه داشته‌اید، LED RGB شروع به تغییر رنگ می‌کند، بازر هم صدای خاصی برای منحرف کردن شما، پخش می‌کند. همچنان که LED در حال تغییر رنگ است ناگهان رنگ آن قرمز شده و ثابت می‌ماند. شما باید به محض دیدن رنگ قرمز دستتان را از روی کلید بردارید. اگر زودتر از زمان اجرا این کار را انجام دهید، متنی با این عنوان بر روی LCD نمایش داده می‌شود. در غیر این صورت مقدار زمان تاخیر یا عکس العمل شما بر روی LCD نمایش داده می‌شود و در پایان رکورد شما بر روی LCD نمایش داده می‌شود. هم اکنون با فشار مجدد کلید بازی از نوع شروع می‌شود. جالب است، نه؟! باید به صورت عملی امتحان کنید.

    • در ضمن اگر تصاویر اتصالات رو مشاهده نمی کنید شاید به دلیل سرعت اینترنت باشد.
      کافیست مقداری صبر کنید تا تصاویر نمایش داده شوند سپس مدار خود را با توجه به آن ها ببندید

  • دوست عزیز توی کارهایی که در سایت قرار میدی حتما ی شماتیکی از مدارت با برنامه هایی مثل fritzing بزار که اتصالاتت کاملا معلوم باشه

  • سلام .وقتتون بخیر. خسته نباشید.. ببخشید من این پروژه رو برای دانشگاهم انتخاب کردم.. ولی اصلا کار نمیکنه.. برنامه آپلود میشه ولی روی صفحه ال سی دی هیچ چیزی نمیاد فقط روشن میشه