Sisukord:

Arduino: Pinball Machine: 8 sammu (piltidega)
Arduino: Pinball Machine: 8 sammu (piltidega)

Video: Arduino: Pinball Machine: 8 sammu (piltidega)

Video: Arduino: Pinball Machine: 8 sammu (piltidega)
Video: Magnetic Pinball 2024, November
Anonim
Image
Image

Kuna ma olen alati armastanud nii pinball -masinaid kui ka elektroonikat, otsustasin ehitada oma flipperi. Valisin programmeerimise ja elektroonika jaoks Arduino, sest see on hästi ligipääsetav platvorm, mis on nii kompaktne kui ka lihtne kasutada.

Selles juhendis selgitan oma arendusprotsessi, nii et võib -olla võiks keegi teie entusiastidest luua midagi sarnast.

Samm: korpuse ehitamine

Korpuse ehitamine
Korpuse ehitamine

Alustame flipperimasina korpusega. Tegin üsna lihtsa konstruktsiooni. Saagisin põhjaplaadi maha ja kasutasin seinaosade ühendamiseks nurkades 4 pisikest puusammast. Teie korpuse suurus on teie enda valik, ma otsustasin teha selle pisut väiksemaks kui originaal flipperimasin, kuna ma ei plaaninud ruumi täitmiseks lisada ühtegi üliefektiivset lisatööd. Kasutasin nii kruvisid kui ka liimi, et korpus oleks võimalikult stabiilne. Tagaküljel puurisin kahe jala jaoks põrandatükki kaks auku, mis annavad pinball -masinale ikoonilise kalde. Jällegi on jalgade kõrgus kõik teie otsustada. Mida pikemaks teete jalad, seda kiiremini pall veereb (allapoole).

2. etapp: Flipperi mehaaniku ehitamine

Flipperi mehaaniku ehitamine
Flipperi mehaaniku ehitamine

Kuna ma tahtsin selle projekti maksumust piirata, otsustasin teha elektrooniliste asemel täielikult mehaanilised klapid. Kui olete huvitatud elektroonilistest lestadest, võite kasutada konstruktsiooni, mis on mõnevõrra sama, kuid mille külge on ühendatud nn solenoid (lestade juhtimiseks piisava võimsusega solenoidid olid minu jaoks liiga kallid).

Alustuseks puurisin mõlema klapi pöördepunkti põhja kaks auku. Puurisin augud (minu arvates) üksteisele natuke liiga lähedale ja see muutis mängu lõpuks natuke liiga lihtsaks. Nii et olge ettevaatlik ja ärge asetage lestasid üksteisele liiga lähedale, kui te ei soovi lihtsat mängustiili.

Samuti puurisin mõlemale külgseinale kaks auku paralleelselt klapiaukudega. Neid auke tuleb kasutada kahe klappnupu jaoks.

Tõmbasin klapid tagasi algsesse asendisse vedrude abil ja tegin pöörleva konstruktsiooni klapide ja nuppude vahele, et need nuppude vajutamisel pöörlema hakkaksid. Et vedrud ei tõmbaks lestasid liiga kaugele tagasi, panin kaks kruvi, mis hoiavad klappe algses asendis.

3. samm: seinte paigaldamine

Seinte paigutamine
Seinte paigutamine

Asetasin paar seina, et suunata flipper lestade poole. Neid on väga lihtne valmistada. Puurige korpuse põhja lihtsalt 3 auku ja lükake sisse kolm puidust tihvti. Keerake tihvtide ümber kummipael ja oletegi valmis.

4. samm: skooriplokkide lisamine

Skooriplokkide lisamine
Skooriplokkide lisamine
Skooriplokkide lisamine
Skooriplokkide lisamine

Skooriplokid on flipperimasina üks olulisemaid osi, seega veenduge, et teete seda osa õigesti. Ma tegin oma pinball -masina jaoks kolm punktiplokki, kuid see kõik on jälle teie otsustada.

Saagisin maha väikese harjatüki ja keerasin selle ümber vasktraadi. Arduino toidab seda vasktraati pidevalt 5 V toitega. Palli parema kontakti saamiseks jootsin küljele neli pliiatsi vedrut.

Skooriplokkide toimimise viis on see, et pall lõpetab vooluringi, mis viib Arduino sisendnõelale. Nii et ma teipisin alumiiniumfooliumi korpuse põhja (mitte puudutades vaske) ja ühendasin fooliumi Arduino tihvtiga. Kui pall tabab nii vaske kui ka alumiiniumi, on vooluring täielik ja Arduino saab signaali.

Ma ühendasin kõik punktplokid alumiiniumfooliumi abil kokku, kuid pidage meeles, et kleepuv pool EI juhi elektrit.

Samm 5: mängu lisamine kontaktile

Mängu lisamine kontaktile
Mängu lisamine kontaktile

Pinball -masina põhja, lestade vahele, lisasin mängu üle kontakti. Kui pall tabab seda kontakti, kaotab mängija palli. Minu tehtud konstruktsioon on paljuski sama, mis skooriplokid. Ainult siin kasutasin kahte kruvi ja jälle alumiiniumfooliumi tükki.

6. samm: kaabliaukude puurimine

Kaabliaukude puurimine
Kaabliaukude puurimine
Kaabliaukude puurimine
Kaabliaukude puurimine
Kaabliaukude puurimine
Kaabliaukude puurimine

Enne kui hakkame kõike Arduinoga ühendama, peame puurima kaablite jaoks paar auku. Puurisin mõlemast alumiiniumfooliumi tükist augu, nii et üks auk alumiiniumfooliumis skooriplokkide lähedal ja üks auk alumiiniumfooliumis mängu lähedal kontakti kohal.

Peale selle puurisin vasakusse allossa, seinte vahele, auku kaabli juurde, mis viib lisapalliväravasse Servo.

Samuti peaks põhjas olema ava LCD -ekraaniga ühendatud kaabli jaoks.

Samm: ühendage kõik üles

Kõik juhtmed
Kõik juhtmed
Kõik juhtmed
Kõik juhtmed

Tegin selle skeemi, et saada parem ülevaade sellest, kuhu kõik kaablid peaksid minema. Ristid on kaablite ühendamise kohad. Proovisin joota nii palju kui võimalik, et muuta kõik natuke stabiilsemaks ja usaldusväärsemaks. Juhtmestik võtab natuke aega, kuid pärast seda olete peaaegu kohal!

Samm: koodi üleslaadimine

Laadige oma Arduinole üles järgmine kood, et oma pinball -masin ellu viia!

// Kaasa lcd raamatukogu

#kaasama #kaasama

// Initsialiseeri lcd andmestikud

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

// Loo servo

ServopallGateServo;

// Looge muutujad kasutatavate tihvtide jaoks

int gameoverPin = 6; int scorePin = 5; int kõlarPin = 4; int ballGateServoPin = 3;

// Initsialiseeri mängumuutujad pinball -masina jaoks

int skoor = 0; int rekordid = 500; bool highscoreReached = vale; int pallid = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = vale;

// käivitage see kood esimesel kaadril üks kord

void setup () {// Määrake pinMode nende tihvtide jaoks, mida kasutame pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Initsialiseeri LCD, andes laiuse ja kõrguse

lcd.algus (16, 2);

// Kinnitage kuulvärava servo sobiva tihvti külge

ballGateServo.attach (ballGateServoPin);

// Lähtestage värava servo algasendisse

ballGateServo.write (0); }

// Käivitage see kood igal kaadril

void loop () {// Jäädvustage pin -sisendid int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Lisage tulemusele, kui sisend on vastu võetud

if (scoreState) {toon (speakerPin, 1000); skoor += 10; } muu {noTone (4); }

// Lahutage pallidest, kui käivitatakse mängumäng

if (gameoverState ja! gameoverTriggered) {pallid -= 1; gameoverTriggered = tõsi; gameoverTimer = gameoverTimerDuration; }

// Käivitage mängu taimer kohe, kui pall ei puuduta mängukontakti

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

// Pilgutage mänguülekande teksti LCD -le ja nullige skoor ning pallid

if (pallid <= 0) {lcd.setCursor (0, 0); jaoks (int i = 5; i> = 1; i--) {lcd.clear (); viivitus (250); lcd.print ("MÄNG OVER"); lcd.setCursor (0, 1); lcd.print ("Kas proovida uuesti?"); viivitus (250); } lcd.clear (); skoor = 0; ballGateServo.write (0); highscoreReached = vale; pallid = 3; }

kui (skoor> rekord ja! rekordi) {)

lcd.setCursor (0, 0); jaoks (int i = 5; i> = 1; i--) {lcd.clear (); viivitus (250); lcd.print ("UUS HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Äkiline surm!"); viivitus (250); } lcd.clear (); pallid = 1; ballGateServo.write (120); rekordid = skoor; highscoreReached = tõsi; }

// Värskendage rekordit, kui praegune tulemus on kõrgem

if (skoor> rekord) {rekordid = skoor; }

// Seadke kursor reale 0

lcd.setCursor (0, 0); // Prindi praegune (kõrgeim) skoor lcd -le, kui (skoor <= 0) {lcd.print ("Rekord:" + String (rekord) + ""); } else {lcd.print ("Score:" + String (score) + ""); }

// Seadke kursor reale 1

lcd.setCursor (0, 1);

// Prindi praegune pallide kogus LCD -le

lcd.print ("Pallid:" + String (pallid)); }

Soovitan: