İçindekiler:

Arduino: Pinball Makinesi: 8 Adım (Resimlerle)
Arduino: Pinball Makinesi: 8 Adım (Resimlerle)

Video: Arduino: Pinball Makinesi: 8 Adım (Resimlerle)

Video: Arduino: Pinball Makinesi: 8 Adım (Resimlerle)
Video: Amerika'dan Pinball Makinesi Getirtmek 2024, Kasım
Anonim
Image
Image

Hem langırt makinelerini hem de elektroniği her zaman sevdiğim için kendi langırt makinemi yapmaya karar verdim. Programlama ve elektronik için Arduino'yu seçtim çünkü hem kompakt hem de kullanımı kolay, erişilebilirliği yüksek bir platform.

Bu rehberde geliştirme sürecimi açıklayacağım, belki siz meraklılardan biri benzer bir şey yaratabilir.

Adım 1: Vakayı Oluşturma

Davayı Oluşturmak
Davayı Oluşturmak

Langırt makinesi vakasıyla başlayalım. Oldukça basit bir yapı yaptım. Alt plakayı kestim ve duvar parçalarını birleştirmek için köşelerde 4 küçük ahşap sütun kullandım. Kasanızın boyutu kendi seçiminizdir, alanı doldurmak için süper muhteşem ekstralar eklemeyi planlamadığım için orijinal bir tilt makinesinden biraz daha küçük yapmayı seçtim. Kasayı olabildiğince sabit hale getirmek için hem vidaları hem de yapıştırıcıyı kullandım. Arka tarafta, tilt makinesine ikonik bir eğim kazandıracak iki ayak için zemin parçasına iki delik açtım. Yine, bacakların yüksekliği tamamen size kalmış. Bacakları ne kadar uzun yaparsanız, top o kadar hızlı yuvarlanır (aşağıya doğru).

Adım 2: Flipper Mechanic'i Oluşturma

Flipper Mechanic'in İnşası
Flipper Mechanic'in İnşası

Bu projenin maliyetini sınırlamak istediğim için elektronik paletler yerine tamamen mekanik paletler yapmaya karar verdim. Elektronik paletlerle ilgileniyorsanız, biraz aynı olan bir yapı kullanabilirsiniz, ancak buna sözde 'solenoid' bağlı (paletler kontrol etmek için yeterli güce sahip solenoidler benim için çok pahalıydı).

Her iki paletin de dönme noktası için altta iki delik açarak başladım. Delikleri (bence) birbirine biraz fazla yakın açtım ve bu da oyunun sonunda biraz fazla kolay olmasına neden oldu. Bu nedenle, kolay bir oyun tarzı istemiyorsanız paletleri birbirine çok yakın yerleştirmemeye dikkat edin.

Ayrıca kanat deliklerine paralel olarak her iki yan duvarda da iki delik açtım. Bu delikler iki flipper düğmesi için kullanılacaktır.

Paletleri orijinal konumuna geri çekmek için yaylar kullandım ve düğmelere basıldığında dönmelerini sağlamak için paletler ile düğmeler arasında döner bir yapı oluşturdum. Yayların paletleri çok fazla geri çekmesini önlemek için paletleri orijinal konumlarında tutmak için iki vida yerleştirdim.

Adım 3: Duvarları Yerleştirme

Duvarları Yerleştirmek
Duvarları Yerleştirmek

Langırtı paletlere yönlendirmek için birkaç duvar yerleştirdim. Yapmaları çok basit. Sadece kasanın altına 3 delik açın ve üç tahta pimi itin. Pimlerin etrafına bir lastik bant sarın ve işiniz bitti.

Adım 4: Puan Bloklarını Ekleme

Puan Bloklarını Ekleme
Puan Bloklarını Ekleme
Puan Bloklarını Ekleme
Puan Bloklarını Ekleme

Skor blokları, langırt makinesinin en önemli parçalarından biridir, bu yüzden bu kısmı doğru yaptığınızdan emin olun. Langırt makinem için üç skor bloğu yaptım, ama bu yine size kalmış.

Süpürgenin küçük bir parçasını kesip etrafına bakır tel sardım. Arduino, bu bakır teli sürekli olarak 5V ile besleyecektir. Topla daha iyi temas için dört kalem yayı yanlara lehimledim.

Puan bloklarının çalışma şekli, topun Arduino'daki bir giriş pinine giden bir devreyi tamamlamasıdır. Yaptığım şey, kasanın altına alüminyum folyo bantlamak (bakıra dokunmamak) ve folyoyu Arduino'daki bir pime bağlamaktı. Top hem bakıra hem de alüminyuma çarptığında devre tamamlanır ve Arduino bir sinyal alır.

Alüminyum folyo kullanarak tüm puan bloklarını birbirine bağladım, ancak yapışkan tarafın elektriği İLETMEDİĞİNİ unutmayın.

Adım 5: Game Over Contact'ı Ekleme

Oyun Üzerinden Temas Ekleme
Oyun Üzerinden Temas Ekleme

Langırt makinesinin alt kısmında, paletlerin arasına temas üzerine bir oyun ekledim. Top bu kontağa her çarptığında, oyuncu bir top kaybeder. Yaptığım yapı skor blokları ile bire bir aynı. Sadece burada iki vida kullandım ve yine altta bir parça alüminyum folyo.

Adım 6: Kablo Deliklerini Delme

Kablo Deliklerini Delme
Kablo Deliklerini Delme
Kablo Deliklerini Delme
Kablo Deliklerini Delme
Kablo Deliklerini Delme
Kablo Deliklerini Delme

Her şeyi Arduino'ya bağlamaya başlamadan önce, kablolar için birkaç delik açmamız gerekiyor. Her iki alüminyum folyo parçasına bir delik açtım, böylece alüminyum folyoda bir delik skor bloklarına yakın ve alüminyum folyoda bir delik temas noktasının yakınında.

Bunun yanı sıra, sol altta, duvarların arasında, ekstra bilyeli kapı Servo'ya giden kablo için bir delik açtım.

Altta LCD'ye bağlanan kablo için de bir delik olmalıdır.

7. Adım: Her Şeyi Kablolama

Her Şeyi Kablolama
Her Şeyi Kablolama
Her Şeyi Kablolama
Her Şeyi Kablolama

Tüm kabloların nereye gitmesi gerektiğine dair daha iyi bir genel bakış elde etmek için bu şemayı yaptım. Çaprazlar, kabloların bağlandığı noktalardır. Her şeyi biraz daha istikrarlı ve güvenilir hale getirmek için mümkün olduğunca lehimlemeye çalıştım. Kablolama biraz zaman alacak, ancak bu yapıldıktan sonra neredeyse oradasınız!

8. Adım: Kodu Yükleme

Langırt makinenizi canlandırmak için aşağıdaki kodu Arduino'nuza yükleyin!

// lcd için kütüphaneyi dahil et

#include #include

// lcd veri pinlerini başlat

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

// Bir servo oluştur

Servo topGateServo;

// Kullandığımız pinler için değişkenler oluşturun

int gameoverPin = 6; int puanPin = 5; int hoparlörPin = 4; int ballGateServoPin = 3;

// Langırt makinesi için oyun değişkenlerini başlat

int puanı = 0; int yüksek puan = 500; bool highscoreReached = false; int toplar = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = yanlış;

//bu kodu ilk karede bir kez çalıştır

void setup() { // Kullandığımız pinler için pinMode'u ayarlayın pinMode(gameoverPin, INPUT); pinMode(scorePin, INPUT);

// Genişlik ve yükseklik vererek lcd'yi başlat

lcd.begin(16, 2);

// Bilyalı kapı servosunu uygun pime takın

ballGateServo.attach(ballGateServoPin);

// Kapı servosunu başlangıç pozisyonuna resetle

ballGateServo.write(0); }

// Bu kodu her karede çalıştırın

void loop() { // Pin girişlerini yakalayın int gameoverState = digitalRead(gameoverPin); int scoreState = digitalRead(scorePin);

// Girdi alınırsa puana ekle

if (scoreState) { tone(speakerPin, 1000); puan += 10; } başka { noTone(4); }

// Oyun çukuru tetiklenirse toplardan çıkar

if (gameoverState ve !gameoverTriggered) { toplar -= 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Top oyun temasına değmediği anda oyun zamanlayıcısını başlat

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

// Gameover metnini lcd'ye kırpın ve skoru ve topları sıfırlayın

if (toplar <= 0) { lcd.setCursor(0, 0); for (int i = 5; i>= 1; i--) { lcd.clear(); gecikme(250); lcd.print("OYUN BİTTİ"); lcd.setCursor(0, 1); lcd.print("Tekrar dene?"); gecikme(250); } lcd.clear(); puan = 0; ballGateServo.write(0); highscoreReached = yanlış; toplar = 3; }

if (puan > yüksek puan ve !yüksek puan Ulaşıldı) {

lcd.setCursor(0, 0); for (int i = 5; i >= 1; i--) { lcd.clear(); gecikme(250); lcd.print("YENİ YÜKSEK Skor"); lcd.setCursor(0, 1); lcd.print("Ani Ölüm!"); gecikme(250); } lcd.clear(); toplar = 1; ballGateServo.write(120); yüksek puan = puan; yüksek puanUlaşılan = doğru; }

// Mevcut puan daha yüksekse yüksek puanı güncelle

if (puan > yüksek puan) { yüksek puan = puan; }

// İmleci satır 0'a ayarla

lcd.setCursor(0, 0); // Geçerli (yüksek) puanı lcd'ye yazdır if (score <= 0) { lcd.print("Yüksek puan: " + String(yüksek puan) + " "); } else { lcd.print("Puan: " + String(puan) + " "); }

// İmleci satır 1'e ayarla

lcd.setCursor(0, 1);

// Mevcut top miktarını lcd'ye yazdır

lcd.print("Toplar: " + String(toplar)); }

Önerilen: