Isi kandungan:

Arduino: Mesin Pinball: 8 Langkah (dengan Gambar)
Arduino: Mesin Pinball: 8 Langkah (dengan Gambar)

Video: Arduino: Mesin Pinball: 8 Langkah (dengan Gambar)

Video: Arduino: Mesin Pinball: 8 Langkah (dengan Gambar)
Video: Lego berbentuk motor jadi berantakan gara gara ini 2024, Jun
Anonim
Image
Image

Oleh kerana saya selalu menyukai mesin pinball, dan elektronik, saya memutuskan untuk membina mesin pinball saya sendiri. Saya memilih Arduino untuk pengaturcaraan dan elektronik, kerana ia adalah platform yang sangat mudah diakses yang ringkas dan mudah digunakan.

Dalam panduan ini saya akan menerangkan proses perkembangan saya, jadi mungkin salah seorang peminat anda dapat membuat sesuatu yang serupa.

Langkah 1: Membina Kes

Membina Kes
Membina Kes

Mari kita mulakan dengan kes mesin pinball. Saya membuat pembinaan yang agak sederhana. Saya menggergaji plat bawah, dan menggunakan 4 tiang kayu kecil di sudut untuk menyambungkan kepingan dinding. Ukuran casing anda adalah pilihan anda sendiri, saya memilih untuk membuatnya sedikit lebih kecil daripada mesin pinball asli kerana saya tidak merancang untuk menambah tambahan yang sangat spektakuler untuk mengisi ruang. Saya menggunakan kedua-dua skru dan gam untuk menjadikan sarungnya sekuat mungkin. Di bahagian belakang saya menggerudi dua lubang di bahagian lantai untuk kedua kaki yang akan memberi mesin pinball kecondongan ikonik. Sekali lagi, ketinggian kaki terpulang kepada anda. Semakin tinggi kaki anda, semakin cepat bola akan bergolek (ke bawah).

Langkah 2: Membina Flipper Mechanic

Membina Mekanik Flipper
Membina Mekanik Flipper

Oleh kerana saya mahu mengehadkan kos projek ini, saya memutuskan untuk membuat sandal mekanikal sepenuhnya dan bukannya elektronik. Sekiranya anda berminat dengan sandal elektronik, anda boleh menggunakan pembinaan yang agak sama, tetapi dengan 'solenoid' yang disebut dengannya (solenoid dengan kekuatan yang cukup untuk mengawal sirip terlalu mahal untuk saya).

Saya mulakan dengan menggerudi dua lubang di bahagian bawah untuk titik pusing kedua sirip. Saya mengorek lubang (pada pendapat saya) agak dekat antara satu sama lain, dan ini menyebabkan permainan menjadi terlalu mudah pada akhirnya. Oleh itu, berhati-hatilah untuk tidak meletakkan sirip terlalu dekat satu sama lain, kecuali jika anda mahukan gaya permainan yang mudah.

Saya juga menggerudi dua lubang di kedua dinding sisi selari dengan lubang flipper. Lubang ini akan digunakan untuk dua butang flipper.

Saya menggunakan mata air untuk menarik kembali sirip ke posisi semula, dan membuat pembinaan berpusing antara sirip dan butang untuk membuatnya berputar ketika butang ditekan. Untuk menghentikan mata air menarik balik sirip terlalu jauh, saya meletakkan dua skru untuk menahan sirip pada kedudukan semula.

Langkah 3: Meletakkan Tembok

Meletakkan Tembok
Meletakkan Tembok

Saya meletakkan beberapa dinding untuk mengarahkan pinball ke arah sirip. Mereka sangat mudah dibuat. Cukup gerudi 3 lubang di bahagian bawah casing, dan tekan tiga pin kayu. Balut gelang getah di sekitar pin dan anda sudah selesai.

Langkah 4: Menambah Blok Skor

Menambah Blok Skor
Menambah Blok Skor
Menambah Blok Skor
Menambah Blok Skor

Blok skor adalah salah satu bahagian paling penting dalam mesin pinball, jadi pastikan anda melakukan bahagian ini dengan betul. Saya membuat tiga blok skor untuk mesin pinball saya, tetapi sekali lagi ini semua bergantung kepada anda.

Saya memotong sekeping kecil penyapu, dan membalut wayar tembaga di sekelilingnya. Arduino akan menghidupkan wayar tembaga ini dengan 5V. Saya memateri empat mata pena ke sisi untuk bersentuhan dengan bola dengan lebih baik.

Cara blok skor berfungsi, adalah bola melengkapkan litar yang menuju ke pin input di Arduino. Jadi yang saya buat ialah pita aluminium foil di bahagian bawah casing (TIDAK MENYENTUH TEMBAGA) dan pasangkan kerajang ke pin pada Arduino. Setiap kali bola memukul tembaga dan aluminium, litarnya lengkap dan Arduino akan menerima isyarat.

Saya menghubungkan semua blok skor bersama-sama menggunakan kerajang aluminium, tetapi perlu diingat bahawa bahagian melekit TIDAK mengalirkan elektrik.

Langkah 5: Menambah Kenalan Game Over

Menambah Kenalan Permainan Lebih
Menambah Kenalan Permainan Lebih

Di bahagian bawah mesin pinball, di antara sirip, saya menambah permainan melalui sentuhan. Setiap kali bola terkena kontak ini, pemain akan kehilangan bola. Pembinaan yang saya buat hampir sama dengan blok skor. Hanya di sini saya menggunakan dua skru, dan sekali lagi sekeping aluminium foil di bahagian bawah.

Langkah 6: Menggerudi Lubang Kabel

Menggerudi Lubang Kabel
Menggerudi Lubang Kabel
Menggerudi Lubang Kabel
Menggerudi Lubang Kabel
Menggerudi Lubang Kabel
Menggerudi Lubang Kabel

Sebelum kita memulakan kabel ke Arduino, kita perlu menggerudi beberapa lubang untuk kabel terlebih dahulu. Saya mengebor lubang melalui kedua-dua kepingan aluminium foil, sehingga satu lubang di aluminium foil dekat dengan blok skor, dan satu lubang di aluminium foil berhampiran permainan kerana kontak.

Selain itu, saya juga menggerudi lubang di kiri bawah, di antara dinding, untuk kabel yang menuju ke pintu bola tambahan Servo.

Terdapat juga lubang untuk kabel yang disambungkan ke LCD di bahagian bawah.

Langkah 7: Pendawaian Semuanya

Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya
Pendawaian Semuanya

Saya membuat skema ini untuk mendapatkan gambaran keseluruhan yang lebih baik ke mana semua kabel harus pergi. Salib adalah titik di mana kabel bersambung. Saya cuba solder sebanyak mungkin untuk menjadikan semuanya lebih stabil dan boleh dipercayai. Pendawaian akan memakan masa, tetapi setelah selesai, anda hampir sampai!

Langkah 8: Memuat naik Kod

Muat naik kod berikut ke Arduino anda untuk menjadikan mesin pinball anda hidup!

// Sertakan perpustakaan untuk lcd

#sertakan #sertakan

// Memulakan pin data lcd

LiquidCrystal lcd (7, 8, 9, 10, 11, 12);

// Buat servo

Bola servoGateServo;

// Buat pemboleh ubah untuk pin yang kita gunakan

int gameoverPin = 6; int skorPin = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Memulakan pemboleh ubah permainan untuk mesin pinball

skor int = 0; int tinggi = 500; bool highscoreReached = false; bola int = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = palsu;

// jalankan kod ini sekali pada bingkai pertama

batal persediaan () {// Tetapkan pinMode untuk pin yang kita gunakan pinMode (gameoverPin, INPUT); pinMode (skorPin, INPUT);

// Permulaan lcd dengan memberikan lebar dan tinggi

lcd.begin (16, 2);

// Pasang servo gerbang bola ke pin yang sesuai

ballGateServo.attach (ballGateServoPin);

// Tetapkan semula servo gerbang ke kedudukan awal

ballGateServo.write (0); }

// Jalankan kod ini setiap bingkai

gelung kosong () {// Tangkap input pin int gameoverState = digitalRead (gameoverPin); int skorState = digitalRead (skorPin);

// Tambahkan ke skor jika input diterima

jika (skorState) {nada (speakerPin, 1000); skor + = 10; } lain {noTone (4); }

// Kurangkan dari bola jika pit permainan diaktifkan

if (gameoverState dan! gameoverTriggered) {bola - = 1; gameoverTriggered = benar; gameoverTimer = gameoverTimerDuration; }

// Mulakan pemasa permainan selagi bola tidak menyentuh kontak permainan

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer - = 1; } lain {gameoverTriggered = false; }}

// Blinkkan teks permainan ke lcd dan tetapkan semula skor dan bola

jika (bola <= 0) {lcd.setCursor (0, 0); untuk (int i = 5; i> = 1; i--) {lcd.clear (); kelewatan (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Cuba lagi?"); kelewatan (250); } lcd.clear (); skor = 0; ballGateServo.write (0); highscoreReached = salah; bola = 3; }

jika (skor> skor tinggi dan! tinggi skorDapatkan) {

lcd.setCursor (0, 0); untuk (int i = 5; i> = 1; i--) {lcd.clear (); kelewatan (250); lcd.print ("BARU TINGGI BARU"); lcd.setCursor (0, 1); lcd.print ("Kematian Mendadak!"); kelewatan (250); } lcd.clear (); bola = 1; ballGateServo.write (120); skor tinggi = skor; highscoreReached = benar; }

// Kemas kini skor tinggi jika skor semasa lebih tinggi

jika (skor> skor tinggi) {skor tinggi = skor; }

// Tetapkan kursor ke baris 0

lcd.setCursor (0, 0); // Cetak skor semasa (tinggi) ke lcd jika (skor <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } lain {lcd.print ("Skor:" + Rentetan (skor) + ""); }

// Tetapkan kursor ke baris 1

lcd.setCursor (0, 1);

// Cetak jumlah bola semasa ke lcd

lcd.print ("Bola:" + Rentetan (bola)); }

Disyorkan: