فهرست مطالب:

Arduino: Pinball Machine: 8 مرحله (همراه با تصاویر)
Arduino: Pinball Machine: 8 مرحله (همراه با تصاویر)

تصویری: Arduino: Pinball Machine: 8 مرحله (همراه با تصاویر)

تصویری: Arduino: Pinball Machine: 8 مرحله (همراه با تصاویر)
تصویری: CS50 2014 - Week 7 2024, نوامبر
Anonim
Image
Image

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

در این راهنما من روند توسعه خود را توضیح خواهم داد ، بنابراین شاید یکی از شما مشتاقان بتواند چیزی شبیه به هم ایجاد کند.

مرحله 1: ساختن پرونده

ساخت پرونده
ساخت پرونده

بیایید با مورد دستگاه پین بال شروع کنیم. من یک ساختمان نسبتاً ساده درست کردم. من یک صفحه پایین را اره کردم و از 4 ستون چوبی کوچک در گوشه ها برای اتصال قطعات دیوار استفاده کردم. اندازه کیس شما به انتخاب خود شماست ، من تصمیم گرفتم آن را کمی کوچکتر از یک دستگاه پین بال دزد اصلی کنم ، زیرا قصد نداشتم وسایل فوق العاده فوق العاده ای برای پر کردن فضا اضافه کنم. من از هر دو پیچ و چسب برای ثابت نگه داشتن قاب تا حد امکان استفاده کردم. در قسمت پشت من دو سوراخ در قطعه کف دو پا ایجاد کردم که به دستگاه پین بال دنده شیب نمادین می بخشد. باز هم ، ارتفاع پاها به خود شما بستگی دارد. هرچه پاها بلندتر باشد ، توپ سریعتر (به سمت پایین) می چرخد.

مرحله 2: ساخت Flipper Mechanic

ساخت مکانیک فلیپر
ساخت مکانیک فلیپر

از آنجا که می خواستم هزینه این پروژه را محدود کنم ، تصمیم گرفتم به جای فلیپ های الکترونیکی ، فلپپرهای کاملاً مکانیکی بسازم. اگر به فلپرهای الکترونیکی علاقه دارید ، می توانید از ساختمانی استفاده کنید که تا حدودی یکسان است ، اما به اصطلاح "سلونوئید" به آن متصل شده است (شیر برقی با قدرت کافی برای کنترل فلپرها برای من گران بود).

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

من همچنین دو سوراخ در هر دو دیواره جانبی به موازات سوراخ های فلپر حفر کردم. از این سوراخ ها برای دو دکمه فلیپر استفاده می شود.

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

مرحله 3: قرار دادن دیوارها

قرار دادن دیوارها
قرار دادن دیوارها

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

مرحله 4: اضافه کردن بلوک های امتیاز

اضافه کردن بلوک های امتیاز
اضافه کردن بلوک های امتیاز
اضافه کردن بلوک های امتیاز
اضافه کردن بلوک های امتیاز

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

من تکه کوچکی از جارو را بریدم و سیم مسی به دور آن پیچیدم. آردوینو این سیم مسی را به طور مداوم با 5 ولت تغذیه می کند. برای تماس بهتر با توپ ، چهار فنر قلم را به کناری لحیم کردم.

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

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

مرحله 5: اضافه کردن بازی Over Contact

اضافه کردن بازی Over Contact
اضافه کردن بازی Over Contact

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

مرحله 6: حفر سوراخ های کابل

حفر سوراخ های کابل
حفر سوراخ های کابل
حفر سوراخ های کابل
حفر سوراخ های کابل
حفر سوراخ های کابل
حفر سوراخ های کابل

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

علاوه بر این ، من یک سوراخ در پایین سمت چپ ، در بین دیوارها ، برای کابل منتهی به دروازه توپ اضافی سروو ، ایجاد کردم.

همچنین باید یک سوراخ برای کابل متصل به LCD در پایین وجود داشته باشد.

مرحله 7: سیم کشی همه چیز

سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز
سیم کشی همه چیز

من این شماتیک را برای داشتن نمای کلی بهتر از جایی که همه کابلها باید بروند ، تهیه کردم. صلیب ها نقاط اتصال کابل ها هستند. من سعی کردم تا آنجا که ممکن است لحیم کاری کنم تا همه چیز کمی پایدارتر و قابل اطمینان تر شود. سیم کشی مدتی طول می کشد ، اما پس از اتمام این کار شما تقریباً آنجا هستید!

مرحله 8: بارگذاری کد

کد زیر را در Arduino خود بارگذاری کنید تا دستگاه پین بال شما زنده شود!

// شامل کتابخانه برای LCD

#شامل #شامل شود

// پین های داده lcd را اولیه کنید

LCD مایع LiquidCrystal (7 ، 8 ، 9 ، 10 ، 11 ، 12) ؛

// سروو ایجاد کنید

Servo ballGateServo ؛

// متغیرهایی برای پین هایی که استفاده می کنیم ایجاد کنید

int gameoverPin = 6؛ int scorePin = 5 ؛ int speakerPin = 4؛ int ballGateServoPin = 3 ؛

// متغیرهای گیم پلی را برای دستگاه پین بال شروع کنید

نمره int = 0 ؛ int highscore = 500 ؛ bool highscoreReached = false؛ توپ int = 3 ؛ int gameoverTimer = 0؛ int gameoverTimerDuration = 100 ؛ bool gameoverTriggered = false؛

// این کد را یکبار در اولین فریم اجرا کنید

void setup () {// تنظیم pinMode برای پین هایی که از pinMode استفاده می کنیم (gameoverPin، INPUT)؛ pinMode (scorePin ، INPUT) ؛

// با دادن عرض و ارتفاع lcd را اولیه کنید

lcd.begin (16 ، 2) ؛

// سروو دروازه توپ را به پین مناسب وصل کنید

ballGateServo.attach (ballGateServoPin) ؛

// سرو دروازه را به موقعیت اولیه بازگردانید

ballGateServo.write (0)؛ }

// این کد را در هر فریم اجرا کنید

void loop () {// ضبط ورودی های پین در gameoverState = digitalRead (gameoverPin) ؛ int scoreState = digitalRead (scorePin) ؛

// اگر ورودی دریافت شد به نمره اضافه کنید

if (scoreState) {تن (بلندگوی پین ، 1000) ؛ نمره += 10 ؛ } else {noTone (4)؛ }

// اگر گودال بازی شروع شد ، از توپ ها کم کنید

if (gameoverState و! gameoverTriggered) {balls -= 1؛ gameoverTriggered = true؛ gameoverTimer = gameoverTimerDuration؛ }

// به محض اینکه توپ تماس مخاطب بازی را لمس نکرد ، زمان سنج بازی را شروع کنید

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1؛ } else {gameoverTriggered = false؛ }}

// متن بازی را روی LCD چشمک بزنید و نمره و توپ ها را بازنشانی کنید

if (توپ <= 0) {lcd.setCursor (0 ، 0) ؛ برای (int i = 5؛ i> = 1؛ i--) {lcd.clear ()؛ تأخیر (250) ؛ lcd.print ("GAME OVER") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("دوباره امتحان کنید؟")؛ تأخیر (250) ؛ } lcd.clear ()؛ نمره = 0 ؛ ballGateServo.write (0)؛ highscoreReached = false؛ توپ = 3 ؛ }

if (امتیاز> بالاترین امتیاز و! highscoreReached) {

lcd.setCursor (0 ، 0) ؛ برای (int i = 5؛ i> = 1؛ i--) {lcd.clear ()؛ تأخیر (250) ؛ lcd.print ("NEW HIGHSCORE") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("مرگ ناگهانی!") ؛ تأخیر (250) ؛ } lcd.clear ()؛ توپ = 1 ؛ ballGateServo.write (120) ؛ بالاترین امتیاز = نمره ؛ highscoreReached = true؛ }

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

if (امتیاز> بالاترین امتیاز) {highscore = نمره ؛ }

// مکان نما را روی خط 0 تنظیم کنید

lcd.setCursor (0 ، 0) ؛ // نمره فعلی (بالا) را در lcd if (نمره <= 0) {lcd.print ("Highscore:" + String (highscore) + "") چاپ کنید ؛ } else {lcd.print ("امتیاز:" + رشته (امتیاز) + "") ؛ }

// مکان نما را روی خط 1 تنظیم کنید

lcd.setCursor (0 ، 1) ؛

// مقدار فعلی توپ ها را روی LCD چاپ کنید

lcd.print ("توپ:" + رشته (توپ)) ؛ }

توصیه شده: