Spisu treści:

Arduino: Pinball Machine: 8 kroków (ze zdjęciami)
Arduino: Pinball Machine: 8 kroków (ze zdjęciami)

Wideo: Arduino: Pinball Machine: 8 kroków (ze zdjęciami)

Wideo: Arduino: Pinball Machine: 8 kroków (ze zdjęciami)
Wideo: Магнитные ускорители | Magnetic Games 2024, Czerwiec
Anonim
Image
Image

Ponieważ zawsze kochałem zarówno flippery, jak i elektronikę, postanowiłem zbudować własną maszynę do pinballa. Wybrałem Arduino do programowania i elektroniki, ponieważ jest to wysoce dostępna platforma, która jest zarówno kompaktowa, jak i łatwa w użyciu.

W tym poradniku wyjaśnię mój proces rozwoju, więc być może któryś z Was entuzjastów mógłby stworzyć coś podobnego.

Krok 1: Budowanie sprawy

Budowanie sprawy
Budowanie sprawy

Zacznijmy od przypadku automatu do pinballa. Zrobiłem dość prostą konstrukcję. Odpiłowałem dolną płytę i użyłem 4 małych drewnianych słupków w rogach do połączenia kawałków ściany. Rozmiar twojego futerału to twój własny wybór, postanowiłem, że będzie nieco mniejszy niż oryginalna maszyna do pinballa, ponieważ nie planowałem dodawać żadnych super spektakularnych dodatków, aby wypełnić przestrzeń. Użyłem zarówno śrub, jak i kleju, aby obudowa była jak najbardziej stabilna. Z tyłu wywierciłem dwa otwory w podłodze na dwie nogi, które nadadzą pinballowi kultowe przechylenie. Ponownie, wysokość nóg zależy od Ciebie. Im wyższe nogi, tym szybciej piłka będzie się toczyć (w dół).

Krok 2: Konstruowanie mechaniki płetw

Konstruowanie mechaniki płetw
Konstruowanie mechaniki płetw

Chcąc ograniczyć koszt tego projektu, zdecydowałem się na wykonanie w pełni mechanicznych płetw zamiast elektronicznych. Jeśli interesujesz się płetwami elektronicznymi, możesz użyć konstrukcji, która jest trochę taka sama, ale z podłączonym do niej tzw. solenoidem (elektromagnesy o mocy wystarczającej do sterowania płetwami były dla mnie za drogie).

Zacząłem od wywiercenia w dnie dwóch otworów na punkt obrotu obu płetw. Wywierciłem dziury (moim zdaniem) trochę zbyt blisko siebie, przez co gra okazała się zbyt łatwa. Uważaj więc, aby nie umieszczać płetw zbyt blisko siebie, chyba że chcesz mieć łatwy styl gry.

Wywierciłem też po dwa otwory w obu ściankach bocznych równolegle do otworów płetwy. Te otwory są przeznaczone na dwa przyciski flippera.

Użyłem sprężyn, aby wciągnąć płetwy z powrotem do pierwotnej pozycji i stworzyłem obrotową konstrukcję między płetwami a przyciskami, aby obracały się, gdy przyciski są wciskane. Aby powstrzymać sprężyny przed odciąganiem płetw zbyt daleko, umieściłem dwie śruby, aby utrzymać płetwy w ich pierwotnej pozycji.

Krok 3: Umieszczanie ścian

Umieszczanie murów
Umieszczanie murów

Umieściłem kilka ścian, aby skierować pinball w stronę płetw. Są bardzo proste w wykonaniu. Wystarczy wywiercić 3 otwory w dolnej części obudowy i wcisnąć trzy drewniane kołki. Owiń szpilki gumką i gotowe.

Krok 4: Dodawanie bloków punktacji

Dodawanie bloków punktacji
Dodawanie bloków punktacji
Dodawanie bloków punktacji
Dodawanie bloków punktacji

Bloki punktacji są jedną z najważniejszych części flippera, więc upewnij się, że wykonałeś tę część poprawnie. Zrobiłem trzy bloki punktacji dla mojej maszyny do pinballa, ale znowu wszystko zależy od ciebie.

Odpiłowałem mały kawałek miotły i owinąłem go miedzianym drutem. Arduino będzie stale zasilać ten miedziany przewód napięciem 5V. Z boku przylutowałem cztery sprężynki do pióra, aby uzyskać lepszy kontakt z kulką.

Sposób, w jaki działają bloki punktacji, polega na tym, że piłka uzupełnia obwód, który prowadzi do pinu wejściowego w Arduino. Więc to, co zrobiłem, to przykleić folię aluminiową na spodzie obudowy (NIE DOTYKAJĄC MIEDZI) i podłączyć folię do szpilki w Arduino. Za każdym razem, gdy kulka uderza zarówno w miedź, jak i aluminium, obwód jest kompletny i Arduino otrzyma sygnał.

Połączyłem wszystkie bloki punktowe razem za pomocą folii aluminiowej, ale pamiętaj, że lepka strona NIE przewodzi prądu.

Krok 5: Dodawanie gry przez kontakt

Dodawanie gry przez kontakt
Dodawanie gry przez kontakt

Na dole automatu do pinballa, pomiędzy flipperami, dodałem grę przez kontakt. Za każdym razem, gdy piłka uderza w ten kontakt, gracz traci piłkę. Konstrukcja, którą wykonałem, jest bardzo podobna do bloków punktacji. Tylko tutaj użyłem dwóch śrubek i znowu kawałek folii aluminiowej na spodzie.

Krok 6: Wiercenie otworów na kable

Wiercenie otworów na kable
Wiercenie otworów na kable
Wiercenie otworów na kable
Wiercenie otworów na kable
Wiercenie otworów na kable
Wiercenie otworów na kable

Zanim zaczniemy podłączać wszystko do Arduino, musimy najpierw wywiercić kilka otworów na kable. Wywierciłem otwór w obu kawałkach folii aluminiowej, więc jeden otwór w folii aluminiowej w pobliżu bloków punktacji i jeden otwór w folii aluminiowej w pobliżu kontaktu z grą.

Poza tym wywierciłem również otwór w lewym dolnym rogu, między ścianami, na kabel prowadzący do dodatkowej bramki kulowej Servo.

W dolnej części powinien znajdować się otwór na kabel podłączony do wyświetlacza LCD.

Krok 7: Okablowanie wszystkiego

Okablowanie wszystkiego
Okablowanie wszystkiego
Okablowanie wszystkiego
Okablowanie wszystkiego

Zrobiłem ten schemat, aby mieć lepszy przegląd tego, gdzie powinny iść wszystkie kable. Krzyżyki to miejsca, w których łączą się kable. Starałem się lutować jak najwięcej, aby wszystko było bardziej stabilne i niezawodne. Okablowanie zajmie trochę czasu, ale po wykonaniu tej czynności jesteś prawie na miejscu!

Krok 8: Przesyłanie kodu

Prześlij poniższy kod do swojego Arduino, aby ożywić swój automat do pinballa!

// Dołącz bibliotekę do lcd

#włącz #włącz

// Zainicjuj piny danych lcd

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

// Utwórz serwo

Kula serwoGateServo;

// Utwórz zmienne dla pinów, których używamy

int gameoverPin = 6; int wynikPin = 5; wewn głośnikPin = 4; int ballGateServoPin = 3;

// Zainicjuj zmienne rozgrywki dla automatu do gry w pinball

wynik wewnętrzny = 0; int wysoki wynik = 500; bool highscoreReached = false; kulki wewnętrzne = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

//uruchom ten kod raz w pierwszej klatce

void setup() { // Ustaw tryb pinMode dla pinów, których używamy pinMode(gameoverPin, INPUT); pinMode(scorePin, INPUT);

// Zainicjuj lcd, podając szerokość i wysokość

lcd.początek(16, 2);

// Przymocuj serwo bramki kulowej do odpowiedniego kołka

ballGateServo.attach(ballGateServoPin);

// Zresetuj serwo bramy do pozycji wyjściowej

ballGateServo.write(0); }

// Uruchom ten kod w każdej klatce

void loop() { // Przechwytywanie pinów wejściowych int gameoverState = digitalRead(gameoverPin); int wynikState = digitalRead(scorePin);

// Dodaj do wyniku, jeśli odebrano dane wejściowe

if (scoreState) { ton(speakerPin, 1000); wynik += 10; } inny { noTone(4); }

// Odejmij od piłek, jeśli zostanie uruchomiony dół gry

if (gameoverState i !gameoverTriggered) { kule -= 1; gameoverTriggered = prawda; gameoverTimer = gameoverTimerCzas trwania; }

// Uruchom licznik czasu gry, gdy tylko piłka nie dotknie kontaktu z końcem gry

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

// Przekieruj tekst zakończenia gry na wyświetlacz LCD i zresetuj wynik i piłki

if (kulki <= 0) { lcd.setCursor(0, 0); for (int i = 5; i>= 1; i--) { lcd.clear(); opóźnienie(250); lcd.print("KONIEC GRY"); lcd.setCursor(0, 1); lcd.print("Spróbuj ponownie?"); opóźnienie(250); } lcd.clear(); wynik = 0; ballGateServo.write(0); wynik Osiągnięto = fałsz; kulki = 3; }

if (score > highscore i !highscoreReached) {

lcd.setCursor(0, 0); for (int i = 5; i >= 1; i--) { lcd.clear(); opóźnienie(250); lcd.print("NOWY WYNIK"); lcd.setCursor(0, 1); lcd.print("Nagła śmierć!"); opóźnienie(250); } lcd.clear(); kulki = 1; ballGateServo.write(120); wynik = wynik; wynik Osiągnięto = prawda; }

// Zaktualizuj najlepszy wynik, jeśli obecny wynik jest wyższy

if (wynik > wynik) { wynik = wynik; }

// Ustaw kursor na linii 0

lcd.setCursor(0, 0); // Wydrukuj bieżący (najwyższy) wynik na ekranie LCD if (score <= 0) { lcd.print("Highscore: " + String(highscore) + " "); } else { lcd.print("Wynik: " + String(wynik) + " "); }

// Ustaw kursor na linii 1

lcd.setCursor(0, 1);

// Wydrukuj aktualną ilość kulek na lcd

lcd.print("Kulki: " + String(kulki)); }

Zalecana: