Kazalo:

Arduino: Pinball Machine: 8 korakov (s slikami)
Arduino: Pinball Machine: 8 korakov (s slikami)

Video: Arduino: Pinball Machine: 8 korakov (s slikami)

Video: Arduino: Pinball Machine: 8 korakov (s slikami)
Video: Innovation & Implementation - S1E5| Cool DIY Game Gadgets 2024, November
Anonim
Image
Image

Ker sem imel vedno rad tako flipere kot elektroniko, sem se odločil, da bom zgradil svoj fliper. Za programiranje in elektroniko sem se odločil za Arduino, ker je zelo dostopna platforma, ki je hkrati kompaktna in enostavna za uporabo.

V tem priročniku bom razložil svoj razvojni proces, zato bi morda kdo od vas navdušenih lahko ustvaril nekaj podobnega.

1. korak: Izdelava primera

Gradnja primera
Gradnja primera

Začnimo z ohišjem fliperja. Naredil sem dokaj preprosto konstrukcijo. Odrezal sem spodnjo ploščo in uporabil 4 drobne lesene stebre v vogalih za povezavo stenskih kosov. Velikost vašega ohišja je vaša lastna izbira, odločil sem se, da bo nekoliko manjši od originalnega fliperja, saj nisem nameraval dodati nobenih super spektakularnih dodatkov, ki bi zapolnili prostor. Uporabil sem oba vijaka in lepilo, da je ohišje čim bolj stabilno. Na hrbtni strani sem izvrtal dve luknji v kosu za dve nogi, ki bosta fliperju dala ikonični nagib. Še enkrat, višina nog je odvisna od vas. Čim višje naredite noge, hitreje se bo žogica kotalila (navzdol).

Korak 2: Izdelava mehanika Flipperja

Izdelava mehanika Flipper
Izdelava mehanika Flipper

Ker sem hotel omejiti stroške tega projekta, sem se odločil, da bom namesto elektronskih izdelal popolnoma mehanske plavuti. Če vas zanimajo elektronske plavuti, lahko uporabite konstrukcijo, ki je nekoliko enaka, vendar s tako imenovanim "solenoidom" (solenoidi z dovolj moči za nadzor plavuti so bili zame predragi).

Začel sem z vrtanjem dveh lukenj na dnu za vrtilno točko obeh plavuti. Luknje sem (po mojem mnenju) preblizu drug drugemu naredil, zaradi česar je bila igra na koncu nekoliko preveč enostavna. Zato pazite, da plavuti ne postavljate preblizu drug drugemu, razen če želite enostaven slog igranja.

Prav tako sem izvrtal dve luknji v obeh stranskih stenah vzporedno z luknjami za plavuti. Te luknje je treba uporabiti za dva gumba na pladnju.

Z vzmetmi sem potegnil plavuti nazaj v prvotni položaj in med plavuti in gumbi naredil vrtljivo konstrukcijo, da so se vrtile, ko pritisnemo gumbe. Da bi preprečili, da bi vzmeti preveč potegnile plavuti, sem privijal dva vijaka, s katerim sta plavuti držala v prvotnem položaju.

3. korak: Polaganje sten

Polaganje sten
Polaganje sten

Postavil sem nekaj sten, da sem fliper preusmeril proti plavuti. Izdelati jih je zelo preprosto. Preprosto izvrtajte 3 luknje na dnu ohišja in potisnite tri lesene zatiče. Okoli zatičev zavijte gumijasti trak in končali ste.

4. korak: Dodajanje točkovnih blokov

Dodajanje točkovnih blokov
Dodajanje točkovnih blokov
Dodajanje točkovnih blokov
Dodajanje točkovnih blokov

Kocke so eden najpomembnejših delov fliperja, zato poskrbite, da boste ta del izvedli pravilno. Za svoj fliper sem naredil tri bloke, a spet je vse odvisno od vas.

Odsekal sem majhen kos metle in okoli njega zavil bakreno žico. Arduino bo to bakreno žico nenehno napajal s 5V. Za boljši stik z žogico sem ob strani spajkala štiri vzmeti za pero.

Način delovanja blokov partiture je, da žoga zaključi vezje, ki vodi do vhodnega zatiča na Arduinu. Torej sem naredil lepilno aluminijasto folijo na dno ohišja (NE DOTIKAJ SE BAKRA) in folijo povezal z zatičem na Arduinu. Kadarkoli žoga zadene tako baker kot aluminij, je vezje končano in Arduino bo prejel signal.

Vse rezalne bloke sem povezal z aluminijasto folijo, vendar ne pozabite, da lepljiva stran NE prevaja elektrike.

5. korak: Dodajanje igre čez stik

Dodajanje igre čez stik
Dodajanje igre čez stik

Na dnu fliperja, med plavuti, sem dodal igro nad stikom. Ko žoga zadene ta stik, igralec izgubi žogo. Konstrukcija, ki sem jo naredil, je zelo podobna rezalnim blokom. Le tu sem uporabil dva vijaka, na dnu pa spet kos aluminijaste folije.

6. korak: Vrtanje lukenj za kable

Vrtanje kabelskih lukenj
Vrtanje kabelskih lukenj
Vrtanje kabelskih lukenj
Vrtanje kabelskih lukenj
Vrtanje kabelskih lukenj
Vrtanje kabelskih lukenj

Preden začnemo ožičenje vse do Arduina, moramo najprej izvrtati nekaj lukenj za kable. V obeh kosih aluminijaste folije sem izvrtal luknjo, tako da je ena luknja v aluminijasti foliji blizu blokov in ena luknja v aluminijasti foliji v bližini igre nad stikom.

Poleg tega sem spodaj levo, med stenami, izvrtal tudi luknjo za kabel, ki vodi do dodatnih krogelnih vrat Servo.

Spodaj mora biti tudi luknja za kabel, priključen na LCD.

7. korak: Ožičite vse

Ožičenje vsega navzgor
Ožičenje vsega navzgor
Ožičenje vsega navzgor
Ožičenje vsega navzgor

To shemo sem naredil za boljši pregled, kam naj gredo vsi kabli. Križi so točke, kjer se kabli povežejo. Poskušal sem čim bolj spajkati, da bi bilo vse nekoliko bolj stabilno in zanesljivo. Ožičenje bo trajalo nekaj časa, a potem, ko ste to naredili, ste že skoraj tam!

8. korak: nalaganje kode

Naložite naslednjo kodo v svoj Arduino, da bo vaš fliper zaživel!

// Vključi knjižnico za lcd

#include #include

// Inicializiramo podatkovne nožice lcd

LCD tekoči kristal (7, 8, 9, 10, 11, 12);

// Ustvarite servo

Servo ballGateServo;

// Ustvarjamo spremenljivke za zatiče, ki jih uporabljamo

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

// Inicializirajte spremenljivke igranja za fliper

int rezultat = 0; int najvišji rezultat = 500; bool highscoreReached = false; int kroglice = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// to kodo zaženite enkrat pri prvem okvirju

void setup () {// Nastavite pinMode za nožice, ki jih uporabljamo pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicializirajte lcd tako, da določite širino in višino

lcd.begin (16, 2);

// Servo krogličnih vrat pritrdite na ustrezen zatič

ballGateServo.attach (ballGateServoPin);

// Ponastavite servo vrata na začetni položaj

ballGateServo.write (0); }

// Zaženi to kodo za vsak okvir

void loop () {// Zajem pin vhodov int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Če je vnos vnešen, dodajte oceni

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

// Odštejemo od žog, če se sproži igralna jama

if (gameoverState in! gameoverTriggered) {žogice -= 1; gameoverTriggered = res; gameoverTimer = gameoverTimerDuration; }

// Zaženite časovnik za prehod igre, takoj ko se žogica ne dotakne stika za prehod igre

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

// Besedilo o igri prestavite na lcd in ponastavite rezultat in žogice

if (žoge <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); zamuda (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Poskusi znova?"); zamuda (250); } lcd.clear (); rezultat = 0; ballGateServo.write (0); highscoreReached = false; kroglice = 3; }

if (score> highscore and! highscoreReached) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); zamuda (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Nenadna smrt!"); zamuda (250); } lcd.clear (); kroglice = 1; ballGateServo.write (120); rezultat = rezultat; highscoreReached = res; }

// Posodobite rezultat, če je trenutni rezultat višji

if (rezultat> najvišji rezultat) {vrhunski rezultat = rezultat; }

// kurzor nastavimo na vrstico 0

lcd.setCursor (0, 0); // Natisni trenutno (visoko) oceno na lcd if (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Score:" + String (score) + ""); }

// kurzor nastavimo na 1. vrstico

lcd.setCursor (0, 1);

// Natisnite trenutno količino kroglic na lcd

lcd.print ("Kroglice:" + niz (kroglice)); }

Priporočena: