Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Mesin Pinball Terkendali Arduino

Komponen dan persediaan

Arduino Mega 2560
× 1
Layar LCD 2-pin Adafruit
× 1
Catu Daya 24V
× 1
Sensor Kekuatan Adafruit
× 1
Perakitan Bumper Pop
× 1
Sakelar Bumper Pop
× 1
Beralih Target
× 1
Sakelar Rollover
× 1
Perakitan Flipper
× 1
Lampu LED
× 1

Tentang proyek ini

Mesin Pinball Terkendali Arduino

Membangun mesin pinball yang dikendalikan Arduino membutuhkan kombinasi keterampilan pengerjaan kayu, mekanik, elektronik, dan pemrograman. Butuh sekitar enam bulan upaya paruh waktu untuk membuat dan merupakan hal paling rumit yang pernah saya buat. Ini terutama karena saya tidak dapat menemukan banyak informasi tentang cara membuat mesin pinball.

Dokumen ini akan memberikan deskripsi tentang bagaimana mesin ini dibuat. Saya akan mencoba memberikan referensi yang cukup sehingga jika Anda memutuskan untuk membangun sendiri, Anda akan memiliki waktu yang lebih mudah daripada saya. Pada saat yang sama, saya tidak bisa cukup menekankan perlunya menguji semuanya. Saya menggunakan kayu lapis bagian cadangan untuk membuat prototipe setiap komponen sebelum memasang di mesin yang sebenarnya. Ini akan menyelamatkan Anda dari banyak kesedihan dalam jangka panjang.

Seperti yang Anda lihat dari gambar, mesin memiliki lemari kayu dan menggunakan suku cadang mesin pinball yang tersedia secara komersial. Mesin dikendalikan oleh satu papan Arduino Mega 2560. Jika Anda ingin melihat mesin beraksi, buka tautan ini, atau tonton di sini:

Kasus

Kasingnya terbuat dari kayu lapis berwajah kayu ek yang dibeli di toko rumah. Semua dimensi dalam dokumen ini dalam inci. Panel depan dan belakang berukuran 20H x 23W. Panel samping berukuran 20H x 47L. Potongan-potongan itu dipotong dengan ujung yang diikat dan dihubungkan menggunakan penyambung biskuit dan lem kayu. Sekrup dan lem saku juga bisa digunakan. Mesin akan mengambil banyak penyalahgunaan sehingga harus kuat. Sebelum menggabungkannya, saya juga memotong ” dado 1 inci dari bawah. Jangan merekatkan rak. Perlu mengapung untuk memungkinkan ekspansi dan kontraksi. Rak digunakan untuk menampung catu daya utama dan catu daya untuk lampu LED dekoratif yang dipasang di bawah tutupnya. Permukaan bermain adalah 22w x 42L. Perhatikan bahwa ini secara signifikan lebih pendek dari kabinet. Ini memberi saya sekitar 3 inci di depan untuk melewatkan kabel ke tombol sirip dan ke lampu LED. Ini juga memberi ruang untuk mekanisme ball plunger. Permukaan bermain hanya bertumpu pada beberapa balok kayu kecil yang disekrup ke samping sekitar 4 inci di bawah bagian atas kasing. Untuk mendapatkan nyali mesin, saya cukup membuka tutupnya, menghapus lapangan bermain dan membaliknya.

Kasing dan permukaan bermain semuanya dibangun pada sudut yang benar. Pitch permainan disediakan oleh kaki seperti yang ditunjukkan oleh tampilan samping ini. Mesin pinball dapat memiliki sudut mulai dari 1 hingga 7 derajat. Semakin tinggi sudut semakin cepat permainan. Karena saya tidak yakin sudut apa yang akan saya butuhkan, saya merancang kaki agar dapat disesuaikan. Kakinya sendiri terbuat dari kayu dan tersedia di sebagian besar toko rumah. Saya kemudian mengebor lubang sedalam 12 inci di ujung setiap kaki menggunakan mata bor. Di ujung bawah saya menggunakan epoksi dua komponen untuk memasukkan mur tee 3/8 inci. Berhati-hatilah agar lem tidak menempel pada benang atau di tempat yang akan menghalangi lubang yang Anda bor. Saya kemudian memasukkan batang ulir 12 inci 3/8 inci ke dalam kaki dan saya memasang mur ke batang. Saya kemudian memasang kaki perata di ujungnya. Kaki perata dan kacang tee saya dapatkan di tautan di bawah ini.

http://www.mscdirect.com/product/details/40610032

http://www.mscdirect.com/product/details/67300962

Pelat pemasangan kaki meja cukup disekrup ke rak bawah dan kaki disekrup. Untuk menyesuaikan ketinggian mesin, cukup kendurkan mur lalu kencangkan batang berulir ke dalam atau ke luar. Kemudian kencangkan kembali mur untuk memastikan meja tetap aman.

Pada gambar, Anda akan melihat kabel listrik dan kabel USB. Kabel listrik berasal dari soket ekstensi yang saya pasang di bagian belakang mesin. Semuanya terpasang di sana, sehingga satu sakelar menghidupkan atau mematikan semuanya. Kabel USB ada, sehingga saya dapat memprogram ulang papan Arduino tanpa harus menghapus lapangan bermain.

Penutup

Bingkai tutup terbuat dari kayu ek dan memiliki dimensi yang sama dengan kabinet. Bagian atas dan sampingnya lebarnya 1,5 inci, sedangkan bagian bawahnya lebarnya 5 inci. Lebar ekstra di bagian bawah digunakan untuk menyembunyikan celah antara lapangan bermain dan kabinet. Sebuah dado dijalankan di tepi bagian dalam potongan bingkai untuk menahan penutup Plexiglas. Saya menggunakan kaca bukan kaca karena lebih ringan, lebih aman, dan lebih mudah dipotong. Tutupnya disatukan menggunakan sekrup saku. Saya melakukan ini agar saya dapat membongkarnya jika Plexiglas perlu diganti. Saya juga memasang strip lampu LED warna-warni di bawah tutupnya untuk tujuan dekoratif. Terakhir, saya memasang penutup ke kasing menggunakan engsel piano yang saya masukkan ke dalam penutup dan kasing.

Arduino

Arduino Mega 2560 pada dasarnya melakukan empat hal. Ini menentukan kapan sakelar diaktifkan, menyalakan atau mematikan lampu yang sesuai, melacak skor, dan menampilkan skor dan nomor bola pada LCD kecil. Sebagian besar kabel cukup sederhana. Misalnya, target terhubung ke salah satu input digital Arduino dan ke ground. Input dikonfigurasi menggunakan pernyataan seperti yang ditunjukkan di bawah ini.

pinMode(Pin_Number,INPUT_PULLUP)

Ketika kode mendeteksi bahwa input telah berubah dari tinggi ke rendah, ia mengetahui bahwa target telah tercapai dan kemudian menyalakan lampu pinball LED yang sesuai.

Satu-satunya komplikasi dalam hal ini adalah dari Bumper Pop. Sakelar rollover dan target yang digunakan dalam game ini semuanya mendapatkan kekuatannya dari Arduino. Bumper Pop mendapatkannya dari catu daya 25 volt yang terpisah karena mereka membutuhkan lebih banyak jus daripada yang dapat disediakan oleh Arduino. Bumper Pop memang memiliki sakelar yang mengaktifkannya, tetapi saya tidak dapat membacanya secara langsung karena tegangan tinggi. Akibatnya, pertama-tama saya mengirim output dari sakelar Pop Bumper ke pembagi tegangan. Contoh pembagi tegangan dapat ditemukan di tautan di bawah ini.

Pembagi Tegangan

Setelah melalui pembagi tegangan, tegangan diturunkan menjadi 5 volt dan Arduino dapat menanganinya. Saya menemukan bahwa saya mendapat lebih sedikit pembacaan yang salah dengan ini jika saya menggunakan input Analog, karena pembagi tegangan tampaknya selalu membocorkan arus. Dengan input Analog, saya dapat memeriksa bahwa ambang batas terlampaui sehingga saya dapat dengan mudah memisahkan sinyal dari noise.

Selama bermain, jika semua jenis perangkat tertentu (target, pop bumper, atau rollover) telah diaktifkan, saya memprogram Arduino untuk mem-flash semua lampu untuk perangkat tersebut dan kemudian meningkatkan skor untuk mereka.

Saya juga menggunakan sensor gaya kecil untuk mengetahui kapan bola hilang. Ini memungkinkan saya untuk melacak jumlah bola yang dimainkan dan menentukan kapan permainan selesai. Saat permainan selesai, semua lampu berkedip secara berurutan.

Akhirnya, saya menggunakan Arduino untuk menampilkan skor dan nomor bola.

Diagram pengkabelan terlampir menunjukkan bagaimana salah satu dari masing-masing komponen utama dihubungkan. Diagram akan terlalu membingungkan jika semuanya ditampilkan.

Sumber Daya

Untuk menyalakan komponen pinball, saya menggunakan catu daya 24 volt. Unit ini memiliki banyak kekuatan untuk sirip dan sidekicks. Ini sedikit lemah untuk bumper pop. Anda mungkin ingin menggunakan catu daya yang lebih kuat untuk ini. Jika ya, Anda harus membuat pembagi tegangan sendiri, karena saya hanya dapat menemukan yang memiliki tegangan maksimum 25 volt. Informasi tentang cara membuat pembagi tegangan dapat ditemukan di sini.

Alih-alih menghubungkan semuanya secara langsung ke catu daya, saya memasang kabel darinya ke sepasang bus bar daripada memasangnya di bagian bawah lapangan permainan. Ini membuatnya lebih mudah untuk menghubungkan berbagai komponen. Anda dapat melihat salah satu bar bus pada gambar kedua di bagian Slingshot. Mereka tersedia di toko rumah di departemen kelistrikan.

Penembak Bola atau Plunger

Penembak atau pendorong bola dibeli di tautan berikut

http://www.marcospecialties.com/pinball-parts/B-12445

Sebuah lubang perlu dibor melalui bagian depan kasing agar plunger dapat melewatinya. Kemudian disekrup ke bagian dalam kasing. Sangat hati-hati harus dilakukan untuk memastikan bahwa plunger benar sejajar dengan lapangan bermain. Tempatkan tepi lurus di lapangan bermain dan tandai titik di mana ia menyentuh bagian dalam kasing. Kemudian naik cukup tinggi sehingga bagian tengah plunger sama tingginya dengan setengah tinggi pinball. (Pinball berukuran 1 dan 1/16 inci dan tersedia di Pinball.)

Lapangan Bermain

Lapangan bermain terbuat dari kayu lapis berwajah birch inci. Untuk membuat permainan lebih dekoratif, saya membeli gambar dari tautan NASA di bawah ini.

http://hubblesite.org/gallery/printshop/ps35/

Saya pertama kali menyemprot kayu lapis dengan perekat kontak dan kemudian melaminasi poster di atasnya. Saya kemudian membaliknya dan memotongnya sesuai ukuran.

Sirip

Sirip dibeli di tautan di bawah ini.

http://www.pinballlife.com/index.php?p=product&id=172

Saat Anda membeli sebagian besar komponen pinball, mereka cenderung datang tanpa instruksi yang berguna. Cara memasang sirip pada gambar di bawah ini. Itu berasal dari tautan ini.

Selain mekanisme sirip, Anda memerlukan kelelawar sirip, sakelar sirip, dan sebuah tombol.

Ketapel

Perakitan katapel lengkap dapat ditemukan di sini. Anda juga membutuhkan peniti dan karet gelang. Anda dapat menemukannya di lokasi yang sama. Juga diperlihatkan gambar ketapel saat dipasang di bawahnya. Saya harus menunjukkan bahwa kawat pengukur 16 digunakan untuk semua komponen yang terhubung ke catu daya 24 volt dan kawat pengukur 22 digunakan untuk koneksi ke papan Arduino.

Gambar pertama juga menunjukkan beberapa rel logam di sebelah kelelawar sirip. Saya tidak dapat menemukan tempat untuk membeli rel, jadi saya membuatnya. Saya menggunakan beberapa kawat baja krom yang saya temukan di toko rumah. Itu digunakan untuk menandai halaman rumput ketika mereka telah disemprot dengan insektisida. Saya memotong dan menekuk kawat. Saya kemudian mengebor lubang di lapangan bermain dan mengecat rel di tempatnya.


Bumper Pop

Rakitan bumper pop dapat dibeli di sini. Anda juga akan membutuhkan sakelar dan tutup. Bumper pop dipasang dengan mengebor tiga lubang, dua untuk batang penyangga logam dan satu untuk poros yang memicu sakelar. Ketika sebuah bola menggelinding ke dalam piringan putih yang terlihat pada pandangan atas, bola itu mendorong porosnya ke bawah. Ini memicu sakelar daun, yang kemudian mengaktifkan solenoida. Solenoid kemudian menarik cincin logam ke bawah yang mengirim bola ke arah yang berlawanan.

Target, sakelar rollover, dan lampu

Target tersedia di tautan di bawah ini.

http://www.marcospecialties.com/pinball-parts/A-14691-5

Sakelar dan dudukan rollover dapat ditemukan di bawah.

http://www.actionpinball.com/parts.php?item=A-12687

Lampu yang saya gunakan tidak lagi dibuat, tetapi padanannya ditunjukkan di bawah ini.

http://www.actionpinball.com/parts.php?item=LED4555

Anda juga memerlukan dudukan lampu yang ditunjukkan di bawah ini.

http://www.actionpinball.com/parts.php?item=077-5030-00

Pengkabelan semua ini pada dasarnya sama dan disebutkan di bagian Arduino.

Ringkasan

Setelah Anda memulai, Anda pasti akan menemukan lonceng dan peluit lain yang ingin Anda tambahkan, tetapi ini akan membantu Anda memulai.

Kode

  • Kode Mesin Pinball Arduino
Kode Mesin Pinball ArduinoArduino
Memungkinkan Arduino untuk mengontrol permainan mesin pinball buatan rumah
 const int TxPin =17; Skor panjang =0; lama Skor Lama =0; Target panjang =1; Pop panjang =1; Gulungan panjang =10; int Target[8]; int Gulungan[3]; int Muncul[4]; int Mili =10; int Jumlah =0; int Flash =100; int Bola =0; int saya=0; int Tembakan =0; int Hilang =0; int Tekanan =1024; #include ;SoftwareSerial mySerial =SoftwareSerial(255, TxPin);void setup() { /* Kata-kata tanpa s adalah nilai yang dicapai dengan berinteraksi dengan perangkat. * Bekerja dengan s melacak yang individu berinteraksi dengan. * Yang terakhir diperlukan untuk menentukan kapan semua telah terkena dan nilainya perlu ditingkatkan * dan lampu perlu dimatikan. */ pinMode(TxPin, OUTPUT); digitalWrite(TxPin, TINGGI); mySerial.begin(9600); mySerial.write(12); // Hapus mySerial.write(17); // Nyalakan lampu latar //target input pinMode(2,INPUT_PULLUP); pinMode(3,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); pinMode(5,INPUT_PULLUP); pinMode(6,INPUT_PULLUP); pinMode(7,INPUT_PULLUP); pinMode(8,INPUT_PULLUP); pinMode(9,INPUT_PULLUP); //rollover input pinMode(10,INPUT_PULLUP); pinMode(11,INPUT_PULLUP); pinMode(12,INPUT_PULLUP); // sakelar tembakan bola bawah pinMode(15,INPUT_PULLUP); // saklar tembakan bola atas pinMode(16,INPUT_PULLUP); //lcd output pinMode(17,OUTPUT); //lampu target, masing-masing pinMode(32,OUTPUT); pinMode(33,OUTPUT); pinMode(34,OUTPUT); pinMode(35,OUTPUT); pinMode(36,OUTPUT); pinMode(37,OUTPUT); pinMode(38,OUTPUT); pinMode(39,OUTPUT); // lampu rollover, masing-masing pinMode(40,OUTPUT); pinMode(41,OUTPUT); pinMode(42,OUTPUT); //pop lampu bumper pinMode(50,OUTPUT); pinMode(51,OUTPUT); pinMode(52,OUTPUT); pinMode(53,OUTPUT);}void loop() { // letakkan kode utama Anda di sini, untuk dijalankan berulang kali://Jika resistor pull-down digunakan, pin input akan LOW saat sakelar terbuka dan HIGH saat saklar ditutup. //periksa apakah target terkena//****** Target ***** for (int i=0; i<8; i++){ if (digitalRead(i+2) ==LOW){ / /Target diaktifkan Target[i]=1; Skor =Skor + Target; //nyalakan lampu Target digitalWrite(i+32,HIGH); //delay agar tidak mendapatkan banyak poin untuk satu hit delay(Milli); merusak; } } Jumlah =0; for (int i=0; i<8; i++){ Jumlah =Jumlah + Target[i]; } if (Jumlah ==8){ //semua Target menyala, jadi flash lalu matikan. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } penundaan (Blitz); for (int i=0; i<8; i++){ digitalWrite(i+32, HIGH); } penundaan (Blitz); } untuk (int i=0; i<8; i++){ digitalWrite(i+32, RENDAH); Target[i]=0; } penundaan (Blitz); // Kalikan nilai target dengan 10 Target =Target * 5; //keluar Lewati; } // *********** Rollover ********* for (int i=0; i<3; i++){ if (digitalRead(i+10) ==LOW) { //rollover diaktifkan Rolls[i]=1; Skor =Skor + Gulung; //nyalakan lampu rollover digitalWrite(i+40,HIGH); //delay agar tidak mendapatkan banyak poin untuk satu hit delay(Milli); merusak; } } Jumlah =0; for (int i=0; i<3; i++){ Jumlah =Jumlah + Gulungan[i]; } if (Jumlah ==3){ //semua rollover menyala, jadi flash lalu matikan. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } penundaan (Blitz); for (int i=0; i<3; i++){ digitalWrite(i+40, HIGH); } penundaan (Blitz); } untuk (int i=0; i<3; i++){ digitalWrite(i+40, LOW); Gulungan[i]=0; } penundaan (Blitz); // Kalikan skor dengan 2 Skor =Skor * 2; Gulungan =Gulung * 10; //keluar Lewati; } //********** Pop Bumper ********** for (int i=0; i<4; i++){ if (analogRead(i)> 500){ / /pop diaktifkan Pops[i]=1; Skor =Skor + Pop; //nyalakan lampu pop bumper digitalWrite(i+50,HIGH); //delay agar tidak mendapatkan banyak poin untuk satu pukulan //mySerial.print(analogRead(i)); //mySerial.print(" "); penundaan (Mili); merusak; } } Jumlah =0; for (int i=0; i<4; i++){ Jumlah =Jumlah + Muncul[i]; } if (Jumlah ==4){ //semua pop bumper menyala, jadi nyalakan lalu matikan. for (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } penundaan (Blitz); for (int i=0; i<4; i++){ digitalWrite(i+50, HIGH); } penundaan (Blitz); } untuk (int i=0; i<4; i++){ digitalWrite(i+50, RENDAH); Muncul[i]=0; } penundaan (Blitz); // Kalikan nilai target dengan 10 Pop =Pop * 2; //keluar Lewati; }Lewati://Tentukan nomor bola jika (digitalRead(15) ==RENDAH){ //bola mengenai sakelar gang bawah //jika belum melakukannya, tambah Bola jika (Tembak ==0){ //Set Kalah =0 karena tidak pada bantalan tekanan Hilang =0; Tekanan =analogBaca(7) + 20; //set OldScore untuk mencetak ulang nilai bola pada LCD OldScore =-1; Bola =Bola + 1; if (Bola ==6){ Bola =1; Skor =0; Sasaran =1; Gulung =1; Pop =1; } Tembakan =1; } } if (digitalRead(16) ==LOW){ //ball hit lower gang switch //jika belum melakukannya, tambah Ball if (Shot ==0){ //Set Lost =0 karena tidak pada pressure pad Lost =0; Tekanan =analogBaca(7) + 15; //set OldScore untuk mencetak ulang nilai bola pada LCD OldScore =-1; Bola =Bola + 1; if (Bola ==6){ Bola =1; Skor =0; Sasaran =1; Gulung =1; Pop =1; } Tembakan =1; } } if (analogRead(7)> Tekanan){ //bola pada bantalan tekanan Tembakan =0; if (Hilang ==0){ //mySerial.print(analogRead(7)); //Skor =Skor + 100; Hilang =1; if (Bola ==5){ //Game Over //flash rollover lalu matikan. for (int j=0; j<3; j++){ for (int i=0; i<3; i++){ digitalWrite(i+40, LOW); } penundaan (Blitz); for (int i=0; i<3; i++){ digitalWrite(i+40, HIGH); } penundaan (Blitz); } untuk (int i=0; i<3; i++){ digitalWrite(i+40, LOW); Gulungan[i]=0; } // flash pop bumper lalu matikan for (int j=0; j<3; j++){ for (int i=0; i<4; i++){ digitalWrite(i+50, LOW); } penundaan (Blitz); for (int i=0; i<4; i++){ digitalWrite(i+50, HIGH); } penundaan (Blitz); } untuk (int i=0; i<4; i++){ digitalWrite(i+50, RENDAH); Muncul[i]=0; } //Flash Target lalu matikan. for (int j=0; j<3; j++){ for (int i=0; i<8; i++){ digitalWrite(i+32, LOW); } penundaan (Blitz); for (int i=0; i<8; i++){ digitalWrite(i+32, HIGH); } penundaan (Blitz); } untuk (int i=0; i<8; i++){ digitalWrite(i+32, RENDAH); Target[i]=0; } mySerial.write(12); // Hapus penundaan (5); // Diperlukan penundaan mySerial.print(Skor); // Baris pertama mySerial.write(13); // Form feed mySerial.print("Game Over!!!"); // Baris kedua } } } //cetak ke LCD if (Skor !=Skor Lama){ mySerial.write(12); // Hapus penundaan (5); // Diperlukan penundaan //mySerial.print(analogRead(7)); mySerial.print(Nilai); // Baris pertama mySerial.write(13); // Form feed mySerial.print("Bola ="); // Baris kedua mySerial.print(Bola); Skor Lama =Skor; }}

Skema


Proses manufaktur

  1. Raspberry Pi / Hologram SMS Sakelar Daya AC Terkendali
  2. Robot Raspberry Pi dikendalikan melalui Bluetooth
  3. Lampu Meja Interaktif Terkendali Gerakan
  4. Mesin ULTRASONIC LEVITATION Menggunakan ARDUINO
  5. LED Terkendali Alexa Melalui Raspberry Pi
  6. Mobil RC Terkendali Joystick
  7. Lengan Robot Terkendali Nunchuk (dengan Arduino)
  8. Manipulator Saklar Lampu Nirkabel
  9. Robot yang Dikendalikan Bicara
  10. Arduino Apple Watch