Levande

Hur man bygger en Arduino Pinball Machine: 15 steg (med bilder)

Arduino Pinball Machine - 3d Printing & Lasercutting

Arduino Pinball Machine - 3d Printing & Lasercutting

Innehållsförteckning:

Anonim

Om du är som jag älskar du flipperspel, men har inte pengar att köpa eller utrymme för att passa ett spel i full storlek. Så varför bygg inte din egen?

Här kommer vi att gå igenom hur du skapar ditt eget anpassade flipperspel som drivs av en Arduino. Spelet har ljus, ljud, har riktiga pinballdelar, inklusive stötdämpare, droppmål och slingshots och har till och med en ramp.

Detta projekt kräver en mycket stor mängd material och olika material, så rådfråga varje efterföljande avsnitt för de nya material som behövs för att slutföra varje steg. Som en början är det väldigt bra om du har tillgång till en laserskärare eller CNC-router samt grundläggande elektroniska och hårdvara verktyg.

Författarens anteckning: Denna instruerbar var mycket nyligen publicerad och inte alla design- och programfilerna har blivit fullständigt organiserade. Om du planerar att använda våra filer, vänligen lämna en kommentar så att vi kan se till att allt är i sitt mest aktuella tillstånd.

Supplies:

Steg 1: Design

Avbildad ovan är en Solidworks design av spelfältet och stödjande enheten. Lekplatsen är rent anpassad, men skottlinjerna (som kurvan på backslingeskottet) är utformade utifrån riktiga flipperspelare för att säkerställa smidig spelning. En svårighet här är att på grund av sin komplexitet var de faktiska pinballdelarna (t.ex. bumpersna och droppmålen) inte modellerade, men det måste fortfarande tas omsorg för att allt ska passa under spelfältet - delarna är mycket större underifrån än ovan.

Filerna ingår i förvaret, så var god att anpassa designen så att den passar dig.

Några höjdpunkter i designen:

Lekplatsen är 42 "med 20,25 tum, exakt storleken på 1980-talets Bally-stilspel. Den är tillverkad av ½ "plywood, som är standard och bör inte ändras, eftersom tappbollsdelarna är utformade för denna tjocklek. Väggarna här består av ett ½ "lager ovanpå ett ¼" lager. I den första prototypen inkluderades endast ½ "väggar, men dessa visade sig vara för korta och kunde poppa flippen i luften på särskilt fasta skott. För det andra tillåter denna konstruktion en lätt uppskjuten skjutlinje (bild ovan) som gör att bollen kan släppa något in i spelfältet, men faller inte in igen.

Rampen är utformad med klara akryl- och 3d-tryckta stöd. Det korsar spelfältet så att det ger spelaren möjlighet att slå rampen flera gånger i rad från vänster flipper. Som sådan används klar akryl för att inte hindra spelarens syn på bordet:

Slutligen stöds spelfältet av korta väggar i de fyra hörnen, vilket håller spelfältet på standard 6,5 grader av sluttning. Bakväggen har en bottenhylla som kan avlägsnas och används för montering av elektroniken. Detta resulterar i ett spel med fullfärdigt spelfält, men är mycket kompaktare än ett typiskt spel och kan bäras för hand av en person. Eftersom spelfältet är en standardstorlek kan dock dessa stöd tas bort om du vill placera spelfältet i en standard pinballkåpa. För att göra det kanske du vill överväga att lägga till en returåterställning, som inte ingår i denna design.

Steg 2: Skär träet

För att skära lagret på spelfältet använde vi en laserskärare. En laserskärare som är kraftfull nog att klippa ½ "plywood är dock svår att hitta, kräver högkvalitativ plywood och kan riskera att starta eld om du inte är försiktig. Typiska spelfält skärs med en CNC-router - medan några av hörnen kanske inte är så skarpa, borde du fortfarande uppnå anständiga resultat. För enkelhets skyld antar stegen nedan att du har tillgång till samma laserskärare som vi gjorde. Det finns några människor som har haft anständiga resultat med bara en borr och pussel, men du måste vara mycket försiktig och väldigt tålmodig om du går denna väg.

Det första steget i skapandet av spelfältet är att konvertera designen till .DXF-filer som kan matas in i en laserskärare. Exempelvis är spelfältet. DXF-filen avbildad nedan. Filerna som används i detta projekt ingår i vårt förråd.

Med hjälp av laserskäraren klippte vi ut former för playfield, ¼ "mellanlagret (vi använde duron, ett billigare träliknande prototypmaterial, men ¼" plywood kommer också att fungera), ½ "toppskiktet och ½" stöder.

Material behövs:

  • ½ "plywood för spelfältet och basen
  • ¼ "plywood eller duron för mellanväggen
  • ½ ", ¾" och 1 "träskruvar
  • Tillgång till en CNC-router eller laserskärare

Steg 3: Montera Playfield

Börja med att klämma bitarna från ¼ "duronskiktet till plywood i sina respektive platser. Använd en handborrning genom att först borra pilothål med en 3/32 "bit och använd sedan platta ¾" träskruvar för att fästa ¼ "skiktet på spelfältet. Det är viktigt att göra detta från toppen (dvs. så att skruven först går igenom ¼ "-skiktet och sedan in i ½" -basen), eftersom ¼ "-delarna är små och tunna och böjer sig borta från basskiktet om de borras i motsatt riktning. Det är också viktigt att se till att skruvhuvudena är i jämnhet med ¼ "skiktet och ger ingen ytterligare tjocklek.

En sista notering: dessa skruvar kan gå nästan var som helst, eftersom det här laget är mest osynligt för spelaren när spelfältet är monterat. Men det finns ett undantag - lägg inte skruvar in i skytten. (Vi gjorde ursprungligen detta misstag).

Montera sedan sidoväggarna och använd de längsta träskruvarna för att borra in i dem från toppen av brädet, så att skruvhuvudena spolas med toppen. När det är klart, kläm fast ½ "lagerstyckena ovanpå duronet och skruva in dem som tidigare, förutom att denna tid skruvas in från botten med 1" skruvar. Eftersom toppskiktet är ½ tum tjockt är det mindre sannolikt att böja sig bort från basen och skruva från botten ser till att skruvarna är osynliga för spelaren.

Slutligen fäst skjutblocket (bild ovan med skytt) genom att skruva in från bottensidan med 2 skruvar så att blocket inte enkelt kan vridas. Skytten har en "U" -formad slits som passar skytten, som kan monteras genom att dra åt muttern på andra sidan. Du kan också behöva använda smörjmedel för att minska friktionen mellan skjutstången och bollen.

Designen kan behöva vissa justeringar vid denna tidpunkt. Till exempel, i vår design var skärningen för droppmålen för smal och måste utökas med en dremel. Om du använder våra filer som mer än en referens, försök att kontakta författarna som kanske kan tillhandahålla uppdaterade filer. Det är också en bra idé att sanda ner några grova områden, speciellt där två trästycken möts.

För det mesta avslutar detta träbearbetningen, och vi kan flytta till att sätta i komponenter.

Material behövs:

  • 3/4 "platta huvudskruvar
  • Skyttenhet
  • Längre (~ 1,5 ") träskruvar
  • Handborr med 3/32 "bit
  • Smörjolja
  • 1 "platta huvudskruvar
  • En fil och / eller dremel och sandpapper

Steg 4: Lägg till komponenterna

Vid denna punkt i konstruktionsfasen bör du ha en allmän uppfattning om orienteringen som krävs för att alla komponenter ska passa under spelfältet. (Om du använder vår design hänvisar du till bilden på undersidan av vårt bord ovan).

Först installerar du droppmålen, stand-up-målet och slingshot-aggregaten genom att lägga ½ "träskruvar genom monteringshålen i aggregatet. Gör detsamma med popbumparna, men se till att ta bort locket först, eller att enheten inte passar in i hålet!

För det andra, installera flipperaggregaten. Se till att de roterar i rätt riktning. Magnetventilen, när den avfyras, kommer att pilla pinnen i spolen, och detta ska rotera axeln så att pinnan roterar upp mot spelfältet. När flipperaggregaten är installerade, sätt fast flipperfladderna från andra sidan.Använd en skiftnyckel på låsmuttern i aggregatet för att dra åt dem på plats, använd sedan våren som ska medfölja enheten för att se till att flipparna strykas ner när de inte slås av.

På samma sätt, installera alla omkopplaren med 1/2 "skruvarna, så att de lätt kan tryckas in från toppen och fjädrar tillbaka på plats. Använd 6-32 bultarna och sätt också in portbrytaren längst upp till vänster om vår design. Denna grindbrytare fungerar också som en enkelvägsöppning, vilket möjliggör skott från höger sida och från skytten att falla in i stötdämparna. Detta är en designaspekt som resulterar i skott i höger ramp och höger loop går till olika platser och lägger till mer variation i spelet.

För att installera lamporna ska du först placera plastinsatserna i hålen. Dessa insatser är ungefär ¼ "tjocka. Om du använder en CNC-router är det lämpliga sättet att montera dessa att skära ett ¼ "lager något större än insatshålet. I vår design, eftersom laserskäraren inte kan skära partiella lager, vi 3D-tryckta konsoler som stöder insatserna. Använd epoxi för att hålla inläggen på plats (förstupa kanterna först) och sandpapper för att försäkra sig om att inläggen är jämn med spelfältet.

Sätt sedan in LED-lamporna i sina fästen genom att sätta in dem och vrida dem på plats. Skru sedan fast konsolerna så att dessa lysdioder sitter direkt under varje insats. Ljusfästena som är länkade nedan är ganska tunna och faktiskt tunna nog att 1/2 "skruvarna kan sticka upp på toppen av bordet. Använd ett par tvättar så att det inte händer.

Playfieldstolparna installeras med 6-32 bultar. När du har installerat, sätta i gummi från gummisatsen runt dem för att göra passiva stötar. Dessa ger bordet mycket mer "liv" än om designen skulle vara helt plywood. Använd samma bultar genom att fästa bana guiderna precis ovanför flipparna. Limma också slutspelet på plats.

Observera att de flesta spel har en dedikerad returåterställning som den här. Detta inkluderades inte i denna design, men främst på grund av kostnaden. Avvägningen är naturligtvis att spelaren nu är ansvarig för att placera bollen tillbaka i skytten när den har avlopp. Vi har dock en skytt som är knuten till skjutblocket som bilden tidigare.

Flipperknapparna och startknappen installeras genom att placera dem i hålen och låsa på plats med palnötter. Knappen för flipper knapblad är bultade inuti knapparna med 6-32 bultar och stänger en brytarkrets när knapparna trycks ned.

Vid denna tidpunkt kommer ditt spelfält (ovanifrån) att likna ett nästan komplett flipperspel! Allt som saknas är rampen. Känn dig fri att glömma bland dina vänner om hur fantastisk det ser ut när du är privatskriven om hur mycket ledning och lödning det finns att göra.

Material behövs (majoriteten köptes från PinballLife.com, och kan hittas helt enkelt genom att söka på villkoren nedan).

  • 1 3-bank-droppmålet
  • 3x popstötfångare
  • 1 vänster flismontering
  • 1 höger flipperaggregat
  • 2 flipper fladdermöss
  • 2 knappar
  • 2 flipper knäppta palnötter
  • 1 startknapp
  • 1 gummi ringsats
  • ~ 30 playfield stjärnposter, (1 1/16 "används)
  • 2 lane guider
  • 2 brytare med knapptryckblad
  • 2 slingshot-aggregat
  • 1 uppehållsmål
  • 10 omkopplare
  • 8 LED # 44 bajonettstrålkastare
  • 8 bajonettstrålkastare (Miniatyr Bayonet Base 2-ledaruttag med lång monteringskonsol)
  • 5 1-1 / 2 "x 13/16" blå pilinsats
  • 3 1 "x 3/4" Clear Bullet Insert
  • 6-32 bultar (2,5 ", liksom några mindre storlekar), muttrar och brickor
  • ~ 2 "bred brytare (som den här, det här kan vara svårt att hitta, vi skrapade vårt från en gammal trasig rampboll ramp som köpts på ebay)

Steg 5: Bygg rampen

För att göra rampen, använd ¼ "akryl för basstyckena och ⅛" akryl för sidoväggarna. Den klara akrylen ger ett fint och rent utseende, men blockerar inte spelfältets uppfattning för spelaren. Användning av färgad akryl kan också vara ett snyggt alternativ, men det rekommenderas inte att använda ett helt ogenomskinligt material som trä.

Stödena för ramperna är 3D-tryckta med hjälp av en makerbot och bultad till spelfältet och plasten med samma 6-32 bultar.

Akrylbitarna här limes ihop med akrylcement, vilket är ett lösningsmedel som väsentligen smältar och svetsar samman plasten. Se till att du använder en liten mängd, och det kommer att göra ett mycket starkt band som är nästan osynligt.

Vid rampens ingång har vi inkluderat en rampflik som den som finns på bilden ovan. Detta är en tunn metalldel som ger en mycket smidig övergång från spelfältet till rampens plast, istället för att flippan måste "hoppa" upp plastens tjocklek på ¼ ". Du kan köpa en av dessa billigt från en specialbutik för pinball eller Ebay (vi gjorde), eller bara göra en av dina egna ur plåt. I kommersiella spel är de nitar så att bultarna inte klämmer fast och kommer i vägen för bollen. Eftersom vi inte hade den rätta utrustningen för att göra det så försökte vi använda platta skruvar och fästa ut ett hål i plasten och i metallen för att uppnå samma effekt.

Det finns en smal grindbrytare ansluten till 3D-stöden i rampens främre högra hörn, där det vänder sig till att gå över spelfältet. Denna omkopplare är vad som registreras när ett framgångsrikt rampskott har blivit träffat.

Material behövs:

  • 1/4 "klar akryl (12x24" ark)
  • 1/2 "klar akryl (12x24" ark)
  • Akrylcement
  • Tillgång till en 3D-skrivare och laserskärare
  • Ramp flap
  • Flat-head 6-32 bultar för rampfliken
  • Kammarborr eller handverktyg
  • Smal grindbrytare

Steg 6: Planera Electronics Block och Pin Layout

(Författarens uppdatering: Med förlängd användning kan 48V blåsa några av transistorerna i denna konfiguration. Jag rekommenderar att du använder 35V eller lägre med denna elektronik eller använder en mer professionell styrkortsresurs som de som anges här: http: // pinballmakers .com / wiki / index.php / Construction)

Denna maskin har 3 spänningsnivåer: 48V för magnetventil, 6,3V för lysdioderna och 5V för logik och ljud. För att tillhandahålla dessa spänningsnivåer använde vi en CNC-strömförsörjning för 48V och DC-adaptrar för att ge 6.3V och 5V. (Det kan vara möjligt att bara använda 6.3V, eftersom Arduino styrer sin matningsspänning till sin 5V utgångsstift, men vi behöll dessa nätaggregat isolerade). 48V är en högspänning och kan inte skadas för delar och kan snabbt orsaka att komponenterna överhettas om det finns några problem med kretsen. Använd en 5-A långsam säkring på både ingången och utgången på huvud 48V-nätaggregatet för att undvika att elda om någon av transistorerna är kort.

På Arduino-skärmen monterade vi kablar med kvinnliga Molex-kontakter som matchade inmatnings- och utmatningskraven för var och en av de tre delbrädorna: styrenheten för magnetstyren, lampan / ljuddrivkortet och inmatningskortet.

I vår design hade vi följande stiftuppdrag. Detta är självklart ganska flexibelt. Pin 0 lämnades öppen. (Instruktörer låter oss inte göra nummerlistor som börjar med 0.)

  1. Öppna
  2. Öppna
  3. Stäng av / Ingång Aktiv Stift
  4. Kodad inmatningsstift
  5. Kodad inmatningsstift
  6. Kodad inmatningsstift
  7. Kodad inmatningsstift
  8. Kodad inmatningsstift
  9. Rätt stötfångareutgång
  10. Mellanstötfångareutgång
  11. Vänster stötfångareutgång
  12. Släpp målutgången
  13. Flipper master switch utgång
  14. Huvudströmbrytareutgång
  15. Ljusutgångsstift
  16. Ljusutgångsstift
  17. Ljusutgångsstift
  18. Ljudutgångsstift
  19. Öppna

Även om den inte är implementerad i vår design kan SCL- och SDA-stiften användas för visning och de återstående stiften kan användas för ytterligare kontroll, till exempel att lägga till funktioner (en bollåtergång) eller fler belysningskombinationer.

Material behövs:

  • 48V CNC strömförsörjning (som den här)
  • Utanför hyllan 6.3V och 5V nätaggregat (som den här)
  • 5A långsamma säkringar och säkringshållare samt värmekrympslang för anslutningen
  • Molex-kontakter
  • Arduino prototypskyddskort
  • Gott om 22AWG tråd, lödd och tålamod

Steg 7: Gör drivrutinerna

Förarbräda är ansvarig för att vrida ingångarna från Arduino, flipperknapparna och slanghoten slår in för att skjuta spolarna. Eftersom signalerna är på 5V-nivån och solenoiderna vid 48V är kraftiga MOSFETER nödvändiga för att reläera signalen. Transistorerna som används i denna konstruktion är dessa 100V-märkta MOSFET från Mouser.

Det finns tre scheman som visas ovan, vilket inkluderar flipprarna, slangarna och bumpers / drop-målen. Var och en har lite olika krav, men när alla transistorer har en 5V-signal öppnar en strömväg för solenoiden och 5-8 ampere trycks genom spolen för att ge en kraftfull kick. Det här är mycket aktuellt! I själva verket kommer denna mycket ström att bränna ut komponenterna om transistorn hålls på för mer än en mycket kort puls. Se till att du, när du testar den här kretsen, använder programvara eller andra metoder, aldrig att strömma en solenoid helt i mer än en sekund.

Huvudkällan för problem i ovanstående kretsar är induktiv spark. Solenoiderna är kraftfulla induktorer, och som du kanske vet kan strömmen i induktorer inte förändras omedelbart. Som sådan, när transistorn är avstängd, finns det fortfarande ett kort ögonblick där 5-8 ampere strömmar genom solenoiden, och allt som strömmen behöver någonstans att gå. Om inte en väg till marken kommer denna ström att driva spänningen vid transistorn dränera upp till hundratals volt och förstöra transistorn. Vidare, när transistorn förstörs, kortar den alla tre terminalerna, vilket medför att ampere med kontinuerlig ström går att strömma och kan förstöra solenoiden om det inte finns någon korrekt säkring installerad. (Vi förstörde 8 transistorer i vår upptäckt och försökte ta itu med detta problem, men lyckligtvis inga solenoider eftersom vi alltid var snabba att manuellt koppla bort kraften).

Det finns två metoder för att förhindra induktiv spark: Först bör varje tappningsenhet förses med en diod som pekar från transistorns dränering tillbaka till matningen. Detta, i teorin, bör förhindra att transistorn dräner från att någonsin överskrida matningsspänningen, eftersom en gång det händer att dioden slår på och dränerar all återstående energi från induktorn. Tyvärr, i själva verket slår de här dioderna inte tillräckligt snabbt för att undertrycka den induktiva sparken tillräckligt av sig själva.

För att lösa problemet lade vi till en RC snubber-krets. Denna krets har en kondensator i serie med ett motstånd. Kondensatorn absorberar tillräckligt med ström från induktorn så att dioden har tid att slå på och utföra sin funktion. För mer information om RC snubber kretsar, kolla här.

Strålkastaren / droptarget-solenoiddrivkretsen är ganska enkel och har bara transistorn, solenoiden, snubben och en anslutning för att ta emot ingången från Arduino. Se till att magnetdioden (i det schematiska diagrammet) pekar mot högspänningssidan i det här kortet och efterföljande brädor.

Flipper-drivkretsen är lite mer komplicerad av tre skäl. För det första rekommenderas att skapa svaret direkt i kretsen för att få en snabb reaktion mellan knapptrycket och flipper-åtgärden i stället för som separata ingångar och utgångar som hanteras av Arduino. Förseningen orsakad av Arduino är liten, men en erfaren spelare kommer att kunna berätta omedelbart och kommer att bli frustrerad av bristen på kontroll.

För det andra har flipprarna två olika spolar (en låg effekt och en högspänningsspole) en slut-av-slag-brytare som utlöser när flisen är hög. Denna omkopplare tjänar den viktiga funktionen att låta högspänningsspolen elda i början för att ge en kraftig stroke, men byter till lågspänningsspolen (~ 130 ohm mot 4 ohm) som ger tillräckligt med ström för att hålla spaken hållen "upp" som länge som knappen är placerad, men drar inte så mycket ström som att bränna ut solenoiden. I bilden nedan är EOS-omkopplaren normalt stängd, men vår montering hade en normalt öppen brytare och krävde en annan transistor för att omvandla den till en normalt sluten signal.

För det tredje, medan vi ville att knappen skulle styra flipparna direkt, inkluderade vi också en "master" -switch-signal från Arduino som skulle kunna aktivera eller avaktivera flipparna beroende på om bollen var i spel. Detta resulterar i användningen av den tredje transistorn i kretsen.

På liknande sätt har slingshotbrädet sina egna komplikationer. Medan den bara använder en transistor, bör den, som flipprarna, styras direkt av ingångsväxlarna (som vi kopplade i serie) för ett snabbt svar såväl som att inte kräva ytterligare utmatningsstift på Arduino. Tyvärr, om transistorns port är ansluten direkt till omkopplaren, är svaret alldeles för snabbt för att ha mer än en knappt märkbar kick eftersom brytaren inte stannar stängd under mycket lång tid. För att få en kraftfullare kick (dvs att slängsprut solenoiden "följer igenom") lade vi till en diod och ett stort motstånd vid transistorns port, vilket möjliggör ett snabbt svar men skapar en stor tidskonstant av spänningsförfall vid den noden så att porten förblir nära 5V (och transistorn på) tillräckligt lång för att ha en märkbar kick, även efter att slangkopplarna har öppnats igen. En annan komplikation är att skicka denna ingång till Arduino, eftersom inmatningskortet (som vi kommer att se senare) kräver låg ingångar och slanghoten fungerar när en ingång trycks högt. För att lösa detta problem inkluderade vi en tredje transistor som stängs när endera ingången går hög och sålunda kan behandlas som vilken som helst annan ingångsswitch på spelfältet

Förarbrädet (egentligen två brädor) består av två flipper-drivrutiner, två slangdrivrutiner och fyra enstaka förare för de återstående solenoiderna. I stället för att lödda direkt använde vi 0,1 "molexkontakter för att fästa det här kortet på solenoiderna, strömförsörjningen och strömbrytarna, så att eventuella reparationer eller justeringar kunde bli enklare.

Vi använde lödbara brödbrädor för våra konstruktioner, men att utforma faktiska PCB med dessa funktioner skulle ha ett mycket renare resultat och hjälpa till att mildra roten på ledningar som dessa maskiner oundvikligen har.

material:

  • 12 100V-nominella effekttransistorer
  • 10-50 uF kondensatorer (icke polära om möjligt)
  • 300, 5k och 500k och 3M motstånd
  • 1 mindre transistor för slangkopplare
  • Flera 1N4004 dioder
  • Prototyp lödbara brödbrädor (eller, ännu bättre, designa dina egna PCB)

Steg 8: Gör Sensor Input Board

Eftersom vi bara använder en Arduino, är vi begränsade till 20 digitala pinnar. Flippersmaskinen har dock ett par dussin unika ingångar för ingångar, förutom att behöva behöva sändas ut för ljus, ljud och drivmagnet. För att lindra detta problem antog vi att inga två ingångar skulle utlösas på en gång (vilket begränsar oss till att bara använda en boll). Med detta antagande kan vi "koda" omkopplingsingångarna genom att konvertera dem till ett 5-bitars binärt register med en 6: e stift som utlöst ett avbrott när en giltig omkopplingsingång mottogs. För att uppnå detta använde vi en kaskad med 8-till-3-kodare för att göra en 24-till-5-kodare med denna kodare i layouten som visas i bilderna ovan.

Detta var en av de viktigaste utvecklingen av projektet, eftersom det medgav att vi kraftigt kunde öka komplexiteten hos vår maskin från vår första plan med att bara ha flippers, stötdämpare och ett eller två mål.

Ett andra prototypkort användes för att placera var och en av de 24 manliga molexkontakterna; varje omkopplare på spelfältet skulle ha en kvinnlig kontakt i slutet av en lång tråd som pluggar in i det här kortet. Droppmålen är ett unikt fall som kan hanteras på flera sätt. Vad vi gjorde var tråd varje droppmätare i serie, så att ingången är stängd när de är alla nere och tillåter Arduino att skicka en signal till solenoiden för att skjuta droppmålen bakåt.

material:

  • 4 3-state-utgångsprioritet 8-till-3-kodare

Steg 9: Gör Ljus / ljud / poäng Peripheral Board

För att spara stift på samma sätt som kodaren använde vi en 3-till-8-dekoder för att styra våra ljus. Detta gav oss den begränsningen att vi inte kunde tända mer än ett ljus vid någon tidpunkt, men det var en acceptabel avvägning för att frigöra tapparna för andra element. Vi inkluderade också en 4: e "master" -ljusutgång som kunde styra alla lamporna på en gång. Detta kan till exempel göra det möjligt för oss att blinka alla lampor flera gånger när spelet först slås på (vilket ger en stark indikation på att någonting faktiskt händer med spelaren när han eller hon trycker på startknappen, vilket annars är svårt utan en bollgenomgång eller färgstark skärm).

Ovanstående schematiska har en transistorkrets som liknar förarna, men mycket enklare eftersom de lägre spänningarna i spel (6,3 V för belysningen) behöver mindre transistorer och behöver inte så mycket skyddskretsar. Vi använde en diode ELLER-port för transistorerna för att isolera huvudströmbrytarsignalen och den individuella ljussignalen. Detta gör det möjligt för oss att bara använda en transistor per ljus istället för två, och förhindrar att Arduino och kodarchipsen slår från "kämpar" till källan eller sjunker strömmen.

Medan vi använde lågströmslampor för var och en av spelfältljusen (de under insatserna), började startknappen och 3 popbumparna vardera med glödlampor som drar cirka 250mA vardera. Transistorerna är klassade för 530mA kontinuerlig ström, så att vi inte överstiger detta, vi såg till att endast två glödlampor någonsin gick igenom en enda transistor.

Vi bifogade också en passiv 5V piezo summer som gör att vi kan spela rudimentära ljud till det här kortet.

Anpassade ljus- och ljudsekvenser kan programmeras med hjälp av funktioner light_sequence + sound_sequence eller via Pinball Language-gränssnittet.

  • 10 belysningstransistorer (vi använde dessa)
  • 5V Piezo summer

Steg 10: Steg 11: Skapa dina spelregler

Det finns två alternativ för att definiera reglerna för flipperspelet. Du kan interagera med spelet med hjälp av ett anpassningsbart pinball-dokument eller spelregler för hårda koden. Hårdkodade spelregler möjliggör mer flexibilitet, inklusive sekventiella skott och tidsbestämda bonusar. Med hjälp av Pinball-dokumentet / parsersystemet kan du göra mer flexibla men enklare regler. Vi börjar med gränssnittet för det konfigurerbara spelet och sedan specificera några av de hårdkodade spelreglerna så att du kan välja vilken konfiguration du vill ha för ditt eget flipperspel.

Se githubförteckningen här för de filer som refereras till i det här projektet.

Del 1. Skapa dina spelregler

Standardtillståndsmaskinen för ett flipperspel finns på bilden.

Detta finns i standard startkod. Nu har du två alternativ - antingen att skriva din egen kod för maskinen, eller använd den angivna formateringen för flipperspelet.

Steg 11: Alternativ 1. Skriv din egen Pinball.txt-fil

I flippersdokumentet hittar du tre avsnitt: en för delar, en för "states" och en för "actions". Här kan du definiera specifika åtgärder för varje komponent. För de flesta komponenter kommer du förmodligen att hålla fast vid en state-state-maskin. Till exempel, om varje gång en stötfångare slås, ska spelaren poängera 100 punkter, tända rampljus och göra 100 poäng, så skulle statst diagrammet se ut som figur 1 med motsvarande kod. Om du vill att en komponent ska ha en state-state-maskin, säger du att ett ljus skulle tändas när en stötfångare slås och sedan stängs av när den slås igen, skulle ditt statligt diagram / motsvarande tillstånd se ut som Figur 2 . Vår specifika maskin ger strukturerna, som i Figur 3, för vilka du kan definiera regler. Deras namn, internkodade makron (som du inte behöver oroa dig men kan vara användbar om du bestämmer dig för att undersöka källkoden) och avbrottskoder ges i Figur 3. Figur 4 kopplar dessa namn till Playfield-komponenter.

Tips för att skriva ditt flipperspel
Eftersom spelkomponenterna är bundna till specifika avbrott (anges av "pos" -fältet) som i sin tur definieras av hårdvaran, rekommenderar vi inte att ändra delen "delar" för mycket utanför "states" -fältet. Vi föreslår reservtillstånd 0 och åtgärd 0 för komponenter som inte har effekter på poäng, till exempel startknappen och spelomkopplaren. Vår kod ser ut som bilden i Figur 5.

Steg 12: Definiera ljus och ljudsekvenser

De åtta lamporna på brädet styrs med en 3-till-8-dekoder + en huvudbrytare, som tidigare beskrivits. Specifika ljus kan tändas genom att skriva stiften som motsvarar den binära kodade versionen av delkoden hög. Light_sequence helper-funktionen ger ett gränssnitt för användaren att ange det ljus som han / hon vill tända och makron definieras i dokumentet state_machine_headers.h. Ett bord har återställts för din programmerings bekvämlighet. När det gäller Sound använde vi Arduino-tonbiblioteket för att programmera korta ljudsekvenser för olika spelhändelser. Vi har fyra färdiga ljud som du kan välja mellan (med executeSound (<# ljud du vill ha)). Dessa ljud motsvarar en lång, glad sekvens, kort glad sekvens, kort sorglig sekvens och lång ledsen sekvens. Om du vill programmera dina egna ljud kan du se här för hur du gör det (pitch.h har varit med i förvaret): http://www.arduino.cc/sv/Reference/Tone

Steg 13: Ladda Pinball.txt-fil till Arduino

När du är klar med att skriva MSM, så här laddar du ditt spel på din Arduino (förutsätter att du använder Mac). Alla filer finns på githubförvaret.

  1. Unzip den arduino-seriella zip-filen.
  2. Navigera till arduino-seriella filen och spara din spelkonfigurationsfil här. "Pinball.txt" ger en provmall som du kan använda.
  3. Öppna Arduino. Ladda upp flipperspelskissen.
  4. Öppna terminal och skriv följande kommandon:
    • göra
    • ./arduino-serial -b 9600 -p pinball.txt
  5. Nu borde vi läsa och lagra data i Arduinos internminne. Om det finns några felaktiga linjer kommer Arduino att skriva ut ett felmeddelande och du kan välja att skicka filen igen.
  6. När du är klar att ladda upp koden med terminal, t.ex. när Arduino skriver ut ett "färdigt" meddelande kan du öppna Arduino Serial för att läsa meddelanden från det pågående spelet.

Vanliga problem / optimeringar för mjukvaruspelet

  1. Hårdkodade vs konfigurerbara spel - vi märkte att avbrott i det hårdkodade spelet svarade mycket mer exakt än det som kunde anpassas. Detta kan bero på att det anpassningsbara spelet hade många allmänna funktioner som krävde villkorliga uttalanden. Detta dämpade slingans läshastighet vilket ledde till att vi missade flera avbrott och påverkat spelets totala rörelsehastighet. För att lösa detta problem reducerade vi några av konfigureringsfilens anpassningsbarhet för att uppnå acceptabla svarstider i kretsen. Vi hade ursprungligen bekymmer om RAM-kapaciteten hos Arduino och hur mycket av spelreglerna den kunde lagra, men det visade sig vara mindre av ett problem än vad som ursprungligen förväntades och det var hastigheten på slingan som var den större begränsningsfaktorn.
  2. Avbrytande avbrott - på grund av de snabba åtgärderna i flipperspelet hade vi flera fall under vilka avbrottstappen fick flera avbrott för att flippen träffade endast en spelkomponent. Dessutom, eftersom dessa störningar mottogs innan kodaren hade tid att korrekt läsa alla ingångar, skulle avbrott kopplas till felaktiga komponenter. För att lösa detta problem använde vi ett externt debuterande bibliotek som svarar 1ms efter det att det första avbrottet har mottagits, vilket ger tid för kodaren att nå högt innan spelet läser inmatningskoden.
  3. Display - Även om seriell visning gör det möjligt för spelet att skriva ut detaljerade meddelanden, är det svårt för en spelare att läsa utmatningsmeddelandena när man spelar ett snabba spel med pinball. Det är också otrevligt att spelaren måste spela spelet med en bifogad dator. I framtiden hoppas vi kunna implementera en digital skärm som kan visa poängen och annan spelinformation i en bildskärm som användaren enkelt kan se, såsom en LED-matris eller en 7-segmentskärm.

Steg 14: Alternativ 2: Råd om hårdkodning av ditt eget spel

Först - läs igenom dokumentet state_machine_headers.h för att förstå de globala datastrukturerna som lagrar information om tillståndsmaskinen. Du bör initiera dessa datastrukturer till dina spelregler inom Arduino IDE innan du laddar in i Arduino-koden. Följande datastrukturer tillhandahålls:

Spelstrukturer för att hålla information om varje delstat att hålla information om tillståndsövergångar Åtgärder för att hålla information om åtgärder som ska utföras Dessa strukturer är befolkade av läsfilen. Definiera in / utgångar för alla stift. Avbrottstiften bör definieras som INPUT-stiften.

Inom huvudslussen kontrollerar du varje cykel för att se om ett avbrott har skjutits för varje spelkomponent. Definiera varje spelkomponent i ett switch-uttalande.

Helper-funktionen executeState uppdaterar delens nuvarande tillstånd och utför åtgärder baserat på den kodade informationen.

Den hårdkodade första versionen av spelkoden finns i filen "simplepinballgame.ino"

Steg 15: Anslut allt

För att gränssnittet till Arduino med våra förarbrädor, använde vi en protoshield för att lättare komma åt stiften på de andra brädorna. Det finns många ledningar, så var försiktig! Följ layouten i elektroniska stift och layout för att ansluta dina Arduino-uttag till motsvarande stift. Molex-kontakter borde hjälpa mycket för att bestämma vilka kontakter som är anslutna till vilka.

Här är en kort felsökning FAQ om du stöter på några vanliga problem som vi gjorde:

Typen av ingångskodaren är att det finns 6 ingångstangenter i Arduino: 5 som tillsammans visar vilken ingång som utlöses och en 6: e stift som går högt om en enda ingång utlöses. Koden som skrivs upptäcker endast när den här sjätte stiftet ändras från låg till hög. Så om Arduino inte får några ingångar, och du är säker på att alla eller åtminstone de flesta av omkopplarna fungerar, kontrollera att omkopplare är fasta stängda. Om till exempel alla droppmålen är nere och inte har skjutits tillbaka, är det en stängd brytare och hindrar Arduino från att ta emot några andra ingångar.

Kontrollera att muttern som håller skytten på plats stramas helt eller att skytten inte är lös. Alternativt, olja skyttstången.

Detta kan vara ett mekaniskt / konstruktionsproblem om växlarna placeras i för breda körfält, så att bollen kan gå runt "runt" dem. Annars kan det vara resultatet av för länge av en fördröjning någonstans i koden. Om du till exempel är upptagen med att använda en ton med hjälp av tonbiblioteket och ett fördröjningsuttryck (), kommer Arduino inte att kunna hämta insignaler under den tiden. En lösning som vi använde var att bara spela ljud för rampskottet, standup-målet, startknappen och slutet av spelet, eftersom vi visste hur mycket tid vi skulle ha efter dessa skott innan en ny ingång troligtvis skulle utlösas .

Visserligen har vi inte tilldelat specifika rubriker för specifika lampor eller specifika solenoider, vilket betyder att första gången du kopplar allt i (eller efterföljande tider om du inte märker dem på något sätt), är utgångsstiften (eller utgångsljuskodningen) anslutna i godtycklig ordning. Använd prov-och-fel för att lösa vilka stiften som motsvarar vilken utmatning som ska anpassas till koden i enlighet med detta. För lamporna och stötarna är detta inte så illa - men märk definitivt alla ingångar och skriv ner vilket är vilket, eftersom processen kan ha upp till 24 värden och kommer ta lite längre tid att kalibrera.

Kodaren har den olyckliga egenskapen att ibland pulsera indikatorstiften högt innan de 5 kodare stiftarna har helt löst sina värden. För oss visste vi att detta hade inträffat när antalet omkopplare som pressades var förbi, men det kan visa sig annorlunda för dig. Vi löste detta problem genom att använda ett debouncing-bibliotek för att skapa en liten del fördröjning mellan när vi märker att en byt har ändrats och när vi registrerar vilken växel den var. Försiktig, men som för mycket av en fördröjning (mer än 15-20mS) kan orsaka att du helt saknar ingångar.

Tyvärr, men vi har inte riktigt räknat ut en bra lösning för den här ännu.