İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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
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
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
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
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
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
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
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)); }