بازیهای کامپیوتری از سال ۱۹۸۳ تا کنون شهرت زیادی پیدا کرده اند و محبوبیت زیادی دارند. چه آن هایی که رایگان بوده و چه آن هایی که هزینه های سنگینی بر روی دوش خریداران گذاشتهاند. در آموزش امروز میخواهم ساخت یک بازی بسیار جالب و اعتیاد آور را با برد آردوینو، LCD کاراکتری و یک میکروسوئیچ ساده را به شما کاربران به شما آموزش بدهم. بازی سنجش زمان با آردوینو از جمله بازیهای جذاب است. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نحوه انجام بازی آردوینو
کل بازی سنجش زمان از آنجا آغاز می شود که بر روی LCD متنی با عنوان«برای شروع بازی کلید را نگه دارید» نمایش داده می شود. با نگه داشتن کلید وارد مرحله جالب بازی میشوید. همچنان که کلید را نگه داشتهاید، LED RGB شروع به تغییر رنگ میکند، بازر هم صدای خاصی برای منحرف کردن شما، پخش میکند. همچنان که LED در حال تغییر رنگ است ناگهان رنگ آن قرمز شده و ثابت میماند. شما باید به محض دیدن رنگ قرمز دستتان را از روی کلید بردارید. اگر زودتر از زمان اجرا این کار را انجام دهید، متنی با این عنوان بر روی LCD نمایش داده میشود. در غیر این صورت مقدار زمان تاخیر یا عکس العمل شما بر روی LCD نمایش داده میشود و در پایان رکورد شما بر روی LCD نمایش داده میشود. هم اکنون با فشار مجدد کلید بازی از نوع شروع میشود. جالب است، نه؟! باید به صورت عملی امتحان کنید.
وسایل و قطعات مورد نیاز
- برد آردوینو (من از مدل UNO استفاده می کنم.ولی شما می توانید از هر مدل دیگری نیز استفاده کنید).
- LCD کاراکتری ۱۶×۲
- ماژول LED RGB کاتد مشترک (می توانید از نسخه غیر ماژول هم استفاده کنید به شرطی که یک مقاومت برای کنترل جریان مصرفی آن در مدار قرار دهید).
- پوش باتن ۴ پایه
- پتانسیومتر ۱K Ώ
- مقاومت ۲۲۰Ώ و ۱۰KΏ
اتصالات مدار بازی سنجش زمان
اتصالات LCD کاراکتری
اتصالات ماژول RGB
اتصالات بازر
اتصالات پوش باتن
نکته: برای راه اندازی پتانسیومتر یکی از پایه های کناری را به +۵V و دیگر پایه کناری را به GND متصل کنید.پایه وسط هم همانطور که گفته شد به پین سوم LCD، یعنی VO متصل می شود.
کدهای پروژه بازی با آردوینو
کدهای زیر را روی نرم افزار آردوینو کپی کرده و سپس آپلود کنید. چنانچه روش آپلود کدها روی آردوین را نمیدانید، به آموزش کار با آردوینو و نصب نرم افزار 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 کاراکتری، نیاز داریم تا کتابخانه آن را به برنامه اضافه کنیم.کتابخانه 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 {
حال دیگر وقت آن رسیده که بنشینیم و از ساخته خود لذت ببریم.قطعات را طبق مدار ارائه شده در بالا به یکدیگر متصل کنید.کد بالا را نیز بر روی آردوینو خود آپلود کنید.حال آردوینو را نیز به مقدار خود اضافه کنید. تغذیه برد را وصل کنید و از بازی لذت ببرید.
نکته ای جالب!!
از نتیجه بازی سنجش زمان، یعنی مقدار تاخیر شما در برداشتن دست از روی کلید می توان نتیجه جالبی گرفت. تا جایی که می توانید سریع عمل کنید و عدد رکورد خود را پایین بیاورید،در این صورت به گونه ای زمان نوشته شده زمان ارسال پیام عصبی از چشم به مغز، مغز به ماهیچه و عمل ماهیچه است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
می توان از ال ای دی آر جی بی آند استفاده کرد
سپاس از پیشنهاد شما
سلام توی وسایل مورد نیاز بورد وکابل نبود
من سفارش ندادم الان اومده لطفا اگه احتیاج حتما تصحیحش کنید کسی دیگه مشکل من رو نداشته باشه؛
و یه سوال اینکه ال سی رو باید پایه هاش لحیم کنم؟
چجوری باید ال سی دی رو پایه هاشو وصل کنم؟
ممنون میشم کمکم کنید
سلام.
برای متصل کردن پایه های 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 بزار که اتصالاتت کاملا معلوم باشه
با سلام و سپاس از شما
در این آموزش اتصالات به صورت متنی توضیح داده شده است. تا کاربر با دقت مطالب را مطالعه کند.
سلام .وقتتون بخیر. خسته نباشید.. ببخشید من این پروژه رو برای دانشگاهم انتخاب کردم.. ولی اصلا کار نمیکنه.. برنامه آپلود میشه ولی روی صفحه ال سی دی هیچ چیزی نمیاد فقط روشن میشه