Tartalomjegyzék:

Arduino: Pinball gép: 8 lépés (képekkel)
Arduino: Pinball gép: 8 lépés (képekkel)

Videó: Arduino: Pinball gép: 8 lépés (képekkel)

Videó: Arduino: Pinball gép: 8 lépés (képekkel)
Videó: It Became Unliveable! ~ Abandoned Home Of The Spenser's In The USA 2024, Június
Anonim
Image
Image

Mivel mindig is szerettem a flippergépeket és az elektronikát, úgy döntöttem, hogy saját flippergépet építek. A programozáshoz és az elektronikához az Arduino -t választottam, mert ez egy könnyen hozzáférhető platform, amely egyszerre kompakt és könnyen használható.

Ebben az útmutatóban elmagyarázom a fejlesztési folyamatomat, így talán valamelyik rajongótok valami hasonlót alkothat.

1. lépés: A tok építése

A tok építése
A tok építése

Kezdjük a flipper gépével. Elég egyszerű konstrukciót készítettem. Fűrészeltem egy alsó lemezt, és 4 apró faoszlopot használtam a sarkokban a falrészek összekapcsolásához. A tok mérete az Ön választása, én úgy döntöttem, hogy egy kicsit kisebb lesz, mint egy eredeti flipper gép, mivel nem terveztem szuper látványos extrákat hozzáadni a hely betöltéséhez. Mind a csavarokat, mind a ragasztót használtam, hogy a tokot a lehető legstabilabbá tegyem. Hátul két lyukat fúrtam a padlóba a két lábhoz, amelyek a flippergép ikonikus dőlését adják. Ismétlem, a lábak magassága rajtad múlik. Minél magasabbra teszi a lábát, annál gyorsabban gurul a labda (lefelé).

2. lépés: A Flipper Mechanic építése

A Flipper szerelő építése
A Flipper szerelő építése

Mivel korlátozni akartam ennek a projektnek a költségeit, úgy döntöttem, hogy teljesen mechanikus szárnyasokat készítek elektronikus helyett. Ha érdekli az elektronikus leporelló, akkor használhat egy hasonló konstrukciót, de úgynevezett „mágnesszeleppel” van összekötve (a mágnestekercsek, amelyek elegendő erővel rendelkeznek a lepkék vezérléséhez, túl drágák voltak számomra).

Kezdtem azzal, hogy két lyukat fúrtam az aljába mindkét szárnyas forgópontjához. Kicsit túl közel fúrtam egymáshoz a lyukakat (véleményem szerint), és emiatt a játék kicsit túl könnyű lett a végén. Vigyázzon tehát, hogy ne tegye túl közel egymáshoz a lepényeket, hacsak nem könnyű játékstílusra vágyik.

Mindkét oldalfalban két lyukat fúrtam a párnázott lyukakkal párhuzamosan. Ezeket a lyukakat a két flipper gombhoz kell használni.

Rugókkal húztam vissza a szárnyasokat az eredeti helyzetükbe, és forgatható szerkezetet készítettem a szárnyasok és a gombok között, hogy elforduljanak a gombok megnyomásakor. Annak érdekében, hogy a rugók ne húzhassák túl messzire a leporellókat, két csavart helyeztem el, amelyek a szárnyasokat eredeti helyzetükben tartják.

3. lépés: A falak elhelyezése

A falak elhelyezése
A falak elhelyezése

Pár falat helyeztem el, hogy a flipper a flipper felé irányuljon. Elkészítése nagyon egyszerű. Egyszerűen fúrjon 3 lyukat a tok aljába, és toljon be három facsapot. Tekerj egy gumiszalagot a csapok köré, és kész.

4. lépés: A pontozási blokkok hozzáadása

A pontozási blokkok hozzáadása
A pontozási blokkok hozzáadása
A pontozási blokkok hozzáadása
A pontozási blokkok hozzáadása

A pontozási blokkok a flippergép egyik legfontosabb része, ezért győződjön meg róla, hogy ezt a részt helyesen végzi. Három blokkot készítettem a flippergépemhez, de ez ismét csak rajtad múlik.

Levágtam egy kis seprűnyéldarabot, és rézhuzalt tekertem köré. Az arduino folyamatosan táplálja ezt a rézhuzalt 5V -al. Négy tollrugót forrasztottam oldalra a labdával való jobb érintkezés érdekében.

A pontozási blokkok működése az, hogy a labda befejez egy kört, amely az Arduino bemeneti csapjához vezet. Tehát amit tettem, az alumínium fóliát ragasztottam a tok aljára (NEM ÉRINTEM A RÉZET), és a fóliát egy tűhöz vezetem az Arduino -n. Amikor a golyó a réznek és az alumíniumnak is üt, az áramkör befejeződik, és az Arduino jelet fog kapni.

Az összes kőtömböt alumínium fóliával kötöttem össze, de ne feledje, hogy a ragadós oldal NEM vezet elektromos áramot.

5. lépés: A játék hozzáadása a kapcsolattartóhoz

A játék hozzáadása a kapcsolatfelvételhez
A játék hozzáadása a kapcsolatfelvételhez

A flippergép alján, a flipperek között hozzáadtam egy játékot a kontaktushoz. Amikor a labda eléri ezt az érintkezőt, a játékos elveszít egy labdát. Az általam készített konstrukció nagyjából megegyezik a pontozó blokkokkal. Csak itt két csavart használtam, megint egy darab alumínium fóliát az alján.

6. lépés: A kábellyukak fúrása

A kábellyukak fúrása
A kábellyukak fúrása
A kábellyukak fúrása
A kábellyukak fúrása
A kábellyukak fúrása
A kábellyukak fúrása

Mielőtt elkezdenénk mindent bekötni az Arduino -ba, először ki kell fúrni néhány lyukat a kábelekhez. Fúrtam egy lyukat mindkét alumínium fóliadarabon, tehát egy lyukat az alumíniumfóliában a pontozóblokkok közelében, és egy lyukat az alufóliában a játék közelében az érintkezés felett.

Ezenkívül lyukat fúrtam a bal alsó sarokban, a falak között, az extra golyós Servo kapuhoz vezető kábelhez.

Az LCD -hez csatlakoztatott kábel alján lyukat kell találni.

7. lépés: Mindent bekötni

Mindent bekötni
Mindent bekötni
Mindent bekötni
Mindent bekötni

Azért készítettem ezt a vázlatot, hogy jobb áttekintést kapjak arról, hogy az összes kábelnek hova kell mennie. A keresztek azok a pontok, ahol a kábelek csatlakoznak. Próbáltam forrasztani, amennyire csak lehetséges, hogy minden egy kicsit stabilabb és megbízhatóbb legyen. A bekötés eltart egy ideig, de miután ez megtörtént, már majdnem ott vagy!

8. lépés: A kód feltöltése

Töltse fel az alábbi kódot Arduino készülékére, hogy életre keltse flippergépét!

// A könyvtár beillesztése az LCD -hez

#befoglalni #befoglalni

// Inicializálja az lcd adattűket

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

// Szervó létrehozása

SzervolabdaGateServo;

// Változók létrehozása az általunk használt csapokhoz

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

// Inicializálja a játékmenet változóit a flippergép számára

int pontszám = 0; int toplista = 500; bool toplistaReached = hamis; int labdák = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = hamis;

// futtassa ezt a kódot egyszer az első képkockánál

void setup () {// Állítsa be a pinMode módot azokhoz a csapokhoz, amelyeket használunk pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicializálja az LCD -t a szélesség és magasság megadásával

lcd. kezdet (16, 2);

// Rögzítse a golyóskapu szervót a megfelelő csaphoz

ballGateServo.attach (ballGateServoPin);

// Állítsa vissza a kapu szervóját a kiindulási helyzetbe

ballGateServo.write (0); }

// Futtassa ezt a kódot minden egyes keretben

void loop () {// A pin bemenetek rögzítése int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Hozzáadás a pontszámhoz, ha bemenet érkezik

if (scoreState) {tone (speakerPin, 1000); pontszám += 10; } else {noTone (4); }

// Vonja ki a labdákból, ha a gameover gitát kiváltják

if (gameoverState és! gameoverTriggered) {golyók -= 1; gameoverTriggered = igaz; gameoverTimer = gameoverTimerDuration; }

// Indítsa el a játékidőt, amint a labda nem érinti a játékvezető érintkezőjét

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

// Pillink villogása az LCD -re, és állítsa vissza a pontszámot és a labdákat

if (golyók <= 0) {lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); késleltetés (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Próbálja újra?"); késleltetés (250); } lcd.clear (); pontszám = 0; ballGateServo.write (0); toplistaReached = hamis; labdák = 3; }

if (score> toplista és! toplistaReached) {

lcd.setCursor (0, 0); for (int i = 5; i> = 1; i--) {lcd.clear (); késleltetés (250); lcd.print ("NEW HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Hirtelen halál!"); késleltetés (250); } lcd.clear (); labdák = 1; ballGateServo.write (120); toplista = pontszám; toplistaReached = igaz; }

// Frissítse a toplistát, ha az aktuális pontszám magasabb

if (score> toplista) {toplista = pontszám; }

// Állítsa a kurzort a 0 sorra

lcd.setCursor (0, 0); // Az aktuális (magas) pontszám kinyomtatása az LCD -re, ha (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Pontszám:" + String (score) + ""); }

// Állítsa a kurzort az 1. sorra

lcd.setCursor (0, 1);

// Nyomtassa ki az aktuális golyómennyiséget az LCD -re

lcd.print ("Balls:" + String (golyók)); }

Ajánlott: