Hidup

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

Wooden Pinball + Arduino DIY (40x40cm mini size)

Wooden Pinball + Arduino DIY (40x40cm mini size)

Daftar Isi:

Anonim

Jika Anda menyukai saya, Anda suka pinball, tetapi tidak punya uang untuk membeli atau ruang agar sesuai dengan permainan ukuran penuh. Jadi mengapa tidak membangun sendiri?

Di sini, kita akan membahas cara membuat game pinball kustom Anda sendiri yang ditenagai oleh Arduino. Permainan memiliki lampu, suara, fitur bagian pinball nyata, termasuk bumper, target jatuh, dan ketapel, dan bahkan memiliki jalan.

Proyek ini membutuhkan jumlah dan variasi material yang sangat besar, jadi bacalah setiap bagian selanjutnya untuk materi baru yang dibutuhkan untuk menyelesaikan setiap langkah. Sebagai permulaan, akan sangat membantu jika Anda memiliki akses ke pemotong laser atau router CNC serta perangkat elektronik dan perangkat keras dasar.

Catatan penulis: Instruksi ini baru-baru ini diterbitkan dan tidak semua file desain dan perangkat lunak telah sepenuhnya ditata. Jika berencana menggunakan file kami, silakan tinggalkan komentar sehingga kami dapat memastikan semuanya dalam keadaan terbaru.

Persediaan:

Langkah 1: Desain

Gambar di atas adalah desain Solidworks dari playfield dan perakitan pendukung. Playfield murni khusus, tetapi garis tembakan (seperti kurva tembakan looping belakang) dirancang berdasarkan mesin pinball nyata untuk memastikan permainan yang lancar. Satu kesulitan di sini adalah, karena kerumitannya, bagian-bagian pinball yang sebenarnya (mis. Bumper dan target jatuh) tidak dimodelkan, tetapi kehati-hatian tetap harus diambil untuk memastikan bahwa semuanya akan sesuai di bawah playfield - bagian-bagiannya jauh lebih besar di bawah daripada di atas.

File-file tersebut termasuk dalam repositori, jadi silakan menyesuaikan desain sesuai keinginan Anda.

Beberapa hal penting dari desain:

Playfield berukuran 42 "x 20,25" inci, persis ukuran game Bally-style tahun 1980-an. Ini terbuat dari kayu lapis ½ ”, yang merupakan standar dan tidak boleh diubah karena rakitan bagian pinball dirancang untuk ketebalan ini. Dinding di sini terdiri dari lapisan ½ ”di atas lapisan ¼”. Pada prototipe pertama, hanya ½ ”dinding yang dimasukkan, tetapi ini terbukti terlalu pendek dan bisa meletuskan pinball ke udara pada tembakan yang sangat kuat. Kedua, desain ini memungkinkan garis penembak yang sedikit terangkat (gambar di atas) yang memungkinkan bola jatuh sedikit ke dalam playfield, tetapi tidak jatuh kembali.

Jalan ini dirancang dengan dukungan akrilik dan cetak 3d yang jelas. Itu melintasi playfield sehingga memberikan pemain kesempatan untuk menabrak jalan beberapa kali berturut-turut dari sirip kiri. Dengan demikian, akrilik yang jelas digunakan untuk tidak menghalangi pandangan pemain tentang tabel:

Akhirnya, playfield didukung oleh dinding pendek di keempat sudut, yang menjaga playfield pada kemiringan standar 6,5 derajat. Dinding belakang memiliki "rak" bawah yang dapat dilepas dan digunakan untuk memasang elektronik. Ini menghasilkan game dengan playfield ukuran penuh, tetapi jauh lebih kompak dari game biasa dan dapat dibawa dengan tangan oleh satu orang. Karena playfield adalah ukuran standar, bagaimanapun, dukungan ini dapat dihapus jika Anda ingin menempatkan playfield ke dalam kabinet pinball standar. Untuk melakukannya, Anda mungkin ingin mempertimbangkan untuk menambahkan unit pengembalian bola, yang tidak termasuk dalam desain ini.

Langkah 2: Potong Kayu

Untuk memotong lapisan playfield, kami menggunakan pemotong laser. Namun, pemotong laser yang cukup kuat untuk memotong kayu lapis ½ ”sulit ditemukan, membutuhkan kayu lapis berkualitas tinggi, dan dapat berisiko menyalakan api jika Anda tidak berhati-hati. Lapangan bermain tipikal dipotong menggunakan router CNC - sementara beberapa sudut mungkin tidak tajam, Anda masih harus mencapai hasil yang layak. Untuk kesederhanaan, langkah-langkah di bawah ini akan menganggap Anda memiliki akses ke pemotong laser yang sama yang kami lakukan. Ada beberapa orang yang memiliki hasil yang layak hanya menggunakan bor dan jigsaw, tetapi Anda harus sangat berhati-hati dan sangat sabar jika Anda pergi rute ini.

Langkah pertama dalam menciptakan playfield adalah mengubah desain menjadi file .DXF yang dapat dimasukkan ke dalam pemotong laser. Misalnya, file .DXF pada playfield digambarkan di bawah ini. File-file yang digunakan dalam proyek ini termasuk dalam repositori kami.

Menggunakan pemotong laser, kami memotong bentuk untuk playfield, ¼ "lapisan menengah (kami menggunakan duron, bahan prototipe seperti kayu yang lebih murah, tetapi ¼" kayu lapis juga akan bekerja), ½ "lapisan atas, dan ½" mendukung.

Bahan yang dibutuhkan:

  • ½ "plywood untuk playfield dan base
  • ¼ ”kayu lapis atau duron untuk lapisan dinding tengah
  • ½ ", ¾", dan 1 "sekrup kayu
  • Akses ke router CNC atau pemotong laser

Langkah 3: Pasang Playfield

Mulailah dengan menjepit potongan-potongan dari lapisan duron ¼ ”ke kayu lapis di lokasi masing-masing. Menggunakan bor tangan, lubang pilot pilot pertama menggunakan bit 3/32 ”, dan kemudian menggunakan sekrup kayu ¾” untuk menempelkan lapisan ¼ ”ke playfield. Penting untuk melakukan ini dari atas ke bawah (yaitu sehingga sekrup pertama-tama melewati lapisan ¼ ", lalu ke dasar ½"), karena bagian ¼ "kecil dan tipis dan akan melengkung dari lapisan dasar jika dibor ke arah yang berlawanan. Penting juga untuk memastikan kepala sekrup rata dengan lapisan ¼ "dan tidak memberikan ketebalan tambahan.

Satu catatan terakhir: sekrup ini bisa masuk hampir ke mana saja, karena lapisan ini sebagian besar tidak akan terlihat oleh pemain begitu playfield dirakit. Tapi ada pengecualian - jangan masukkan sekrup ke jalur tembak. (Kami awalnya membuat kesalahan ini).

Selanjutnya, pasang dinding samping, dan gunakan sekrup kayu terpanjang untuk mengebor mereka dari atas papan, lagi sehingga kepala sekrup rata dengan atas. Setelah selesai, jepit keping lapisan ½ "di atas duron, dan kencangkan seperti sebelumnya, kecuali kali ini memasang dari bawah menggunakan sekrup 1". Karena lapisan atas tebal ½ ", kecil kemungkinannya untuk menekuk menjauh dari pangkalan, dan sekrup dari bagian bawah memastikan bahwa sekrup tetap tidak terlihat oleh pemain.

Akhirnya, pasang blok penembak (gambar di atas, dengan penembak) dengan memasang dari sisi bawah menggunakan 2 sekrup sehingga blok tidak dapat dengan mudah memutar. Blok penembak memiliki slot berbentuk "U" yang sesuai dengan penembak, yang dapat dipasang dengan mengencangkan mur di sisi lain. Anda mungkin juga harus menggunakan pelumas untuk mengurangi gesekan antara batang penembakan dan bola.

Desain mungkin perlu beberapa penyesuaian pada saat ini. Misalnya, dalam desain kami, potongan untuk target jatuh terlalu sempit dan harus diperluas menggunakan dremel. Jika menggunakan file kami sebagai lebih dari referensi, cobalah untuk menghubungi penulis yang mungkin dapat memberikan file yang diperbarui. Ini juga merupakan ide yang baik untuk mengampelas area yang kasar, khususnya di mana dua potong kayu bertemu.

Sebagian besar, ini menyimpulkan pertukangan, dan kita dapat beralih ke memasukkan komponen.

Bahan yang dibutuhkan:

  • 3/4 "sekrup kayu kepala datar
  • Perakitan penembak
  • Sekrup kayu yang lebih panjang (~ 1,5 ")
  • Bor tangan dengan 3/32 "bit
  • Pelumas
  • 1 "sekrup kayu kepala datar
  • File dan / atau dremel, dan amplas

Langkah 4: Tambahkan Komponen

Pada tahap desain ini, Anda harus memiliki gagasan umum tentang orientasi yang diperlukan untuk memastikan semua komponen benar-benar pas di bawah playfield. (Jika menggunakan desain kami, referensi gambar bagian bawah tabel kami di atas).

Pertama, pasang target jatuh, target berdiri, dan rakitan katapel dengan meletakkan ½ ”sekrup kayu melalui lubang pemasangan di rakitan. Lakukan hal yang sama dengan bumper pop, tetapi pastikan untuk melepas tutupnya terlebih dahulu, atau perakitan tidak akan masuk ke dalam lubangnya!

Kedua, pasang rakitan sirip. Pastikan mereka berputar ke arah yang benar. Solenoida, ketika ditembakkan, akan menancapkan pin ke koil, dan ini harus memutar poros sedemikian rupa sehingga sirip berputar ke arah playfield. Setelah rakitan sirip dipasang, pasang kelelawar sirip dari sisi lain.Gunakan kunci pas pada mur pengunci dalam rakitan untuk mengencangkannya pada tempatnya, kemudian gunakan pegas yang harus disertakan dengan rakitan untuk memastikan sirip dikembalikan ke bawah ketika tidak dipecat.

Demikian pula, pasang semua sakelar rollover menggunakan sekrup 1/2 ", memastikan bahwa sakelar tersebut dapat dengan mudah ditekan dari atas dan kembali ke tempatnya. Dengan menggunakan baut 6-32, pasang juga sakelar gerbang di kiri atas desain kami. Sakelar gerbang ini juga berfungsi sebagai bukaan satu arah, yang memungkinkan bidikan dari sisi kanan dan dari penembak jatuh ke dalam bumper. Ini adalah aspek desain yang menghasilkan bidikan memasuki jalan yang benar dan loop kanan menuju ke tempat yang berbeda dan menambah variasi permainan.

Untuk memasang lampu, pertama-tama masukkan plastik ke dalam lubangnya. Sisipan ini sekitar ¼ ”tebal. Jika menggunakan router CNC, cara yang tepat untuk memasang ini adalah dengan memotong ¼ ”sedikit lebih besar dari lubang insert. Dalam desain kami, karena pemotong laser tidak dapat memotong lapisan parsial, kami mencetak kurung 3D yang mendukung sisipan. Gunakan epoksi untuk menahan sisipan pada tempatnya (kasarkan tepinya terlebih dahulu) dan amplas untuk memastikan sisipan sejajar dengan lapangan bermain.

Selanjutnya, masukkan LED ke dalam kurung mereka dengan memasukkan dan memutar mereka ke tempatnya. Kemudian, kencangkan braketnya sehingga LED ini berada tepat di bawah setiap sisipan. Kurung yang dihubungkan di bawah ini cukup tipis, dan sebenarnya cukup tipis sehingga sekrup 1/2 "dapat menembus bagian atas meja. Gunakan beberapa mesin cuci sehingga ini tidak terjadi.

Pos playfield dipasang menggunakan baut 6-32. Setelah dipasang, bungkus karet dari kit karet di sekitarnya untuk membuat bumper pasif. Ini memberi meja lebih banyak "hidup" daripada jika desainnya benar-benar kayu lapis. Dengan menggunakan baut yang sama, pasang pemandu jalur tepat di atas sirip. Juga rekatkan sakelar akhir permainan ke tempatnya.

Perhatikan bahwa sebagian besar permainan memiliki rakitan bola balik khusus seperti yang ada di sini. Ini tidak termasuk dalam desain ini, bagaimanapun, terutama karena biaya. Trade-off, tentu saja, adalah bahwa pemain sekarang bertanggung jawab untuk menempatkan bola kembali ke jalur penembak begitu terkuras. Kami memiliki penembak, yang melekat pada blok penembak seperti yang digambarkan sebelumnya.

Tombol sirip dan tombol mulai dipasang dengan menempatkannya ke dalam lubang dan mengunci dengan palnuts. Sakelar daun tombol sirip dibaut di dalam tombol menggunakan 6-32 baut dan akan menutup sirkuit sakelar saat tombol ditekan.

Pada titik ini, bidang bermain Anda akan (dari atas) menyerupai meja pinball yang hampir lengkap! Yang hilang hanyalah jalan. Jangan ragu untuk bersenang-senang di antara teman-teman Anda tentang betapa luar biasanya kelihatannya sementara secara pribadi takut tentang berapa banyak kabel dan penyolderan yang harus dilakukan.

Bahan-bahan yang dibutuhkan (mayoritas dibeli dari PinballLife.com, dan dapat ditemukan hanya dengan mencari istilah di bawah).

  • 1 unit target penurunan 3 bank
  • Perakitan bumper 3x pop
  • 1 unit sirip kiri
  • 1 unit sirip kanan
  • 2 kelelawar sirip
  • 2 tombol sirip
  • 2 buah kenari tombol sirip
  • 1 tombol mulai
  • 1 set cincin karet
  • ~ 30 pos bintang playfield, (1 1/16 "digunakan)
  • 2 pemandu jalur
  • 2 sakelar daun tombol sirip
  • 2 rakitan katapel
  • 1 target standup
  • 10 sakelar rollover
  • 8 lampu bayonet gaya LED # 44
  • 8 bayonet-style light brackets (Miniature Bayonet Base 2-Lead Socket Dengan Braket Pemasangan Panjang)
  • 5 1-1 / 2 "x 13/16" masukkan panah biru
  • 3 1 "x 3/4" sisipan peluru jelas
  • 6-32 baut (2,5 ", serta beberapa ukuran lebih kecil), mur, dan ring
  • ~ 2 "saklar gerbang lebar (seperti yang ada di sini, ini mungkin sulit ditemukan, kami membatalkan milik kami dari pinball ramp yang rusak yang dibeli di ebay)

Langkah 5: Bangun Ramp

Untuk membuat tanjakan, gunakan ¼ "akrilik untuk potongan dasar dan ⅛" akrilik untuk dinding samping. Akrilik yang jernih akan memberikan penampilan yang bagus dan bersih tanpa menghalangi pandangan dari playfield untuk pemain. Menggunakan akrilik berwarna juga bisa menjadi pilihan yang terlihat bagus, tetapi tidak disarankan untuk menggunakan bahan yang sepenuhnya buram seperti kayu.

Dukungan untuk landai dicetak 3D menggunakan makerbot dan dibaut ke playfield dan plastik menggunakan 6-32 baut yang sama.

Potongan-potongan akrilik di sini direkatkan menggunakan semen akrilik, yang merupakan pelarut yang pada dasarnya melelehkan dan mengelas plastik menjadi satu. Pastikan untuk menggunakan jumlah kecil, dan itu akan membuat ikatan yang sangat kuat yang hampir tidak terlihat.

Di pintu masuk tanjakan, kami telah menyertakan tanjakan penutup seperti yang ada pada gambar di atas. Ini adalah bagian tipis dari logam yang memberikan transisi yang sangat mulus dari playfield ke plastik ramp, daripada meminta pinball untuk "melompat" ke atas ¼ "ketebalan plastik. Anda dapat membeli salah satunya dengan harga murah dari toko khusus pinball atau Ebay (kami melakukannya), atau hanya membuat salah satu dari Anda sendiri dari lembaran logam. Dalam permainan komersial, ini terpaku sehingga baut tidak menempel dan menghalangi bola. Karena kami tidak memiliki peralatan yang tepat untuk melakukan itu, kami memastikan untuk menggunakan sekrup kepala datar dan memotong lubang di plastik dan logam untuk mendapatkan efek yang sama.

Ada sakelar gerbang sempit yang terpasang pada dukungan 3D di sudut kanan depan ramp, tempat belokan itu berbelok ke seberang lapangan bermain. Switch ini merekam apa ketika tembakan ramp yang sukses telah mengenai.

Bahan yang dibutuhkan:

  • 1/4 "lembaran akrilik bening (12x24")
  • 1/2 "lembaran akrilik bening (12x24")
  • Semen akrilik
  • Akses ke printer 3D dan pemotong laser
  • Ramp flap
  • Kepala datar 6-32 baut untuk penutup ramp
  • Bit bor ruang atau alat tangan
  • Saklar gerbang sempit

Langkah 6: Rencanakan Blok Elektronik dan Tata Letak Pin

(Pembaruan penulis: Dengan penggunaan yang lama, 48V dapat meledakkan beberapa transistor dalam konfigurasi ini. Saya akan merekomendasikan menggunakan 35V atau lebih rendah dengan elektronik ini, atau menggunakan sumber daya papan kontrol yang lebih profesional seperti yang tercantum di sini: http: // pinballmakers .com / wiki / index.php / Konstruksi)

Mesin ini memiliki 3 level tegangan: 48V untuk daya solenoid, 6.3V untuk LED, dan 5V untuk logika dan suara. Untuk memberikan tingkat tegangan ini, kami menggunakan catu daya CNC untuk 48V, dan adaptor DC yang siap pakai untuk menyediakan 6.3V dan 5V. (Bisa saja menggunakan 6.3V, karena Arduino mengatur tegangan suplai ke pin output 5V-nya, tetapi kami tetap menyisihkan catu daya tersebut). 48V adalah tegangan tinggi, dan meskipun tidak mematikan dengan sendirinya dapat merusak komponen dan dapat dengan cepat menyebabkan komponen terlalu panas jika ada masalah dengan sirkuit. Gunakan sekering lambat 5-A pada input dan output dari catu daya 48V utama untuk menghindari menyalakan api jika ada transistor yang pendek.

Pada perisai Arduino, kami memasang kabel dengan konektor Molex betina yang dirancang sesuai dengan persyaratan input dan output masing-masing dari tiga sub-papan: papan driver solenoid, papan driver lampu / suara, dan papan input.

Dalam desain kami, kami memiliki penugasan pin berikut. Ini, tentu saja, cukup fleksibel. Pin 0 dibiarkan terbuka. (Instructables tidak membiarkan kami melakukan daftar angka dimulai dengan 0.)

  1. Buka
  2. Buka
  3. Interupsi / Input pin aktif
  4. Pin input yang dikodekan
  5. Pin input yang dikodekan
  6. Pin input yang dikodekan
  7. Pin input yang dikodekan
  8. Pin input yang dikodekan
  9. Output bumper kanan
  10. Output bumper tengah
  11. Output bumper kiri
  12. Jatuhkan target output
  13. Output saklar induk sirip
  14. Master saklar lampu output
  15. Pin keluaran ringan
  16. Pin keluaran ringan
  17. Pin keluaran ringan
  18. Pin keluaran suara
  19. Buka

Meskipun tidak diterapkan dalam desain kami, pin SCL dan SDA dapat digunakan untuk tampilan dan pin yang tersisa dapat digunakan untuk kontrol tambahan, seperti menambahkan fitur (pengembalian bola) atau lebih banyak kombinasi pencahayaan.

Bahan yang dibutuhkan:

  • Catu daya 48V CNC (seperti ini)
  • Catu daya 6.3V dan 5V off-the-shelf (seperti ini)
  • 5A sekering slow-blow dan pemegang sekering, dan tabung heat-shrink untuk koneksi
  • Konektor Molex
  • Papan pelindung prototipe Arduino
  • Banyak kawat 22AWG, solder, dan kesabaran

Langkah 7: Buat Papan Pengemudi

Papan driver bertanggung jawab untuk memutar input dari Arduino, tombol sirip, dan katapel beralih menjadi menembakkan gulungan. Karena sinyal berada pada level 5V dan solenoida pada 48V, MOSFET daya yang besar diperlukan untuk menyampaikan sinyal. Transistor yang digunakan dalam desain ini adalah MOSFET yang diberi nilai 100V dari Mouser.

Ada tiga skema yang digambarkan di atas, yang meliputi sirip, ketapel, dan target bumper / drop. Masing-masing memiliki persyaratan yang sedikit berbeda, tetapi dalam semua itu, ketika transistor diberikan sinyal 5V, jalur saat ini terbuka untuk solenoid dan 5-8 amp didorong melalui koil untuk memberikan tendangan yang kuat. Ini banyak arus! Bahkan, arus banyak ini akan membakar komponen jika transistor disimpan lebih dari pulsa yang sangat singkat. Pastikan, dalam menguji rangkaian ini menggunakan perangkat lunak atau metode lain, untuk tidak pernah sepenuhnya menyalakan solenoida selama lebih dari satu detik.

Sumber utama masalah dalam sirkuit di atas adalah tendangan induktif. Solenoida adalah induktor yang kuat, dan seperti yang Anda ketahui, arus dalam induktor tidak dapat berubah secara instan. Dengan demikian, ketika transistor dimatikan, masih ada momen singkat di mana 5-8 amp mengalir melalui solenoid, dan semua arus membutuhkan tempat untuk pergi. Jika tidak diberi jalur ke ground, arus ini akan menggerakkan voltase pada transistor hingga ratusan volt dan menghancurkan transistor. Lebih lanjut, ketika transistor dihancurkan, ia menyingkat ketiga terminal, yang menyebabkan amp arus kontinu mengalir dan dapat menghancurkan solenoida jika tidak ada sekering yang terpasang dengan benar. (Kami menghancurkan 8 transistor dalam penemuan kami dan upaya untuk mengatasi masalah ini, tetapi untungnya tidak ada solenoida karena kami selalu cepat untuk secara manual memutuskan sambungan daya).

Ada dua metode untuk mencegah tendangan induktif: pertama, setiap rakitan pinball harus dilengkapi dengan dioda yang menunjuk dari pengurasan transistor kembali ke pasokan. Ini, secara teori, harus mencegah pengaliran transistor dari melebihi tegangan suplai, seperti yang pernah terjadi, dioda akan menyala dan mengalirkan semua energi yang tersisa dari induktor. Sayangnya, pada kenyataannya dioda ini saja tidak menyala cukup cepat untuk menekan tendangan induktif sendiri.

Untuk mengatasi masalah tersebut, kami menambahkan sirkuit RC ‘snubber’. Sirkuit ini memiliki kapasitor secara seri dengan resistor. Kapasitor menyerap cukup arus dari induktor sehingga dioda memiliki waktu untuk menghidupkan dan menjalankan fungsinya. Untuk info lebih lanjut tentang sirkuit RC snubber, periksa di sini.

Rangkaian driver solenoid bumper / droptarget cukup sederhana dan hanya memiliki transistor, solenoid, snubber, dan koneksi untuk menerima input dari Arduino. Pada papan ini dan papan berikutnya, pastikan untuk memasang solenoida sedemikian rupa sehingga dioda (yang tidak diperlihatkan dalam skema) mengarah ke sisi tegangan tinggi.

Sirkuit driver sirip sedikit lebih rumit karena tiga alasan. Pertama, untuk mendapatkan reaksi cepat antara penekanan tombol dan tindakan sirip, disarankan untuk membuat respons secara langsung di sirkuit daripada sebagai input dan output terpisah yang ditangani oleh Arduino. Penundaan yang disebabkan oleh Arduino kecil, tetapi pemain yang berpengalaman akan dapat langsung tahu dan akan frustrasi dengan kurangnya kontrol.

Kedua, sirip menampilkan dua kumparan yang berbeda (kumparan daya rendah dan daya tinggi) sebuah sakelar ujung-ujung yang terpicu ketika sirip tinggi. Sakelar ini berfungsi penting untuk memungkinkan kumparan daya tinggi untuk menyala pada awalnya untuk memberikan pukulan yang kuat, tetapi beralih ke kumparan daya rendah (~ 130 ohm vs 4 ohm) yang memberikan daya yang cukup untuk menjaga sirip tetap terangkat 'seperti Selama tombol itu ditempatkan, tetapi tidak menarik begitu banyak saat ini untuk membakar solenoida. Pada gambar di bawah, saklar EOS biasanya tertutup, tetapi perakitan kami memiliki saklar yang biasanya terbuka dan mengharuskan transistor lain untuk mengubahnya menjadi sinyal yang biasanya tertutup.

Ketiga, sementara kami ingin tombol untuk mengontrol sirip secara langsung, kami juga menyertakan sinyal sakelar 'master' dari Arduino yang dapat mengaktifkan atau menonaktifkan sirip tergantung pada apakah bola itu dimainkan. Ini menghasilkan penggunaan transistor ketiga di sirkuit.

Demikian pula, papan ketapel memiliki komplikasinya sendiri. Meskipun hanya menggunakan satu transistor, ia, seperti sirip, harus dikontrol langsung oleh sakelar input (yang kami sambungkan secara seri) untuk respons yang cepat serta tidak memerlukan pin output tambahan pada Arduino. Sayangnya, jika gerbang transistor terhubung ke saklar secara langsung, responnya terlalu cepat untuk memiliki lebih dari tendangan yang hampir tidak terlihat karena saklar tidak tetap tertutup untuk waktu yang lama. Untuk memiliki tendangan yang lebih kuat (yaitu membiarkan solenoida katapel "menindaklanjuti"), kami menambahkan dioda dan resistor besar di gerbang transistor, yang memungkinkan respons cepat tetapi menciptakan konstanta pembusukan tegangan dalam waktu yang lama. pada simpul itu sehingga gerbang tetap dekat dengan 5V (dan transistor menyala) cukup lama untuk memiliki tendangan yang nyata, bahkan setelah sakelar katapel telah dibuka kembali. Komplikasi lain adalah mengirimkan input ini ke Arduino, seperti yang dibutuhkan oleh papan input (seperti yang akan kita lihat nanti) rendah input, dan katapel beroperasi saat input didorong tinggi. Untuk mengatasi masalah ini, kami menyertakan transistor ketiga yang menutup setiap kali salah satu input tinggi, dan dengan demikian dapat diperlakukan seperti saklar input lainnya di playfield

Papan driver (sebenarnya dua papan) terdiri dari dua driver sirip, dua driver katapel, dan empat driver sakelar tunggal untuk solenoida yang tersisa. Daripada menyolder secara langsung, kami menggunakan konektor molex 0,1 "untuk memasang papan ini ke solenoida, catu daya, dan sakelar, sehingga setiap perbaikan atau penyesuaian dapat lebih mudah dilakukan.

Kami menggunakan papan tempat memotong roti yang dapat disolder untuk desain kami, tetapi mendesain PCB sebenarnya dengan fungsi-fungsi ini akan memiliki hasil yang jauh lebih bersih dan membantu mengurangi kekacauan kabel yang dimiliki mesin-mesin ini.

Bahan:

  • 12 transistor daya berperingkat 100V
  • 10-50 uF kapasitor (nonpolar jika memungkinkan)
  • 300, 5k, dan 500k, dan resistor 3M
  • 1 transistor lebih kecil untuk saklar katapel
  • Beberapa 1N4004 dioda
  • Prototipe papan tempat memotong roti yang dapat disolder (atau, lebih baik lagi, desain PCB Anda sendiri)

Langkah 8: Buat Papan Input Sensor

Karena kami hanya menggunakan Arduino, kami dibatasi hingga 20 pin digital. Mesin pinball, bagaimanapun, memiliki beberapa lusin input sakelar unik, belum lagi keluaran yang dibutuhkan untuk lampu, suara, dan solenoida penggerak. Untuk mengatasi masalah ini, kami membuat asumsi bahwa tidak ada dua input yang akan dipicu sekaligus (dengan demikian membatasi kami untuk hanya menggunakan 1 bola). Asumsi ini memungkinkan kita untuk 'menyandikan' input sakelar dengan mengubahnya menjadi register biner 5-bit dengan pin ke-6 yang memicu interupsi setiap kali input sakelar valid diterima. Untuk mencapai hal ini, kami menggunakan kaskade 8-ke-3 encoders untuk membuat encoder 24 hingga 5 menggunakan encoder ini dalam tata letak yang ditunjukkan pada gambar di atas.

Ini adalah salah satu pengembangan proyek yang paling penting, karena memungkinkan kami untuk meningkatkan kerumitan alat berat kami dari rencana awal kami hanya untuk memiliki sirip, bumper, dan satu atau dua target.

Papan prototipe kedua digunakan untuk menempatkan masing-masing 24 konektor Molex pria; setiap saklar di playfield akan memiliki konektor wanita di ujung kabel panjang yang dihubungkan ke papan ini. Target penurunan adalah kasus unik yang dapat ditangani dengan beberapa cara. Apa yang kami lakukan adalah mentransfer setiap drop target switch secara seri, sehingga input ditutup ketika semuanya turun dan memungkinkan Arduino mengirim sinyal ke solenoid untuk menembakkan drop target kembali.

Bahan:

  • 4 3-negara-output prioritas 8-ke-3 encoders

Langkah 9: Buat Papan Perifer Cahaya / suara / skor

Untuk menyimpan pin dengan cara yang mirip dengan encoder, kami menggunakan dekoder 3-ke-8 untuk mengontrol lampu kami. Ini memberi kami batasan bahwa kami tidak dapat menyalakan lebih dari satu lampu pada satu waktu, tetapi itu merupakan tradeoff yang dapat diterima untuk membebaskan pin untuk elemen lain. Kami juga menyertakan output cahaya "master" ke-4 yang bisa mengendalikan semua lampu sekaligus. Ini, misalnya, dapat memungkinkan kita untuk mem-flash semua lampu beberapa kali ketika permainan pertama kali dihidupkan (memberikan indikasi kuat bahwa sesuatu benar-benar terjadi pada pemain ketika dia menekan tombol start, yang sebaliknya sulit tanpa palung bola atau tampilan penuh warna).

Skema di atas menampilkan rangkaian transistor yang mirip dengan driver, tetapi jauh lebih sederhana karena tegangan yang lebih rendah dalam bermain (6.3V untuk lampu) membutuhkan transistor yang lebih kecil dan tidak memerlukan banyak sirkuit perlindungan. Kami menggunakan dioda atau gerbang untuk transistor untuk mengisolasi sinyal sakelar utama dan sinyal cahaya individual. Ini memungkinkan kami untuk menggunakan hanya satu transistor per cahaya, bukan dua, dan mencegah chip Arduino dan encoder dari 'pertempuran' menjadi sumber atau arus tenggelam.

Sementara kami menggunakan LED saat ini yang rendah untuk masing-masing lampu playfield (yang di bawah sisipan), tombol start dan 3 bumper pop masing-masing dilengkapi dengan lampu pijar yang masing-masing berukuran sekitar 250mA. Transistor diberi peringkat untuk arus kontinu 530mA, jadi untuk tidak melebihi ini, kami memastikan bahwa hanya dua pijar yang pernah melewati satu transistor.

Kami juga memasang buzzer piezo 5V pasif yang memungkinkan kami memainkan suara yang belum sempurna untuk board ini.

Urutan cahaya dan suara khusus dapat diprogram menggunakan fungsi light_afterence + sound_afterence atau melalui antarmuka Bahasa Pinball.

  • 10 transistor pencahayaan (kami menggunakan ini)
  • 5V Piezo buzzer

Langkah 10: Langkah 11: Desain Aturan Permainan Anda

Ada dua opsi untuk mendefinisikan aturan permainan pinball. Anda dapat berinteraksi dengan game menggunakan dokumen pinball yang dapat disesuaikan, atau aturan permainan kode keras. Aturan permainan dengan kode keras memungkinkan lebih banyak fleksibilitas, termasuk tembakan berurutan dan bonus berjangka waktu, saat menggunakan sistem pinball dokumen / pengurai memungkinkan aturan yang lebih fleksibel, tetapi lebih sederhana. Kami akan mulai dengan antarmuka untuk game yang dapat dikonfigurasi, dan kemudian merinci beberapa aturan game yang dikodekan sehingga Anda dapat memilih konfigurasi mana yang Anda inginkan untuk game pinball Anda sendiri.

Lihat repositori github di sini untuk file yang dirujuk dalam proyek ini.

Bagian 1. Rancang aturan permainan Anda

Mesin status default untuk permainan pinball disediakan dalam gambar.

Ini disediakan dalam kode starter default. Sekarang Anda memiliki dua opsi - baik untuk menulis kode Anda sendiri untuk mesin, atau menggunakan format yang ditentukan untuk permainan pinball.

Langkah 11: Opsi 1. Tulis File Pinball.txt Anda Sendiri

Dalam dokumen pinball-teks, Anda akan menemukan tiga bagian: satu untuk bagian, satu untuk "negara" dan satu untuk "tindakan". Di sini, Anda dapat menentukan tindakan spesifik untuk setiap komponen. Untuk sebagian besar komponen, Anda mungkin ingin tetap menggunakan mesin satu negara. Sebagai contoh, jika setiap kali bumper terkena, pemain harus mencetak 100 poin lebih banyak, menyalakan lampu ramp, dan skor 100 poin, maka diagram keadaan akan terlihat seperti Gambar 1 dengan kode yang sesuai. Jika Anda ingin komponen memiliki mesin multi-state state, katakanlah, Anda ingin lampu menyala ketika bumper dihantam, dan kemudian matikan ketika dipukul lagi, diagram keadaan / status yang sesuai akan terlihat seperti Gambar 2 Mesin khusus kami menyediakan struktur, seperti pada Gambar 3, yang Anda dapat mendefinisikan aturan. Nama mereka, makro kode internal (yang tidak perlu Anda khawatirkan tetapi bisa berguna jika Anda memutuskan untuk menyelidiki kode sumber), dan kode interupsi diberikan pada Gambar 3. Gambar 4 menghubungkan nama-nama ini ke komponen playfield.

Kiat untuk menulis game pinball Anda
Karena komponen game terkait dengan gangguan tertentu (ditunjukkan oleh bidang "pos") yang pada gilirannya ditentukan oleh perangkat keras, kami tidak menyarankan terlalu banyak memodifikasi bagian "bagian" di luar bidang "keadaan". Kami menyarankan status pemesanan 0 dan tindakan 0 untuk komponen yang tidak memiliki efek pada penilaian, seperti tombol mulai dan sakelar permainan. Kode kami terlihat seperti pada Gambar 5.

Langkah 12: Tentukan Urutan Cahaya dan Suara

Delapan lampu di papan dikontrol menggunakan dekoder 3-ke-8 + satu sakelar utama, seperti yang dijelaskan sebelumnya. Lampu khusus dapat dinyalakan dengan menulis pin yang sesuai dengan versi kode biner yang dikodekan tinggi. Fungsi helper light_afterence menyediakan antarmuka bagi pengguna untuk menentukan cahaya yang ingin dinyalakan, dan makro didefinisikan dalam dokumen state_machine_headers.h. Meja lagi telah disediakan untuk kenyamanan pemrograman Anda. Sedangkan untuk Suara, kami menggunakan perpustakaan nada Arduino untuk memprogram urutan suara pendek untuk berbagai acara permainan. Kami memiliki empat suara pra-dibuat yang dapat Anda pilih (menggunakan executeSound (<# suara yang Anda inginkan>)). Suara-suara ini sesuai dengan urutan panjang, ceria, urutan ceria pendek, urutan sedih pendek, dan urutan panjang sedih. Jika Anda ingin memprogram suara Anda sendiri, Anda dapat mencari di sini untuk melakukannya (pitch.h telah disertakan dalam repositori): http://www.arduino.cc/en/Reference/Tone

Langkah 13: Muat File Pinball.txt ke Arduino

Setelah Anda selesai menulis FSM, inilah cara memuat permainan Anda ke Arduino Anda (anggap Anda menggunakan Mac). Semua file dapat ditemukan di repositori github.

  1. Buka zip file arduino-serial zip.
  2. Arahkan ke file arduino-serial, dan simpan file konfigurasi gim Anda di sini. "Pinball.txt" menyediakan contoh template yang dapat Anda gunakan.
  3. Buka Arduino. Unggah sketsa permainan pinball.
  4. Buka terminal, dan ketik perintah berikut:
    • membuat
    • ./arduino-serial -b 9600 -p pinball.txt
  5. Sekarang, kita harus membaca dan menyimpan data dalam memori internal Arduino. Jika ada garis yang salah bentuk, Arduino akan mencetak pesan kesalahan dan Anda dapat memilih untuk mengirim kembali file.
  6. Ketika Anda selesai mengunggah kode menggunakan terminal, mis. ketika Arduino mencetak pesan "selesai", Anda dapat membuka Serial Arduino untuk membaca pesan dari permainan yang sedang berlangsung.

Masalah umum / optimasi untuk permainan perangkat lunak

  1. Gim-kode yang sulit vs. permainan yang dapat dikonfigurasi - kami perhatikan bahwa interupsi dalam permainan yang dikodekan merespons jauh lebih akurat daripada yang ada di permainan yang dapat disesuaikan. Ini bisa jadi karena gim yang dapat disesuaikan memiliki banyak fungsi tujuan umum yang membutuhkan pernyataan bersyarat. Ini memperlambat kecepatan baca loop, yang menyebabkan kami kehilangan beberapa gangguan dan memengaruhi kecepatan operasi keseluruhan game. Untuk mengatasi masalah ini, kami mengurangi beberapa kemampuan penyesuaian permainan file konfigurasi untuk mencapai waktu respons yang dapat diterima di sirkuit. Kami awalnya memiliki kekhawatiran tentang kapasitas RAM Arduino dan seberapa banyak aturan permainan yang bisa disimpan, tetapi ini ternyata kurang dari masalah yang diperkirakan sebelumnya dan kecepatan putaran itulah yang menjadi faktor pembatas yang lebih besar.
  2. Debouncing interupsi - karena aksi cepat dari permainan pinball, kami memiliki beberapa kasus di mana pin interupsi menerima beberapa interupsi karena pinball hanya mengenai satu komponen permainan. Selain itu, karena interupsi ini diterima sebelum encoder punya waktu untuk membaca semua input dengan benar, interupsi akan dihubungkan ke komponen yang salah. Untuk mengatasi masalah ini, kami menggunakan pustaka debouncing eksternal yang merespons 1ms setelah interupsi pertama diterima, memberi waktu bagi pin enkoder untuk mencapai tinggi sebelum permainan membaca kode input.
  3. Layar - Meskipun tampilan serial memungkinkan gim untuk mencetak pesan terperinci, sulit bagi pemain untuk membaca pesan keluaran saat memainkan gim pinball yang bergerak cepat. Juga berat bagi pemain untuk harus memainkan permainan dengan komputer terpasang. Di masa depan kami berharap untuk mengimplementasikan tampilan digital yang dapat menampilkan skor dan informasi game lainnya dalam tampilan yang dapat dilihat pengguna dengan mudah, seperti matriks LED atau layar 7-segmen.

Langkah 14: Opsi 2: Nasihat tentang Hard-coding Game Anda Sendiri

Pertama - baca dokumen state_machine_headers.h untuk memahami struktur data global yang menyimpan informasi tentang mesin negara. Anda harus menginisialisasi struktur data ini ke aturan gim Anda di dalam Arduino IDE sebelum memuat ke dalam kode Arduino. Struktur data berikut disediakan:

Struct game untuk menyimpan informasi tentang setiap bagian Negara untuk menyimpan informasi tentang transisi negara Tindakan untuk menyimpan informasi tentang tindakan yang akan dieksekusi Struktur ini diisi oleh file baca. Tentukan input / output untuk semua pin. Pin interupsi harus didefinisikan sebagai pin INPUT.

Di dalam loop utama, periksa setiap siklus untuk melihat apakah interupsi telah dipecat untuk setiap komponen game. Tentukan setiap komponen game dalam pernyataan switch.

Fungsi pembantu executeState memperbarui keadaan bagian saat ini, dan melakukan tindakan berdasarkan informasi dalam kode.

Versi pertama kode permainan yang dapat dikodekan dengan keras dapat ditemukan di file “simplepinballgame.ino”

Langkah 15: Hubungkan Semuanya

Untuk menghubungkan Arduino dengan papan driver kami, kami menggunakan protoshield untuk lebih mudah mengakses pin di papan lain. Ada banyak kabel, jadi berhati-hatilah! Ikuti tata letak yang diberikan dalam Pin Elektronik dan Tata Letak untuk menghubungkan outlet Arduino Anda ke pin yang sesuai. Konektor Molex harus banyak membantu dalam mencari tahu konektor mana yang terhubung.

Berikut ini adalah FAQ pemecahan masalah singkat jika Anda mengalami masalah umum yang kami lakukan:

Sifat dari encoder input adalah bahwa ada 6 pin input ke dalam Arduino: 5 yang bersama-sama menunjukkan input mana yang dipicu, dan pin ke-6 yang menjadi tinggi jika ada input tunggal yang dipicu. Kode yang ditulis hanya mendeteksi ketika pin keenam ini berubah dari rendah ke tinggi. Jadi jika Arduino tidak menerima input apa pun, dan Anda yakin bahwa semua atau setidaknya sebagian besar switch berfungsi, periksa untuk melihat apakah ada switch yang macet tertutup. Misalnya, jika semua target jatuh turun dan belum diaktifkan kembali, itu adalah saklar tertutup dan mencegah Arduino dari menerima input lain.

Periksa untuk memastikan bahwa mur yang menahan penembak di tempatnya benar-benar kencang, atau blok penembak tidak longgar. Cara lainnya, oli batang penembak.

Ini bisa menjadi masalah mekanis / desain jika sakelar ditempatkan di jalur yang terlalu lebar, memungkinkan bola untuk 'memutarnya'. Kalau tidak, ini bisa merupakan hasil dari keterlambatan kode yang terlalu lama. Jika, misalnya, Anda sibuk memainkan nada menggunakan perpustakaan nada dan pernyataan delay (), Arduino tidak akan dapat mengambil input selama waktu itu. Satu solusi yang kami gunakan adalah hanya memainkan suara untuk ramp shot, target standup, tombol start, dan switch akhir permainan, karena kami tahu berapa banyak waktu yang akan kami miliki setelah tembakan ini sebelum input baru kemungkinan akan dipicu .

Memang, kami tidak menetapkan tajuk khusus untuk lampu tertentu atau solenoida tertentu, yang berarti bahwa pertama kali Anda memasukkan semuanya (atau waktu berikutnya jika Anda tidak memberi label entah bagaimana), pin output (atau pengkodean lampu keluaran) terhubung di pesanan sewenang-wenang. Gunakan trial-and-error untuk menyelesaikan pin mana yang sesuai dengan output mana dan sesuaikan kode. Untuk lampu dan bumper, ini tidak terlalu buruk - tapi jelas beri label pada semua input dan tulis yang mana, karena proses itu dapat memiliki hingga 24 nilai dan akan membutuhkan waktu lebih lama untuk dikalibrasi.

Encoder memiliki properti yang disayangkan, kadang-kadang berdenyut pin indikator tinggi sebelum 5 pin encoder sepenuhnya menyelesaikan nilainya. Bagi kami, kami tahu ini terjadi ketika jumlah sakelar yang ditekan mati satu per satu, tetapi ini mungkin terlihat berbeda untuk Anda. Kami memecahkan masalah ini dengan menggunakan pustaka debouncing untuk membuat sedikit keterlambatan antara ketika kami melihat bahwa switch telah berubah dan ketika kami merekam switch yang mana itu. Namun, hati-hati, karena terlalu banyak penundaan (lebih dari 15-20 mS) dapat menyebabkan Anda kehilangan input sepenuhnya.

Maaf, kami belum menemukan solusi yang bagus untuk yang satu ini.