Բովանդակություն:

Arduino: Pinball մեքենա. 8 քայլ (նկարներով)
Arduino: Pinball մեքենա. 8 քայլ (նկարներով)

Video: Arduino: Pinball մեքենա. 8 քայլ (նկարներով)

Video: Arduino: Pinball մեքենա. 8 քայլ (նկարներով)
Video: Pinball Diy with Arduino 2024, Նոյեմբեր
Anonim
Image
Image

Քանի որ ես միշտ սիրել եմ և՛ փինբոլ մեքենաները, և՛ էլեկտրոնիկան, որոշեցի կառուցել իմ սեփական փինբոլ մեքենան: Choseրագրավորման և էլեկտրոնիկայի համար ես ընտրեցի Arduino- ն, քանի որ այն բարձր հասանելի հարթակ է, որը և՛ կոմպակտ է, և՛ հեշտ օգտագործման համար:

Այս ուղեցույցում ես կբացատրեմ իմ զարգացման գործընթացը, այնպես որ գուցե ձեզնից ոգևորողներից մեկը կարողանա նման բան ստեղծել:

Քայլ 1: Գործի կառուցում

Գործի կառուցում
Գործի կառուցում

Սկսենք փինբոլ մեքենայի գործից: Ես բավականին պարզ շինություն եմ պատրաստել: Ես սղոցեցի ներքևի ափսեը և 4 փոքր փայտե սյուներ օգտագործեցի անկյուններում `պատի կտորները միացնելու համար: Ձեր գործի չափը ձեր սեփական ընտրությունն է, ես որոշեցի այն փոքր -ինչ փոքրացնել օրիգինալ փինբոլ մեքենայից, քանի որ չէի պլանավորում որևէ հիանալի տեսարժան հավելում ավելացնել տարածքը լրացնելու համար: Ես գործի դրեցի ինչպես պտուտակներ, այնպես էլ սոսինձ, որպեսզի գործը հնարավորինս կայուն լինի: Հետևի մասում ես երկու անցք կատարեցի հատակի երկու ոտքերի համար, որոնք փինբոլի մեքենային կտան խորհրդանշական թեքություն: Կրկին, ոտքերի բարձրությունը կախված է ձեզանից: Որքան բարձր եք ոտքերը, այնքան ավելի արագ է գնդակը գլորվելու (ներքև):

Քայլ 2: Flipper մեխանիկի կառուցում

Flipper մեխանիկի կառուցում
Flipper մեխանիկի կառուցում

Քանի որ ես ցանկանում էի սահմանափակել այս նախագծի արժեքը, որոշեցի էլեկտրոնայինի փոխարեն պատրաստել ամբողջովին մեխանիկական փափուկներ: Եթե ձեզ հետաքրքրում են էլեկտրոնային թրթռոցները, կարող եք օգտագործել մի փոքր նույն կառուցվածքը, բայց դրան միացված այսպես կոչված «էլեկտրամագնիսական» (թրթռոցները կառավարելու բավականաչափ հզորությամբ սոլենոիդներն ինձ համար չափազանց թանկ էին):

Ես սկսեցի ներքևում երկու անցք հորատելով երկու թևերի առանցքի առանցքի համար: Ես անցքերն (իմ կարծիքով) մի փոքր շատ մոտ իրար փորեցի, և դա պատճառ դարձավ, որ խաղը վերջում մի փոքր շատ հեշտ լինի: Ուրեմն զգույշ եղեք, որ շրմփոցները միմյանց շատ մոտ չդնեք, եթե չեք ցանկանում հեշտ խաղային ոճ:

Ես նաև երկու անցք եմ բացել երկու կողային պատերի վրա ՝ զուգահեռ անցքերին զուգահեռ: Այս անցքերը պետք է օգտագործվեն երկու պտտվող կոճակների համար:

Ես զսպանակներ օգտագործեցի ՝ թրթուրները ետ բերելու սկզբնական դիրքի, և պտտվող կոնստրուկցիա արեցի թևերի և կոճակների միջև, որպեսզի նրանք պտտվեն, երբ կոճակները սեղմվում են: Toսպանակները շատ հեռու հետ քաշելուց զսպելու համար ես երկու պտուտակ դրեցի, որպեսզի թրթուրները իրենց սկզբնական դիրքում պահեն:

Քայլ 3: Պատերի տեղադրում

Պատերի տեղադրում
Պատերի տեղադրում

Ես զույգ պատեր տեղադրեցի, որպեսզի փինբոլը ուղղվի դեպի բաբախյունները: Դրանք շատ պարզ են պատրաստվում: Պարզապես 3 անցք բացեք պատյանի ներքևում և երեք փայտե կապում ներս մղեք: Պտտեք ռետինե ժապավենը քորոցների շուրջ, և վերջ:

Քայլ 4: Ավելացնել միավորների բլոկներ

Հաշվի բլոկների ավելացում
Հաշվի բլոկների ավելացում
Հաշվի բլոկների ավելացում
Հաշվի բլոկների ավելացում

Հաշիվների բլոկները փինբոլի մեքենայի ամենակարևոր մասերից են, այնպես որ համոզվեք, որ այս մասը ճիշտ եք կատարում: Ես երեք միավոր բլոկ պատրաստեցի իմ փինբոլ մեքենայի համար, բայց նորից ամեն ինչ կախված է ձեզանից:

Ես կտրեցի ցախավելի մի փոքր կտոր և դրա շուրջը պղնձե մետաղալար փաթաթեցի: Արդուինոն այս պղնձալարն անընդհատ սնուցելու է 5 Վ լարման միջոցով: Չորս գրիչ զսպանակ կպցրի կողքին `գնդակի հետ ավելի լավ շփվելու համար:

Հաշիվների արգելափակումների ձևն այն է, որ գնդակն ավարտում է մի շրջան, որը տանում է դեպի Arduino- ի մուտքի քորոց: Այսպիսով, այն, ինչ ես արեցի, գործի ներքևի մասում կպցրեք ալյումինե փայլաթիթեղ (ՉՊԵՏՔ ԴԵՊԵԼ ՊՈPՊԱՐԻՆ) և փայլաթիթեղը մետաղալարով ամրացրեք Arduino- ի վրա: Ամեն անգամ, երբ գնդակը դիպչում է և՛ պղնձին, և՛ ալյումինին, միացումն ավարտված է, և Arduino- ն ազդանշան կստանա:

Ալյումինե փայլաթիթեղը միացրեցի միավորների բոլոր բլոկները, բայց հիշեք, որ կպչուն կողմը ՉԻ անցկացնում էլեկտրաէներգիա:

Քայլ 5. Խաղի ավելացում կոնտակտի վրա

Խաղի ավելացում կոնտակտի վրա
Խաղի ավելացում կոնտակտի վրա

Փինբոլի մեքենայի ներքևի մասում, բլիթների արանքում, ես ավելացրեցի խաղ շփման միջոցով: Ամեն անգամ, երբ գնդակը դիպչի այս շփմանը, խաղացողը կկորցնի գնդակը: Իմ կառուցած կառույցը շատ նման է հաշիվների բլոկներին: Միայն այստեղ ես օգտագործեցի երկու պտուտակ, և կրկին մի կտոր ալյումինե փայլաթիթեղ ներքևում:

Քայլ 6: Մալուխի անցքերի հորատում

Մալուխի անցքերի հորատում
Մալուխի անցքերի հորատում
Մալուխի անցքերի հորատում
Մալուխի անցքերի հորատում
Մալուխի անցքերի հորատում
Մալուխի անցքերի հորատում

Մինչև ամեն ինչ միացնել Arduino- ին, մենք պետք է նախ մի երկու անցք բացենք մալուխների համար: Ալյումինե փայլաթիթեղի երկու կտորների միջով ես անցք բացեցի, այնպես որ մեկ անցք ալյումինե փայլաթիթեղի վրա `հաշիվների բլոկների մոտ, և մեկ անցք` խաղի մոտ շփման ընթացքում:

Բացի այդ, ես նաև անցք եմ բացել ներքևի ձախ մասում ՝ պատերի միջև, դեպի լրացուցիչ սերվո դարպաս տանող մալուխի համար:

Ներքևում LCD- ին միացված մալուխի համար պետք է լինի անցք:

Քայլ 7: Ամեն ինչ միացրեք

Ամեն ինչ միացնելով
Ամեն ինչ միացնելով
Ամեն ինչ միացնելով
Ամեն ինչ միացնելով

Ես արեցի այս սխեմատիկան, որպեսզի ավելի լավ պատկերացում ունենամ, թե ուր պետք է գնան բոլոր մալուխները: Խաչերը այն կետերն են, որտեղ մալուխները միանում են: Փորձեցի հնարավորինս զոդել, որպեսզի ամեն ինչ մի փոքր ավելի կայուն և հուսալի լինի: Էլեկտրագծերի տեղադրումը որոշ ժամանակ կպահանջի, բայց դա անելուց հետո դուք գրեթե այնտեղ եք:

Քայլ 8: Կոդի վերբեռնում

Վերբեռնեք հետևյալ կոդը ձեր Arduino- ում ՝ ձեր փինբոլ մեքենան կյանքի կոչելու համար:

// Ներառեք գրադարանը lcd- ի համար

#ներառել #ներառել

// Նախաստորագրեք lcd տվյալների կապերը

LiquidCrystal LCD (7, 8, 9, 10, 11, 12);

// Ստեղծեք սերվո

Servo ballGateServo;

// Ստեղծեք փոփոխականներ մեր օգտագործած կապանքների համար

int gameoverPin = 6; int scorePin = 5; int բարձրախոս Pin = 4; int ballGateServoPin = 3;

// Սկզբնականացնել խաղային փոփոխականները փինբոլ մեքենայի համար

int հաշիվ = 0; int բարձրագույն միավոր = 500; bool highscoreReached = կեղծ; int գնդակներ = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = կեղծ;

// գործարկեք այս կոդը մեկ անգամ առաջին շրջանակում

void setup () {// Սահմանել pinMode- ը այն pin- ների համար, որոնք մենք օգտագործում ենք pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Նախաստորագրեք LCD- ը ՝ տալով լայնությունը և բարձրությունը

lcd. սկսել (16, 2);

// Կցեք գնդակի դարպասի սպասարկիչը համապատասխան քորոցին

ballGateServo.attach (ballGateServoPin);

// Վերականգնել դարպասի սպասարկիչը մեկնարկային դիրքի

ballGateServo.write (0); }

// Գործարկեք այս ծածկագիրը յուրաքանչյուր շրջանակով

void loop () {// Գրավել քորոցների մուտքերը gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Ավելացրեք հաշիվին, եթե մուտքագրումը ստացվել է

if (scoreState) {տոն (բարձրախոս Pin, 1000); միավոր += 10; } else {noTone (4); }

// Գնդակներից հանեք, եթե խաղամիջոցի փոսը սկսվի

եթե (gameoverState և! gameoverTriggered) {գնդակներ -= 1; gameoverTriggered = ճշմարիտ; gameoverTimer = gameoverTimerDuration; }

// Գործարկեք gameover ժամաչափը, հենց որ գնդակը չի դիպչում gameover կոնտակտին

եթե (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer -= 1; } else {gameoverTriggered = կեղծ; }}

// Թարթեք խաղախաղի տեքստը 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 = կեղծ; գնդակներ = 3; }

եթե (միավոր> ամենաբարձր միավոր և! ամենաբարձր գնահատականները հասել են) {

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 = ճշմարիտ; }

// Թարմացրեք ամենաբարձր գնահատականը, եթե ընթացիկ միավորն ավելի բարձր է

եթե (միավոր> ամենաբարձր գնահատական) {ամենաբարձր գնահատական = միավոր; }

// Կուրսորը սահմանեք 0 տողի վրա

lcd.setCursor (0, 0); // Տպել ընթացիկ (բարձր) միավորը lcd if (միավոր <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Score:" + String (score) + ""); }

// Կուրսորը սահմանեք 1 -ին տողի վրա

lcd.setCursor (0, 1);

// Տպել ընթացիկ քանակությամբ գնդակներ lcd- ում

lcd.print («Գնդակներ.» + Լար (գնդակներ)); }

Խորհուրդ ենք տալիս: