Élő

Hogyan építsünk egy Arduino Pinball gépet: 15 lépés (képekkel)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Demjén Ferenc - Hogyan tudnék élni nélküled (HQ)

Tartalomjegyzék:

Anonim

Ha tetszik nekem, szereted a flipperet, de nincs pénzed ahhoz, hogy megvásárolj vagy térjen meg, hogy illeszkedjen a teljes méretű játékhoz. Akkor miért ne építsd meg a sajátodat?

Itt sétálunk át, hogyan hozhatunk létre saját egyéni flipper játékot egy Arduino által. A játéknak fényei, hangjai, valódi pinball-részei vannak, beleértve a lökhárítót, a cseppcélokat és a slingshots-ot, és még rámpa is van.

Ez a projekt nagyon nagy mennyiségű és sokféle anyagot igényel, ezért az egyes lépések elvégzéséhez szükséges új anyagokhoz forduljon minden további szakaszhoz. Kezdetben nagyon hasznos, ha hozzáférést biztosít egy lézervágóhoz vagy CNC-útválasztóhoz, valamint az alapvető elektronikus és hardvereszközökhöz.

A szerző megjegyzése: Ez az instructable nemrég megjelent, és nem minden tervezési és szoftverfájl teljesen megszervezett. Ha meg akarja használni a fájljainkat, kérjük, hagyjon megjegyzést, hogy megbizonyosodhassunk arról, hogy minden a legkorszerűbb állapotban van.

kellékek:

1. lépés: Tervezés

A fenti képen egy Solidworks tervezője a játszótérnek és a támogató egységnek. A játékmező tisztán egyedi, de a lövésvonalak (mint például a hátsó hurok lövésének görbéje) valódi pinball-gépeken lettek tervezve, hogy biztosítsák a zökkenőmentes játékot. Az egyik nehézség az, hogy összetettségük miatt a tényleges flipper alkatrészeket (pl. A lökhárítók és a cseppcélok) nem modellezték, de még mindig gondoskodni kell arról, hogy mindent elférjen a játszótér alatt - az alkatrészek sokkal nagyobbak a fentiek alatt.

A fájlok a tárolóban találhatók, így nyugodtan módosíthatja a tervezést, hogy megfeleljen a képzeletének.

A design néhány kiemelése:

A játszótér 42 "-ig 20,25 hüvelykes, pontosan az 1980-as évek Bally-stílusú játékainak mérete. ½ ”rétegelt lemezből készül, amely szabványos és nem változtatható meg, mivel a flipper részegységek erre a vastagságra vannak tervezve. A falak ½ ”rétegből állnak egy ¼” -es réteg tetején. Az első prototípusban csak ½ ”falak voltak, de ezek túl rövidnek bizonyultak, és különösen kemény felvételeken a levegőbe juttatták a flipperet. Másodszor, ez a kialakítás lehetővé teszi a kissé emelt lövöldözős vonalat (a képen látható), amely lehetővé teszi, hogy a labda enyhén bejusson a játszótérbe, de nem tér vissza vissza.

A rámpa tiszta, akril és 3d nyomtatott támaszokkal van kialakítva. Ez áthalad a játszótéren, hogy a játékosnak lehetősége legyen többször egymás után rámpálni a bal oldali papucsból. Mint ilyen, az átlátszó akril nem akadályozza a játékos nézetét a táblázatban:

Végül, a játéktér rövid falakkal van ellátva a négy sarkon, amelyek a játékteret a szokásos 6,5 fokos lejtőkön tartják. A hátsó falnak van egy alsó „polcja”, amely eltávolítható és az elektronika felszerelésére szolgál. Ez egy teljes méretű játékteret eredményez, de sokkal kompaktabb, mint egy tipikus játék, és egy személy kézzel is szállítható. Mivel a játékterület szabványos méretű, ezek a támogatások eltávolíthatók, ha a játékteret egy szabványos flipper-szekrénybe kívánja helyezni. Ehhez érdemes megfontolni egy golyóvisszatérő szerelvény hozzáadását, amely nem szerepel ebben a kialakításban.

2. lépés: Vágja le a fát

A játszótér rétegeinek vágásához lézervágót használtunk. Azonban a lézervágó, amely elég erős ahhoz, hogy ½ ”-es rétegelt lemezeket vágjon, nehéz megtalálni, jó minőségű rétegelt lemezre van szükség, és veszélyt jelenthet a tűz megkezdésekor, ha nem gondos. Jellemző játéktereket használnak CNC-útválasztóval - míg a sarkok némelyike ​​nem olyan éles, hogy még mindig tisztességes eredményeket kell elérnie. Az egyszerűség kedvéért az alábbi lépések azt feltételezik, hogy ugyanazzal a lézervágóval rendelkezünk, amit tettünk. Vannak olyanok, akik tisztességes eredményeket értek el, csak fúróval és kirakós játékkal, de nagyon óvatosnak és nagyon türelmesnek kell lenniük, ha ezen az úton jársz.

Az első lépés a játékmező létrehozásában a design átalakítása .DXF fájlokká, amelyek lézervágóba adagolhatók. Például a lejátszó .DXF fájl az alábbi képen látható. A projektben használt fájlok megtalálhatók a tárolóban.

A lézervágó segítségével kivágjuk a játékteret, a ¼ ”közbenső réteget (duront, olcsóbb fa-szerű prototípusokat használtunk, de ¼” rétegelt lemez is működik), a ½ ”felső réteget, és a ½” réteget. támogat.

Szükséges anyagok:

  • ½ ”rétegelt lemez a játszótér és a bázis számára
  • ¼ ”rétegelt lemez vagy duron a közbenső falréteghez
  • ½ ”, ¾” és 1 ”fa csavarok
  • Hozzáférés egy CNC routerhez vagy lézeres vágóhoz

3. lépés: A Playfield összeszerelése

Kezdjük úgy, hogy a darabokat a ¼ ”duronrétegből a megfelelő helyre helyezzük a rétegelt lemezre. Kézi fúróval, először 3/32 ”-es fúróval fúrjon ki egy lyukasztó lyukat, majd az ¼” -es réteg rögzítéséhez használja a síkfejű ¾ ”csavarokat. Fontos, hogy ezt a felülről lefelé (azaz úgy, hogy a csavar először áthaladjon a ¼ ”rétegben, majd a ½” bázisban, mivel az ¼ ”részek kicsiek és vékonyak, és ellenkező irányú fúrás esetén elhajlanak az alaprétegtől. Fontos továbbá meggyőződni arról, hogy a csavarfejek egybeesnek-e az ¼ ”-es réteggel, és ne adjanak további vastagságot.

Egy utolsó megjegyzés: ezek a csavarok szinte bárhová mehetnek, mivel ez a réteg többnyire láthatatlan lesz a játékos számára, miután összeszerelték a játékteret. De van egy kivétel - ne tegye a csavarokat a lövöldözős sávba. (Először ezt a hibát vétettük).

Ezután rögzítse az oldalsó falakat, és a leghosszabb fa csavarokkal fúrja be őket a lap tetejéről, úgy, hogy a csavarfejek egybeesnek a tetejével. Amint ez megtörténik, szorítsa be a ½ ”rétegeket a duron tetejére, és csavarja be őket, mint az előzőekben, kivéve, ha az 1” csavarral az alsó részről csavarodik. Mivel a felső réteg ½ ”vastag, kevésbé valószínű hogy elhajoljon az alapról, és az alsó csavarozás biztosítja, hogy a csavarok láthatatlanok maradjanak a lejátszó számára.

Végül csatolja be a lövöldözős blokkot (a fenti képen, lövővel), csavarja be az alsó oldalról 2 csavarral, hogy a blokk ne csavarodhasson. A lövöldözős blokknak van egy "U" alakú nyílása, amely illeszkedik a lövőhöz, és amely a másik oldalon lévő anya meghúzásával telepíthető. Lehet, hogy kenőanyagot kell használnia a lövedék és a labda közötti súrlódás csökkentése érdekében.

Ebben a pillanatban a tervezésnek szüksége lehet néhány módosításra. Például a tervezés során a cseppcélok vágása túl szűk volt, és dremel használatával bővíteni kellett. Ha fájljainkat referenciaként használjuk, próbáld meg kapcsolatba lépni a szerzőkkel, akik esetleg frissített fájlokat tudnak nyújtani. Az is jó ötlet, hogy minden durva területet, főleg két fadarabot találjanak le.

Ez nagyrészt a fafeldolgozást eredményezi, és a komponensek elhelyezésére is elmozdulhatunk.

Szükséges anyagok:

  • 3/4 "lapos fejű csavarok
  • Lövöldözős összeállítás
  • Hosszabb (~ 1,5 ") fa csavarok
  • 3/32 hüvelykes kézi fúrógép
  • Kenőolaj
  • 1 "lapos fejű csavarok
  • Fájl és / vagy dremel és csiszolópapír

4. lépés: Az összetevők hozzáadása

Ezzel a tervezési szakaszban egy általános elképzelésnek kell lennie arról, hogy milyen orientáció szükséges ahhoz, hogy az összes alkatrész ténylegesen illeszkedjen a játékmező alá. (Ha a tervezést használja, utaljon a fenti táblázat alsó oldalának képére).

Először telepítse a cseppcélokat, az állványcélokat és a csúzli szerelvényeket úgy, hogy ½ ”-es csavarokat helyez el a szerelvény szerelési lyukain keresztül. Tegye meg ugyanazt a pop lökhárítókkal, de győződjön meg róla, hogy először eltávolítja a kupakot, vagy a szerelvény nem illeszkedik a lyukába!

Másodszor, telepítse a flipper szerelvényeket. Győződjön meg arról, hogy a helyes irányban forognak. A mágnesszelep tüzeléskor a csapot a tekercsbe fogja, és a forgótengelyt úgy kell elforgatni, hogy a flipper a játéktér felé forduljon. Miután a flipper szerelvényeket telepítették, csatlakoztassa a flipper denevéreket a másik oldalról.Használja a csavarkulcsot a szerelvény anyacsavarján, hogy meghúzza a helyükre, majd használja az összeszereléshez szükséges rugót, hogy megbizonyosodjon arról, hogy a papucsokat vissza nem húzzák, ha nem égnek.

Hasonlóképpen szerelje be az összes megfordító kapcsolót az 1/2 "csavarokkal, biztosítva, hogy a felső oldalról könnyen lehúzhatók legyenek, és a 6-32 csavarok segítségével csatlakoztassa a kapu kapcsolót a bal felső részén. Ez a kapu kapcsoló egyirányú nyílásként is szolgál, amely lehetővé teszi a jobb oldali és a lövöldözős lövések felvételét a lökhárítókba. különböző helyeken, és több játékot ad a játékhoz.

A lámpák telepítéséhez először helyezze be a műanyag betéteket a lyukakba. Ezek a betétek kb. CNC-útválasztó használata esetén a helyes módja annak, hogy egy ¼ ”-es réteget vágjon, amely valamivel nagyobb, mint a betét lyuk. Tervezésünkben, mivel a lézervágó nem tud részleges rétegeket vágni, 3D-ként nyomtatott zárójeleket használunk, amelyek támogatják a betéteket. Az epoxi használatával tartsa a betéteket a helyére (először durvítsa meg az éleket) és a csiszolópapírt, hogy megbizonyosodjon arról, hogy a betétek szintje a játékmezővel egyenletes.

Ezután helyezze be és helyezze be a LED-eket a tartóikba a helyére. Ezután csavarja be a konzolokat a helyére úgy, hogy ezek a LED-ek közvetlenül az egyes betétek alatt üljenek. Az alábbi linkek nagyon vékonyak, és elég vékonyak ahhoz, hogy az 1/2-es csavarok átnyúlhassák az asztal tetejét. Használjon pár alátétet, hogy ez ne történjen meg.

A játéktábla-oszlopokat a 6-32 csavarok segítségével telepítik. Ha be van szerelve, a gumiból készült gumiból csomagolja be őket, hogy passzív lökhárítót készítsen. Ezek sokkal több „életet” adnak a táblázatnak, mintha teljesen a rétegelt lemez lenne. Ugyanazzal a csavarral rögzítse a sávvezetőket a papucsok fölé. Szintén ragasszuk a játék végét a helyére.

Ne feledje, hogy a legtöbb játéknak van egy dedikált golyós visszatérő egysége, mint az itt. Ez azonban nem szerepelt ebben a tervben, elsősorban a költségek miatt. A kompromisszum természetesen az, hogy a játékos most felelős azért, hogy a labdát visszahelyezze a lövöldözős sávba. Van azonban egy lövöldözős játékunk, amely a lövöldözős blokkhoz van csatolva, amint a képen látható.

A flipper gombok és a start gombok úgy vannak telepítve, hogy azokat a lyukakba helyezik, és a palacsintákkal rögzítik. A flipper gomblap kapcsolók 6-32 csavarral vannak csavarozva a gombok közé, és a gombok lenyomásakor bezárják a kapcsoló áramkört.

Ezen a ponton a játéktéred (felülről) majdnem egy teljes flipperasztalhoz hasonlítanak! Minden, ami hiányzik, a rámpa. Nyugodtan nyugodj meg barátaid között arról, hogy milyen félelmetesnek tűnik, miközben magántulajdonban van attól, hogy mennyi huzalozásra és forrasztásra van szükség.

Szükséges anyagok (a legtöbbet a PinballLife.com-tól vásárolták, és egyszerűen az alábbi kifejezések keresésével találhatók meg).

  • 1 3-bank csepp célszerelvény
  • 3x pop lökhárító szerelvény
  • 1 bal oldali flipper szerelvény
  • 1 jobb oldali flipper szerelvény
  • 2 flipper denevér
  • 2 flipper gomb
  • 2 flipper gombpálca
  • 1 start gomb
  • 1 gumi gyűrű készlet
  • ~ 30 játszótér csillagbejegyzés (1 1/16 ")
  • 2 sávvezető
  • 2 flipper gomblap kapcsoló
  • 2 csuklószerelvény
  • 1 standup target
  • 10 átkapcsoló kapcsoló
  • 8 LED # 44 bajonett stílusú lámpa
  • 8 bajonettfényű könnyű zárójel (Miniatűr bajonett alap 2-vezetékes aljzat hosszú rögzítőelemekkel)
  • 5 1-1 / 2 "x 13/16" kék nyílbetét
  • 3 1 "x 3/4" tiszta golyóbetét
  • 6-32 csavar (2,5 ", valamint néhány kisebb méret), anyák és alátétek
  • ~ 2 "széles kapu kapcsoló (mint például itt, ez nehéz lehet megtalálni, egy régi törött flipper rámpából megvásároltuk az eBay-en vásárolt lemezt)

5. lépés: A rámpa építése

A rámpa elkészítéséhez használjon ¼ ”-es akrilot az alapdarabokhoz és ⅛” akrilokat az oldalsó falakhoz. A tiszta akril szép, tiszta megjelenést eredményez, miközben nem blokkolja a játékos számára a játékteret. A színes akril használata szintén szép megjelenésű lehet, de nem ajánlott teljesen átlátszatlan anyagot használni, mint a fa.

A rámpák alátámasztása 3D-s nyomtatással történik, és egy 6–32 csavar segítségével a játékmezőhöz és a műanyaghoz van csavarozva.

Az itt található akril darabokat akrilcement segítségével ragasztják össze, amely oldószerként lényegében olvad és hegeszt a műanyagot. Győződjön meg róla, hogy egy kis mennyiséget használ, és nagyon erős kötést hoz létre, ami szinte láthatatlan.

A rámpa bejáratánál egy olyan rámpafedél van, mint a fenti képen. Ez egy vékony fémdarab, amely nagyon sima átmenetet biztosít a játéktérről a rámpa műanyagjához, ahelyett, hogy a flippernek „fel kellene ugrania” a műanyag ¼ ”vastagságát. Ezek közül az egyiket olcsón lehet megvásárolni egy flipper-szaküzletből vagy az Ebay-ből (vagyis), vagy egyszerűen csak készítsünk egyet a fémlemezből. A kereskedelmi játékokban ezek szegecseltek, hogy a csavarok ne ragadjanak fel és ne kerüljenek a labda útjába. Mivel erre nem volt megfelelő felszerelésünk, gondoskodtunk arról, hogy síkfejű csavarokat használjunk, és megfelelő hatást érjünk el a műanyagban és a fémben.

A rámpa jobb felső sarkában egy keskeny kapu kapcsoló van csatlakoztatva a 3D támaszokhoz, ahol átfordul a játszótéren. Ez a kapcsoló azt jelenti, hogy milyen eredményeket ért el egy sikeres rámpa lövés.

Szükséges anyagok:

  • 1/4 "tiszta akril (12x24" lap)
  • 1/2 "tiszta akril (12x24" lap)
  • Akril cement
  • Hozzáférés egy 3D nyomtatóhoz és lézeres vágóhoz
  • Rámpaszár
  • Lapos fejű 6-32 csavar a rámpafül számára
  • Kamrafúró vagy kézi szerszám
  • Keskeny kapu kapcsoló

6. lépés: Tervezze meg az elektronikai blokkot és a pin elrendezést

(Szerzői frissítés: A 48V-os meghosszabbítással a tranzisztorok egy részét ebbe a konfigurációba fújhatja. Javasoljuk, hogy 35V vagy ennél alacsonyabb értéket használjon ezeken az elektronikákon, vagy egy professzionálisabb vezérlőkártya-erőforrást, mint például az itt felsorolt ​​forrásokat: .com / wiki / index.php / Építőipar)

Ez a gép 3 feszültségszinttel rendelkezik: 48V a mágnesszelephez, 6,3 V a LED-ekhez és 5V a logika és a hang. Ezeknek a feszültségszinteknek a biztosítása érdekében CNV tápegységet használtunk a 48V-os és az off-the-shelf egyenáramú adapterekhez a 6,3V-os és az 5V-os készülékek biztosításához. (Lehet, hogy csak a 6,3 V-ot használjuk, mivel az Arduino a tápfeszültségét 5V-os kimenetére szabályozza, de ezeket a tápegységeket elkülönítettük). A 48V nagyfeszültségű, és bár önmagában nem halálos is káros lehet az alkatrészekre, és gyorsan okozhat az alkatrészek túlmelegedését, ha bármilyen probléma merül fel az áramkörrel. A fő 48V tápegység bemenetén és kimenetén egy 5-A lassú fúvó biztosítékot használjon, hogy elkerülje a tűz indítását, ha a tranzisztorok bármelyike ​​rövid.

Az Arduino pajzson a Molex csatlakozókkal ellátott huzalokat csatlakoztattuk úgy, hogy azok megfeleljenek mind a három allap bemeneti és kimeneti követelményeinek: a mágnesszelep vezetőtábla, a fény / hangvezérlő kártya és a bemeneti tábla.

Tervezésünkben a következő pin-megbízásokat kaptuk. Ez természetesen elég rugalmas. A 0-as PIN-kód nyitva maradt. (Az Instructables nem engedi, hogy a számok listáját 0-tól kezdjük.)

  1. Nyisd ki
  2. Nyisd ki
  3. Megszakítás / beviteli aktív pin
  4. Kódolt bemeneti tű
  5. Kódolt bemeneti tű
  6. Kódolt bemeneti tű
  7. Kódolt bemeneti tű
  8. Kódolt bemeneti tű
  9. Jobb lökhárító kimenet
  10. Középső lökhárító kimenet
  11. Bal lökhárító kimenet
  12. Csökkentse a cél kimenetet
  13. Flipper master kapcsoló kimenete
  14. Főfénykapcsoló kimenete
  15. Fénykimenet
  16. Fénykimenet
  17. Fénykimenet
  18. Hangkimenet
  19. Nyisd ki

Habár nem valósult meg a tervezésünkben, az SCL és az SDA csapok használhatóak a kijelzőn, és a fennmaradó csapok további vezérlésre használhatók, például funkciók hozzáadásához (labda visszatérés) vagy több világítási kombinációhoz.

Szükséges anyagok:

  • 48V CNC tápegység (mint ez)
  • 6.3V-os és 5V-os tápegységek (mint ez)
  • 5A lassú ütésű biztosítékok és biztosítéktartók, valamint a csatlakozáshoz hőcserélő cső
  • Molex csatlakozók
  • Arduino prototípus védőlemez
  • Rengeteg 22AWG huzal, forrasztás és türelem

7. lépés: Készítse el a vezetőtáblákat

A vezetőtábla feladata az Arduino bemeneteinek fordítása, a flipper gombok, és a csúzli a tekercsek égetésére vált. Mivel a jelek 5V-os szinten vannak, és a mágnesszelepek 48V-on vannak, a jel átadásához nagy teljesítményű MOSFETS szükséges. Az ebben a kialakításban használt tranzisztorok a Mouser 100V-os minősítésű MOSFET-ek.

A fentiekben három vázlat látható, amelyek magukban foglalják a békalábokat, a csúzli és a lökhárító / csepp célpontokat. Mindegyiknek némileg eltérő követelményei vannak, de mindegyikben, amikor a tranzisztornak 5V-os jelet kapnak, egy áramút nyílik a mágnesszelepre, és 5-8 amperet tolnak át a tekercsen, hogy egy erőteljes rúgást kapjanak. Ez egy csomó aktuális! Valójában, ez a nagy áram kiégeti az összetevőket, ha a tranzisztort több, mint egy nagyon rövid impulzusnál tartják. Győződjön meg róla, hogy az áramkör tesztelésével, szoftverrel vagy más módszerekkel végezze el, hogy a mágnesszelepet soha ne használja teljesen kb. Egy másodpercig.

A fenti áramkörök fő problémája az induktív rúgás. A mágnesszelepek erőteljes induktorok, és mint tudják, az induktorok áramja nem változhat azonnal. Mint ilyen, amikor a tranzisztor ki van kapcsolva, még mindig van egy rövid pillanat, amikor 5-8 amper áramlik át a mágnesszelepen, és minden, ami a jelenlegi igényekhez van. Ha nincs megadva út a földre, akkor ez az áram a tranzisztoron lévő feszültséget több száz voltos értékig hajtja, és elpusztítja a tranzisztort. Továbbá, ha a tranzisztort elpusztítják, az mindhárom terminált rövidre rúgja, ami folyamatos áramláserősítőt eredményez, és elronthatja a mágnesszelepet, ha nincs megfelelő biztosíték. (8 tranzisztort elpusztítottunk a felfedezésünkben, és megpróbáljuk kezelni ezt a problémát, de szerencsére nem volt mágnesszelep, mivel mindig gyorsan manuálisan leválasztottuk a teljesítményt).

Az induktív rúgás megakadályozásának két módja van: először minden egyes pinball szerelvénynek olyan diódával kell rendelkeznie, amely a tranzisztor lefolyójától a tápfeszültségig mutat. Ez elméletileg meg kell akadályoznia, hogy a tranzisztor lefolyása mindig túllépje a tápfeszültséget, mivel ez egyszer előfordul, hogy a dióda bekapcsol, és az összes maradék energiát leüríti az induktorból. Sajnos valójában ezek a diódák önmagukban nem elég gyorsak ahhoz, hogy elnyomják az induktív rúgást.

A probléma megoldásához hozzáadtunk egy RC „snubber” áramkört. Ez az áramkör egy kondenzátorral rendelkezik egy ellenállással. A kondenzátor elnyeli az áramot az induktorból úgy, hogy a diódának ideje, hogy bekapcsoljon és végrehajtsa a funkcióját. További információ az RC snubber áramkörökről itt található.

A lökhárító / csepegtető mágnesszelep-vezérlő áramkör meglehetősen egyszerű, és csak a tranzisztorral, a mágnesszelepkel, a hegesztővel és a csatlakozással rendelkezik, hogy megkapja az Arduino bemenetét. Ebben a táblában és az azt követő táblákban ügyeljen arra, hogy a mágnesszelepet úgy vezesse be, hogy a dióda (amely nincs ábrázolva) a nagyfeszültségű oldal felé mutat.

A flipper vezető áramkör egy kicsit bonyolultabb három okból. Először is, annak érdekében, hogy a gombnyomás és a flipper művelet között gyorsan reagáljon, javasoljuk, hogy ezt a választ közvetlenül az áramkörben hozza létre, nem pedig az Arduino által kezelt külön bemenetekként és kimenetekként. Az Arduino által okozott késleltetés kicsi, de egy tapasztalt játékos azonnal meg tudja mondani, és csalódni fog az ellenőrzés hiánya miatt.

Másodszor, a békalábak két különböző tekercset (egy kis teljesítményű és nagy teljesítményű tekercset) tartalmaznak, amelyek egy végütközőt kapcsolnak, amikor a papucs magas. Ez a kapcsoló fontos funkciója, hogy lehetővé tegye a nagy teljesítményű tekercsnek, hogy kezdetben tüzet nyújtson, de az alacsony teljesítményű tekercsre (~ 130 ohm és 4 ohm) kapcsoljon, ami elegendő energiát biztosít ahhoz, hogy a papucsot felfelé tartsa. ameddig a gomb el van helyezve, de nem von le annyi áramot, hogy kiégesse a mágnesszelepet. Az alábbi képen az EOS kapcsoló rendszerint zárva van, de a szerelvényünknek normálisan nyitott kapcsolója volt, és egy másik tranzisztort igényelt, amely ezt egy normálisan zárt jelké alakítja.

Harmadszor, miközben azt akartuk, hogy a gombok közvetlenül irányítsák a békalábokat, egy „mester” kapcsolójelet is tartalmazott az Arduino-tól, amely aktiválhatja vagy deaktiválhatja a békalábokat attól függően, hogy a labda játszott-e. Ez a harmadik tranzisztor használatát eredményezi az áramkörben.

Hasonlóképpen, a csípőlemeznek saját szövődményei vannak. Bár csak egy tranzisztort használ, a békalábokhoz hasonlóan, a gyors válaszadáshoz közvetlenül a bemeneti kapcsolókkal kell vezérelni (amelyeket sorozatosan csatlakoztattunk), valamint, hogy nem igényelnek további kimeneti csapokat az Arduino-n. Sajnos, ha a tranzisztor kapuja közvetlenül csatlakozik a kapcsolóhoz, a válasz túl gyors ahhoz, hogy több, mint egy alig észrevehető rúgás, mivel a kapcsoló nem marad nagyon zárt. Ahhoz, hogy egy erősebb rúgás legyen (azaz a hevederek mágnesszelepének "kövesse"), hozzáadtunk egy diódát és egy nagy ellenállást a tranzisztorok kapujában, ami lehetővé teszi a gyors reagálást, de nagy feszültségcsökkenés időállandót hoz létre abban a csomópontban, hogy a kapu elég közel maradjon az 5V (és a tranzisztor bekapcsolt állapotához) ahhoz, hogy észrevehető rúgás jöjjön létre, még akkor is, ha a csuklós kapcsolók újra megnyílnak. Egy másik bonyodalom az, hogy ezt a bemenetet az Arduino-nak küldjük, mivel a bemeneti tábla (amint azt később látjuk) megköveteli alacsony bemenetek, és a csúzli akkor működik, ha egy bemenetet magasra nyomunk. Ennek a problémának a megoldásához egy harmadik tranzisztort is beépítettünk, amely akkor záródik, amikor bármelyik bemenet magas, és így úgy kezelhető, mint bármely más bemeneti kapcsoló a játszótéren.

A vezetőtábla (ténylegesen két lap) két flipper-illesztőprogramból, két slinghot-illesztőprogramból és négy egykapcsolós illesztőprogramból áll a többi mágnesszelep számára. Közvetlenül a forrasztás helyett 0,1 ”-es molex csatlakozókat alkalmaztunk, hogy a táblát a mágnesszelepekhez, tápegységhez és kapcsolókhoz csatlakoztassuk, így bármilyen javítás vagy beállítás könnyebben elvégezhető.

A forrasztópapírokat forrasztópapírokhoz használtuk, de a tényleges PCB-k tervezése ezeknek a funkcióknak sokkal tisztább lenne, és segít enyhíteni a vezetékek elrontását, amit ezek a gépek elkerülhetetlenül tartalmaznak.

anyagok:

  • 12 100V névleges teljesítményű tranzisztor
  • 10-50 uF kondenzátorok (ha lehetséges, nem poláris)
  • 300, 5k és 500k, valamint 3M ellenállások
  • 1 kisebb tranzisztor a csuklós kapcsolóhoz
  • Több 1N4004 dióda
  • Prototípusos forrasztható lapok (vagy még jobb, saját PCB-k kialakítása)

8. lépés: Készítse el az érzékelő bemeneti tábláját

Mivel csak egy Arduino-t használunk, 20 digitális pinsre van korlátozva. A flipper-gépnek azonban néhány tucat egyedi kapcsoló bemenete van, nem is beszélve a fények, a hang és a szolenoidokhoz szükséges kimenetekről. A probléma enyhítése érdekében azt feltételeztük, hogy egyszerre két bemenet sem indulna el (ezáltal csak 1 golyót használunk). Ez a feltételezés lehetővé teszi számunkra, hogy „kapcsoljuk be” a kapcsoló bemeneteit úgy, hogy egy 5 bites bináris regisztert alakítunk át egy hatodik PIN-kóddal, amely megszakítást indított, amikor érvényes kapcsoló bemenet érkezett. Ehhez 8-tól 3-ig terjedő kódolók kaszkádját használtuk, hogy egy 24-től 5-ig terjedő kódolót használjunk a kódoló segítségével a fenti képeken.

Ez volt a projekt egyik legfontosabb fejleménye, mivel lehetővé tette számunkra, hogy nagyban növeljük gépünk összetettségét kezdeti tervünktől kezdve, hogy csak a csúszók, lökhárítók és egy vagy két célpont volt.

A 24 hím Molex csatlakozót egy második prototípus-táblára használtuk; mindegyik kapcsoló a játékterületen egy női csatlakozót tartalmazna egy hosszú huzal végén, amely csatlakozik ehhez a táblához. A csepp célpontok egy egyedülálló eset, amely többféleképpen kezelhető. Amit mi csináltunk, minden egyes csepp célkapcsolót sorba állítottunk, hogy a bemenet lezárásra kerüljön, amikor az összes le van kapcsolva, és lehetővé teszi az Arduino számára, hogy jelet küldjön a mágnesszelepnek, hogy visszahúzza a csepp célokat.

anyagok:

  • 4 3-állapot-kimenet elsődleges 8-tól 3-ig terjedő kódoló

9. lépés: Készítse el a Light / sound / score perifériás táblát

Ahhoz, hogy a jeladókhoz hasonló módon mentse a csapokat, 3-tól 8-ig terjedő dekódert használtunk fényeink vezérlésére. Ez azt a korlátot biztosított számunkra, hogy egyszerre több fényt sem tudtunk megvilágítani, de ez elfogadható kompromisszum volt, hogy felszabadítsuk a csapokat más elemek számára. A negyedik „master” fénykibocsátást is felvettük, amely egyszerre tudta vezérelni az összes fényt. Ez például lehetővé teheti, hogy a játék első bekapcsolásakor többször villanunk fel minden fényt (erősen jelezve, hogy valami történik a lejátszóval, amikor megnyomja a Start gombot, ami egyébként nehéz lesz labda vályú vagy színes kijelző).

A fenti vázlat a vezetőkhöz hasonló tranzisztoros áramkört tartalmaz, de sokkal egyszerűbb, mivel a játékban lévő alacsonyabb feszültségek (6,3V a fényeknél) kisebb tranzisztorokat igényelnek, és nem igényelnek annyi védelmi áramkört. A tranzisztorokhoz egy diódát vagy kaput használtunk, hogy elkülönítsük a fő kapcsoló jelét és az egyéni fényjelet. Ez lehetővé teszi, hogy csak egy tranzisztort használjunk fényenként két helyett, és megakadályozzuk, hogy az Arduino és a kódoló chipek „harcoljanak” a forrás vagy a mosogató áram felé.

Míg az alacsony áramerősségű LED-eket használtuk mindegyik játékterülethez (a betétek alatt), a start gomb és a 3 pop lökhárító mindegyike izzólámpákkal rendelkezett, amelyek kb. A tranzisztorok 530 mA-es folyamatos áramot kapnak, így nem haladhatják meg ezt, meggyőződtünk arról, hogy csak két izzólámpa jutott át egyetlen tranzisztoron.

Egy passzív 5V-os piezo-zümmögőt is csatlakoztattunk, amely lehetővé teszi számunkra, hogy kezdetleges hangokat játsszunk erre a táblára.

Az egyéni fény- és hangsorozatokat funkciók fény_követés + sound_sequence vagy a Pinball Language felületen keresztül programozhatjuk.

  • 10 világító tranzisztor (ezeket használtuk)
  • 5V Piezo hangjelző

10. lépés: 11. lépés: Játékszabályainak megtervezése

A pinball játék szabályainak meghatározására két lehetőség van. A testre szabható pinball-dokumentum vagy kemény kódú játékszabályok segítségével kölcsönhatásba léphet a játékkal. A kemény kódolású játékszabályok nagyobb rugalmasságot tesznek lehetővé, beleértve a szekvenciális felvételeket és az időzített bónuszokat, míg a pinball dokumentum / elemző rendszer használata rugalmasabb, de egyszerűbb szabályokat tesz lehetővé. Kezdjük a konfigurálható játék interfészével, majd részletezzük néhány kemény kódolású játékszabályt, így kiválaszthatja, hogy melyik konfigurációt szeretne saját pinballjátékához.

A projektben hivatkozott fájlokról itt olvashat a github-tárolóban.

1. rész. Tervezze meg a játékszabályokat

A képen a flipper játék alapértelmezett állapotgépe található.

Ezt az alapértelmezett indító kód tartalmazza. Most két lehetősége van - vagy a saját kódjának írására a géphez, vagy a megadott flipper játékformátum használatához.

11. lépés: 1. opció. Írja be saját Pinball.txt fájlját

A pinball-szöveges dokumentumban három rész található: az egyik az alkatrészek, az egyik az „állapotok” és az egyik a „műveletek”. Itt megadhatja az egyes összetevők konkrét műveleteit. A legtöbb összetevő esetében valószínűleg egy egyállapotú géphez ragaszkodik. Például, ha a lökhárító minden alkalommal megüt, a játékosnak 100 pontot kell szereznie, megvilágítania egy rámpafényt, és 100 pontot kell kapnia, majd az állapotdiagram az 1. ábrára nézve a megfelelő kóddal. Ha azt szeretné, hogy egy komponens többállapotú állapotú gép legyen, mondjuk, azt szeretné, hogy egy fény bekapcsoljon, amikor egy lökhárító megüt, és akkor kapcsolja ki, amikor ismét megüt, az állapotdiagram / megfelelő állapotuk úgy néz ki, mint a 2. ábra Különleges gépünk biztosítja a struktúrákat, mint a 3. ábrán, amelyekre szabályokat adhat meg. A nevüket, a belső kódolt makrókat (amelyeknek nem kell aggódnia, de hasznosak lehetnek, ha a forráskódot megvizsgálják) és a megszakítási kódokat a 3. ábrán adjuk meg. A 4. ábra ezeket a neveket a játékterek összetevőivel köti össze.

Tippek a flipper játék megírásához
Mivel a játékkomponensek bizonyos megszakításokhoz vannak kötve (amit a „pos” mező jelez), amelyeket a hardver határoz meg, nem javasoljuk, hogy a „részek” részt túl módosítsuk az „állapotok” mezőn kívül. 0 és 0 állapot fenntartása olyan összetevőkre, amelyek nem hatnak a pontozásra, mint például a start gomb és a játékkapcsoló. Kódunk az 5. ábrán látható.

12. lépés: Adja meg a fény- és hangsorozatokat

A táblán lévő nyolc lámpát egy 3-tól 8-ig terjedő dekóder + egy fő kapcsoló vezérli, amint azt korábban leírtuk. Speciális fények világíthatók a magas kód bináris kódolású verziójának megfelelő tűkkel. A light_sequence segítő funkció biztosítja a felület számára, hogy megvilágítsa azt a fényt, amelyet meg akar világítani, és a makrókat az state_machine_headers.h dokumentumban határozzák meg. A programozási kényelem érdekében ismét táblázatot készítettünk. Ami a Sound-t illeti, az Arduino hangkönyvtárat használtuk rövid hangsorozatok programozására a különböző játék eseményekre. Négy előre elkészített hangja van, amelyek közül választhat (a executeSound használatával (<# kívánt hang>)). Ezek a hangok hosszú, vidám szekvenciát, rövid, vidám szekvenciát, rövid szomorú szekvenciát és hosszú szomorú szekvenciát jelentenek. Ha saját hangjait be kívánja programozni, itt megnézheti, hogyan kell ezt megtennie (a pitch.h szerepel a tárolóban): http://www.arduino.cc/en/Reference/Tone

13. lépés: Töltse be a Pinball.txt fájlt az Arduino-ba

Miután elvégezte az FSM írását, itt töltheti be a játékot az Arduino-ra (feltételezi, hogy Macet használ). Minden fájl megtalálható a github tárolóban.

  1. Csomagolja ki az arduino-soros zip fájlt.
  2. Keresse meg az arduino-soros fájlt, és mentse el a játékkonfigurációs fájlt. A „Pinball.txt” egy minta sablont tartalmaz, amelyet használhat.
  3. Nyissa meg Arduino-t. Töltse fel a flipper játék vázlatot.
  4. Nyissa meg a terminált, és írja be a következő parancsokat:
    • csinál
    • ./arduino-serial -b 9600 -p pinball.txt
  5. Most az adatokat az Arduino belső memóriájában kell olvasni és tárolni. Ha bármilyen hibás vonal van, az Arduino hibaüzenetet nyomtat, és választhat, hogy újra elküldi a fájlt.
  6. Ha befejezte a kód feltöltését terminál segítségével, pl. amikor Arduino „kész” üzenetet nyomtat, megnyithatja az Arduino sorozatot a folyamatban lévő játék üzeneteinek olvasásához.

Gyakori problémák / optimalizációk a szoftver játékhoz

  1. Kemény kódolású és konfigurálható játékok - észrevettük, hogy a kemény kódolású játék megszakítása sokkal pontosabban válaszolt, mint a testreszabható játékban. Ennek oka lehet, hogy a testreszabható játéknak sok általános célú funkciója volt, amelyek feltételes utasításokat igényeltek. Ez lelassította a hurok olvasási sebességét, ami miatt megszakadtunk több megszakítást és befolyásoltuk a játék általános működési sebességét. A probléma megoldásához csökkentettük a konfigurációs fájl testreszabhatóságát, hogy elfogadható válaszidőt érjünk el az áramkörben. Eredetileg aggályok merültek fel az Arduino RAM kapacitása és a játékszabályok nagy része miatt, de ez kevésbé volt probléma, mint az eredetileg várt, és a hurok sebessége volt a nagyobb korlátozó tényező.
  2. A megszakítások megvitatása - a flipper játék gyors cselekedetei miatt több esetben is megtörtént, amikor a megszakító pin többszöri megszakítást kapott a pinballnak, ami csak egy játékkomponenset ütött. Továbbá, mivel ezek a megszakítások a kódolónak az összes bemenet helyes olvasásához szükséges idő előtt érkeztek, a megszakítások hibás komponensekhez kapcsolódnak. Ennek a problémának a megoldásához egy külső debitáló könyvtárat használtunk, amely az első megszakítás után 1ms-re válaszol, és így időt ad a kódolótűknek, hogy elérje a magas értéket, mielőtt a játék elolvassa a beviteli kódot.
  3. Kijelző - Bár a soros kijelző lehetővé teszi a játék részletes üzeneteinek kinyomtatását, a játékosnak nehéz leolvasni a kimeneti üzeneteket, amikor gyors ütemű játékot játszik. Az is nehézkes, hogy a játékosnak a számítógéphez csatlakoztatott számítógéppel kell játszania. A jövőben reméljük, hogy olyan digitális kijelzőt kívánunk megvalósítani, amely képes megjeleníteni a pontszámot és más játékinformációkat egy olyan kijelzőn, amelyet a felhasználó könnyen láthat, például egy LED-mátrixot vagy egy 7-szegmenses kijelzőt.

14. lépés: 2. lehetőség: tanácsadás a saját játék kódolására

Először - olvassa át az state_machine_headers.h dokumentumot, hogy megértse a globális adatstruktúrákat, amelyek információkat tárolnak az állapotgépről. Az Arduino IDE-be történő betöltés előtt ezeket az adatstruktúrákat az Arduino IDE-ben inicializálni kell. A következő adatstruktúrák állnak rendelkezésre:

A játékstruktúrák az egyes részekre vonatkozó információk tárolására az államok átmeneti információinak megtartása érdekében Műveletek a végrehajtandó műveletekre vonatkozó információk tárolásához Ezek a struktúrák a beolvasott fájlban vannak feltöltve. Adja meg a bemeneteket / kimeneteket az összes csaphoz. A megszakító csapokat INPUT csapokként kell definiálni.

A főhurkon belül ellenőrizze az egyes ciklusokat, hogy megnézze, hogy minden játékkomponensre megszakadt-e. Határozza meg a játékkomponenseket egy kapcsolási utasításban.

A helperfunkció executeState frissíti az aktuális állapotot, és végrehajtja a kódolt információ alapján végrehajtott műveleteket.

A játékkód első kódja a „simplepinballgame.ino” fájlban található.

15. lépés: Mindent csatlakoztass

Ahhoz, hogy az Arduino-t a vezetőtábláinkhoz csatlakoztassuk, protoshield-et használtunk, hogy könnyebben hozzáférhessünk a többi táblán lévő csapokhoz. Sok vezeték van, ezért légy óvatos! Kövesse az Elektronikus csapok és elrendezésben megadott elrendezést, hogy az Arduino csatlakozóit a megfelelő csapokhoz csatlakoztassa. A Molex csatlakozóknak sokat segítenek abban, hogy kitalálják, mely csatlakozókkal csatlakozik.

Itt van egy rövid hibaelhárítási GYIK, ha bármelyik gyakori probléma merül fel:

A bemeneti kódoló jellege az, hogy 6 bemeneti érintkező van az Arduino-ba: 5, amelyek együttesen mutatják, hogy melyik bemenet van aktiválva, és egy 6-os tű, amely magas, ha egyetlen bemenetet vált ki. A beírt kód csak akkor érzékeli, ha ez a hatodik tű alacsonyról magasra változik. Tehát, ha az Arduino nem kap semmilyen bemenetet, és biztos benne, hogy a kapcsolók mindegyike vagy legalább a legtöbb működik, ellenőrizze, hogy nincsenek-e bekapcsolva a kapcsolók. Például, ha az összes csepp célpont le van állítva, és nem volt hátra lőtt, ez egy zárt kapcsoló, és megakadályozza, hogy az Arduino más bemeneteket kapjon.

Győződjön meg róla, hogy a lövöldözőt tartó anyát teljesen meghúzza, vagy hogy a lövöldözős blokk nem laza. Alternatív megoldásként olajozzuk a lövöldözős rudat.

Ez lehet mechanikai / tervezési probléma, ha a kapcsolók túl széles sávban vannak elhelyezve, ami lehetővé teszi, hogy a labda „körbejárhasson”. Ellenkező esetben a kód túl hosszú késedelme lehet. Ha például foglalt hangot használ a hangkönyvtár és a késleltetési () utasítás használatával, akkor az Arduino nem tudja behozni a bemeneteket ebben az időben. Az egyik megoldás az volt, hogy csak a rámpa lövés, a készenléti cél, a start gomb és a játék vége kapcsolójának hangjait játszottuk le, mivel tudtuk, hogy mennyi idő áll rendelkezésünkre a felvételek előtt, mielőtt új bevitelre kerülne sor. .

Kétségtelen, hogy nem adtunk meg specifikus fejléceket bizonyos fényekre vagy meghatározott mágnesszelepekre, ami azt jelenti, hogy az első alkalommal, amikor mindent csatlakoztatsz (vagy a későbbi időpontokban, ha nem jelölted meg őket valahogy), a kimeneti csapok (vagy kimeneti fénykódolás) kapcsolódnak tetszőleges sorrendben. Használja a próba-és hiba hibát, hogy meg tudja oldani, hogy melyik tűk feleljenek meg a kimenetnek, és ennek megfelelően állítsa be a kódot. A fények és a lökhárítók esetében ez nem olyan rossz - de feltétlenül jelölje meg az összes bemenetet, és írja le, melyik, mivel ez a folyamat akár 24 értéket is tartalmazhat, és egy kicsit hosszabb ideig tart a kalibrálás.

A kódolónak sajnálatos tulajdonsága, hogy a jelzőtüskét néha magasan pulzálják, mielőtt az 5 kódolótüskék teljesen feloldották az értékeiket. Számunkra tudtuk, hogy ez megtörtént, amikor a megnyomott kapcsoló száma egyenként volt, de másképp is megjelenhet. Ezt a problémát úgy döntöttük, hogy egy debouncing könyvtár segítségével egy kis késleltetést hozunk létre, amikor észrevettük, hogy megváltozott a váltás, és amikor rögzítjük, hogy melyik kapcsoló volt. Óvatosan azonban, mivel a túl sok késedelem (több mint 15-20mS), akkor a bemenetek teljes hiányát okozhatja.

Sajnáljuk, de még nem találtunk rá jó megoldást erre.