Hidup

Cara Membina Mesin Pinball Arduino: 15 Langkah (dengan Gambar)

Wooden Pinball + Arduino DIY (40x40cm mini size)

Wooden Pinball + Arduino DIY (40x40cm mini size)

Isi kandungan:

Anonim

Jika anda seperti saya, anda suka pinball, tetapi tidak mempunyai wang untuk membeli atau ruang untuk muat permainan saiz penuh. Jadi mengapa tidak membina sendiri?

Di sini, kami akan berjalan melalui cara membuat permainan pinball tersuai sendiri yang dikuasai oleh Arduino. Permainan ini mempunyai lampu, bunyi, ciri-ciri bahagian pinball yang sebenar, termasuk bumper, drop target, dan katapel, dan bahkan mempunyai jalan.

Projek ini memerlukan sejumlah besar dan pelbagai bahan, jadi rujuk setiap bahagian berikutnya untuk bahan baru yang diperlukan untuk menyelesaikan setiap langkah. Sebagai permulaan, sangat membantu jika anda mempunyai akses kepada pemotong laser atau penghantar CNC serta alat elektronik dan perkakasan asas.

Nota Pengarang: Ini boleh dipelajari yang baru-baru ini diterbitkan dan tidak semua fail reka bentuk dan perisian telah teratur sepenuhnya. Jika merancang untuk menggunakan fail kami, sila tinggalkan komen supaya kami dapat memastikan semuanya berada dalam keadaan paling terkini.

Bekalan:

Langkah 1: Reka bentuk

Digambarkan di atas adalah reka bentuk Solidworks playfield dan pemasangan sokongan. Playfield adalah murni, tetapi garis pukulan (seperti lengkung pukulan gelung belakang) direka berdasarkan mesin pinball sebenar untuk memastikan permainan lancar. Satu kesukaran di sini ialah, kerana kerumitan mereka, bahagian pinball sebenar (contohnya bumper dan sasaran jatuh) tidak dimodelkan, tetapi penjagaan masih perlu diambil untuk memastikan bahawa segala-galanya akan sesuai di bawah playfield - bahagiannya jauh lebih besar bawah dari atas.

Fail-fail dimasukkan ke dalam repositori, jadi jangan ragu untuk menyesuaikan reka bentuk yang sesuai dengan minat anda.

Beberapa kemunculan reka bentuk:

Playfield adalah 42 "dengan 20.25" inci, betul-betul saiz 1980-an permainan gaya Bally. Ia diperbuat daripada ½ "papan lapis, yang adalah standard dan tidak boleh diubah kerana perhimpunan bahagian pinball direka untuk ketebalan ini. Dinding di sini terdiri daripada ½ "lapisan di atas lapisan ¼". Dalam prototaip pertama, hanya ½ "tembok dimasukkan, tetapi ini terbukti terlalu singkat dan boleh memukul bola masuk ke udara pada tembakan keras terutamanya. Kedua, reka bentuk ini membolehkan garis penembak sedikit dibangkitkan (gambar di atas) yang membolehkan bola jatuh sedikit ke playfield, tetapi tidak jatuh kembali.

Jalan ini direka dengan sokongan akrilik dan 3d yang jelas. Ia melintasi playfield supaya ia memberi peluang kepada pemain untuk memukul jalan beberapa kali berturut-turut dari flipper kiri. Oleh itu, akrilik jelas digunakan untuk tidak menyekat pandangan pemain tentang jadual:

Akhirnya, playfield disokong oleh dinding pendek di empat penjuru, yang memainkan playfield pada tahap 6.5 darjah cerun. Dinding belakang mempunyai "rak" bawah yang boleh dikeluarkan dan digunakan untuk memasang elektronik. Ini mengakibatkan permainan dengan playfield bersaiz penuh, tetapi lebih padat daripada permainan biasa dan boleh dibawa dengan tangan oleh satu orang. Oleh kerana playfield adalah saiz standard, bagaimanapun, sokongan ini boleh dikeluarkan jika anda mahu meletakkan playfield itu menjadi kabinet pinball standard. Untuk berbuat demikian, anda mungkin ingin mempertimbangkan untuk menambah perhimpunan bola yang tidak termasuk dalam reka bentuk ini.

Langkah 2: Potong Kayu

Untuk memotong lapisan playfield, kami menggunakan pemotong laser. Walau bagaimanapun, pemotong laser yang cukup kuat untuk memotong ½ "kayu lapis sukar dicari, memerlukan kayu lapis berkualiti tinggi, dan boleh mengambil risiko memulakan api jika anda tidak berhati-hati. Mainfield biasa dipotong menggunakan penghala CNC - sementara beberapa sudut mungkin tidak begitu segar, anda masih perlu mencapai keputusan yang baik. Untuk kesederhanaan, langkah-langkah di bawah akan menganggap anda mempunyai akses kepada pemotong laser yang sama yang kami lakukan. Terdapat beberapa orang yang mempunyai keputusan yang baik menggunakan hanya gerudi dan jigsaw, tetapi anda mesti berhati-hati dan bersabar jika anda pergi ke laluan ini.

Langkah pertama dalam mewujudkan playfield ialah menukarkan reka bentuk ke dalam fail.DXF yang boleh dimasukkan ke pemotong laser. Sebagai contoh, fail playfield.DXF digambarkan di bawah. Fail-fail yang digunakan dalam projek ini dimasukkan dalam repositori kami.

Menggunakan pemotong laser, kami memotong bentuk untuk playfield, ¼ "lapisan pertengahan (kami menggunakan duron, bahan prototaip seperti kayu yang lebih murah, tetapi ¼" papan lapis juga akan berfungsi), ½ "lapisan atas, dan ½" menyokong.

Bahan yang diperlukan:

  • ½ "papan lapis untuk playfield dan pangkalan
  • ¼ "papan lapis atau duron untuk lapisan dinding perantaraan
  • ½ ", ¾", dan 1 "skru kayu
  • Akses kepada penghala CNC atau pemotong laser

Langkah 3: Berkumpul di Playfield

Mulailah dengan mengunci kepingan dari lapisan ¼ "duron ke papan lapis di lokasi masing-masing. Menggunakan gerudi tangan, lubang perintis bor pertama yang menggunakan 3/32 "bit, dan kemudian gunakan kepala rata ¾" skru kayu untuk melampirkan lapisan ¼ "ke playfield Adalah penting untuk melakukan ini dari atas ke bawah (iaitu supaya skru pertama melewati ¼ "lapisan, kemudian ke ½" asas), kerana ¼ "bahagian kecil dan nipis dan akan membengkok dari lapisan asas jika digerudi ke arah yang bertentangan. Ia juga penting untuk memastikan kepala skru dibasahi dengan lapisan ¼ "dan tidak memberikan ketebalan tambahan.

Satu nota akhir: skru ini boleh pergi hampir di mana-mana, kerana lapisan ini akan kebanyakannya tidak dapat dilihat oleh pemain apabila playfield dipasang. Tetapi ada pengecualian - jangan letak skru ke lorong penembak. (Kami mula-mula membuat kesilapan ini).

Seterusnya, pasang dinding sisi, dan gunakan skru kayu terpanjang untuk mengebor ke dalamnya dari bahagian atas papan, sekali lagi supaya kepala skru disiram dengan bahagian atas. Sebaik sahaja itu dilakukan, pasangkan ½ "lapisan lapisan di atas duron, dan skru mereka seperti sebelum ini, kecuali kali ini mengacaukan dari bawah dengan menggunakan 1" skru. Oleh kerana lapisan atas adalah ½ "tebal, ia kurang berkemungkinan untuk membengkok dari pangkalan, dan mengacaukan dari bawah memastikan skru kekal tidak dapat dilihat oleh pemain.

Akhir sekali, pasangkan blok penembak (digambarkan di atas, dengan penembak) dengan mengacaukan dari bahagian bawah menggunakan 2 skru supaya blok tidak dapat memutar dengan mudah. Blok penembak mempunyai slot berbentuk "U" yang sesuai dengan penembak, yang dapat dipasang dengan mengetatkan kacang di sisi lain. Anda juga mungkin perlu menggunakan pelincir untuk mengurangkan geseran antara rod menembak dan bola.

Reka bentuk mungkin memerlukan beberapa pelarasan pada ketika ini. Sebagai contoh, dalam reka bentuk kami, potongan untuk sasaran drop terlalu sempit dan perlu diperluas menggunakan dremel. Jika menggunakan fail kami sebagai lebih daripada rujukan, cuba hubungi pengarang yang mungkin dapat menyediakan fail yang dikemas kini. Ia juga merupakan idea yang baik untuk menghancurkan mana-mana kawasan kasar, khususnya di mana dua keping kayu bertemu.

Untuk sebahagian besar, ini menyimpulkan kerja kayu, dan kita boleh bergerak untuk memasukkan komponen.

Bahan yang diperlukan:

  • 3/4 "skru kayu kepala rata
  • Perhimpunan shooter
  • Skru kayu yang lebih lama (~ 1.5 ")
  • Tangan gerudi dengan 3/32 "bit
  • Minyak pelincir
  • 1 "skru kayu kepala rata
  • Satu fail dan / atau dremel, dan kertas pasir

Langkah 4: Tambah Komponen

Dengan titik ini dalam peringkat reka bentuk, anda harus mempunyai idea umum tentang orientasi yang diperlukan untuk memastikan semua komponen benar-benar sesuai di bawah playfield. (Jika menggunakan reka bentuk kami, sebutkan gambar bahagian bawah jadual kami di atas).

Pertama, pasang sasaran jatuh, sasaran berdiri, dan perhimpunan katapel dengan meletakkan ½ "sekrup kayu melalui lubang pelekap di dalam perhimpunan. Lakukan hal yang sama dengan bumper pop, tetapi pastikan untuk mengeluarkan topi terlebih dahulu, atau pemasangan tidak akan masuk ke dalam lubangnya!

Kedua, memasang perhimpunan flipper. Pastikan mereka berputar ke arah yang betul. Solenoid, apabila dipecat, akan melancarkan pin ke gegelung, dan ini harus memutar aci sedemikian rupa sehingga penipu berputar ke arah playfield. Setelah pemasangan pemasangan dipasang, pasang kelelawar pada bahagian lain.Gunakan perengkuh pada kacang kunci di perhimpunan untuk mengetatkannya ke tempatnya, kemudian gunakan musim bunga yang sepatutnya datang dengan perhimpunan itu untuk memastikan sirip akan dibuang kembali apabila tidak dipecat.

Begitu juga, pasangkan semua suis rollover menggunakan 1/2 "skru, memastikan bahawa mereka boleh dengan mudah ditekan dari bahagian atas dan spring kembali ke tempatnya. Menggunakan bolt 6-32, turut memasang suis pintu di sebelah kiri atas reka bentuk kami, suis pintu masuk ini juga berfungsi sebagai pembukaan sehala, yang membolehkan tembakan dari sebelah kanan dan dari penembak jatuh ke dalam bumper. Ini adalah aspek reka bentuk yang menghasilkan tembakan memasuki jalan yang betul dan gelung yang betul akan tempat yang berbeza dan menambah lebih banyak variasi kepada permainan.

Untuk memasang lampu, letakkan dahulu sisipan plastik ke dalam lubang mereka. Sisipan ini adalah kira-kira ¼ "tebal. Jika menggunakan penghala CNC, cara yang betul untuk dipasang ialah memotong lapisan ¼ "sedikit lebih besar daripada lubang penyambung. Dalam reka bentuk kami, sejak pemotong laser tidak dapat memotong lapisan separa, kami mencetak kurungan 3D yang menyokong sisipan. Gunakan epoksi untuk memegang kemasukan ke tempat (mengisar tepi terlebih dahulu) dan kertas pasir untuk memastikan sisipan adalah tahap dengan playfield.

Seterusnya, masukkan LEDS ke dalam kurungan mereka dengan memasukkan dan memutarnya ke tempatnya. Kemudian, skru kurungan ke tempat supaya LED ini duduk di bawah setiap sisipan. Kurungan ringan di bawah adalah sangat nipis, dan sebenarnya nipis cukup bahawa 1/2 "sekrup boleh menembusi bahagian atas meja. Gunakan beberapa pencuci supaya ini tidak berlaku.

Siaran playfield dipasang menggunakan bolt 6-32. Sekali dipasang, balkan karet dari kit getah di sekitar mereka untuk membuat bumper pasif. Ini memberikan jadual lebih banyak "hidup" daripada jika reka bentuknya menjadi sepenuhnya papan lapis. Menggunakan bolt yang sama, pasangkan panduan lorong tepat di atas sirip. Juga gam suis akhir permainan.

Perhatikan bahawa kebanyakan permainan mempunyai perhimpunan pemulangan bola khusus seperti yang ada di sini. Ini tidak termasuk dalam reka bentuk ini, bagaimanapun, terutamanya disebabkan oleh kos. Sudah tentu perdagangan, pemain kini bertanggungjawab untuk meletakkan bola kembali ke lorong penembak sebaiknya mengalir. Kami mempunyai penembak, walaupun, yang dilampirkan pada blok penembak seperti yang digambarkan sebelum ini.

Butang flipper dan butang mula dipasang dengan meletakkannya ke dalam lubang-lubang dan mengunci dengan palnuts. Suis muka butang flipper dilancarkan di dalam butang menggunakan bolt 6-32 dan akan menutup litar suis apabila butang ditekan.

Pada ketika ini, playfield anda akan (dari atas) menyerupai jadual pinball hampir lengkap! Semua yang hilang adalah jalan. Jangan ragu-ragu dengan rakan-rakan anda tentang betapa hebatnya ia kelihatan sementara secara peribadi ketakutan tentang berapa banyak pendawaian dan pematerian yang perlu dilakukan.

Bahan yang diperlukan (majoriti dibeli dari PinballLife.com, dan boleh didapati hanya dengan mencari istilah di bawah).

  • 1 perhimpunan sasaran jatuh 3-bank
  • Perhimpunan bumper 3x pop
  • 1 unit pemasangan flipper kiri
  • 1 pemasangan flipper kanan
  • 2 kelawar pelapis
  • 2 butang flipper
  • 2 palmet butang butang flipper
  • 1 butang permulaan
  • Set gelang getah
  • ~ 30 jawatan bintang playfield, (1 1/16 "digunakan)
  • 2 panduan lorong
  • 2 suis daun butang flipper
  • Perhimpunan katapel
  • 1 sasaran pendirian
  • 10 suis peralihan
  • 8 LED # 44 lampu gaya bayonet
  • 8 kurungan cahaya gaya bayonet (soket bayonet asas 2 soket kecil dengan pendakap panjang)
  • 5 1-1 / 2 "x 13/16" memasukkan anak panah biru
  • 3 1 "x 3/4" masukkan peluru yang jelas
  • 6-32 baut (2.5 ", serta beberapa saiz yang lebih kecil), kacang, dan pencuci
  • ~ 2 "suis pintu lebar (seperti yang ada di sini, ini mungkin sukar untuk dicari, kita membuangnya dari jalan raya pinball patah lama yang dibeli di ebay)

Langkah 5: Bina Jalan

Untuk membuat jalan, gunakan ¼ "akrilik untuk kepingan asas dan ⅛" akrilik untuk dinding sampingan. Akrilik yang jelas akan memberikan penampilan yang bersih dan bersih tanpa menyekat pandangan playfield untuk pemain. Menggunakan akrilik berwarna juga boleh menjadi pilihan yang bagus, tetapi tidak disyorkan untuk menggunakan bahan yang benar-benar kabur seperti kayu.

Sokongan untuk landasan ini adalah 3D dicetak dengan menggunakan makerbot dan dilancarkan ke playfield dan plastik menggunakan baut 6-32 yang sama.

Kepingan akrilik di sini dipaku bersama menggunakan simen akrilik, yang merupakan pelarut yang secara asasnya meleburkan dan mengimpal plastik bersama-sama. Pastikan anda menggunakan sedikit, dan ia akan membuat ikatan yang sangat kuat yang hampir tidak kelihatan.

Di pintu masuk tanjakan, kami telah memasukkan flap ramp seperti yang terdapat dalam gambar di atas. Ini adalah sekeping logam yang nipis yang memberikan peralihan yang sangat halus dari playfield ke plastik tanjakan, dan bukannya mempunyai pinball harus "melompat" ¼ "ketebalan plastik. Anda boleh membeli salah satu daripada ini murah dari kedai pinball khusus atau Ebay (kami lakukan), atau hanya membuat salah satu daripada anda sendiri daripada logam lembaran. Dalam permainan komersial, ini dipetik supaya bolt tidak melekat dan masuk ke dalam bola. Oleh kerana kita tidak mempunyai peralatan yang sesuai untuk melakukan itu, kami memastikan menggunakan skru rata rata dan betul-betul mengelilingi lubang plastik dan logam untuk mencapai kesan yang sama.

Terdapat suis pintu sempit yang dilampirkan pada sokongan 3D di sudut kanan jalan raya, di mana ia beralih ke padang permainan. Suis ini adalah rekod apabila tembakan jalan yang berjaya telah dipukul.

Bahan yang diperlukan:

  • 1/4 "acrylic jelas (12x24" lembaran)
  • 1/2 "akrilik jelas (12x24" lembaran)
  • Simen akrilik
  • Akses kepada pencetak 3D dan pemotong laser
  • Flap ramp
  • Injap 6-32 kepala rata untuk flap ramp
  • Alat gerudi bit atau alat tangan
  • Suis pintu sempit

Langkah 6: Merancang Blok Elektronik dan Layout Pin

(Kemas kini Pengarang: Dengan penggunaan lanjutan, 48V boleh meniup beberapa transistor dalam konfigurasi ini. Saya akan mengesyorkan menggunakan 35V atau lebih rendah dengan elektronik ini, atau menggunakan sumber papan kawalan yang lebih profesional seperti yang disenaraikan di sini: http: // pinballmakers .com / wiki / index.php / Pembinaan)

Mesin ini mempunyai 3 tahap voltan: 48V untuk kuasa solenoid, 6.3V untuk LED, dan 5V untuk logik dan bunyi. Untuk memberikan tahap voltan ini, kami menggunakan bekalan kuasa CNC untuk 48V, dan penyesuai DC off-the-shelf untuk menyediakan 6.3V dan 5V. (Mungkin hanya menggunakan 6.3V, kerana Arduino turun mengawal voltan bekalannya ke pin keluaran 5V, tetapi kami menyimpan bekalan kuasa yang terpencil). 48V adalah voltan tinggi, dan walaupun tidak mematikan dengan sendirinya boleh merosakkan bahagian dan dapat menyebabkan komponen menjadi terlalu panas jika ada masalah dengan litar. Gunakan gegelung lambat 5-A pada kedua-dua input dan output bekalan kuasa utama 48V untuk mengelakkan memulakan api jika mana-mana transistor pendek.

Pada perisai Arduino, kami menyambung wayar dengan penyambung Molex wanita yang direka sesuai dengan keperluan masukan dan keluaran masing-masing dari tiga sub-papan: papan pemuat solenoid, papan pemacu lampu / bunyi, dan papan input.

Dalam reka bentuk kami, kami mempunyai tugasan pin berikut. Ini sememangnya agak fleksibel. Pin 0 dibiarkan terbuka. (Instructables tidak membenarkan kita melakukan senarai nombor bermula dengan 0.)

  1. Buka
  2. Buka
  3. Pin Aktif / Pin Aktif
  4. Pin input yang dikodkan
  5. Pin input yang dikodkan
  6. Pin input yang dikodkan
  7. Pin input yang dikodkan
  8. Pin input yang dikodkan
  9. Output bumper kanan
  10. Output bumper tengah
  11. Output bumper kiri
  12. Letakkan sasaran sasaran
  13. Output suis induk Flipper
  14. Output suis lampu induk
  15. Pin output cahaya
  16. Pin output cahaya
  17. Pin output cahaya
  18. PIN keluaran bunyi
  19. Buka

Walaupun tidak dilaksanakan dalam reka bentuk kami, pin SCL dan SDA boleh digunakan untuk paparan dan pin yang lain boleh digunakan untuk kawalan tambahan, seperti menambah ciri (bola pengembalian) atau lebih banyak kombinasi pencahayaan.

Bahan yang diperlukan:

  • Bekalan kuasa CNC 48V (seperti ini)
  • Bekalan kuasa 6.3V dan 5V luar (seperti ini)
  • 5A pelincir lambat dan pemegang fius, dan tiub panas mengalir untuk sambungan
  • Penyambung Molex
  • Arduino prototaip papan perisai
  • Banyak wayar 22AWG, solder, dan kesabaran

Langkah 7: Buat Lembaga Pemandu

Papan pemandu bertanggungjawab untuk mengubah input dari Arduino, butang flipper, dan suis katap ke menembak gegelung. Oleh kerana isyarat berada pada tahap 5V dan solenoid pada 48V, kuasa MOSFET yang kuat diperlukan untuk menyampaikan isyarat. Transistor yang digunakan dalam reka bentuk ini adalah MOSFET bernilai 100V dari Mouser.

Terdapat tiga skema yang digambarkan di atas, yang termasuk flippers, slingshots, dan sasaran bumper / drop. Setiap mempunyai keperluan yang sedikit berbeza, tetapi dalam kesemuanya, apabila transistor diberikan isyarat 5V, laluan semasa dibuka untuk solenoid dan 5-8 amps ditolak melalui gegelung untuk memberikan tendangan yang kuat. Ini banyak sekali! Sebenarnya, semasa ini banyak akan membakar komponen jika transistor disimpan untuk lebih daripada nadi yang sangat ringkas. Pastikan, dalam ujian litar ini menggunakan perisian atau kaedah lain, untuk tidak sekali kuasa sepenuhnya solenoid lebih daripada satu saat.

Sumber utama masalah dalam litar di atas adalah tendangan induktif. Solenoid adalah induktor yang kuat, dan seperti yang anda ketahui, induktor semasa tidak dapat berubah dengan serta-merta. Oleh itu, apabila transistor dimatikan, masih terdapat momen ringkas di mana 5-8 amps mengalir melalui solenoid, dan semua keperluan semasa berada di mana-mana. Sekiranya tidak diberi laluan ke tanah, arus ini akan memacu voltan pada saliran transistor sehingga beratus-ratus volt dan memusnahkan transistor. Tambahan pula, apabila transistor dimusnahkan, ia melonggarkan semua tiga terminal, yang menyebabkan ampa arus berterusan mengalir dan boleh memusnahkan solenoid jika tidak ada fius yang dipasang. (Kami memusnahkan 8 transistor dalam penemuan dan percubaan kami untuk menangani masalah ini, tapi untungnya tidak ada solenoid kerana kami sentiasa cepat untuk memutuskan kuasa secara manual).

Terdapat dua kaedah untuk menghalang tendangan induktif: pertama, setiap perhimpunan pinball harus dilengkapi dengan satu diod yang menunjuk dari salur transistor kembali ke bekalan. Ini, dalam teori, harus menghalang drainase transistor daripada melebihi voltan bekalan, sekali sekali yang berlaku dioda akan menghidupkan dan mengalirkan semua tenaga yang tersisa dari induktor. Malangnya, pada hakikatnya, dioda sahaja tidak cukup pantas untuk menindih sepakan induktif yang cukup dengan sendirinya.

Untuk menyelesaikan masalah ini, kami menambah litar RC 'snubber'. Litar ini mempunyai kapasitor dalam siri dengan perintang. Kapasitor menyerap arus yang cukup dari induktor supaya diod mempunyai masa untuk menghidupkan dan melaksanakan fungsinya. Untuk maklumat lanjut mengenai litar snubber RC, semak di sini.

Litar pemacu solenoid bumper / droptarget agak mudah dan hanya mempunyai transistor, solenoid, snubber, dan sambungan untuk menerima input dari Arduino. Di papan ini dan papan berikutnya, pastikan wayar solenoid supaya diod (yang tidak ditunjukkan dalam skematik) menunjuk ke arah voltan tinggi.

Litar pemacu flipper sedikit lebih rumit kerana tiga sebab. Pertama, untuk mempunyai tindak balas yang cepat di antara butang tekan dan tindakan flipper, disyorkan untuk membuat respons tersebut secara langsung dalam litar dan bukannya sebagai input dan output berasingan yang dikendalikan oleh Arduino. Kelewatan yang disebabkan oleh Arduino adalah kecil, tetapi pemain yang berpengalaman akan dapat memberitahu dengan serta-merta dan akan kecewa dengan kekurangan kawalan.

Kedua, sirip mempunyai dua gegelung yang berlainan (kuasa rendah dan gegelung kuasa tinggi) suis end-strok yang mencetuskan apabila flipper adalah tinggi. Suis ini berfungsi sebagai fungsi yang membenarkan gegelung kuasa tinggi kebakaran pada mulanya untuk memberikan strok yang kuat, tetapi bertukar kepada gegelung kuasa rendah (~ 130 ohms vs 4 ohms) yang memberikan kuasa yang mencukupi untuk memastikan flipper itu 'naik' sebagai selagi butang diletakkan, tetapi tidak menarik banyak arus untuk membakar solenoid. Dalam gambar di bawah, suis EOS biasanya ditutup, tetapi pemasangan kami mempunyai suis biasa-terbuka dan memerlukan transistor lain untuk mengubahnya menjadi isyarat yang tertutup biasanya.

Ketiga, sewaktu kami menginginkan butang untuk mengendalikan sirip secara langsung, kami juga memasukkan isyarat suis 'master' dari Arduino yang dapat mengaktifkan atau menyahaktifkan sirip bergantung pada apakah bola sedang bermain. Ini mengakibatkan penggunaan transistor ketiga dalam litar.

Begitu juga, papan katapel itu mempunyai komplikasi sendiri. Walaupun ia menggunakan hanya satu transistor, ia seperti sirip, harus dikawal secara langsung oleh suis input (yang kita kabelkan secara siri) untuk respons yang cepat serta tidak memerlukan pin output tambahan pada Arduino. Malangnya, jika gerbang transistor disambungkan kepada suis secara langsung, tindak balasnya terlalu cepat untuk mempunyai lebih daripada tendangan yang tidak dapat dilihat sejak suis tidak ditutup terlalu lama. Untuk mendapatkan tendangan yang lebih kuat (iaitu membiarkan solenoid "sundal"), kami menambah diode dan penghalang besar di pintu transistor, yang membolehkan tindak balas yang cepat tetapi mewujudkan masa yang besar pemalar voltan pada nod tersebut supaya pintu kekal dekat dengan 5V (dan transistor pada) cukup lama untuk mempunyai tendangan yang ketara, walaupun selepas suis katod telah dibuka semula. Satu lagi komplikasi ialah menghantar input ini ke Arduino, kerana papan input (seperti yang akan kita lihat kemudian) memerlukan rendah input, dan katapel mengendalikan apabila input didorong tinggi. Untuk menyelesaikan masalah ini, kami memasukkan transistor ketiga yang menutup apabila sama ada input tinggi, dan dengan itu boleh diperlakukan seperti mana-mana suis masukan lain di playfield

Papan pemandu (sebenarnya dua papan) terdiri daripada dua pemandu flipper, dua pemandu katapel, dan empat pemandu tunggal suis untuk sisa solenoid. Daripada pematerian secara langsung, kami menggunakan 0.1 "penyambung molex untuk melampirkan papan ini kepada solenoid, bekalan kuasa, dan suis, supaya sebarang pembaikan atau pelarasan boleh dibuat dengan lebih mudah.

Kami menggunakan papan roti solderable untuk reka bentuk kami, tetapi mereka bentuk PCB sebenar dengan fungsi ini akan mempunyai hasil yang lebih bersih dan membantu mengurangkan kekacauan wayar yang mesin-mesin ini tidak dapat dielakkan.

Bahan:

  • 12 100V-rated transistor kuasa
  • 10-50 kapasitor uF (nonpolar jika boleh)
  • 300, 5k, dan 500k, dan perintang 3M
  • 1 transistor yang lebih kecil untuk suis katapel
  • Beberapa diod 1N4004
  • Prototaip papan roti solderable (atau, lebih baik, reka bentuk PCB anda sendiri)

Langkah 8: Buat Papan Input Sensor

Oleh kerana kami hanya menggunakan Arduino, kami terhad kepada 20 pin digital. Walau bagaimanapun, mesin pinball mempunyai beberapa dozen input suis unik, belum lagi output yang diperlukan untuk lampu, bunyi, dan solenoid memandu. Untuk mengatasi masalah ini, kami membuat andaian bahawa tiada dua input akan dicetuskan sekaligus (dengan itu menghadkan kami hanya menggunakan 1 bola). Anggapan ini membolehkan kita 'mengodkan' input suis dengan menukarnya ke dalam daftar binari 5-bit dengan pin ke-6 yang mencetuskan gangguan apabila setiap kali input suis yang sah diterima. Untuk mencapai matlamat ini, kami menggunakan litar encoder 8-ke-3 untuk membuat encoder 24-ke-5 menggunakan pengekod ini dalam susun atur yang ditunjukkan dalam gambar-gambar di atas.

Ini adalah salah satu perkembangan yang paling penting dalam projek ini, memandangkan kami dapat meningkatkan kerumitan mesin kami dari rancangan awal kami hanya mempunyai sirip, bumper, dan satu atau dua sasaran.

Papan prototaip kedua digunakan untuk menempatkan setiap 24 penyambung Molex lelaki; setiap suis di playfield akan mempunyai penyambung wanita di hujung wayar panjang yang dipasangkan ke papan ini. Target drop adalah kes unik yang dapat dikendalikan dalam beberapa cara. Apa yang kami lakukan ialah menghidupkan setiap suis sasaran jatuh dalam siri, supaya input ditutup apabila mereka semua turun dan membolehkan Arduino menghantar isyarat kepada solenoid untuk memadamkan sasaran jatuh cadangan.

Bahan:

  • 4 3-keadaan output keutamaan 8-ke-3 pengekod

Langkah 9: Buat Lembaga Periferal Cahaya / bunyi / skor

Untuk menjimatkan pin dengan cara yang sama dengan pengekod, kami menggunakan penyahkodan 3-ke-8 untuk mengawal lampu kami. Ini memberikan kami had yang kami tidak dapat menyalakan lebih daripada satu cahaya pada satu-satu masa, tetapi itu adalah tradeoff yang boleh diterima untuk membebaskan pin untuk unsur-unsur lain. Kami juga memasukkan output "master" 4 yang dapat mengawal semua lampu sekaligus. Sebagai contohnya, ini dapat membolehkan kita memancarkan semua lampu beberapa kali apabila permainan pertama kali dihidupkan (memberikan tanda kuat bahawa sesuatu sebenarnya berlaku pada pemain ketika dia menekan tombol start, yang sebaliknya sukar tanpa palung bola atau paparan berwarna-warni).

Skema di atas mempunyai litar transistor yang sama dengan pemandu, tetapi lebih mudah kerana tegangan rendah dalam bermain (6.3V untuk lampu) memerlukan transistor yang lebih kecil dan tidak memerlukan litar perlindungan yang banyak. Kami menggunakan dioda ATAU pintu untuk transistor untuk mengasingkan isyarat suis induk dan isyarat cahaya individu. Ini membolehkan kita menggunakan hanya satu transistor per cahaya dan bukannya dua, dan menghalang Arduino dan cip pengekod dari 'berjuang' ke sumber atau tenggelam semasa.

Walaupun kami menggunakan LED semasa rendah bagi setiap lampu playfield (yang di bawah sisipan), butang permulaan dan 3 bumper pop masing-masing datang dengan mentol pijar yang menarik kira-kira 250mA setiap satu. Transistor dikadar untuk 530mA arus berterusan, jadi tidak melebihi ini, kami memastikan bahawa hanya dua pijar yang pernah melalui transistor tunggal.

Kami juga menyertakan buzzer 5V pasif pasif yang membolehkan kita memainkan bunyi asas ke papan ini.

Urutan cahaya dan bunyi tersuai boleh diprogramkan menggunakan fungsi light_sequence + sound_sequence atau melalui antara muka Bahasa Pinball.

  • 10 lampu transistor (kami menggunakannya)
  • Buzzer 5V Piezo

Langkah 10: Langkah 11: Reka Bentuk Peraturan Permainan Anda

Terdapat dua pilihan untuk menentukan peraturan permainan pinball. Anda boleh berinteraksi dengan permainan menggunakan dokumen pinball yang disesuaikan, atau peraturan permainan kod keras. Peraturan permainan berkod keras membolehkan lebih banyak fleksibiliti, termasuk tembakan berturut-turut dan bonus masa, semasa menggunakan sistem pinball / parser pinball membolehkan aturan yang lebih fleksibel, tetapi lebih mudah. Kami akan mulakan dengan antara muka untuk permainan yang boleh dikonfigurasikan, dan kemudian terperinci beberapa peraturan permainan berkod keras supaya anda boleh memilih konfigurasi yang anda inginkan untuk permainan pinball anda sendiri.

Lihat repositori github di sini untuk fail yang dirujuk dalam projek ini.

Bahagian 1. Reka bentuk peraturan permainan anda

Mesin keadaan lalai untuk permainan pinball disediakan dalam gambar.

Ini disediakan dalam kod pemula lalai. Sekarang anda mempunyai dua pilihan - sama ada untuk menulis kod anda sendiri untuk mesin, atau menggunakan format yang ditetapkan untuk permainan pinball.

Langkah 11: Pilihan 1. Tulis Fail Pinball.txt Anda Sendiri

Dalam dokumen teks pinball, anda akan mendapati tiga bahagian: satu untuk bahagian, satu untuk "negeri" dan satu untuk "tindakan". Di sini, anda boleh menentukan tindakan spesifik bagi setiap komponen. Bagi kebanyakan komponen, anda mungkin mahu melekat pada mesin negeri satu keadaan. Sebagai contoh, jika setiap kali bumper dilanda, pemain harus mencetak 100 mata lagi, menyalakan cahaya jalan, dan menjaringkan 100 mata, maka rajah keadaan akan kelihatan seperti Rajah 1 dengan kod yang sama. Sekiranya anda mahukan komponen untuk mempunyai mesin negeri berbilang negara, katakan, anda mahu lampu menyala apabila bumper terpukul, dan kemudian matikan apabila ia dilanda lagi, gambarajah keadaan / negeri bersamaan anda akan kelihatan seperti Rajah 2 Mesin tertentu kami menyediakan struktur, seperti dalam Rajah 3, yang mana anda boleh mentakrifkan peraturan. Nama mereka, makro berkod internal (yang tidak perlu dibimbangkan tetapi berguna jika anda memutuskan untuk menyiasat kod sumber), dan kod gangguan diberikan dalam Rajah 3. Rajah 4 menghubungkan nama-nama ini ke komponen playfield.

Petua untuk menulis permainan pinball anda
Oleh kerana komponen permainan terikat kepada gangguan tertentu (ditunjukkan oleh medan "pos") yang ditakrifkan oleh perkakasan, kami tidak mengesyorkan mengubah bahagian "bahagian" terlalu banyak di luar medan "negeri". rizab keadaan 0 dan tindakan 0 untuk komponen yang tidak mempunyai kesan pada pemarkahan, seperti butang permulaan dan suis permainan. Kod kami kelihatan seperti yang digambarkan dalam Rajah 5.

Langkah 12: Tentukan Urutan Light dan Bunyi

Lapan lampu di papan dikawal menggunakan 3-to-8 decoder + satu suis tuan, seperti yang dijelaskan sebelumnya. Lampu khusus boleh dinyalakan dengan menuliskan pin yang sepadan dengan versi kod dikodkan binari yang tinggi. Fungsi penolong light_sequence menyediakan antara muka untuk pengguna menentukan cahaya yang dia hendak menyala, dan makro ditakrifkan dalam dokumen state_machine_headers.h. Satu jadual lagi telah disediakan untuk kemudahan pengaturcaraan anda. Bagi Bunyi, kami menggunakan perpustakaan nada Arduino untuk menjadualkan urutan bunyi pendek untuk pelbagai acara permainan. Kami mempunyai empat bunyi pra-dibuat yang boleh anda pilih (menggunakan executeSound (<# of sound yang anda mahu>)). Suara ini sesuai dengan urutan panjang, ceria, urutan ceria pendek, urutan sedih pendek, dan urutan yang sedih panjang. Jika anda ingin memprogram bunyi anda sendiri, anda boleh melihat di sini untuk cara melakukannya (pitch.h telah disertakan dalam repositori): http://www.arduino.cc/en/Reference/Tone

Langkah 13: Muatkan Fail Pinball.txt ke Arduino

Sebaik sahaja anda selesai menulis FSM, inilah cara memuatkan permainan anda ke Arduino anda (menganggap anda menggunakan Mac). Semua fail boleh didapati di repositori github.

  1. Unzip fail zip bersiri arduino.
  2. Navigasi ke fail bersiri arduino, dan simpan fail konfigurasi permainan anda di sini. "Pinball.txt" menyediakan templat contoh yang boleh anda gunakan.
  3. Buka Arduino. Muat naik lakaran permainan pinball.
  4. Buka terminal, dan ketik perintah berikut:
    • buat
    • ./arduino-serial -b 9600-p pinball.txt
  5. Sekarang, kita perlu membaca dan menyimpan data dalam memori dalaman Arduino. Sekiranya terdapat sebarang baris yang salah, Arduino akan mencetak mesej ralat dan anda boleh memilih untuk menghantar semula fail tersebut.
  6. Apabila anda selesai memuat naik kod menggunakan terminal, mis. apabila Arduino mencetak mesej "selesai", anda boleh membuka Serial Arduino untuk membaca mesej dari permainan yang sedang berlangsung.

Masalah / pengoptimuman umum untuk permainan perisian

  1. Permainan berkod keras berbanding dikonfigurasikan - kami menyedari bahawa gangguan dalam permainan berkod keras bertindak balas dengan lebih tepat berbanding dengan permainan yang disesuaikan. Ini mungkin kerana permainan yang disesuaikan mempunyai banyak fungsi kegunaan umum yang memerlukan kenyataan bersyarat. Ini melambatkan kelajuan baca gelung, yang menyebabkan kita terlepas beberapa gangguan dan mempengaruhi keseluruhan kelajuan operasi permainan. Untuk menyelesaikan masalah ini, kami mengurangkan beberapa kebolehcapaian permainan fail konfigurasi untuk mencapai masa tindak balas yang dapat diterima dalam litar. Kami pada asalnya mempunyai keprihatinan mengenai kapasiti RAM Arduino dan berapa banyak aturan permainan yang dapat disimpan, tetapi ini ternyata menjadi kurang masalah daripada yang diharapkan pada awalnya dan itu adalah kelajuan gelung yang merupakan faktor pembatas yang lebih besar.
  2. Debouncing interrupts - kerana tindakan cepat permainan pinball, kami mempunyai beberapa kes di mana pin interrupt menerima beberapa gangguan untuk pinball memukul hanya satu komponen permainan. Selain itu, kerana gangguan ini telah diterima sebelum pengekod mempunyai masa untuk membaca semua input dengan betul, gangguan akan dikaitkan dengan komponen yang salah. Untuk menyelesaikan masalah ini, kami menggunakan pustaka debar luar yang memberi respons 1ms selepas gangguan pertama diterima, memberikan masa untuk pin pengekod untuk mencapai tahap tinggi sebelum permainan membaca kod input.
  3. Paparan - Walaupun paparan bersiri membolehkan permainan mencetak mesej terperinci, sukar bagi seorang pemain untuk membaca mesej output ketika bermain permainan pinball cepat. Ia juga sukar untuk pemain bermain permainan dengan komputer yang dilampirkan. Di masa hadapan, kami berharap dapat melaksanakan paparan digital yang boleh memaparkan skor dan maklumat permainan lain dalam paparan yang pengguna dapat melihat dengan mudah, seperti matriks LED atau paparan 7 segmen.

Langkah 14: Pilihan 2: Nasihat mengenai Pengekodan Hard-Permainan Anda Sendiri

Pertama - baca dokumen state_machine_headers.h untuk memahami struktur data global yang menyimpan maklumat mengenai mesin negara. Anda harus menginisialisasi struktur data ini kepada peraturan permainan anda dalam Arduino IDE sebelum memuatkan ke dalam kod Arduino. Struktur data berikut disediakan:

Stred permainan untuk memegang maklumat mengenai setiap bahagian Negeri untuk memegang maklumat mengenai peralihan negeri Tindakan untuk memegang maklumat tentang tindakan yang akan dilaksanakan Struktur ini dihuni oleh fail baca. Tentukan input / output untuk semua pin. PIN sisipan harus ditakrifkan sebagai PIN INPUT.

Dalam gelung utama, periksa setiap kitaran untuk melihat apakah gangguan telah dipecat untuk setiap komponen permainan. Tentukan setiap komponen permainan dalam pernyataan suis.

Fungsi pembantu melaksanakanState mengemas kini keadaan semasa bahagian itu, dan melakukan tindakan berdasarkan maklumat dalam kod.

Versi pertama kod permainan berkod keras boleh didapati dalam fail "simplepinballgame.ino"

Langkah 15: Sambung Semuanya

Untuk mengawal Arduino dengan papan pemandu kami, kami menggunakan prototaip untuk lebih mudah mengakses pin pada papan lain. Terdapat banyak wayar, jadi berhati-hatilah! Ikut susun atur yang diberikan dalam Pin Elektronik dan Tata Letak untuk menyambungkan gerai Arduino anda ke pin yang sepadan. Penyambung Molex harus banyak membantu dalam mencari penyambung yang menghubungkan dengannya.

Berikut adalah soalan penyelesaian masalah yang singkat sekiranya anda menghadapi masalah umum yang kami lakukan:

Sifat encoder input ialah terdapat 6 input pin ke Arduino: 5 yang bersama-sama menunjukkan input mana yang dicetuskan, dan pin ke-6 yang tinggi jika ada input tunggal dicetuskan. Kod yang ditulis hanya mengesan apabila pin keenam ini berubah daripada rendah ke tinggi. Jadi jika Arduino tidak menerima apa-apa input, dan anda pasti bahawa semua atau sekurang-kurangnya kebanyakan suis berfungsi, periksa untuk melihat sama ada suis apa-apa yang tersekat tertutup. Sebagai contoh, jika semua sasaran jatuh turun dan tidak dipecat, itu adalah suis tertutup dan menghalang Arduino daripada menerima apa-apa input lain.

Semak untuk memastikan bahawa kacang yang memegang penembak di tempat itu diperketatkan sepenuhnya, atau blok penembak tidak longgar. Secara alternatif, minyak batang penembak.

Ini boleh menjadi masalah mekanikal / reka bentuk jika suis diletakkan di lorong yang terlalu luas, yang membolehkan bola untuk 'mengelilingi' mereka. Jika tidak, ia boleh menjadi hasil terlalu lama kelewatan di suatu tempat di dalam kod. Jika, sebagai contoh, anda sedang sibuk memainkan nada menggunakan pustaka nada dan pernyataan kelewatan (), Arduino tidak akan dapat mengambil input semasa itu. Satu penyelesaian yang kami gunakan adalah hanya memainkan bunyi untuk pukulan ramp, target standup, butang mula dan suis akhir permainan, seperti yang kita ketahui tentang berapa banyak masa yang kita akan dapat selepas gambar ini sebelum masukan baru mungkin dicetuskan .

Diakui, kami tidak menetapkan tajuk khusus untuk lampu tertentu atau solenoid tertentu, yang bermaksud bahawa kali pertama anda memasukkan semuanya (atau masa berikutnya jika anda tidak melabelnya entah bagaimana), pin output (atau pengekodan cahaya output) disambungkan dalam perintah sewenang-wenangnya. Gunakan percubaan-dan-kesilapan untuk menyelesaikan pin mana yang sepadan dengan output dan menyesuaikan kod dengan sewajarnya. Untuk lampu dan bumper, ini tidak begitu buruk - tetapi dengan jelas melabel semua input dan tulis yang mana, kerana proses itu boleh mempunyai sehingga 24 nilai dan akan mengambil masa yang lebih lama untuk menentukur.

Pengekod mempunyai sifat malang yang kadangkala berdenyut pin indikator tinggi sebelum 5 pin encoder telah menyelesaikan sepenuhnya nilai mereka. Bagi kami, kami tahu ini telah berlaku apabila bilangan suis yang ditekan adalah satu demi satu, tetapi ia mungkin muncul berbeza untuk anda. Kami menyelesaikan masalah ini dengan menggunakan perpustakaan yang memalukan untuk membuat sedikit kelewatan antara ketika kami melihat bahawa bertukar telah berubah dan ketika kami mencatat yang menukarnya. Berhati-hati, bagaimanapun, kerana terlalu banyak kelewatan (lebih daripada 15-20mS) boleh menyebabkan anda kehilangan input sepenuhnya.

Maaf, tetapi kami belum pernah menemukan penyelesaian yang baik untuk yang ini.