Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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
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
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
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
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
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
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
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)); }