Yaşam

Arduino Pinball Makinesi Nasıl Kurulur: 15 Adım (Resimlerle)

Arduino Pinball Machine - 3d Printing & Lasercutting

Arduino Pinball Machine - 3d Printing & Lasercutting

İçindekiler:

Anonim

Eğer benden hoşlanıyorsan, langırt seversin, ancak tam boy bir oyuna sığacak parası veya alan yok. Öyleyse neden kendininkini yapmıyorsun?

Burada, bir Arduino tarafından desteklenen kendi özel langırt oyununuzu nasıl yaratacağız. Oyunda ışıklar, sesler, tamponlar, düşürme hedefleri ve sapanlar dahil gerçek langırt parçaları var ve hatta bir rampa bile var.

Bu proje çok büyük miktarda ve çeşitli malzemeler gerektirdiğinden, her adımı tamamlamak için gereken yeni malzemeler için sonraki bölümlere bakın. Başlangıç ​​olarak, bir lazer kesiciye veya CNC yönlendiriciye ve ayrıca temel elektronik ve donanım araçlarına erişiminiz varsa çok yararlıdır.

Yazarın notu: Bu ders kitabı çok yakın zamanda yayınlandı ve tüm tasarım ve yazılım dosyaları tamamen organize edilmedi. Eğer dosyalarımızı kullanmayı planlıyorsanız, lütfen her şeyi en güncel durumda olduğundan emin olmak için bir yorum bırakın.

Gereçler:

1. Adım: Tasarım

Yukarıdaki resimde oyun alanı ve destek tertibatının bir Solidworks tasarımıdır. Oyun alanı tamamen kişiseldir, ancak atış çizgileri (geri döngü vuruşunun eğrisi gibi), düzgün oynamayı sağlamak için gerçek langırt makinelerine dayanarak tasarlanmıştır. Buradaki zorluklardan biri, karmaşıklıklarından ötürü, gerçek langırt parçalarının (örneğin tamponlar ve düşme hedefleri) modellenmemiş olmaları, ancak her şeyin oyun alanının altına sığması için hala özen gösterilmesi gerektiğidir - parçalar çok daha büyüktür. Yukarıdakilerin altında.

Dosyalar depoya dahil edilmiştir, bu yüzden fantazinize uyacak şekilde tasarımı ayarlamaktan çekinmeyin.

Tasarımın bir kaç özelliği:

Oyun alanı tam olarak 1980’lerin Bally tarzı oyunların büyüklüğü olan 42 inç’e 20.25 ”inç. Standart olan and ”kontrplaktan yapılmıştır ve tilt parçası montajları bu kalınlık için tasarlandığından değiştirilmemelidir. Buradaki duvarlar bir ¼ ”katmanının üstündeki ½” katmanından oluşur. İlk prototipte sadece ½ ”duvarlar dahil edildi, ancak bunların çok kısa olduğu ve özellikle sert atışlarda langırt havaya fırlayabileceği kanıtlandı. İkincisi, bu tasarım, topun oyun alanına hafifçe düşmesine, ancak geri düşmemesine izin veren hafif yükseltilmiş atıcı çizgiye (yukarıda resimde gösterilen) izin verir.

Rampa şeffaf akrilik ve 3d baskılı destekler ile tasarlanmıştır. Oyun alanını geçerek, oyuncuya, sol kanatçıktan üst üste art arda rampaya çarpma şansını verir. Dolayısıyla, şeffaf akrilik oyuncunun masa görüşünü engellememek için kullanılır:

Son olarak, oyun alanı dört köşedeki kısa duvarlarla desteklenmiştir, bu da oyun alanını standart 6.5 derece eğimde tutar. Arka duvar, sökülebilen ve elektronik aksamı monte etmek için kullanılan bir alt rafa sahiptir. Bu, tam boyutlu bir oyun alanına sahip bir oyunla sonuçlanır, ancak tipik bir oyundan çok daha küçüktür ve elle tek bir kişi tarafından taşınabilir. Oyun alanı standart boyutta olduğundan, oyun alanını standart bir langırt kabine yerleştirmek istiyorsanız, bu destekler çıkarılabilir. Bunu yapmak için, bu tasarıma dahil olmayan bir top dönüş tertibatı eklemeyi düşünebilirsiniz.

Adım 2: Odunu Kes

Oyun alanının katmanlarını kesmek için bir lazer kesici kullandık. Ancak, ½ ”kontrplakları kesebilecek kadar güçlü bir lazer kesici bulmak zor, yüksek kaliteli kontrplak gerektirir ve dikkatli olmazsanız yangına başlama riski oluşturabilir. Tipik oyun alanları bir CNC router kullanılarak kesilir - bazı köşeler net olmasa da, yine de iyi sonuçlar almalısınız. Basit olması için, aşağıdaki adımlar yaptığımız lazer kesiciye erişiminiz olduğunu varsayacaktır. Sadece bir tatbikat ve yapboz kullanarak iyi sonuçlar almış bazı insanlar var, ancak bu rotaya giderseniz çok dikkatli ve çok sabırlı olmalısınız.

Oyun alanını yaratmada ilk adım, tasarımı bir lazer kesiciye beslenebilecek .DXF dosyalarına dönüştürmektir. Örneğin, playfield .DXF dosyası aşağıda gösterilmiştir. Bu projede kullanılan dosyalar havuzumuza dahil edilmiştir.

Lazer kesiciyi kullanarak, oyun alanı, ¼ ”ara katmanı (daha ucuz ahşap benzeri prototip materyali olan duron'u kullandık, ancak ¼” kontrplak da çalışacaktır), ½ ”üst katmanı ve ½” destekler.

İhtiyac duyulan malzemeler:

  • Oyun alanı ve taban için lywood ”kontrplak
  • Wall ”ara duvar katmanı için kontrplak veya duron
  • ½ ”, ¾” ve 1 ”ağaç vidaları
  • CNC router veya lazer kesiciye erişim

Adım 3: Playfield'i birleştirin

Parçaları locations ”duron katmanından kontrplak üzerine ilgili yerlerine sıkarak başlayın. El matkabı kullanarak, önce 3/32 ”bit kullanarak pilot delikler açın ve daha sonra ¼” katmanını oyun alanına takmak için düz başlı wood ”ahşap vidalar kullanın (bunu yukarıdan aşağıya doğru yapmak önemlidir. böylece vida ilk önce layer ”katmanından sonra ½” tabanına geçer), ¼ ”kısımları küçük ve incedir ve zıt yönde delinirse taban katmanından uzağa bükülür. Vida kafalarının ¼ ”tabaka ile aynı hizada olduğundan ve herhangi bir ek kalınlık sağlamadığından emin olunması da önemlidir.

Son bir not: bu vidalar hemen hemen her yere gidebilir, çünkü bu katman oyun alanı kurulduktan sonra oyuncu tarafından görünmez olacaktır. Ancak bir istisna var - atıcı şeride vida takmayın. (İlk başta bu hatayı yaptık).

Daha sonra, yan duvarları takın ve en uzun ahşap vidaları kullanarak tahtanın üst tarafından delin, yine vida başlarının üst kısımla aynı hizada olmasını sağlayın. Bu yapıldıktan sonra, layer ”tabaka parçalarını duronun üstüne tutturun ve daha önce olduğu gibi vidalayın, bu sefer 1” vida kullanarak alttan vidalama. Üst tabaka ½ ”kalın olduğu için, daha az olasıdır. tabandan uzağa doğru bükmek ve alttan vidalamak, vidaların oynatıcı için görünmez kalmasını sağlar.

Son olarak, 2 vidayı kullanarak alt taraftan vidalayarak atıcı bloğunu (atıcıyla birlikte resimde gösterilen) takın, böylece blok kolayca bükülemez. Atıcı blok diğer taraftaki somunu sıkarak takılabilen atıcıya uyan "U" şeklinde bir yuvaya sahiptir. Ayrıca, çekim çubuğu ile bilye arasındaki sürtünmeyi azaltmak için kayganlaştırıcı kullanmanız gerekebilir.

Tasarım bu noktada bazı ayarlamalar gerektirebilir. Örneğin, tasarımımızda, bırakma hedeflerinin kesilmesi çok dardı ve bir dremel kullanılarak genişletilmesi gerekiyordu. Eğer dosyalarımızı bir referanstan daha fazlası olarak kullanıyorsanız, güncellenmiş dosyaları sağlayabilecek yazarlara başvurmaya çalışın. Aynı zamanda, iki ahşap parçasının birleştiği yerlerde, özellikle kaba alanları zımparalamak iyi bir fikirdir.

Çoğunlukla, bu ağaç işleme sonuçlandırır ve bileşenleri yerleştirmeye geçebiliriz.

İhtiyac duyulan malzemeler:

  • 3/4 "yassı başlı ahşap vidalar
  • Atıcı meclisi
  • Daha uzun (~ 1.5 ") ağaç vidaları
  • 3/32 "bit ile el matkabı
  • Kayganlaştırıcı yağ
  • 1 "yassı başlı ağaç vidaları
  • Bir dosya ve / veya dremel ve zımpara kağıdı

Adım 4: Bileşenleri Ekleyin

Tasarım aşamasında bu noktada, tüm bileşenlerin gerçekte oyun alanının altına sığdığından emin olmak için gereken yönlendirme hakkında genel bir fikre sahip olmalısınız. (Eğer tasarımımızı kullanıyorsanız, yukarıdaki tablomuzun alt kısmına bakınız).

Önce, bırakma hedeflerini, dik durma hedefini ve sapan tertibatlarını montajdaki montaj deliklerinden ½ ”ahşap vidalar takarak takın. Aynayı pop tamponlarla da yapın, ancak önce kapağı çıkardığınızdan emin olun, aksi takdirde montaj deliğine sığmaz!

İkinci olarak, kanatçık düzeneklerini takın. Doğru yönde döndüklerinden emin olun. Söndürüldüğü zaman solenoid, pimi bobinin içine sokacak ve bu, kancayı oyun alanına doğru dönecek şekilde şaftı döndürmelidir. Palet grubu montajı yapıldıktan sonra, palet raketlerini diğer taraftan takın.Yerlerine sıkmak için kilit somununda bir somun anahtarı kullanın, daha sonra kanatçıkların ateşlenmediğinde aşağı doğru geri sarıldığından emin olmak için düzenekle birlikte gelen yayı kullanın.

Benzer şekilde, 1/2 ”vidaları kullanarak tüm rollover anahtarlarını monte ederek üst ve bahardan tekrar yerine kolayca bastırılmalarını sağlayın. 6-32 cıvataları kullanarak, ayrıca kapı anahtarını sol üst tarafa takın. Bu kapı anahtarı aynı zamanda tek yönlü bir açıklık olarak da işlev görür ve sağ taraftan ve atıcıdan gelen çarpmaların çarpmalara düşmesine izin verir.Bu, doğru rampaya ve sağ döngüye giden atışlara yol açan bir tasarım yönüdür. farklı yerler ve oyuna daha fazla çeşitlilik katar.

Lambaları takmak için önce plastik ekleri deliklerine yerleştirin. Bu uçlar yaklaşık ¼ ”kalınlığındadır. Bir CNC router kullanıyorsanız, bunları monte etmenin doğru yolu hole ”katmanını ekleme deliğinden biraz daha büyük kesmektir. Tasarımımızda, lazer kesici kısmi katmanları kesemediğinden, kesici uçları destekleyen 3D baskılı braketleriz. Ekleri yerinde tutmak için epoksi kullanın (önce kenarlarını pürüzlendirin) ve eklerin oyun alanı ile aynı hizada olduğundan emin olmak için zımpara kağıdı.

Ardından, LED'leri yerlerine yerleştirip çevirerek braketlerine yerleştirin. Ardından, dirsekleri bu LED'lerin doğrudan her bir yerleştirmenin altına oturacak şekilde yerine vidalayın. Aşağıda bağlanan ışık braketleri oldukça incedir ve gerçekte 1/2 "vidaların masanın üstünü delebileceği kadar incedir. Bunun gerçekleşmemesi için birkaç rondela kullanın.

Oyun alanı direkleri 6-32 cıvata kullanılarak kurulur. Kurulduktan sonra, pasif tamponlar yapmak için lastik kitlerden etraflarına lastik sarın. Bunlar masaya, tasarımın tamamen kontrplak olması gerekenden çok daha fazla “hayat” veriyor. Aynı cıvataları kullanarak, şerit kılavuzlarını hemen paletlerin üzerine takın. Ayrıca oyun sonu anahtarını yerine yapıştırın.

Oyunların çoğunun, burada olduğu gibi özel bir top dönüş takımına sahip olduğunu unutmayın. Ancak, bu tasarıma dahil edilmedi, ancak öncelikle maliyet nedeniyle. Elbette ki takas, oyuncunun artık topu boşalttıktan sonra atıcı şeride geri koymasından sorumlu olmasıdır. Yine de, daha önce gösterildiği gibi, atıcı bloğuna bağlı bir atıcımız var.

Flipper butonları ve start butonu deliklere yerleştirilerek ve cevizlerle yerine kilitlenerek takılır. Flipper düğmesi yaprak anahtarları 6-32 cıvata kullanılarak düğmelerin içine cıvatalanır ve düğmelere basıldığında bir devre devresini kapatır.

Bu noktada, oyun alanınız (yukarıdan) neredeyse tam bir langırt masasına benzeyecektir! Tüm eksik olan rampa. Arkadaşlarınız arasında, ne kadar kablolama ve lehimlemenin yapılacağı konusunda özel olarak korkarken, harika göründüğü konusunda kendinizden çekinmeyin.

İhtiyaç duyulan malzemeler (çoğunluğu PinballLife.com'dan satın alınmıştır ve yalnızca aşağıdaki şartları arayarak bulunabilir).

  • 1 3-banka düşürme hedefi meclisi
  • 3x pop tampon takımı
  • 1 sol kanatçık düzeneği
  • 1 adet sağ kanatçık düzeneği
  • 2 yüzgeç yarasa
  • 2 flipper düğmesi
  • 2 adet flipper düğme ceviz
  • 1 başlat düğmesi
  • 1 lastik halka seti
  • ~ 30 playfield yıldız mesajı, (1 1/16 "kullanılmış)
  • 2 şerit kılavuzu
  • 2 adet flipper düğmesi yaprak anahtarı
  • 2 sapan takımı
  • 1 standup hedefi
  • 10 devir düğmesi
  • 8 LED # 44 süngü tarzı ışıklar
  • 8 bayonet tarzı ışık tutucu (Uzun Montaj Braketi ile Minyatür Bayonet Tabanı 2 Kurşun Soket)
  • 5 1-1 / 2 "x 13/16" mavi ok ucu
  • 3 1 "x 3/4" açık mermi eki
  • 6-32 cıvata (2,5 inç, hem de daha küçük boyutlarda), somun ve rondelalar
  • ~ 2 "geniş kapı anahtarı (burada olduğu gibi, bu bulmak zor olabilir, biz ebay satın alınan eski bir kırık langırt rampasından bizim hurdaya)

Adım 5: Rampa Oluşturma

Rampa yapmak için, taban parçaları için ¼ ”akrilik ve yan duvarlar için ⅛” akrilik kullanın. Şeffaf akrilik, oyuncu için oyun alanının görüntüsünü engellememekle birlikte güzel ve temiz bir görünüm verecektir. Renkli akrilik kullanmak da hoş görünümlü bir seçenek olabilir, ancak ahşap gibi tamamen opak bir malzeme kullanılması önerilmez.

Rampaların destekleri bir yapımcı kullanılarak 3B olarak basılır ve aynı 6-32 cıvataları kullanarak oyun alanına ve plastiğe cıvatalanır.

Buradaki akrilik parçalar, esas olarak plastiği eriten ve kaynak yapan bir çözücü olan akrilik çimento kullanılarak birbirine yapıştırılır. Küçük bir miktar kullandığınızdan emin olun, neredeyse görünmez olan çok güçlü bir bağ kurar.

Rampanın girişinde yukarıdaki resimde olduğu gibi bir rampa kapağı ekledik. Bu, langırt plastiğinin plastik "thickness" kalınlığını "atlaması" yerine, oyun alanından rampanın plastiğine çok yumuşak bir geçiş sağlayan ince bir metal parçasıdır. Bunlardan birini ucuza langırt uzmanlık dükkanından veya Ebay'den (yaptığımız) satın alabilir ya da sadece bir tane metal sacdan yapabilirsiniz. Ticari oyunlarda bunlar perçinlenir, böylece cıvatalar birbirine yapışmaz ve topun önüne geçemez. Bunu yapacak uygun donanıma sahip olmadığımızdan, aynı etkiyi elde etmek için düz uçlu vidaları kullandığımızdan ve plastikte ve metalde bir delik açtıktan emin olduk.

Rampanın sağ ön köşesindeki 3B desteklere bağlanmış ve oyun alanı boyunca döndüğü dar bir kapı anahtarı var. Bu anahtar, başarılı bir rampa vuruşu yapıldığında kaydedilen kayıtlardır.

İhtiyac duyulan malzemeler:

  • 1/4 "şeffaf akrilik (12x24" levha)
  • 1/2 "şeffaf akrilik (12x24" levha)
  • Akrilik çimento
  • 3D yazıcıya ve lazer kesiciye erişim
  • Rampa kapağı
  • Rampa kanadı için yassı başlı 6-32 cıvata
  • Oda matkap ucu veya el aleti
  • Dar geçit anahtarı

Adım 6: Elektronik Blok ve Pim Düzenini Planlayın

(Yazarın güncellemesi: Uzun süreli kullanımda, 48V bu konfigürasyondaki transistörlerin bazılarını patlatabilir. Bu elektroniklerde 35V veya daha düşük kullanmanızı veya burada listelenenler gibi daha profesyonel bir kontrol panosu kaynağı kullanmanızı öneririm: http: // pinballmakers .com / wiki / index.php / İnşaat)

Bu makine 3 voltaj seviyesine sahiptir: solenoid güç için 48V, LED'ler için 6.3V ve mantık ve ses için 5V. Bu voltaj seviyelerini sağlamak için, 48V için bir CNC güç kaynağı ve 6.3V ve 5V sağlamak için kullanıma hazır DC adaptörleri kullandık. (Arduino, besleme voltajını 5V çıkış pimine düşürdüğü için sadece 6.3V kullanmak mümkün olabilir, ancak bu güç kaynaklarını izole tuttuk). 48V, yüksek voltajdır ve kendi başına ölümcül olmasa da, parçalara zarar verebilir ve devrelerde sorun varsa bileşenlerin aşırı ısınmasına neden olabilir. Transistörlerden herhangi birinin kısa devre yapması durumunda yangının başlamasından kaçınmak için ana 48V güç kaynağının hem girişinde hem de çıkışında 5-A yavaş atan bir sigorta kullanın.

Arduino blendajında, üç alt panelin her birinin giriş ve çıkış gereksinimlerini karşılayan şekilde tasarlanmış dişi Molex konektörlere sahip kablolar ekledik: solenoid sürücü kartı, ışıklar / ses sürücüsü kartı ve giriş kartı.

Tasarımımızda aşağıdaki pin atamaları yapıldı. Bu, elbette, oldukça esnektir. Pin 0 açık bırakıldı. (Instructables, 0 ile başlayan sayı listelerini yapmamıza izin vermez.)

  1. Açık
  2. Açık
  3. Kesme / Giriş Aktif pin
  4. Kodlanmış giriş pimi
  5. Kodlanmış giriş pimi
  6. Kodlanmış giriş pimi
  7. Kodlanmış giriş pimi
  8. Kodlanmış giriş pimi
  9. Sağ tampon çıkışı
  10. Orta tampon çıkışı
  11. Sol tampon çıkışı
  12. Hedef çıktısını düşür
  13. Flipper ana şalter çıkışı
  14. Ana ışık anahtarı çıkışı
  15. Işık çıkışı pimi
  16. Işık çıkışı pimi
  17. Işık çıkışı pimi
  18. Ses çıkışı pin
  19. Açık

Tasarımımızda kullanılmamasına rağmen, SCL ve SDA pimleri bir ekran için kullanılabilir ve kalan pimler, özellikler (top dönüşü) veya daha fazla aydınlatma kombinasyonu ekleme gibi ek kontrol için kullanılabilir.

İhtiyac duyulan malzemeler:

  • 48V CNC güç kaynağı (bunun gibi)
  • Kullanıma hazır 6.3V ve 5V güç kaynakları (bunun gibi)
  • 5A yavaş atan sigortalar ve sigorta tutucular ve bağlantı için ısıyla daralan makaron
  • Molex konnektörleri
  • Arduino prototip kalkan kurulu
  • 22AWG tel bol, lehim ve sabır

Adım 7: Sürücü Kartlarını Yapın

Sürücü kartı girişleri Arduino'dan, kanatçık düğmelerinden ve sapan bobinleri ateşlemeye çevirmekten sorumludur. Sinyaller 5V seviyesinde ve solenoidler 48V'da olduğu için, sinyali iletmek için güçlü bir güç MOSFETS gerekir. Bu tasarımda kullanılan transistörler, Mouser'dan gelen bu 100V dereceli MOSFET'lerdir.

Yüzgeçleri, sapanları ve tamponları / düşürme hedeflerini içeren yukarıda gösterilen üç şema vardır. Her birinin biraz farklı gereksinimleri vardır, ancak hepsinde, transistöre 5V'luk bir sinyal verildiğinde, solenoid için bir akım yolu açılır ve güçlü bir tekme vermek için bobinden 5-8 amper itilir. Bu çok fazla akım! Aslında, bu kadar akım, eğer transistör çok kısa bir darbeden daha uzun süre tutulursa bileşenleri yakar. Bu devreyi yazılım veya başka yöntemler kullanarak test ederken, bir solenoidi yaklaşık bir saniyeden uzun bir süre boyunca asla tam olarak açmamak için emin olun.

Yukarıdaki devrelerdeki ana problem kaynağı endüktif vuruştur. Selenoidler güçlü indüktörlerdir ve bildiğiniz gibi, indükleyicilerdeki akım anında değişemez. Bu nedenle, transistör kapatıldığında, solenoid boyunca 5-8 amplerin aktığı ve mevcut tüm akımın bir yere gitmesi gereken kısa bir süre var. Toprağa bir yol verilmezse, bu akım transistörün drenajındaki gerilimi yüzlerce volta kadar boşaltır ve transistörü tahrip eder. Ayrıca, transistör tahrip edildiğinde, her üç terminale de kısa devre yapar, bu da sürekli akım amperinin akmasına neden olur ve uygun bir sigorta yoksa solenoidi tahrip edebilir. (Keşifimizdeki 8 transistörü tahrip ettik ve bu problemi çözme girişiminde bulunduk, ancak neyse ki solenoidler yok çünkü gücü el ile kesmek her zaman hızlıydı.)

İndüktif tekme yapmayı önlemenin iki yöntemi vardır: ilk olarak, her bir langırt takımı, transistörün boşalmasından tekrar beslemeye giden bir diyotla gelmelidir. Bu teorik olarak, transistör boşalmasının, besleme gerilimini aşmasını engellemelidir, bir kez olduğu gibi, diyot açılacak ve indüktörden kalan tüm enerjiyi boşaltacaktır. Ne yazık ki, gerçekte bu diyotlar tek başlarına, endüktif vuruşları tek başlarına bastırmak için yeterince hızlı açılmazlar.

Sorunu çözmek için bir RC "durdurucu" devresi ekledik. Bu devre, dirençli seri kondansatöre sahiptir. Kapasitör indüktörden yeterince akım emer, öyle ki diyot açılıp işlevini yerine getirecek zamana sahip olur. RC fren devreleri hakkında daha fazla bilgi için burayı kontrol edin.

Tampon / droptarget solenoid sürücü devresi oldukça basittir ve sadece transistör, solenoid, frenleme ve Arduino'dan girdi almak için bir bağlantıya sahiptir. Bu panoda ve sonraki panolarda, solenoidi diyotun (şematik gösterilmemiştir) yüksek voltaj tarafına bakacak şekilde bağladığınızdan emin olun.

Palet sürücü devresi üç nedenden dolayı biraz daha karmaşıktır. İlk olarak, tuşa basma ve çevirme hareketi arasında hızlı bir reaksiyon elde etmek için, bu cevabın Arduino tarafından kullanılan ayrı girişler ve çıkışlar yerine doğrudan devrede oluşturulması önerilir. Arduino'nun neden olduğu gecikme az, ancak deneyimli bir oyuncu derhal anlatabilecek ve kontrol eksikliği yüzünden sinirlenecek.

İkincisi, paletlerde, palet yüksek olduğunda tetikleyen iki farklı bobin (düşük güç ve yüksek güç bobini), strok sonu anahtarı bulunur. Bu anahtar, güçlü bir vuruş yapmak için başlangıçta yüksek güç bobininin ateşlenmesine izin vermek için önemli bir işlev görür, ancak yüzgeci 'yukarı' tutturmak için yeterli gücü sağlayan düşük güç bobinine (~ 130 ohm - 4 ohm) geçmek düğme yerleştirildiği sürece, ancak solenoidi yakacak kadar akım çekmez. Aşağıdaki resimde, EOS anahtarı normalde kapalıdır, ancak düzeneğimiz normalde açık bir anahtara sahipti ve bunu normalde kapalı bir sinyale dönüştürmek için başka bir transistör gerektiriyordu.

Üçüncüsü, tuşların doğrudan kumandalarını kontrol etmesini istediğimizde, Arduino'dan topun oyunda olup olmamasına bağlı olarak kanatları etkinleştirebilecek ya da devre dışı bırakabilecek bir "ana" anahtar sinyali de ekledik. Bu, devrede üçüncü transistörün kullanılmasıyla sonuçlanır.

Benzer şekilde, sapan tahtasının kendi komplikasyonları vardır. Sadece bir transistör kullanırken, kanatçıklar gibi doğrudan Arduino'da ek çıkış pinleri gerektirmemesinin yanı sıra hızlı bir yanıt için giriş anahtarları (seri olarak bağladığımız) ile doğrudan kontrol edilmelidir. Ne yazık ki, eğer transistör kapısı doğrudan anahtara bağlanırsa, anahtar çok uzun süre kapalı kalmadığından, yanıt ancak fark edilmeyen bir vuruştan daha fazlası için çok hızlıdır. Daha güçlü bir vuruş elde etmek için (yani, sapan solenoidinin "takip etmesini" sağlaması için), hızlı bir yanıt vermesine izin veren, ancak gerilim çürümesinin büyük bir zaman sabiti yaratan büyük bir direnç oluşturan bir diyot ve büyük bir direnç ekledik bu düğümde, kapı, sapma anahtarları yeniden açıldıktan sonra bile, gözle görülür bir tekme atmaya yetecek kadar uzun süre 5V'ye (ve transistör açık) yakın kalır. Diğer bir komplikasyon, bu girişi Arduino'ya göndermek, giriş panosunun (daha sonra göreceğimiz gibi) gerektirdiği gibi düşük girişler ve sapan bir giriş yüksek itildiğinde çalışır. Bu sorunu çözmek için, her iki giriş de yükseldiğinde kapanacak ve bu nedenle oyun alanındaki diğer herhangi bir giriş anahtarı gibi ele alınabilecek üçüncü bir transistör dahil ettik.

Sürücü kartı (aslında iki kart), iki adet palet sürücü, iki adet sapan sürücü ve geri kalan solenoitler için dört adet tek anahtarlı sürücüden oluşur. Doğrudan lehimleme yerine, bu kartı solenoidlere, güç kaynağına ve anahtarlara takmak için 0,1 ”molex konektörler kullandık, böylece herhangi bir onarım veya ayarlama daha kolay yapılabilirdi.

Tasarımlarımız için lehimlenebilir ekmek tahtaları kullandık, ancak gerçek PCB'lerin bu işlevlerle tasarlanması çok daha temiz bir sonuç doğuracak ve bu makinelerin kaçınılmaz olarak sahip oldukları tel karmaşasını hafifletmeye yardımcı olacaktır.

Malzemeler:

  • 12 100V dereceli güç transistörleri
  • 10-50 uF kondansatör (mümkünse kutupsuz)
  • 300, 5k ve 500k ve 3M dirençleri
  • Sapan anahtarı için 1 küçük transistör
  • Birkaç 1N4004 diyot
  • Prototip lehimlenebilir breadboard'lar (veya daha iyisi kendi PCB'lerinizi tasarlayın)

Adım 8: Sensör Giriş Kartını Yapın

Sadece bir Arduino kullandığımızdan, 20 dijital pin ile sınırlıdır. Bununla birlikte, langırt makinesi, ışıklar, ses ve sürüş solenoidleri için gereken çıkışlardan bahsetmeyen birkaç düzine benzersiz anahtar girişine sahiptir. Bu sorunu hafifletmek için, iki girişin bir seferde tetiklenmeyeceği varsayımına ulaştık (bu nedenle bizi sadece 1 top kullanarak sınırlandırıyoruz). Bu varsayım, anahtar girişlerini, geçerli bir anahtar girişi alındığında bir kesmeyi tetikleyen 6. pim ile 5 bitlik ikili bir kayıt listesine dönüştürerek "kodlamamızı" sağlar. Bunu başarmak için, yukarıdaki resimlerde gösterilen düzende bu kodlayıcıyı kullanarak 24'ten 5'e bir kodlayıcı yapmak için 8'e 3 kodlayıcı bir kaskad kullandık.

Bu, projemizin en önemli gelişmelerinden biriydi çünkü makinemizin karmaşıklığını büyük ölçüde artırmamıza izin verdi, çünkü sadece palet, tampon ve bir ya da iki hedefe sahip olma ilk planımızdan.

24 erkek Molex konektörünün her birini yerleştirmek için ikinci bir prototip kartı kullanıldı; Oyun alanındaki her anahtar, bu panele bağlanan uzun bir kablonun sonunda dişi bir konektöre sahip olacaktır. Düşme hedefleri, çeşitli şekillerde ele alınabilen benzersiz bir durumdur. Yaptığımız şey, her bir düşme hedefi anahtarını seri olarak kablolamaktı, böylece giriş tamamen kapalıyken kapandı ve Arduino'nun bırakma hedeflerini geri çekmek için solenoide bir sinyal göndermesine izin verdi.

Malzemeler:

  • 4 3 durumlu çıkış önceliği 8'e 3 enkoder

Adım 9: Işık / ses / puan Çevresel Kartını yapın

Pimleri kodlayıcıya benzer şekilde kaydetmek için, ışıklarımızı kontrol etmek için 3-8'lik bir kod çözücü kullandık. Bu bize, herhangi bir anda birden fazla ışık yakmamamızın sınırlandırılmasını sağladı, ancak diğer elemanlar için pimleri serbest bırakmak için kabul edilebilir bir tradeoff oldu. Ayrıca, tüm ışıkları bir kerede kontrol edebilecek 4. “master” ışık çıkışını da dahil ettik. Bu, örneğin oyun ilk defa açıldığında tüm ışıkları birkaç kez yakmamıza izin verebilir (oyuncuya aslında bir düğmeye basılması zor olan başlat düğmesine bastığında oyuncuya gerçekten bir şeyler olduğuna dair güçlü bir gösterge verir.) top yalak veya renkli ekran).

Yukarıdaki şematik, sürücülere benzer bir transistör devresine sahiptir, ancak oyundaki düşük voltajlar (ışıklar için 6.3V) daha küçük transistörlere ihtiyaç duyduğundan ve çok fazla koruma devresi gerektirmediğinden, çok basittir. Transistörler için ana anahtar sinyalini ve bireysel ışık sinyalini izole etmek için bir diyot OR geçidi kullandık. Bu, iki ışık yerine sadece bir transistör kullanmamıza izin veriyor ve Arduino ve enkoder çiplerinin ‘kavga etmelerini current kaynak akımını ya da batmasını engelliyor.

Oyun alanı ışıklarının her biri için (eklerin altındakiler) düşük akımlı LED'leri kullanırken, başlat düğmesi ve 3 adet pop tamponu her biri yaklaşık 250mA çeken akkor ampullerle geldi. Transistörler, 530mA sürekli akım için derecelendirilmiştir, bu nedenle bunu aşmamak için, sadece iki akkorun tek bir transistörden geçtiğinden emin olduk.

Ayrıca bu panoya ilkel sesleri çalmamızı sağlayan pasif bir 5V piezo zil taktık.

Özel ışık ve ses dizileri, light_sequence + sound_sequence işlevlerini veya Pinball Language arabirimi aracılığıyla programlanabilir.

  • 10 aydınlatma transistörü (bunları kullandık)
  • 5V Piezo zili

10. Adım: 11. Adım: Oyun Kurallarınızı Tasarlayın

Langırt oyununun kurallarını tanımlamak için iki seçenek vardır. Özelleştirilebilir bir langırt belgesi veya oyun kodu kuralları kullanarak oyunla etkileşime girebilirsiniz. Sabit kodlu oyun kuralları, sıralı çekimler ve zamanlanmış bonuslar dahil olmak üzere daha fazla esnekliğe izin verirken, langırt belge / ayrıştırıcı sistemi kullanıldığında daha esnek, ancak daha basit kurallar kullanılır. Yapılandırılabilir oyunun arayüzü ile başlayacağız ve sonra kodlanmış oyun kurallarının bazılarını ayrıntılarıyla açıklayacağız, böylece kendi langırt oyununuz için istediğiniz konfigürasyonu seçebilirsiniz.

Bu projede başvurulan dosyalar için buradaki github deposuna bakın.

Bölüm 1. Oyun kurallarınızı tasarlayın

Bir langırt oyunu için varsayılan durum makinesi resimde verilmiştir.

Bu, varsayılan başlangıç ​​kodunda verilmiştir. Şimdi iki seçeneğiniz var - ya makine için kendi kodunuzu yazın ya da langırt oyunu için belirtilen biçimlendirmeyi kullanın.

Adım 11: Seçenek 1. Kendi Pinball.txt Dosyanızı Yazın

Pinball-text belgesinde üç bölüm bulunur: biri bölümler, biri “durumlar” diğeri “eylemler” için. Burada, her bir bileşen için belirli eylemleri tanımlayabilirsiniz. Çoğu bileşen için, muhtemelen bir devlet devlet makinesine bağlı kalmak isteyeceksiniz. Örneğin, bir çarpışmaya her çarpıldığında, oyuncu 100 puan daha kazanmalı, bir rampa lambasını yakmalı ve 100 puan almalı, o zaman durum şeması karşılık gelen kodla Şekil 1'e benzeyecektir. Bir bileşenin çok durumlu bir durum makinesine sahip olmasını istiyorsanız, diyelim ki, bir tampon çarptığında ışığın açılmasını ve ardından tekrar vurulduğunda kapanmasını istediğinizde, durum diyagramınız / karşılık gelen durumlar Şekil 2'ye benzeyecektir. Özel makinemiz, kuralları tanımlayabileceğiniz Şekil 3'teki gibi yapıları sağlar. İsimleri, iç kodlanmış makrolar (endişelenmenize gerek yok ancak kaynak kodu incelemeye karar verirseniz faydalı olabilirler) ve kesme kodları Şekil 3'te verilmiştir. Şekil 4 bu adları oyun alanı bileşenlerine bağlar.

Langırt oyunu yazmak için ipuçları
Oyun bileşenleri, donanım tarafından tanımlanan belirli kesintilere (“pos” alanıyla belirtilir) bağlı olduğu için, “durumlar” alanının çok dışında “parçalar” bölümünü değiştirmenizi önermiyoruz. start düğmesi ve oyun düğmesi gibi puanlama üzerinde etkisi olmayan bileşenler için 0 durumunu ve 0 eylemini saklı tutar. Kodumuz Şekil 5'te gösterildiği gibi görünüyor.

Adım 12: Işık ve Ses Sıralarını Tanımlayın

Tahtadaki sekiz ışık, daha önce tarif edildiği gibi 3-8 dekoder + bir ana anahtar kullanılarak kontrol edilir. Yüksek parça kodunun ikili kodlanmış sürümüne karşılık gelen pimler yazılarak belirli ışıklar yanabilir. Light_sequence yardımcı işlevi, kullanıcının aydınlatmak istediği ışığı belirtmesi için bir arabirim sağlar ve makrolar state_machine_headers.h belgesinde tanımlanır. Programlama rahatlığınız için bir tablo daha sağlanmıştır. Ses gelince, çeşitli oyun etkinlikleri için kısa ses dizileri programlamak için Arduino ton kütüphanesini kullandık. Seçebileceğiniz önceden oluşturulmuş dört sesimiz var (executeSound kullanarak (<istediğiniz ses sayısı>)). Bu sesler uzun, neşeli bir diziye, kısa neşeli bir diziye, kısa üzgün bir diziye ve uzun üzgün bir diziye karşılık gelir. Kendi seslerinizi programlamak istiyorsanız, bunun nasıl yapılacağını burada bulabilirsiniz (pitch.h depoya dahil edilmiştir): http://www.arduino.cc/en/Reference/Tone

Adım 13: Pinball.txt Dosyasını Arduino'ya Yükleyin

FSM'yi yazdıktan sonra, oyununuzu Arduino'nuza nasıl yükleyeceğiniz (Mac'i kullandığınızı varsayıyoruz). Tüm dosyalar github deposunda bulunabilir.

  1. Arduino-seri zip dosyasını çıkartın.
  2. Arduino-seri dosyasına gidin ve oyun yapılandırma dosyanızı buraya kaydedin. “Pinball.txt”, kullanabileceğiniz örnek bir şablon sunar.
  3. Arduino'yu açın. Langırt oyunu taslağını yükleyin.
  4. Terminali açın ve aşağıdaki komutları yazın:
    • Yapmak
    • ./arduino-serial -b 9600 -p langırt.txt
  5. Şimdi, Arduino’nun dahili hafızasına veri okuyor ve saklıyor olmalıyız. Herhangi bir hatalı biçimlendirilmiş satır varsa, Arduino bir hata mesajı yazdırır ve dosyayı yeniden göndermeyi seçebilirsiniz.
  6. Kodu terminali kullanarak yüklemeyi tamamladığınızda, örneğin Arduino “bitti” mesajı bastığında, devam eden oyundaki mesajları okumak için Arduino Serisini açabilirsiniz.

Yazılım oyunu için ortak problemler / optimizasyonlar

  1. Sabit kodlu ve yapılandırılabilir oyunlar - Sabit kodlu oyundaki kesintilerin özelleştirilebilir oyundan çok daha doğru tepki verdiğini fark ettik. Bunun nedeni, kişiselleştirilebilir oyunun şartlı ifadeler gerektiren birçok genel amaçlı fonksiyona sahip olmasıdır. Bu, döngünün okuma hızını yavaşlattı; bu da birkaç kesintiyi kaçırmamıza neden oldu ve oyunun genel çalışma hızını etkiledi. Bu sorunu çözmek için, devrede kabul edilebilir yanıt süreleri elde etmek için config dosya oyununun özelleştirilebilirliğini azalttık. Aslında Arduino’nun RAM kapasitesi ve oyun kurallarının ne kadarının depolanabileceği konusunda endişelerimiz vardı, ancak bu durum başlangıçta beklenenden daha az problem oluşturuyordu ve bu, sınırlayıcı faktör olan devir hızını oluşturuyordu.
  2. Kesintileri durdurma - langırt oyununun hızlı hareketleri nedeniyle, kesme piminin sadece bir oyun bileşenine çarpan langırt için birkaç kesilme aldığı birkaç durum vardı. Ek olarak, bu kesintiler kodlayıcı tüm girdileri doğru bir şekilde okumaya zaman vermeden önce alındığından, kesintiler yanlış bileşenlere bağlanacaktır. Bu sorunu çözmek için, ilk kesinti alındıktan sonra 1ms yanıt veren ve oyun giriş kodunu okumadan önce kodlayıcı pimlerinin yükseklere ulaşması için zaman veren harici bir harici kitaplık kullandık.
  3. Ekran - Seri ekran oyunun ayrıntılı mesajları yazdırmasına izin vermesine rağmen, bir oyuncunun hızlı tempolu bir langırt oyunu oynarken çıktı mesajlarını okuması zordur. Ayrıca, oyuncunun, bilgisayarı bağlı bir bilgisayarla oynaması zor bir durum. Gelecekte, bir LED matrisi veya 7 segmentli bir ekran gibi kullanıcının kolayca görebileceği bir ekranda skoru ve diğer oyun bilgilerini görüntüleyebilen bir dijital ekran kullanmayı umuyoruz.

Adım 14: Seçenek 2: Kendi Oyununu Kodlama Önerileri

İlk olarak, durum makinesi hakkında bilgi depolayan global veri yapılarını anlamak için state_machine_headers.h belgesini okuyun. Arduino koduna yüklemeden önce bu veri yapılarını Arduino IDE içindeki oyun kurallarınıza göre başlatmalısınız. Aşağıdaki veri yapıları sağlanmıştır:

Her bölüm hakkında bilgi sahibi olacak oyun yapıları Durum geçişleri hakkında bilgi sahibi olma Durumları Yürütülecek eylemler hakkında bilgi tutma eylemleri Bu yapılar okuma dosyası tarafından doldurulur. Tüm pinler için giriş / çıkışları tanımlayın. Kesme pimleri INPUT pimleri olarak tanımlanmalıdır.

Ana döngü içinde, her oyun bileşeni için bir kesme işleminin başlatılıp başlatılmadığını görmek için her bir döngüyü kontrol edin. Bir switch ifadesinde her oyun bileşenini tanımlayın.

Yardımcı fonksiyon executeState, parçanın mevcut durumunu günceller ve kodlanmış bilgilere dayanarak eylemler gerçekleştirir.

Oyun kodunun kodlanmış ilk sürümü “simplepinballgame.ino” dosyasında bulunabilir.

Adım 15: Herşeyi Bağlayın

Arduino'yu sürücü kartlarımızla arayüzlemek için, diğer kartlardaki pinlere daha kolay erişmek için bir koruyucu kullandık. Çok fazla kablo var, bu yüzden dikkatli olun! Arduino çıkışlarınızı ilgili pimlere bağlamak için Elektronik Pimler ve Düzen bölümünde verilen düzeni izleyin. Molex konektörleri, hangi konektörlerin hangilerine bağlandığını bulmakta çok yardımcı olmalıdır.

İşte yaptığımız genel sorunlardan herhangi biriyle karşılaşmanız durumunda kısa bir sorun giderme hakkında SSS:

Giriş kodlayıcısının doğası, birlikte hangi girişin tetiklendiğini gösteren Arduino: 5 içine 6 giriş pini ve herhangi bir giriş tetiklenirse yüksek olan 6. pimin olmasıdır. Yazılan kod yalnızca bu altıncı pimin alçaktan yükseğe doğru değiştiğini algılar. Arduino herhangi bir giriş almıyorsa ve anahtarların hepsinin veya en azından birçoğunun çalıştığından eminseniz, herhangi bir anahtarın kapalı olup olmadığını kontrol edin. Örneğin, tüm bırakma hedefleri aşağıdaysa ve geri alınmazsa, bu kapalı bir anahtardır ve Arduino'nun başka herhangi bir girdi almasını önler.

Atıcıyı yerinde tutan somunun tamamen sıkıldığından veya atıcı bloğunun gevşek olmadığından emin olun. Alternatif olarak, atıcı çubuğunu yağlayın.

Anahtarlar çok geniş bir şeritte yerleştirilirse topun 'etrafından dolaşmasına' izin verirse, bu mekanik / tasarım problemi olabilir. Aksi takdirde, kodda bir yerde çok uzun bir gecikmenin sonucu olabilir. Örneğin, ton kütüphanesini ve bir delay () ifadesini kullanarak bir ton çalmakla meşgulseniz, Arduino bu süre zarfında girişleri alamaz. Kullandığımız bir geçici çözüm, yeni bir girişin tetiklenmesinden önce bu çekimden sonra ne kadar zaman geçireceğimizi bildiğimiz için yalnızca rampa atışı, standup hedefi, başlama düğmesi ve oyun sonu düğmesi için ses çalmaktı. .

Kuşkusuz, belirli ışıklar veya belirli solenoidler için belirli başlıklar belirlemedik, bu da her şeyi ilk taktığınızda (veya bir şekilde etiketlemezseniz sonraki sürelerde), çıkış pinlerinin (veya çıkış ışık kodlamasının) bağlandığı anlamına gelir. keyfi düzen. Hangi pinlerin hangi çıkışa karşılık geldiğini ve kodu buna göre ayarlamak için deneme-yanılma komutunu kullanın. Işıklar ve tamponlar için, bu o kadar da kötü değil - ama kesinlikle tüm girişleri etiketleyin ve bu işlemin 24 değere kadar alabileceği ve kalibre edilmesi biraz zaman alacağı için yazmayı kesin olarak yazın.

Enkoder, 5 enkoder pimleri değerlerini tam olarak çözmeden önce gösterge pimini yüksek şekilde atma talihsiz bir özelliğe sahiptir. Bizim için bunun, basılan anahtarın sayısı birer birer kapalıyken meydana geldiğini biliyorduk, ancak sizin için farklı şekilde görünebilir. Bu sorunu, bir anahtarlamanın değiştiğini fark ettiğimizde ve hangi anahtarın olduğunu kaydettikten sonra arasında bir miktar gecikme oluşturmak için ayrılan bir kütüphane kullanarak çözdük. Dikkatli, ancak, çok fazla bir gecikme (15-20mS'den fazla) girişleri tamamen kaçırmanıza neden olabilir.

Üzgünüz, ama bunun için henüz iyi bir çözüm bulamadık.