Turinys:

„Arduino“: „Pinball Machine“: 8 žingsniai (su nuotraukomis)
„Arduino“: „Pinball Machine“: 8 žingsniai (su nuotraukomis)

Video: „Arduino“: „Pinball Machine“: 8 žingsniai (su nuotraukomis)

Video: „Arduino“: „Pinball Machine“: 8 žingsniai (su nuotraukomis)
Video: Homemade Real Pinball Machine 2024, Lapkritis
Anonim
Image
Image

Kadangi man visada patiko ir pinball'o automatai, ir elektronika, nusprendžiau pasigaminti savo flipso aparatą. Programavimui ir elektronikai pasirinkau „Arduino“, nes tai labai prieinama platforma, kuri yra kompaktiška ir paprasta naudoti.

Šiame vadove paaiškinsiu savo kūrimo procesą, todėl galbūt vienas iš jūsų entuziastų galėtų sukurti kažką panašaus.

1 žingsnis: korpuso kūrimas

Bylos kūrimas
Bylos kūrimas

Pradėkime nuo pinball mašinos korpuso. Aš padariau gana paprastą konstrukciją. Aš nupjoviau apatinę plokštę ir panaudojau 4 mažus medinius stulpus kampuose, kad sujungčiau sienų dalis. Jūsų dėklo dydis yra jūsų pačių pasirinkimas, aš nusprendžiau padaryti jį šiek tiek mažesnį nei originalus flipso žaidimo aparatas, nes neplanavau pridėti jokių itin įspūdingų priedų, kad užpildytų erdvę. Aš naudoju ir varžtus, ir klijus, kad korpusas būtų kuo stabilesnis. Užpakalinėje dalyje aš išgręžiau dvi skylutes grindjuostėje, skirtoje abiem kojoms, kurios suteiks pinball mašinai ikonišką pakreipimą. Vėlgi, kojų aukštis priklauso nuo jūsų. Kuo aukštesnės kojos, tuo greičiau kamuolys riedės (žemyn).

2 žingsnis: sukurkite „Flipper“mechaniką

„Flipper“mechaniko konstravimas
„Flipper“mechaniko konstravimas

Kadangi norėjau apriboti šio projekto išlaidas, nusprendžiau gaminti visiškai mechaninius, o ne elektroninius atvartus. Jei jus domina elektroniniai pleištai, galite naudoti konstrukciją, kuri yra šiek tiek panaši, tačiau prie jos prijungtas vadinamasis „solenoidas“(solenoidai, turintys pakankamai galios valdyti pleištus, man buvo per brangūs).

Pradėjau gręždamas dvi skylutes apačioje abiejų plekšnių pasukimo taškui. Aš gręžiau skyles (mano nuomone) šiek tiek per arti viena kitos, ir dėl to žaidimas galų gale buvo šiek tiek per lengvas. Taigi būkite atsargūs ir nedėkite pūkų per arti vienas kito, nebent norite lengvo žaidimo stiliaus.

Aš taip pat išgręžiau dvi skyles abiejose šoninėse sienose, lygiagrečias atvartams. Šios skylės turi būti naudojamos dviem atlenkiamiems mygtukams.

Aš panaudojau spyruokles, norėdamas atplėšti pleištus atgal į pradinę padėtį, ir padariau pasukamą konstrukciją tarp atvartų ir mygtukų, kad jie pasuktų, kai spaudžiami mygtukai. Kad spyruoklės per toli neatstumtų pleiskanų, uždėjau du varžtus, kurie laikė atvartus pradinėje padėtyje.

3 žingsnis: sienų klojimas

Sienų klojimas
Sienų klojimas

Aš įdėjau porą sienų, kad nukreipčiau pinballą į pleištus. Juos padaryti labai paprasta. Tiesiog gręžkite 3 skyles korpuso apačioje ir įstumkite tris medinius kaiščius. Apvyniokite guminę juostelę aplink kaiščius ir baigsite.

4 veiksmas: pridėkite balų blokus

Taškų blokų pridėjimas
Taškų blokų pridėjimas
Taškų blokų pridėjimas
Taškų blokų pridėjimas

Rezultatų blokai yra viena iš svarbiausių pinball žaidimo mašinos dalių, todėl įsitikinkite, kad šią dalį atlikote teisingai. Aš padariau tris taškų blokus savo pinball mašinai, bet vėl viskas priklauso nuo jūsų.

Nupjoviau mažą šluotos koto gabalėlį ir apvyniojau varine viela. „Arduino“šią varinę vielą nuolat maitins 5 V įtampa. Aš lituodavau keturias tušinuko spyruokles į šoną, kad geriau susiliesčiau su kamuoliu.

Rezultatų blokų veikimo būdas yra tas, kad kamuolys užbaigia grandinę, vedančią į „Arduino“įvesties kaištį. Taigi tai, ką aš padariau, užklijuoti aliuminio foliją ant korpuso apačios (NELIEKTI VARO) ir priklijuoti foliją iki „Arduino“kaiščio. Kai kamuolys patenka į varį ir aliuminį, grandinė baigta ir „Arduino“gaus signalą.

Sujungiau visus taškų blokus, naudodami aliuminio foliją, tačiau atminkite, kad lipni pusė nelaiko elektros.

5 veiksmas: pridėkite žaidimą prie kontakto

Žaidimo pridėjimas per kontaktą
Žaidimo pridėjimas per kontaktą

„Pinball“apačioje, tarp plekšnių, pridėjau žaidimą per kontaktą. Kai kamuolys pataiko į šį kontaktą, žaidėjas praras kamuolį. Konstrukcija, kurią aš padariau, labai panaši į taškų blokus. Tik čia aš naudojau du varžtus, o vėl - aliuminio folijos gabalėlį apačioje.

6 žingsnis: kabelių skylių gręžimas

Kabelių skylių gręžimas
Kabelių skylių gręžimas
Kabelių skylių gręžimas
Kabelių skylių gręžimas
Kabelių skylių gręžimas
Kabelių skylių gręžimas

Prieš pradėdami viską prijungti prie „Arduino“, pirmiausia turime išgręžti keletą skylių kabeliams. Aš išgręžiau skylę per abu aliuminio folijos gabalus, taigi viena skylė aliuminio folijoje šalia taškų blokų ir viena skylė aliuminio folijoje šalia žaidimo per kontaktą.

Be to, aš išgręžiau skylę apačioje kairėje, tarp sienų, kabeliui, vedančiam į papildomus rutulinius vartus „Servo“.

Taip pat apačioje turėtų būti skylė kabeliui, prijungtam prie LCD.

7 žingsnis: prijunkite viską

Viską prijungti
Viską prijungti
Viską prijungti
Viską prijungti

Aš sudariau šią schemą, kad galėčiau geriau suprasti, kur turėtų būti nukreipti visi kabeliai. Kryžiai yra taškai, kuriuose jungiasi kabeliai. Stengiausi lituoti kuo daugiau, kad viskas būtų kiek pastoviau ir patikimiau. Elektros instaliacija užtruks šiek tiek laiko, bet po to jūs beveik būsite!

8 veiksmas: įkelkite kodą

Įkelkite šį kodą į „Arduino“, kad jūsų pinball mašina pradėtų veikti!

// Įtraukite LCD biblioteką

#įtraukti #įtraukti

// Inicijuokite LCD duomenų smeigtukus

„LiquidCrystal lcd“(7, 8, 9, 10, 11, 12);

// Sukurkite servo

Servo kamuolysGateServo;

// Sukurkite kintamuosius mūsų naudojamiems kaiščiams

int gameoverPin = 6; int rezultatasPin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Inicijuokite žaidimo kintamuosius pinball mašinai

int rezultatas = 0; int rekordas = 500; bool highscoreReached = false; int kamuoliai = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// paleiskite šį kodą vieną kartą pirmame kadre

void setup () {// Nustatykite smeigtukų, kuriems naudojame pinMode, pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicijuokite LCD, nurodydami plotį ir aukštį

LCD. pradžia (16, 2);

// Pritvirtinkite rutulinių vartų servo prie atitinkamo kaiščio

ballGateServo.attach (ballGateServoPin);

// Vartų servo nustatymas į pradinę padėtį

ballGateServo.write (0); }

// Vykdykite šį kodą kiekviename kadre

void loop () {// Užfiksuokite kaiščio įvestis int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Pridėti prie balo, jei gaunama įvestis

if (scoreState) {tone (speakerPin, 1000); balas += 10; } else {noTone (4); }

// Atimkite iš kamuolių, jei suaktyvinama žaidimo duobė

if (gameoverState ir! gameoverTriggered) {kamuoliai -= 1; gameoverTriggered = tiesa; gameoverTimer = gameoverTimerDuration; }

// Paleiskite žaidimo laikmatį, kai tik kamuolys neliečia žaidimo kontakto

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

// Blink the gameover text to the LCD and reset the score and kamuoliai

if (rutuliai <= 0) {lcd.setCursor (0, 0); (int i = 5; i> = 1; i--) {lcd.clear (); vėlavimas (250); lcd.print ("ŽAIDIMO PABAIGA"); lcd.setCursor (0, 1); lcd.print ("Bandyti dar kartą?"); vėlavimas (250); } lcd.clear (); balas = 0; ballGateServo.write (0); highscoreReached = false; kamuoliai = 3; }

if (rezultatas> rekordas ir! rekordasReached) {

lcd.setCursor (0, 0); (int i = 5; i> = 1; i--) {lcd.clear (); vėlavimas (250); lcd.print ("NAUJAS AUKŠTAS"); lcd.setCursor (0, 1); lcd.print ("Staigi mirtis!"); vėlavimas (250); } lcd.clear (); rutuliai = 1; ballGateServo.write (120); rekordas = rezultatas; highscoreReached = tiesa; }

// Atnaujinkite rekordą, jei dabartinis balas yra didesnis

if (rezultatas> rekordas) {rekordas = balas; }

// Nustatykite žymeklį į 0 eilutę

lcd.setCursor (0, 0); // Spausdinti dabartinį (aukštą) balą į LCD, jei (rezultatas <= 0) {lcd.print ("Aukščiausias rezultatas:" + Styga (rekordas) + ""); } else {lcd.print ("Rezultatas:" + eilutė (rezultatas) + ""); }

// Nustatykite žymeklį į 1 eilutę

lcd.setCursor (0, 1);

// Atspausdinkite dabartinį rutulių kiekį į LCD

lcd.print ("Kamuoliai:" + Styga (rutuliai)); }

Rekomenduojamas: