Viu

Cum se construiește o mașină de pinball Arduino: 15 pași (cu imagini)

Making an Automaton with a Micro:bit

Making an Automaton with a Micro:bit

Cuprins:

Anonim

Dacă sunteți ca mine, vă place pinball, dar nu aveți bani pentru a cumpăra sau spațiu pentru a se potrivi unui joc de dimensiune completă. Deci, de ce să nu vă construiți propria?

Aici vom trece prin modul în care vă puteți crea propriul joc personalizat de pinball, alimentat de un Arduino. Jocul are lumini, sunete, dispune de piese de pinball reale, inclusiv bare de protecție, ținte de aruncare și praștice, și chiar are o rampă.

Acest proiect necesită o cantitate foarte mare și o varietate de materiale, așa că consultați fiecare secțiune următoare pentru materialele noi necesare pentru a finaliza fiecare pas. Ca un început, este foarte util dacă aveți acces la un tăietor laser sau la un router CNC, precum și la unelte electronice și hardware de bază.

Notă autorului: Acest instructiv a fost publicat foarte recent și nu toate fișierele de proiectare și software au fost complet organizate. Dacă intenționați să utilizați fișierele noastre, vă rugăm să lăsați un comentariu pentru a vă asigura că totul este în starea cea mai actuală.

Furnituri:

Pasul 1: Design

Imaginea de mai sus este un design Solidworks al terenului de joc și al ansamblului de suport. Câmpul de joc este pur personalizat, dar liniile împușcate (cum ar fi curba împușcăturii din spate) au fost proiectate pe baza unor mașini de tip pinball real pentru a asigura jocul fără probleme. O dificultate este că, datorită complexității lor, piesele de pinball (de exemplu, barele de protecție și țintele pentru picături) nu au fost modelate, dar trebuie încă luate măsuri pentru a se asigura că totul se va potrivi sub câmpul de joc - piesele sunt mult mai mari dedesubt de mai sus.

Fișierele sunt incluse în depozit, deci nu ezitați să ajustați designul pentru a se potrivi cu fantezia dvs.

Câteva aspecte importante ale designului:

Câmpul de joc este de 42 "de 20,25", exact mărimea jocurilor din 1980 în stilul lui Bally. Este realizat din placaj de ½ ", care este standard și nu trebuie schimbat, deoarece ansamblurile pentru pinball sunt proiectate pentru această grosime. Pereții aici constau dintr-un strat ½ "deasupra unui strat ¼". În primul prototip, au fost incluse doar pereți de ½ ", dar acestea s-au dovedit a fi prea scurte și ar putea să-l înflorească în aer pe focuri deosebit de ferme. În al doilea rând, acest design permite o linie ușor redusă a shooter-ului (imaginea de mai sus), care permite mingea să coboare ușor în câmpul de joc, dar să nu se întoarcă înăuntru.

Rampa este proiectată cu suporturi acrilice și 3D imprimate. Traversează câmpul de joc, astfel încât acesta oferă jucătorului posibilitatea de a lovi rampa de mai multe ori la rând de la flipperul stâng. Astfel, acrilicul clar este folosit pentru a nu obstrucționa vizualizarea jucătorului de la masă:

În cele din urmă, câmpul de joc este susținut de pereți scurți în cele patru colțuri, care păstrează câmpul de joc la standardul de 6,5 grade de pantă. Peretele din spate are un "raft" de fund care poate fi scos și este utilizat pentru montarea electronicii. Acest lucru are ca rezultat un joc cu un câmp de joc de dimensiuni mari, dar este mult mai compact decât un joc tipic și poate fi purtat de mână de o singură persoană. Întrucât câmpul de joc are o dimensiune standard, cu toate acestea, aceste suporturi pot fi eliminate dacă doriți să plasați câmpul de joc într-un dulap tip pinball standard. Pentru a face acest lucru, vă recomandăm să adăugați un ansamblu de returnare a mingii, care nu este inclus în acest design.

Pasul 2: Taiați lemnul

Pentru a tăia straturile câmpului de joc, am folosit un cutter cu laser. Cu toate acestea, un tăietor laser suficient de puternic pentru a tăia placa de ½ "este greu de găsit, necesită placaj de înaltă calitate și poate risca să pornească un incendiu dacă nu sunteți atent. Câmpurile tipice de joc sunt tăiate folosind un router CNC - în timp ce unele colțuri ar putea să nu fie la fel de clare, trebuie să obțineți în continuare rezultate decente. Pentru simplitate, pașii de mai jos vă vor presupune că aveți acces la același cutter cu laser pe care l-am făcut. Există unii oameni care au avut rezultate decente folosind doar un burghiu și un jigsaw, dar trebuie să fii foarte atent și foarte răbdător dacă mergi pe acest traseu.

Primul pas în crearea câmpului de joc este transformarea designului în fișiere .DXF care pot fi introduse într-un cutter cu laser. De exemplu, fișierul .DXF pentru câmpul de joc este prezentat mai jos. Fișierele utilizate în acest proiect sunt incluse în depozitul nostru.

Folosind cuțitul laser, decupăm forme pentru câmpul de joc, stratul intermediar ¼ "(am folosit duron, un material mai ieftin de tip prototip, dar lucrează și placajul ¼"), stratul superior ½ " sprijină.

Materiale necesare:

  • ½ "placaj pentru terenul de joc și baza
  • ¼ "placaj sau duron pentru stratul de perete intermediar
  • Șuruburi de lemn ½ ", ¾" și 1 "
  • Acces la un router CNC sau la un cutter cu laser

Pasul 3: Asamblați câmpul Playfield

Începeți prin strângerea pieselor din stratul de ¼ "duron pe placaj în locurile respective. Folosind un dispozitiv de găurit cu mâna, găuriți cu un burghiu de 3/32 ", apoi folosiți șuruburi de lemn cu cap plat pentru a atașa stratul ¼" la câmpul de joc Este important să faceți acest lucru de sus în jos astfel încât șurubul trece mai întâi prin stratul ¼ ", apoi în baza ½"), deoarece părțile ¼ "sunt mici și subțiri și se vor îndoi de stratul de bază dacă sunt forate în direcția opusă. De asemenea, este important să vă asigurați că șuruburile sunt în același timp cu stratul ¼ "și nu asigură o grosime suplimentară.

O ultimă notă: aceste șuruburi pot merge aproape oriunde, deoarece acest strat va fi în mare parte invizibil pentru jucător după ce câmpul de joc este asamblat. Dar există o excepție - nu puneți șuruburi în banda de protecție. (Am inițiat această greșeală).

Apoi, atașați pereții laterali și utilizați cele mai lungi șuruburi pentru lemn pentru a le aspira din partea superioară a plăcii, din nou astfel încât capetele șuruburilor să fie la același nivel cu partea superioară. După ce se procedează, strângeți bucățile de strat de ½ "deasupra duronului și înșurubați-le ca înainte, cu excepția faptului că în acest moment se înșurubează de jos cu ajutorul șuruburilor de 1" .Deoarece stratul superior este de ½ "gros, este mai puțin probabil pentru a vă îndoi de bază și a înșuruba de jos, asigurați-vă că șuruburile rămân invizibile pentru player.

În cele din urmă, atașați blocul shooter (imaginat mai sus, cu împușcătură) prin înșurubare din partea de jos folosind 2 șuruburi, astfel încât blocul nu se poate răsuci cu ușurință. Blocul shooter are un slot "U" care se potrivește cu shooter-ul, care poate fi instalat prin strângerea piuliței de cealaltă parte. De asemenea, este posibil să utilizați lubrifiant pentru a reduce frecarea dintre tija de tragere și bila.

Designul poate necesita ajustări în acest moment. De exemplu, în designul nostru, tăierea pentru țintele de picătură era prea îngustă și trebuia să fie extinsă folosind un dremel. Dacă utilizați fișierele noastre mai mult decât o referință, încercați să contactați autorii care ar putea să furnizeze fișiere actualizate. Este, de asemenea, o idee bună de a sparge zonele accidentate, în special acolo unde se întâlnesc două bucăți de lemn.

În cea mai mare parte, acest lucru se încheie cu prelucrarea lemnului, și putem trece la punerea în componență.

Materiale necesare:

  • Șuruburi din lemn cu cap plat de 3/4 "
  • Ansamblu shooter
  • Șuruburi de lemn mai lungi (~ 1,5 ")
  • Exercițiu manual cu 3/32 "biți
  • Ulei lubrifiant
  • 1 "șuruburi din lemn cu cap plat
  • Un fișier și / sau dremel, și șmirghel

Pasul 4: Adăugați componentele

Prin acest punct în faza de proiectare, ar trebui să aveți o idee generală despre orientarea necesară pentru a vă asigura că toate componentele se potrivesc de fapt sub câmpul de joc. (Dacă folosiți designul nostru, consultați imaginea din partea inferioară a tabelului de mai sus).

Mai întâi, instalați obiectivele de fixare, țintele de țintire și ansamblurile de praguri prin introducerea ½ "de șuruburi de lemn prin orificiile de montare din ansamblu. Faceți același lucru cu bara de protecție pop, dar asigurați-vă că ați înlăturat capacul mai întâi, sau ansamblul nu se va potrivi în gaura sa!

În al doilea rând, instalați ansamblurile flipper. Asigurați-vă că acestea se rotesc în direcția corectă. Solenoidul, atunci când este concediat, va pilula pinul în bobină, iar acest lucru ar trebui să rotească arborele astfel încât flipperul să se rotească spre câmpul de joc. După instalarea ansamblurilor flipper, atașați liliecii din partea cealaltă.Utilizați o cheie pe piulița de blocare a ansamblului pentru a le strânge în loc, apoi utilizați arcul care ar trebui să vină cu ansamblul pentru a vă asigura că flippers sunt bulite înapoi în jos atunci când nu sunt concediați.

În mod similar, instalați toți întrerupătoarele de răsturnare utilizând șuruburile de 1/2 ", asigurându-vă că acestea pot fi ușor apăsate din partea superioară și cu spătarul înapoi în poziție. Cu ajutorul șuruburilor 6-32, atașați și comutatorul de poartă în partea stângă sus designul nostru.Acest comutator de poarta, de asemenea, servește ca o deschidere cu sens unic, care permite fotografii din partea dreaptă și de la shooter să cadă în bara de protecție.Acesta este un aspect de design care duce la fotografii care intră în rampă dreapta și buclă dreapta mergi la locuri diferite și adaugă mai multă varietate la joc.

Pentru a instala luminile, plasați mai întâi inserțiile din plastic în găurile lor. Aceste inserții sunt de aproximativ 1/4 "grosime. Dacă utilizați un router CNC, modul corect de montare a acestora este de a tăia un strat de ¼ "puțin mai mare decât gaura de inserție. În proiectarea noastră, deoarece tăietorul cu laser nu poate tăia straturi parțiale, am brațe imprimate 3D care susțin inserțiile. Utilizați epoxidul pentru a ține inserțiile în poziție (pentru a curăța marginile mai întâi) și pentru șmirghel pentru a vă asigura că inserțiile sunt la același nivel cu câmpul de joc.

Apoi, introduceți LED-urile în brațele lor prin introducerea și răsucirea acestora pe poziție. Apoi, înșurubați brațele în poziție astfel încât aceste LED-uri să stea direct sub fiecare inserție. Parantezele de lumină de mai jos sunt destul de subțiri și de fapt destul de subțiri încât șuruburile de 1/2 "să perforeze partea superioară a mesei. Utilizați o pereche de șaibe astfel încât să nu se întâmple acest lucru.

Posturile pentru câmpul de joc sunt instalate folosind șuruburile 6-32. După instalare, înfășurați cauciucurile din setul de cauciuc în jurul lor pentru a obține barele de protecție pasive. Acestea dau tabelului mult mai "viață" decât în ​​cazul în care proiectul urma să fie complet placaj. Folosind aceleași șuruburi, atașați ghidajele de ghidare chiar deasupra flippers. De asemenea, lipiți comutatorul la sfârșitul jocului.

Rețineți că majoritatea jocurilor au un ansamblu de returnare a mingii dedicat ca cel de aici. Acest lucru nu a fost inclus în acest design, totuși, în primul rând datorită costului. Dezbaterea, desigur, este că jucătorul este acum responsabil pentru plasarea mingii înapoi în banda shooter-ului după ce se scurge. Cu toate acestea, avem un shooter, care este atașat la blocul de împușcături, așa cum este imaginat mai devreme.

Butoanele flipper-ului și butonul de pornire sunt instalate prin plasarea lor în găuri și blocarea în loc cu nucsoare. Butoanele pentru butoanele butonului flipper sunt înșurubate în interiorul butoanelor cu ajutorul șuruburilor 6-32 și vor închide un circuit de comutare atunci când se apasă butoanele.

În acest moment, câmpul dvs. de joc se va asemăna (de sus) cu o masă de pinball aproape completă! Tot ce lipseste este rampa. Simțiți-vă liber să vă bucurați printre prietenii dvs. cu privire la cât de minunat ar părea în timp ce sunteți înfricoșați privitor la cât de multe cabluri și lipituri trebuie să faceți.

Materiale necesare (majoritatea au fost achiziționate de la PinballLife.com și pot fi găsite pur și simplu prin căutarea termenilor de mai jos).

  • 1 ansamblu de ținte pentru trecerea banilor
  • Ansamblu de bare 3x pop
  • 1 ansamblu de flipper stânga
  • 1 ansamblu dreptunghiular
  • 2 lilieci flipper
  • 2 butoane flipper
  • 2 butoaie cu buton flipper
  • 1 buton de pornire
  • 1 set inel de cauciuc
  • ~ 30 posturi de joc playfield, (1 1/16 "folosite)
  • 2 ghiduri de benzi
  • 2 întrerupătoare de frunze ale butonului flipper
  • 2 ansambluri de praștie
  • 1 țintă standard
  • 10 întrerupătoare de tip rollover
  • 8 lumini LED # 44 în stil baionetă
  • 8 paranteze luminoase în stil bayonet (miniatura bayonet de bază cu 2 prize de plumb cu consola de montare lungă)
  • 5 1-1 / 2 "x 13/16" inserați săgeata albastră
  • 3 1 "x 3/4" glisați cu inserție
  • 6-32 bolțuri (2,5 ", precum și unele dimensiuni mai mici), nuci și șaibe
  • ~ 2 "switch-ul larg (cum ar fi cel de aici, acest lucru poate fi greu de gasit, am scapat de a noastra de la o veche rampa de pinball spart cumparata pe ebay)

Pasul 5: Construiți rampa

Pentru a face rampa, utilizați ¼ "acrilic pentru piesele de bază și ⅛" acrilic pentru pereții laterali. Acrilicul clar va da un aspect frumos și curat, fără a bloca vederea terenului de joc al jucătorului. Utilizarea acrilului colorat ar putea fi, de asemenea, o opțiune frumoasă, dar nu se recomandă utilizarea unui material complet opac, cum ar fi lemnul.

Suporturile pentru rampă sunt tipărite 3D utilizând un macerbot și sunt înșurubate pe câmpul de joc și pe material plastic folosind aceleași șuruburi cu șase șaizeci și șase.

Piesele acrilice sunt lipite împreună folosind ciment acrilic, care este un solvent care în mod esențial se topește și leagă plasticul împreună. Asigurați-vă că utilizați o cantitate mică și că veți face o legătură foarte puternică aproape invizibilă.

La intrarea în rampă, am inclus o clapă de rampă ca cea din imaginea de mai sus. Aceasta este o bucată subțire de metal care oferă o tranziție foarte lină de la câmpul de joc la plasticul rampei, mai degrabă decât să aibă un "pin" care trebuie să "sară" până la grosimea ¼ "a plasticului. Puteți să cumpărați una din aceste produse ieftine dintr-un magazin de specialități pentru pinball sau Ebay (am făcut-o), sau să vă creați unul singur din tablă. În jocurile comerciale, acestea sunt rivete astfel încât șuruburile să nu rămână în picioare și să se blocheze. Deoarece nu aveam echipamentul adecvat pentru a face acest lucru, ne-am asigurat să folosim șuruburi cu cap plat și să ștergem corect o gaură în plastic și în metal pentru a obține același efect.

Există un comutator de poartă îngust atașat la suporții 3D în colțul din dreapta-sus al rampei, unde se întoarce spre câmpul de joc. Acest comutator este ceea ce înregistrează când a fost lovită o lovitură de rampă reușită.

Materiale necesare:

  • 1/4 "acrilic transparent (12x24" foaie)
  • 1/2 "clar acrilic (12x24" foaie)
  • Ciment acrilic
  • Acces la o imprimantă 3D și la un laser de tăiere
  • Clapeta rampelor
  • Șuruburi cu cap secundar 6-32 pentru clapa rampă
  • Mașină de găurit sau instrument de mână
  • Comutator cu poarta

Pasul 6: Planificați blocul de electronice și aspectul pinului

(Actualizarea autorului: Cu utilizare extinsă, 48V poate sufla unele din tranzistori în această configurație.Am recomanda utilizarea de 35V sau mai mică cu aceste electronice, sau folosind o resursă de control mai profesionist bord, cum ar fi cele enumerate aici: http: // pinballmakers .com / wiki / index.php / constructii)

Această mașină are 3 nivele de tensiune: 48V pentru solenoid, 6,3V pentru LED-uri și 5V pentru logică și sunet. Pentru a furniza aceste nivele de tensiune, am folosit o sursă de alimentare CNC pentru adaptoarele de 48V și adaptoarele DC pentru a furniza cele 6.3V și 5V. (Ar putea fi posibil să folosiți doar 6.3V, deoarece Arduino își reglează tensiunea de alimentare la pinul său de ieșire de 5V, dar am păstrat acele surse de alimentare izolate). 48V este o tensiune înaltă și, deși nu este moartă, poate fi dăunătoare părților și poate provoca rapid supraîncălzirea componentelor în cazul în care există probleme cu circuitul. Utilizați o siguranță de 5-A cu încetinire atât pe intrare, cât și pe ieșirea sursei principale de alimentare de 48V pentru a evita declanșarea unui incendiu în cazul în care oricare dintre tranzistoare este scurt.

Pe scutul Arduino, am atașat fire cu conectori feminin Molex concepuți pentru a corespunde cerințelor de intrare și ieșire ale fiecăreia dintre cele trei sub-panouri: placa solenoidului conducătorului auto, placa de comandă a luminilor / sunetului și placa de intrare.

În proiectarea noastră, am avut următoarele atribuții de pin. Acest lucru, desigur, este destul de flexibil. Pinul 0 a fost lăsat deschis. (Instrucțiunile nu ne permit să facem liste numberes începând cu 0.)

  1. Deschis
  2. Deschis
  3. Întrerupere / intrare Pin activ
  4. Cod de intrare codificat
  5. Cod de intrare codificat
  6. Cod de intrare codificat
  7. Cod de intrare codificat
  8. Cod de intrare codificat
  9. Ieșirea din spate a barei de protecție
  10. Rezistența medie a barei de protecție
  11. Izolarea barei de protecție din stânga
  12. Dați ieșire țintă
  13. Flipper comutator de ieșire
  14. Comanda luminoasă a comutatorului
  15. Panoul de ieșire a luminii
  16. Panoul de ieșire a luminii
  17. Panoul de ieșire a luminii
  18. Pini de ieșire audio
  19. Deschis

Deși nu sunt implementate în designul nostru, șuruburile SCL și SDA pot fi folosite pentru afișare, iar pini rămași pot fi folosiți pentru control suplimentar, cum ar fi adăugarea de elemente (revenire cu bile) sau mai multe combinații de iluminare.

Materiale necesare:

  • 48V sursa de alimentare CNC (ca aceasta)
  • Surse de alimentare independente de 6,3 V și 5 V (ca aceasta)
  • 5A siguranțe încetinite și suporți de siguranțe și tuburi termocontractabile pentru conectare
  • Conectori Molex
  • Arduino prototip de scut bord
  • O mulțime de fire de 22AWG, lipire și răbdare

Pasul 7: Faceți plăcuțele șoferului

Placa conducătorului auto este responsabilă pentru rotirea intrărilor de la arduino, butoanele flipper-ului și a pragului de praf, care se declanșează în arderea bobinelor. Deoarece semnalele sunt la nivelul de 5V și solenoizii la 48V, este nevoie de MOSFETE puternice de putere pentru transmiterea semnalului. Tranzistorii utilizați în acest design sunt acești MOSFET de la Mouser de 100V.

Există trei scheme prezentate mai sus, care includ genunchii, crack-urile și obiectivele de protecție. Fiecare are cerințe ușor diferite, dar în toate acestea, atunci când tranzistorul are un semnal de 5V, se deschide o cale de curent pentru solenoid și 5-8 amperi sunt împinși prin bobină pentru a da o lovitură puternică. Aceasta este o mulțime de curent! De fapt, acest curent mult va arde componentele dacă tranzistorul este menținut pentru mai mult decât un impuls foarte scurt. Asigurați-vă că, la testarea acestui circuit folosind software sau alte metode, să nu alimentați niciodată complet un solenoid mai mult de aproximativ o secundă.

Principala sursă de probleme în circuitul de mai sus este lovitura inductivă. Solenoizii sunt inductori puternici și, după cum probabil știți, curentul în inductoare nu se poate schimba instantaneu. Ca atare, atunci când tranzistorul este oprit, există încă un moment scurt în care 5-8 amperi curg prin solenoid, și tot ceea ce curent are nevoie undeva să meargă. Dacă nu este dat o cale către sol, acest curent va conduce tensiunea la tranzistorul de scurgere până la sute de volți și va distruge tranzistorul. Mai mult, atunci când tranzistorul este distrus, acesta scurtcircuite toate cele trei terminale, care cauzează amperi de curent continuu să curgă și poate distruge solenoidul dacă nu există o siguranță adecvată instalată. (Am distrus 8 tranzistori în descoperirea noastră și încercăm să rezolvăm această problemă, dar din fericire nu există solenoizi de când am fost mereu rapid să deconectăm manual puterea).

Există două metode de prevenire a loviturii inductive: în primul rând, fiecare ansamblu de pinball trebuie să fie dotat cu o diodă care indică de la scurgerea tranzistorului la sursa de alimentare. Acest lucru, teoretic, ar trebui să împiedice scurgerea tranzistorului să depășească vreodată tensiunea de alimentare, deoarece odată ce se va întâmpla, dioda va porni și va scurge toată energia rămasă din inductor. Din păcate, în realitate, aceste diode singure nu pornesc suficient de repede pentru a suprima în mod suficient kick-inductivul.

Pentru a rezolva problema, am adăugat un circuit RC "snubber". Acest circuit prezintă un condensator în serie cu un rezistor. Condensatorul absoarbe suficient curent de la inductor astfel încât dioda are timp să se aprindă și să-și îndeplinească funcția. Pentru mai multe informații despre circuitele snubber RC, consultați aici.

Circuitul șoferului solenoidului pentru bara de protecție / pilotul de destinație este destul de simplu și are doar tranzistor, solenoid, snubber și o conexiune pentru a primi intrarea de la Arduino. În această placă și în panourile ulterioare, asigurați-vă că ați conectat solenoidul astfel încât dioda (care nu este prezentată în schematică) să indice către partea de înaltă tensiune.

Circuitul șoferului flipper este un pic mai complicat din trei motive. În primul rând, pentru a avea o reacție rapidă între apăsarea butonului și acțiunea flipperului, se recomandă să creați acel răspuns direct în circuit, mai degrabă decât ca intrări separate și ieșiri manipulate de Arduino. Întârzierea provocată de Arduino este mică, însă un jucător experimentat va fi capabil să spună imediat și va fi frustrat de lipsa controlului.

În al doilea rând, răzătoarele au două bobine diferite (o bobină de putere mică și o bobină de mare putere), un comutator de sfârșit de cursă, care declanșează atunci când flipper-ul este ridicat. Acest comutator servește funcția importantă de a permite bobina de mare putere să declanșeze inițial pentru a da o cursa puternică, dar trecerea la bobina de putere mică (~ 130 ohmi față de 4 ohmi), care oferă suficientă putere pentru a menține flipperul ținut "în sus" cât timp butonul este plasat, dar nu atrage atât de mult curent încât să ardă solenoidul. În imaginea de mai jos, întrerupătorul EOS este în mod normal închis, dar ansamblul nostru avea un comutator normal deschis și a necesitat un alt tranzistor pentru a converti acest semnal într-un semnal normal închis.

În al treilea rând, în timp ce dorim ca butonul să controleze direct pinguinii, am inclus și un semnal de comandă "master" de la Arduino care ar putea activa sau dezactiva clapetele în funcție de locul în care se afla mingea în joc. Aceasta conduce la utilizarea celui de-al treilea tranzistor în circuit.

În mod similar, bordul de praștie are propriile sale complicații. În timp ce utilizează doar un tranzistor, acesta ar trebui să fie controlat direct de către comutatoarele de intrare (pe care le-am cablat în serie) pentru un răspuns rapid, precum și pentru a nu necesita pini de ieșire suplimentari pe Arduino. Din nefericire, dacă poarta tranzistorului este conectată direct la comutator, răspunsul este prea rapid pentru a avea mai mult decât o lovitură abia vizibilă, deoarece întrerupătorul nu rămâne închis foarte mult timp. Pentru a avea o lovitură mai puternică (adică să lăsăm solenoidul "să urmeze"), am adăugat o diodă și un rezistor mare la poarta tranzistorilor, ceea ce permite un răspuns rapid, dar creează o constantă constantă de timp a tensiunii de tensiune la acel nod, astfel încât poarta să rămână aproape de 5 V (și de tranzistorul pornit) suficient de lungă pentru a avea o lovitură vizibilă, chiar și după ce dispozitivele de praf au fost redeschise. O altă complicație este trimiterea acestei intrări la Arduino, deoarece placa de intrare (așa cum vom vedea mai târziu) necesită scăzut intrările și praful funcționează atunci când o intrare este împinsă în sus. Pentru a rezolva această problemă, am inclus un al treilea tranzistor care se închide ori de câte ori oricare dintre intrări este ridicat și astfel poate fi tratat ca orice alt switch de intrare pe câmpul de joc

Placa de conducător auto (de fapt, două plăci) este alcătuită din doi șoferi flipper, doi șoferi de praștie și patru șoferi cu comutator unic pentru solenoizii rămași. În loc să lipim direct, am folosit conectori molex de 0,1 "pentru a atașa această placă la solenoizi, sursa de alimentare și întrerupătoare, astfel încât orice reparații sau ajustări să poată fi făcute mai ușor.

Am folosit panouri de lipit pentru modelele noastre, dar proiectarea PCB-urilor reale cu aceste funcții ar avea un rezultat mult mai curat și ar ajuta la atenuarea dezordinei firelor pe care aceste mașini le au în mod inevitabil.

materiale:

  • 12 tranzistoare de putere de 100V
  • Condensatoare de 10-50 uF (nonpolar dacă este posibil)
  • 300, 5k și 500k și rezistențe 3M
  • 1 tranzistor mai mic pentru comutator de praf
  • Mai multe diode 1N4004
  • Plăci de prăjit solide (sau, chiar mai bine, proiectați propriile PCB-uri)

Pasul 8: Faceți placa de intrare a senzorului

Deoarece folosim doar un Arduino, suntem limitați la 20 de pini digitali. Masina de pinball, cu toate acestea, are câteva zeci de intrări unice de comutare, ca să nu mai vorbim de ieșirile necesare pentru lumini, sunet și solenoizi de conducere. Pentru a atenua această problemă, am presupus că nu vor fi declanșate simultan două intrări (limitându-ne astfel doar la 1 minge). Această ipoteză ne permite să "codificăm" intrările comutatoare convertindu-le într-un registru binar pe 5 biți cu un pin 6 care a declanșat o întrerupere ori de câte ori a fost recepționată o intrare de comutare valabilă. Pentru a realiza acest lucru, am folosit o cascadă de encodere de la 8 la 3 pentru a face un codificator 24-la-5 folosind acest codificator în aspectul prezentat în imaginile de mai sus.

Aceasta a fost una dintre cele mai importante dezvoltări ale proiectului, deoarece ne-a permis să creștem considerabil complexitatea mașinii noastre de la planul nostru inițial de a avea doar flippers, bare de protecție și una sau două ținte.

O a doua placă de prototipuri a fost utilizată pentru plasarea fiecăruia dintre cele 24 de conectori Molex masculi; fiecare comutator de pe câmpul de joc ar avea un conector mamă la capătul unui fir lung care se conectează la această placă. Obiectivele de scădere sunt un caz unic care poate fi tratat în mai multe moduri. Ceea ce am făcut a fost sârmă fiecare întrerupător țintă picătură în serie, astfel încât intrarea este închisă atunci când acestea sunt toate în jos și permite Arduino pentru a trimite un semnal la solenoid pentru foc focuri de aruncare înapoi în sus.

materiale:

  • 4 encodere de prioritate 3-state-ieșire de la 3 la 3

Pasul 9: Faceți placa periferică pentru lumină / sunet / scor

Pentru a salva știfturile în mod similar cu codificatorul, am folosit un decodor de la 3 la 8 pentru a controla luminile noastre. Acest lucru ne-a oferit limitarea că nu puteam să aprinde mai mult decât o singură lumină la un moment dat, dar acesta a fost un compromis acceptabil pentru eliberarea pinilor pentru alte elemente. De asemenea, am inclus oa treia ieșire de lumină "master", care ar putea controla simultan toate luminile. Acest lucru, de exemplu, ne-ar putea permite să blițam toate luminile de mai multe ori când jocul este pornit pentru prima oară (dând un indiciu puternic că ceva se întâmplă de fapt cu jucătorul atunci când apasă butonul de pornire, jgheabul sau afișajul colorat).

Schema de mai sus prezintă un circuit tranzistor similar cu șoferii, dar mult mai simplu, deoarece tensiunile joase în joc (6.3V pentru luminile) necesită tranzistori mai mici și nu necesită circuite de protecție cât mai multe. Am folosit o diodă SAU pentru tranzistori pentru a izola semnalul comutatorului principal și semnalul individual de lumină. Acest lucru ne permite să folosim doar câte un tranzistor pe lumină în loc de două și împiedică arduinul și cipurile de la codificator să "lupte" pentru a sursa sau a scufunda curentul.

În timp ce am folosit LED-uri de curent redus pentru fiecare dintre luminile de pe terenul de joc (cele sub inserții), butonul de pornire și cele 3 bare de protecție pop au fost livrate cu becuri incandescente care au atins câte 250mA fiecare. Tranzistorii sunt evaluați pentru curent continuu de 530mA, pentru a nu depăși acest lucru, am asigurat că numai două incandescente au trecut printr-un singur tranzistor.

Am atașat de asemenea un buzzer pasiv 5V piezo, care ne permite să jucăm sunete rudimentare pe acest panou.

Secvențele de lumină și sunet personalizate pot fi programate utilizând funcțiile light_sequence + sound_sequence sau prin interfața Language Pinball.

  • 10 tranzistoare de iluminat (am folosit acestea)
  • 5V buzzer piezo

Pasul 10: Pasul 11: Elaborarea regulilor jocului

Există două opțiuni pentru definirea regulilor jocului pinball. Puteți interacționa cu jocul utilizând un document de pinball personalizabil sau reguli de joc cu coduri grele. Regulile de joc cu coduri grele permit o mai mare flexibilitate, inclusiv fotografii secvențiale și bonusuri temporizate, în timp ce sistemul de documentare / parser permite utilizarea unor reguli mai flexibile, dar mai simple. Vom începe cu interfața pentru jocul configurabil și apoi vom detalia câteva reguli de joc cu coduri grele astfel încât să puteți alege configurația pe care o doriți pentru propriul joc de pinball.

Consultați depozitul github aici pentru fișierele menționate în acest proiect.

Partea 1. Elaborați regulile jocului

Masina de stat implicită pentru un joc de pinball este furnizată în imagine.

Acest lucru este furnizat în codul inițial implicit. Acum aveți două opțiuni - fie să vă scrieți propriul cod pentru mașină, fie să utilizați formatul specificat pentru jocul pinball.

Pasul 11: Opțiunea 1. Scrieți propriul fișier Pinball.txt

În documentul de tip pinball, veți găsi trei secțiuni: unul pentru părți, unul pentru "state" și unul pentru "acțiuni". Aici puteți defini acțiunile specifice pentru fiecare componentă. Pentru cele mai multe componente, probabil veți dori să rămânem la o mașină de stat cu un stat. De exemplu, dacă de fiecare dată când o bara de protecție este lovită, jucătorul ar trebui să înscrie mai mult de 100 de puncte, să aprindă o rampă și să înscrie 100 de puncte, atunci diagrama de stare ar arăta ca Figura 1 cu codul corespunzător. Dacă doriți ca o componentă să aibă o mașină de stat cu mai multe stări, să zicem că ați vrut să aprindeți o lumină atunci când o bara de protecție este lovită și apoi opriți atunci când este lovită din nou, diagrama de stare / stările corespunzătoare ar arăta ca Figura 2 Masina noastră specifică oferă structurile, ca în figura 3, pentru care puteți defini regulile. Numele lor, macrocomenzile interne codificate (pe care nu trebuie să vă faceți griji, dar care ar putea fi utile dacă vă decideți să investigați codul sursă) și codurile de întrerupere sunt date în Figura 3. Figura 4 leagă aceste nume de componentele playfield.

Sfaturi pentru scrierea jocului de pinball
Deoarece componentele jocului sunt legate de anumite întreruperi (indicate de câmpul "pos") care sunt la rândul lor definite de hardware, nu recomandăm modificarea prea mult a secțiunii "piese" în afara câmpului "state". rezervând starea 0 și acțiunea 0 pentru componentele care nu au efecte asupra punctajului, cum ar fi butonul de pornire și comutatorul de joc. Codul nostru pare a fi prezentat în Figura 5.

Pasul 12: Definiți secvențele de lumină și sunet

Cele opt lumini de pe placă sunt controlate folosind un decodor de la 3 la 8 și un întrerupător principal, după cum a fost descris anterior. Luminile specifice pot fi aprinse prin scrierea pinilor corespunzători versiunii codate binare a codului parțial ridicat. Funcția helper light_sequence oferă o interfață pentru ca utilizatorul să specifice lumina pe care dorește să o aprindă, iar macro-urile sunt definite în documentul state_machine_headers.h. Un tabel din nou a fost furnizat pentru comoditatea dvs. de programare. În ceea ce privește Sound, am folosit biblioteca de tonuri Arduino pentru a programa secvențe de sunet scurte pentru diverse evenimente de joc. Avem patru sunete pre-făcute pe care le puteți alege (folosind executeSound (<de sunet pe care doriți>)). Aceste sunete corespund unei secvențe lungi, vesele, secvențe scurte vesele, scurte secvențe triste și secvențe lungi tristă. Dacă doriți să programați propriile sunete, puteți căuta aici cum să faceți acest lucru (pitch.h a fost inclus în repozitoriu): http://www.arduino.cc/en/Reference/Tone

Pasul 13: Încărcați fișierul Pinball.txt în Arduino

Odată ce ați terminat de scris FSM, iată cum să încărcați jocul pe Arduino (presupune că utilizați Mac). Toate fișierele pot fi găsite în depozitul github.

  1. Dezarhivați fișierul zip din arduino-serial.
  2. Navigați la fișierul arduino-serial și salvați aici fișierul de configurare a jocului. "Pinball.txt" oferă un exemplu de șablon pe care îl puteți utiliza.
  3. Deschideți Arduino. Încărcați schița pentru jocul pinball.
  4. Deschideți terminalul și tastați următoarele comenzi:
    • face
    • ./arduino-serial -b 9600 -p pinball.txt
  5. Acum ar trebui să citim și să stocăm date în memoria internă a lui Arduino. Dacă există linii deformate, Arduino va imprima un mesaj de eroare și puteți alege să retrimiteți fișierul.
  6. După ce ați terminat încărcarea codului utilizând terminal, de ex. când Arduino imprimă un mesaj "terminat", puteți deschide seria Arduino pentru a citi mesajele din jocul în desfășurare.

Probleme obișnuite / optimizări pentru jocul software

  1. Jocurile hard-codate vs. configurabile - am observat că întreruperile din jocul codificat greșit au răspuns mult mai precis decât cel din jocul personalizabil. Acest lucru se datorează faptului că jocul personalizabil avea o mulțime de funcții generale care necesitau declarații condiționate. Acest lucru a încetinit viteza de citire a buclei, ceea ce ne-a determinat să pierdem mai multe întreruperi și să afectăm viteza generală de funcționare a jocului. Pentru a rezolva această problemă, am redus unele particularizări ale jocului de configurare pentru a obține timpi de răspuns acceptabili în circuit. Am avut inițial preocupări cu privire la capacitatea RAM a Arduino și cât de mult din regulile de joc le-ar putea stoca, dar acest lucru sa dovedit a fi mai puțin o problemă decât se așteptau inițial și viteza bucla era cea mai mare factor limitativ.
  2. Debuntarea întrerupe - din cauza acțiunilor rapide ale jocului de pinball, am avut mai multe cazuri în care pinul de întrerupere a primit mai multe întreruperi pentru ca pinballul să lovească doar o componentă de joc. În plus, deoarece aceste întreruperi au fost primite înainte ca encoder-ul să aibă timp să citească corect toate intrările, întreruperile ar fi legate de componente incorecte. Pentru a rezolva această problemă, am folosit o bibliotecă externă de debouncing care răspunde la 1 ms după primirea primei întreruperi, dând timp pentru ca pinii codorului să ajungă la înălțime înainte ca jocul să citească codul de intrare.
  3. Afișaj - Deși afișarea pe serii permite jocului să tipărească mesaje detaliate, este greu pentru un jucător să citească mesajele de ieșire atunci când joacă un joc de pinball cu ritm rapid. De asemenea, este greu pentru ca jucătorul să trebuiască să joace jocul cu un computer atașat. În viitor, sperăm să implementăm un afișaj digital care poate afișa scorul și alte informații despre joc într-un afișaj pe care utilizatorul îl poate vedea cu ușurință, cum ar fi o matrice LED sau un ecran cu 7 segmente.

Pasul 14: Opțiunea 2: Sfaturi privind codarea greșită a propriului joc

În primul rând, citiți documentul state_machine_headers.h pentru a înțelege structurile globale de date care stochează informații despre mașina de stare. Ar trebui să inițializați aceste structuri de date în regulile jocului în ID-ul Arduino înainte de a încărca codul Arduino. Următoarele structuri de date sunt furnizate:

Jocul se bazează pe informația despre fiecare parte. Statele trebuie să dețină informații despre tranzițiile de stat Acțiuni pentru a ține informații despre acțiunile care urmează a fi executate Aceste structuri sunt populate de fișierul citit. Definiți intrările / ieșirile pentru toate pinii. Pini de întrerupere ar trebui să fie definite ca PIN-uri INPUT.

În bucla principală, verificați fiecare ciclu pentru a vedea dacă a fost declanșată o întrerupere pentru fiecare componentă de joc. Definiți fiecare componentă de joc în cadrul unei instrucțiuni de comutare.

Funcția helper executeState actualizează starea curentă a piesei și efectuează acțiuni pe baza informațiilor codificate.

Prima versiune codificată a codului de joc poate fi găsită în fișierul "simplepinballgame.ino"

Pasul 15: Conectați totul

Pentru a interconecta Arduino cu panourile șoferului nostru, am folosit un prototip pentru a accesa mai ușor pini de pe celelalte plăci. Există o mulțime de fire, așa că ai grijă! Urmați aspectul dat în "Pini electronici și aspect" pentru a conecta prizele dvs. Arduino la pinii lor corespunzători. Conectorii Molex ar trebui să vă ajute mult în găsirea conectorilor care se conectează cu aceștia.

Iată câteva întrebări frecvente privind depanarea în cazul în care întâmpinați oricare dintre problemele comune pe care le-am făcut:

Natura encoderului de intrare este aceea că există 6 pini de intrare în Arduino: 5, care împreună arată care intrare este declanșată, și un pin 6 care merge ridicat dacă se declanșează o singură intrare. Codul scris doar detectează când acest pin al șaselea se schimbă de la scăzut la înalt. Deci, dacă Arduino nu primește nicio intrare și sunteți sigură că toate sau cel puțin cele mai multe switch-uri funcționează, verificați dacă vreun switch nu este blocat. De exemplu, dacă toate țintele de abandonare sunt în jos și nu au fost aruncate înapoi, acesta este un comutator închis și împiedică Arduino să primească alte intrări.

Verificați dacă piulița care ține șoferul în poziție este strânsă complet sau dacă blocajul shooter nu este slăbit. Alternativ, uleiul de tija de la shooter.

Aceasta poate fi o problemă mecanică / de proiectare în cazul în care comutatoarele sunt plasate într-o bandă prea largă, permițând mingea să meargă "în jurul" lor. În caz contrar, poate fi rezultatul unei întârzieri prea lungi undeva în cod. Dacă, de exemplu, sunteți ocupat să jucați un ton folosind biblioteca de tonuri și o declarație de întârziere (), Arduino nu va putea prelua intrări în acel moment. O soluție pe care am folosit-o era doar să redau sunete pentru rampă, ținta standup, butonul de pornire și comutatorul de la sfârșitul jocului, după cum știm cât de mult timp am avea după aceste fotografii înainte ca o nouă intrare să se declanșeze .

Desigur, nu am atribuit antete specifice pentru lumini specifice sau pentru solenoizi specifici, ceea ce înseamnă că prima dată când conectați totul (sau mai târziu dacă nu îi etichetați cumva), pinii de ieșire (sau codarea luminii de ieșire) sunt conectați în ordine arbitrară. Utilizați încercarea și eroarea pentru a rezolva care pini corespund la care ieșire și ajustați codul în consecință. Pentru luminile și barele de protecție, acest lucru nu este atât de rău - dar etichetați cu siguranță toate intrările și notați care este, deoarece acest proces poate avea până la 24 de valori și va dura un pic mai mult pentru a calibra.

Codificatorul are proprietatea nefericită de a impulsiona uneori pinul indicatorului înainte ca cei 5 pini ai codificatorului să-și fi rezolvat complet valorile. Pentru noi, știam că acest lucru a avut loc când numărul comutatorului care a fost apăsat a fost decalat, dar ar putea să apară diferit pentru tine. Am rezolvat această problemă utilizând o bibliotecă debouncing pentru a crea un pic de întârziere între momentul în care observăm că o comutare a fost schimbată și când am înregistrat ce comutator a fost. Cu grijă, totuși, deoarece prea multă întârziere (mai mult de 15-20mS) vă poate face să pierdeți complet intrările.

Ne pare rău, dar nu am reușit să găsim încă o soluție bună pentru acesta.